[petsc4py] 01/01: New upstream version 3.8.0

Drew Parsons dparsons at moszumanska.debian.org
Fri Nov 3 07:39:00 UTC 2017


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

dparsons pushed a commit to annotated tag upstream/3.8.0
in repository petsc4py.

commit 7256f504d9178a7e663b88986876210a54122567
Author: Drew Parsons <dparsons at debian.org>
Date:   Fri Nov 3 14:19:04 2017 +0800

    New upstream version 3.8.0
---
 CHANGES.rst                                        |     6 +
 DESCRIPTION.rst                                    |     2 +-
 LICENSE.rst                                        |     2 +-
 PKG-INFO                                           |     7 +-
 README.rst                                         |     8 +-
 conf/baseconf.py                                   |     8 +-
 demo/dmplex/adaptivity.py                          |    30 +
 demo/ode/ce.py                                     |     4 +-
 demo/ode/heat.py                                   |     1 +
 demo/ode/orego.py                                  |     6 +-
 demo/ode/rober.py                                  |    12 +-
 demo/perftest/driver.c                             |    13 +-
 demo/poisson3d/del2mat.h                           |     5 +-
 demo/wrap-cython/Bratu3Dimpl.c                     |     6 -
 demo/wrap-cython/makefile                          |     4 +-
 demo/wrap-cython/setup.py                          |    66 +-
 demo/wrap-swig/Bratu3D.c                           |     6 -
 docs/CHANGES.html                                  |    37 +-
 docs/LICENSE.html                                  |    32 +-
 docs/apiref/api-objects.txt                        |   892 +-
 docs/apiref/class-tree.html                        |    55 +-
 docs/apiref/class_hierarchy_for__dmcomposi.png     |   Bin 2097 -> 0 bytes
 docs/apiref/class_hierarchy_for__dmda_vec_.png     |   Bin 1811 -> 0 bytes
 docs/apiref/class_hierarchy_for__is_buffer.png     |   Bin 1069 -> 0 bytes
 docs/apiref/class_hierarchy_for__mat_stenc.png     |   Bin 1418 -> 0 bytes
 docs/apiref/class_hierarchy_for__vec_buffe.png     |   Bin 1265 -> 0 bytes
 docs/apiref/class_hierarchy_for__vec_local.png     |   Bin 1581 -> 0 bytes
 docs/apiref/class_hierarchy_for_ao.png             |   Bin 1985 -> 0 bytes
 docs/apiref/class_hierarchy_for_asmtype.png        |   Bin 1639 -> 0 bytes
 docs/apiref/class_hierarchy_for_assemblyty.png     |   Bin 1519 -> 0 bytes
 docs/apiref/class_hierarchy_for_boundaryty.png     |   Bin 1703 -> 0 bytes
 docs/apiref/class_hierarchy_for_comm.png           |   Bin 785 -> 0 bytes
 docs/apiref/class_hierarchy_for_compositet.png     |   Bin 1671 -> 0 bytes
 docs/apiref/class_hierarchy_for_convergedr.png     |   Bin 2005 -> 0 bytes
 docs/apiref/class_hierarchy_for_convergedr_2.png   |   Bin 2005 -> 0 bytes
 docs/apiref/class_hierarchy_for_convergedr_3.png   |   Bin 2005 -> 0 bytes
 docs/apiref/class_hierarchy_for_dm.png             |   Bin 7308 -> 0 bytes
 docs/apiref/class_hierarchy_for_dmcomposit.png     |   Bin 3331 -> 0 bytes
 docs/apiref/class_hierarchy_for_dmda.png           |   Bin 2303 -> 0 bytes
 docs/apiref/class_hierarchy_for_dmplex.png         |   Bin 2549 -> 0 bytes
 docs/apiref/class_hierarchy_for_dmshell.png        |   Bin 3043 -> 0 bytes
 docs/apiref/class_hierarchy_for_elementtyp.png     |   Bin 1246 -> 0 bytes
 docs/apiref/class_hierarchy_for_equationty.png     |   Bin 1631 -> 0 bytes
 docs/apiref/class_hierarchy_for_error.png          |   Bin 8157 -> 0 bytes
 docs/apiref/class_hierarchy_for_exactfinal.png     |   Bin 1379 -> 0 bytes
 docs/apiref/class_hierarchy_for_factorshif.png     |   Bin 1862 -> 0 bytes
 docs/apiref/class_hierarchy_for_format.png         |   Bin 913 -> 0 bytes
 docs/apiref/class_hierarchy_for_gamgtype.png       |   Bin 1520 -> 0 bytes
 docs/apiref/class_hierarchy_for_gasmtype.png       |   Bin 1727 -> 0 bytes
 docs/apiref/class_hierarchy_for_infotype.png       |   Bin 1134 -> 0 bytes
 docs/apiref/class_hierarchy_for_insertmode.png     |   Bin 1325 -> 0 bytes
 docs/apiref/class_hierarchy_for_interpolat.png     |   Bin 1517 -> 0 bytes
 docs/apiref/class_hierarchy_for_is.png             |   Bin 1810 -> 0 bytes
 docs/apiref/class_hierarchy_for_ksp.png            |   Bin 2130 -> 0 bytes
 docs/apiref/class_hierarchy_for_lgmap.png          |   Bin 2337 -> 0 bytes
 docs/apiref/class_hierarchy_for_log.png            |   Bin 699 -> 0 bytes
 docs/apiref/class_hierarchy_for_logclass.png       |   Bin 1275 -> 0 bytes
 docs/apiref/class_hierarchy_for_logevent.png       |   Bin 1194 -> 0 bytes
 docs/apiref/class_hierarchy_for_logstage.png       |   Bin 1351 -> 0 bytes
 docs/apiref/class_hierarchy_for_maptype.png        |   Bin 1368 -> 0 bytes
 docs/apiref/class_hierarchy_for_mat.png            |   Bin 1944 -> 0 bytes
 docs/apiref/class_hierarchy_for_mgtype.png         |   Bin 1419 -> 0 bytes
 docs/apiref/class_hierarchy_for_mode.png           |   Bin 937 -> 0 bytes
 docs/apiref/class_hierarchy_for_normschedu.png     |   Bin 1733 -> 0 bytes
 docs/apiref/class_hierarchy_for_normtype.png       |   Bin 1347 -> 0 bytes
 docs/apiref/class_hierarchy_for_normtype_2.png     |   Bin 1347 -> 0 bytes
 docs/apiref/class_hierarchy_for_nullspace.png      |   Bin 2637 -> 0 bytes
 docs/apiref/class_hierarchy_for_object.png         |   Bin 29622 -> 0 bytes
 docs/apiref/class_hierarchy_for_option.png         |   Bin 1142 -> 0 bytes
 docs/apiref/class_hierarchy_for_option_2.png       |   Bin 1142 -> 0 bytes
 docs/apiref/class_hierarchy_for_options.png        |   Bin 1178 -> 0 bytes
 docs/apiref/class_hierarchy_for_orderingty.png     |   Bin 1760 -> 0 bytes
 docs/apiref/class_hierarchy_for_partitione.png     |   Bin 2404 -> 0 bytes
 docs/apiref/class_hierarchy_for_partitione_2.png   |   Bin 1567 -> 0 bytes
 docs/apiref/class_hierarchy_for_pc.png             |   Bin 1903 -> 0 bytes
 docs/apiref/class_hierarchy_for_problemtyp.png     |   Bin 1459 -> 0 bytes
 docs/apiref/class_hierarchy_for_random.png         |   Bin 2387 -> 0 bytes
 docs/apiref/class_hierarchy_for_scatter.png        |   Bin 2377 -> 0 bytes
 docs/apiref/class_hierarchy_for_scattermod.png     |   Bin 1764 -> 0 bytes
 docs/apiref/class_hierarchy_for_schurfactt.png     |   Bin 1728 -> 0 bytes
 docs/apiref/class_hierarchy_for_schurprety.png     |   Bin 1594 -> 0 bytes
 docs/apiref/class_hierarchy_for_section.png        |   Bin 2420 -> 0 bytes
 docs/apiref/class_hierarchy_for_sf.png             |   Bin 1882 -> 0 bytes
 docs/apiref/class_hierarchy_for_side.png           |   Bin 983 -> 0 bytes
 docs/apiref/class_hierarchy_for_size.png           |   Bin 927 -> 0 bytes
 docs/apiref/class_hierarchy_for_snes.png           |   Bin 2050 -> 0 bytes
 docs/apiref/class_hierarchy_for_sortype.png        |   Bin 1706 -> 0 bytes
 docs/apiref/class_hierarchy_for_stenciltyp.png     |   Bin 1467 -> 0 bytes
 docs/apiref/class_hierarchy_for_structure.png      |   Bin 1060 -> 0 bytes
 docs/apiref/class_hierarchy_for_sys.png            |   Bin 904 -> 0 bytes
 docs/apiref/class_hierarchy_for_tao.png            |   Bin 2064 -> 0 bytes
 docs/apiref/class_hierarchy_for_ts.png             |   Bin 1871 -> 0 bytes
 docs/apiref/class_hierarchy_for_type.png           |   Bin 884 -> 0 bytes
 docs/apiref/class_hierarchy_for_type_10.png        |   Bin 884 -> 0 bytes
 docs/apiref/class_hierarchy_for_type_11.png        |   Bin 884 -> 0 bytes
 docs/apiref/class_hierarchy_for_type_12.png        |   Bin 884 -> 0 bytes
 docs/apiref/class_hierarchy_for_type_2.png         |   Bin 884 -> 0 bytes
 docs/apiref/class_hierarchy_for_type_3.png         |   Bin 884 -> 0 bytes
 docs/apiref/class_hierarchy_for_type_4.png         |   Bin 884 -> 0 bytes
 docs/apiref/class_hierarchy_for_type_5.png         |   Bin 884 -> 0 bytes
 docs/apiref/class_hierarchy_for_type_6.png         |   Bin 884 -> 0 bytes
 docs/apiref/class_hierarchy_for_type_7.png         |   Bin 884 -> 0 bytes
 docs/apiref/class_hierarchy_for_type_8.png         |   Bin 884 -> 0 bytes
 docs/apiref/class_hierarchy_for_type_9.png         |   Bin 884 -> 0 bytes
 docs/apiref/class_hierarchy_for_vec.png            |   Bin 2051 -> 0 bytes
 docs/apiref/class_hierarchy_for_viewer.png         |   Bin 3234 -> 0 bytes
 docs/apiref/class_hierarchy_for_viewerhdf5.png     |   Bin 3209 -> 0 bytes
 docs/apiref/epydoc.css                             |     8 +-
 docs/apiref/help.html                              |     6 +-
 docs/apiref/identifier-index.html                  |  4005 +-
 docs/apiref/module-tree.html                       |     2 +-
 docs/apiref/petsc4py-module.html                   |    21 +-
 docs/apiref/petsc4py.PETSc-module.html             |   208 +-
 docs/apiref/petsc4py.PETSc.AO-class.html           |    39 +-
 docs/apiref/petsc4py.PETSc.AO.Type-class.html      |    74 +-
 docs/apiref/petsc4py.PETSc.Comm-class.html         |    37 +-
 docs/apiref/petsc4py.PETSc.DM-class.html           |   276 +-
 .../petsc4py.PETSc.DM.BoundaryType-class.html      |    74 +-
 docs/apiref/petsc4py.PETSc.DM.Type-class.html      |    74 +-
 docs/apiref/petsc4py.PETSc.DMComposite-class.html  |    49 +-
 docs/apiref/petsc4py.PETSc.DMDA-class.html         |    61 +-
 .../petsc4py.PETSc.DMDA.ElementType-class.html     |    74 +-
 ...etsc4py.PETSc.DMDA.InterpolationType-class.html |    74 +-
 .../petsc4py.PETSc.DMDA.StencilType-class.html     |    74 +-
 docs/apiref/petsc4py.PETSc.DMPlex-class.html       |   349 +-
 docs/apiref/petsc4py.PETSc.DMShell-class.html      |   106 +-
 docs/apiref/petsc4py.PETSc.Error-class.html        |    32 +-
 docs/apiref/petsc4py.PETSc.IS-class.html           |    39 +-
 docs/apiref/petsc4py.PETSc.IS.Type-class.html      |    74 +-
 docs/apiref/petsc4py.PETSc.InsertMode-class.html   |    74 +-
 docs/apiref/petsc4py.PETSc.KSP-class.html          |    47 +-
 .../petsc4py.PETSc.KSP.ConvergedReason-class.html  |    74 +-
 docs/apiref/petsc4py.PETSc.KSP.NormType-class.html |    74 +-
 docs/apiref/petsc4py.PETSc.KSP.Type-class.html     |   115 +-
 docs/apiref/petsc4py.PETSc.LGMap-class.html        |   106 +-
 ...tml => petsc4py.PETSc.LGMap.MapMode-class.html} |    82 +-
 ...s.html => petsc4py.PETSc.LGMap.Type-class.html} |    86 +-
 docs/apiref/petsc4py.PETSc.Log-class.html          |    55 +-
 docs/apiref/petsc4py.PETSc.LogClass-class.html     |    37 +-
 docs/apiref/petsc4py.PETSc.LogEvent-class.html     |    37 +-
 docs/apiref/petsc4py.PETSc.LogStage-class.html     |    37 +-
 docs/apiref/petsc4py.PETSc.Mat-class.html          |   202 +-
 .../petsc4py.PETSc.Mat.AssemblyType-class.html     |    74 +-
 .../petsc4py.PETSc.Mat.FactorShiftType-class.html  |    74 +-
 docs/apiref/petsc4py.PETSc.Mat.InfoType-class.html |    74 +-
 docs/apiref/petsc4py.PETSc.Mat.Option-class.html   |    74 +-
 .../petsc4py.PETSc.Mat.OrderingType-class.html     |    74 +-
 docs/apiref/petsc4py.PETSc.Mat.SORType-class.html  |    74 +-
 .../apiref/petsc4py.PETSc.Mat.Structure-class.html |    74 +-
 docs/apiref/petsc4py.PETSc.Mat.Type-class.html     |   116 +-
 docs/apiref/petsc4py.PETSc.NormType-class.html     |    74 +-
 docs/apiref/petsc4py.PETSc.NullSpace-class.html    |    52 +-
 docs/apiref/petsc4py.PETSc.Object-class.html       |    80 +-
 docs/apiref/petsc4py.PETSc.Options-class.html      |    36 +-
 docs/apiref/petsc4py.PETSc.PC-class.html           |    97 +-
 docs/apiref/petsc4py.PETSc.PC.ASMType-class.html   |    74 +-
 .../petsc4py.PETSc.PC.CompositeType-class.html     |    74 +-
 docs/apiref/petsc4py.PETSc.PC.GAMGType-class.html  |    74 +-
 docs/apiref/petsc4py.PETSc.PC.GASMType-class.html  |    74 +-
 ...ml => petsc4py.PETSc.PC.MGCycleType-class.html} |    88 +-
 docs/apiref/petsc4py.PETSc.PC.MGType-class.html    |    74 +-
 .../petsc4py.PETSc.PC.SchurFactType-class.html     |    74 +-
 .../petsc4py.PETSc.PC.SchurPreType-class.html      |    74 +-
 docs/apiref/petsc4py.PETSc.PC.Side-class.html      |    74 +-
 docs/apiref/petsc4py.PETSc.PC.Type-class.html      |    74 +-
 docs/apiref/petsc4py.PETSc.Partitioner-class.html  |    39 +-
 .../petsc4py.PETSc.PartitionerType-class.html      |    74 +-
 docs/apiref/petsc4py.PETSc.Random-class.html       |    39 +-
 docs/apiref/petsc4py.PETSc.Random.Type-class.html  |    74 +-
 docs/apiref/petsc4py.PETSc.SF-class.html           |    39 +-
 docs/apiref/petsc4py.PETSc.SF.Type-class.html      |    74 +-
 docs/apiref/petsc4py.PETSc.SNES-class.html         |   175 +-
 .../petsc4py.PETSc.SNES.ConvergedReason-class.html |    74 +-
 .../petsc4py.PETSc.SNES.NormSchedule-class.html    |    74 +-
 docs/apiref/petsc4py.PETSc.SNES.Type-class.html    |    74 +-
 docs/apiref/petsc4py.PETSc.Scatter-class.html      |    39 +-
 docs/apiref/petsc4py.PETSc.ScatterMode-class.html  |    74 +-
 docs/apiref/petsc4py.PETSc.Section-class.html      |    35 +-
 docs/apiref/petsc4py.PETSc.Sys-class.html          |    72 +-
 docs/apiref/petsc4py.PETSc.TAO-class.html          |    47 +-
 docs/apiref/petsc4py.PETSc.TAO.Reason-class.html   |     6 +-
 docs/apiref/petsc4py.PETSc.TAO.Type-class.html     |     6 +-
 docs/apiref/petsc4py.PETSc.TS-class.html           |   417 +-
 .../petsc4py.PETSc.TS.ConvergedReason-class.html   |    74 +-
 .../petsc4py.PETSc.TS.EquationType-class.html      |    74 +-
 .../petsc4py.PETSc.TS.ExactFinalTime-class.html    |    74 +-
 .../petsc4py.PETSc.TS.ProblemType-class.html       |    74 +-
 ...ss.html => petsc4py.PETSc.TS.RKType-class.html} |    85 +-
 docs/apiref/petsc4py.PETSc.TS.Type-class.html      |    76 +-
 docs/apiref/petsc4py.PETSc.Vec-class.html          |    59 +-
 docs/apiref/petsc4py.PETSc.Vec.Option-class.html   |    74 +-
 docs/apiref/petsc4py.PETSc.Vec.Type-class.html     |    74 +-
 docs/apiref/petsc4py.PETSc.Viewer-class.html       |   235 +-
 .../apiref/petsc4py.PETSc.Viewer.Format-class.html |    96 +-
 docs/apiref/petsc4py.PETSc.Viewer.Mode-class.html  |    74 +-
 docs/apiref/petsc4py.PETSc.Viewer.Size-class.html  |    74 +-
 docs/apiref/petsc4py.PETSc.Viewer.Type-class.html  |    81 +-
 docs/apiref/petsc4py.PETSc.ViewerHDF5-class.html   |    48 +-
 .../petsc4py.PETSc._DMComposite_access-class.html  |    55 +-
 .../petsc4py.PETSc._DMDA_Vec_array-class.html      |    37 +-
 docs/apiref/petsc4py.PETSc._IS_buffer-class.html   |    37 +-
 docs/apiref/petsc4py.PETSc._Mat_Stencil-class.html |    37 +-
 .../petsc4py.PETSc._Vec_LocalForm-class.html       |    54 +-
 docs/apiref/petsc4py.PETSc._Vec_buffer-class.html  |    37 +-
 docs/apiref/petsc4py.lib-module.html               |     2 +-
 docs/apiref/redirect.html                          |     2 +-
 docs/apiref/toc-everything.html                    |    14 +-
 docs/apiref/toc-petsc4py-module.html               |     3 +-
 docs/index.html                                    |    32 +-
 docs/index.rst                                     |     2 +-
 docs/petsc4py.1                                    |    26 +-
 docs/petsc4py.info                                 |   114 +-
 docs/petsc4py.pdf                                  |   Bin 98083 -> 111155 bytes
 docs/source/Makefile                               |   174 +-
 docs/source/citing.rst                             |     2 +-
 docs/source/conf.py                                |   275 +-
 docs/source/install.rst                            |    12 +-
 docs/source/links.txt                              |     2 -
 docs/source/make.bat                               |   264 +-
 docs/source/overview.rst                           |     2 +-
 docs/source/sphinxfix.sty                          |    34 -
 docs/usrman/.buildinfo                             |     2 +-
 .../usrman/_sources/{citing.txt => citing.rst.txt} |     2 +-
 docs/usrman/_sources/{index.txt => index.rst.txt}  |     0
 .../_sources/{install.txt => install.rst.txt}      |    12 +-
 .../usrman/_sources/{manual.txt => manual.rst.txt} |     0
 .../_sources/{overview.txt => overview.rst.txt}    |     2 +-
 .../_sources/{tutorial.txt => tutorial.rst.txt}    |     0
 docs/usrman/_static/basic.css                      |   158 +-
 docs/usrman/_static/{default.css => classic.css}   |    19 +-
 docs/usrman/_static/comment-bright.png             |   Bin 3500 -> 756 bytes
 docs/usrman/_static/comment-close.png              |   Bin 3578 -> 829 bytes
 docs/usrman/_static/comment.png                    |   Bin 3445 -> 641 bytes
 docs/usrman/_static/default.css                    |   257 +-
 docs/usrman/_static/doctools.js                    |    55 +-
 docs/usrman/_static/down-pressed.png               |   Bin 368 -> 222 bytes
 docs/usrman/_static/down.png                       |   Bin 363 -> 202 bytes
 docs/usrman/_static/file.png                       |   Bin 392 -> 286 bytes
 docs/usrman/_static/jquery-3.1.0.js                | 10074 +++
 docs/usrman/_static/jquery.js                      |     6 +-
 docs/usrman/_static/minus.png                      |   Bin 199 -> 90 bytes
 docs/usrman/_static/plus.png                       |   Bin 199 -> 90 bytes
 docs/usrman/_static/pygments.css                   |     4 +
 docs/usrman/_static/searchtools.js                 |   168 +-
 docs/usrman/_static/sidebar.js                     |     2 +-
 docs/usrman/_static/underscore-1.3.1.js            |   999 +
 docs/usrman/_static/up-pressed.png                 |   Bin 372 -> 214 bytes
 docs/usrman/_static/up.png                         |   Bin 363 -> 203 bytes
 docs/usrman/_static/websupport.js                  |    32 +-
 docs/usrman/citing.html                            |    58 +-
 docs/usrman/genindex.html                          |   136 +-
 docs/usrman/index.html                             |    58 +-
 docs/usrman/install.html                           |   110 +-
 docs/usrman/manual.html                            |    56 +-
 docs/usrman/objects.inv                            |     9 +-
 docs/usrman/overview.html                          |    60 +-
 docs/usrman/search.html                            |    35 +-
 docs/usrman/searchindex.js                         |     2 +-
 docs/usrman/tutorial.html                          |    58 +-
 petsc4py.egg-info/PKG-INFO                         |     7 +-
 petsc4py.egg-info/SOURCES.txt                      |   110 +-
 setup.cfg                                          |     1 -
 setup.py                                           |     7 +-
 src/PETSc.pxd                                      |     4 +
 src/PETSc/DM.pyx                                   |   143 +-
 src/PETSc/DMComposite.pyx                          |    10 +-
 src/PETSc/DMDA.pyx                                 |     6 +-
 src/PETSc/DMPlex.pyx                               |   138 +-
 src/PETSc/DMShell.pyx                              |    42 +-
 src/PETSc/IS.pyx                                   |    74 +-
 src/PETSc/KSP.pyx                                  |    41 +-
 src/PETSc/Log.pyx                                  |    12 +-
 src/PETSc/Mat.pyx                                  |   210 +-
 src/PETSc/Object.pyx                               |    11 +-
 src/PETSc/Options.pyx                              |     2 +-
 src/PETSc/PC.pyx                                   |    47 +-
 src/PETSc/PETSc.pyx                                |     8 +-
 src/PETSc/SNES.pyx                                 |    94 +-
 src/PETSc/Scatter.pyx                              |    23 +-
 src/PETSc/Section.pyx                              |     2 +-
 src/PETSc/Sys.pyx                                  |    68 +-
 src/PETSc/TAO.pyx                                  |    22 +-
 src/PETSc/TS.pyx                                   |   257 +-
 src/PETSc/Vec.pyx                                  |    62 +-
 src/PETSc/Viewer.pyx                               |    59 +-
 src/PETSc/petscdef.pxi                             |     4 +-
 src/PETSc/petscdm.pxi                              |    17 +
 src/PETSc/petscdmcomposite.pxi                     |     4 +-
 src/PETSc/petscdmda.pxi                            |     4 +-
 src/PETSc/petscdmplex.pxi                          |    22 +-
 src/PETSc/petscdmshell.pxi                         |   139 +
 src/PETSc/petscis.pxi                              |    14 +-
 src/PETSc/petscksp.pxi                             |    13 +-
 src/PETSc/petsclinesearch.pxi                      |    13 +
 src/PETSc/petscmat.pxi                             |    16 +-
 src/PETSc/petscobj.pxi                             |     6 +-
 src/PETSc/petscopt.pxi                             |     2 +-
 src/PETSc/petscpc.pxi                              |     7 +-
 src/PETSc/petscsnes.pxi                            |    30 +
 src/PETSc/petscsys.pxi                             |    17 +-
 src/PETSc/petscts.pxi                              |   209 +-
 src/PETSc/petscvec.pxi                             |     5 +-
 src/PETSc/petscvwr.pxi                             |    13 +-
 src/__init__.py                                    |    21 +-
 src/include/compat/hdf5.h                          |    20 +-
 src/include/compat/hypre.h                         |    20 +-
 src/include/compat/mpi.h                           |    57 +-
 src/include/compat/mumps.h                         |    24 +-
 src/include/compat/tao.h                           |    10 +-
 src/include/custom.h                               |    96 +-
 src/include/initpkg.h                              |     4 -
 src/include/petsc4py/PETSc.pxd                     |     3 +
 src/include/petsc4py/petsc4py.PETSc.h              |    45 +-
 src/include/petsc4py/petsc4py.PETSc_api.h          |     2 +-
 src/include/petsc4py/petsc4py.i                    |    18 +-
 src/lib/__init__.py                                |     4 +-
 src/libpetsc4py/custom.h                           |    17 +-
 src/libpetsc4py/libpetsc4py.c                      | 11331 +--
 src/libpetsc4py/libpetsc4py.h                      |    29 +-
 src/libpetsc4py/libpetsc4py.pyx                    |    45 +-
 src/petsc4py.PETSc.c                               | 77221 ++++++++++++-------
 src/petsc4py.PETSc.pyx                             |     6 +
 test/runtests.py                                   |    62 +-
 test/test_dmda.py                                  |    30 +
 test/test_dmplex.py                                |    45 +
 test/test_dmshell.py                               |    26 +-
 test/test_ksp.py                                   |     6 +-
 test/test_mat_aij.py                               |    27 +-
 test/test_snes.py                                  |     5 +
 test/test_sys.py                                   |     5 -
 test/test_ts.py                                    |    16 +-
 test/test_ts_py.py                                 |     7 +-
 332 files changed, 75377 insertions(+), 41826 deletions(-)

diff --git a/CHANGES.rst b/CHANGES.rst
index 720c1eb..ff8ca61 100644
--- a/CHANGES.rst
+++ b/CHANGES.rst
@@ -6,6 +6,12 @@ CHANGES: PETSc for Python
 :Contact: dalcinl at gmail.com
 
 
+Release 3.8.0
+=============
+
+- Update to PETSc 3.8 release.
+
+
 Release 3.7.0
 =============
 
diff --git a/DESCRIPTION.rst b/DESCRIPTION.rst
index 640e0d2..5bc3c9b 100644
--- a/DESCRIPTION.rst
+++ b/DESCRIPTION.rst
@@ -49,5 +49,5 @@ project.
   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.
+  *PETSc Users Manual*, ANL-95/11 - Revision 3.8, 2017.
   http://www.mcs.anl.gov/petsc/petsc-current/docs/manual.pdf
diff --git a/LICENSE.rst b/LICENSE.rst
index 2a42c14..efbc6b1 100644
--- a/LICENSE.rst
+++ b/LICENSE.rst
@@ -6,7 +6,7 @@ LICENSE: PETSc for Python
 :Contact: dalcinl at gmail.com
 
 
-Copyright (c) 2016, Lisandro Dalcin.
+Copyright (c) 2017, 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 ed8ef1e..a58768c 100644
--- a/PKG-INFO
+++ b/PKG-INFO
@@ -1,12 +1,13 @@
 Metadata-Version: 1.1
 Name: petsc4py
-Version: 3.7.0
+Version: 3.8.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.7.0.tar.gz
+Download-URL: https://bitbucket.org/petsc/petsc4py/downloads/petsc4py-3.8.0.tar.gz
+Description-Content-Type: UNKNOWN
 Description: PETSc for Python
         ================
         
@@ -58,7 +59,7 @@ Description: PETSc for Python
           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.
+          *PETSc Users Manual*, ANL-95/11 - Revision 3.8, 2017.
           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 423092d..26266a9 100644
--- a/README.rst
+++ b/README.rst
@@ -13,7 +13,7 @@ Dependencies
 
 * A matching version of PETSc_  built with *shared/dynamic libraries*.
 
-* Python_ 2.6, 2.7, 3.2 or above.
+* Python_ 2.6, 2.7, 3.3 or above.
 
 * A recent NumPy_ release.
 
@@ -23,3 +23,9 @@ Dependencies
 .. _Python: http://www.python.org
 .. _NumPy:  http://www.numpy.org
 .. _Cython: http://www.cython.org
+
+Documentation
+-------------
+* http://petsc4py.readthedocs.org/, This does not contain the epydoc-generated API reference.
+
+* https://pythonhosted.org/petsc4py/, This is for the last release, not the in-development version.
diff --git a/conf/baseconf.py b/conf/baseconf.py
index 9d396cf..1a8cab0 100644
--- a/conf/baseconf.py
+++ b/conf/baseconf.py
@@ -122,7 +122,7 @@ class PetscConfig:
             'minor'  : re.compile(r"#define\s+PETSC_VERSION_MINOR\s+(\d+)"),
             'micro'  : re.compile(r"#define\s+PETSC_VERSION_SUBMINOR\s+(\d+)"),
             'patch'  : re.compile(r"#define\s+PETSC_VERSION_PATCH\s+(\d+)"),
-            'release': re.compile(r"#define\s+PETSC_VERSION_RELEASE\s+(\d+)"),
+            'release': re.compile(r"#define\s+PETSC_VERSION_RELEASE\s+(-*\d+)"),
             }
         petscversion_h = os.path.join(petsc_dir, 'include', 'petscversion.h')
         with open(petscversion_h, 'rt') as f: data = f.read()
@@ -130,7 +130,7 @@ class PetscConfig:
         minor = int(version_re['minor'].search(data).groups()[0])
         micro = int(version_re['micro'].search(data).groups()[0])
         release = int(version_re['release'].search(data).groups()[0])
-        return  (major, minor, micro), bool(release)
+        return  (major, minor, micro), (release == 1)
 
     def _get_petsc_config(self, petsc_dir, petsc_arch):
         from os.path import join, isdir, exists
@@ -183,7 +183,9 @@ class PetscConfig:
         petsc_inc = flaglist(self['PETSC_CC_INCLUDES'])
         petsc_lib = flaglist(
             '-L%s %s' % (self['PETSC_LIB_DIR'], self['PETSC_LIB_BASIC']))
-        petsc_lib['runtime_library_dirs'].append(self['PETSC_LIB_DIR'])
+        # runtime_library_dirs is not supported on Windows
+        if sys.platform != 'win32':
+            petsc_lib['runtime_library_dirs'].append(self['PETSC_LIB_DIR'])
 
         # Link in extra libraries on static builds
         if self['BUILDSHAREDLIB'] != 'yes':
diff --git a/demo/dmplex/adaptivity.py b/demo/dmplex/adaptivity.py
new file mode 100644
index 0000000..db168e7
--- /dev/null
+++ b/demo/dmplex/adaptivity.py
@@ -0,0 +1,30 @@
+import sys,petsc4py
+petsc4py.init(sys.argv)
+from petsc4py import PETSc
+import numpy as np
+
+OptDB = PETSc.Options()
+
+dim = OptDB.getInt('dim', 2)
+plex = PETSc.DMPlex().createBoxMesh(dim, 4)
+plex.view()
+
+dim = plex.getDimension()
+vStart, vEnd = plex.getDepthStratum(0)
+numVertices = vEnd-vStart
+
+# Create a metric tensor field corresponding to a uniform mesh size of 0.1
+metric_array = np.zeros([numVertices,dim,dim])
+for met in metric_array:
+    met[:,:] = np.diag([100]*dim)
+metric = PETSc.Vec().createWithArray(metric_array)
+
+# Call adapt routine - boundary label None by default
+newplex = plex.adapt(metric)
+newplex.view()
+
+# Write to VTK file
+viewer = PETSc.Viewer().createVTK('mesh_base.vtk', 'w')
+viewer(plex)
+viewer = PETSc.Viewer().createVTK('mesh_adapt.vtk', 'w')
+viewer(newplex)
diff --git a/demo/ode/ce.py b/demo/ode/ce.py
index be9c4cd..67bde2b 100644
--- a/demo/ode/ce.py
+++ b/demo/ode/ce.py
@@ -33,12 +33,13 @@ lambda_ = OptDB.getScalar('lambda', 10.0)
 ode = CE(lambda_)
 
 J = PETSc.Mat().createDense([ode.n,ode.n], comm=ode.comm)
+J.setUp()
 x = PETSc.Vec().createSeq(ode.n, comm=ode.comm)
 f = x.duplicate()
 
 ts = PETSc.TS().create(comm=ode.comm)
 ts.setProblemType(ts.ProblemType.NONLINEAR)
-ts.setType(ts.Type.GL)
+ts.setType(ts.Type.GLLE)
 
 ts.setIFunction(ode.evalFunction, f)
 ts.setIJacobian(ode.evalJacobian, J)
@@ -47,6 +48,7 @@ ts.setTime(0.0)
 ts.setTimeStep(0.001)
 ts.setMaxTime(10)
 ts.setMaxSteps(10000)
+ts.setExactFinalTime(PETSc.TS.ExactFinalTime.INTERPOLATE)
 
 class Monitor(object):
     def __init__(self, ode):
diff --git a/demo/ode/heat.py b/demo/ode/heat.py
index 2c5a356..62eeefb 100644
--- a/demo/ode/heat.py
+++ b/demo/ode/heat.py
@@ -109,6 +109,7 @@ ts.setTime(0.0)
 ts.setTimeStep(ode.h**2)
 ts.setMaxTime(1)
 ts.setMaxSteps(100)
+ts.setExactFinalTime(PETSc.TS.ExactFinalTime.INTERPOLATE)
 ts.setMaxSNESFailures(-1)       # allow an unlimited number of failures (step will be rejected and retried)
 
 snes = ts.getSNES()             # Nonlinear solver
diff --git a/demo/ode/orego.py b/demo/ode/orego.py
index d8613ac..bbe0f56 100644
--- a/demo/ode/orego.py
+++ b/demo/ode/orego.py
@@ -29,6 +29,7 @@ OptDB = PETSc.Options()
 ode = Orego()
 
 J = PETSc.Mat().createDense([ode.n, ode.n], comm=ode.comm)
+J.setUp()
 x = PETSc.Vec().createSeq(ode.n, comm=ode.comm)
 f = x.duplicate()
 
@@ -48,6 +49,7 @@ ts.setTime(0.0)
 ts.setTimeStep(0.1)
 ts.setMaxTime(360)
 ts.setMaxSteps(2000)
+ts.setExactFinalTime(PETSc.TS.ExactFinalTime.INTERPOLATE)
 ts.setMaxSNESFailures(-1)       # allow an unlimited number of failures (step will be rejected and retried)
 
 # Set a different tolerance on each variable. Can use a scalar or a vector for either or both atol and rtol.
@@ -83,14 +85,14 @@ if OptDB.getBool('plot_history', True):
 
     rc('text', usetex=True)
     pylab.suptitle('Oregonator: TS \\texttt{%s}' % ts.getType())
-    pylab.subplot(2,2,0)
+    pylab.subplot(2,2,1)
     pylab.subplots_adjust(wspace=0.3)
     pylab.semilogy(ii[:-1], np.diff(tt), )
     pylab.xlabel('step number')
     pylab.ylabel('timestep')
 
     for i in range(0,3):
-        pylab.subplot(2,2,i+1)
+        pylab.subplot(2,2,i+2)
         pylab.semilogy(tt, xx[:,i], "rgb"[i])
         pylab.xlabel('time')
         pylab.ylabel('$x_%d$' % i)
diff --git a/demo/ode/rober.py b/demo/ode/rober.py
index b1add9d..9921e94 100644
--- a/demo/ode/rober.py
+++ b/demo/ode/rober.py
@@ -32,6 +32,7 @@ OptDB = PETSc.Options()
 ode = Rober()
 
 J = PETSc.Mat().createDense([ode.n, ode.n], comm=ode.comm)
+J.setUp()
 x = PETSc.Vec().createSeq(ode.n, comm=ode.comm)
 f = x.duplicate()
 
@@ -52,6 +53,7 @@ ts.setTime(0.0)
 ts.setTimeStep(.001)
 ts.setMaxTime(1e30)
 ts.setMaxSteps(100)
+ts.setExactFinalTime(PETSc.TS.ExactFinalTime.INTERPOLATE)
 
 ts.setFromOptions()
 ode.evalSolution(0.0, x)
@@ -70,14 +72,16 @@ ii = np.asarray([v[0] for v in history])
 tt = np.asarray([v[1] for v in history])
 xx = np.asarray([v[2] for v in history])
 
-pylab.figure()
+pylab.suptitle('Rober')
+pylab.subplot(2,2,1)
+pylab.subplots_adjust(wspace=0.3)
 pylab.semilogy(ii[:-1], np.diff(tt), )
-pylab.xlabel('step')
+pylab.xlabel('step number')
 pylab.ylabel('timestep')
 
 for i in range(0,3):
-    pylab.figure()
-    pylab.plot(tt, xx[:,i], "rgb"[i])
+    pylab.subplot(2,2,i+2)
+    pylab.semilogx(tt, xx[:,i], "rgb"[i])
     pylab.xlabel('t')
     pylab.ylabel('x%d' % i)
 
diff --git a/demo/perftest/driver.c b/demo/perftest/driver.c
index 3ee5bc9..37cfe18 100644
--- a/demo/perftest/driver.c
+++ b/demo/perftest/driver.c
@@ -12,8 +12,6 @@ typedef struct AppCtx {
   PetscScalar h[3];
 } AppCtx;
 
-#undef __FUNCT__
-#define __FUNCT__ "FormInitial"
 PetscErrorCode FormInitial(PetscReal t, Vec X, void *ctx)
 {
   PetscScalar    *x;
@@ -29,8 +27,6 @@ PetscErrorCode FormInitial(PetscReal t, Vec X, void *ctx)
   PetscFunctionReturn(0);
 }
 
-#undef __FUNCT__
-#define __FUNCT__ "FormFunction"
 PetscErrorCode FormFunction(TS ts, PetscReal t, Vec X, Vec Xdot,Vec F, void *ctx)
 {
   const PetscScalar *x;
@@ -52,8 +48,6 @@ PetscErrorCode FormFunction(TS ts, PetscReal t, Vec X, Vec Xdot,Vec F, void *ctx
   PetscFunctionReturn(0);
 }
 
-#undef __FUNCT__
-#define __FUNCT__ "RunTest"
 PetscErrorCode RunTest(int nx, int ny, int nz, int loops, double *wt)
 {
   Vec            x,f;
@@ -78,7 +72,8 @@ PetscErrorCode RunTest(int nx, int ny, int nz, int loops, double *wt)
   ierr = TSThetaSetTheta(ts,1.0);CHKERRQ(ierr);
   ierr = TSSetTimeStep(ts,0.01);CHKERRQ(ierr);
   ierr = TSSetTime(ts,0.0);CHKERRQ(ierr);
-  ierr = TSSetDuration(ts,10,1.0);CHKERRQ(ierr);
+  ierr = TSSetMaxTime(ts,1.0);CHKERRQ(ierr);
+  ierr = TSSetMaxSteps(ts,10);CHKERRQ(ierr);
   ierr = TSSetExactFinalTime(ts,TS_EXACTFINALTIME_STEPOVER);CHKERRQ(ierr);
 
   ierr = TSSetSolution(ts,x);CHKERRQ(ierr);
@@ -110,8 +105,6 @@ PetscErrorCode RunTest(int nx, int ny, int nz, int loops, double *wt)
   PetscFunctionReturn(0);
 }
 
-#undef __FUNCT__
-#define __FUNCT__ "GetInt"
 PetscErrorCode GetInt(const char* name, PetscInt *v, PetscInt defv)
 {
   PetscErrorCode ierr;
@@ -121,8 +114,6 @@ PetscErrorCode GetInt(const char* name, PetscInt *v, PetscInt defv)
   PetscFunctionReturn(0);
 }
 
-#undef __FUNCT__
-#define __FUNCT__ "main"
 int main(int argc, char *argv[])
 {
   double         wt;
diff --git a/demo/poisson3d/del2mat.h b/demo/poisson3d/del2mat.h
index e129947..f5d4480 100644
--- a/demo/poisson3d/del2mat.h
+++ b/demo/poisson3d/del2mat.h
@@ -19,8 +19,6 @@ typedef struct {
   PetscScalar *F;
 } Del2Mat;
 
-#undef  __FUNCT__  
-#define __FUNCT__ "Del2Mat_mult"
 /* y <- A * x */
 PetscErrorCode Del2Mat_mult(Mat A, Vec x, Vec y) 
 {
@@ -40,8 +38,7 @@ PetscErrorCode Del2Mat_mult(Mat A, Vec x, Vec y)
   ierr = VecRestoreArray(y,&yy);CHKERRQ(ierr);
   PetscFunctionReturn(0);
 }
-#undef  __FUNCT__  
-#define __FUNCT__ "Del2Mat_diag"
+
 /*D_i <- A_ii */
 PetscErrorCode Del2Mat_diag(Mat A, Vec D) 
 {
diff --git a/demo/wrap-cython/Bratu3Dimpl.c b/demo/wrap-cython/Bratu3Dimpl.c
index 0aeac90..26bcdf9 100644
--- a/demo/wrap-cython/Bratu3Dimpl.c
+++ b/demo/wrap-cython/Bratu3Dimpl.c
@@ -19,8 +19,6 @@
 
 #include "Bratu3Dimpl.h"
 
-#undef  __FUNCT__
-#define __FUNCT__ "FormInitGuess"
 PetscErrorCode FormInitGuess(DM da, Vec X, Params *p)
 {
   PetscInt       i,j,k,Mx,My,Mz,xs,ys,zs,xm,ym,zm;
@@ -91,8 +89,6 @@ PetscErrorCode FormInitGuess(DM da, Vec X, Params *p)
 }
 
 
-#undef  __FUNCT__
-#define __FUNCT__ "FormFunction"
 PetscErrorCode FormFunction(DM da, Vec X, Vec F, Params *p)
 {
   PetscInt       i,j,k,Mx,My,Mz,xs,ys,zs,xm,ym,zm;
@@ -183,8 +179,6 @@ PetscErrorCode FormFunction(DM da, Vec X, Vec F, Params *p)
 }
 
 
-#undef  __FUNCT__
-#define __FUNCT__ "FormJacobian"
 PetscErrorCode FormJacobian(DM da, Vec X, Mat J, Params *p)
 {
   PetscInt       i,j,k,Mx,My,Mz,xs,ys,zs,xm,ym,zm;
diff --git a/demo/wrap-cython/makefile b/demo/wrap-cython/makefile
index c94090a..2765573 100644
--- a/demo/wrap-cython/makefile
+++ b/demo/wrap-cython/makefile
@@ -17,9 +17,9 @@ run: build
 	${MPIEXEC} ${PYTHON} ${SCRIPT}.py
 
 ${MODULE}.so: ${MODULE}.pyx ${MODULE}impl.h ${MODULE}impl.c
-	CC=${CC} F90=${FC} LDSHARED='${CLINKER} -shared' \
+	CC=${CC} F90=${FC} \
 	${PYTHON} setup.py -q build_ext --inplace
-	${RM} -r build ${MODULE}_wrap.c
+	${RM} -r build ${MODULE}.c
 
 .PHONY:clean
 clean::
diff --git a/demo/wrap-cython/setup.py b/demo/wrap-cython/setup.py
index f9bcbb3..5b4c690 100644
--- a/demo/wrap-cython/setup.py
+++ b/demo/wrap-cython/setup.py
@@ -2,25 +2,14 @@
 
 #$ python setup.py build_ext --inplace
 
-from numpy.distutils.command import build_src
+from distutils.core import setup
+from distutils.extension import Extension
+from Cython.Build import cythonize
 
-# a bit of monkeypatching ...
-import Cython.Compiler.Main
-build_src.Pyrex = Cython
-build_src.have_pyrex = True
-def have_pyrex():
-    import sys
-    try:
-        import Cython.Compiler.Main
-        sys.modules['Pyrex'] = Cython
-        sys.modules['Pyrex.Compiler'] = Cython.Compiler
-        sys.modules['Pyrex.Compiler.Main'] = Cython.Compiler.Main
-        return True
-    except ImportError:
-        return False
-build_src.have_pyrex = have_pyrex
+import numpy
+import petsc4py
 
-def configuration(parent_package='',top_path=None):
+def configure():
     INCLUDE_DIRS = []
     LIBRARY_DIRS = []
     LIBRARIES    = []
@@ -38,27 +27,30 @@ def configuration(parent_package='',top_path=None):
         if PETSC_ARCH: pass # XXX should warn ...
         INCLUDE_DIRS += [join(PETSC_DIR, 'include')]
         LIBRARY_DIRS += [join(PETSC_DIR, 'lib')]
-    LIBRARIES += [#'petscts', 'petscsnes', 'petscksp',
-                  #'petscdm', 'petscmat',  'petscvec',
-                  'petsc']
+    LIBRARIES += ['petsc']
 
     # PETSc for Python
-    import petsc4py
     INCLUDE_DIRS += [petsc4py.get_include()]
 
-    # Configuration
-    from numpy.distutils.misc_util import Configuration
-    config = Configuration('', parent_package, top_path)
-    config.add_extension('Bratu3D',
-                         sources = ['Bratu3D.pyx',
-                                    'Bratu3Dimpl.c'],
-                         depends = ['Bratu3Dimpl.h'],
-                         include_dirs=INCLUDE_DIRS + [os.curdir],
-                         libraries=LIBRARIES,
-                         library_dirs=LIBRARY_DIRS,
-                         runtime_library_dirs=LIBRARY_DIRS)
-    return config
-
-if __name__ == "__main__":
-    from numpy.distutils.core import setup
-    setup(**configuration(top_path='').todict())
+    # NumPy
+    INCLUDE_DIRS += [numpy.get_include()]
+
+    return dict(
+        include_dirs=INCLUDE_DIRS + [os.curdir],
+        libraries=LIBRARIES,
+        library_dirs=LIBRARY_DIRS,
+        runtime_library_dirs=LIBRARY_DIRS,
+    )
+
+extensions = [
+    Extension('Bratu3D',
+              sources = ['Bratu3D.pyx',
+                         'Bratu3Dimpl.c'],
+              depends = ['Bratu3Dimpl.h'],
+              **configure()),
+]
+
+setup(name = "Bratu3D",
+      ext_modules = cythonize(
+          extensions, include_path=[petsc4py.get_include()]),
+)
diff --git a/demo/wrap-swig/Bratu3D.c b/demo/wrap-swig/Bratu3D.c
index 9d66eee..71bbe6b 100644
--- a/demo/wrap-swig/Bratu3D.c
+++ b/demo/wrap-swig/Bratu3D.c
@@ -19,8 +19,6 @@
 
 #include "Bratu3D.h"
 
-#undef  __FUNCT__
-#define __FUNCT__ "FormInitGuess"
 PetscErrorCode FormInitGuess(DM da, Vec X, Params *p)
 {
   PetscInt       i,j,k,Mx,My,Mz,xs,ys,zs,xm,ym,zm;
@@ -91,8 +89,6 @@ PetscErrorCode FormInitGuess(DM da, Vec X, Params *p)
 }
 
 
-#undef  __FUNCT__
-#define __FUNCT__ "FormFunction"
 PetscErrorCode FormFunction(DM da, Vec X, Vec F, Params *p)
 {
   PetscInt       i,j,k,Mx,My,Mz,xs,ys,zs,xm,ym,zm;
@@ -183,8 +179,6 @@ PetscErrorCode FormFunction(DM da, Vec X, Vec F, Params *p)
 }
 
 
-#undef  __FUNCT__
-#define __FUNCT__ "FormJacobian"
 PetscErrorCode FormJacobian(DM da, Vec X, Mat J, Params *p)
 {
   PetscInt       i,j,k,Mx,My,Mz,xs,ys,zs,xm,ym,zm;
diff --git a/docs/CHANGES.html b/docs/CHANGES.html
index 2cef845..7edcead 100644
--- a/docs/CHANGES.html
+++ b/docs/CHANGES.html
@@ -3,14 +3,14 @@
 <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.12: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
 <title>CHANGES: PETSc for Python</title>
 <meta name="author" content="Lisandro Dalcin" />
 <style type="text/css">
 
 /*
 :Author: David Goodger (goodger at python.org)
-:Id: $Id: html4css1.css 7614 2013-02-21 15:55:51Z milde $
+:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
 :Copyright: This stylesheet has been placed in the public domain.
 
 Default cascading style sheet for the HTML output of Docutils.
@@ -38,6 +38,14 @@ table.borderless td, table.borderless th {
 .hidden {
   display: none }
 
+.subscript {
+  vertical-align: sub;
+  font-size: smaller }
+
+.superscript {
+  vertical-align: super;
+  font-size: smaller }
+
 a.toc-backref {
   text-decoration: none ;
   color: black }
@@ -162,12 +170,12 @@ h2.subtitle {
 hr.docutils {
   width: 75% }
 
-img.align-left, .figure.align-left, object.align-left {
+img.align-left, .figure.align-left, object.align-left, table.align-left {
   clear: left ;
   float: left ;
   margin-right: 1em }
 
-img.align-right, .figure.align-right, object.align-right {
+img.align-right, .figure.align-right, object.align-right, table.align-right {
   clear: right ;
   float: right ;
   margin-left: 1em }
@@ -178,6 +186,11 @@ img.align-center, .figure.align-center, object.align-center {
   margin-right: auto;
 }
 
+table.align-center {
+  margin-left: auto;
+  margin-right: auto;
+}
+
 .align-left {
   text-align: left }
 
@@ -195,6 +208,15 @@ div.align-right {
 /* div.align-center * { */
 /*   text-align: left } */
 
+.align-top    {
+  vertical-align: top }
+
+.align-middle {
+  vertical-align: middle }
+
+.align-bottom {
+  vertical-align: bottom }
+
 ol.simple, ul.simple {
   margin-bottom: 1em }
 
@@ -351,6 +373,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-8-0">
+<h1>Release 3.8.0</h1>
+<ul>
+<li><p class="first">Update to PETSc 3.8 release.</p>
+</li>
+</ul>
+</div>
 <div class="section" id="release-3-7-0">
 <h1>Release 3.7.0</h1>
 <ul>
diff --git a/docs/LICENSE.html b/docs/LICENSE.html
index 146bd78..ff78293 100644
--- a/docs/LICENSE.html
+++ b/docs/LICENSE.html
@@ -3,14 +3,14 @@
 <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.12: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
 <title>LICENSE: PETSc for Python</title>
 <meta name="author" content="Lisandro Dalcin" />
 <style type="text/css">
 
 /*
 :Author: David Goodger (goodger at python.org)
-:Id: $Id: html4css1.css 7614 2013-02-21 15:55:51Z milde $
+:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
 :Copyright: This stylesheet has been placed in the public domain.
 
 Default cascading style sheet for the HTML output of Docutils.
@@ -38,6 +38,14 @@ table.borderless td, table.borderless th {
 .hidden {
   display: none }
 
+.subscript {
+  vertical-align: sub;
+  font-size: smaller }
+
+.superscript {
+  vertical-align: super;
+  font-size: smaller }
+
 a.toc-backref {
   text-decoration: none ;
   color: black }
@@ -162,12 +170,12 @@ h2.subtitle {
 hr.docutils {
   width: 75% }
 
-img.align-left, .figure.align-left, object.align-left {
+img.align-left, .figure.align-left, object.align-left, table.align-left {
   clear: left ;
   float: left ;
   margin-right: 1em }
 
-img.align-right, .figure.align-right, object.align-right {
+img.align-right, .figure.align-right, object.align-right, table.align-right {
   clear: right ;
   float: right ;
   margin-left: 1em }
@@ -178,6 +186,11 @@ img.align-center, .figure.align-center, object.align-center {
   margin-right: auto;
 }
 
+table.align-center {
+  margin-left: auto;
+  margin-right: auto;
+}
+
 .align-left {
   text-align: left }
 
@@ -195,6 +208,15 @@ div.align-right {
 /* div.align-center * { */
 /*   text-align: left } */
 
+.align-top    {
+  vertical-align: top }
+
+.align-middle {
+  vertical-align: middle }
+
+.align-bottom {
+  vertical-align: bottom }
+
 ol.simple, ul.simple {
   margin-bottom: 1em }
 
@@ -351,7 +373,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) 2016, Lisandro Dalcin.
+<p>Copyright (c) 2017, 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 d20d7b6..74da649 100644
--- a/docs/apiref/api-objects.txt
+++ b/docs/apiref/api-objects.txt
@@ -3,6 +3,7 @@ petsc4py.__credits__	petsc4py-module.html#__credits__
 petsc4py.get_include	petsc4py-module.html#get_include
 petsc4py.init	petsc4py-module.html#init
 petsc4py.__package__	petsc4py-module.html#__package__
+petsc4py.get_config	petsc4py-module.html#get_config
 petsc4py.PETSc	petsc4py.PETSc-module.html
 petsc4py.PETSc.DEFAULT	petsc4py.PETSc-module.html#DEFAULT
 petsc4py.PETSc.COMM_NULL	petsc4py.PETSc-module.html#COMM_NULL
@@ -37,6 +38,7 @@ petsc4py.PETSc.Object.__lt__	petsc4py.PETSc.Object-class.html#__lt__
 petsc4py.PETSc.AO.Type	petsc4py.PETSc.AO.Type-class.html
 petsc4py.PETSc.Object.getTabLevel	petsc4py.PETSc.Object-class.html#getTabLevel
 petsc4py.PETSc.Object.compose	petsc4py.PETSc.Object-class.html#compose
+petsc4py.PETSc.Object.viewFromOptions	petsc4py.PETSc.Object-class.html#viewFromOptions
 petsc4py.PETSc.AO.__new__	petsc4py.PETSc.AO-class.html#__new__
 petsc4py.PETSc.Object.getName	petsc4py.PETSc.Object-class.html#getName
 petsc4py.PETSc.Object.incrementTabLevel	petsc4py.PETSc.Object-class.html#incrementTabLevel
@@ -76,11 +78,11 @@ petsc4py.PETSc.AO.app2petsc	petsc4py.PETSc.AO-class.html#app2petsc
 petsc4py.PETSc.Object.__ge__	petsc4py.PETSc.Object-class.html#__ge__
 petsc4py.PETSc.AO.view	petsc4py.PETSc.AO-class.html#view
 petsc4py.PETSc.AO.Type	petsc4py.PETSc.AO.Type-class.html
-petsc4py.PETSc.AO.Type.MAPPING	petsc4py.PETSc.AO.Type-class.html#MAPPING
 petsc4py.PETSc.AO.Type.__qualname__	petsc4py.PETSc.AO.Type-class.html#__qualname__
 petsc4py.PETSc.AO.Type.MEMORYSCALABLE	petsc4py.PETSc.AO.Type-class.html#MEMORYSCALABLE
-petsc4py.PETSc.AO.Type.BASIC	petsc4py.PETSc.AO.Type-class.html#BASIC
+petsc4py.PETSc.AO.Type.MAPPING	petsc4py.PETSc.AO.Type-class.html#MAPPING
 petsc4py.PETSc.AO.Type.ADVANCED	petsc4py.PETSc.AO.Type-class.html#ADVANCED
+petsc4py.PETSc.AO.Type.BASIC	petsc4py.PETSc.AO.Type-class.html#BASIC
 petsc4py.PETSc.Comm	petsc4py.PETSc.Comm-class.html
 petsc4py.PETSc.Comm.tompi4py	petsc4py.PETSc.Comm-class.html#tompi4py
 petsc4py.PETSc.Comm.rank	petsc4py.PETSc.Comm-class.html#rank
@@ -109,12 +111,16 @@ 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.DM.restoreLocalVec	petsc4py.PETSc.DM-class.html#restoreLocalVec
+petsc4py.PETSc.DM.adaptMetric	petsc4py.PETSc.DM-class.html#adaptMetric
 petsc4py.PETSc.Object.query	petsc4py.PETSc.Object-class.html#query
-petsc4py.PETSc.DM.createGlobalVec	petsc4py.PETSc.DM-class.html#createGlobalVec
-petsc4py.PETSc.DM.clearLabelStratum	petsc4py.PETSc.DM-class.html#clearLabelStratum
+petsc4py.PETSc.Object.__lt__	petsc4py.PETSc.Object-class.html#__lt__
+petsc4py.PETSc.DM.getDimension	petsc4py.PETSc.DM-class.html#getDimension
 petsc4py.PETSc.Object.getTabLevel	petsc4py.PETSc.Object-class.html#getTabLevel
 petsc4py.PETSc.DM.createMatrix	petsc4py.PETSc.DM-class.html#createMatrix
+petsc4py.PETSc.Object.viewFromOptions	petsc4py.PETSc.Object-class.html#viewFromOptions
 petsc4py.PETSc.DM.removeLabel	petsc4py.PETSc.DM-class.html#removeLabel
+petsc4py.PETSc.DM.getLocalVec	petsc4py.PETSc.DM-class.html#getLocalVec
 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
@@ -132,8 +138,9 @@ 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
-petsc4py.PETSc.Object.getClassId	petsc4py.PETSc.Object-class.html#getClassId
+petsc4py.PETSc.DM.createFieldDecomposition	petsc4py.PETSc.DM-class.html#createFieldDecomposition
 petsc4py.PETSc.Object.prefix	petsc4py.PETSc.Object-class.html#prefix
+petsc4py.PETSc.Object.getClassId	petsc4py.PETSc.Object-class.html#getClassId
 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
@@ -141,10 +148,10 @@ 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.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.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.DM.globalToLocal	petsc4py.PETSc.DM-class.html#globalToLocal
@@ -156,6 +163,7 @@ 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.setSNESJacobian	petsc4py.PETSc.DM-class.html#setSNESJacobian
 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
@@ -168,6 +176,7 @@ 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.adaptLabel	petsc4py.PETSc.DM-class.html#adaptLabel
 petsc4py.PETSc.DM.createMat	petsc4py.PETSc.DM-class.html#createMat
 petsc4py.PETSc.DM.createLocalVector	petsc4py.PETSc.DM-class.html#createLocalVector
 petsc4py.PETSc.DM.getCoordinateSection	petsc4py.PETSc.DM-class.html#getCoordinateSection
@@ -179,6 +188,7 @@ 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.DM.setSNESFunction	petsc4py.PETSc.DM-class.html#setSNESFunction
 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
@@ -189,10 +199,15 @@ petsc4py.PETSc.DM.setPointSF	petsc4py.PETSc.DM-class.html#setPointSF
 petsc4py.PETSc.Object.__eq__	petsc4py.PETSc.Object-class.html#__eq__
 petsc4py.PETSc.Object.__le__	petsc4py.PETSc.Object-class.html#__le__
 petsc4py.PETSc.Object.getClassName	petsc4py.PETSc.Object-class.html#getClassName
+petsc4py.PETSc.DM.getCoarsenLevel	petsc4py.PETSc.DM-class.html#getCoarsenLevel
 petsc4py.PETSc.Object.__ge__	petsc4py.PETSc.Object-class.html#__ge__
 petsc4py.PETSc.Object.classid	petsc4py.PETSc.Object-class.html#classid
+petsc4py.PETSc.DM.getRefineLevel	petsc4py.PETSc.DM-class.html#getRefineLevel
+petsc4py.PETSc.DM.setRefineLevel	petsc4py.PETSc.DM-class.html#setRefineLevel
 petsc4py.PETSc.DM.refine	petsc4py.PETSc.DM-class.html#refine
 petsc4py.PETSc.DM.createLocalVec	petsc4py.PETSc.DM-class.html#createLocalVec
+petsc4py.PETSc.DM.getGlobalVec	petsc4py.PETSc.DM-class.html#getGlobalVec
+petsc4py.PETSc.DM.setKSPComputeOperators	petsc4py.PETSc.DM-class.html#setKSPComputeOperators
 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
@@ -208,6 +223,7 @@ petsc4py.PETSc.DM.setDefaultSection	petsc4py.PETSc.DM-class.html#setDefaultSecti
 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.DM.restoreGlobalVec	petsc4py.PETSc.DM-class.html#restoreGlobalVec
 petsc4py.PETSc.Object.klass	petsc4py.PETSc.Object-class.html#klass
 petsc4py.PETSc.DM.BoundaryType	petsc4py.PETSc.DM.BoundaryType-class.html
 petsc4py.PETSc.DM.BoundaryType.__qualname__	petsc4py.PETSc.DM.BoundaryType-class.html#__qualname__
@@ -217,27 +233,31 @@ petsc4py.PETSc.DM.BoundaryType.PERIODIC	petsc4py.PETSc.DM.BoundaryType-class.htm
 petsc4py.PETSc.DM.BoundaryType.MIRROR	petsc4py.PETSc.DM.BoundaryType-class.html#MIRROR
 petsc4py.PETSc.DM.BoundaryType.GHOSTED	petsc4py.PETSc.DM.BoundaryType-class.html#GHOSTED
 petsc4py.PETSc.DM.Type	petsc4py.PETSc.DM.Type-class.html
-petsc4py.PETSc.DM.Type.NETWORK	petsc4py.PETSc.DM.Type-class.html#NETWORK
-petsc4py.PETSc.DM.Type.DA	petsc4py.PETSc.DM.Type-class.html#DA
 petsc4py.PETSc.DM.Type.SLICED	petsc4py.PETSc.DM.Type-class.html#SLICED
 petsc4py.PETSc.DM.Type.SHELL	petsc4py.PETSc.DM.Type-class.html#SHELL
-petsc4py.PETSc.DM.Type.CARTESIAN	petsc4py.PETSc.DM.Type-class.html#CARTESIAN
-petsc4py.PETSc.DM.Type.REDUNDANT	petsc4py.PETSc.DM.Type-class.html#REDUNDANT
-petsc4py.PETSc.DM.Type.PLEX	petsc4py.PETSc.DM.Type-class.html#PLEX
-petsc4py.PETSc.DM.Type.PATCH	petsc4py.PETSc.DM.Type-class.html#PATCH
+petsc4py.PETSc.DM.Type.NETWORK	petsc4py.PETSc.DM.Type-class.html#NETWORK
 petsc4py.PETSc.DM.Type.COMPOSITE	petsc4py.PETSc.DM.Type-class.html#COMPOSITE
 petsc4py.PETSc.DM.Type.MOAB	petsc4py.PETSc.DM.Type-class.html#MOAB
+petsc4py.PETSc.DM.Type.REDUNDANT	petsc4py.PETSc.DM.Type-class.html#REDUNDANT
+petsc4py.PETSc.DM.Type.DA	petsc4py.PETSc.DM.Type-class.html#DA
 petsc4py.PETSc.DM.Type.__qualname__	petsc4py.PETSc.DM.Type-class.html#__qualname__
+petsc4py.PETSc.DM.Type.CARTESIAN	petsc4py.PETSc.DM.Type-class.html#CARTESIAN
+petsc4py.PETSc.DM.Type.PATCH	petsc4py.PETSc.DM.Type-class.html#PATCH
+petsc4py.PETSc.DM.Type.PLEX	petsc4py.PETSc.DM.Type-class.html#PLEX
 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.DM.restoreLocalVec	petsc4py.PETSc.DM-class.html#restoreLocalVec
+petsc4py.PETSc.DM.adaptMetric	petsc4py.PETSc.DM-class.html#adaptMetric
 petsc4py.PETSc.Object.query	petsc4py.PETSc.Object-class.html#query
-petsc4py.PETSc.Object.__lt__	petsc4py.PETSc.Object-class.html#__lt__
+petsc4py.PETSc.DM.createGlobalVec	petsc4py.PETSc.DM-class.html#createGlobalVec
 petsc4py.PETSc.DM.clearLabelStratum	petsc4py.PETSc.DM-class.html#clearLabelStratum
 petsc4py.PETSc.Object.getTabLevel	petsc4py.PETSc.Object-class.html#getTabLevel
 petsc4py.PETSc.DM.createMatrix	petsc4py.PETSc.DM-class.html#createMatrix
+petsc4py.PETSc.Object.viewFromOptions	petsc4py.PETSc.Object-class.html#viewFromOptions
 petsc4py.PETSc.DM.removeLabel	petsc4py.PETSc.DM-class.html#removeLabel
+petsc4py.PETSc.DM.getLocalVec	petsc4py.PETSc.DM-class.html#getLocalVec
 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
@@ -256,8 +276,9 @@ petsc4py.PETSc.DMComposite.getAccess	petsc4py.PETSc.DMComposite-class.html#getAc
 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
-petsc4py.PETSc.Object.getClassId	petsc4py.PETSc.Object-class.html#getClassId
+petsc4py.PETSc.DM.createFieldDecomposition	petsc4py.PETSc.DM-class.html#createFieldDecomposition
 petsc4py.PETSc.Object.prefix	petsc4py.PETSc.Object-class.html#prefix
+petsc4py.PETSc.Object.getClassId	petsc4py.PETSc.Object-class.html#getClassId
 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
@@ -265,7 +286,7 @@ 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.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
@@ -280,9 +301,10 @@ 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.setSNESJacobian	petsc4py.PETSc.DM-class.html#setSNESJacobian
 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.setSNESFunction	petsc4py.PETSc.DM-class.html#setSNESFunction
 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
@@ -293,6 +315,7 @@ 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.adaptLabel	petsc4py.PETSc.DM-class.html#adaptLabel
 petsc4py.PETSc.DM.createMat	petsc4py.PETSc.DM-class.html#createMat
 petsc4py.PETSc.DM.createLocalVector	petsc4py.PETSc.DM-class.html#createLocalVector
 petsc4py.PETSc.DM.getCoordinateSection	petsc4py.PETSc.DM-class.html#getCoordinateSection
@@ -304,6 +327,7 @@ 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.DM.getDefaultGlobalSection	petsc4py.PETSc.DM-class.html#getDefaultGlobalSection
 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
@@ -316,13 +340,18 @@ petsc4py.PETSc.DMComposite.getEntries	petsc4py.PETSc.DMComposite-class.html#getE
 petsc4py.PETSc.Object.__le__	petsc4py.PETSc.Object-class.html#__le__
 petsc4py.PETSc.Object.getClassName	petsc4py.PETSc.Object-class.html#getClassName
 petsc4py.PETSc.DM.setDefaultSection	petsc4py.PETSc.DM-class.html#setDefaultSection
+petsc4py.PETSc.DM.getCoarsenLevel	petsc4py.PETSc.DM-class.html#getCoarsenLevel
 petsc4py.PETSc.DMComposite.scatter	petsc4py.PETSc.DMComposite-class.html#scatter
 petsc4py.PETSc.Object.__ge__	petsc4py.PETSc.Object-class.html#__ge__
 petsc4py.PETSc.Object.classid	petsc4py.PETSc.Object-class.html#classid
+petsc4py.PETSc.DM.getRefineLevel	petsc4py.PETSc.DM-class.html#getRefineLevel
 petsc4py.PETSc.Object.getComm	petsc4py.PETSc.Object-class.html#getComm
+petsc4py.PETSc.DM.setRefineLevel	petsc4py.PETSc.DM-class.html#setRefineLevel
 petsc4py.PETSc.DM.refine	petsc4py.PETSc.DM-class.html#refine
 petsc4py.PETSc.DM.createLocalVec	petsc4py.PETSc.DM-class.html#createLocalVec
 petsc4py.PETSc.DMComposite.getNumberDM	petsc4py.PETSc.DMComposite-class.html#getNumberDM
+petsc4py.PETSc.DM.getGlobalVec	petsc4py.PETSc.DM-class.html#getGlobalVec
+petsc4py.PETSc.DM.setKSPComputeOperators	petsc4py.PETSc.DM-class.html#setKSPComputeOperators
 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
@@ -341,6 +370,7 @@ petsc4py.PETSc.DMComposite.getGlobalISs	petsc4py.PETSc.DMComposite-class.html#ge
 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.DM.restoreGlobalVec	petsc4py.PETSc.DM-class.html#restoreGlobalVec
 petsc4py.PETSc.Object.klass	petsc4py.PETSc.Object-class.html#klass
 petsc4py.PETSc.DMDA	petsc4py.PETSc.DMDA-class.html
 petsc4py.PETSc.DM.getLGMap	petsc4py.PETSc.DM-class.html#getLGMap
@@ -350,6 +380,8 @@ 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.DM.restoreLocalVec	petsc4py.PETSc.DM-class.html#restoreLocalVec
+petsc4py.PETSc.DM.adaptMetric	petsc4py.PETSc.DM-class.html#adaptMetric
 petsc4py.PETSc.Object.query	petsc4py.PETSc.Object-class.html#query
 petsc4py.PETSc.DM.createGlobalVec	petsc4py.PETSc.DM-class.html#createGlobalVec
 petsc4py.PETSc.DMDA.getRanges	petsc4py.PETSc.DMDA-class.html#getRanges
@@ -359,6 +391,7 @@ 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.getLocalVec	petsc4py.PETSc.DM-class.html#getLocalVec
 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
@@ -385,11 +418,11 @@ petsc4py.PETSc.DMDA.dim	petsc4py.PETSc.DMDA-class.html#dim
 petsc4py.PETSc.Object.__nonzero__	petsc4py.PETSc.Object-class.html#__nonzero__
 petsc4py.PETSc.DM.setAppCtx	petsc4py.PETSc.DM-class.html#setAppCtx
 petsc4py.PETSc.DMDA.sizes	petsc4py.PETSc.DMDA-class.html#sizes
-petsc4py.PETSc.DMDA.corners	petsc4py.PETSc.DMDA-class.html#corners
+petsc4py.PETSc.DM.createFieldDecomposition	petsc4py.PETSc.DM-class.html#createFieldDecomposition
 petsc4py.PETSc.DMDA.boundary_type	petsc4py.PETSc.DMDA-class.html#boundary_type
 petsc4py.PETSc.Object.prefix	petsc4py.PETSc.Object-class.html#prefix
 petsc4py.PETSc.DMDA.getOwnershipRanges	petsc4py.PETSc.DMDA-class.html#getOwnershipRanges
-petsc4py.PETSc.Object.getClassId	petsc4py.PETSc.Object-class.html#getClassId
+petsc4py.PETSc.DMDA.corners	petsc4py.PETSc.DMDA-class.html#corners
 petsc4py.PETSc.DMDA.getRefinementFactor	petsc4py.PETSc.DMDA-class.html#getRefinementFactor
 petsc4py.PETSc.Object.__copy__	petsc4py.PETSc.Object-class.html#__copy__
 petsc4py.PETSc.DMDA.getSizes	petsc4py.PETSc.DMDA-class.html#getSizes
@@ -397,15 +430,16 @@ petsc4py.PETSc.DM.view	petsc4py.PETSc.DM-class.html#view
 petsc4py.PETSc.DM.getDefaultSection	petsc4py.PETSc.DM-class.html#getDefaultSection
 petsc4py.PETSc.DMDA.getGhostCorners	petsc4py.PETSc.DMDA-class.html#getGhostCorners
 petsc4py.PETSc.Object.decRef	petsc4py.PETSc.Object-class.html#decRef
+petsc4py.PETSc.DM.clearLabelStratum	petsc4py.PETSc.DM-class.html#clearLabelStratum
 petsc4py.PETSc.DMDA.globalToNatural	petsc4py.PETSc.DMDA-class.html#globalToNatural
 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.DMDA.setProcSizes	petsc4py.PETSc.DMDA-class.html#setProcSizes
 petsc4py.PETSc.DMDA.setUniformCoordinates	petsc4py.PETSc.DMDA-class.html#setUniformCoordinates
-petsc4py.PETSc.DM.clearLabelStratum	petsc4py.PETSc.DM-class.html#clearLabelStratum
+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.DMDA.setBoundaryType	petsc4py.PETSc.DMDA-class.html#setBoundaryType
@@ -420,6 +454,8 @@ 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.setSNESJacobian	petsc4py.PETSc.DM-class.html#setSNESJacobian
+petsc4py.PETSc.Object.viewFromOptions	petsc4py.PETSc.Object-class.html#viewFromOptions
 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
@@ -438,6 +474,7 @@ 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.adaptLabel	petsc4py.PETSc.DM-class.html#adaptLabel
 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
@@ -447,13 +484,13 @@ 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.getElementType	petsc4py.PETSc.DMDA-class.html#getElementType
-petsc4py.PETSc.DMDA.setProcSizes	petsc4py.PETSc.DMDA-class.html#setProcSizes
+petsc4py.PETSc.DM.BoundaryType	petsc4py.PETSc.DM.BoundaryType-class.html
 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.DM.setSNESFunction	petsc4py.PETSc.DM-class.html#setSNESFunction
 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
@@ -468,13 +505,17 @@ 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
+petsc4py.PETSc.DM.getCoarsenLevel	petsc4py.PETSc.DM-class.html#getCoarsenLevel
 petsc4py.PETSc.Object.__ge__	petsc4py.PETSc.Object-class.html#__ge__
 petsc4py.PETSc.Object.classid	petsc4py.PETSc.Object-class.html#classid
-petsc4py.PETSc.DM.BoundaryType	petsc4py.PETSc.DM.BoundaryType-class.html
+petsc4py.PETSc.DM.getRefineLevel	petsc4py.PETSc.DM-class.html#getRefineLevel
+petsc4py.PETSc.DM.setRefineLevel	petsc4py.PETSc.DM-class.html#setRefineLevel
 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.getGlobalVec	petsc4py.PETSc.DM-class.html#getGlobalVec
+petsc4py.PETSc.DM.setKSPComputeOperators	petsc4py.PETSc.DM-class.html#setKSPComputeOperators
 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
@@ -495,27 +536,30 @@ petsc4py.PETSc.DM.setDefaultSection	petsc4py.PETSc.DM-class.html#setDefaultSecti
 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.Object.getClassId	petsc4py.PETSc.Object-class.html#getClassId
 petsc4py.PETSc.DMDA.naturalToGlobal	petsc4py.PETSc.DMDA-class.html#naturalToGlobal
+petsc4py.PETSc.DM.createInterpolation	petsc4py.PETSc.DM-class.html#createInterpolation
 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.DM.restoreGlobalVec	petsc4py.PETSc.DM-class.html#restoreGlobalVec
 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
 petsc4py.PETSc.DMDA.ElementType.Q1	petsc4py.PETSc.DMDA.ElementType-class.html#Q1
-petsc4py.PETSc.DMDA.ElementType.P1	petsc4py.PETSc.DMDA.ElementType-class.html#P1
 petsc4py.PETSc.DMDA.ElementType.__qualname__	petsc4py.PETSc.DMDA.ElementType-class.html#__qualname__
+petsc4py.PETSc.DMDA.ElementType.P1	petsc4py.PETSc.DMDA.ElementType-class.html#P1
 petsc4py.PETSc.DMDA.InterpolationType	petsc4py.PETSc.DMDA.InterpolationType-class.html
 petsc4py.PETSc.DMDA.InterpolationType.Q1	petsc4py.PETSc.DMDA.InterpolationType-class.html#Q1
 petsc4py.PETSc.DMDA.InterpolationType.Q0	petsc4py.PETSc.DMDA.InterpolationType-class.html#Q0
 petsc4py.PETSc.DMDA.InterpolationType.__qualname__	petsc4py.PETSc.DMDA.InterpolationType-class.html#__qualname__
 petsc4py.PETSc.DMDA.StencilType	petsc4py.PETSc.DMDA.StencilType-class.html
 petsc4py.PETSc.DMDA.StencilType.BOX	petsc4py.PETSc.DMDA.StencilType-class.html#BOX
-petsc4py.PETSc.DMDA.StencilType.STAR	petsc4py.PETSc.DMDA.StencilType-class.html#STAR
 petsc4py.PETSc.DMDA.StencilType.__qualname__	petsc4py.PETSc.DMDA.StencilType-class.html#__qualname__
+petsc4py.PETSc.DMDA.StencilType.STAR	petsc4py.PETSc.DMDA.StencilType-class.html#STAR
 petsc4py.PETSc.DMPlex	petsc4py.PETSc.DMPlex-class.html
 petsc4py.PETSc.Object.__lt__	petsc4py.PETSc.Object-class.html#__lt__
 petsc4py.PETSc.DM.getLGMap	petsc4py.PETSc.DM-class.html#getLGMap
@@ -523,16 +567,21 @@ petsc4py.PETSc.DMPlex.setSupportSize	petsc4py.PETSc.DMPlex-class.html#setSupport
 petsc4py.PETSc.DMPlex.setSupport	petsc4py.PETSc.DMPlex-class.html#setSupport
 petsc4py.PETSc.DM.getStratumIS	petsc4py.PETSc.DM-class.html#getStratumIS
 petsc4py.PETSc.DMPlex.distribute	petsc4py.PETSc.DMPlex-class.html#distribute
+petsc4py.PETSc.DMPlex.constructGhostCells	petsc4py.PETSc.DMPlex-class.html#constructGhostCells
 petsc4py.PETSc.DMPlex.createExodus	petsc4py.PETSc.DMPlex-class.html#createExodus
 petsc4py.PETSc.DMPlex.getChart	petsc4py.PETSc.DMPlex-class.html#getChart
+petsc4py.PETSc.DM.adaptMetric	petsc4py.PETSc.DM-class.html#adaptMetric
 petsc4py.PETSc.Object.query	petsc4py.PETSc.Object-class.html#query
 petsc4py.PETSc.DM.createGlobalVec	petsc4py.PETSc.DM-class.html#createGlobalVec
-petsc4py.PETSc.DM.clearLabelStratum	petsc4py.PETSc.DM-class.html#clearLabelStratum
+petsc4py.PETSc.DM.getDimension	petsc4py.PETSc.DM-class.html#getDimension
 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.Object.viewFromOptions	petsc4py.PETSc.Object-class.html#viewFromOptions
 petsc4py.PETSc.DM.removeLabel	petsc4py.PETSc.DM-class.html#removeLabel
+petsc4py.PETSc.DM.getLocalVec	petsc4py.PETSc.DM-class.html#getLocalVec
+petsc4py.PETSc.DMPlex.setVecClosure	petsc4py.PETSc.DMPlex-class.html#setVecClosure
 petsc4py.PETSc.DMPlex.setConeOrientation	petsc4py.PETSc.DMPlex-class.html#setConeOrientation
 petsc4py.PETSc.DM.coarsen	petsc4py.PETSc.DM-class.html#coarsen
 petsc4py.PETSc.DM.setLabelValue	petsc4py.PETSc.DM-class.html#setLabelValue
@@ -548,17 +597,20 @@ petsc4py.PETSc.DM.createGlobalVector	petsc4py.PETSc.DM-class.html#createGlobalVe
 petsc4py.PETSc.DM.getDefaultSF	petsc4py.PETSc.DM-class.html#getDefaultSF
 petsc4py.PETSc.DMPlex.getRefinementUniform	petsc4py.PETSc.DMPlex-class.html#getRefinementUniform
 petsc4py.PETSc.DM.setFromOptions	petsc4py.PETSc.DM-class.html#setFromOptions
+petsc4py.PETSc.DMPlex.setPartitioner	petsc4py.PETSc.DMPlex-class.html#setPartitioner
 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
-petsc4py.PETSc.Object.getClassId	petsc4py.PETSc.Object-class.html#getClassId
+petsc4py.PETSc.DM.createFieldDecomposition	petsc4py.PETSc.DM-class.html#createFieldDecomposition
 petsc4py.PETSc.DMPlex.createExodusFromFile	petsc4py.PETSc.DMPlex-class.html#createExodusFromFile
 petsc4py.PETSc.Object.getAttr	petsc4py.PETSc.Object-class.html#getAttr
 petsc4py.PETSc.DMPlex.getHeightStratum	petsc4py.PETSc.DMPlex-class.html#getHeightStratum
 petsc4py.PETSc.DMPlex.getJoin	petsc4py.PETSc.DMPlex-class.html#getJoin
+petsc4py.PETSc.Object.getClassId	petsc4py.PETSc.Object-class.html#getClassId
+petsc4py.PETSc.DM.restoreLocalVec	petsc4py.PETSc.DM-class.html#restoreLocalVec
 petsc4py.PETSc.DMPlex.createFromCellList	petsc4py.PETSc.DMPlex-class.html#createFromCellList
 petsc4py.PETSc.Object.__copy__	petsc4py.PETSc.Object-class.html#__copy__
 petsc4py.PETSc.DMPlex.stratify	petsc4py.PETSc.DMPlex-class.html#stratify
@@ -567,6 +619,7 @@ petsc4py.PETSc.DM.getDefaultSection	petsc4py.PETSc.DM-class.html#getDefaultSecti
 petsc4py.PETSc.DMPlex.getDepth	petsc4py.PETSc.DMPlex-class.html#getDepth
 petsc4py.PETSc.DMPlex.getRefinementLimit	petsc4py.PETSc.DMPlex-class.html#getRefinementLimit
 petsc4py.PETSc.DMPlex.getOrdering	petsc4py.PETSc.DMPlex-class.html#getOrdering
+petsc4py.PETSc.DMPlex.getAdjacency	petsc4py.PETSc.DMPlex-class.html#getAdjacency
 petsc4py.PETSc.Object.stateIncrease	petsc4py.PETSc.Object-class.html#stateIncrease
 petsc4py.PETSc.DMPlex.getConeSize	petsc4py.PETSc.DMPlex-class.html#getConeSize
 petsc4py.PETSc.DMPlex.createSquareBoundary	petsc4py.PETSc.DMPlex-class.html#createSquareBoundary
@@ -575,41 +628,50 @@ petsc4py.PETSc.DM.refineHierarchy	petsc4py.PETSc.DM-class.html#refineHierarchy
 petsc4py.PETSc.DM.Type	petsc4py.PETSc.DM.Type-class.html
 petsc4py.PETSc.DMPlex.orient	petsc4py.PETSc.DMPlex-class.html#orient
 petsc4py.PETSc.DM.getCoordinates	petsc4py.PETSc.DM-class.html#getCoordinates
-petsc4py.PETSc.DMPlex.setChart	petsc4py.PETSc.DMPlex-class.html#setChart
+petsc4py.PETSc.DMPlex.createFromFile	petsc4py.PETSc.DMPlex-class.html#createFromFile
 petsc4py.PETSc.DM.createInterpolation	petsc4py.PETSc.DM-class.html#createInterpolation
-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.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.DMPlex.uninterpolate	petsc4py.PETSc.DMPlex-class.html#uninterpolate
+petsc4py.PETSc.DMPlex.setMatClosure	petsc4py.PETSc.DMPlex-class.html#setMatClosure
+petsc4py.PETSc.DMPlex.getAdjacencyUseCone	petsc4py.PETSc.DMPlex-class.html#getAdjacencyUseCone
 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.DMPlex.interpolate	petsc4py.PETSc.DMPlex-class.html#interpolate
 petsc4py.PETSc.DM.getPointSF	petsc4py.PETSc.DM-class.html#getPointSF
 petsc4py.PETSc.Object.getOptionsPrefix	petsc4py.PETSc.Object-class.html#getOptionsPrefix
 petsc4py.PETSc.DM.createMatrix	petsc4py.PETSc.DM-class.html#createMatrix
 petsc4py.PETSc.Object.comm	petsc4py.PETSc.Object-class.html#comm
+petsc4py.PETSc.DM.setSNESJacobian	petsc4py.PETSc.DM-class.html#setSNESJacobian
+petsc4py.PETSc.DMPlex.getVecClosure	petsc4py.PETSc.DMPlex-class.html#getVecClosure
 petsc4py.PETSc.DMPlex.getCone	petsc4py.PETSc.DMPlex-class.html#getCone
 petsc4py.PETSc.DMPlex.setTriangleOptions	petsc4py.PETSc.DMPlex-class.html#setTriangleOptions
 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.DM.clearLabelValue	petsc4py.PETSc.DM-class.html#clearLabelValue
+petsc4py.PETSc.DMPlex.getPointGlobal	petsc4py.PETSc.DMPlex-class.html#getPointGlobal
 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.setAdjacencyUseAnchors	petsc4py.PETSc.DMPlex-class.html#setAdjacencyUseAnchors
 petsc4py.PETSc.DM.getLabelOutput	petsc4py.PETSc.DM-class.html#getLabelOutput
+petsc4py.PETSc.DMPlex.getAdjacencyUseClosure	petsc4py.PETSc.DMPlex-class.html#getAdjacencyUseClosure
 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
 petsc4py.PETSc.Object.__ge__	petsc4py.PETSc.Object-class.html#__ge__
 petsc4py.PETSc.Object.compose	petsc4py.PETSc.Object-class.html#compose
 petsc4py.PETSc.DMPlex.setAdjacencyUseClosure	petsc4py.PETSc.DMPlex-class.html#setAdjacencyUseClosure
+petsc4py.PETSc.DM.getRefineLevel	petsc4py.PETSc.DM-class.html#getRefineLevel
 petsc4py.PETSc.DMPlex.getSupportSize	petsc4py.PETSc.DMPlex-class.html#getSupportSize
-petsc4py.PETSc.DMPlex.getMaxSizes	petsc4py.PETSc.DMPlex-class.html#getMaxSizes
+petsc4py.PETSc.DMPlex.createCubeBoundary	petsc4py.PETSc.DMPlex-class.html#createCubeBoundary
 petsc4py.PETSc.DM.setCoordinates	petsc4py.PETSc.DM-class.html#setCoordinates
 petsc4py.PETSc.DM.createAggregates	petsc4py.PETSc.DM-class.html#createAggregates
+petsc4py.PETSc.DM.adaptLabel	petsc4py.PETSc.DM-class.html#adaptLabel
 petsc4py.PETSc.DM.createMat	petsc4py.PETSc.DM-class.html#createMat
 petsc4py.PETSc.DM.createLocalVector	petsc4py.PETSc.DM-class.html#createLocalVector
 petsc4py.PETSc.DM.getCoordinateSection	petsc4py.PETSc.DM-class.html#getCoordinateSection
@@ -626,26 +688,33 @@ petsc4py.PETSc.Object.decRef	petsc4py.PETSc.Object-class.html#decRef
 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
+petsc4py.PETSc.DM.setSNESFunction	petsc4py.PETSc.DM-class.html#setSNESFunction
+petsc4py.PETSc.DMPlex.getPointLocalField	petsc4py.PETSc.DMPlex-class.html#getPointLocalField
 petsc4py.PETSc.Object.incRef	petsc4py.PETSc.Object-class.html#incRef
 petsc4py.PETSc.Object.setName	petsc4py.PETSc.Object-class.html#setName
+petsc4py.PETSc.DM.clearLabelValue	petsc4py.PETSc.DM-class.html#clearLabelValue
 petsc4py.PETSc.DMPlex.getVertexNumbering	petsc4py.PETSc.DMPlex-class.html#getVertexNumbering
 petsc4py.PETSc.DM.getType	petsc4py.PETSc.DM-class.html#getType
 petsc4py.PETSc.Object.refcount	petsc4py.PETSc.Object-class.html#refcount
 petsc4py.PETSc.DMPlex.setRefinementUniform	petsc4py.PETSc.DMPlex-class.html#setRefinementUniform
 petsc4py.PETSc.DM.setPointSF	petsc4py.PETSc.DM-class.html#setPointSF
-petsc4py.PETSc.DMPlex.createCubeBoundary	petsc4py.PETSc.DMPlex-class.html#createCubeBoundary
+petsc4py.PETSc.DMPlex.getMaxSizes	petsc4py.PETSc.DMPlex-class.html#getMaxSizes
 petsc4py.PETSc.DMPlex.getTransitiveClosure	petsc4py.PETSc.DMPlex-class.html#getTransitiveClosure
+petsc4py.PETSc.DM.getCoordinatesLocal	petsc4py.PETSc.DM-class.html#getCoordinatesLocal
+petsc4py.PETSc.DMPlex.getPointGlobalField	petsc4py.PETSc.DMPlex-class.html#getPointGlobalField
 petsc4py.PETSc.Object.type	petsc4py.PETSc.Object-class.html#type
 petsc4py.PETSc.DMPlex.setConeSize	petsc4py.PETSc.DMPlex-class.html#setConeSize
 petsc4py.PETSc.DMPlex.insertConeOrientation	petsc4py.PETSc.DMPlex-class.html#insertConeOrientation
 petsc4py.PETSc.Object.__le__	petsc4py.PETSc.Object-class.html#__le__
 petsc4py.PETSc.DMPlex.getMeet	petsc4py.PETSc.DMPlex-class.html#getMeet
 petsc4py.PETSc.Object.getClassName	petsc4py.PETSc.Object-class.html#getClassName
+petsc4py.PETSc.DM.getCoarsenLevel	petsc4py.PETSc.DM-class.html#getCoarsenLevel
 petsc4py.PETSc.DM.getAppCtx	petsc4py.PETSc.DM-class.html#getAppCtx
 petsc4py.PETSc.Object.classid	petsc4py.PETSc.Object-class.html#classid
 petsc4py.PETSc.DM.createInjection	petsc4py.PETSc.DM-class.html#createInjection
+petsc4py.PETSc.DM.setRefineLevel	petsc4py.PETSc.DM-class.html#setRefineLevel
 petsc4py.PETSc.DMPlex.createCGNSFromFile	petsc4py.PETSc.DMPlex-class.html#createCGNSFromFile
+petsc4py.PETSc.Object.getRefCount	petsc4py.PETSc.Object-class.html#getRefCount
 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
@@ -654,6 +723,10 @@ 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.DMPlex.setAdjacencyUseCone	petsc4py.PETSc.DMPlex-class.html#setAdjacencyUseCone
+petsc4py.PETSc.DM.restoreGlobalVec	petsc4py.PETSc.DM-class.html#restoreGlobalVec
+petsc4py.PETSc.DMPlex.getPointLocal	petsc4py.PETSc.DMPlex-class.html#getPointLocal
+petsc4py.PETSc.DM.getGlobalVec	petsc4py.PETSc.DM-class.html#getGlobalVec
+petsc4py.PETSc.DM.setKSPComputeOperators	petsc4py.PETSc.DM-class.html#setKSPComputeOperators
 petsc4py.PETSc.DM.localToLocal	petsc4py.PETSc.DM-class.html#localToLocal
 petsc4py.PETSc.DMPlex.__new__	petsc4py.PETSc.DMPlex-class.html#__new__
 petsc4py.PETSc.DM.getLabelSize	petsc4py.PETSc.DM-class.html#getLabelSize
@@ -662,6 +735,7 @@ petsc4py.PETSc.DM.coarsenHierarchy	petsc4py.PETSc.DM-class.html#coarsenHierarchy
 petsc4py.PETSc.DM.destroy	petsc4py.PETSc.DM-class.html#destroy
 petsc4py.PETSc.DMPlex.getConeOrientation	petsc4py.PETSc.DMPlex-class.html#getConeOrientation
 petsc4py.PETSc.DMPlex.createGmsh	petsc4py.PETSc.DMPlex-class.html#createGmsh
+petsc4py.PETSc.DMPlex.setChart	petsc4py.PETSc.DMPlex-class.html#setChart
 petsc4py.PETSc.DMPlex.setRefinementLimit	petsc4py.PETSc.DMPlex-class.html#setRefinementLimit
 petsc4py.PETSc.Object.setAttr	petsc4py.PETSc.Object-class.html#setAttr
 petsc4py.PETSc.DM.createDefaultSF	petsc4py.PETSc.DM-class.html#createDefaultSF
@@ -669,6 +743,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.getAdjacencyUseAnchors	petsc4py.PETSc.DMPlex-class.html#getAdjacencyUseAnchors
 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
@@ -683,14 +758,19 @@ 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.DM.restoreLocalVec	petsc4py.PETSc.DM-class.html#restoreLocalVec
 petsc4py.PETSc.DMShell.setCreateSubDM	petsc4py.PETSc.DMShell-class.html#setCreateSubDM
+petsc4py.PETSc.DM.adaptMetric	petsc4py.PETSc.DM-class.html#adaptMetric
 petsc4py.PETSc.Object.query	petsc4py.PETSc.Object-class.html#query
 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.Object.viewFromOptions	petsc4py.PETSc.Object-class.html#viewFromOptions
+petsc4py.PETSc.DMShell.setCreateDomainDecompositionScatters	petsc4py.PETSc.DMShell-class.html#setCreateDomainDecompositionScatters
 petsc4py.PETSc.DM.removeLabel	petsc4py.PETSc.DM-class.html#removeLabel
+petsc4py.PETSc.DM.getLocalVec	petsc4py.PETSc.DM-class.html#getLocalVec
 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
@@ -710,8 +790,9 @@ 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
-petsc4py.PETSc.Object.getClassId	petsc4py.PETSc.Object-class.html#getClassId
+petsc4py.PETSc.DM.createFieldDecomposition	petsc4py.PETSc.DM-class.html#createFieldDecomposition
 petsc4py.PETSc.Object.prefix	petsc4py.PETSc.Object-class.html#prefix
+petsc4py.PETSc.Object.getClassId	petsc4py.PETSc.Object-class.html#getClassId
 petsc4py.PETSc.DMShell.setRefine	petsc4py.PETSc.DMShell-class.html#setRefine
 petsc4py.PETSc.Object.__copy__	petsc4py.PETSc.Object-class.html#__copy__
 petsc4py.PETSc.DMShell.setCreateInjection	petsc4py.PETSc.DMShell-class.html#setCreateInjection
@@ -719,7 +800,6 @@ petsc4py.PETSc.DM.view	petsc4py.PETSc.DM-class.html#view
 petsc4py.PETSc.DM.getDefaultSection	petsc4py.PETSc.DM-class.html#getDefaultSection
 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
@@ -732,6 +812,7 @@ 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.DM.setCoordinatesLocal	petsc4py.PETSc.DM-class.html#setCoordinatesLocal
 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
@@ -740,9 +821,10 @@ 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.setSNESJacobian	petsc4py.PETSc.DM-class.html#setSNESJacobian
 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.setSNESFunction	petsc4py.PETSc.DM-class.html#setSNESFunction
 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
@@ -754,6 +836,7 @@ 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
+petsc4py.PETSc.DM.adaptLabel	petsc4py.PETSc.DM-class.html#adaptLabel
 petsc4py.PETSc.DM.createMat	petsc4py.PETSc.DM-class.html#createMat
 petsc4py.PETSc.DM.createLocalVector	petsc4py.PETSc.DM-class.html#createLocalVector
 petsc4py.PETSc.DM.getCoordinateSection	petsc4py.PETSc.DM-class.html#getCoordinateSection
@@ -763,9 +846,11 @@ 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.DMShell.setCreateRestriction	petsc4py.PETSc.DMShell-class.html#setCreateRestriction
 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.DM.getDefaultGlobalSection	petsc4py.PETSc.DM-class.html#getDefaultGlobalSection
 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
@@ -778,10 +863,16 @@ petsc4py.PETSc.Object.__eq__	petsc4py.PETSc.Object-class.html#__eq__
 petsc4py.PETSc.DMShell.setCreateLocalVector	petsc4py.PETSc.DMShell-class.html#setCreateLocalVector
 petsc4py.PETSc.Object.__le__	petsc4py.PETSc.Object-class.html#__le__
 petsc4py.PETSc.Object.getClassName	petsc4py.PETSc.Object-class.html#getClassName
+petsc4py.PETSc.DM.getCoarsenLevel	petsc4py.PETSc.DM-class.html#getCoarsenLevel
 petsc4py.PETSc.Object.__ge__	petsc4py.PETSc.Object-class.html#__ge__
-petsc4py.PETSc.Object.classid	petsc4py.PETSc.Object-class.html#classid
 petsc4py.PETSc.DM.refine	petsc4py.PETSc.DM-class.html#refine
+petsc4py.PETSc.Object.classid	petsc4py.PETSc.Object-class.html#classid
+petsc4py.PETSc.DM.getRefineLevel	petsc4py.PETSc.DM-class.html#getRefineLevel
+petsc4py.PETSc.DM.setRefineLevel	petsc4py.PETSc.DM-class.html#setRefineLevel
+petsc4py.PETSc.DMShell.setCreateDomainDecomposition	petsc4py.PETSc.DMShell-class.html#setCreateDomainDecomposition
 petsc4py.PETSc.DM.createLocalVec	petsc4py.PETSc.DM-class.html#createLocalVec
+petsc4py.PETSc.DM.getGlobalVec	petsc4py.PETSc.DM-class.html#getGlobalVec
+petsc4py.PETSc.DM.setKSPComputeOperators	petsc4py.PETSc.DM-class.html#setKSPComputeOperators
 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
@@ -793,20 +884,21 @@ petsc4py.PETSc.Object.stateIncrease	petsc4py.PETSc.Object-class.html#stateIncrea
 petsc4py.PETSc.DMShell.setGlobalVector	petsc4py.PETSc.DMShell-class.html#setGlobalVector
 petsc4py.PETSc.Object.setAttr	petsc4py.PETSc.Object-class.html#setAttr
 petsc4py.PETSc.DM.createDefaultSF	petsc4py.PETSc.DM-class.html#createDefaultSF
-petsc4py.PETSc.DM.setCoordinatesLocal	petsc4py.PETSc.DM-class.html#setCoordinatesLocal
+petsc4py.PETSc.DM.getDefaultSF	petsc4py.PETSc.DM-class.html#getDefaultSF
 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.DM.restoreGlobalVec	petsc4py.PETSc.DM-class.html#restoreGlobalVec
 petsc4py.PETSc.Object.klass	petsc4py.PETSc.Object-class.html#klass
 petsc4py.PETSc.Error	petsc4py.PETSc.Error-class.html
-petsc4py.PETSc.Error.__str__	petsc4py.PETSc.Error-class.html#__str__
-petsc4py.PETSc.Error.__init__	petsc4py.PETSc.Error-class.html#__init__
 petsc4py.PETSc.Error._traceback_	petsc4py.PETSc.Error-class.html#_traceback_
 petsc4py.PETSc.Error.__nonzero__	petsc4py.PETSc.Error-class.html#__nonzero__
+petsc4py.PETSc.Error.__str__	petsc4py.PETSc.Error-class.html#__str__
 petsc4py.PETSc.Error.__qualname__	petsc4py.PETSc.Error-class.html#__qualname__
 petsc4py.PETSc.Error.__repr__	petsc4py.PETSc.Error-class.html#__repr__
+petsc4py.PETSc.Error.__init__	petsc4py.PETSc.Error-class.html#__init__
 petsc4py.PETSc.IS	petsc4py.PETSc.IS-class.html
 petsc4py.PETSc.IS.getSize	petsc4py.PETSc.IS-class.html#getSize
 petsc4py.PETSc.Object.getAttr	petsc4py.PETSc.Object-class.html#getAttr
@@ -814,6 +906,7 @@ petsc4py.PETSc.Object.query	petsc4py.PETSc.Object-class.html#query
 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.Object.viewFromOptions	petsc4py.PETSc.Object-class.html#viewFromOptions
 petsc4py.PETSc.IS.invertPermutation	petsc4py.PETSc.IS-class.html#invertPermutation
 petsc4py.PETSc.IS.__enter__	petsc4py.PETSc.IS-class.html#__enter__
 petsc4py.PETSc.Object.fortran	petsc4py.PETSc.Object-class.html#fortran
@@ -900,26 +993,26 @@ petsc4py.PETSc.IS.isIdentity	petsc4py.PETSc.IS-class.html#isIdentity
 petsc4py.PETSc.Object.klass	petsc4py.PETSc.Object-class.html#klass
 petsc4py.PETSc.IS.sum	petsc4py.PETSc.IS-class.html#sum
 petsc4py.PETSc.IS.Type	petsc4py.PETSc.IS.Type-class.html
-petsc4py.PETSc.IS.Type.GENERAL	petsc4py.PETSc.IS.Type-class.html#GENERAL
 petsc4py.PETSc.IS.Type.__qualname__	petsc4py.PETSc.IS.Type-class.html#__qualname__
 petsc4py.PETSc.IS.Type.STRIDE	petsc4py.PETSc.IS.Type-class.html#STRIDE
 petsc4py.PETSc.IS.Type.BLOCK	petsc4py.PETSc.IS.Type-class.html#BLOCK
+petsc4py.PETSc.IS.Type.GENERAL	petsc4py.PETSc.IS.Type-class.html#GENERAL
 petsc4py.PETSc.InsertMode	petsc4py.PETSc.InsertMode-class.html
-petsc4py.PETSc.InsertMode.ADD_ALL	petsc4py.PETSc.InsertMode-class.html#ADD_ALL
-petsc4py.PETSc.InsertMode.MAX_VALUES	petsc4py.PETSc.InsertMode-class.html#MAX_VALUES
 petsc4py.PETSc.InsertMode.INSERT	petsc4py.PETSc.InsertMode-class.html#INSERT
+petsc4py.PETSc.InsertMode.ADD_ALL	petsc4py.PETSc.InsertMode-class.html#ADD_ALL
 petsc4py.PETSc.InsertMode.NOT_SET_VALUES	petsc4py.PETSc.InsertMode-class.html#NOT_SET_VALUES
-petsc4py.PETSc.InsertMode.INSERT_BC_VALUES	petsc4py.PETSc.InsertMode-class.html#INSERT_BC_VALUES
-petsc4py.PETSc.InsertMode.INSERT_BC	petsc4py.PETSc.InsertMode-class.html#INSERT_BC
-petsc4py.PETSc.InsertMode.ADD	petsc4py.PETSc.InsertMode-class.html#ADD
-petsc4py.PETSc.InsertMode.INSERT_ALL_VALUES	petsc4py.PETSc.InsertMode-class.html#INSERT_ALL_VALUES
-petsc4py.PETSc.InsertMode.ADD_BC	petsc4py.PETSc.InsertMode-class.html#ADD_BC
 petsc4py.PETSc.InsertMode.MAX	petsc4py.PETSc.InsertMode-class.html#MAX
 petsc4py.PETSc.InsertMode.ADD_ALL_VALUES	petsc4py.PETSc.InsertMode-class.html#ADD_ALL_VALUES
 petsc4py.PETSc.InsertMode.__qualname__	petsc4py.PETSc.InsertMode-class.html#__qualname__
 petsc4py.PETSc.InsertMode.INSERT_VALUES	petsc4py.PETSc.InsertMode-class.html#INSERT_VALUES
+petsc4py.PETSc.InsertMode.ADD	petsc4py.PETSc.InsertMode-class.html#ADD
 petsc4py.PETSc.InsertMode.ADD_BC_VALUES	petsc4py.PETSc.InsertMode-class.html#ADD_BC_VALUES
 petsc4py.PETSc.InsertMode.ADD_VALUES	petsc4py.PETSc.InsertMode-class.html#ADD_VALUES
+petsc4py.PETSc.InsertMode.INSERT_ALL_VALUES	petsc4py.PETSc.InsertMode-class.html#INSERT_ALL_VALUES
+petsc4py.PETSc.InsertMode.ADD_BC	petsc4py.PETSc.InsertMode-class.html#ADD_BC
+petsc4py.PETSc.InsertMode.MAX_VALUES	petsc4py.PETSc.InsertMode-class.html#MAX_VALUES
+petsc4py.PETSc.InsertMode.INSERT_BC_VALUES	petsc4py.PETSc.InsertMode-class.html#INSERT_BC_VALUES
+petsc4py.PETSc.InsertMode.INSERT_BC	petsc4py.PETSc.InsertMode-class.html#INSERT_BC
 petsc4py.PETSc.InsertMode.INSERT_ALL	petsc4py.PETSc.InsertMode-class.html#INSERT_ALL
 petsc4py.PETSc.KSP	petsc4py.PETSc.KSP-class.html
 petsc4py.PETSc.KSP.getPCSide	petsc4py.PETSc.KSP-class.html#getPCSide
@@ -937,6 +1030,7 @@ petsc4py.PETSc.Object.__lt__	petsc4py.PETSc.Object-class.html#__lt__
 petsc4py.PETSc.KSP.its	petsc4py.PETSc.KSP-class.html#its
 petsc4py.PETSc.Object.getTabLevel	petsc4py.PETSc.Object-class.html#getTabLevel
 petsc4py.PETSc.Object.compose	petsc4py.PETSc.Object-class.html#compose
+petsc4py.PETSc.Object.viewFromOptions	petsc4py.PETSc.Object-class.html#viewFromOptions
 petsc4py.PETSc.KSP.monitor	petsc4py.PETSc.KSP-class.html#monitor
 petsc4py.PETSc.KSP.setGMRESRestart	petsc4py.PETSc.KSP-class.html#setGMRESRestart
 petsc4py.PETSc.KSP.setOperators	petsc4py.PETSc.KSP-class.html#setOperators
@@ -1052,48 +1146,48 @@ petsc4py.PETSc.KSP.solve	petsc4py.PETSc.KSP-class.html#solve
 petsc4py.PETSc.Object.klass	petsc4py.PETSc.Object-class.html#klass
 petsc4py.PETSc.KSP.setPythonContext	petsc4py.PETSc.KSP-class.html#setPythonContext
 petsc4py.PETSc.KSP.ConvergedReason	petsc4py.PETSc.KSP.ConvergedReason-class.html
-petsc4py.PETSc.KSP.ConvergedReason.DIVERGED_MAX_IT	petsc4py.PETSc.KSP.ConvergedReason-class.html#DIVERGED_MAX_IT
-petsc4py.PETSc.KSP.ConvergedReason.DIVERGED_INDEFINITE_PC	petsc4py.PETSc.KSP.ConvergedReason-class.html#DIVERGED_INDEFINITE_PC
-petsc4py.PETSc.KSP.ConvergedReason.CONVERGED_ATOL	petsc4py.PETSc.KSP.ConvergedReason-class.html#CONVERGED_ATOL
+petsc4py.PETSc.KSP.ConvergedReason.CONVERGED_ITS	petsc4py.PETSc.KSP.ConvergedReason-class.html#CONVERGED_ITS
 petsc4py.PETSc.KSP.ConvergedReason.DIVERGED_BREAKDOWN	petsc4py.PETSc.KSP.ConvergedReason-class.html#DIVERGED_BREAKDOWN
-petsc4py.PETSc.KSP.ConvergedReason.DIVERGED_NONSYMMETRIC	petsc4py.PETSc.KSP.ConvergedReason-class.html#DIVERGED_NONSYMMETRIC
-petsc4py.PETSc.KSP.ConvergedReason.DIVERGED_INDEFINITE_MAT	petsc4py.PETSc.KSP.ConvergedReason-class.html#DIVERGED_INDEFINITE_MAT
-petsc4py.PETSc.KSP.ConvergedReason.CONVERGED_CG_CONSTRAINED	petsc4py.PETSc.KSP.ConvergedReason-class.html#CONVERGED_CG_CONSTRAINED
 petsc4py.PETSc.KSP.ConvergedReason.DIVERGED_DTOL	petsc4py.PETSc.KSP.ConvergedReason-class.html#DIVERGED_DTOL
-petsc4py.PETSc.KSP.ConvergedReason.DIVERGED_BREAKDOWN_BICG	petsc4py.PETSc.KSP.ConvergedReason-class.html#DIVERGED_BREAKDOWN_BICG
-petsc4py.PETSc.KSP.ConvergedReason.ITERATING	petsc4py.PETSc.KSP.ConvergedReason-class.html#ITERATING
-petsc4py.PETSc.KSP.ConvergedReason.CONVERGED_ITS	petsc4py.PETSc.KSP.ConvergedReason-class.html#CONVERGED_ITS
-petsc4py.PETSc.KSP.ConvergedReason.DIVERGED_NULL	petsc4py.PETSc.KSP.ConvergedReason-class.html#DIVERGED_NULL
-petsc4py.PETSc.KSP.ConvergedReason.CONVERGED_ATOL_NORMAL	petsc4py.PETSc.KSP.ConvergedReason-class.html#CONVERGED_ATOL_NORMAL
-petsc4py.PETSc.KSP.ConvergedReason.CONVERGED_RTOL_NORMAL	petsc4py.PETSc.KSP.ConvergedReason-class.html#CONVERGED_RTOL_NORMAL
 petsc4py.PETSc.KSP.ConvergedReason.CONVERGED_STEP_LENGTH	petsc4py.PETSc.KSP.ConvergedReason-class.html#CONVERGED_STEP_LENGTH
 petsc4py.PETSc.KSP.ConvergedReason.CONVERGED_RTOL	petsc4py.PETSc.KSP.ConvergedReason-class.html#CONVERGED_RTOL
+petsc4py.PETSc.KSP.ConvergedReason.ITERATING	petsc4py.PETSc.KSP.ConvergedReason-class.html#ITERATING
+petsc4py.PETSc.KSP.ConvergedReason.CONVERGED_CG_CONSTRAINED	petsc4py.PETSc.KSP.ConvergedReason-class.html#CONVERGED_CG_CONSTRAINED
+petsc4py.PETSc.KSP.ConvergedReason.DIVERGED_INDEFINITE_MAT	petsc4py.PETSc.KSP.ConvergedReason-class.html#DIVERGED_INDEFINITE_MAT
 petsc4py.PETSc.KSP.ConvergedReason.CONVERGED_HAPPY_BREAKDOWN	petsc4py.PETSc.KSP.ConvergedReason-class.html#CONVERGED_HAPPY_BREAKDOWN
+petsc4py.PETSc.KSP.ConvergedReason.DIVERGED_NULL	petsc4py.PETSc.KSP.ConvergedReason-class.html#DIVERGED_NULL
+petsc4py.PETSc.KSP.ConvergedReason.DIVERGED_MAX_IT	petsc4py.PETSc.KSP.ConvergedReason-class.html#DIVERGED_MAX_IT
 petsc4py.PETSc.KSP.ConvergedReason.DIVERGED_NANORINF	petsc4py.PETSc.KSP.ConvergedReason-class.html#DIVERGED_NANORINF
 petsc4py.PETSc.KSP.ConvergedReason.__qualname__	petsc4py.PETSc.KSP.ConvergedReason-class.html#__qualname__
 petsc4py.PETSc.KSP.ConvergedReason.CONVERGED_ITERATING	petsc4py.PETSc.KSP.ConvergedReason-class.html#CONVERGED_ITERATING
+petsc4py.PETSc.KSP.ConvergedReason.DIVERGED_INDEFINITE_PC	petsc4py.PETSc.KSP.ConvergedReason-class.html#DIVERGED_INDEFINITE_PC
+petsc4py.PETSc.KSP.ConvergedReason.CONVERGED_ATOL_NORMAL	petsc4py.PETSc.KSP.ConvergedReason-class.html#CONVERGED_ATOL_NORMAL
+petsc4py.PETSc.KSP.ConvergedReason.CONVERGED_RTOL_NORMAL	petsc4py.PETSc.KSP.ConvergedReason-class.html#CONVERGED_RTOL_NORMAL
+petsc4py.PETSc.KSP.ConvergedReason.CONVERGED_ATOL	petsc4py.PETSc.KSP.ConvergedReason-class.html#CONVERGED_ATOL
+petsc4py.PETSc.KSP.ConvergedReason.DIVERGED_NONSYMMETRIC	petsc4py.PETSc.KSP.ConvergedReason-class.html#DIVERGED_NONSYMMETRIC
 petsc4py.PETSc.KSP.ConvergedReason.CONVERGED_CG_NEG_CURVE	petsc4py.PETSc.KSP.ConvergedReason-class.html#CONVERGED_CG_NEG_CURVE
+petsc4py.PETSc.KSP.ConvergedReason.DIVERGED_BREAKDOWN_BICG	petsc4py.PETSc.KSP.ConvergedReason-class.html#DIVERGED_BREAKDOWN_BICG
 petsc4py.PETSc.KSP.NormType	petsc4py.PETSc.KSP.NormType-class.html
-petsc4py.PETSc.KSP.NormType.PRECONDITIONED	petsc4py.PETSc.KSP.NormType-class.html#PRECONDITIONED
-petsc4py.PETSc.KSP.NormType.DEFAULT	petsc4py.PETSc.KSP.NormType-class.html#DEFAULT
-petsc4py.PETSc.KSP.NormType.NORM_NONE	petsc4py.PETSc.KSP.NormType-class.html#NORM_NONE
+petsc4py.PETSc.KSP.NormType.NORM_DEFAULT	petsc4py.PETSc.KSP.NormType-class.html#NORM_DEFAULT
 petsc4py.PETSc.KSP.NormType.UNPRECONDITIONED	petsc4py.PETSc.KSP.NormType-class.html#UNPRECONDITIONED
 petsc4py.PETSc.KSP.NormType.NONE	petsc4py.PETSc.KSP.NormType-class.html#NONE
-petsc4py.PETSc.KSP.NormType.NO	petsc4py.PETSc.KSP.NormType-class.html#NO
-petsc4py.PETSc.KSP.NormType.NORM_DEFAULT	petsc4py.PETSc.KSP.NormType-class.html#NORM_DEFAULT
+petsc4py.PETSc.KSP.NormType.NORM_PRECONDITIONED	petsc4py.PETSc.KSP.NormType-class.html#NORM_PRECONDITIONED
 petsc4py.PETSc.KSP.NormType.NATURAL	petsc4py.PETSc.KSP.NormType-class.html#NATURAL
+petsc4py.PETSc.KSP.NormType.NO	petsc4py.PETSc.KSP.NormType-class.html#NO
+petsc4py.PETSc.KSP.NormType.DEFAULT	petsc4py.PETSc.KSP.NormType-class.html#DEFAULT
+petsc4py.PETSc.KSP.NormType.PRECONDITIONED	petsc4py.PETSc.KSP.NormType-class.html#PRECONDITIONED
 petsc4py.PETSc.KSP.NormType.NORM_NATURAL	petsc4py.PETSc.KSP.NormType-class.html#NORM_NATURAL
-petsc4py.PETSc.KSP.NormType.NORM_UNPRECONDITIONED	petsc4py.PETSc.KSP.NormType-class.html#NORM_UNPRECONDITIONED
-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.NormType.NORM_UNPRECONDITIONED	petsc4py.PETSc.KSP.NormType-class.html#NORM_UNPRECONDITIONED
+petsc4py.PETSc.KSP.NormType.NORM_NONE	petsc4py.PETSc.KSP.NormType-class.html#NORM_NONE
 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.LCD	petsc4py.PETSc.KSP.Type-class.html#LCD
 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
@@ -1105,9 +1199,9 @@ petsc4py.PETSc.KSP.Type.MINRES	petsc4py.PETSc.KSP.Type-class.html#MINRES
 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.CGGLTR	petsc4py.PETSc.KSP.Type-class.html#CGGLTR
 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.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
@@ -1123,11 +1217,12 @@ 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.FETIDP	petsc4py.PETSc.KSP.Type-class.html#FETIDP
+petsc4py.PETSc.KSP.Type.CGNASH	petsc4py.PETSc.KSP.Type-class.html#CGNASH
 petsc4py.PETSc.KSP.Type.PREONLY	petsc4py.PETSc.KSP.Type-class.html#PREONLY
 petsc4py.PETSc.KSP.Type.GMRES	petsc4py.PETSc.KSP.Type-class.html#GMRES
 petsc4py.PETSc.KSP.Type.RICHARDSON	petsc4py.PETSc.KSP.Type-class.html#RICHARDSON
-petsc4py.PETSc.KSP.Type.NASH	petsc4py.PETSc.KSP.Type-class.html#NASH
+petsc4py.PETSc.KSP.Type.CGSTCG	petsc4py.PETSc.KSP.Type-class.html#CGSTCG
 petsc4py.PETSc.LGMap	petsc4py.PETSc.LGMap-class.html
 petsc4py.PETSc.Object.classid	petsc4py.PETSc.Object-class.html#classid
 petsc4py.PETSc.Object.decRef	petsc4py.PETSc.Object-class.html#decRef
@@ -1142,9 +1237,11 @@ petsc4py.PETSc.LGMap.getBlockSize	petsc4py.PETSc.LGMap-class.html#getBlockSize
 petsc4py.PETSc.LGMap.apply	petsc4py.PETSc.LGMap-class.html#apply
 petsc4py.PETSc.Object.__lt__	petsc4py.PETSc.Object-class.html#__lt__
 petsc4py.PETSc.LGMap.block_size	petsc4py.PETSc.LGMap-class.html#block_size
-petsc4py.PETSc.LGMap.size	petsc4py.PETSc.LGMap-class.html#size
+petsc4py.PETSc.LGMap.Type	petsc4py.PETSc.LGMap.Type-class.html
+petsc4py.PETSc.LGMap.setType	petsc4py.PETSc.LGMap-class.html#setType
 petsc4py.PETSc.Object.getTabLevel	petsc4py.PETSc.Object-class.html#getTabLevel
 petsc4py.PETSc.Object.compose	petsc4py.PETSc.Object-class.html#compose
+petsc4py.PETSc.Object.viewFromOptions	petsc4py.PETSc.Object-class.html#viewFromOptions
 petsc4py.PETSc.LGMap.__new__	petsc4py.PETSc.LGMap-class.html#__new__
 petsc4py.PETSc.LGMap.applyBlockInverse	petsc4py.PETSc.LGMap-class.html#applyBlockInverse
 petsc4py.PETSc.LGMap.getBlockIndices	petsc4py.PETSc.LGMap-class.html#getBlockIndices
@@ -1155,6 +1252,7 @@ petsc4py.PETSc.LGMap.applyInverse	petsc4py.PETSc.LGMap-class.html#applyInverse
 petsc4py.PETSc.LGMap.__call__	petsc4py.PETSc.LGMap-class.html#__call__
 petsc4py.PETSc.LGMap.destroy	petsc4py.PETSc.LGMap-class.html#destroy
 petsc4py.PETSc.Object.getType	petsc4py.PETSc.Object-class.html#getType
+petsc4py.PETSc.LGMap.size	petsc4py.PETSc.LGMap-class.html#size
 petsc4py.PETSc.Object.type	petsc4py.PETSc.Object-class.html#type
 petsc4py.PETSc.Object.__ne__	petsc4py.PETSc.Object-class.html#__ne__
 petsc4py.PETSc.Object.stateIncrease	petsc4py.PETSc.Object-class.html#stateIncrease
@@ -1163,14 +1261,13 @@ petsc4py.PETSc.Object.handle	petsc4py.PETSc.Object-class.html#handle
 petsc4py.PETSc.LGMap.applyBlock	petsc4py.PETSc.LGMap-class.html#applyBlock
 petsc4py.PETSc.Object.setOptionsPrefix	petsc4py.PETSc.Object-class.html#setOptionsPrefix
 petsc4py.PETSc.Object.__deepcopy__	petsc4py.PETSc.Object-class.html#__deepcopy__
-petsc4py.PETSc.Object.setFromOptions	petsc4py.PETSc.Object-class.html#setFromOptions
 petsc4py.PETSc.LGMap.getBlockInfo	petsc4py.PETSc.LGMap-class.html#getBlockInfo
 petsc4py.PETSc.Object.refcount	petsc4py.PETSc.Object-class.html#refcount
+petsc4py.PETSc.Object.comm	petsc4py.PETSc.Object-class.html#comm
 petsc4py.PETSc.LGMap.indices	petsc4py.PETSc.LGMap-class.html#indices
 petsc4py.PETSc.Object.getOptionsPrefix	petsc4py.PETSc.Object-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.LGMap.MapType	petsc4py.PETSc.LGMap.MapType-class.html
+petsc4py.PETSc.LGMap.setFromOptions	petsc4py.PETSc.LGMap-class.html#setFromOptions
 petsc4py.PETSc.Object.__gt__	petsc4py.PETSc.Object-class.html#__gt__
 petsc4py.PETSc.LGMap.getIndices	petsc4py.PETSc.LGMap-class.html#getIndices
 petsc4py.PETSc.Object.__eq__	petsc4py.PETSc.Object-class.html#__eq__
@@ -1183,6 +1280,7 @@ petsc4py.PETSc.LGMap.createIS	petsc4py.PETSc.LGMap-class.html#createIS
 petsc4py.PETSc.Object.getComm	petsc4py.PETSc.Object-class.html#getComm
 petsc4py.PETSc.Object.prefix	petsc4py.PETSc.Object-class.html#prefix
 petsc4py.PETSc.Object.setTabLevel	petsc4py.PETSc.Object-class.html#setTabLevel
+petsc4py.PETSc.LGMap.MapMode	petsc4py.PETSc.LGMap.MapMode-class.html
 petsc4py.PETSc.Object.__le__	petsc4py.PETSc.Object-class.html#__le__
 petsc4py.PETSc.Object.klass	petsc4py.PETSc.Object-class.html#klass
 petsc4py.PETSc.Object.getClassId	petsc4py.PETSc.Object-class.html#getClassId
@@ -1193,80 +1291,84 @@ petsc4py.PETSc.LGMap.block_info	petsc4py.PETSc.LGMap-class.html#block_info
 petsc4py.PETSc.Object.getName	petsc4py.PETSc.Object-class.html#getName
 petsc4py.PETSc.Object.__ge__	petsc4py.PETSc.Object-class.html#__ge__
 petsc4py.PETSc.LGMap.view	petsc4py.PETSc.LGMap-class.html#view
-petsc4py.PETSc.LGMap.MapType	petsc4py.PETSc.LGMap.MapType-class.html
-petsc4py.PETSc.LGMap.MapType.DROP	petsc4py.PETSc.LGMap.MapType-class.html#DROP
-petsc4py.PETSc.LGMap.MapType.MASK	petsc4py.PETSc.LGMap.MapType-class.html#MASK
-petsc4py.PETSc.LGMap.MapType.__qualname__	petsc4py.PETSc.LGMap.MapType-class.html#__qualname__
+petsc4py.PETSc.LGMap.MapMode	petsc4py.PETSc.LGMap.MapMode-class.html
+petsc4py.PETSc.LGMap.MapMode.__qualname__	petsc4py.PETSc.LGMap.MapMode-class.html#__qualname__
+petsc4py.PETSc.LGMap.MapMode.DROP	petsc4py.PETSc.LGMap.MapMode-class.html#DROP
+petsc4py.PETSc.LGMap.MapMode.MASK	petsc4py.PETSc.LGMap.MapMode-class.html#MASK
+petsc4py.PETSc.LGMap.Type	petsc4py.PETSc.LGMap.Type-class.html
+petsc4py.PETSc.LGMap.Type.__qualname__	petsc4py.PETSc.LGMap.Type-class.html#__qualname__
+petsc4py.PETSc.LGMap.Type.HASH	petsc4py.PETSc.LGMap.Type-class.html#HASH
+petsc4py.PETSc.LGMap.Type.BASIC	petsc4py.PETSc.LGMap.Type-class.html#BASIC
 petsc4py.PETSc.Log	petsc4py.PETSc.Log-class.html
-petsc4py.PETSc.Log.getTime	petsc4py.PETSc.Log-class.html#getTime
-petsc4py.PETSc.Log.logFlops	petsc4py.PETSc.Log-class.html#logFlops
-petsc4py.PETSc.Log.getCPUTime	petsc4py.PETSc.Log-class.html#getCPUTime
-petsc4py.PETSc.Log.__new__	petsc4py.PETSc.Log-class.html#__new__
-petsc4py.PETSc.Log.destroy	petsc4py.PETSc.Log-class.html#destroy
-petsc4py.PETSc.Log.Class	petsc4py.PETSc.Log-class.html#Class
-petsc4py.PETSc.Log.Stage	petsc4py.PETSc.Log-class.html#Stage
 petsc4py.PETSc.Log.begin	petsc4py.PETSc.Log-class.html#begin
+petsc4py.PETSc.Log.__new__	petsc4py.PETSc.Log-class.html#__new__
+petsc4py.PETSc.Log.getTime	petsc4py.PETSc.Log-class.html#getTime
 petsc4py.PETSc.Log.getFlops	petsc4py.PETSc.Log-class.html#getFlops
+petsc4py.PETSc.Log.view	petsc4py.PETSc.Log-class.html#view
 petsc4py.PETSc.Log.addFlops	petsc4py.PETSc.Log-class.html#addFlops
+petsc4py.PETSc.Log.Class	petsc4py.PETSc.Log-class.html#Class
+petsc4py.PETSc.Log.destroy	petsc4py.PETSc.Log-class.html#destroy
+petsc4py.PETSc.Log.Stage	petsc4py.PETSc.Log-class.html#Stage
+petsc4py.PETSc.Log.logFlops	petsc4py.PETSc.Log-class.html#logFlops
 petsc4py.PETSc.Log.Event	petsc4py.PETSc.Log-class.html#Event
-petsc4py.PETSc.Log.view	petsc4py.PETSc.Log-class.html#view
+petsc4py.PETSc.Log.getCPUTime	petsc4py.PETSc.Log-class.html#getCPUTime
 petsc4py.PETSc.LogClass	petsc4py.PETSc.LogClass-class.html
 petsc4py.PETSc.LogClass.__int__	petsc4py.PETSc.LogClass-class.html#__int__
 petsc4py.PETSc.LogClass.activate	petsc4py.PETSc.LogClass-class.html#activate
-petsc4py.PETSc.LogClass.id	petsc4py.PETSc.LogClass-class.html#id
 petsc4py.PETSc.LogClass.__new__	petsc4py.PETSc.LogClass-class.html#__new__
 petsc4py.PETSc.LogClass.deactivate	petsc4py.PETSc.LogClass-class.html#deactivate
 petsc4py.PETSc.LogClass.getName	petsc4py.PETSc.LogClass-class.html#getName
 petsc4py.PETSc.LogClass.getActive	petsc4py.PETSc.LogClass-class.html#getActive
 petsc4py.PETSc.LogClass.setActive	petsc4py.PETSc.LogClass-class.html#setActive
 petsc4py.PETSc.LogClass.active	petsc4py.PETSc.LogClass-class.html#active
-petsc4py.PETSc.LogClass.name	petsc4py.PETSc.LogClass-class.html#name
 petsc4py.PETSc.LogClass.__long__	petsc4py.PETSc.LogClass-class.html#__long__
+petsc4py.PETSc.LogClass.id	petsc4py.PETSc.LogClass-class.html#id
+petsc4py.PETSc.LogClass.name	petsc4py.PETSc.LogClass-class.html#name
 petsc4py.PETSc.LogEvent	petsc4py.PETSc.LogEvent-class.html
 petsc4py.PETSc.LogEvent.__int__	petsc4py.PETSc.LogEvent-class.html#__int__
+petsc4py.PETSc.LogEvent.setActive	petsc4py.PETSc.LogEvent-class.html#setActive
+petsc4py.PETSc.LogEvent.begin	petsc4py.PETSc.LogEvent-class.html#begin
 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
 petsc4py.PETSc.LogEvent.__new__	petsc4py.PETSc.LogEvent-class.html#__new__
 petsc4py.PETSc.LogEvent.deactivate	petsc4py.PETSc.LogEvent-class.html#deactivate
+petsc4py.PETSc.LogEvent.getActive	petsc4py.PETSc.LogEvent-class.html#getActive
 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.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.barrierBegin	petsc4py.PETSc.LogEvent-class.html#barrierBegin
+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.__long__	petsc4py.PETSc.LogEvent-class.html#__long__
 petsc4py.PETSc.LogEvent.setActiveAll	petsc4py.PETSc.LogEvent-class.html#setActiveAll
 petsc4py.PETSc.LogEvent.active	petsc4py.PETSc.LogEvent-class.html#active
+petsc4py.PETSc.LogEvent.__exit__	petsc4py.PETSc.LogEvent-class.html#__exit__
 petsc4py.PETSc.LogEvent.barrierEnd	petsc4py.PETSc.LogEvent-class.html#barrierEnd
-petsc4py.PETSc.LogEvent.barrierBegin	petsc4py.PETSc.LogEvent-class.html#barrierBegin
+petsc4py.PETSc.LogEvent.id	petsc4py.PETSc.LogEvent-class.html#id
 petsc4py.PETSc.LogEvent.name	petsc4py.PETSc.LogEvent-class.html#name
-petsc4py.PETSc.LogEvent.__long__	petsc4py.PETSc.LogEvent-class.html#__long__
 petsc4py.PETSc.LogStage	petsc4py.PETSc.LogStage-class.html
 petsc4py.PETSc.LogStage.__int__	petsc4py.PETSc.LogStage-class.html#__int__
 petsc4py.PETSc.LogStage.activate	petsc4py.PETSc.LogStage-class.html#activate
-petsc4py.PETSc.LogStage.pop	petsc4py.PETSc.LogStage-class.html#pop
-petsc4py.PETSc.LogStage.getVisible	petsc4py.PETSc.LogStage-class.html#getVisible
-petsc4py.PETSc.LogStage.visible	petsc4py.PETSc.LogStage-class.html#visible
-petsc4py.PETSc.LogStage.id	petsc4py.PETSc.LogStage-class.html#id
+petsc4py.PETSc.LogStage.__exit__	petsc4py.PETSc.LogStage-class.html#__exit__
 petsc4py.PETSc.LogStage.__new__	petsc4py.PETSc.LogStage-class.html#__new__
 petsc4py.PETSc.LogStage.deactivate	petsc4py.PETSc.LogStage-class.html#deactivate
 petsc4py.PETSc.LogStage.getName	petsc4py.PETSc.LogStage-class.html#getName
 petsc4py.PETSc.LogStage.__enter__	petsc4py.PETSc.LogStage-class.html#__enter__
+petsc4py.PETSc.LogStage.pop	petsc4py.PETSc.LogStage-class.html#pop
+petsc4py.PETSc.LogStage.getVisible	petsc4py.PETSc.LogStage-class.html#getVisible
+petsc4py.PETSc.LogStage.visible	petsc4py.PETSc.LogStage-class.html#visible
 petsc4py.PETSc.LogStage.getActive	petsc4py.PETSc.LogStage-class.html#getActive
+petsc4py.PETSc.LogStage.push	petsc4py.PETSc.LogStage-class.html#push
 petsc4py.PETSc.LogStage.setActive	petsc4py.PETSc.LogStage-class.html#setActive
-petsc4py.PETSc.LogStage.__exit__	petsc4py.PETSc.LogStage-class.html#__exit__
 petsc4py.PETSc.LogStage.active	petsc4py.PETSc.LogStage-class.html#active
-petsc4py.PETSc.LogStage.name	petsc4py.PETSc.LogStage-class.html#name
-petsc4py.PETSc.LogStage.push	petsc4py.PETSc.LogStage-class.html#push
 petsc4py.PETSc.LogStage.__long__	petsc4py.PETSc.LogStage-class.html#__long__
 petsc4py.PETSc.LogStage.setVisible	petsc4py.PETSc.LogStage-class.html#setVisible
+petsc4py.PETSc.LogStage.id	petsc4py.PETSc.LogStage-class.html#id
+petsc4py.PETSc.LogStage.name	petsc4py.PETSc.LogStage-class.html#name
 petsc4py.PETSc.Mat	petsc4py.PETSc.Mat-class.html
 petsc4py.PETSc.Mat.setPreallocationCSR	petsc4py.PETSc.Mat-class.html#setPreallocationCSR
 petsc4py.PETSc.Mat.load	petsc4py.PETSc.Mat-class.html#load
-petsc4py.PETSc.Mat.Stencil	petsc4py.PETSc._Mat_Stencil-class.html
+petsc4py.PETSc.Mat.getLGMap	petsc4py.PETSc.Mat-class.html#getLGMap
 petsc4py.PETSc.Object.__ne__	petsc4py.PETSc.Object-class.html#__ne__
 petsc4py.PETSc.Mat.getOwnershipIS	petsc4py.PETSc.Mat-class.html#getOwnershipIS
 petsc4py.PETSc.Mat.copy	petsc4py.PETSc.Mat-class.html#copy
@@ -1274,7 +1376,7 @@ petsc4py.PETSc.Mat.getOwnershipRangesColumn	petsc4py.PETSc.Mat-class.html#getOwn
 petsc4py.PETSc.Mat.getSize	petsc4py.PETSc.Mat-class.html#getSize
 petsc4py.PETSc.Mat.getRowIJ	petsc4py.PETSc.Mat-class.html#getRowIJ
 petsc4py.PETSc.Object.getAttr	petsc4py.PETSc.Object-class.html#getAttr
-petsc4py.PETSc.Mat.getPythonContext	petsc4py.PETSc.Mat-class.html#getPythonContext
+petsc4py.PETSc.Mat.Stencil	petsc4py.PETSc._Mat_Stencil-class.html
 petsc4py.PETSc.Mat.setValuesBlockedIJV	petsc4py.PETSc.Mat-class.html#setValuesBlockedIJV
 petsc4py.PETSc.Mat.createSubMatrix	petsc4py.PETSc.Mat-class.html#createSubMatrix
 petsc4py.PETSc.Mat.__rdiv__	petsc4py.PETSc.Mat-class.html#__rdiv__
@@ -1287,16 +1389,19 @@ petsc4py.PETSc.Mat.matMultNumeric	petsc4py.PETSc.Mat-class.html#matMultNumeric
 petsc4py.PETSc.Mat.imagPart	petsc4py.PETSc.Mat-class.html#imagPart
 petsc4py.PETSc.Mat.multHermitianAdd	petsc4py.PETSc.Mat-class.html#multHermitianAdd
 petsc4py.PETSc.Mat.setPreallocationDense	petsc4py.PETSc.Mat-class.html#setPreallocationDense
+petsc4py.PETSc.Object.viewFromOptions	petsc4py.PETSc.Object-class.html#viewFromOptions
 petsc4py.PETSc.Mat.setNearNullSpace	petsc4py.PETSc.Mat-class.html#setNearNullSpace
 petsc4py.PETSc.Object.__eq__	petsc4py.PETSc.Object-class.html#__eq__
 petsc4py.PETSc.Mat.OrderingType	petsc4py.PETSc.Mat.OrderingType-class.html
 petsc4py.PETSc.Mat.isHermitianKnown	petsc4py.PETSc.Mat-class.html#isHermitianKnown
 petsc4py.PETSc.Mat.setPythonContext	petsc4py.PETSc.Mat-class.html#setPythonContext
 petsc4py.PETSc.Mat.createSBAIJ	petsc4py.PETSc.Mat-class.html#createSBAIJ
+petsc4py.PETSc.Object.getName	petsc4py.PETSc.Object-class.html#getName
 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.Mat.createSubMatrices	petsc4py.PETSc.Mat-class.html#createSubMatrices
 petsc4py.PETSc.Object.handle	petsc4py.PETSc.Object-class.html#handle
 petsc4py.PETSc.Mat.isStructurallySymmetric	petsc4py.PETSc.Mat-class.html#isStructurallySymmetric
 petsc4py.PETSc.Mat.setOptionsPrefix	petsc4py.PETSc.Mat-class.html#setOptionsPrefix
@@ -1307,6 +1412,7 @@ petsc4py.PETSc.Mat.factorNumericCholesky	petsc4py.PETSc.Mat-class.html#factorNum
 petsc4py.PETSc.Mat.setBlockSize	petsc4py.PETSc.Mat-class.html#setBlockSize
 petsc4py.PETSc.Mat.setValueStencil	petsc4py.PETSc.Mat-class.html#setValueStencil
 petsc4py.PETSc.Object.comm	petsc4py.PETSc.Object-class.html#comm
+petsc4py.PETSc.Mat.Option	petsc4py.PETSc.Mat.Option-class.html
 petsc4py.PETSc.Mat.setFromOptions	petsc4py.PETSc.Mat-class.html#setFromOptions
 petsc4py.PETSc.Object.__gt__	petsc4py.PETSc.Object-class.html#__gt__
 petsc4py.PETSc.Object.__nonzero__	petsc4py.PETSc.Object-class.html#__nonzero__
@@ -1344,15 +1450,13 @@ petsc4py.PETSc.Mat.getBlockSize	petsc4py.PETSc.Mat-class.html#getBlockSize
 petsc4py.PETSc.Mat.getNearNullSpace	petsc4py.PETSc.Mat-class.html#getNearNullSpace
 petsc4py.PETSc.Mat.multHermitian	petsc4py.PETSc.Mat-class.html#multHermitian
 petsc4py.PETSc.Mat.scale	petsc4py.PETSc.Mat-class.html#scale
-petsc4py.PETSc.Mat.Option	petsc4py.PETSc.Mat.Option-class.html
+petsc4py.PETSc.Mat.getTransposeNullSpace	petsc4py.PETSc.Mat-class.html#getTransposeNullSpace
 petsc4py.PETSc.Mat.setPreallocationNNZ	petsc4py.PETSc.Mat-class.html#setPreallocationNNZ
 petsc4py.PETSc.Mat.createScatter	petsc4py.PETSc.Mat-class.html#createScatter
 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
 petsc4py.PETSc.Mat.setType	petsc4py.PETSc.Mat-class.html#setType
@@ -1360,12 +1464,13 @@ petsc4py.PETSc.Mat.setBlockSizes	petsc4py.PETSc.Mat-class.html#setBlockSizes
 petsc4py.PETSc.Mat.matTransposeMult	petsc4py.PETSc.Mat-class.html#matTransposeMult
 petsc4py.PETSc.Mat.getBlockSizes	petsc4py.PETSc.Mat-class.html#getBlockSizes
 petsc4py.PETSc.Mat.setValue	petsc4py.PETSc.Mat-class.html#setValue
-petsc4py.PETSc.Mat.FactorShiftType	petsc4py.PETSc.Mat.FactorShiftType-class.html
+petsc4py.PETSc.Mat.getRow	petsc4py.PETSc.Mat-class.html#getRow
 petsc4py.PETSc.Mat.matMult	petsc4py.PETSc.Mat-class.html#matMult
 petsc4py.PETSc.Mat.setUp	petsc4py.PETSc.Mat-class.html#setUp
 petsc4py.PETSc.Mat.transpose	petsc4py.PETSc.Mat-class.html#transpose
 petsc4py.PETSc.Object.getTabLevel	petsc4py.PETSc.Object-class.html#getTabLevel
 petsc4py.PETSc.Mat.createPython	petsc4py.PETSc.Mat-class.html#createPython
+petsc4py.PETSc.Mat.PtAP	petsc4py.PETSc.Mat-class.html#PtAP
 petsc4py.PETSc.Mat.getDenseArray	petsc4py.PETSc.Mat-class.html#getDenseArray
 petsc4py.PETSc.Mat.__setitem__	petsc4py.PETSc.Mat-class.html#__setitem__
 petsc4py.PETSc.Mat.setMumpsCntl	petsc4py.PETSc.Mat-class.html#setMumpsCntl
@@ -1378,16 +1483,16 @@ 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.createSubMatrixVirtual	petsc4py.PETSc.Mat-class.html#createSubMatrixVirtual
 petsc4py.PETSc.Mat.__imul__	petsc4py.PETSc.Mat-class.html#__imul__
 petsc4py.PETSc.Mat.getLocalSize	petsc4py.PETSc.Mat-class.html#getLocalSize
 petsc4py.PETSc.Mat.shift	petsc4py.PETSc.Mat-class.html#shift
 petsc4py.PETSc.Mat.getColumnVector	petsc4py.PETSc.Mat-class.html#getColumnVector
 petsc4py.PETSc.Mat.getLocalSubMatrix	petsc4py.PETSc.Mat-class.html#getLocalSubMatrix
 petsc4py.PETSc.Mat.local_size	petsc4py.PETSc.Mat-class.html#local_size
+petsc4py.PETSc.Mat.getPythonContext	petsc4py.PETSc.Mat-class.html#getPythonContext
 petsc4py.PETSc.Mat.chop	petsc4py.PETSc.Mat-class.html#chop
 petsc4py.PETSc.Mat.setValueLocal	petsc4py.PETSc.Mat-class.html#setValueLocal
-petsc4py.PETSc.Mat.getRow	petsc4py.PETSc.Mat-class.html#getRow
 petsc4py.PETSc.Mat.__mul__	petsc4py.PETSc.Mat-class.html#__mul__
 petsc4py.PETSc.Mat.factorCholesky	petsc4py.PETSc.Mat-class.html#factorCholesky
 petsc4py.PETSc.Mat.getDiagonalBlock	petsc4py.PETSc.Mat-class.html#getDiagonalBlock
@@ -1401,7 +1506,7 @@ petsc4py.PETSc.Mat.zeroRows	petsc4py.PETSc.Mat-class.html#zeroRows
 petsc4py.PETSc.Mat.matSolve	petsc4py.PETSc.Mat-class.html#matSolve
 petsc4py.PETSc.Mat.diagonalScale	petsc4py.PETSc.Mat-class.html#diagonalScale
 petsc4py.PETSc.Mat.block_sizes	petsc4py.PETSc.Mat-class.html#block_sizes
-petsc4py.PETSc.Mat.__getitem__	petsc4py.PETSc.Mat-class.html#__getitem__
+petsc4py.PETSc.Mat.FactorShiftType	petsc4py.PETSc.Mat.FactorShiftType-class.html
 petsc4py.PETSc.Mat.setStencil	petsc4py.PETSc.Mat-class.html#setStencil
 petsc4py.PETSc.Mat.hermitian	petsc4py.PETSc.Mat-class.html#hermitian
 petsc4py.PETSc.Mat.__rsub__	petsc4py.PETSc.Mat-class.html#__rsub__
@@ -1411,7 +1516,7 @@ 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
-petsc4py.PETSc.Object.fortran	petsc4py.PETSc.Object-class.html#fortran
+petsc4py.PETSc.Mat.setTransposeNullSpace	petsc4py.PETSc.Mat-class.html#setTransposeNullSpace
 petsc4py.PETSc.Mat.AssemblyType	petsc4py.PETSc.Mat.AssemblyType-class.html
 petsc4py.PETSc.Mat.create	petsc4py.PETSc.Mat-class.html#create
 petsc4py.PETSc.Mat.factorICC	petsc4py.PETSc.Mat-class.html#factorICC
@@ -1437,12 +1542,14 @@ petsc4py.PETSc.Mat.createAIJWithArrays	petsc4py.PETSc.Mat-class.html#createAIJWi
 petsc4py.PETSc.Mat.getNullSpace	petsc4py.PETSc.Mat-class.html#getNullSpace
 petsc4py.PETSc.Object.setName	petsc4py.PETSc.Object-class.html#setName
 petsc4py.PETSc.Mat.setValuesLocalIJV	petsc4py.PETSc.Mat-class.html#setValuesLocalIJV
+petsc4py.PETSc.Mat.solveTranspose	petsc4py.PETSc.Mat-class.html#solveTranspose
 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.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.Object.fortran	petsc4py.PETSc.Object-class.html#fortran
 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
@@ -1501,6 +1608,7 @@ 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
 petsc4py.PETSc.Mat.__div__	petsc4py.PETSc.Mat-class.html#__div__
+petsc4py.PETSc.Mat.__getitem__	petsc4py.PETSc.Mat-class.html#__getitem__
 petsc4py.PETSc.Mat.solve	petsc4py.PETSc.Mat-class.html#solve
 petsc4py.PETSc.Mat.__neg__	petsc4py.PETSc.Mat-class.html#__neg__
 petsc4py.PETSc.Mat.solveForward	petsc4py.PETSc.Mat-class.html#solveForward
@@ -1508,14 +1616,14 @@ petsc4py.PETSc.Mat.zeroRowsColumns	petsc4py.PETSc.Mat-class.html#zeroRowsColumns
 petsc4py.PETSc.Mat.multAdd	petsc4py.PETSc.Mat-class.html#multAdd
 petsc4py.PETSc.Mat.getInertia	petsc4py.PETSc.Mat-class.html#getInertia
 petsc4py.PETSc.Mat.setValuesCSR	petsc4py.PETSc.Mat-class.html#setValuesCSR
-petsc4py.PETSc.Object.getName	petsc4py.PETSc.Object-class.html#getName
+petsc4py.PETSc.Mat.getLRCMats	petsc4py.PETSc.Mat-class.html#getLRCMats
 petsc4py.PETSc.Mat.restoreLocalSubMatrix	petsc4py.PETSc.Mat-class.html#restoreLocalSubMatrix
 petsc4py.PETSc.Mat.AssemblyType	petsc4py.PETSc.Mat.AssemblyType-class.html
-petsc4py.PETSc.Mat.AssemblyType.FINAL_ASSEMBLY	petsc4py.PETSc.Mat.AssemblyType-class.html#FINAL_ASSEMBLY
 petsc4py.PETSc.Mat.AssemblyType.__qualname__	petsc4py.PETSc.Mat.AssemblyType-class.html#__qualname__
+petsc4py.PETSc.Mat.AssemblyType.FINAL_ASSEMBLY	petsc4py.PETSc.Mat.AssemblyType-class.html#FINAL_ASSEMBLY
 petsc4py.PETSc.Mat.AssemblyType.FLUSH_ASSEMBLY	petsc4py.PETSc.Mat.AssemblyType-class.html#FLUSH_ASSEMBLY
-petsc4py.PETSc.Mat.AssemblyType.FLUSH	petsc4py.PETSc.Mat.AssemblyType-class.html#FLUSH
 petsc4py.PETSc.Mat.AssemblyType.FINAL	petsc4py.PETSc.Mat.AssemblyType-class.html#FINAL
+petsc4py.PETSc.Mat.AssemblyType.FLUSH	petsc4py.PETSc.Mat.AssemblyType-class.html#FLUSH
 petsc4py.PETSc.Mat.FactorShiftType	petsc4py.PETSc.Mat.FactorShiftType-class.html
 petsc4py.PETSc.Mat.FactorShiftType.NONZERO	petsc4py.PETSc.Mat.FactorShiftType-class.html#NONZERO
 petsc4py.PETSc.Mat.FactorShiftType.POSITIVE_DEFINITE	petsc4py.PETSc.Mat.FactorShiftType-class.html#POSITIVE_DEFINITE
@@ -1525,9 +1633,9 @@ petsc4py.PETSc.Mat.FactorShiftType.NZ	petsc4py.PETSc.Mat.FactorShiftType-class.h
 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.GLOBAL_SUM	petsc4py.PETSc.Mat.InfoType-class.html#GLOBAL_SUM
 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
@@ -1554,43 +1662,42 @@ petsc4py.PETSc.Mat.Option.HERMITIAN	petsc4py.PETSc.Mat.Option-class.html#HERMITI
 petsc4py.PETSc.Mat.Option.GETROW_UPPERTRIANGULAR	petsc4py.PETSc.Mat.Option-class.html#GETROW_UPPERTRIANGULAR
 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.ROWLENGTH	petsc4py.PETSc.Mat.OrderingType-class.html#ROWLENGTH
+petsc4py.PETSc.Mat.OrderingType.NATURAL	petsc4py.PETSc.Mat.OrderingType-class.html#NATURAL
 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
-petsc4py.PETSc.Mat.OrderingType.QMD	petsc4py.PETSc.Mat.OrderingType-class.html#QMD
-petsc4py.PETSc.Mat.OrderingType.ROWLENGTH	petsc4py.PETSc.Mat.OrderingType-class.html#ROWLENGTH
-petsc4py.PETSc.Mat.OrderingType.NATURAL	petsc4py.PETSc.Mat.OrderingType-class.html#NATURAL
 petsc4py.PETSc.Mat.OrderingType.__qualname__	petsc4py.PETSc.Mat.OrderingType-class.html#__qualname__
+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.QMD	petsc4py.PETSc.Mat.OrderingType-class.html#QMD
 petsc4py.PETSc.Mat.SORType	petsc4py.PETSc.Mat.SORType-class.html
-petsc4py.PETSc.Mat.SORType.APPLY_LOWER	petsc4py.PETSc.Mat.SORType-class.html#APPLY_LOWER
+petsc4py.PETSc.Mat.SORType.LOCAL_FORWARD_SWEEP	petsc4py.PETSc.Mat.SORType-class.html#LOCAL_FORWARD_SWEEP
 petsc4py.PETSc.Mat.SORType.ZERO_INITIAL_GUESS	petsc4py.PETSc.Mat.SORType-class.html#ZERO_INITIAL_GUESS
-petsc4py.PETSc.Mat.SORType.EISENSTAT	petsc4py.PETSc.Mat.SORType-class.html#EISENSTAT
+petsc4py.PETSc.Mat.SORType.APPLY_LOWER	petsc4py.PETSc.Mat.SORType-class.html#APPLY_LOWER
+petsc4py.PETSc.Mat.SORType.FORWARD_SWEEP	petsc4py.PETSc.Mat.SORType-class.html#FORWARD_SWEEP
 petsc4py.PETSc.Mat.SORType.SYMMETRY_SWEEP	petsc4py.PETSc.Mat.SORType-class.html#SYMMETRY_SWEEP
+petsc4py.PETSc.Mat.SORType.__qualname__	petsc4py.PETSc.Mat.SORType-class.html#__qualname__
 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
-petsc4py.PETSc.Mat.SORType.__qualname__	petsc4py.PETSc.Mat.SORType-class.html#__qualname__
 petsc4py.PETSc.Mat.SORType.LOCAL_BACKWARD_SWEEP	petsc4py.PETSc.Mat.SORType-class.html#LOCAL_BACKWARD_SWEEP
+petsc4py.PETSc.Mat.SORType.EISENSTAT	petsc4py.PETSc.Mat.SORType-class.html#EISENSTAT
+petsc4py.PETSc.Mat.SORType.LOCAL_SYMMETRIC_SWEEP	petsc4py.PETSc.Mat.SORType-class.html#LOCAL_SYMMETRIC_SWEEP
 petsc4py.PETSc.Mat.Structure	petsc4py.PETSc.Mat.Structure-class.html
 petsc4py.PETSc.Mat.Structure.SUBSET	petsc4py.PETSc.Mat.Structure-class.html#SUBSET
-petsc4py.PETSc.Mat.Structure.SAME_NZ	petsc4py.PETSc.Mat.Structure-class.html#SAME_NZ
-petsc4py.PETSc.Mat.Structure.SUBSET_NZ	petsc4py.PETSc.Mat.Structure-class.html#SUBSET_NZ
 petsc4py.PETSc.Mat.Structure.DIFFERENT	petsc4py.PETSc.Mat.Structure-class.html#DIFFERENT
+petsc4py.PETSc.Mat.Structure.SUBSET_NZ	petsc4py.PETSc.Mat.Structure-class.html#SUBSET_NZ
 petsc4py.PETSc.Mat.Structure.DIFFERENT_NZ	petsc4py.PETSc.Mat.Structure-class.html#DIFFERENT_NZ
-petsc4py.PETSc.Mat.Structure.SAME_NONZERO_PATTERN	petsc4py.PETSc.Mat.Structure-class.html#SAME_NONZERO_PATTERN
 petsc4py.PETSc.Mat.Structure.DIFFERENT_NONZERO_PATTERN	petsc4py.PETSc.Mat.Structure-class.html#DIFFERENT_NONZERO_PATTERN
 petsc4py.PETSc.Mat.Structure.SAME	petsc4py.PETSc.Mat.Structure-class.html#SAME
+petsc4py.PETSc.Mat.Structure.SAME_NONZERO_PATTERN	petsc4py.PETSc.Mat.Structure-class.html#SAME_NONZERO_PATTERN
 petsc4py.PETSc.Mat.Structure.__qualname__	petsc4py.PETSc.Mat.Structure-class.html#__qualname__
 petsc4py.PETSc.Mat.Structure.SUBSET_NONZERO_PATTERN	petsc4py.PETSc.Mat.Structure-class.html#SUBSET_NONZERO_PATTERN
+petsc4py.PETSc.Mat.Structure.SAME_NZ	petsc4py.PETSc.Mat.Structure-class.html#SAME_NZ
 petsc4py.PETSc.Mat.Type	petsc4py.PETSc.Mat.Type-class.html
 petsc4py.PETSc.Mat.Type.MPIAIJCUSPARSE	petsc4py.PETSc.Mat.Type-class.html#MPIAIJCUSPARSE
 petsc4py.PETSc.Mat.Type.AIJVIENNACL	petsc4py.PETSc.Mat.Type-class.html#AIJVIENNACL
-petsc4py.PETSc.Mat.Type.MPISBSTRM	petsc4py.PETSc.Mat.Type-class.html#MPISBSTRM
 petsc4py.PETSc.Mat.Type.SEQAIJ	petsc4py.PETSc.Mat.Type-class.html#SEQAIJ
 petsc4py.PETSc.Mat.Type.NORMAL	petsc4py.PETSc.Mat.Type-class.html#NORMAL
 petsc4py.PETSc.Mat.Type.PYTHON	petsc4py.PETSc.Mat.Type-class.html#PYTHON
@@ -1610,23 +1717,18 @@ petsc4py.PETSc.Mat.Type.MPIAIJVIENNACL	petsc4py.PETSc.Mat.Type-class.html#MPIAIJ
 petsc4py.PETSc.Mat.Type.SHELL	petsc4py.PETSc.Mat.Type-class.html#SHELL
 petsc4py.PETSc.Mat.Type.HYPRESTRUCT	petsc4py.PETSc.Mat.Type-class.html#HYPRESTRUCT
 petsc4py.PETSc.Mat.Type.SEQBAIJ	petsc4py.PETSc.Mat.Type-class.html#SEQBAIJ
-petsc4py.PETSc.Mat.Type.SBSTRM	petsc4py.PETSc.Mat.Type-class.html#SBSTRM
 petsc4py.PETSc.Mat.Type.SUBMATRIX	petsc4py.PETSc.Mat.Type-class.html#SUBMATRIX
 petsc4py.PETSc.Mat.Type.MPIADJ	petsc4py.PETSc.Mat.Type-class.html#MPIADJ
 petsc4py.PETSc.Mat.Type.MPIBAIJ	petsc4py.PETSc.Mat.Type-class.html#MPIBAIJ
-petsc4py.PETSc.Mat.Type.BSTRM	petsc4py.PETSc.Mat.Type-class.html#BSTRM
 petsc4py.PETSc.Mat.Type.DAAD	petsc4py.PETSc.Mat.Type-class.html#DAAD
 petsc4py.PETSc.Mat.Type.MPIAIJCUSP	petsc4py.PETSc.Mat.Type-class.html#MPIAIJCUSP
 petsc4py.PETSc.Mat.Type.AIJPERM	petsc4py.PETSc.Mat.Type-class.html#AIJPERM
-petsc4py.PETSc.Mat.Type.SEQBSTRM	petsc4py.PETSc.Mat.Type-class.html#SEQBSTRM
 petsc4py.PETSc.Mat.Type.SEQAIJCUSPARSE	petsc4py.PETSc.Mat.Type-class.html#SEQAIJCUSPARSE
-petsc4py.PETSc.Mat.Type.MPIBSTRM	petsc4py.PETSc.Mat.Type-class.html#MPIBSTRM
 petsc4py.PETSc.Mat.Type.DENSE	petsc4py.PETSc.Mat.Type-class.html#DENSE
 petsc4py.PETSc.Mat.Type.AIJCRL	petsc4py.PETSc.Mat.Type-class.html#AIJCRL
 petsc4py.PETSc.Mat.Type.IS	petsc4py.PETSc.Mat.Type-class.html#IS
 petsc4py.PETSc.Mat.Type.SEQSBAIJ	petsc4py.PETSc.Mat.Type-class.html#SEQSBAIJ
 petsc4py.PETSc.Mat.Type.ELEMENTAL	petsc4py.PETSc.Mat.Type-class.html#ELEMENTAL
-petsc4py.PETSc.Mat.Type.SEQSBSTRM	petsc4py.PETSc.Mat.Type-class.html#SEQSBSTRM
 petsc4py.PETSc.Mat.Type.FFT	petsc4py.PETSc.Mat.Type-class.html#FFT
 petsc4py.PETSc.Mat.Type.HYPRESSTRUCT	petsc4py.PETSc.Mat.Type-class.html#HYPRESSTRUCT
 petsc4py.PETSc.Mat.Type.AIJCUSP	petsc4py.PETSc.Mat.Type-class.html#AIJCUSP
@@ -1651,24 +1753,25 @@ petsc4py.PETSc.Mat.Type.NORMALHERMITIAN	petsc4py.PETSc.Mat.Type-class.html#NORMA
 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
+petsc4py.PETSc.NormType.N12	petsc4py.PETSc.NormType-class.html#N12
 petsc4py.PETSc.NormType.NORM_MAX	petsc4py.PETSc.NormType-class.html#NORM_MAX
 petsc4py.PETSc.NormType.INFINITY	petsc4py.PETSc.NormType-class.html#INFINITY
 petsc4py.PETSc.NormType.FROBENIUS	petsc4py.PETSc.NormType-class.html#FROBENIUS
-petsc4py.PETSc.NormType.NORM_FROBENIUS	petsc4py.PETSc.NormType-class.html#NORM_FROBENIUS
-petsc4py.PETSc.NormType.NORM_1_AND_2	petsc4py.PETSc.NormType-class.html#NORM_1_AND_2
-petsc4py.PETSc.NormType.N1	petsc4py.PETSc.NormType-class.html#N1
-petsc4py.PETSc.NormType.N2	petsc4py.PETSc.NormType-class.html#N2
-petsc4py.PETSc.NormType.N12	petsc4py.PETSc.NormType-class.html#N12
+petsc4py.PETSc.NormType.FRB	petsc4py.PETSc.NormType-class.html#FRB
 petsc4py.PETSc.NormType.NORM_1	petsc4py.PETSc.NormType-class.html#NORM_1
 petsc4py.PETSc.NormType.NORM_2	petsc4py.PETSc.NormType-class.html#NORM_2
-petsc4py.PETSc.NormType.MAX	petsc4py.PETSc.NormType-class.html#MAX
 petsc4py.PETSc.NormType.NORM_INFINITY	petsc4py.PETSc.NormType-class.html#NORM_INFINITY
 petsc4py.PETSc.NormType.__qualname__	petsc4py.PETSc.NormType-class.html#__qualname__
+petsc4py.PETSc.NormType.NORM_FROBENIUS	petsc4py.PETSc.NormType-class.html#NORM_FROBENIUS
+petsc4py.PETSc.NormType.NORM_1_AND_2	petsc4py.PETSc.NormType-class.html#NORM_1_AND_2
+petsc4py.PETSc.NormType.N1	petsc4py.PETSc.NormType-class.html#N1
+petsc4py.PETSc.NormType.N2	petsc4py.PETSc.NormType-class.html#N2
+petsc4py.PETSc.NormType.MAX	petsc4py.PETSc.NormType-class.html#MAX
 petsc4py.PETSc.NormType.INF	petsc4py.PETSc.NormType-class.html#INF
 petsc4py.PETSc.NullSpace	petsc4py.PETSc.NullSpace-class.html
 petsc4py.PETSc.Object.classid	petsc4py.PETSc.Object-class.html#classid
 petsc4py.PETSc.Object.decRef	petsc4py.PETSc.Object-class.html#decRef
+petsc4py.PETSc.Object.setName	petsc4py.PETSc.Object-class.html#setName
 petsc4py.PETSc.Object.prefix	petsc4py.PETSc.Object-class.html#prefix
 petsc4py.PETSc.NullSpace.getVecs	petsc4py.PETSc.NullSpace-class.html#getVecs
 petsc4py.PETSc.Object.setTabLevel	petsc4py.PETSc.Object-class.html#setTabLevel
@@ -1678,6 +1781,7 @@ petsc4py.PETSc.Object.__lt__	petsc4py.PETSc.Object-class.html#__lt__
 petsc4py.PETSc.NullSpace.hasConstant	petsc4py.PETSc.NullSpace-class.html#hasConstant
 petsc4py.PETSc.Object.getTabLevel	petsc4py.PETSc.Object-class.html#getTabLevel
 petsc4py.PETSc.NullSpace.setFunction	petsc4py.PETSc.NullSpace-class.html#setFunction
+petsc4py.PETSc.Object.viewFromOptions	petsc4py.PETSc.Object-class.html#viewFromOptions
 petsc4py.PETSc.NullSpace.__new__	petsc4py.PETSc.NullSpace-class.html#__new__
 petsc4py.PETSc.NullSpace.create	petsc4py.PETSc.NullSpace-class.html#create
 petsc4py.PETSc.Object.incrementTabLevel	petsc4py.PETSc.Object-class.html#incrementTabLevel
@@ -1695,7 +1799,7 @@ petsc4py.PETSc.Object.__deepcopy__	petsc4py.PETSc.Object-class.html#__deepcopy__
 petsc4py.PETSc.Object.setFromOptions	petsc4py.PETSc.Object-class.html#setFromOptions
 petsc4py.PETSc.Object.getType	petsc4py.PETSc.Object-class.html#getType
 petsc4py.PETSc.Object.refcount	petsc4py.PETSc.Object-class.html#refcount
-petsc4py.PETSc.Object.setName	petsc4py.PETSc.Object-class.html#setName
+petsc4py.PETSc.NullSpace.test	petsc4py.PETSc.NullSpace-class.html#test
 petsc4py.PETSc.NullSpace.createRigidBody	petsc4py.PETSc.NullSpace-class.html#createRigidBody
 petsc4py.PETSc.Object.compose	petsc4py.PETSc.Object-class.html#compose
 petsc4py.PETSc.Object.comm	petsc4py.PETSc.Object-class.html#comm
@@ -1725,6 +1829,7 @@ petsc4py.PETSc.Object.query	petsc4py.PETSc.Object-class.html#query
 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.Object.viewFromOptions	petsc4py.PETSc.Object-class.html#viewFromOptions
 petsc4py.PETSc.Object.__new__	petsc4py.PETSc.Object-class.html#__new__
 petsc4py.PETSc.Object.getName	petsc4py.PETSc.Object-class.html#getName
 petsc4py.PETSc.Object.setOptionsPrefix	petsc4py.PETSc.Object-class.html#setOptionsPrefix
@@ -1793,8 +1898,8 @@ petsc4py.PETSc.Object.query	petsc4py.PETSc.Object-class.html#query
 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.Object.viewFromOptions	petsc4py.PETSc.Object-class.html#viewFromOptions
 petsc4py.PETSc.PC.setMGRScale	petsc4py.PETSc.PC-class.html#setMGRScale
-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__
@@ -1833,9 +1938,10 @@ 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.MGCycleType	petsc4py.PETSc.PC.MGCycleType-class.html
 petsc4py.PETSc.PC.getOptionsPrefix	petsc4py.PETSc.PC-class.html#getOptionsPrefix
 petsc4py.PETSc.PC.getOperators	petsc4py.PETSc.PC-class.html#getOperators
-petsc4py.PETSc.Object.comm	petsc4py.PETSc.Object-class.html#comm
+petsc4py.PETSc.PC.setMGCycleType	petsc4py.PETSc.PC-class.html#setMGCycleType
 petsc4py.PETSc.PC.setCompositeType	petsc4py.PETSc.PC-class.html#setCompositeType
 petsc4py.PETSc.PC.setASMOverlap	petsc4py.PETSc.PC-class.html#setASMOverlap
 petsc4py.PETSc.PC.getMGInterpolation	petsc4py.PETSc.PC-class.html#getMGInterpolation
@@ -1843,10 +1949,12 @@ petsc4py.PETSc.PC.setUseAmat	petsc4py.PETSc.PC-class.html#setUseAmat
 petsc4py.PETSc.PC.setFieldSplitType	petsc4py.PETSc.PC-class.html#setFieldSplitType
 petsc4py.PETSc.Object.getDict	petsc4py.PETSc.Object-class.html#getDict
 petsc4py.PETSc.PC.setMGR	petsc4py.PETSc.PC-class.html#setMGR
+petsc4py.PETSc.Object.comm	petsc4py.PETSc.Object-class.html#comm
 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.setFactorOrdering	petsc4py.PETSc.PC-class.html#setFactorOrdering
@@ -1871,6 +1979,7 @@ petsc4py.PETSc.Object.setName	petsc4py.PETSc.Object-class.html#setName
 petsc4py.PETSc.PC.getType	petsc4py.PETSc.PC-class.html#getType
 petsc4py.PETSc.Object.refcount	petsc4py.PETSc.Object-class.html#refcount
 petsc4py.PETSc.PC.getMGSmootherDown	petsc4py.PETSc.PC-class.html#getMGSmootherDown
+petsc4py.PETSc.PC.setMGCycleTypeOnLevel	petsc4py.PETSc.PC-class.html#setMGCycleTypeOnLevel
 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
@@ -1885,14 +1994,13 @@ 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.setMGCyclesOnLevel	petsc4py.PETSc.PC-class.html#setMGCyclesOnLevel
+petsc4py.PETSc.PC.getMGSmoother	petsc4py.PETSc.PC-class.html#getMGSmoother
 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
@@ -1901,7 +2009,7 @@ petsc4py.PETSc.Object.setAttr	petsc4py.PETSc.Object-class.html#setAttr
 petsc4py.PETSc.PC.getFactorMatrix	petsc4py.PETSc.PC-class.html#getFactorMatrix
 petsc4py.PETSc.PC.setFieldSplitFields	petsc4py.PETSc.PC-class.html#setFieldSplitFields
 petsc4py.PETSc.PC.getFieldSplitSubKSP	petsc4py.PETSc.PC-class.html#getFieldSplitSubKSP
-petsc4py.PETSc.PC.Side	petsc4py.PETSc.PC.Side-class.html
+petsc4py.PETSc.PC.setFactorPivot	petsc4py.PETSc.PC-class.html#setFactorPivot
 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
@@ -1909,10 +2017,10 @@ petsc4py.PETSc.Object.setTabLevel	petsc4py.PETSc.Object-class.html#setTabLevel
 petsc4py.PETSc.Object.klass	petsc4py.PETSc.Object-class.html#klass
 petsc4py.PETSc.PC.setPythonContext	petsc4py.PETSc.PC-class.html#setPythonContext
 petsc4py.PETSc.PC.ASMType	petsc4py.PETSc.PC.ASMType-class.html
+petsc4py.PETSc.PC.ASMType.RESTRICT	petsc4py.PETSc.PC.ASMType-class.html#RESTRICT
 petsc4py.PETSc.PC.ASMType.__qualname__	petsc4py.PETSc.PC.ASMType-class.html#__qualname__
 petsc4py.PETSc.PC.ASMType.NONE	petsc4py.PETSc.PC.ASMType-class.html#NONE
 petsc4py.PETSc.PC.ASMType.INTERPOLATE	petsc4py.PETSc.PC.ASMType-class.html#INTERPOLATE
-petsc4py.PETSc.PC.ASMType.RESTRICT	petsc4py.PETSc.PC.ASMType-class.html#RESTRICT
 petsc4py.PETSc.PC.ASMType.BASIC	petsc4py.PETSc.PC.ASMType-class.html#BASIC
 petsc4py.PETSc.PC.CompositeType	petsc4py.PETSc.PC.CompositeType-class.html
 petsc4py.PETSc.PC.CompositeType.SCHUR	petsc4py.PETSc.PC.CompositeType-class.html#SCHUR
@@ -1922,28 +2030,32 @@ petsc4py.PETSc.PC.CompositeType.__qualname__	petsc4py.PETSc.PC.CompositeType-cla
 petsc4py.PETSc.PC.CompositeType.MULTIPLICATIVE	petsc4py.PETSc.PC.CompositeType-class.html#MULTIPLICATIVE
 petsc4py.PETSc.PC.CompositeType.SPECIAL	petsc4py.PETSc.PC.CompositeType-class.html#SPECIAL
 petsc4py.PETSc.PC.GAMGType	petsc4py.PETSc.PC.GAMGType-class.html
-petsc4py.PETSc.PC.GAMGType.CLASSICAL	petsc4py.PETSc.PC.GAMGType-class.html#CLASSICAL
 petsc4py.PETSc.PC.GAMGType.AGG	petsc4py.PETSc.PC.GAMGType-class.html#AGG
 petsc4py.PETSc.PC.GAMGType.__qualname__	petsc4py.PETSc.PC.GAMGType-class.html#__qualname__
 petsc4py.PETSc.PC.GAMGType.GEO	petsc4py.PETSc.PC.GAMGType-class.html#GEO
+petsc4py.PETSc.PC.GAMGType.CLASSICAL	petsc4py.PETSc.PC.GAMGType-class.html#CLASSICAL
 petsc4py.PETSc.PC.GASMType	petsc4py.PETSc.PC.GASMType-class.html
+petsc4py.PETSc.PC.GASMType.RESTRICT	petsc4py.PETSc.PC.GASMType-class.html#RESTRICT
 petsc4py.PETSc.PC.GASMType.__qualname__	petsc4py.PETSc.PC.GASMType-class.html#__qualname__
 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.MGCycleType	petsc4py.PETSc.PC.MGCycleType-class.html
+petsc4py.PETSc.PC.MGCycleType.__qualname__	petsc4py.PETSc.PC.MGCycleType-class.html#__qualname__
+petsc4py.PETSc.PC.MGCycleType.W	petsc4py.PETSc.PC.MGCycleType-class.html#W
+petsc4py.PETSc.PC.MGCycleType.V	petsc4py.PETSc.PC.MGCycleType-class.html#V
 petsc4py.PETSc.PC.MGType	petsc4py.PETSc.PC.MGType-class.html
+petsc4py.PETSc.PC.MGType.__qualname__	petsc4py.PETSc.PC.MGType-class.html#__qualname__
 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.__qualname__	petsc4py.PETSc.PC.SchurFactType-class.html#__qualname__
 petsc4py.PETSc.PC.SchurFactType.UPPER	petsc4py.PETSc.PC.SchurFactType-class.html#UPPER
 petsc4py.PETSc.PC.SchurFactType.LOWER	petsc4py.PETSc.PC.SchurFactType-class.html#LOWER
 petsc4py.PETSc.PC.SchurFactType.FULL	petsc4py.PETSc.PC.SchurFactType-class.html#FULL
 petsc4py.PETSc.PC.SchurFactType.DIAG	petsc4py.PETSc.PC.SchurFactType-class.html#DIAG
-petsc4py.PETSc.PC.SchurFactType.__qualname__	petsc4py.PETSc.PC.SchurFactType-class.html#__qualname__
 petsc4py.PETSc.PC.SchurPreType	petsc4py.PETSc.PC.SchurPreType-class.html
 petsc4py.PETSc.PC.SchurPreType.FULL	petsc4py.PETSc.PC.SchurPreType-class.html#FULL
 petsc4py.PETSc.PC.SchurPreType.A11	petsc4py.PETSc.PC.SchurPreType-class.html#A11
@@ -2014,6 +2126,7 @@ petsc4py.PETSc.Partitioner.Type	petsc4py.PETSc.PartitionerType-class.html
 petsc4py.PETSc.Partitioner.setType	petsc4py.PETSc.Partitioner-class.html#setType
 petsc4py.PETSc.Object.getTabLevel	petsc4py.PETSc.Object-class.html#getTabLevel
 petsc4py.PETSc.Object.compose	petsc4py.PETSc.Object-class.html#compose
+petsc4py.PETSc.Object.viewFromOptions	petsc4py.PETSc.Object-class.html#viewFromOptions
 petsc4py.PETSc.Partitioner.__new__	petsc4py.PETSc.Partitioner-class.html#__new__
 petsc4py.PETSc.Partitioner.create	petsc4py.PETSc.Partitioner-class.html#create
 petsc4py.PETSc.Object.incrementTabLevel	petsc4py.PETSc.Object-class.html#incrementTabLevel
@@ -2053,9 +2166,9 @@ petsc4py.PETSc.Object.getName	petsc4py.PETSc.Object-class.html#getName
 petsc4py.PETSc.Object.__ge__	petsc4py.PETSc.Object-class.html#__ge__
 petsc4py.PETSc.Partitioner.view	petsc4py.PETSc.Partitioner-class.html#view
 petsc4py.PETSc.PartitionerType	petsc4py.PETSc.PartitionerType-class.html
+petsc4py.PETSc.PartitionerType.__qualname__	petsc4py.PETSc.PartitionerType-class.html#__qualname__
 petsc4py.PETSc.PartitionerType.SHELL	petsc4py.PETSc.PartitionerType-class.html#SHELL
 petsc4py.PETSc.PartitionerType.CHACO	petsc4py.PETSc.PartitionerType-class.html#CHACO
-petsc4py.PETSc.PartitionerType.__qualname__	petsc4py.PETSc.PartitionerType-class.html#__qualname__
 petsc4py.PETSc.PartitionerType.PARMETIS	petsc4py.PETSc.PartitionerType-class.html#PARMETIS
 petsc4py.PETSc.Random	petsc4py.PETSc.Random-class.html
 petsc4py.PETSc.Object.classid	petsc4py.PETSc.Object-class.html#classid
@@ -2070,6 +2183,7 @@ petsc4py.PETSc.Random.Type	petsc4py.PETSc.Random.Type-class.html
 petsc4py.PETSc.Random.setType	petsc4py.PETSc.Random-class.html#setType
 petsc4py.PETSc.Object.getTabLevel	petsc4py.PETSc.Object-class.html#getTabLevel
 petsc4py.PETSc.Object.compose	petsc4py.PETSc.Object-class.html#compose
+petsc4py.PETSc.Object.viewFromOptions	petsc4py.PETSc.Object-class.html#viewFromOptions
 petsc4py.PETSc.Random.__new__	petsc4py.PETSc.Random-class.html#__new__
 petsc4py.PETSc.Random.create	petsc4py.PETSc.Random-class.html#create
 petsc4py.PETSc.Object.incrementTabLevel	petsc4py.PETSc.Object-class.html#incrementTabLevel
@@ -2115,9 +2229,9 @@ 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__
 petsc4py.PETSc.Random.Type.SPRNG	petsc4py.PETSc.Random.Type-class.html#SPRNG
+petsc4py.PETSc.Random.Type.__qualname__	petsc4py.PETSc.Random.Type-class.html#__qualname__
+petsc4py.PETSc.Random.Type.RAND48	petsc4py.PETSc.Random.Type-class.html#RAND48
 petsc4py.PETSc.SF	petsc4py.PETSc.SF-class.html
 petsc4py.PETSc.Object.classid	petsc4py.PETSc.Object-class.html#classid
 petsc4py.PETSc.SF.setGraph	petsc4py.PETSc.SF-class.html#setGraph
@@ -2131,6 +2245,7 @@ petsc4py.PETSc.SF.Type	petsc4py.PETSc.SF.Type-class.html
 petsc4py.PETSc.SF.setType	petsc4py.PETSc.SF-class.html#setType
 petsc4py.PETSc.Object.getTabLevel	petsc4py.PETSc.Object-class.html#getTabLevel
 petsc4py.PETSc.Object.compose	petsc4py.PETSc.Object-class.html#compose
+petsc4py.PETSc.Object.viewFromOptions	petsc4py.PETSc.Object-class.html#viewFromOptions
 petsc4py.PETSc.SF.__new__	petsc4py.PETSc.SF-class.html#__new__
 petsc4py.PETSc.SF.create	petsc4py.PETSc.SF-class.html#create
 petsc4py.PETSc.Object.incrementTabLevel	petsc4py.PETSc.Object-class.html#incrementTabLevel
@@ -2183,6 +2298,7 @@ petsc4py.PETSc.SNES.getConvergenceHistory	petsc4py.PETSc.SNES-class.html#getConv
 petsc4py.PETSc.SNES.cancelMonitor	petsc4py.PETSc.SNES-class.html#cancelMonitor
 petsc4py.PETSc.Object.__gt__	petsc4py.PETSc.Object-class.html#__gt__
 petsc4py.PETSc.SNES.max_it	petsc4py.PETSc.SNES-class.html#max_it
+petsc4py.PETSc.SNES.computeNGS	petsc4py.PETSc.SNES-class.html#computeNGS
 petsc4py.PETSc.Object.getAttr	petsc4py.PETSc.Object-class.html#getAttr
 petsc4py.PETSc.SNES.setUseFD	petsc4py.PETSc.SNES-class.html#setUseFD
 petsc4py.PETSc.SNES.getObjective	petsc4py.PETSc.SNES-class.html#getObjective
@@ -2191,11 +2307,13 @@ petsc4py.PETSc.SNES.its	petsc4py.PETSc.SNES-class.html#its
 petsc4py.PETSc.SNES.getFASCycleSNES	petsc4py.PETSc.SNES-class.html#getFASCycleSNES
 petsc4py.PETSc.SNES.setUpdate	petsc4py.PETSc.SNES-class.html#setUpdate
 petsc4py.PETSc.Object.compose	petsc4py.PETSc.Object-class.html#compose
+petsc4py.PETSc.Object.viewFromOptions	petsc4py.PETSc.Object-class.html#viewFromOptions
 petsc4py.PETSc.SNES.monitor	petsc4py.PETSc.SNES-class.html#monitor
 petsc4py.PETSc.SNES.getMaxKSPFailures	petsc4py.PETSc.SNES-class.html#getMaxKSPFailures
 petsc4py.PETSc.SNES.setMonitor	petsc4py.PETSc.SNES-class.html#setMonitor
 petsc4py.PETSc.SNES.rtol	petsc4py.PETSc.SNES-class.html#rtol
 petsc4py.PETSc.SNES.getConvergedReason	petsc4py.PETSc.SNES-class.html#getConvergedReason
+petsc4py.PETSc.SNES.norm	petsc4py.PETSc.SNES-class.html#norm
 petsc4py.PETSc.SNES.getCompositeSNES	petsc4py.PETSc.SNES-class.html#getCompositeSNES
 petsc4py.PETSc.SNES.dm	petsc4py.PETSc.SNES-class.html#dm
 petsc4py.PETSc.Object.handle	petsc4py.PETSc.Object-class.html#handle
@@ -2203,13 +2321,15 @@ petsc4py.PETSc.SNES.NormSchedule	petsc4py.PETSc.SNES.NormSchedule-class.html
 petsc4py.PETSc.SNES.setOptionsPrefix	petsc4py.PETSc.SNES-class.html#setOptionsPrefix
 petsc4py.PETSc.SNES.callConvergenceTest	petsc4py.PETSc.SNES-class.html#callConvergenceTest
 petsc4py.PETSc.Object.__deepcopy__	petsc4py.PETSc.Object-class.html#__deepcopy__
-petsc4py.PETSc.SNES.getFASCoarseSolve	petsc4py.PETSc.SNES-class.html#getFASCoarseSolve
+petsc4py.PETSc.SNES.getMaxStepFailures	petsc4py.PETSc.SNES-class.html#getMaxStepFailures
 petsc4py.PETSc.SNES.getLinearSolveIterations	petsc4py.PETSc.SNES-class.html#getLinearSolveIterations
 petsc4py.PETSc.SNES.stol	petsc4py.PETSc.SNES-class.html#stol
 petsc4py.PETSc.SNES.setFromOptions	petsc4py.PETSc.SNES-class.html#setFromOptions
-petsc4py.PETSc.SNES.getUseEW	petsc4py.PETSc.SNES-class.html#getUseEW
+petsc4py.PETSc.SNES.getNGS	petsc4py.PETSc.SNES-class.html#getNGS
+petsc4py.PETSc.SNES.destroy	petsc4py.PETSc.SNES-class.html#destroy
 petsc4py.PETSc.SNES.setMaxNonlinearStepFailures	petsc4py.PETSc.SNES-class.html#setMaxNonlinearStepFailures
 petsc4py.PETSc.SNES.getSolutionUpdate	petsc4py.PETSc.SNES-class.html#getSolutionUpdate
+petsc4py.PETSc.SNES.getNASMSNES	petsc4py.PETSc.SNES-class.html#getNASMSNES
 petsc4py.PETSc.Object.__nonzero__	petsc4py.PETSc.Object-class.html#__nonzero__
 petsc4py.PETSc.SNES.setAppCtx	petsc4py.PETSc.SNES-class.html#setAppCtx
 petsc4py.PETSc.Object.getClassId	petsc4py.PETSc.Object-class.html#getClassId
@@ -2220,6 +2340,7 @@ petsc4py.PETSc.SNES.getFASSmoother	petsc4py.PETSc.SNES-class.html#getFASSmoother
 petsc4py.PETSc.Object.__copy__	petsc4py.PETSc.Object-class.html#__copy__
 petsc4py.PETSc.SNES.setMaxFunctionEvaluations	petsc4py.PETSc.SNES-class.html#setMaxFunctionEvaluations
 petsc4py.PETSc.SNES.setFASInterpolation	petsc4py.PETSc.SNES-class.html#setFASInterpolation
+petsc4py.PETSc.SNES.getFunctionNorm	petsc4py.PETSc.SNES-class.html#getFunctionNorm
 petsc4py.PETSc.Object.decRef	petsc4py.PETSc.Object-class.html#decRef
 petsc4py.PETSc.SNES.ConvergedReason	petsc4py.PETSc.SNES.ConvergedReason-class.html
 petsc4py.PETSc.SNES.setJacobian	petsc4py.PETSc.SNES-class.html#setJacobian
@@ -2263,6 +2384,7 @@ petsc4py.PETSc.SNES.view	petsc4py.PETSc.SNES-class.html#view
 petsc4py.PETSc.SNES.vec_rhs	petsc4py.PETSc.SNES-class.html#vec_rhs
 petsc4py.PETSc.SNES.getPythonContext	petsc4py.PETSc.SNES-class.html#getPythonContext
 petsc4py.PETSc.SNES.getMaxFunctionEvaluations	petsc4py.PETSc.SNES-class.html#getMaxFunctionEvaluations
+petsc4py.PETSc.SNES.setNGS	petsc4py.PETSc.SNES-class.html#setNGS
 petsc4py.PETSc.SNES.setMaxStepFailures	petsc4py.PETSc.SNES-class.html#setMaxStepFailures
 petsc4py.PETSc.SNES.getJacobian	petsc4py.PETSc.SNES-class.html#getJacobian
 petsc4py.PETSc.SNES.getFunctionEvaluations	petsc4py.PETSc.SNES-class.html#getFunctionEvaluations
@@ -2289,6 +2411,7 @@ petsc4py.PETSc.SNES.hasNPC	petsc4py.PETSc.SNES-class.html#hasNPC
 petsc4py.PETSc.SNES.atol	petsc4py.PETSc.SNES-class.html#atol
 petsc4py.PETSc.SNES.getFASSmootherDown	petsc4py.PETSc.SNES-class.html#getFASSmootherDown
 petsc4py.PETSc.Object.__eq__	petsc4py.PETSc.Object-class.html#__eq__
+petsc4py.PETSc.SNES.setFunctionNorm	petsc4py.PETSc.SNES-class.html#setFunctionNorm
 petsc4py.PETSc.SNES.reset	petsc4py.PETSc.SNES-class.html#reset
 petsc4py.PETSc.SNES.getRhs	petsc4py.PETSc.SNES-class.html#getRhs
 petsc4py.PETSc.SNES.setVariableBounds	petsc4py.PETSc.SNES-class.html#setVariableBounds
@@ -2313,16 +2436,17 @@ petsc4py.PETSc.SNES.logConvergenceHistory	petsc4py.PETSc.SNES-class.html#logConv
 petsc4py.PETSc.Object.getTabLevel	petsc4py.PETSc.Object-class.html#getTabLevel
 petsc4py.PETSc.SNES.getUseMF	petsc4py.PETSc.SNES-class.html#getUseMF
 petsc4py.PETSc.SNES.converged	petsc4py.PETSc.SNES-class.html#converged
-petsc4py.PETSc.SNES.destroy	petsc4py.PETSc.SNES-class.html#destroy
+petsc4py.PETSc.SNES.getUseEW	petsc4py.PETSc.SNES-class.html#getUseEW
 petsc4py.PETSc.SNES.vec_upd	petsc4py.PETSc.SNES-class.html#vec_upd
 petsc4py.PETSc.Object.stateIncrease	petsc4py.PETSc.Object-class.html#stateIncrease
-petsc4py.PETSc.SNES.getMaxStepFailures	petsc4py.PETSc.SNES-class.html#getMaxStepFailures
+petsc4py.PETSc.SNES.getFASCoarseSolve	petsc4py.PETSc.SNES-class.html#getFASCoarseSolve
 petsc4py.PETSc.SNES.setMaxKSPFailures	petsc4py.PETSc.SNES-class.html#setMaxKSPFailures
 petsc4py.PETSc.SNES.setNormSchedule	petsc4py.PETSc.SNES-class.html#setNormSchedule
 petsc4py.PETSc.SNES.getNPC	petsc4py.PETSc.SNES-class.html#getNPC
 petsc4py.PETSc.Object.refcount	petsc4py.PETSc.Object-class.html#refcount
 petsc4py.PETSc.SNES.getTolerances	petsc4py.PETSc.SNES-class.html#getTolerances
 petsc4py.PETSc.SNES.npc	petsc4py.PETSc.SNES-class.html#npc
+petsc4py.PETSc.SNES.getNASMNumber	petsc4py.PETSc.SNES-class.html#getNASMNumber
 petsc4py.PETSc.SNES.setFASInjection	petsc4py.PETSc.SNES-class.html#setFASInjection
 petsc4py.PETSc.SNES.getLinearSolveFailures	petsc4py.PETSc.SNES-class.html#getLinearSolveFailures
 petsc4py.PETSc.SNES.getKSPFailures	petsc4py.PETSc.SNES-class.html#getKSPFailures
@@ -2339,56 +2463,56 @@ petsc4py.PETSc.SNES.getMaxNonlinearStepFailures	petsc4py.PETSc.SNES-class.html#g
 petsc4py.PETSc.SNES.use_fd	petsc4py.PETSc.SNES-class.html#use_fd
 petsc4py.PETSc.Object.classid	petsc4py.PETSc.Object-class.html#classid
 petsc4py.PETSc.SNES.ConvergedReason	petsc4py.PETSc.SNES.ConvergedReason-class.html
-petsc4py.PETSc.SNES.ConvergedReason.DIVERGED_MAX_IT	petsc4py.PETSc.SNES.ConvergedReason-class.html#DIVERGED_MAX_IT
-petsc4py.PETSc.SNES.ConvergedReason.DIVERGED_FNORM_NAN	petsc4py.PETSc.SNES.ConvergedReason-class.html#DIVERGED_FNORM_NAN
-petsc4py.PETSc.SNES.ConvergedReason.DIVERGED_INNER	petsc4py.PETSc.SNES.ConvergedReason-class.html#DIVERGED_INNER
-petsc4py.PETSc.SNES.ConvergedReason.CONVERGED_TR_DELTA	petsc4py.PETSc.SNES.ConvergedReason-class.html#CONVERGED_TR_DELTA
-petsc4py.PETSc.SNES.ConvergedReason.DIVERGED_LINE_SEARCH	petsc4py.PETSc.SNES.ConvergedReason-class.html#DIVERGED_LINE_SEARCH
-petsc4py.PETSc.SNES.ConvergedReason.CONVERGED_FNORM_ABS	petsc4py.PETSc.SNES.ConvergedReason-class.html#CONVERGED_FNORM_ABS
+petsc4py.PETSc.SNES.ConvergedReason.__qualname__	petsc4py.PETSc.SNES.ConvergedReason-class.html#__qualname__
 petsc4py.PETSc.SNES.ConvergedReason.ITERATING	petsc4py.PETSc.SNES.ConvergedReason-class.html#ITERATING
 petsc4py.PETSc.SNES.ConvergedReason.CONVERGED_ITS	petsc4py.PETSc.SNES.ConvergedReason-class.html#CONVERGED_ITS
-petsc4py.PETSc.SNES.ConvergedReason.CONVERGED_SNORM_RELATIVE	petsc4py.PETSc.SNES.ConvergedReason-class.html#CONVERGED_SNORM_RELATIVE
-petsc4py.PETSc.SNES.ConvergedReason.CONVERGED_FNORM_RELATIVE	petsc4py.PETSc.SNES.ConvergedReason-class.html#CONVERGED_FNORM_RELATIVE
-petsc4py.PETSc.SNES.ConvergedReason.DIVERGED_LOCAL_MIN	petsc4py.PETSc.SNES.ConvergedReason-class.html#DIVERGED_LOCAL_MIN
 petsc4py.PETSc.SNES.ConvergedReason.DIVERGED_FUNCTION_COUNT	petsc4py.PETSc.SNES.ConvergedReason-class.html#DIVERGED_FUNCTION_COUNT
+petsc4py.PETSc.SNES.ConvergedReason.CONVERGED_TR_DELTA	petsc4py.PETSc.SNES.ConvergedReason-class.html#CONVERGED_TR_DELTA
+petsc4py.PETSc.SNES.ConvergedReason.DIVERGED_MAX_IT	petsc4py.PETSc.SNES.ConvergedReason-class.html#DIVERGED_MAX_IT
+petsc4py.PETSc.SNES.ConvergedReason.CONVERGED_SNORM_RELATIVE	petsc4py.PETSc.SNES.ConvergedReason-class.html#CONVERGED_SNORM_RELATIVE
+petsc4py.PETSc.SNES.ConvergedReason.DIVERGED_LINE_SEARCH	petsc4py.PETSc.SNES.ConvergedReason-class.html#DIVERGED_LINE_SEARCH
 petsc4py.PETSc.SNES.ConvergedReason.DIVERGED_FUNCTION_DOMAIN	petsc4py.PETSc.SNES.ConvergedReason-class.html#DIVERGED_FUNCTION_DOMAIN
-petsc4py.PETSc.SNES.ConvergedReason.__qualname__	petsc4py.PETSc.SNES.ConvergedReason-class.html#__qualname__
+petsc4py.PETSc.SNES.ConvergedReason.CONVERGED_FNORM_RELATIVE	petsc4py.PETSc.SNES.ConvergedReason-class.html#CONVERGED_FNORM_RELATIVE
 petsc4py.PETSc.SNES.ConvergedReason.CONVERGED_ITERATING	petsc4py.PETSc.SNES.ConvergedReason-class.html#CONVERGED_ITERATING
+petsc4py.PETSc.SNES.ConvergedReason.CONVERGED_FNORM_ABS	petsc4py.PETSc.SNES.ConvergedReason-class.html#CONVERGED_FNORM_ABS
+petsc4py.PETSc.SNES.ConvergedReason.DIVERGED_LOCAL_MIN	petsc4py.PETSc.SNES.ConvergedReason-class.html#DIVERGED_LOCAL_MIN
+petsc4py.PETSc.SNES.ConvergedReason.DIVERGED_FNORM_NAN	petsc4py.PETSc.SNES.ConvergedReason-class.html#DIVERGED_FNORM_NAN
+petsc4py.PETSc.SNES.ConvergedReason.DIVERGED_INNER	petsc4py.PETSc.SNES.ConvergedReason-class.html#DIVERGED_INNER
 petsc4py.PETSc.SNES.NormSchedule	petsc4py.PETSc.SNES.NormSchedule-class.html
+petsc4py.PETSc.SNES.NormSchedule.NORM_DEFAULT	petsc4py.PETSc.SNES.NormSchedule-class.html#NORM_DEFAULT
 petsc4py.PETSc.SNES.NormSchedule.NORM_INITIAL_FINAL_ONLY	petsc4py.PETSc.SNES.NormSchedule-class.html#NORM_INITIAL_FINAL_ONLY
-petsc4py.PETSc.SNES.NormSchedule.DEFAULT	petsc4py.PETSc.SNES.NormSchedule-class.html#DEFAULT
-petsc4py.PETSc.SNES.NormSchedule.NORM_NONE	petsc4py.PETSc.SNES.NormSchedule-class.html#NORM_NONE
 petsc4py.PETSc.SNES.NormSchedule.NONE	petsc4py.PETSc.SNES.NormSchedule-class.html#NONE
 petsc4py.PETSc.SNES.NormSchedule.INITIAL_ONLY	petsc4py.PETSc.SNES.NormSchedule-class.html#INITIAL_ONLY
 petsc4py.PETSc.SNES.NormSchedule.FINAL_ONLY	petsc4py.PETSc.SNES.NormSchedule-class.html#FINAL_ONLY
-petsc4py.PETSc.SNES.NormSchedule.NORM_INITIAL_ONLY	petsc4py.PETSc.SNES.NormSchedule-class.html#NORM_INITIAL_ONLY
-petsc4py.PETSc.SNES.NormSchedule.NORM_DEFAULT	petsc4py.PETSc.SNES.NormSchedule-class.html#NORM_DEFAULT
-petsc4py.PETSc.SNES.NormSchedule.INITIAL_FINAL_ONLY	petsc4py.PETSc.SNES.NormSchedule-class.html#INITIAL_FINAL_ONLY
+petsc4py.PETSc.SNES.NormSchedule.DEFAULT	petsc4py.PETSc.SNES.NormSchedule-class.html#DEFAULT
 petsc4py.PETSc.SNES.NormSchedule.ALWAYS	petsc4py.PETSc.SNES.NormSchedule-class.html#ALWAYS
 petsc4py.PETSc.SNES.NormSchedule.NORM_ALWAYS	petsc4py.PETSc.SNES.NormSchedule-class.html#NORM_ALWAYS
 petsc4py.PETSc.SNES.NormSchedule.__qualname__	petsc4py.PETSc.SNES.NormSchedule-class.html#__qualname__
+petsc4py.PETSc.SNES.NormSchedule.INITIAL_FINAL_ONLY	petsc4py.PETSc.SNES.NormSchedule-class.html#INITIAL_FINAL_ONLY
 petsc4py.PETSc.SNES.NormSchedule.NORM_FINAL_ONLY	petsc4py.PETSc.SNES.NormSchedule-class.html#NORM_FINAL_ONLY
+petsc4py.PETSc.SNES.NormSchedule.NORM_INITIAL_ONLY	petsc4py.PETSc.SNES.NormSchedule-class.html#NORM_INITIAL_ONLY
+petsc4py.PETSc.SNES.NormSchedule.NORM_NONE	petsc4py.PETSc.SNES.NormSchedule-class.html#NORM_NONE
 petsc4py.PETSc.SNES.Type	petsc4py.PETSc.SNES.Type-class.html
+petsc4py.PETSc.SNES.Type.ASPIN	petsc4py.PETSc.SNES.Type-class.html#ASPIN
 petsc4py.PETSc.SNES.Type.NEWTONTR	petsc4py.PETSc.SNES.Type-class.html#NEWTONTR
-petsc4py.PETSc.SNES.Type.QN	petsc4py.PETSc.SNES.Type-class.html#QN
+petsc4py.PETSc.SNES.Type.MS	petsc4py.PETSc.SNES.Type-class.html#MS
+petsc4py.PETSc.SNES.Type.VINEWTONSSLS	petsc4py.PETSc.SNES.Type-class.html#VINEWTONSSLS
 petsc4py.PETSc.SNES.Type.PYTHON	petsc4py.PETSc.SNES.Type-class.html#PYTHON
-petsc4py.PETSc.SNES.Type.NGS	petsc4py.PETSc.SNES.Type-class.html#NGS
-petsc4py.PETSc.SNES.Type.NEWTONLS	petsc4py.PETSc.SNES.Type-class.html#NEWTONLS
-petsc4py.PETSc.SNES.Type.__qualname__	petsc4py.PETSc.SNES.Type-class.html#__qualname__
 petsc4py.PETSc.SNES.Type.FAS	petsc4py.PETSc.SNES.Type-class.html#FAS
-petsc4py.PETSc.SNES.Type.ANDERSON	petsc4py.PETSc.SNES.Type-class.html#ANDERSON
-petsc4py.PETSc.SNES.Type.NRICHARDSON	petsc4py.PETSc.SNES.Type-class.html#NRICHARDSON
-petsc4py.PETSc.SNES.Type.VINEWTONRSLS	petsc4py.PETSc.SNES.Type-class.html#VINEWTONRSLS
-petsc4py.PETSc.SNES.Type.NGMRES	petsc4py.PETSc.SNES.Type-class.html#NGMRES
 petsc4py.PETSc.SNES.Type.KSPONLY	petsc4py.PETSc.SNES.Type-class.html#KSPONLY
-petsc4py.PETSc.SNES.Type.SHELL	petsc4py.PETSc.SNES.Type-class.html#SHELL
-petsc4py.PETSc.SNES.Type.VINEWTONSSLS	petsc4py.PETSc.SNES.Type-class.html#VINEWTONSSLS
+petsc4py.PETSc.SNES.Type.NASM	petsc4py.PETSc.SNES.Type-class.html#NASM
+petsc4py.PETSc.SNES.Type.__qualname__	petsc4py.PETSc.SNES.Type-class.html#__qualname__
 petsc4py.PETSc.SNES.Type.COMPOSITE	petsc4py.PETSc.SNES.Type-class.html#COMPOSITE
-petsc4py.PETSc.SNES.Type.ASPIN	petsc4py.PETSc.SNES.Type-class.html#ASPIN
-petsc4py.PETSc.SNES.Type.MS	petsc4py.PETSc.SNES.Type-class.html#MS
+petsc4py.PETSc.SNES.Type.ANDERSON	petsc4py.PETSc.SNES.Type-class.html#ANDERSON
+petsc4py.PETSc.SNES.Type.SHELL	petsc4py.PETSc.SNES.Type-class.html#SHELL
+petsc4py.PETSc.SNES.Type.NGMRES	petsc4py.PETSc.SNES.Type-class.html#NGMRES
+petsc4py.PETSc.SNES.Type.NGS	petsc4py.PETSc.SNES.Type-class.html#NGS
 petsc4py.PETSc.SNES.Type.TEST	petsc4py.PETSc.SNES.Type-class.html#TEST
+petsc4py.PETSc.SNES.Type.NEWTONLS	petsc4py.PETSc.SNES.Type-class.html#NEWTONLS
 petsc4py.PETSc.SNES.Type.NCG	petsc4py.PETSc.SNES.Type-class.html#NCG
-petsc4py.PETSc.SNES.Type.NASM	petsc4py.PETSc.SNES.Type-class.html#NASM
+petsc4py.PETSc.SNES.Type.VINEWTONRSLS	petsc4py.PETSc.SNES.Type-class.html#VINEWTONRSLS
+petsc4py.PETSc.SNES.Type.NRICHARDSON	petsc4py.PETSc.SNES.Type-class.html#NRICHARDSON
+petsc4py.PETSc.SNES.Type.QN	petsc4py.PETSc.SNES.Type-class.html#QN
 petsc4py.PETSc.Scatter	petsc4py.PETSc.Scatter-class.html
 petsc4py.PETSc.Object.classid	petsc4py.PETSc.Object-class.html#classid
 petsc4py.PETSc.Scatter.toAll	petsc4py.PETSc.Scatter-class.html#toAll
@@ -2397,6 +2521,7 @@ petsc4py.PETSc.Scatter.toZero	petsc4py.PETSc.Scatter-class.html#toZero
 petsc4py.PETSc.Scatter.scatterBegin	petsc4py.PETSc.Scatter-class.html#scatterBegin
 petsc4py.PETSc.Object.getAttr	petsc4py.PETSc.Object-class.html#getAttr
 petsc4py.PETSc.Object.setTabLevel	petsc4py.PETSc.Object-class.html#setTabLevel
+petsc4py.PETSc.Object.getName	petsc4py.PETSc.Object-class.html#getName
 petsc4py.PETSc.Object.query	petsc4py.PETSc.Object-class.html#query
 petsc4py.PETSc.Object.__lt__	petsc4py.PETSc.Object-class.html#__lt__
 petsc4py.PETSc.Object.getTabLevel	petsc4py.PETSc.Object-class.html#getTabLevel
@@ -2425,6 +2550,7 @@ petsc4py.PETSc.Object.compose	petsc4py.PETSc.Object-class.html#compose
 petsc4py.PETSc.Object.comm	petsc4py.PETSc.Object-class.html#comm
 petsc4py.PETSc.Scatter.Mode	petsc4py.PETSc.ScatterMode-class.html
 petsc4py.PETSc.Object.__gt__	petsc4py.PETSc.Object-class.html#__gt__
+petsc4py.PETSc.Object.viewFromOptions	petsc4py.PETSc.Object-class.html#viewFromOptions
 petsc4py.PETSc.Scatter.copy	petsc4py.PETSc.Scatter-class.html#copy
 petsc4py.PETSc.Object.__eq__	petsc4py.PETSc.Object-class.html#__eq__
 petsc4py.PETSc.Object.__nonzero__	petsc4py.PETSc.Object-class.html#__nonzero__
@@ -2434,121 +2560,122 @@ petsc4py.PETSc.Object.getClassId	petsc4py.PETSc.Object-class.html#getClassId
 petsc4py.PETSc.Object.getComm	petsc4py.PETSc.Object-class.html#getComm
 petsc4py.PETSc.Object.prefix	petsc4py.PETSc.Object-class.html#prefix
 petsc4py.PETSc.Object.stateIncrease	petsc4py.PETSc.Object-class.html#stateIncrease
-petsc4py.PETSc.Scatter.scatter	petsc4py.PETSc.Scatter-class.html#scatter
 petsc4py.PETSc.Object.getDict	petsc4py.PETSc.Object-class.html#getDict
 petsc4py.PETSc.Object.__le__	petsc4py.PETSc.Object-class.html#__le__
 petsc4py.PETSc.Object.klass	petsc4py.PETSc.Object-class.html#klass
 petsc4py.PETSc.Object.getClassName	petsc4py.PETSc.Object-class.html#getClassName
 petsc4py.PETSc.Object.__copy__	petsc4py.PETSc.Object-class.html#__copy__
-petsc4py.PETSc.Object.getName	petsc4py.PETSc.Object-class.html#getName
+petsc4py.PETSc.Scatter.scatter	petsc4py.PETSc.Scatter-class.html#scatter
 petsc4py.PETSc.Object.__ge__	petsc4py.PETSc.Object-class.html#__ge__
 petsc4py.PETSc.Scatter.view	petsc4py.PETSc.Scatter-class.html#view
 petsc4py.PETSc.ScatterMode	petsc4py.PETSc.ScatterMode-class.html
 petsc4py.PETSc.ScatterMode.REVERSE	petsc4py.PETSc.ScatterMode-class.html#REVERSE
 petsc4py.PETSc.ScatterMode.SCATTER_FORWARD	petsc4py.PETSc.ScatterMode-class.html#SCATTER_FORWARD
-petsc4py.PETSc.ScatterMode.REVERSE_LOCAL	petsc4py.PETSc.ScatterMode-class.html#REVERSE_LOCAL
-petsc4py.PETSc.ScatterMode.SCATTER_LOCAL	petsc4py.PETSc.ScatterMode-class.html#SCATTER_LOCAL
-petsc4py.PETSc.ScatterMode.SCATTER_FORWARD_LOCAL	petsc4py.PETSc.ScatterMode-class.html#SCATTER_FORWARD_LOCAL
+petsc4py.PETSc.ScatterMode.FORWARD_LOCAL	petsc4py.PETSc.ScatterMode-class.html#FORWARD_LOCAL
+petsc4py.PETSc.ScatterMode.__qualname__	petsc4py.PETSc.ScatterMode-class.html#__qualname__
 petsc4py.PETSc.ScatterMode.SCATTER_REVERSE	petsc4py.PETSc.ScatterMode-class.html#SCATTER_REVERSE
+petsc4py.PETSc.ScatterMode.REVERSE_LOCAL	petsc4py.PETSc.ScatterMode-class.html#REVERSE_LOCAL
 petsc4py.PETSc.ScatterMode.SCATTER_REVERSE_LOCAL	petsc4py.PETSc.ScatterMode-class.html#SCATTER_REVERSE_LOCAL
 petsc4py.PETSc.ScatterMode.FORWARD	petsc4py.PETSc.ScatterMode-class.html#FORWARD
-petsc4py.PETSc.ScatterMode.__qualname__	petsc4py.PETSc.ScatterMode-class.html#__qualname__
-petsc4py.PETSc.ScatterMode.FORWARD_LOCAL	petsc4py.PETSc.ScatterMode-class.html#FORWARD_LOCAL
+petsc4py.PETSc.ScatterMode.SCATTER_LOCAL	petsc4py.PETSc.ScatterMode-class.html#SCATTER_LOCAL
+petsc4py.PETSc.ScatterMode.SCATTER_FORWARD_LOCAL	petsc4py.PETSc.ScatterMode-class.html#SCATTER_FORWARD_LOCAL
 petsc4py.PETSc.Section	petsc4py.PETSc.Section-class.html
+petsc4py.PETSc.Object.classid	petsc4py.PETSc.Object-class.html#classid
 petsc4py.PETSc.Section.setFieldConstraintIndices	petsc4py.PETSc.Section-class.html#setFieldConstraintIndices
+petsc4py.PETSc.Object.__lt__	petsc4py.PETSc.Object-class.html#__lt__
+petsc4py.PETSc.Object.__ne__	petsc4py.PETSc.Object-class.html#__ne__
+petsc4py.PETSc.Object.setName	petsc4py.PETSc.Object-class.html#setName
+petsc4py.PETSc.Object.__gt__	petsc4py.PETSc.Object-class.html#__gt__
 petsc4py.PETSc.Object.prefix	petsc4py.PETSc.Object-class.html#prefix
+petsc4py.PETSc.Object.getAttr	petsc4py.PETSc.Object-class.html#getAttr
+petsc4py.PETSc.Object.__nonzero__	petsc4py.PETSc.Object-class.html#__nonzero__
 petsc4py.PETSc.Section.getChart	petsc4py.PETSc.Section-class.html#getChart
+petsc4py.PETSc.Section.getFieldConstraintIndices	petsc4py.PETSc.Section-class.html#getFieldConstraintIndices
+petsc4py.PETSc.Object.incRef	petsc4py.PETSc.Object-class.html#incRef
 petsc4py.PETSc.Object.query	petsc4py.PETSc.Object-class.html#query
-petsc4py.PETSc.Object.__lt__	petsc4py.PETSc.Object-class.html#__lt__
+petsc4py.PETSc.Section.getOffsetRange	petsc4py.PETSc.Section-class.html#getOffsetRange
+petsc4py.PETSc.Section.setFieldComponents	petsc4py.PETSc.Section-class.html#setFieldComponents
 petsc4py.PETSc.Section.addConstraintDof	petsc4py.PETSc.Section-class.html#addConstraintDof
+petsc4py.PETSc.Section.setChart	petsc4py.PETSc.Section-class.html#setChart
 petsc4py.PETSc.Object.getTabLevel	petsc4py.PETSc.Object-class.html#getTabLevel
 petsc4py.PETSc.Object.compose	petsc4py.PETSc.Object-class.html#compose
-petsc4py.PETSc.Section.getConstraintIndices	petsc4py.PETSc.Section-class.html#getConstraintIndices
-petsc4py.PETSc.Object.fortran	petsc4py.PETSc.Object-class.html#fortran
-petsc4py.PETSc.Section.setOffset	petsc4py.PETSc.Section-class.html#setOffset
-petsc4py.PETSc.Object.handle	petsc4py.PETSc.Object-class.html#handle
-petsc4py.PETSc.Object.setOptionsPrefix	petsc4py.PETSc.Object-class.html#setOptionsPrefix
-petsc4py.PETSc.Object.__deepcopy__	petsc4py.PETSc.Object-class.html#__deepcopy__
-petsc4py.PETSc.Section.setNumFields	petsc4py.PETSc.Section-class.html#setNumFields
+petsc4py.PETSc.Object.viewFromOptions	petsc4py.PETSc.Object-class.html#viewFromOptions
+petsc4py.PETSc.Section.__new__	petsc4py.PETSc.Section-class.html#__new__
+petsc4py.PETSc.Section.addFieldDof	petsc4py.PETSc.Section-class.html#addFieldDof
+petsc4py.PETSc.Object.__eq__	petsc4py.PETSc.Object-class.html#__eq__
+petsc4py.PETSc.Section.create	petsc4py.PETSc.Section-class.html#create
 petsc4py.PETSc.Object.setFromOptions	petsc4py.PETSc.Object-class.html#setFromOptions
-petsc4py.PETSc.Object.__gt__	petsc4py.PETSc.Object-class.html#__gt__
-petsc4py.PETSc.Section.setConstraintDof	petsc4py.PETSc.Section-class.html#setConstraintDof
-petsc4py.PETSc.Section.addDof	petsc4py.PETSc.Section-class.html#addDof
-petsc4py.PETSc.Object.__nonzero__	petsc4py.PETSc.Object-class.html#__nonzero__
-petsc4py.PETSc.Object.name	petsc4py.PETSc.Object-class.html#name
-petsc4py.PETSc.Object.getClassId	petsc4py.PETSc.Object-class.html#getClassId
-petsc4py.PETSc.Object.getAttr	petsc4py.PETSc.Object-class.html#getAttr
-petsc4py.PETSc.Section.getFieldComponents	petsc4py.PETSc.Section-class.html#getFieldComponents
+petsc4py.PETSc.Object.incrementTabLevel	petsc4py.PETSc.Object-class.html#incrementTabLevel
+petsc4py.PETSc.Section.getMaxDof	petsc4py.PETSc.Section-class.html#getMaxDof
+petsc4py.PETSc.Object.fortran	petsc4py.PETSc.Object-class.html#fortran
 petsc4py.PETSc.Object.__copy__	petsc4py.PETSc.Object-class.html#__copy__
-petsc4py.PETSc.Section.view	petsc4py.PETSc.Section-class.html#view
 petsc4py.PETSc.Object.decRef	petsc4py.PETSc.Object-class.html#decRef
-petsc4py.PETSc.Section.setFieldComponents	petsc4py.PETSc.Section-class.html#setFieldComponents
-petsc4py.PETSc.Section.setChart	petsc4py.PETSc.Section-class.html#setChart
-petsc4py.PETSc.Object.getName	petsc4py.PETSc.Object-class.html#getName
-petsc4py.PETSc.Object.incrementTabLevel	petsc4py.PETSc.Object-class.html#incrementTabLevel
+petsc4py.PETSc.Object.__deepcopy__	petsc4py.PETSc.Object-class.html#__deepcopy__
 petsc4py.PETSc.Section.setConstraintIndices	petsc4py.PETSc.Section-class.html#setConstraintIndices
-petsc4py.PETSc.Object.__ne__	petsc4py.PETSc.Object-class.html#__ne__
-petsc4py.PETSc.Section.getDof	petsc4py.PETSc.Section-class.html#getDof
-petsc4py.PETSc.Section.setUp	petsc4py.PETSc.Section-class.html#setUp
-petsc4py.PETSc.Object.getOptionsPrefix	petsc4py.PETSc.Object-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.Section.createGlobalSection	petsc4py.PETSc.Section-class.html#createGlobalSection
-petsc4py.PETSc.Section.setFieldConstraintDof	petsc4py.PETSc.Section-class.html#setFieldConstraintDof
-petsc4py.PETSc.Section.addFieldConstraintDof	petsc4py.PETSc.Section-class.html#addFieldConstraintDof
-petsc4py.PETSc.Section.getStorageSize	petsc4py.PETSc.Section-class.html#getStorageSize
-petsc4py.PETSc.Section.getFieldConstraintIndices	petsc4py.PETSc.Section-class.html#getFieldConstraintIndices
-petsc4py.PETSc.Section.getOffsetRange	petsc4py.PETSc.Section-class.html#getOffsetRange
-petsc4py.PETSc.Section.create	petsc4py.PETSc.Section-class.html#create
+petsc4py.PETSc.Section.destroy	petsc4py.PETSc.Section-class.html#destroy
 petsc4py.PETSc.Object.type	petsc4py.PETSc.Object-class.html#type
+petsc4py.PETSc.Section.clone	petsc4py.PETSc.Section-class.html#clone
+petsc4py.PETSc.Object.getClassName	petsc4py.PETSc.Object-class.html#getClassName
+petsc4py.PETSc.Section.getConstraintDof	petsc4py.PETSc.Section-class.html#getConstraintDof
+petsc4py.PETSc.Section.getFieldConstraintDof	petsc4py.PETSc.Section-class.html#getFieldConstraintDof
+petsc4py.PETSc.Object.stateIncrease	petsc4py.PETSc.Object-class.html#stateIncrease
 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.Object.handle	petsc4py.PETSc.Object-class.html#handle
+petsc4py.PETSc.Section.getDof	petsc4py.PETSc.Section-class.html#getDof
+petsc4py.PETSc.Object.setOptionsPrefix	petsc4py.PETSc.Object-class.html#setOptionsPrefix
 petsc4py.PETSc.Section.setDof	petsc4py.PETSc.Section-class.html#setDof
+petsc4py.PETSc.Section.setUp	petsc4py.PETSc.Section-class.html#setUp
 petsc4py.PETSc.Object.getType	petsc4py.PETSc.Object-class.html#getType
 petsc4py.PETSc.Object.refcount	petsc4py.PETSc.Object-class.html#refcount
-petsc4py.PETSc.Object.__eq__	petsc4py.PETSc.Object-class.html#__eq__
+petsc4py.PETSc.Object.comm	petsc4py.PETSc.Object-class.html#comm
+petsc4py.PETSc.Section.setFieldDof	petsc4py.PETSc.Section-class.html#setFieldDof
+petsc4py.PETSc.Object.getOptionsPrefix	petsc4py.PETSc.Object-class.html#getOptionsPrefix
+petsc4py.PETSc.Section.setNumFields	petsc4py.PETSc.Section-class.html#setNumFields
+petsc4py.PETSc.Section.addFieldConstraintDof	petsc4py.PETSc.Section-class.html#addFieldConstraintDof
+petsc4py.PETSc.Object.setTabLevel	petsc4py.PETSc.Object-class.html#setTabLevel
+petsc4py.PETSc.Section.setOffset	petsc4py.PETSc.Section-class.html#setOffset
+petsc4py.PETSc.Section.setConstraintDof	petsc4py.PETSc.Section-class.html#setConstraintDof
+petsc4py.PETSc.Section.getConstraintIndices	petsc4py.PETSc.Section-class.html#getConstraintIndices
+petsc4py.PETSc.Section.getFieldDof	petsc4py.PETSc.Section-class.html#getFieldDof
+petsc4py.PETSc.Section.addDof	petsc4py.PETSc.Section-class.html#addDof
 petsc4py.PETSc.Section.reset	petsc4py.PETSc.Section-class.html#reset
+petsc4py.PETSc.Object.getDict	petsc4py.PETSc.Object-class.html#getDict
 petsc4py.PETSc.Section.getOffset	petsc4py.PETSc.Section-class.html#getOffset
-petsc4py.PETSc.Section.getFieldName	petsc4py.PETSc.Section-class.html#getFieldName
-petsc4py.PETSc.Object.__le__	petsc4py.PETSc.Object-class.html#__le__
-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.Section.__new__	petsc4py.PETSc.Section-class.html#__new__
-petsc4py.PETSc.Section.setFieldName	petsc4py.PETSc.Section-class.html#setFieldName
-petsc4py.PETSc.Section.getFieldConstraintDof	petsc4py.PETSc.Section-class.html#getFieldConstraintDof
-petsc4py.PETSc.Section.getMaxDof	petsc4py.PETSc.Section-class.html#getMaxDof
-petsc4py.PETSc.Section.setFieldDof	petsc4py.PETSc.Section-class.html#setFieldDof
-petsc4py.PETSc.Section.destroy	petsc4py.PETSc.Section-class.html#destroy
-petsc4py.PETSc.Section.getConstraintDof	petsc4py.PETSc.Section-class.html#getConstraintDof
-petsc4py.PETSc.Object.stateIncrease	petsc4py.PETSc.Object-class.html#stateIncrease
-petsc4py.PETSc.Section.getConstrainedStorageSize	petsc4py.PETSc.Section-class.html#getConstrainedStorageSize
+petsc4py.PETSc.Object.name	petsc4py.PETSc.Object-class.html#name
 petsc4py.PETSc.Object.setAttr	petsc4py.PETSc.Object-class.html#setAttr
-petsc4py.PETSc.Section.clone	petsc4py.PETSc.Section-class.html#clone
-petsc4py.PETSc.Section.getFieldDof	petsc4py.PETSc.Section-class.html#getFieldDof
+petsc4py.PETSc.Object.getClassId	petsc4py.PETSc.Object-class.html#getClassId
+petsc4py.PETSc.Section.getConstrainedStorageSize	petsc4py.PETSc.Section-class.html#getConstrainedStorageSize
 petsc4py.PETSc.Object.getComm	petsc4py.PETSc.Object-class.html#getComm
-petsc4py.PETSc.Object.setTabLevel	petsc4py.PETSc.Object-class.html#setTabLevel
+petsc4py.PETSc.Section.getFieldName	petsc4py.PETSc.Section-class.html#getFieldName
+petsc4py.PETSc.Section.getFieldComponents	petsc4py.PETSc.Section-class.html#getFieldComponents
 petsc4py.PETSc.Section.getNumFields	petsc4py.PETSc.Section-class.html#getNumFields
-petsc4py.PETSc.Section.addFieldDof	petsc4py.PETSc.Section-class.html#addFieldDof
+petsc4py.PETSc.Section.setFieldName	petsc4py.PETSc.Section-class.html#setFieldName
+petsc4py.PETSc.Object.__le__	petsc4py.PETSc.Object-class.html#__le__
 petsc4py.PETSc.Object.klass	petsc4py.PETSc.Object-class.html#klass
+petsc4py.PETSc.Section.createGlobalSection	petsc4py.PETSc.Section-class.html#createGlobalSection
+petsc4py.PETSc.Section.getStorageSize	petsc4py.PETSc.Section-class.html#getStorageSize
+petsc4py.PETSc.Section.view	petsc4py.PETSc.Section-class.html#view
+petsc4py.PETSc.Object.getName	petsc4py.PETSc.Object-class.html#getName
+petsc4py.PETSc.Object.__ge__	petsc4py.PETSc.Object-class.html#__ge__
+petsc4py.PETSc.Section.setFieldConstraintDof	petsc4py.PETSc.Section-class.html#setFieldConstraintDof
 petsc4py.PETSc.Sys	petsc4py.PETSc.Sys-class.html
+petsc4py.PETSc.Sys.splitOwnership	petsc4py.PETSc.Sys-class.html#splitOwnership
+petsc4py.PETSc.Sys.popErrorHandler	petsc4py.PETSc.Sys-class.html#popErrorHandler
+petsc4py.PETSc.Sys.__new__	petsc4py.PETSc.Sys-class.html#__new__
+petsc4py.PETSc.Sys.infoAllow	petsc4py.PETSc.Sys-class.html#infoAllow
+petsc4py.PETSc.Sys.syncPrint	petsc4py.PETSc.Sys-class.html#syncPrint
 petsc4py.PETSc.Sys.pushErrorHandler	petsc4py.PETSc.Sys-class.html#pushErrorHandler
 petsc4py.PETSc.Sys.getDefaultComm	petsc4py.PETSc.Sys-class.html#getDefaultComm
+petsc4py.PETSc.Sys.popSignalHandler	petsc4py.PETSc.Sys-class.html#popSignalHandler
 petsc4py.PETSc.Sys.sleep	petsc4py.PETSc.Sys-class.html#sleep
+petsc4py.PETSc.Sys.isInitialized	petsc4py.PETSc.Sys-class.html#isInitialized
 petsc4py.PETSc.Sys.Print	petsc4py.PETSc.Sys-class.html#Print
-petsc4py.PETSc.Sys.syncFlush	petsc4py.PETSc.Sys-class.html#syncFlush
+petsc4py.PETSc.Sys.registerCitation	petsc4py.PETSc.Sys-class.html#registerCitation
+petsc4py.PETSc.Sys.getVersionInfo	petsc4py.PETSc.Sys-class.html#getVersionInfo
 petsc4py.PETSc.Sys.getVersion	petsc4py.PETSc.Sys-class.html#getVersion
-petsc4py.PETSc.Sys.__new__	petsc4py.PETSc.Sys-class.html#__new__
+petsc4py.PETSc.Sys.syncFlush	petsc4py.PETSc.Sys-class.html#syncFlush
 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
@@ -2562,6 +2689,7 @@ petsc4py.PETSc.Object.__lt__	petsc4py.PETSc.Object-class.html#__lt__
 petsc4py.PETSc.TAO.its	petsc4py.PETSc.TAO-class.html#its
 petsc4py.PETSc.Object.getTabLevel	petsc4py.PETSc.Object-class.html#getTabLevel
 petsc4py.PETSc.Object.compose	petsc4py.PETSc.Object-class.html#compose
+petsc4py.PETSc.Object.viewFromOptions	petsc4py.PETSc.Object-class.html#viewFromOptions
 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
@@ -2704,6 +2832,7 @@ petsc4py.PETSc.TAO.Type.POUNDERS	petsc4py.PETSc.TAO.Type-class.html#POUNDERS
 petsc4py.PETSc.TAO.Type.NM	petsc4py.PETSc.TAO.Type-class.html#NM
 petsc4py.PETSc.TS	petsc4py.PETSc.TS-class.html
 petsc4py.PETSc.TS.getConvergedReason	petsc4py.PETSc.TS-class.html#getConvergedReason
+petsc4py.PETSc.TS.setCostIntegrand	petsc4py.PETSc.TS-class.html#setCostIntegrand
 petsc4py.PETSc.TS.setDM	petsc4py.PETSc.TS-class.html#setDM
 petsc4py.PETSc.TS.computeRHSJacobian	petsc4py.PETSc.TS-class.html#computeRHSJacobian
 petsc4py.PETSc.TS.ExactFinalTime	petsc4py.PETSc.TS.ExactFinalTime-class.html
@@ -2716,13 +2845,14 @@ petsc4py.PETSc.TS.setTheta	petsc4py.PETSc.TS-class.html#setTheta
 petsc4py.PETSc.TS.getTimeStep	petsc4py.PETSc.TS-class.html#getTimeStep
 petsc4py.PETSc.TS.setExactFinalTime	petsc4py.PETSc.TS-class.html#setExactFinalTime
 petsc4py.PETSc.Object.__lt__	petsc4py.PETSc.Object-class.html#__lt__
+petsc4py.PETSc.TS.adjointComputeRHSJacobian	petsc4py.PETSc.TS-class.html#adjointComputeRHSJacobian
 petsc4py.PETSc.Object.getTabLevel	petsc4py.PETSc.Object-class.html#getTabLevel
 petsc4py.PETSc.Object.compose	petsc4py.PETSc.Object-class.html#compose
+petsc4py.PETSc.Object.viewFromOptions	petsc4py.PETSc.Object-class.html#viewFromOptions
 petsc4py.PETSc.TS.monitor	petsc4py.PETSc.TS-class.html#monitor
 petsc4py.PETSc.TS.getStepRejections	petsc4py.PETSc.TS-class.html#getStepRejections
 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
 petsc4py.PETSc.TS.computeRHSJacobianConstant	petsc4py.PETSc.TS-class.html#computeRHSJacobianConstant
 petsc4py.PETSc.TS.vec_sol	petsc4py.PETSc.TS-class.html#vec_sol
@@ -2731,23 +2861,29 @@ petsc4py.PETSc.Object.handle	petsc4py.PETSc.Object-class.html#handle
 petsc4py.PETSc.TS.setOptionsPrefix	petsc4py.PETSc.TS-class.html#setOptionsPrefix
 petsc4py.PETSc.Object.__deepcopy__	petsc4py.PETSc.Object-class.html#__deepcopy__
 petsc4py.PETSc.TS.ProblemType	petsc4py.PETSc.TS.ProblemType-class.html
+petsc4py.PETSc.TS.setPostStep	petsc4py.PETSc.TS-class.html#setPostStep
 petsc4py.PETSc.TS.setFromOptions	petsc4py.PETSc.TS-class.html#setFromOptions
-petsc4py.PETSc.TS.setInitialTimeStep	petsc4py.PETSc.TS-class.html#setInitialTimeStep
+petsc4py.PETSc.TS.destroy	petsc4py.PETSc.TS-class.html#destroy
 petsc4py.PETSc.TS.setMaxSNESFailures	petsc4py.PETSc.TS-class.html#setMaxSNESFailures
 petsc4py.PETSc.TS.getRHSFunction	petsc4py.PETSc.TS-class.html#getRHSFunction
 petsc4py.PETSc.Object.name	petsc4py.PETSc.Object-class.html#name
+petsc4py.PETSc.TS.setSolution	petsc4py.PETSc.TS-class.html#setSolution
+petsc4py.PETSc.TS.setSaveTrajectory	petsc4py.PETSc.TS-class.html#setSaveTrajectory
 petsc4py.PETSc.Object.__nonzero__	petsc4py.PETSc.Object-class.html#__nonzero__
 petsc4py.PETSc.TS.setAppCtx	petsc4py.PETSc.TS-class.html#setAppCtx
 petsc4py.PETSc.TS.step_number	petsc4py.PETSc.TS-class.html#step_number
 petsc4py.PETSc.Object.getAttr	petsc4py.PETSc.Object-class.html#getAttr
+petsc4py.PETSc.TS.adjointSolve	petsc4py.PETSc.TS-class.html#adjointSolve
 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.Object.__copy__	petsc4py.PETSc.Object-class.html#__copy__
 petsc4py.PETSc.TS.ExactFinalTimeOption	petsc4py.PETSc.TS.ExactFinalTime-class.html
+petsc4py.PETSc.TS.adjointSetUp	petsc4py.PETSc.TS-class.html#adjointSetUp
 petsc4py.PETSc.TS.setPythonContext	petsc4py.PETSc.TS-class.html#setPythonContext
+petsc4py.PETSc.TS.computeI2Function	petsc4py.PETSc.TS-class.html#computeI2Function
 petsc4py.PETSc.TS.ConvergedReason	petsc4py.PETSc.TS.ConvergedReason-class.html
 petsc4py.PETSc.TS.getKSPIterations	petsc4py.PETSc.TS-class.html#getKSPIterations
-petsc4py.PETSc.Object.query	petsc4py.PETSc.Object-class.html#query
+petsc4py.PETSc.TS.getSNESFailures	petsc4py.PETSc.TS-class.html#getSNESFailures
 petsc4py.PETSc.TS.computeIFunction	petsc4py.PETSc.TS-class.html#computeIFunction
 petsc4py.PETSc.TS.time_step	petsc4py.PETSc.TS-class.html#time_step
 petsc4py.PETSc.TS.Type	petsc4py.PETSc.TS.Type-class.html
@@ -2756,47 +2892,55 @@ petsc4py.PETSc.TS.setErrorIfStepFails	petsc4py.PETSc.TS-class.html#setErrorIfSte
 petsc4py.PETSc.TS.getRHSJacobian	petsc4py.PETSc.TS-class.html#getRHSJacobian
 petsc4py.PETSc.Object.getName	petsc4py.PETSc.Object-class.html#getName
 petsc4py.PETSc.Object.incrementTabLevel	petsc4py.PETSc.Object-class.html#incrementTabLevel
+petsc4py.PETSc.Object.__ge__	petsc4py.PETSc.Object-class.html#__ge__
 petsc4py.PETSc.TS.setMaxSteps	petsc4py.PETSc.TS-class.html#setMaxSteps
+petsc4py.PETSc.TS.setI2Jacobian	petsc4py.PETSc.TS-class.html#setI2Jacobian
 petsc4py.PETSc.TS.getIFunction	petsc4py.PETSc.TS-class.html#getIFunction
 petsc4py.PETSc.Object.__ne__	petsc4py.PETSc.Object-class.html#__ne__
 petsc4py.PETSc.TS.getMaxTime	petsc4py.PETSc.TS-class.html#getMaxTime
 petsc4py.PETSc.TS.getPostStep	petsc4py.PETSc.TS-class.html#getPostStep
 petsc4py.PETSc.TS.setUp	petsc4py.PETSc.TS-class.html#setUp
+petsc4py.PETSc.TS.view	petsc4py.PETSc.TS-class.html#view
 petsc4py.PETSc.TS.interpolate	petsc4py.PETSc.TS-class.html#interpolate
 petsc4py.PETSc.TS.getDM	petsc4py.PETSc.TS-class.html#getDM
 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
-petsc4py.PETSc.TS.setMaxTime	petsc4py.PETSc.TS-class.html#setMaxTime
+petsc4py.PETSc.TS.setI2Function	petsc4py.PETSc.TS-class.html#setI2Function
+petsc4py.PETSc.TS.createPython	petsc4py.PETSc.TS-class.html#createPython
+petsc4py.PETSc.TS.setThetaEndpoint	petsc4py.PETSc.TS-class.html#setThetaEndpoint
 petsc4py.PETSc.TS.setAlphaParams	petsc4py.PETSc.TS-class.html#setAlphaParams
 petsc4py.PETSc.TS.ksp	petsc4py.PETSc.TS-class.html#ksp
-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.getRKType	petsc4py.PETSc.TS-class.html#getRKType
+petsc4py.PETSc.TS.rollBack	petsc4py.PETSc.TS-class.html#rollBack
 petsc4py.PETSc.TS.appctx	petsc4py.PETSc.TS-class.html#appctx
+petsc4py.PETSc.TS.setRKType	petsc4py.PETSc.TS-class.html#setRKType
 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.getSolveTime	petsc4py.PETSc.TS-class.html#getSolveTime
+petsc4py.PETSc.Object.comm	petsc4py.PETSc.Object-class.html#comm
+petsc4py.PETSc.TS.adjointSetSteps	petsc4py.PETSc.TS-class.html#adjointSetSteps
 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.setCostGradients	petsc4py.PETSc.TS-class.html#setCostGradients
 petsc4py.PETSc.TS.getIJacobian	petsc4py.PETSc.TS-class.html#getIJacobian
-petsc4py.PETSc.TS.getDuration	petsc4py.PETSc.TS-class.html#getDuration
+petsc4py.PETSc.TS.setMaxTime	petsc4py.PETSc.TS-class.html#setMaxTime
+petsc4py.PETSc.TS.computeI2Jacobian	petsc4py.PETSc.TS-class.html#computeI2Jacobian
 petsc4py.PETSc.TS.setRHSFunction	petsc4py.PETSc.TS-class.html#setRHSFunction
 petsc4py.PETSc.TS.problem_type	petsc4py.PETSc.TS-class.html#problem_type
 petsc4py.PETSc.TS.setType	petsc4py.PETSc.TS-class.html#setType
 petsc4py.PETSc.TS.getSNES	petsc4py.PETSc.TS-class.html#getSNES
+petsc4py.PETSc.TS.getCostIntegral	petsc4py.PETSc.TS-class.html#getCostIntegral
 petsc4py.PETSc.Object.fortran	petsc4py.PETSc.Object-class.html#fortran
 petsc4py.PETSc.TS.create	petsc4py.PETSc.TS-class.html#create
 petsc4py.PETSc.TS.getAlphaParams	petsc4py.PETSc.TS-class.html#getAlphaParams
 petsc4py.PETSc.Object.decRef	petsc4py.PETSc.Object-class.html#decRef
+petsc4py.PETSc.TS.getSolution2	petsc4py.PETSc.TS-class.html#getSolution2
 petsc4py.PETSc.TS.snes	petsc4py.PETSc.TS-class.html#snes
 petsc4py.PETSc.Object.type	petsc4py.PETSc.Object-class.html#type
 petsc4py.PETSc.TS.getProblemType	petsc4py.PETSc.TS-class.html#getProblemType
+petsc4py.PETSc.Object.classid	petsc4py.PETSc.Object-class.html#classid
 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
@@ -2804,20 +2948,20 @@ petsc4py.PETSc.TS.getType	petsc4py.PETSc.TS-class.html#getType
 petsc4py.PETSc.TS.getMonitor	petsc4py.PETSc.TS-class.html#getMonitor
 petsc4py.PETSc.TS.getAppCtx	petsc4py.PETSc.TS-class.html#getAppCtx
 petsc4py.PETSc.TS.atol	petsc4py.PETSc.TS-class.html#atol
-petsc4py.PETSc.TS.rollBack	petsc4py.PETSc.TS-class.html#rollBack
+petsc4py.PETSc.TS.getStepNumber	petsc4py.PETSc.TS-class.html#getStepNumber
 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.TS.RKType	petsc4py.PETSc.TS.RKType-class.html
 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
-petsc4py.PETSc.TS.getSNESFailures	petsc4py.PETSc.TS-class.html#getSNESFailures
-petsc4py.PETSc.TS.getSolveTime	petsc4py.PETSc.TS-class.html#getSolveTime
-petsc4py.PETSc.Object.classid	petsc4py.PETSc.Object-class.html#classid
+petsc4py.PETSc.TS.getCostGradients	petsc4py.PETSc.TS-class.html#getCostGradients
+petsc4py.PETSc.TS.adjointSetRHSJacobian	petsc4py.PETSc.TS-class.html#adjointSetRHSJacobian
+petsc4py.PETSc.TS.getI2Function	petsc4py.PETSc.TS-class.html#getI2Function
 petsc4py.PETSc.TS.setIJacobian	petsc4py.PETSc.TS-class.html#setIJacobian
 petsc4py.PETSc.TS.setTimeStep	petsc4py.PETSc.TS-class.html#setTimeStep
 petsc4py.PETSc.TS.getThetaEndpoint	petsc4py.PETSc.TS-class.html#getThetaEndpoint
+petsc4py.PETSc.TS.adjointStep	petsc4py.PETSc.TS-class.html#adjointStep
 petsc4py.PETSc.TS.setConvergedReason	petsc4py.PETSc.TS-class.html#setConvergedReason
 petsc4py.PETSc.TS.getTheta	petsc4py.PETSc.TS-class.html#getTheta
 petsc4py.PETSc.TS.getSolution	petsc4py.PETSc.TS-class.html#getSolution
@@ -2825,6 +2969,8 @@ petsc4py.PETSc.TS.diverged	petsc4py.PETSc.TS-class.html#diverged
 petsc4py.PETSc.TS.getOptionsPrefix	petsc4py.PETSc.TS-class.html#getOptionsPrefix
 petsc4py.PETSc.TS.__new__	petsc4py.PETSc.TS-class.html#__new__
 petsc4py.PETSc.TS.getPreStep	petsc4py.PETSc.TS-class.html#getPreStep
+petsc4py.PETSc.TS.setSolution2	petsc4py.PETSc.TS-class.html#setSolution2
+petsc4py.PETSc.Object.query	petsc4py.PETSc.Object-class.html#query
 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
@@ -2847,50 +2993,62 @@ petsc4py.PETSc.TS.getMaxSteps	petsc4py.PETSc.TS-class.html#getMaxSteps
 petsc4py.PETSc.TS.setPythonType	petsc4py.PETSc.TS-class.html#setPythonType
 petsc4py.PETSc.Object.getComm	petsc4py.PETSc.Object-class.html#getComm
 petsc4py.PETSc.Object.setTabLevel	petsc4py.PETSc.Object-class.html#setTabLevel
+petsc4py.PETSc.TS.getI2Jacobian	petsc4py.PETSc.TS-class.html#getI2Jacobian
 petsc4py.PETSc.TS.solve	petsc4py.PETSc.TS-class.html#solve
 petsc4py.PETSc.Object.klass	petsc4py.PETSc.Object-class.html#klass
 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.CONVERGED_USER	petsc4py.PETSc.TS.ConvergedReason-class.html#CONVERGED_USER
+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.CONVERGED_EVENT	petsc4py.PETSc.TS.ConvergedReason-class.html#CONVERGED_EVENT
 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
-petsc4py.PETSc.TS.EquationType.DAE_IMPLICIT_INDEX2	petsc4py.PETSc.TS.EquationType-class.html#DAE_IMPLICIT_INDEX2
-petsc4py.PETSc.TS.EquationType.DAE_SEMI_EXPLICIT_INDEXHI	petsc4py.PETSc.TS.EquationType-class.html#DAE_SEMI_EXPLICIT_INDEXHI
-petsc4py.PETSc.TS.EquationType.__qualname__	petsc4py.PETSc.TS.EquationType-class.html#__qualname__
-petsc4py.PETSc.TS.EquationType.ODE_EXPLICIT	petsc4py.PETSc.TS.EquationType-class.html#ODE_EXPLICIT
-petsc4py.PETSc.TS.EquationType.EXPLICIT	petsc4py.PETSc.TS.EquationType-class.html#EXPLICIT
-petsc4py.PETSc.TS.EquationType.DAE_SEMI_EXPLICIT_INDEX1	petsc4py.PETSc.TS.EquationType-class.html#DAE_SEMI_EXPLICIT_INDEX1
-petsc4py.PETSc.TS.EquationType.DAE_SEMI_EXPLICIT_INDEX3	petsc4py.PETSc.TS.EquationType-class.html#DAE_SEMI_EXPLICIT_INDEX3
+petsc4py.PETSc.TS.EquationType.ODE_IMPLICIT	petsc4py.PETSc.TS.EquationType-class.html#ODE_IMPLICIT
 petsc4py.PETSc.TS.EquationType.DAE_SEMI_EXPLICIT_INDEX2	petsc4py.PETSc.TS.EquationType-class.html#DAE_SEMI_EXPLICIT_INDEX2
 petsc4py.PETSc.TS.EquationType.DAE_IMPLICIT_INDEXHI	petsc4py.PETSc.TS.EquationType-class.html#DAE_IMPLICIT_INDEXHI
+petsc4py.PETSc.TS.EquationType.DAE_SEMI_EXPLICIT_INDEX3	petsc4py.PETSc.TS.EquationType-class.html#DAE_SEMI_EXPLICIT_INDEX3
+petsc4py.PETSc.TS.EquationType.ODE_EXPLICIT	petsc4py.PETSc.TS.EquationType-class.html#ODE_EXPLICIT
+petsc4py.PETSc.TS.EquationType.EXPLICIT	petsc4py.PETSc.TS.EquationType-class.html#EXPLICIT
 petsc4py.PETSc.TS.EquationType.UNSPECIFIED	petsc4py.PETSc.TS.EquationType-class.html#UNSPECIFIED
+petsc4py.PETSc.TS.EquationType.__qualname__	petsc4py.PETSc.TS.EquationType-class.html#__qualname__
+petsc4py.PETSc.TS.EquationType.DAE_SEMI_EXPLICIT_INDEXHI	petsc4py.PETSc.TS.EquationType-class.html#DAE_SEMI_EXPLICIT_INDEXHI
+petsc4py.PETSc.TS.EquationType.DAE_SEMI_EXPLICIT_INDEX1	petsc4py.PETSc.TS.EquationType-class.html#DAE_SEMI_EXPLICIT_INDEX1
+petsc4py.PETSc.TS.EquationType.DAE_IMPLICIT_INDEX1	petsc4py.PETSc.TS.EquationType-class.html#DAE_IMPLICIT_INDEX1
+petsc4py.PETSc.TS.EquationType.DAE_IMPLICIT_INDEX2	petsc4py.PETSc.TS.EquationType-class.html#DAE_IMPLICIT_INDEX2
+petsc4py.PETSc.TS.EquationType.DAE_IMPLICIT_INDEX3	petsc4py.PETSc.TS.EquationType-class.html#DAE_IMPLICIT_INDEX3
 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.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.ExactFinalTime.INTERPOLATE	petsc4py.PETSc.TS.ExactFinalTime-class.html#INTERPOLATE
+petsc4py.PETSc.TS.ExactFinalTime.UNSPECIFIED	petsc4py.PETSc.TS.ExactFinalTime-class.html#UNSPECIFIED
 petsc4py.PETSc.TS.ProblemType	petsc4py.PETSc.TS.ProblemType-class.html
+petsc4py.PETSc.TS.ProblemType.__qualname__	petsc4py.PETSc.TS.ProblemType-class.html#__qualname__
 petsc4py.PETSc.TS.ProblemType.NONLINEAR	petsc4py.PETSc.TS.ProblemType-class.html#NONLINEAR
 petsc4py.PETSc.TS.ProblemType.LINEAR	petsc4py.PETSc.TS.ProblemType-class.html#LINEAR
-petsc4py.PETSc.TS.ProblemType.__qualname__	petsc4py.PETSc.TS.ProblemType-class.html#__qualname__
+petsc4py.PETSc.TS.RKType	petsc4py.PETSc.TS.RKType-class.html
+petsc4py.PETSc.TS.RKType.RK4	petsc4py.PETSc.TS.RKType-class.html#RK4
+petsc4py.PETSc.TS.RKType.RK5F	petsc4py.PETSc.TS.RKType-class.html#RK5F
+petsc4py.PETSc.TS.RKType.RK3	petsc4py.PETSc.TS.RKType-class.html#RK3
+petsc4py.PETSc.TS.RKType.RK3BS	petsc4py.PETSc.TS.RKType-class.html#RK3BS
+petsc4py.PETSc.TS.RKType.RK2A	petsc4py.PETSc.TS.RKType-class.html#RK2A
+petsc4py.PETSc.TS.RKType.__qualname__	petsc4py.PETSc.TS.RKType-class.html#__qualname__
+petsc4py.PETSc.TS.RKType.RK5DP	petsc4py.PETSc.TS.RKType-class.html#RK5DP
+petsc4py.PETSc.TS.RKType.RK5BS	petsc4py.PETSc.TS.RKType-class.html#RK5BS
+petsc4py.PETSc.TS.RKType.RK1FE	petsc4py.PETSc.TS.RKType-class.html#RK1FE
 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.GLLE	petsc4py.PETSc.TS.Type-class.html#GLLE
 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
@@ -2906,12 +3064,12 @@ 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
 petsc4py.PETSc.TS.Type.EIMEX	petsc4py.PETSc.TS.Type-class.html#EIMEX
 petsc4py.PETSc.TS.Type.THETA	petsc4py.PETSc.TS.Type-class.html#THETA
-petsc4py.PETSc.TS.Type.GL	petsc4py.PETSc.TS.Type-class.html#GL
 petsc4py.PETSc.TS.Type.SSP	petsc4py.PETSc.TS.Type-class.html#SSP
 petsc4py.PETSc.TS.Type.__qualname__	petsc4py.PETSc.TS.Type-class.html#__qualname__
 petsc4py.PETSc.TS.Type.ALPHA	petsc4py.PETSc.TS.Type-class.html#ALPHA
 petsc4py.PETSc.TS.Type.ROSW	petsc4py.PETSc.TS.Type-class.html#ROSW
 petsc4py.PETSc.Vec	petsc4py.PETSc.Vec-class.html
+petsc4py.PETSc.Vec.getLGMap	petsc4py.PETSc.Vec-class.html#getLGMap
 petsc4py.PETSc.Vec.mDotBegin	petsc4py.PETSc.Vec-class.html#mDotBegin
 petsc4py.PETSc.Vec.createShared	petsc4py.PETSc.Vec-class.html#createShared
 petsc4py.PETSc.Vec.getSize	petsc4py.PETSc.Vec-class.html#getSize
@@ -2925,6 +3083,7 @@ petsc4py.PETSc.Vec.permute	petsc4py.PETSc.Vec-class.html#permute
 petsc4py.PETSc.Vec.ghostUpdateBegin	petsc4py.PETSc.Vec-class.html#ghostUpdateBegin
 petsc4py.PETSc.Object.getTabLevel	petsc4py.PETSc.Object-class.html#getTabLevel
 petsc4py.PETSc.Vec.copy	petsc4py.PETSc.Vec-class.html#copy
+petsc4py.PETSc.Object.viewFromOptions	petsc4py.PETSc.Object-class.html#viewFromOptions
 petsc4py.PETSc.Vec.pointwiseMaxAbs	petsc4py.PETSc.Vec-class.html#pointwiseMaxAbs
 petsc4py.PETSc.Vec.__enter__	petsc4py.PETSc.Vec-class.html#__enter__
 petsc4py.PETSc.Object.fortran	petsc4py.PETSc.Object-class.html#fortran
@@ -3097,40 +3256,45 @@ petsc4py.PETSc.Vec.localForm	petsc4py.PETSc.Vec-class.html#localForm
 petsc4py.PETSc.Object.getName	petsc4py.PETSc.Object-class.html#getName
 petsc4py.PETSc.Vec.dot	petsc4py.PETSc.Vec-class.html#dot
 petsc4py.PETSc.Vec.Option	petsc4py.PETSc.Vec.Option-class.html
+petsc4py.PETSc.Vec.Option.__qualname__	petsc4py.PETSc.Vec.Option-class.html#__qualname__
 petsc4py.PETSc.Vec.Option.IGNORE_NEGATIVE_INDICES	petsc4py.PETSc.Vec.Option-class.html#IGNORE_NEGATIVE_INDICES
 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.NEST	petsc4py.PETSc.Vec.Type-class.html#NEST
-petsc4py.PETSc.Vec.Type.SEQ	petsc4py.PETSc.Vec.Type-class.html#SEQ
-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.STANDARD	petsc4py.PETSc.Vec.Type-class.html#STANDARD
+petsc4py.PETSc.Vec.Type.SEQ	petsc4py.PETSc.Vec.Type-class.html#SEQ
+petsc4py.PETSc.Vec.Type.NEST	petsc4py.PETSc.Vec.Type-class.html#NEST
 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.STANDARD	petsc4py.PETSc.Vec.Type-class.html#STANDARD
 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.SEQCUSP	petsc4py.PETSc.Vec.Type-class.html#SEQCUSP
 petsc4py.PETSc.Vec.Type.SHARED	petsc4py.PETSc.Vec.Type-class.html#SHARED
+petsc4py.PETSc.Vec.Type.MPI	petsc4py.PETSc.Vec.Type-class.html#MPI
 petsc4py.PETSc.Vec.Type.VIENNACL	petsc4py.PETSc.Vec.Type-class.html#VIENNACL
+petsc4py.PETSc.Vec.Type.SEQVIENNACL	petsc4py.PETSc.Vec.Type-class.html#SEQVIENNACL
 petsc4py.PETSc.Viewer	petsc4py.PETSc.Viewer-class.html
 petsc4py.PETSc.Viewer.getFileMode	petsc4py.PETSc.Viewer-class.html#getFileMode
 petsc4py.PETSc.Object.classid	petsc4py.PETSc.Object-class.html#classid
+petsc4py.PETSc.Viewer.printfASCII	petsc4py.PETSc.Viewer-class.html#printfASCII
 petsc4py.PETSc.Viewer.pushFormat	petsc4py.PETSc.Viewer-class.html#pushFormat
 petsc4py.PETSc.Object.__gt__	petsc4py.PETSc.Object-class.html#__gt__
 petsc4py.PETSc.Object.stateIncrease	petsc4py.PETSc.Object-class.html#stateIncrease
 petsc4py.PETSc.Object.getAttr	petsc4py.PETSc.Object-class.html#getAttr
+petsc4py.PETSc.Object.setTabLevel	petsc4py.PETSc.Object-class.html#setTabLevel
+petsc4py.PETSc.Object.incRef	petsc4py.PETSc.Object-class.html#incRef
 petsc4py.PETSc.Viewer.flush	petsc4py.PETSc.Viewer-class.html#flush
+petsc4py.PETSc.Viewer.addASCIITab	petsc4py.PETSc.Viewer-class.html#addASCIITab
 petsc4py.PETSc.Object.query	petsc4py.PETSc.Object-class.html#query
 petsc4py.PETSc.Object.__lt__	petsc4py.PETSc.Object-class.html#__lt__
 petsc4py.PETSc.Viewer.Type	petsc4py.PETSc.Viewer.Type-class.html
 petsc4py.PETSc.Viewer.setType	petsc4py.PETSc.Viewer-class.html#setType
 petsc4py.PETSc.Object.getTabLevel	petsc4py.PETSc.Object-class.html#getTabLevel
-petsc4py.PETSc.Object.compose	petsc4py.PETSc.Object-class.html#compose
+petsc4py.PETSc.Viewer.printfASCIISynchronized	petsc4py.PETSc.Viewer-class.html#printfASCIISynchronized
 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.Object.__eq__	petsc4py.PETSc.Object-class.html#__eq__
+petsc4py.PETSc.Object.handle	petsc4py.PETSc.Object-class.html#handle
+petsc4py.PETSc.Viewer.getASCIITab	petsc4py.PETSc.Viewer-class.html#getASCIITab
 petsc4py.PETSc.Viewer.create	petsc4py.PETSc.Viewer-class.html#create
 petsc4py.PETSc.Viewer.STDOUT	petsc4py.PETSc.Viewer-class.html#STDOUT
 petsc4py.PETSc.Object.setFromOptions	petsc4py.PETSc.Object-class.html#setFromOptions
@@ -3138,31 +3302,36 @@ petsc4py.PETSc.Object.incrementTabLevel	petsc4py.PETSc.Object-class.html#increme
 petsc4py.PETSc.Viewer.clearDraw	petsc4py.PETSc.Viewer-class.html#clearDraw
 petsc4py.PETSc.Object.fortran	petsc4py.PETSc.Object-class.html#fortran
 petsc4py.PETSc.Viewer.setFileMode	petsc4py.PETSc.Viewer-class.html#setFileMode
+petsc4py.PETSc.Object.getName	petsc4py.PETSc.Object-class.html#getName
 petsc4py.PETSc.Viewer.__call__	petsc4py.PETSc.Viewer-class.html#__call__
 petsc4py.PETSc.Viewer.destroy	petsc4py.PETSc.Viewer-class.html#destroy
+petsc4py.PETSc.Viewer.STDERR	petsc4py.PETSc.Viewer-class.html#STDERR
 petsc4py.PETSc.Object.type	petsc4py.PETSc.Object-class.html#type
 petsc4py.PETSc.Object.getClassName	petsc4py.PETSc.Object-class.html#getClassName
 petsc4py.PETSc.Object.__ne__	petsc4py.PETSc.Object-class.html#__ne__
 petsc4py.PETSc.Viewer.DRAW	petsc4py.PETSc.Viewer-class.html#DRAW
 petsc4py.PETSc.Object.getRefCount	petsc4py.PETSc.Object-class.html#getRefCount
-petsc4py.PETSc.Object.handle	petsc4py.PETSc.Object-class.html#handle
-petsc4py.PETSc.Object.incRef	petsc4py.PETSc.Object-class.html#incRef
+petsc4py.PETSc.Viewer.popASCIISynchronized	petsc4py.PETSc.Viewer-class.html#popASCIISynchronized
+petsc4py.PETSc.Viewer.useASCIITabs	petsc4py.PETSc.Viewer-class.html#useASCIITabs
 petsc4py.PETSc.Object.setOptionsPrefix	petsc4py.PETSc.Object-class.html#setOptionsPrefix
 petsc4py.PETSc.Object.__deepcopy__	petsc4py.PETSc.Object-class.html#__deepcopy__
 petsc4py.PETSc.Object.decRef	petsc4py.PETSc.Object-class.html#decRef
 petsc4py.PETSc.Viewer.getType	petsc4py.PETSc.Viewer-class.html#getType
 petsc4py.PETSc.Object.refcount	petsc4py.PETSc.Object-class.html#refcount
 petsc4py.PETSc.Viewer.createHDF5	petsc4py.PETSc.Viewer-class.html#createHDF5
+petsc4py.PETSc.Object.__eq__	petsc4py.PETSc.Object-class.html#__eq__
 petsc4py.PETSc.Object.setName	petsc4py.PETSc.Object-class.html#setName
 petsc4py.PETSc.Object.getOptionsPrefix	petsc4py.PETSc.Object-class.html#getOptionsPrefix
-petsc4py.PETSc.Object.getDict	petsc4py.PETSc.Object-class.html#getDict
+petsc4py.PETSc.Object.compose	petsc4py.PETSc.Object-class.html#compose
 petsc4py.PETSc.Object.comm	petsc4py.PETSc.Object-class.html#comm
 petsc4py.PETSc.Viewer.setDrawInfo	petsc4py.PETSc.Viewer-class.html#setDrawInfo
 petsc4py.PETSc.Viewer.createMPIIO	petsc4py.PETSc.Viewer-class.html#createMPIIO
 petsc4py.PETSc.Viewer.createDraw	petsc4py.PETSc.Viewer-class.html#createDraw
+petsc4py.PETSc.Object.viewFromOptions	petsc4py.PETSc.Object-class.html#viewFromOptions
 petsc4py.PETSc.Viewer.getFormat	petsc4py.PETSc.Viewer-class.html#getFormat
 petsc4py.PETSc.Viewer.getFileName	petsc4py.PETSc.Viewer-class.html#getFileName
 petsc4py.PETSc.Viewer.BINARY	petsc4py.PETSc.Viewer-class.html#BINARY
+petsc4py.PETSc.Viewer.subtractASCIITab	petsc4py.PETSc.Viewer-class.html#subtractASCIITab
 petsc4py.PETSc.Object.__copy__	petsc4py.PETSc.Object-class.html#__copy__
 petsc4py.PETSc.Object.__nonzero__	petsc4py.PETSc.Object-class.html#__nonzero__
 petsc4py.PETSc.Object.name	petsc4py.PETSc.Object-class.html#name
@@ -3170,19 +3339,20 @@ petsc4py.PETSc.Viewer.createASCII	petsc4py.PETSc.Viewer-class.html#createASCII
 petsc4py.PETSc.Viewer.createBinary	petsc4py.PETSc.Viewer-class.html#createBinary
 petsc4py.PETSc.Object.setAttr	petsc4py.PETSc.Object-class.html#setAttr
 petsc4py.PETSc.Object.getClassId	petsc4py.PETSc.Object-class.html#getClassId
-petsc4py.PETSc.Viewer.createNetCDF	petsc4py.PETSc.Viewer-class.html#createNetCDF
 petsc4py.PETSc.Object.getComm	petsc4py.PETSc.Object-class.html#getComm
 petsc4py.PETSc.Viewer.setFileName	petsc4py.PETSc.Viewer-class.html#setFileName
 petsc4py.PETSc.Object.prefix	petsc4py.PETSc.Object-class.html#prefix
-petsc4py.PETSc.Object.setTabLevel	petsc4py.PETSc.Object-class.html#setTabLevel
+petsc4py.PETSc.Viewer.pushASCIISynchronized	petsc4py.PETSc.Viewer-class.html#pushASCIISynchronized
+petsc4py.PETSc.Object.getDict	petsc4py.PETSc.Object-class.html#getDict
 petsc4py.PETSc.Object.__le__	petsc4py.PETSc.Object-class.html#__le__
 petsc4py.PETSc.Object.klass	petsc4py.PETSc.Object-class.html#klass
-petsc4py.PETSc.Viewer.STDERR	petsc4py.PETSc.Viewer-class.html#STDERR
+petsc4py.PETSc.Viewer.pushASCIITab	petsc4py.PETSc.Viewer-class.html#pushASCIITab
 petsc4py.PETSc.Viewer.view	petsc4py.PETSc.Viewer-class.html#view
+petsc4py.PETSc.Viewer.popASCIITab	petsc4py.PETSc.Viewer-class.html#popASCIITab
 petsc4py.PETSc.Viewer.popFormat	petsc4py.PETSc.Viewer-class.html#popFormat
 petsc4py.PETSc.Viewer.Size	petsc4py.PETSc.Viewer.Size-class.html
 petsc4py.PETSc.Viewer.ASCII	petsc4py.PETSc.Viewer-class.html#ASCII
-petsc4py.PETSc.Object.getName	petsc4py.PETSc.Object-class.html#getName
+petsc4py.PETSc.Viewer.setASCIITab	petsc4py.PETSc.Viewer-class.html#setASCIITab
 petsc4py.PETSc.Object.__ge__	petsc4py.PETSc.Object-class.html#__ge__
 petsc4py.PETSc.Viewer.Mode	petsc4py.PETSc.Viewer.Mode-class.html
 petsc4py.PETSc.Viewer.Format	petsc4py.PETSc.Viewer.Format-class.html
@@ -3218,50 +3388,51 @@ petsc4py.PETSc.Viewer.Format.ASCII_DENSE	petsc4py.PETSc.Viewer.Format-class.html
 petsc4py.PETSc.Viewer.Format.DRAW_PORTS	petsc4py.PETSc.Viewer.Format-class.html#DRAW_PORTS
 petsc4py.PETSc.Viewer.Format.BINARY_MATLAB	petsc4py.PETSc.Viewer.Format-class.html#BINARY_MATLAB
 petsc4py.PETSc.Viewer.Mode	petsc4py.PETSc.Viewer.Mode-class.html
-petsc4py.PETSc.Viewer.Mode.READ	petsc4py.PETSc.Viewer.Mode-class.html#READ
-petsc4py.PETSc.Viewer.Mode.APPEND	petsc4py.PETSc.Viewer.Mode-class.html#APPEND
-petsc4py.PETSc.Viewer.Mode.APPEND_UPDATE	petsc4py.PETSc.Viewer.Mode-class.html#APPEND_UPDATE
 petsc4py.PETSc.Viewer.Mode.A	petsc4py.PETSc.Viewer.Mode-class.html#A
-petsc4py.PETSc.Viewer.Mode.UPDATE	petsc4py.PETSc.Viewer.Mode-class.html#UPDATE
 petsc4py.PETSc.Viewer.Mode.WRITE	petsc4py.PETSc.Viewer.Mode-class.html#WRITE
-petsc4py.PETSc.Viewer.Mode.U	petsc4py.PETSc.Viewer.Mode-class.html#U
-petsc4py.PETSc.Viewer.Mode.W	petsc4py.PETSc.Viewer.Mode-class.html#W
+petsc4py.PETSc.Viewer.Mode.READ	petsc4py.PETSc.Viewer.Mode-class.html#READ
+petsc4py.PETSc.Viewer.Mode.UPDATE	petsc4py.PETSc.Viewer.Mode-class.html#UPDATE
 petsc4py.PETSc.Viewer.Mode.__qualname__	petsc4py.PETSc.Viewer.Mode-class.html#__qualname__
+petsc4py.PETSc.Viewer.Mode.APPEND_UPDATE	petsc4py.PETSc.Viewer.Mode-class.html#APPEND_UPDATE
 petsc4py.PETSc.Viewer.Mode.R	petsc4py.PETSc.Viewer.Mode-class.html#R
+petsc4py.PETSc.Viewer.Mode.U	petsc4py.PETSc.Viewer.Mode-class.html#U
+petsc4py.PETSc.Viewer.Mode.W	petsc4py.PETSc.Viewer.Mode-class.html#W
 petsc4py.PETSc.Viewer.Mode.AU	petsc4py.PETSc.Viewer.Mode-class.html#AU
 petsc4py.PETSc.Viewer.Mode.UA	petsc4py.PETSc.Viewer.Mode-class.html#UA
+petsc4py.PETSc.Viewer.Mode.APPEND	petsc4py.PETSc.Viewer.Mode-class.html#APPEND
 petsc4py.PETSc.Viewer.Size	petsc4py.PETSc.Viewer.Size-class.html
 petsc4py.PETSc.Viewer.Size.HALF_SIZE	petsc4py.PETSc.Viewer.Size-class.html#HALF_SIZE
-petsc4py.PETSc.Viewer.Size.FULL_SIZE	petsc4py.PETSc.Viewer.Size-class.html#FULL_SIZE
 petsc4py.PETSc.Viewer.Size.FULL	petsc4py.PETSc.Viewer.Size-class.html#FULL
 petsc4py.PETSc.Viewer.Size.THIRD	petsc4py.PETSc.Viewer.Size-class.html#THIRD
-petsc4py.PETSc.Viewer.Size.HALF	petsc4py.PETSc.Viewer.Size-class.html#HALF
-petsc4py.PETSc.Viewer.Size.QUARTER	petsc4py.PETSc.Viewer.Size-class.html#QUARTER
 petsc4py.PETSc.Viewer.Size.QUARTER_SIZE	petsc4py.PETSc.Viewer.Size-class.html#QUARTER_SIZE
 petsc4py.PETSc.Viewer.Size.__qualname__	petsc4py.PETSc.Viewer.Size-class.html#__qualname__
 petsc4py.PETSc.Viewer.Size.THIRD_SIZE	petsc4py.PETSc.Viewer.Size-class.html#THIRD_SIZE
+petsc4py.PETSc.Viewer.Size.HALF	petsc4py.PETSc.Viewer.Size-class.html#HALF
+petsc4py.PETSc.Viewer.Size.QUARTER	petsc4py.PETSc.Viewer.Size-class.html#QUARTER
+petsc4py.PETSc.Viewer.Size.FULL_SIZE	petsc4py.PETSc.Viewer.Size-class.html#FULL_SIZE
 petsc4py.PETSc.Viewer.Type	petsc4py.PETSc.Viewer.Type-class.html
-petsc4py.PETSc.Viewer.Type.HDF5	petsc4py.PETSc.Viewer.Type-class.html#HDF5
-petsc4py.PETSc.Viewer.Type.NETCDF	petsc4py.PETSc.Viewer.Type-class.html#NETCDF
-petsc4py.PETSc.Viewer.Type.SAWS	petsc4py.PETSc.Viewer.Type-class.html#SAWS
-petsc4py.PETSc.Viewer.Type.MATLAB	petsc4py.PETSc.Viewer.Type-class.html#MATLAB
+petsc4py.PETSc.Viewer.Type.BINARY	petsc4py.PETSc.Viewer.Type-class.html#BINARY
 petsc4py.PETSc.Viewer.Type.DRAW	petsc4py.PETSc.Viewer.Type-class.html#DRAW
-petsc4py.PETSc.Viewer.Type.STRING	petsc4py.PETSc.Viewer.Type-class.html#STRING
+petsc4py.PETSc.Viewer.Type.SOCKET	petsc4py.PETSc.Viewer.Type-class.html#SOCKET
+petsc4py.PETSc.Viewer.Type.HDF5	petsc4py.PETSc.Viewer.Type-class.html#HDF5
 petsc4py.PETSc.Viewer.Type.VTK	petsc4py.PETSc.Viewer.Type-class.html#VTK
 petsc4py.PETSc.Viewer.Type.MATHEMATICA	petsc4py.PETSc.Viewer.Type-class.html#MATHEMATICA
-petsc4py.PETSc.Viewer.Type.VU	petsc4py.PETSc.Viewer.Type-class.html#VU
-petsc4py.PETSc.Viewer.Type.BINARY	petsc4py.PETSc.Viewer.Type-class.html#BINARY
-petsc4py.PETSc.Viewer.Type.SOCKET	petsc4py.PETSc.Viewer.Type-class.html#SOCKET
 petsc4py.PETSc.Viewer.Type.__qualname__	petsc4py.PETSc.Viewer.Type-class.html#__qualname__
+petsc4py.PETSc.Viewer.Type.VU	petsc4py.PETSc.Viewer.Type-class.html#VU
+petsc4py.PETSc.Viewer.Type.MATLAB	petsc4py.PETSc.Viewer.Type-class.html#MATLAB
 petsc4py.PETSc.Viewer.Type.ASCII	petsc4py.PETSc.Viewer.Type-class.html#ASCII
+petsc4py.PETSc.Viewer.Type.SAWS	petsc4py.PETSc.Viewer.Type-class.html#SAWS
+petsc4py.PETSc.Viewer.Type.STRING	petsc4py.PETSc.Viewer.Type-class.html#STRING
 petsc4py.PETSc.ViewerHDF5	petsc4py.PETSc.ViewerHDF5-class.html
+petsc4py.PETSc.Viewer.printfASCII	petsc4py.PETSc.Viewer-class.html#printfASCII
 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.ViewerHDF5.getGroup	petsc4py.PETSc.ViewerHDF5-class.html#getGroup
 petsc4py.PETSc.Object.getTabLevel	petsc4py.PETSc.Object-class.html#getTabLevel
-petsc4py.PETSc.Object.compose	petsc4py.PETSc.Object-class.html#compose
+petsc4py.PETSc.Viewer.printfASCIISynchronized	petsc4py.PETSc.Viewer-class.html#printfASCIISynchronized
 petsc4py.PETSc.Viewer.createVTK	petsc4py.PETSc.Viewer-class.html#createVTK
+petsc4py.PETSc.Viewer.popASCIITab	petsc4py.PETSc.Viewer-class.html#popASCIITab
 petsc4py.PETSc.Object.fortran	petsc4py.PETSc.Object-class.html#fortran
 petsc4py.PETSc.Viewer.__call__	petsc4py.PETSc.Viewer-class.html#__call__
 petsc4py.PETSc.Object.handle	petsc4py.PETSc.Object-class.html#handle
@@ -3276,28 +3447,33 @@ petsc4py.PETSc.Object.name	petsc4py.PETSc.Object-class.html#name
 petsc4py.PETSc.Viewer.createBinary	petsc4py.PETSc.Viewer-class.html#createBinary
 petsc4py.PETSc.Object.getClassId	petsc4py.PETSc.Object-class.html#getClassId
 petsc4py.PETSc.Object.prefix	petsc4py.PETSc.Object-class.html#prefix
+petsc4py.PETSc.Viewer.pushASCIITab	petsc4py.PETSc.Viewer-class.html#pushASCIITab
 petsc4py.PETSc.Viewer.popFormat	petsc4py.PETSc.Viewer-class.html#popFormat
 petsc4py.PETSc.Object.__copy__	petsc4py.PETSc.Object-class.html#__copy__
 petsc4py.PETSc.Viewer.ASCII	petsc4py.PETSc.Viewer-class.html#ASCII
 petsc4py.PETSc.Viewer.view	petsc4py.PETSc.Viewer-class.html#view
 petsc4py.PETSc.Object.decRef	petsc4py.PETSc.Object-class.html#decRef
-petsc4py.PETSc.Object.stateIncrease	petsc4py.PETSc.Object-class.html#stateIncrease
+petsc4py.PETSc.ViewerHDF5.popGroup	petsc4py.PETSc.ViewerHDF5-class.html#popGroup
 petsc4py.PETSc.Viewer.flush	petsc4py.PETSc.Viewer-class.html#flush
 petsc4py.PETSc.Viewer.Type	petsc4py.PETSc.Viewer.Type-class.html
 petsc4py.PETSc.Object.getName	petsc4py.PETSc.Object-class.html#getName
 petsc4py.PETSc.Object.incrementTabLevel	petsc4py.PETSc.Object-class.html#incrementTabLevel
 petsc4py.PETSc.Object.__ne__	petsc4py.PETSc.Object-class.html#__ne__
+petsc4py.PETSc.Viewer.popASCIISynchronized	petsc4py.PETSc.Viewer-class.html#popASCIISynchronized
 petsc4py.PETSc.Viewer.createHDF5	petsc4py.PETSc.Viewer-class.html#createHDF5
 petsc4py.PETSc.Object.getOptionsPrefix	petsc4py.PETSc.Object-class.html#getOptionsPrefix
-petsc4py.PETSc.Object.getDict	petsc4py.PETSc.Object-class.html#getDict
+petsc4py.PETSc.Object.compose	petsc4py.PETSc.Object-class.html#compose
 petsc4py.PETSc.Object.comm	petsc4py.PETSc.Object-class.html#comm
+petsc4py.PETSc.Object.viewFromOptions	petsc4py.PETSc.Object-class.html#viewFromOptions
 petsc4py.PETSc.Viewer.getFormat	petsc4py.PETSc.Viewer-class.html#getFormat
-petsc4py.PETSc.Viewer.createNetCDF	petsc4py.PETSc.Viewer-class.html#createNetCDF
 petsc4py.PETSc.ViewerHDF5.incrementTimestep	petsc4py.PETSc.ViewerHDF5-class.html#incrementTimestep
+petsc4py.PETSc.Object.getDict	petsc4py.PETSc.Object-class.html#getDict
 petsc4py.PETSc.Viewer.STDERR	petsc4py.PETSc.Viewer-class.html#STDERR
+petsc4py.PETSc.Viewer.setASCIITab	petsc4py.PETSc.Viewer-class.html#setASCIITab
 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.getASCIITab	petsc4py.PETSc.Viewer-class.html#getASCIITab
 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
@@ -3311,6 +3487,7 @@ petsc4py.PETSc.Viewer.setDrawInfo	petsc4py.PETSc.Viewer-class.html#setDrawInfo
 petsc4py.PETSc.Object.__eq__	petsc4py.PETSc.Object-class.html#__eq__
 petsc4py.PETSc.Viewer.getFileName	petsc4py.PETSc.Viewer-class.html#getFileName
 petsc4py.PETSc.Viewer.createASCII	petsc4py.PETSc.Viewer-class.html#createASCII
+petsc4py.PETSc.Viewer.pushASCIISynchronized	petsc4py.PETSc.Viewer-class.html#pushASCIISynchronized
 petsc4py.PETSc.Object.__le__	petsc4py.PETSc.Object-class.html#__le__
 petsc4py.PETSc.ViewerHDF5.getTimestep	petsc4py.PETSc.ViewerHDF5-class.html#getTimestep
 petsc4py.PETSc.Object.getClassName	petsc4py.PETSc.Object-class.html#getClassName
@@ -3318,41 +3495,44 @@ petsc4py.PETSc.Object.__ge__	petsc4py.PETSc.Object-class.html#__ge__
 petsc4py.PETSc.Viewer.Size	petsc4py.PETSc.Viewer.Size-class.html
 petsc4py.PETSc.Viewer.getFileMode	petsc4py.PETSc.Viewer-class.html#getFileMode
 petsc4py.PETSc.Viewer.STDOUT	petsc4py.PETSc.Viewer-class.html#STDOUT
+petsc4py.PETSc.Viewer.addASCIITab	petsc4py.PETSc.Viewer-class.html#addASCIITab
 petsc4py.PETSc.ViewerHDF5.__new__	petsc4py.PETSc.ViewerHDF5-class.html#__new__
 petsc4py.PETSc.Viewer.Format	petsc4py.PETSc.Viewer.Format-class.html
 petsc4py.PETSc.Viewer.setFileMode	petsc4py.PETSc.Viewer-class.html#setFileMode
 petsc4py.PETSc.Viewer.destroy	petsc4py.PETSc.Viewer-class.html#destroy
-petsc4py.PETSc.ViewerHDF5.popGroup	petsc4py.PETSc.ViewerHDF5-class.html#popGroup
+petsc4py.PETSc.Object.stateIncrease	petsc4py.PETSc.Object-class.html#stateIncrease
 petsc4py.PETSc.ViewerHDF5.pushGroup	petsc4py.PETSc.ViewerHDF5-class.html#pushGroup
+petsc4py.PETSc.Viewer.useASCIITabs	petsc4py.PETSc.Viewer-class.html#useASCIITabs
 petsc4py.PETSc.Object.setAttr	petsc4py.PETSc.Object-class.html#setAttr
 petsc4py.PETSc.Viewer.Mode	petsc4py.PETSc.Viewer.Mode-class.html
 petsc4py.PETSc.Viewer.createMPIIO	petsc4py.PETSc.Viewer-class.html#createMPIIO
+petsc4py.PETSc.Viewer.subtractASCIITab	petsc4py.PETSc.Viewer-class.html#subtractASCIITab
 petsc4py.PETSc.ViewerHDF5.setTimestep	petsc4py.PETSc.ViewerHDF5-class.html#setTimestep
 petsc4py.PETSc.Object.getComm	petsc4py.PETSc.Object-class.html#getComm
 petsc4py.PETSc.Viewer.setFileName	petsc4py.PETSc.Viewer-class.html#setFileName
 petsc4py.PETSc.Object.setTabLevel	petsc4py.PETSc.Object-class.html#setTabLevel
 petsc4py.PETSc.Object.klass	petsc4py.PETSc.Object-class.html#klass
 petsc4py.PETSc._DMComposite_access	petsc4py.PETSc._DMComposite_access-class.html
+petsc4py.PETSc._DMComposite_access.__enter__	petsc4py.PETSc._DMComposite_access-class.html#__enter__
 petsc4py.PETSc._DMComposite_access.__exit__	petsc4py.PETSc._DMComposite_access-class.html#__exit__
 petsc4py.PETSc._DMComposite_access.__new__	petsc4py.PETSc._DMComposite_access-class.html#__new__
-petsc4py.PETSc._DMComposite_access.__enter__	petsc4py.PETSc._DMComposite_access-class.html#__enter__
 petsc4py.PETSc._DMDA_Vec_array	petsc4py.PETSc._DMDA_Vec_array-class.html
-petsc4py.PETSc._DMDA_Vec_array.shape	petsc4py.PETSc._DMDA_Vec_array-class.html#shape
-petsc4py.PETSc._DMDA_Vec_array.array	petsc4py.PETSc._DMDA_Vec_array-class.html#array
-petsc4py.PETSc._DMDA_Vec_array.__new__	petsc4py.PETSc._DMDA_Vec_array-class.html#__new__
-petsc4py.PETSc._DMDA_Vec_array.__enter__	petsc4py.PETSc._DMDA_Vec_array-class.html#__enter__
+petsc4py.PETSc._DMDA_Vec_array.__delitem__	petsc4py.PETSc._DMDA_Vec_array-class.html#__delitem__
 petsc4py.PETSc._DMDA_Vec_array.__exit__	petsc4py.PETSc._DMDA_Vec_array-class.html#__exit__
+petsc4py.PETSc._DMDA_Vec_array.__new__	petsc4py.PETSc._DMDA_Vec_array-class.html#__new__
 petsc4py.PETSc._DMDA_Vec_array.__getitem__	petsc4py.PETSc._DMDA_Vec_array-class.html#__getitem__
-petsc4py.PETSc._DMDA_Vec_array.strides	petsc4py.PETSc._DMDA_Vec_array-class.html#strides
-petsc4py.PETSc._DMDA_Vec_array.__setitem__	petsc4py.PETSc._DMDA_Vec_array-class.html#__setitem__
-petsc4py.PETSc._DMDA_Vec_array.__delitem__	petsc4py.PETSc._DMDA_Vec_array-class.html#__delitem__
 petsc4py.PETSc._DMDA_Vec_array.sizes	petsc4py.PETSc._DMDA_Vec_array-class.html#sizes
 petsc4py.PETSc._DMDA_Vec_array.starts	petsc4py.PETSc._DMDA_Vec_array-class.html#starts
+petsc4py.PETSc._DMDA_Vec_array.__enter__	petsc4py.PETSc._DMDA_Vec_array-class.html#__enter__
+petsc4py.PETSc._DMDA_Vec_array.__setitem__	petsc4py.PETSc._DMDA_Vec_array-class.html#__setitem__
+petsc4py.PETSc._DMDA_Vec_array.strides	petsc4py.PETSc._DMDA_Vec_array-class.html#strides
+petsc4py.PETSc._DMDA_Vec_array.shape	petsc4py.PETSc._DMDA_Vec_array-class.html#shape
+petsc4py.PETSc._DMDA_Vec_array.array	petsc4py.PETSc._DMDA_Vec_array-class.html#array
 petsc4py.PETSc._IS_buffer	petsc4py.PETSc._IS_buffer-class.html
+petsc4py.PETSc._IS_buffer.__array_interface__	petsc4py.PETSc._IS_buffer-class.html#__array_interface__
+petsc4py.PETSc._IS_buffer.__enter__	petsc4py.PETSc._IS_buffer-class.html#__enter__
 petsc4py.PETSc._IS_buffer.__exit__	petsc4py.PETSc._IS_buffer-class.html#__exit__
 petsc4py.PETSc._IS_buffer.__new__	petsc4py.PETSc._IS_buffer-class.html#__new__
-petsc4py.PETSc._IS_buffer.__enter__	petsc4py.PETSc._IS_buffer-class.html#__enter__
-petsc4py.PETSc._IS_buffer.__array_interface__	petsc4py.PETSc._IS_buffer-class.html#__array_interface__
 petsc4py.PETSc._Mat_Stencil	petsc4py.PETSc._Mat_Stencil-class.html
 petsc4py.PETSc._Mat_Stencil.index	petsc4py.PETSc._Mat_Stencil-class.html#index
 petsc4py.PETSc._Mat_Stencil.c	petsc4py.PETSc._Mat_Stencil-class.html#c
@@ -3362,12 +3542,12 @@ petsc4py.PETSc._Mat_Stencil.k	petsc4py.PETSc._Mat_Stencil-class.html#k
 petsc4py.PETSc._Mat_Stencil.j	petsc4py.PETSc._Mat_Stencil-class.html#j
 petsc4py.PETSc._Mat_Stencil.field	petsc4py.PETSc._Mat_Stencil-class.html#field
 petsc4py.PETSc._Vec_LocalForm	petsc4py.PETSc._Vec_LocalForm-class.html
+petsc4py.PETSc._Vec_LocalForm.__enter__	petsc4py.PETSc._Vec_LocalForm-class.html#__enter__
 petsc4py.PETSc._Vec_LocalForm.__exit__	petsc4py.PETSc._Vec_LocalForm-class.html#__exit__
 petsc4py.PETSc._Vec_LocalForm.__new__	petsc4py.PETSc._Vec_LocalForm-class.html#__new__
-petsc4py.PETSc._Vec_LocalForm.__enter__	petsc4py.PETSc._Vec_LocalForm-class.html#__enter__
 petsc4py.PETSc._Vec_LocalForm.__init__	petsc4py.PETSc._Vec_LocalForm-class.html#__init__
 petsc4py.PETSc._Vec_buffer	petsc4py.PETSc._Vec_buffer-class.html
+petsc4py.PETSc._Vec_buffer.__array_interface__	petsc4py.PETSc._Vec_buffer-class.html#__array_interface__
+petsc4py.PETSc._Vec_buffer.__enter__	petsc4py.PETSc._Vec_buffer-class.html#__enter__
 petsc4py.PETSc._Vec_buffer.__exit__	petsc4py.PETSc._Vec_buffer-class.html#__exit__
 petsc4py.PETSc._Vec_buffer.__new__	petsc4py.PETSc._Vec_buffer-class.html#__new__
-petsc4py.PETSc._Vec_buffer.__enter__	petsc4py.PETSc._Vec_buffer-class.html#__enter__
-petsc4py.PETSc._Vec_buffer.__array_interface__	petsc4py.PETSc._Vec_buffer-class.html#__array_interface__
diff --git a/docs/apiref/class-tree.html b/docs/apiref/class-tree.html
index 9713900..9c26d59 100644
--- a/docs/apiref/class-tree.html
+++ b/docs/apiref/class-tree.html
@@ -60,15 +60,6 @@
 </b></center><br />
 <h1 class="epydoc">Class Hierarchy</h1>
 <ul class="nomargin-top">
-    <li> <strong class="uidlink"><a href="petsc4py.PETSc.TAO.Reason-class.html">petsc4py.PETSc.TAO.Reason</a></strong>:
-      <em class="summary">TAO Solver Termination Reasons</em>
-    </li>
-    <li> <strong class="uidlink"><a href="petsc4py.PETSc.TAO.Type-class.html">petsc4py.PETSc.TAO.Type</a></strong>:
-      <em class="summary">TAO Solver Types</em>
-    </li>
-    <li> <strong class="uidlink">object</strong>:
-      <em class="summary">The most base type</em>
-    <ul>
     <li> <strong class="uidlink"><a href="petsc4py.PETSc.PC.ASMType-class.html">petsc4py.PETSc.PC.ASMType</a></strong>
     </li>
     <li> <strong class="uidlink"><a href="petsc4py.PETSc.Mat.AssemblyType-class.html">petsc4py.PETSc.Mat.AssemblyType</a></strong>
@@ -102,12 +93,12 @@ 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>
@@ -136,9 +127,11 @@ 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.MGCycleType-class.html">petsc4py.PETSc.PC.MGCycleType</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> <strong class="uidlink"><a href="petsc4py.PETSc.LGMap.MapMode-class.html">petsc4py.PETSc.LGMap.MapMode</a></strong>
     </li>
     <li> <strong class="uidlink"><a href="petsc4py.PETSc.Viewer.Mode-class.html">petsc4py.PETSc.Viewer.Mode</a></strong>
     </li>
@@ -203,10 +196,10 @@ interpreter exiting.</em>
     </li>
     </ul>
     </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.Mat.Option-class.html">petsc4py.PETSc.Mat.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>
@@ -216,6 +209,11 @@ interpreter exiting.</em>
     </li>
     <li> <strong class="uidlink"><a href="petsc4py.PETSc.TS.ProblemType-class.html">petsc4py.PETSc.TS.ProblemType</a></strong>
     </li>
+    <li> <strong class="uidlink"><a href="petsc4py.PETSc.TS.RKType-class.html">petsc4py.PETSc.TS.RKType</a></strong>
+    </li>
+    <li> <strong class="uidlink"><a href="petsc4py.PETSc.TAO.Reason-class.html">petsc4py.PETSc.TAO.Reason</a></strong>:
+      <em class="summary">TAO Solver Termination Reasons</em>
+    </li>
     <li> <strong class="uidlink"><a href="petsc4py.PETSc.Mat.SORType-class.html">petsc4py.PETSc.Mat.SORType</a></strong>
     </li>
     <li> <strong class="uidlink"><a href="petsc4py.PETSc.ScatterMode-class.html">petsc4py.PETSc.ScatterMode</a></strong>
@@ -234,30 +232,35 @@ 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.TS.Type-class.html">petsc4py.PETSc.TS.Type</a></strong>
+    <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.IS.Type-class.html">petsc4py.PETSc.IS.Type</a></strong>
     </li>
-    <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.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> <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.TAO.Type-class.html">petsc4py.PETSc.TAO.Type</a></strong>:
+      <em class="summary">TAO Solver Types</em>
+    </li>
+    <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.Mat.Type-class.html">petsc4py.PETSc.Mat.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.PC.Type-class.html">petsc4py.PETSc.PC.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.Vec.Type-class.html">petsc4py.PETSc.Vec.Type</a></strong>
     </li>
-    <li> <strong class="uidlink"><a href="petsc4py.PETSc.SF.Type-class.html">petsc4py.PETSc.SF.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.KSP.Type-class.html">petsc4py.PETSc.KSP.Type</a></strong>
+    <li> <strong class="uidlink"><a href="petsc4py.PETSc.LGMap.Type-class.html">petsc4py.PETSc.LGMap.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.Viewer.Type-class.html">petsc4py.PETSc.Viewer.Type</a></strong>
     </li>
     <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._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>
@@ -272,8 +275,6 @@ Context manager for <a href="petsc4py.PETSc.Vec-class.html" class="link">Vec</a>
     </li>
     <li> <strong class="uidlink"><a href="petsc4py.PETSc._Vec_buffer-class.html" onclick="show_private();">petsc4py.PETSc._Vec_buffer</a></strong>
     </li>
-    </ul>
-    </li>
 </ul>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
@@ -306,7 +307,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 May  1 16:53:46 2016
+    Generated by Epydoc 3.0.1
     </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
deleted file mode 100644
index f4f102d..0000000
Binary files a/docs/apiref/class_hierarchy_for__dmcomposi.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for__dmda_vec_.png b/docs/apiref/class_hierarchy_for__dmda_vec_.png
deleted file mode 100644
index e472977..0000000
Binary files a/docs/apiref/class_hierarchy_for__dmda_vec_.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for__is_buffer.png b/docs/apiref/class_hierarchy_for__is_buffer.png
deleted file mode 100644
index 555383d..0000000
Binary files a/docs/apiref/class_hierarchy_for__is_buffer.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for__mat_stenc.png b/docs/apiref/class_hierarchy_for__mat_stenc.png
deleted file mode 100644
index 4ca8468..0000000
Binary files a/docs/apiref/class_hierarchy_for__mat_stenc.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for__vec_buffe.png b/docs/apiref/class_hierarchy_for__vec_buffe.png
deleted file mode 100644
index cb5c929..0000000
Binary files a/docs/apiref/class_hierarchy_for__vec_buffe.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for__vec_local.png b/docs/apiref/class_hierarchy_for__vec_local.png
deleted file mode 100644
index 961b56b..0000000
Binary files a/docs/apiref/class_hierarchy_for__vec_local.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_ao.png b/docs/apiref/class_hierarchy_for_ao.png
deleted file mode 100644
index 289ef8a..0000000
Binary files a/docs/apiref/class_hierarchy_for_ao.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_asmtype.png b/docs/apiref/class_hierarchy_for_asmtype.png
deleted file mode 100644
index 2e8b1cc..0000000
Binary files a/docs/apiref/class_hierarchy_for_asmtype.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_assemblyty.png b/docs/apiref/class_hierarchy_for_assemblyty.png
deleted file mode 100644
index bdb4778..0000000
Binary files a/docs/apiref/class_hierarchy_for_assemblyty.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_boundaryty.png b/docs/apiref/class_hierarchy_for_boundaryty.png
deleted file mode 100644
index 89333a8..0000000
Binary files a/docs/apiref/class_hierarchy_for_boundaryty.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_comm.png b/docs/apiref/class_hierarchy_for_comm.png
deleted file mode 100644
index 49b324f..0000000
Binary files a/docs/apiref/class_hierarchy_for_comm.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_compositet.png b/docs/apiref/class_hierarchy_for_compositet.png
deleted file mode 100644
index 32b495f..0000000
Binary files a/docs/apiref/class_hierarchy_for_compositet.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_convergedr.png b/docs/apiref/class_hierarchy_for_convergedr.png
deleted file mode 100644
index 9022f9d..0000000
Binary files a/docs/apiref/class_hierarchy_for_convergedr.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_convergedr_2.png b/docs/apiref/class_hierarchy_for_convergedr_2.png
deleted file mode 100644
index 9022f9d..0000000
Binary files a/docs/apiref/class_hierarchy_for_convergedr_2.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_convergedr_3.png b/docs/apiref/class_hierarchy_for_convergedr_3.png
deleted file mode 100644
index 9022f9d..0000000
Binary files a/docs/apiref/class_hierarchy_for_convergedr_3.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_dm.png b/docs/apiref/class_hierarchy_for_dm.png
deleted file mode 100644
index 0763c86..0000000
Binary files a/docs/apiref/class_hierarchy_for_dm.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_dmcomposit.png b/docs/apiref/class_hierarchy_for_dmcomposit.png
deleted file mode 100644
index aea8679..0000000
Binary files a/docs/apiref/class_hierarchy_for_dmcomposit.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_dmda.png b/docs/apiref/class_hierarchy_for_dmda.png
deleted file mode 100644
index f1a1aaa..0000000
Binary files a/docs/apiref/class_hierarchy_for_dmda.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_dmplex.png b/docs/apiref/class_hierarchy_for_dmplex.png
deleted file mode 100644
index 954a61e..0000000
Binary files a/docs/apiref/class_hierarchy_for_dmplex.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_dmshell.png b/docs/apiref/class_hierarchy_for_dmshell.png
deleted file mode 100644
index f1c7613..0000000
Binary files a/docs/apiref/class_hierarchy_for_dmshell.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_elementtyp.png b/docs/apiref/class_hierarchy_for_elementtyp.png
deleted file mode 100644
index ee2788f..0000000
Binary files a/docs/apiref/class_hierarchy_for_elementtyp.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_equationty.png b/docs/apiref/class_hierarchy_for_equationty.png
deleted file mode 100644
index 9cfe768..0000000
Binary files a/docs/apiref/class_hierarchy_for_equationty.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_error.png b/docs/apiref/class_hierarchy_for_error.png
deleted file mode 100644
index d2590ef..0000000
Binary files a/docs/apiref/class_hierarchy_for_error.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_exactfinal.png b/docs/apiref/class_hierarchy_for_exactfinal.png
deleted file mode 100644
index d713d4b..0000000
Binary files a/docs/apiref/class_hierarchy_for_exactfinal.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_factorshif.png b/docs/apiref/class_hierarchy_for_factorshif.png
deleted file mode 100644
index 5442156..0000000
Binary files a/docs/apiref/class_hierarchy_for_factorshif.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_format.png b/docs/apiref/class_hierarchy_for_format.png
deleted file mode 100644
index eb7f3d9..0000000
Binary files a/docs/apiref/class_hierarchy_for_format.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_gamgtype.png b/docs/apiref/class_hierarchy_for_gamgtype.png
deleted file mode 100644
index 52fef1e..0000000
Binary files a/docs/apiref/class_hierarchy_for_gamgtype.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_gasmtype.png b/docs/apiref/class_hierarchy_for_gasmtype.png
deleted file mode 100644
index ace778a..0000000
Binary files a/docs/apiref/class_hierarchy_for_gasmtype.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_infotype.png b/docs/apiref/class_hierarchy_for_infotype.png
deleted file mode 100644
index f635c3a..0000000
Binary files a/docs/apiref/class_hierarchy_for_infotype.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_insertmode.png b/docs/apiref/class_hierarchy_for_insertmode.png
deleted file mode 100644
index 9253607..0000000
Binary files a/docs/apiref/class_hierarchy_for_insertmode.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_interpolat.png b/docs/apiref/class_hierarchy_for_interpolat.png
deleted file mode 100644
index 33343dd..0000000
Binary files a/docs/apiref/class_hierarchy_for_interpolat.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_is.png b/docs/apiref/class_hierarchy_for_is.png
deleted file mode 100644
index 1a18e2d..0000000
Binary files a/docs/apiref/class_hierarchy_for_is.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_ksp.png b/docs/apiref/class_hierarchy_for_ksp.png
deleted file mode 100644
index 7690057..0000000
Binary files a/docs/apiref/class_hierarchy_for_ksp.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_lgmap.png b/docs/apiref/class_hierarchy_for_lgmap.png
deleted file mode 100644
index 27efa3e..0000000
Binary files a/docs/apiref/class_hierarchy_for_lgmap.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_log.png b/docs/apiref/class_hierarchy_for_log.png
deleted file mode 100644
index 057e48a..0000000
Binary files a/docs/apiref/class_hierarchy_for_log.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_logclass.png b/docs/apiref/class_hierarchy_for_logclass.png
deleted file mode 100644
index 46057bd..0000000
Binary files a/docs/apiref/class_hierarchy_for_logclass.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_logevent.png b/docs/apiref/class_hierarchy_for_logevent.png
deleted file mode 100644
index fb3982d..0000000
Binary files a/docs/apiref/class_hierarchy_for_logevent.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_logstage.png b/docs/apiref/class_hierarchy_for_logstage.png
deleted file mode 100644
index df81513..0000000
Binary files a/docs/apiref/class_hierarchy_for_logstage.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_maptype.png b/docs/apiref/class_hierarchy_for_maptype.png
deleted file mode 100644
index 532abc4..0000000
Binary files a/docs/apiref/class_hierarchy_for_maptype.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_mat.png b/docs/apiref/class_hierarchy_for_mat.png
deleted file mode 100644
index de65e90..0000000
Binary files a/docs/apiref/class_hierarchy_for_mat.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_mgtype.png b/docs/apiref/class_hierarchy_for_mgtype.png
deleted file mode 100644
index 474aeb6..0000000
Binary files a/docs/apiref/class_hierarchy_for_mgtype.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_mode.png b/docs/apiref/class_hierarchy_for_mode.png
deleted file mode 100644
index 18672d4..0000000
Binary files a/docs/apiref/class_hierarchy_for_mode.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_normschedu.png b/docs/apiref/class_hierarchy_for_normschedu.png
deleted file mode 100644
index 932e9ea..0000000
Binary files a/docs/apiref/class_hierarchy_for_normschedu.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_normtype.png b/docs/apiref/class_hierarchy_for_normtype.png
deleted file mode 100644
index 7a3468e..0000000
Binary files a/docs/apiref/class_hierarchy_for_normtype.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_normtype_2.png b/docs/apiref/class_hierarchy_for_normtype_2.png
deleted file mode 100644
index 7a3468e..0000000
Binary files a/docs/apiref/class_hierarchy_for_normtype_2.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_nullspace.png b/docs/apiref/class_hierarchy_for_nullspace.png
deleted file mode 100644
index 57fc0c6..0000000
Binary files a/docs/apiref/class_hierarchy_for_nullspace.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_object.png b/docs/apiref/class_hierarchy_for_object.png
deleted file mode 100644
index fe6246a..0000000
Binary files a/docs/apiref/class_hierarchy_for_object.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_option.png b/docs/apiref/class_hierarchy_for_option.png
deleted file mode 100644
index 35e1c07..0000000
Binary files a/docs/apiref/class_hierarchy_for_option.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_option_2.png b/docs/apiref/class_hierarchy_for_option_2.png
deleted file mode 100644
index 35e1c07..0000000
Binary files a/docs/apiref/class_hierarchy_for_option_2.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_options.png b/docs/apiref/class_hierarchy_for_options.png
deleted file mode 100644
index 61a0b46..0000000
Binary files a/docs/apiref/class_hierarchy_for_options.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_orderingty.png b/docs/apiref/class_hierarchy_for_orderingty.png
deleted file mode 100644
index 1c4ae5e..0000000
Binary files a/docs/apiref/class_hierarchy_for_orderingty.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_partitione.png b/docs/apiref/class_hierarchy_for_partitione.png
deleted file mode 100644
index 525e78a..0000000
Binary files a/docs/apiref/class_hierarchy_for_partitione.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_partitione_2.png b/docs/apiref/class_hierarchy_for_partitione_2.png
deleted file mode 100644
index 2d6142c..0000000
Binary files a/docs/apiref/class_hierarchy_for_partitione_2.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_pc.png b/docs/apiref/class_hierarchy_for_pc.png
deleted file mode 100644
index 181a53e..0000000
Binary files a/docs/apiref/class_hierarchy_for_pc.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_problemtyp.png b/docs/apiref/class_hierarchy_for_problemtyp.png
deleted file mode 100644
index 2fdd610..0000000
Binary files a/docs/apiref/class_hierarchy_for_problemtyp.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_random.png b/docs/apiref/class_hierarchy_for_random.png
deleted file mode 100644
index 741857a..0000000
Binary files a/docs/apiref/class_hierarchy_for_random.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_scatter.png b/docs/apiref/class_hierarchy_for_scatter.png
deleted file mode 100644
index 54c7320..0000000
Binary files a/docs/apiref/class_hierarchy_for_scatter.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_scattermod.png b/docs/apiref/class_hierarchy_for_scattermod.png
deleted file mode 100644
index 965a1e9..0000000
Binary files a/docs/apiref/class_hierarchy_for_scattermod.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_schurfactt.png b/docs/apiref/class_hierarchy_for_schurfactt.png
deleted file mode 100644
index b52f9c2..0000000
Binary files a/docs/apiref/class_hierarchy_for_schurfactt.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_schurprety.png b/docs/apiref/class_hierarchy_for_schurprety.png
deleted file mode 100644
index a0cf3be..0000000
Binary files a/docs/apiref/class_hierarchy_for_schurprety.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_section.png b/docs/apiref/class_hierarchy_for_section.png
deleted file mode 100644
index d2ebbe9..0000000
Binary files a/docs/apiref/class_hierarchy_for_section.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_sf.png b/docs/apiref/class_hierarchy_for_sf.png
deleted file mode 100644
index 5b26897..0000000
Binary files a/docs/apiref/class_hierarchy_for_sf.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_side.png b/docs/apiref/class_hierarchy_for_side.png
deleted file mode 100644
index 5625602..0000000
Binary files a/docs/apiref/class_hierarchy_for_side.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_size.png b/docs/apiref/class_hierarchy_for_size.png
deleted file mode 100644
index d7fee28..0000000
Binary files a/docs/apiref/class_hierarchy_for_size.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_snes.png b/docs/apiref/class_hierarchy_for_snes.png
deleted file mode 100644
index dd3c5d4..0000000
Binary files a/docs/apiref/class_hierarchy_for_snes.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_sortype.png b/docs/apiref/class_hierarchy_for_sortype.png
deleted file mode 100644
index ae6f9d1..0000000
Binary files a/docs/apiref/class_hierarchy_for_sortype.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_stenciltyp.png b/docs/apiref/class_hierarchy_for_stenciltyp.png
deleted file mode 100644
index f9b1ad2..0000000
Binary files a/docs/apiref/class_hierarchy_for_stenciltyp.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_structure.png b/docs/apiref/class_hierarchy_for_structure.png
deleted file mode 100644
index 040e730..0000000
Binary files a/docs/apiref/class_hierarchy_for_structure.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_sys.png b/docs/apiref/class_hierarchy_for_sys.png
deleted file mode 100644
index 835eac8..0000000
Binary files a/docs/apiref/class_hierarchy_for_sys.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_tao.png b/docs/apiref/class_hierarchy_for_tao.png
deleted file mode 100644
index efd32b9..0000000
Binary files a/docs/apiref/class_hierarchy_for_tao.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_ts.png b/docs/apiref/class_hierarchy_for_ts.png
deleted file mode 100644
index 059e2de..0000000
Binary files a/docs/apiref/class_hierarchy_for_ts.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_type.png b/docs/apiref/class_hierarchy_for_type.png
deleted file mode 100644
index 3ee2d33..0000000
Binary files a/docs/apiref/class_hierarchy_for_type.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_type_10.png b/docs/apiref/class_hierarchy_for_type_10.png
deleted file mode 100644
index 3ee2d33..0000000
Binary files a/docs/apiref/class_hierarchy_for_type_10.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_type_11.png b/docs/apiref/class_hierarchy_for_type_11.png
deleted file mode 100644
index 3ee2d33..0000000
Binary files a/docs/apiref/class_hierarchy_for_type_11.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_type_12.png b/docs/apiref/class_hierarchy_for_type_12.png
deleted file mode 100644
index 3ee2d33..0000000
Binary files a/docs/apiref/class_hierarchy_for_type_12.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_type_2.png b/docs/apiref/class_hierarchy_for_type_2.png
deleted file mode 100644
index 3ee2d33..0000000
Binary files a/docs/apiref/class_hierarchy_for_type_2.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_type_3.png b/docs/apiref/class_hierarchy_for_type_3.png
deleted file mode 100644
index 3ee2d33..0000000
Binary files a/docs/apiref/class_hierarchy_for_type_3.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_type_4.png b/docs/apiref/class_hierarchy_for_type_4.png
deleted file mode 100644
index 3ee2d33..0000000
Binary files a/docs/apiref/class_hierarchy_for_type_4.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_type_5.png b/docs/apiref/class_hierarchy_for_type_5.png
deleted file mode 100644
index 3ee2d33..0000000
Binary files a/docs/apiref/class_hierarchy_for_type_5.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_type_6.png b/docs/apiref/class_hierarchy_for_type_6.png
deleted file mode 100644
index 3ee2d33..0000000
Binary files a/docs/apiref/class_hierarchy_for_type_6.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_type_7.png b/docs/apiref/class_hierarchy_for_type_7.png
deleted file mode 100644
index 3ee2d33..0000000
Binary files a/docs/apiref/class_hierarchy_for_type_7.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_type_8.png b/docs/apiref/class_hierarchy_for_type_8.png
deleted file mode 100644
index 3ee2d33..0000000
Binary files a/docs/apiref/class_hierarchy_for_type_8.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_type_9.png b/docs/apiref/class_hierarchy_for_type_9.png
deleted file mode 100644
index 3ee2d33..0000000
Binary files a/docs/apiref/class_hierarchy_for_type_9.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_vec.png b/docs/apiref/class_hierarchy_for_vec.png
deleted file mode 100644
index b97b63f..0000000
Binary files a/docs/apiref/class_hierarchy_for_vec.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_viewer.png b/docs/apiref/class_hierarchy_for_viewer.png
deleted file mode 100644
index 0bbdfe1..0000000
Binary files a/docs/apiref/class_hierarchy_for_viewer.png and /dev/null differ
diff --git a/docs/apiref/class_hierarchy_for_viewerhdf5.png b/docs/apiref/class_hierarchy_for_viewerhdf5.png
deleted file mode 100644
index a4f9c54..0000000
Binary files a/docs/apiref/class_hierarchy_for_viewerhdf5.png and /dev/null differ
diff --git a/docs/apiref/epydoc.css b/docs/apiref/epydoc.css
index 86d4170..e834248 100644
--- a/docs/apiref/epydoc.css
+++ b/docs/apiref/epydoc.css
@@ -39,8 +39,8 @@ a.link                      { font-family: monospace; }
  *     variables and to show/hide frames; and a page title (using
  *     <h1>).  The page title may be followed by a link to the
  *     corresponding source code (using 'span.codelink').
- *   - The footer consists of a navigation bar, a timestamp, and a
- *     pointer to epydoc's homepage.
+ *   - The footer consists of a navigation bar, a timestamp
+ *     (if --include-timestamp was passed), and a pointer to epydoc's homepage.
  */ 
 h1.epydoc                   { margin: 0; font-size: +140%; font-weight: bold; }
 h2.epydoc                   { font-size: +130%; font-weight: bold; }
@@ -162,8 +162,8 @@ table.summary a.summary-sig-name:visited
 
 /* Subclass list
  */
-ul.subclass-list { display: inline; }
-ul.subclass-list li { display: inline; }
+ul.subclass-list { display: inline; margin: 0; padding: 0; }
+ul.subclass-list li { display: inline; margin: 0; padding: 0; }
 
 /* To render variables, classes etc. like functions */
 table.summary .summary-name { color: #006080; font-weight: bold;
diff --git a/docs/apiref/help.html b/docs/apiref/help.html
index 08da1d2..aed2b5e 100644
--- a/docs/apiref/help.html
+++ b/docs/apiref/help.html
@@ -223,8 +223,8 @@ are private objects; but "<code>re.sub</code>",
 if a module defines the "<code>__all__</code>" variable, then its
 contents are used to decide which objects are private. </p>
 
-<p> A timestamp below the bottom navigation bar indicates when each
-page was last updated. </p>
+<p> If --include-timestamp was passed, a timestamp below the bottom navigation bar indicates
+when each page was last updated. </p>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -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 May  1 16:53:46 2016
+    Generated by Epydoc 3.0.1
     </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 324df65..45d0ebb 100644
--- a/docs/apiref/identifier-index.html
+++ b/docs/apiref/identifier-index.html
@@ -95,159 +95,183 @@
 <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#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_INFO">ASCII_INFO</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.Format-class.html#ASCII_FACTOR_INFO">ASCII_FACTOR_INFO</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.PC.SchurPreType-class.html#A11">A11</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.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_DETAIL">ASCII_INFO_DETAIL</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_IMPL">ASCII_IMPL</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.Vec-class.html#abs">abs()</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.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_LATEX">ASCII_LATEX</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#AIJVIENNACL">AIJVIENNACL</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_INDEX">ASCII_INDEX</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.LogClass-class.html#activate">activate()</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.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_MATHEMATICA">ASCII_MATHEMATICA</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Type-class.html#AINVCUSP">AINVCUSP</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.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>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LogEvent-class.html#activate">activate()</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.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_MATLAB">ASCII_MATLAB</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.IS-class.html#allGather">allGather()</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.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>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.LogStage-class.html#activate">activate()</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.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_MATRIXMARKET">ASCII_MATRIXMARKET</a><br />
+<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_LATEX">ASCII_LATEX</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.LogClass-class.html#active">active</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.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_PCICE">ASCII_PCICE</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_MATHEMATICA">ASCII_MATHEMATICA</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.LogEvent-class.html#active">active</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#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_PYTHON">ASCII_PYTHON</a><br />
+<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_MATLAB">ASCII_MATLAB</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.LogStage-class.html#active">active</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#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_SYMMODU">ASCII_SYMMODU</a><br />
+<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_MATRIXMARKET">ASCII_MATRIXMARKET</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.LogEvent-class.html#active_all">active_all</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#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_VTK">ASCII_VTK</a><br />
+<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_PCICE">ASCII_PCICE</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.DM-class.html#adaptLabel">adaptLabel()</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">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_PYTHON">ASCII_PYTHON</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.DM-class.html#adaptMetric">adaptMetric()</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#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_SYMMODU">ASCII_SYMMODU</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.InsertMode-class.html#ADD">ADD</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.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_CELL">ASCII_VTK_CELL</a><br />
+<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_VTK">ASCII_VTK</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.InsertMode-class.html#ADD_ALL">ADD_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.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_COORDS">ASCII_VTK_COORDS</a><br />
+<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_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>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.InsertMode-class.html#ADD_ALL_VALUES">ADD_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.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_XML">ASCII_XML</a><br />
+<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_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>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.InsertMode-class.html#ADD_BC">ADD_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.PC-class.html#apply">apply()</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.Type-class.html#ASFLS">ASFLS</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-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_XML">ASCII_XML</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.InsertMode-class.html#ADD_BC_VALUES">ADD_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.SORType-class.html#APPLY_LOWER">APPLY_LOWER</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.TAO.Type-class.html#ASILS">ASILS</a><br />
+<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.TAO.Type-class.html#ASFLS">ASFLS</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.InsertMode-class.html#ADD_VALUES">ADD_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.SORType-class.html#APPLY_UPPER">APPLY_UPPER</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.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.TAO.Type-class.html#ASILS">ASILS</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.Viewer-class.html#addASCIITab">addASCIITab()</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.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.PC.Type-class.html#ASM">ASM</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.PC-class.html#addCompositePC">addCompositePC()</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#applyBlock">applyBlock()</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.PC-class.html#apply">apply()</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.ASMType-class.html">ASMType</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.Section-class.html#addConstraintDof">addConstraintDof()</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.LGMap-class.html#applyBlockInverse">applyBlockInverse()</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.SORType-class.html#APPLY_LOWER">APPLY_LOWER</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.Type-class.html#ASPIN">ASPIN</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.DMComposite-class.html#addDM">addDM()</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.LGMap-class.html#applyInverse">applyInverse()</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.SORType-class.html#APPLY_UPPER">APPLY_UPPER</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-class.html#assemble">assemble()</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#addDof">addDof()</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.LGMap-class.html#applyIS">applyIS()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap-class.html#applyBlock">applyBlock()</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#assemble">assemble()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
@@ -255,127 +279,127 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Section-class.html#addFieldConstraintDof">addFieldConstraintDof()</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#applySymmetricLeft">applySymmetricLeft()</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#applyBlockInverse">applyBlockInverse()</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#assembled">assembled</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#addFieldDof">addFieldDof()</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#applySymmetricRight">applySymmetricRight()</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#applyInverse">applyInverse()</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#assemblyBegin">assemblyBegin()</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#addFlops">addFlops()</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.PC-class.html#applyTranspose">applyTranspose()</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#applyIS">applyIS()</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#assemblyBegin">assemblyBegin()</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.CompositeType-class.html#ADDITIVE">ADDITIVE</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.TS.Type-class.html#ARKIMEX">ARKIMEX</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.PC-class.html#applySymmetricLeft">applySymmetricLeft()</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#assemblyEnd">assemblyEnd()</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.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.PC-class.html#applySymmetricRight">applySymmetricRight()</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#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.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.TS-class.html#adjointComputeRHSJacobian">adjointComputeRHSJacobian()</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#applyTranspose">applyTranspose()</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.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.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.TS-class.html#adjointSetRHSJacobian">adjointSetRHSJacobian()</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#ARKIMEX">ARKIMEX</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-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#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>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#adjointSetSteps">adjointSetSteps()</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#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.SNES-class.html#atol">atol</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.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 />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#adjointSetUp">adjointSetUp()</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#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.TS-class.html#atol">atol</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#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>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#adjointSolve">adjointSolve()</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._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.Viewer.Mode-class.html#AU">AU</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.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>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#adjointStep">adjointStep()</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#array_r">array_r</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#axpby">axpby()</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#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>
+<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_w">array_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.Mat-class.html#axpy">axpy()</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#AIJVIENNACL">AIJVIENNACL</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_DENSE">ASCII_DENSE</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.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.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>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#axpy">axpy()</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#AINVCUSP">AINVCUSP</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.Viewer.Format-class.html#ASCII_FACTOR_INFO">ASCII_FACTOR_INFO</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.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.Viewer-class.html#ASCII">ASCII()</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#aypx">aypx()</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#allGather">allGather()</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.Format-class.html#ASCII_IMPL">ASCII_IMPL</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.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>
 <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 />
+<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.Format-class.html#ASCII_DENSE">ASCII_DENSE</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>
@@ -387,29 +411,37 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.SORType-class.html#BACKWARD_SWEEP">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.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>
+</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.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.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.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.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.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.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.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.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 />
+<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.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>
@@ -417,16 +449,16 @@
 <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.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.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.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.LGMap.Type-class.html#BASIC">BASIC</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.LGMap.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.DM.BoundaryType-class.html">BoundaryType</a><br />
@@ -453,15 +485,15 @@
 <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.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#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.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>
@@ -469,7 +501,7 @@
 <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_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>
@@ -477,15 +509,15 @@
 <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_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.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.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>
@@ -493,8 +525,7 @@
 <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#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.Log-class.html#begin">begin()</a><br />
@@ -503,13 +534,6 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.LGMap-class.html">LGMap</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>
 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="C">C</a></h2></td>
@@ -518,191 +542,215 @@
 <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.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 />
+<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.Mat-class.html#createAIJ">createAIJ()</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.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 />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#constructGhostCells">constructGhostCells()</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#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.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.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>
+<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.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.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_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.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.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.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.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_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.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.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#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.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.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>
+<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.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.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.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>
+<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#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.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.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>
+<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.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.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.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 />
+<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.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.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.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.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.KSP.Type-class.html#CGGLTR">CGGLTR</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.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.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.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#createCoarsePointIS">createCoarsePointIS()</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#CGNE">CGNE</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#CGNASH">CGNASH</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_GRTOL">CONVERGED_GRTOL</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.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#createCohesiveSubmesh">createCohesiveSubmesh()</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#CGS">CGS</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#CGNE">CGNE</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_GTTOL">CONVERGED_GTTOL</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.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#createCubeBoundary">createCubeBoundary()</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.PartitionerType-class.html#CHACO">CHACO</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.KSP.ConvergedReason-class.html#CONVERGED_HAPPY_BREAKDOWN">CONVERGED_HAPPY_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.KSP.Type-class.html#CGS">CGS</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.DM-class.html#createDefaultSF">createDefaultSF()</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#CHEBYSHEV">CHEBYSHEV</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#CGSTCG">CGSTCG</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.ConvergedReason-class.html#CONVERGED_ITERATING">CONVERGED_ITERATING</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.TAO.Reason-class.html#CONVERGED_GRTOL">CONVERGED_GRTOL</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.Mat-class.html#createDense">createDense()</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.Type-class.html#CHOLESKY">CHOLESKY</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.ConvergedReason-class.html#CONVERGED_ITERATING">CONVERGED_ITERATING</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.PartitionerType-class.html#CHACO">CHACO</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.TAO.Reason-class.html#CONVERGED_GTTOL">CONVERGED_GTTOL</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.Viewer-class.html#createDraw">createDraw()</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#chop">chop()</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#CONVERGED_ITERATING">CONVERGED_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.KSP.Type-class.html#CHEBYSHEV">CHEBYSHEV</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.ConvergedReason-class.html#CONVERGED_HAPPY_BREAKDOWN">CONVERGED_HAPPY_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.DMPlex-class.html#createExodus">createExodus()</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.Type-class.html#CHOLESKY">CHOLESKY</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.ConvergedReason-class.html#CONVERGED_ITERATING">CONVERGED_ITERATING</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#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.Mat-class.html#chop">chop()</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.ConvergedReason-class.html#CONVERGED_ITERATING">CONVERGED_ITERATING</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#createFieldDecomposition">createFieldDecomposition()</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.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 />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Reason-class.html#CONVERGED_ITERATING">CONVERGED_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.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.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 />
+<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#createFromFile">createFromFile()</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.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.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.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.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.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.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.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.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#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.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.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.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#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 />
+<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.DM-class.html#createGlobalVec">createGlobalVec()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DM-class.html">DM</a>)</span></td>
@@ -710,301 +758,309 @@
 <tr>
 <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.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>
 <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.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.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.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.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.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.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.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.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.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.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.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#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.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.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.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.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.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.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.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.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.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.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.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 />
+<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#createLocalVector">createLocalVector()</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.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.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.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-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.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.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-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#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.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-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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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>
+<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-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.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>
+<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.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.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.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.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.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.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>
+<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.TAO-class.html#computeConstraints">computeConstraints()</a><br />
+<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.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>
+<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#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.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.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>
+<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.KSP-class.html#computeEigenvalues">computeEigenvalues()</a><br />
+<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.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>
+<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.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.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.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>
+<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.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.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.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>
+<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.TAO-class.html#computeGradient">computeGradient()</a><br />
+<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.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>
+<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#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.TS-class.html#computeI2Function">computeI2Function()</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.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>
+<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.TS-class.html#computeIFunction">computeIFunction()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#computeI2Jacobian">computeI2Jacobian()</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>
+<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.TS-class.html#computeIJacobian">computeIJacobian()</a><br />
+<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.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>
+<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.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#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.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 />
+<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#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.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.LGMap-class.html#createSF">createSF()</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.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.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.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.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.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.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.SNES-class.html#computeNGS">computeNGS()</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#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.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.Mat-class.html#createSubMatrices">createSubMatrices()</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#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.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.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.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#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#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.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.Mat-class.html#createSubMatrix">createSubMatrix()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#createSubMatrixVirtual">createSubMatrixVirtual()</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#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.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.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#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#computeRHSJacobian">computeRHSJacobian()</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.Section-class.html#create">create()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Section-class.html">Section</a>)</span></td>
@@ -1012,7 +1068,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.TS-class.html#computeRHSJacobianConstant">computeRHSJacobianConstant()</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.TAO-class.html#create">create()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TAO-class.html">TAO</a>)</span></td>
@@ -1020,51 +1076,44 @@
 <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#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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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>
 </table>
 </td></tr>
 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="D">D</a></h2></td>
@@ -1307,8 +1356,8 @@
 <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#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>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap.MapMode-class.html#DROP">DROP</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.LGMap.MapMode-class.html">MapMode</a>)</span></td>
 </tr>
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Options-class.html#destroy">destroy()</a><br />
@@ -1434,11 +1483,19 @@
 <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>
+</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.KSP.Type-class.html#FETIDP">FETIDP</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.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 />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#factorILU">factorILU()</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>
@@ -1446,7 +1503,7 @@
 <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#factorILU">factorILU()</a><br />
+<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.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>
@@ -1454,7 +1511,7 @@
 <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 />
+<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.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>
@@ -1462,7 +1519,7 @@
 <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 />
+<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._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>
@@ -1470,7 +1527,7 @@
 <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 />
+<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.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>
@@ -1478,7 +1535,7 @@
 <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 />
+<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">FINAL</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.AssemblyType-class.html">AssemblyType</a>)</span></td>
@@ -1486,7 +1543,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.Mat-class.html#factorSymbolicCholesky">factorSymbolicCholesky()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#factorSymbolicICC">factorSymbolicICC()</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>
@@ -1494,7 +1551,7 @@
 <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 />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#factorSymbolicILU">factorSymbolicILU()</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.NormSchedule-class.html#FINAL_ONLY">FINAL_ONLY</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES.NormSchedule-class.html">NormSchedule</a>)</span></td>
@@ -1502,7 +1559,7 @@
 <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.Mat-class.html#factorSymbolicILU">factorSymbolicILU()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#factorSymbolicLU">factorSymbolicLU()</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#FLUSH">FLUSH</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.AssemblyType-class.html">AssemblyType</a>)</span></td>
@@ -1510,23 +1567,23 @@
 <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.Mat-class.html#factorSymbolicLU">factorSymbolicLU()</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.Type-class.html#FAS">FAS</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#flush">flush()</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.Viewer.Size-class.html#FULL">FULL</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.SNES.Type-class.html#FAS">FAS</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#FBCGS">FBCGS</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.AssemblyType-class.html#FLUSH_ASSEMBLY">FLUSH_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.Viewer.Size-class.html#FULL_SIZE">FULL_SIZE</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.KSP.Type-class.html#FBCGS">FBCGS</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.Type-class.html#FBCGSR">FBCGSR</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.Format-class.html">Format</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Viewer-class.html">Viewer</a>)</span></td>
@@ -1534,19 +1591,12 @@
 <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.Type-class.html#FBCGSR">FBCGSR</a><br />
+<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.Comm-class.html#fortran">fortran</a><br />
 <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>
@@ -1555,321 +1605,369 @@
 <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.DMDA-class.html#getGhostRanges">getGhostRanges()</a><br />
+<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.PC-class.html#getPythonContext">getPythonContext()</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 />
+<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#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.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>
+<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.TS-class.html#getPreStep">getPreStep()</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.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#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 />
+<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.TS-class.html#getPrevTime">getPrevTime()</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#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.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>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#getGlobalVec">getGlobalVec()</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#getProblemType">getProblemType()</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.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.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>
+<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#getProcSizes">getProcSizes()</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.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.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>
+<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.KSP-class.html#getPythonContext">getPythonContext()</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#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.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>
+<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.Mat-class.html#getPythonContext">getPythonContext()</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.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.PC-class.html#getHYPREType">getHYPREType()</a><br />
+<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.PC-class.html#getPythonContext">getPythonContext()</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.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 />
+<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#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#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.TS-class.html#getIJacobian">getIJacobian()</a><br />
+<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.TS-class.html#getPythonContext">getPythonContext()</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_config">get_config()</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.TS-class.html#getI2Function">getI2Function()</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.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-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.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>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getI2Jacobian">getI2Jacobian()</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#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.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.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>
+<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.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.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.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>
+<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.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.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.IS-class.html#getInfo">getInfo()</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.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.DM-class.html#getRefineLevel">getRefineLevel()</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#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.LGMap-class.html#getInfo">getInfo()</a><br />
+<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.TS-class.html#getRHSJacobian">getRHSJacobian()</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.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.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.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 />
+<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.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.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.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.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.PETSc.DMPlex-class.html#getAdjacency">getAdjacency()</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.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#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.DMPlex-class.html#getAdjacencyUseAnchors">getAdjacencyUseAnchors()</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#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.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.DMPlex-class.html#getAdjacencyUseClosure">getAdjacencyUseClosure()</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.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>
+<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.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.DMPlex-class.html#getAdjacencyUseCone">getAdjacencyUseCone()</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#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>
+<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.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.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.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.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.KSP-class.html#getInitialGuessKnoll">getInitialGuessKnoll()</a><br />
+<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.Mat-class.html#getRowSum">getRowSum()</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#getRKType">getRKType()</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#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.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 />
+<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.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.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.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 />
+<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.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.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.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 />
+<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.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.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.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#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>
+<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.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.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.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>
+<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.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.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.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>
+<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.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.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.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>
+<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.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.Viewer-class.html#getASCIITab">getASCIITab()</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.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>
+<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.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.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.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 />
+<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>
 </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.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.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>
+<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.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.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.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>
+<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.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.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.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 />
+<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.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.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.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.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.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.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.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.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>
+<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.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#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.DM-class.html#getLabelIdIS">getLabelIdIS()</a><br />
+<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.TS-class.html#getSNESIterations">getSNESIterations()</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#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.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.DM-class.html#getLabelName">getLabelName()</a><br />
+<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.KSP-class.html#getSolution">getSolution()</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#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.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.DM-class.html#getLabelOutput">getLabelOutput()</a><br />
+<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.SNES-class.html#getSolution">getSolution()</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#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.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.DM-class.html#getLabelSize">getLabelSize()</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#getSolution">getSolution()</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#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.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.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>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getLGMap">getLGMap()</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#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.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.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>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#getLGMap">getLGMap()</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#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.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.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 />
+<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>
@@ -1877,15 +1975,15 @@
 <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#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>
+<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.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.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 />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#getSolution2">getSolution2()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
 </tr>
 <tr>
@@ -1893,107 +1991,123 @@
 <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#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>
+<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.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.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>
+<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.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.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>
+<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.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.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#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.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.DM-class.html#getCoarsenLevel">getCoarsenLevel()</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.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>
+<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.Mat-class.html#getColumnVector">getColumnVector()</a><br />
+<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.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>
+<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#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.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.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>
+<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.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.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.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.DM-class.html#getStratumIS">getStratumIS()</a><br />
+<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>
+</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.DM-class.html#getLocalVec">getLocalVec()</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#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.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.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>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getLRCMats">getLRCMats()</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.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.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>
+<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.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.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.SNES-class.html#getMaxKSPFailures">getMaxKSPFailures()</a><br />
+<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.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.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.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#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.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.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.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>
+<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.DMPlex-class.html#getCone">getCone()</a><br />
+<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.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.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.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.DMPlex-class.html#getConeOrientation">getConeOrientation()</a><br />
+<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.TS-class.html#getMaxSteps">getMaxSteps()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
@@ -2001,15 +2115,15 @@
 <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.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#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 />
+<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.DMPlex-class.html#getMeet">getMeet()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
@@ -2017,7 +2131,7 @@
 <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 />
+<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.PC-class.html#getMGCoarseSolve">getMGCoarseSolve()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.PC-class.html">PC</a>)</span></td>
@@ -2025,111 +2139,111 @@
 <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.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 />
 <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#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.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 />
 <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#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.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 />
 <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.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.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 />
 <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 />
 <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.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 />
 <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 />
 <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.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 />
 <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>
 </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.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 />
 <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>
 </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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.Mat-class.html#getTransposeNullSpace">getTransposeNullSpace()</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.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.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.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 />
+<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.Mat-class.html#getMumpsCntl">getMumpsCntl()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
@@ -2137,7 +2251,7 @@
 <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 />
+<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.Mat-class.html#getMumpsIcntl">getMumpsIcntl()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
@@ -2145,55 +2259,55 @@
 <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.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.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.TS-class.html#getCostGradients">getCostGradients()</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#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.TS-class.html#getCostIntegral">getCostIntegral()</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#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>
 </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.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.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.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#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.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.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.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 />
+<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.LogStage-class.html#getName">getName()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.LogStage-class.html">LogStage</a>)</span></td>
@@ -2201,7 +2315,7 @@
 <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 />
+<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.Object-class.html#getName">getName()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Object-class.html">Object</a>)</span></td>
@@ -2209,377 +2323,377 @@
 <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#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#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.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#getNASMNumber">getNASMNumber()</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>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#getDenseLocalMatrix">getDenseLocalMatrix()</a><br />
+<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.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#getNASMSNES">getNASMSNES()</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#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.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.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.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.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 />
+<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.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.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.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.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.SNES-class.html#getNGS">getNGS()</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#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#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#getNPC">getNPC()</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.SNES-class.html#getUpdate">getUpdate()</a><br />
+<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.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.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 />
+<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.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.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.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 />
+<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 />
 <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#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#getUseMF">getUseMF()</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#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.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.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.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.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.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 />
+<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.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>
 </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.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.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.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.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.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.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.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.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.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.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#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.Section-class.html#getDof">getDof()</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.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.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#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.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#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.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#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.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.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.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.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>
+<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.DMPlex-class.html#getVecClosure">getVecClosure()</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.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>
+<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.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#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>
+<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.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.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 />
+<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.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.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>
+<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.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.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 />
+<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.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.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.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.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.SNES-class.html#getFASCycleSNES">getFASCycleSNES()</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#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.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.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.SNES-class.html#getFASInjection">getFASInjection()</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#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.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.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#getFASInterpolation">getFASInterpolation()</a><br />
+<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.Mat-class.html#getOwnershipRange">getOwnershipRange()</a><br />
+<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.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 />
+<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.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.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.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#getFASRestriction">getFASRestriction()</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.Mat-class.html#getOwnershipRangeColumn">getOwnershipRangeColumn()</a><br />
+<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.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#getFASSmoother">getFASSmoother()</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.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.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.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#getFASSmootherDown">getFASSmootherDown()</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.Mat-class.html#getOwnershipRanges">getOwnershipRanges()</a><br />
+<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.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#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.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#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.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.Section-class.html#getFieldComponents">getFieldComponents()</a><br />
+<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.Mat-class.html#getOwnershipRangesColumn">getOwnershipRangesColumn()</a><br />
+<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.TS.Type-class.html#GL">GL</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS.Type-class.html#GLLE">GLLE</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.Section-class.html#getFieldConstraintDof">getFieldConstraintDof()</a><br />
+<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.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.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.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.Section-class.html#getFieldConstraintIndices">getFieldConstraintIndices()</a><br />
+<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.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.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.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.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.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.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.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.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.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#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#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.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.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.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.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.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.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.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.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.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.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.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.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#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.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.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.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.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.DMPlex-class.html#getPointGlobal">getPointGlobal()</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#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.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.DMPlex-class.html#getPointGlobalField">getPointGlobalField()</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#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.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.DMPlex-class.html#getPointLocal">getPointLocal()</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#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.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"><a href="petsc4py.PETSc.SNES-class.html#getFunctionNorm">getFunctionNorm()</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#getPointLocalField">getPointLocalField()</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
 <td width="33%" class="link-index"> </td>
 </tr>
 <tr>
-<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"><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.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"> </td>
 </tr>
 </table>
@@ -2590,30 +2704,38 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Size-class.html#HALF">HALF</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.Options-class.html#hasName">hasName()</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#history">history</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.Size-class.html#HALF_SIZE">HALF_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.SNES-class.html#hasNPC">hasNPC()</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#history">history</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.Size-class.html#HALF_SIZE">HALF_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.Object-class.html#handle">handle</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.Viewer.Type-class.html#HDF5">HDF5</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.Type-class.html#HYPRE">HYPRE</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.Object-class.html#handle">handle</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.NullSpace-class.html#hasConstant">hasConstant()</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.Format-class.html#HDF5_VIZ">HDF5_VIZ</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.Mat.Type-class.html#HYPRESSTRUCT">HYPRESSTRUCT</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.NullSpace-class.html#hasConstant">hasConstant()</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.LGMap.Type-class.html#HASH">HASH</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.LGMap.Type-class.html">Type</a>)</span></td>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Option-class.html#HERMITIAN">HERMITIAN</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.Type-class.html#HYPRESTRUCT">HYPRESTRUCT</a><br />
@@ -2626,13 +2748,6 @@
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat-class.html">Mat</a>)</span></td>
 <td width="33%" class="link-index"> </td>
 </tr>
-<tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Options-class.html#hasName">hasName()</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#history">history</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>
 </table>
 </td></tr>
 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="I">I</a></h2></td>
@@ -2643,39 +2758,39 @@
 <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#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>
+<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>
 </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.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>
+<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.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.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>
+<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.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.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>
+<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.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-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 />
+<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>
@@ -2683,55 +2798,55 @@
 <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_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>
+<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.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.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>
+<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>
 </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">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>
+<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.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">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>
+<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>
 </tr>
 <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_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>
+<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>
 </tr>
 <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">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>
+<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>
 </tr>
 <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_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 />
+<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>
 </tr>
 <tr>
@@ -2739,7 +2854,7 @@
 <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.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 />
+<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>
 </tr>
 <tr>
@@ -2747,7 +2862,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.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 />
+<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>
@@ -2755,43 +2870,51 @@
 <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.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>
+<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>
 </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.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>
+<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#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.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>
+<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.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.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>
+<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-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.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.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.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.DMPlex-class.html#interpolate">interpolate()</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.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 />
+<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.TS-class.html#interpolate">interpolate()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
@@ -2799,57 +2922,50 @@
 <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.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.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_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.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#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.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.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#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.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.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"><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>
 </table>
@@ -3016,9 +3132,17 @@
 <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.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>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap.MapMode-class.html">MapMode</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.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 />
+<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>
 </tr>
 <tr>
@@ -3026,350 +3150,328 @@
 <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#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 />
+<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>
 </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.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 />
 <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 />
+<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.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.LGMap.MapMode-class.html#MASK">MASK</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.LGMap.MapMode-class.html">MapMode</a>)</span></td>
 <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 />
+<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#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.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 />
 <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 />
+<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>
 </tr>
 <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.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.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>
+<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>
 </tr>
 <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.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#MPIDENSE">MPIDENSE</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#MPICUSP">MPICUSP</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.KSP-class.html#mat_op">mat_op</a><br />
+<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.Mat.Type-class.html#MPIMAIJ">MPIMAIJ</a><br />
+<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_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.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.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 />
+<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.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 />
+<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.PC.MGCycleType-class.html">MGCycleType</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 />
+<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 />
+<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.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.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.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.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.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.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.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#matMult">matMult()</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.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#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.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#matMultNumeric">matMultNumeric()</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.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.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#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#matMultSymbolic">matMultSymbolic()</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.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.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#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#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.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 />
+<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.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.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.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 />
+<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#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.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.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 />
+<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#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.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.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>
+<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#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.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.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>
+<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.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.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#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>
+<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.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.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#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 />
+<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#multTranspose">multTranspose()</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#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 />
+<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"> </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>
 </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>
-</tr>
-</table>
-</td></tr>
-<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="N">N</a></h2></td>
-<td valign="top">
-<table class="link-index" width="100%" border="1">
+</table>
+</td></tr>
+<tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="N">N</a></h2></td>
+<td valign="top">
+<table class="link-index" width="100%" border="1">
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.NormType-class.html#N1">N1</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-module.html#NINFINITY">NINFINITY</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#NORM_FROBENIUS">NORM_FROBENIUS</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Type-class.html#NM">NM</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.NormType-class.html#NORM_INFINITY">NORM_INFINITY</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.NormType-class.html#N12">N12</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#NLS">NLS</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.NormType-class.html#NORM_INFINITY">NORM_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.PC.Type-class.html#NN">NN</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.NormSchedule-class.html#NORM_INITIAL_FINAL_ONLY">NORM_INITIAL_FINAL_ONLY</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.NormType-class.html#N2">N2</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#NM">NM</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.NormSchedule-class.html#NORM_INITIAL_FINAL_ONLY">NORM_INITIAL_FINAL_ONLY</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP.NormType-class.html#NO">NO</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.SNES.NormSchedule-class.html#NORM_INITIAL_ONLY">NORM_INITIAL_ONLY</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.LogClass-class.html#name">name</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.PC.Type-class.html#NN">NN</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.NormSchedule-class.html#NORM_INITIAL_ONLY">NORM_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.Mat.Option-class.html#NO_OFF_PROC_ENTRIES">NO_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.NormType-class.html#NORM_MAX">NORM_MAX</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.LogEvent-class.html#name">name</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.NormType-class.html#NO">NO</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Option-class.html#NO_OFF_PROC_ZERO_ROWS">NO_OFF_PROC_ZERO_ROWS</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.KSP.NormType-class.html#NORM_NATURAL">NORM_NATURAL</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.NormType-class.html#NORM_MAX">NORM_MAX</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.LogStage-class.html#name">name</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#NO_OFF_PROC_ENTRIES">NO_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.KSP.NormType-class.html#NORM_NATURAL">NORM_NATURAL</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer.Format-class.html#NOFORMAT">NOFORMAT</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.KSP.NormType-class.html#NORM_NONE">NORM_NONE</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.Object-class.html#name">name</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#NO_OFF_PROC_ZERO_ROWS">NO_OFF_PROC_ZERO_ROWS</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.KSP.NormType-class.html#NORM_NONE">NORM_NONE</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.KSP.Type-class.html#NASH">NASH</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.Format-class.html#NOFORMAT">NOFORMAT</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.DM.BoundaryType-class.html#NONE">NONE</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.SNES.NormSchedule-class.html#NORM_NONE">NORM_NONE</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.SNES.Type-class.html#NASM">NASM</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.DM.BoundaryType-class.html#NONE">NONE</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.KSP.NormType-class.html#NONE">NONE</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.KSP.NormType-class.html#NORM_PRECONDITIONED">NORM_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.Viewer.Format-class.html#NATIVE">NATIVE</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.KSP.NormType-class.html#NONE">NONE</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#NONE">NONE</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-class.html#norm_type">norm_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.KSP.NormType-class.html#NATURAL">NATURAL</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#NONE">NONE</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.ASMType-class.html#NONE">NONE</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.KSP.NormType-class.html#NORM_UNPRECONDITIONED">NORM_UNPRECONDITIONED</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.Mat.OrderingType-class.html#NATURAL">NATURAL</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.PC.ASMType-class.html#NONE">NONE</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.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.Mat.Type-class.html#NORMAL">NORMAL</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.DMDA-class.html#naturalToGlobal">naturalToGlobal()</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.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.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.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.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#normalize">normalize()</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.OrderingType-class.html#ND">ND</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.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.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.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>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat.Type-class.html#NEST">NEST</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#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.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.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-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.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.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.SNES-class.html#norm">norm</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.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.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.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.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 />
+<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.Vec-class.html#norm">norm()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Vec-class.html">Vec</a>)</span></td>
@@ -3377,7 +3479,7 @@
 <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 />
+<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">NORM_1</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.NormType-class.html">NormType</a>)</span></td>
@@ -3385,7 +3487,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.Option-class.html#NEW_NONZERO_LOCATION_ERR">NEW_NONZERO_LOCATION_ERR</a><br />
+<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_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>
@@ -3393,15 +3495,15 @@
 <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.SNES.Type-class.html#NEWTONLS">NEWTONLS</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.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#NTL">NTL</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#NEWTONLS">NEWTONLS</a><br />
+<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.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>
@@ -3409,7 +3511,7 @@
 <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 />
+<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.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>
@@ -3417,7 +3519,7 @@
 <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 />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES.Type-class.html#NGS">NGS</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>
@@ -3425,12 +3527,19 @@
 <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 />
-<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-module.html#NINFINITY">NINFINITY</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.NormSchedule-class.html#NORM_FINAL_ONLY">NORM_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"> </td>
 </tr>
+<tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TAO.Type-class.html#NLS">NLS</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.NormType-class.html#NORM_FROBENIUS">NORM_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"> </td>
+</tr>
 </table>
 </td></tr>
 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="O">O</a></h2></td>
@@ -3484,167 +3593,190 @@
 <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-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>
+<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.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#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.KSP.Type-class.html#PIPECG">PIPECG</a><br />
+<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.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"><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.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#PIPECGRR">PIPECGRR</a><br />
+<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>
-<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 />
+<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.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.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.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.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>
+<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.Viewer-class.html#printfASCII">printfASCII()</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.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.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>
+<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.Viewer-class.html#printfASCIISynchronized">printfASCIISynchronized()</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.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.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>
+<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.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.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#placeArray">placeArray()</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.TS-class.html#problem_type">problem_type</a><br />
+<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.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.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.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.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.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#pointwiseDivide">pointwiseDivide()</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.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.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.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#pointwiseMax">pointwiseMax()</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.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.Mat-class.html#PtAP">PtAP()</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.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.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#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.LogStage-class.html#push">push()</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.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.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.Viewer-class.html#popASCIISynchronized">popASCIISynchronized()</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.Viewer-class.html#pushASCIISynchronized">pushASCIISynchronized()</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.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.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 />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#popASCIITab">popASCIITab()</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.Viewer-class.html#pushASCIITab">pushASCIITab()</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#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.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.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.Sys-class.html#pushErrorHandler">pushErrorHandler()</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.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.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>
+<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.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-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.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>
+<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.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.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.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>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Sys-class.html#popSignalHandler">popSignalHandler()</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-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>
+<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.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.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>
+<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.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"><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-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>
+<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#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>
+<td width="33%" class="link-index"> </td>
+</tr>
+<tr>
+<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>
 <td width="33%" class="link-index"> </td>
 </tr>
 </table>
@@ -3684,144 +3816,175 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.Side-class.html#R">R</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.DM.Type-class.html#REDUNDANT">REDUNDANT</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#restoreSubVector">restoreSubVector()</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.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.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.Viewer.Mode-class.html#R">R</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.PC.Type-class.html#REDUNDANT">REDUNDANT</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.ASMType-class.html#RESTRICT">RESTRICT</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.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.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.Random.Type-class.html#RAND">RAND</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.Object-class.html#refcount">refcount</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.GASMType-class.html#RESTRICT">RESTRICT</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.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.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.Random.Type-class.html#RAND48">RAND48</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#refine">refine()</a><br />
+<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.Mat-class.html#retrieveValues">retrieveValues()</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.RKType-class.html#RK1FE">RK1FE</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.RKType-class.html">RKType</a>)</span></td>
 </tr>
 <tr>
 <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>
+<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.TS.RKType-class.html#RK2A">RK2A</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.RKType-class.html">RKType</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>
+<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.RKType-class.html#RK3">RK3</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.RKType-class.html">RKType</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.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.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.RKType-class.html#RK3BS">RK3BS</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.RKType-class.html">RKType</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.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>
+<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.RKType-class.html#RK4">RK4</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.RKType-class.html">RKType</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.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.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.TS.RKType-class.html#RK5BS">RK5BS</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.RKType-class.html">RKType</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-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.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.TS.RKType-class.html#RK5DP">RK5DP</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.RKType-class.html">RKType</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.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.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.TS.RKType-class.html#RK5F">RK5F</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.RKType-class.html">RKType</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.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.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.TS.RKType-class.html">RKType</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.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.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.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#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.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.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.DM-class.html#restoreGlobalVec">restoreGlobalVec()</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#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.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.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.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.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.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.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.DM-class.html#restoreLocalVec">restoreLocalVec()</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.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.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 />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#restoreSubVector">restoreSubVector()</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#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"><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.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 />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.ASMType-class.html#RESTRICT">RESTRICT</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-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.DM.Type-class.html#REDUNDANT">REDUNDANT</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.PC.GASMType-class.html#RESTRICT">RESTRICT</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.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.PC.Type-class.html#REDUNDANT">REDUNDANT</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#retrieveValues">retrieveValues()</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>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#refcount">refcount</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#REVERSE">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"> </td>
+</tr>
+<tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#refine">refine()</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_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"> </td>
 </tr>
 </table>
@@ -3832,273 +3995,265 @@
 <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.PC-class.html#setGAMGLevels">setGAMGLevels()</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.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.LGMap-class.html#setType">setType()</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.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.PC-class.html#setGAMGSmooths">setGAMGSmooths()</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.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.Mat-class.html#setType">setType()</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.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.PC-class.html#setGAMGType">setGAMGType()</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.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#setType">setType()</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.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#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.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.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.Partitioner-class.html#setType">setType()</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.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#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.Vec-class.html#setType">setType()</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#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.Random-class.html#setType">setType()</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.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.DMShell-class.html#setGlobalToLocal">setGlobalToLocal()</a><br />
+<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.Viewer-class.html#setType">setType()</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.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.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.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>
+<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#setType">setType()</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#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.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>
+<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.TAO-class.html#setType">setType()</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.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.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.TAO-class.html#setGradient">setGradient()</a><br />
+<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.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.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-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.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>
+<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.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.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.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>
+<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.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.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#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.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.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.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.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.PC-class.html#setHYPREDiscreteCurl">setHYPREDiscreteCurl()</a><br />
+<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.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.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.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.PC-class.html#setHYPREDiscreteGradient">setHYPREDiscreteGradient()</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.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.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.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.PC-class.html#setHYPRESetAlphaPoissonMatrix">setHYPRESetAlphaPoissonMatrix()</a><br />
+<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.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.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.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 />
+<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.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.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.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 />
+<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.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.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>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.TS-class.html#setI2Function">setI2Function()</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#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.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.TS-class.html#setI2Jacobian">setI2Jacobian()</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.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.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.IS-class.html#setIdentity">setIdentity()</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#setUpdate">setUpdate()</a><br />
+<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.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.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#setIFunction">setIFunction()</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#setUpOnBlocks">setUpOnBlocks()</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#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.Scatter-class.html#scatterBegin">scatterBegin()</a><br />
+<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.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>
+<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.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.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.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>
+<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">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.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.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>
+<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.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.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.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 />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setUpdate">setUpdate()</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.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.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#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 />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.KSP-class.html#setUpOnBlocks">setUpOnBlocks()</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.PC.SchurFactType-class.html">SchurFactType</a><br />
+<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.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.SchurPreType-class.html">SchurPreType</a><br />
+<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>
-<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.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>
+<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.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>
+<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.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>
+<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.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>
+<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.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>
+<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.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 />
+<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>
@@ -4106,687 +4261,727 @@
 <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>
+<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.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>
+<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.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>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#setValuesBlocked">setValuesBlocked()</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#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.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>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#setValuesBlockedCSR">setValuesBlockedCSR()</a><br />
+<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.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.DM-class.html#setLabelOutput">setLabelOutput()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DM-class.html#setKSPComputeOperators">setKSPComputeOperators()</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>
+<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.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.DM-class.html#setLabelValue">setLabelValue()</a><br />
+<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#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#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 />
+<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>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#setValuesBlockedLocal">setValuesBlockedLocal()</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#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 />
+<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.Vec-class.html#setValues">setValues()</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#setValuesBlockedLocalCSR">setValuesBlockedLocalCSR()</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.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 />
+<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>
+<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#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#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>
+<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>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#setValuesBlocked">setValuesBlocked()</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#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#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 />
+<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#setValuesBlockedCSR">setValuesBlockedCSR()</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.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.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 />
+<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#setValuesIJV">setValuesIJV()</a><br />
+<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.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 />
+<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#setValuesLocal">setValuesLocal()</a><br />
+<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.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 />
+<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.Vec-class.html#setValuesLocal">setValuesLocal()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#setValuesBlockedLocal">setValuesBlockedLocal()</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.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 />
+<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#setValuesBlockedLocalCSR">setValuesBlockedLocalCSR()</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#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 />
+<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#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.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 />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMPlex-class.html#setMatClosure">setMatClosure()</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#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.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 />
+<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.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.DMPlex-class.html#setAdjacencyUseAnchors">setAdjacencyUseAnchors()</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#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#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.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 />
+<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#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.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 />
+<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#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.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>
+<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.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.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 />
+<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.DM-class.html#setVecType">setVecType()</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.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>
+<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.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.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>
+<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.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.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>
+<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.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.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 />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setMGCycleType">setMGCycleType()</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>
+<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.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#setMGRhs">setMGRhs()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC-class.html#setMGCycleTypeOnLevel">setMGCycleTypeOnLevel()</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>
+<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.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 />
+<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.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>
+<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.Viewer-class.html#setASCIITab">setASCIITab()</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#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.DMPlex-class.html#setVecClosure">setVecClosure()</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#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 />
+<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.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>
+<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.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 />
+<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.PartitionerType-class.html#SHELL">SHELL</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.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.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>
+<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.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.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>
+<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._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.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>
+<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.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.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>
+<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.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.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>
+<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.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.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>
+<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.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.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>
+<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.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.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.Mat-class.html#size">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#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.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.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 />
+<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.Mat-class.html#shift">shift()</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.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 />
+<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.Vec-class.html#shift">shift()</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.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.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>
+<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.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.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>
+<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.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#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>
+<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.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.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>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.SNES-class.html#setNGS">setNGS()</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#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.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>
+<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.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.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>
+<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.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.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>
+<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.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.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>
+<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.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.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 />
+<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.TS-class.html#snes">snes</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#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.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.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>
+<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.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.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 />
+<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.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.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.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._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.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.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.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.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.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.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.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.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.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.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#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>
+<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.TAO-class.html#setConstraints">setConstraints()</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.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>
+<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.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.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.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>
+<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.KSP-class.html#setConvergedReason">setConvergedReason()</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.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>
+<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.SNES-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.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>
+<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.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.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.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>
+<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.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.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.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>
+<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.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.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#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>
+<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.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.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.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#solveTranspose">solveTranspose()</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#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#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.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.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 />
+<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#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.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.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 />
+<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#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.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.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.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>
+<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.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.TS-class.html#setCostGradients">setCostGradients()</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#setPartitioner">setPartitioner()</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#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.TS-class.html#setCostIntegrand">setCostIntegrand()</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#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.Mat-class.html#SOR">SOR()</a><br />
+<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.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.DMShell-class.html#setCreateDomainDecomposition">setCreateDomainDecomposition()</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#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>
+<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.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.DMShell-class.html#setCreateDomainDecompositionScatters">setCreateDomainDecompositionScatters()</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.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>
+<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.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.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.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.SORType-class.html">SORType</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#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.DMShell-class.html#setCreateFieldDecomposition">setCreateFieldDecomposition()</a><br />
+<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.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>
+<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.DMShell-class.html#setCreateGlobalVector">setCreateGlobalVector()</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.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>
+<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.DMShell-class.html#setCreateInjection">setCreateInjection()</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.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>
+<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.DMShell-class.html#setCreateInterpolation">setCreateInterpolation()</a><br />
+<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.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>
+<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#setCreateLocalVector">setCreateLocalVector()</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.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>
+<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#setCreateMatrix">setCreateMatrix()</a><br />
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.DMShell-class.html#setCreateRestriction">setCreateRestriction()</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#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>
+<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#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.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>
+<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.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>
+<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.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>
+<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.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>
+<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.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>
+<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.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>
+<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#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>
+<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.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>
+<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.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>
+<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.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>
+<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.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>
+<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#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 />
+<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>
@@ -4794,27 +4989,35 @@
 <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>
+<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.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 />
+<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.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.DM-class.html#setRefineLevel">setRefineLevel()</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#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#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.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.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.TS-class.html#setDuration">setDuration()</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.DMPlex-class.html#setRefinementLimit">setRefinementLimit()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a>)</span></td>
@@ -4822,15 +5025,15 @@
 <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#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#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.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#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.SNES-class.html#setResetCounters">setResetCounters()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.SNES-class.html">SNES</a>)</span></td>
@@ -4838,23 +5041,23 @@
 <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#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.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.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#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.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.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.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.TS-class.html#setRHSFunction">setRHSFunction()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
@@ -4862,7 +5065,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.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.TS-class.html#setRHSJacobian">setRHSJacobian()</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.TS-class.html">TS</a>)</span></td>
@@ -4870,290 +5073,305 @@
 <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#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.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.TS-class.html#setRKType">setRKType()</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#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#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.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.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.TS-class.html#setSaveTrajectory">setSaveTrajectory()</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#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#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.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.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.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.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.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.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.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#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.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.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.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#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#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.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-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._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#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.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.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#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#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.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.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.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.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.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.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.DM-class.html#setSNESFunction">setSNESFunction()</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#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.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.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.DM-class.html#setSNESJacobian">setSNESJacobian()</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#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#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.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.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.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.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#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.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.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.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.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.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.TS-class.html#setSolution2">setSolution2()</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.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#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.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.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.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.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.PC-class.html#setFieldSplitFields">setFieldSplitFields()</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.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#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.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#setFieldSplitIS">setFieldSplitIS()</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.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-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.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#setFieldSplitSchurFactType">setFieldSplitSchurFactType()</a><br />
+<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#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.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.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#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.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.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.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.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.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#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.Viewer-class.html#subtractASCIITab">subtractASCIITab()</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.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.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.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.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.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.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.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.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.LGMap-class.html#setFromOptions">setFromOptions()</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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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#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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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 />
+<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.Mat-class.html#setTransposeNullSpace">setTransposeNullSpace()</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.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.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"><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.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.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.SNES-class.html#setFunctionNorm">setFunctionNorm()</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#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.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.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"><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.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.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"> </td>
+</tr>
+<tr>
+<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.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"> </td>
 </tr>
 </table>
@@ -5166,24 +5384,24 @@
 <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>
+<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.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>
+<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 />
 <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>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.LGMap.Type-class.html">Type</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#tDotBegin">tDotBegin()</a><br />
@@ -5226,31 +5444,31 @@
 <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.KSP.Type-class.html#TFQMR">TFQMR</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.NullSpace-class.html#test">test()</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#transposeMatMult">transposeMatMult()</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.Type-class.html">Type</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.Type-class.html#TFS">TFS</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#TFQMR">TFQMR</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#TRON">TRON</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.Type-class.html">Type</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.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.PC.Type-class.html#TFS">TFS</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.TS-class.html">TS</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.Type-class.html">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.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.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>
@@ -5258,20 +5476,27 @@
 <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.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.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.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 />
+<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.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"> </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.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>
 </td></tr>
 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="U">U</a></h2></td>
@@ -5282,47 +5507,62 @@
 <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>
+<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.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 />
+<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.DMPlex-class.html#uninterpolate">uninterpolate()</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.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>
+<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.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.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>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Viewer-class.html#useASCIITabs">useASCIITabs()</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.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.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.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>
 <td valign="top">
 <table class="link-index" width="100%" border="1">
 <tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.MGCycleType-class.html#V">V</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.MGCycleType-class.html">MGCycleType</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.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.Log-class.html#view">view()</a><br />
@@ -5359,15 +5599,15 @@
 <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>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.Object-class.html#viewFromOptions">viewFromOptions()</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.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#VINEWTONSSLS">VINEWTONSSLS</a><br />
+<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>
@@ -5375,31 +5615,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.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.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>
 <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.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.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.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.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>
+<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.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_VTS">VTK_VTS</a><br />
+<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>
@@ -5407,7 +5647,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_VTU">VTK_VTU</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>
@@ -5415,22 +5655,16 @@
 <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.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"><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>
 <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"> </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>
+<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>
 </table>
 </td></tr>
@@ -5438,6 +5672,14 @@
 <td valign="top">
 <table class="link-index" width="100%" border="1">
 <tr>
+<td width="33%" class="link-index"><a href="petsc4py.PETSc.PC.MGCycleType-class.html#W">W</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.MGCycleType-class.html">MGCycleType</a>)</span></td>
+<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.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>
+</tr>
+<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.Mat.OrderingType-class.html#WBM">WBM</a><br />
@@ -5445,13 +5687,6 @@
 <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.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>
 </td></tr>
 <tr valign="top"><td valign="top" width="1%"><h2 class="epydoc"><a name="Z">Z</a></h2></td>
@@ -5481,560 +5716,568 @@
 <tr>
 <td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__abs__">__abs__()</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#__le__">__le__()</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.KSP.Type-class.html#__qualname__">__qualname__</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#__add__">__add__()</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#__le__">__le__()</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.LGMap.MapType-class.html#__qualname__">__qualname__</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.LGMap.Type-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.LGMap.Type-class.html">Type</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__add__">__add__()</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#__add__">__add__()</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#__long__">__long__()</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.Mat.AssemblyType-class.html#__qualname__">__qualname__</a><br />
 <span class="index-where">(in <a href="petsc4py.PETSc.Mat.AssemblyType-class.html">AssemblyType</a>)</span></td>
 </tr>
 <tr>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc-module.html#__arch__">__arch__</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#__add__">__add__()</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#__long__">__long__()</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.FactorShiftType-class.html#__qualname__">__qualname__</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.IS-class.html#__array_interface__">__array_interface__</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#__arch__">__arch__</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.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.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.IS-class.html#__array_interface__">__array_interface__</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.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.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.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.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.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._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.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.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_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.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.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.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.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.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.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.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.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#__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.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.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.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.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.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.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.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.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.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.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.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.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.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.MGCycleType-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.PC.MGCycleType-class.html">MGCycleType</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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.RKType-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.TS.RKType-class.html">RKType</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._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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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.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#__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._DMComposite_access-class.html#__exit__">__exit__()</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#__new__">__new__()</a><br />
+<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.Vec-class.html#__radd__">__radd__()</a><br />
+<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.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._DMDA_Vec_array-class.html#__exit__">__exit__()</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._DMComposite_access-class.html#__exit__">__exit__()</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.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.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>
-<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._DMDA_Vec_array-class.html#__exit__">__exit__()</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.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.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>
-<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._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._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.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._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._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._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#__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.Comm-class.html#__ge__">__ge__()</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._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._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#__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.Object-class.html#__ge__">__ge__()</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.Comm-class.html#__ge__">__ge__()</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_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#__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>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Mat-class.html#__getitem__">__getitem__()</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#__ge__">__ge__()</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._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#__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>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Options-class.html#__getitem__">__getitem__()</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#__getitem__">__getitem__()</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_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#__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>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__getitem__">__getitem__()</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.Options-class.html#__getitem__">__getitem__()</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.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.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>
-<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.Vec-class.html#__getitem__">__getitem__()</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#__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.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>
-<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._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.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.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.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.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-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.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.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.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-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._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.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.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.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.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#__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.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.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#__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#__idiv__">__idiv__()</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#__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.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#__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#__imul__">__imul__()</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#__idiv__">__idiv__()</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-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.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>
-<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.Mat-class.html#__imul__">__imul__()</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.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.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>
-<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.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.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-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.Options-class.html#__init__">__init__()</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.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.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._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._Vec_LocalForm-class.html#__init__">__init__()</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.Options-class.html#__init__">__init__()</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.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._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>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.LogClass-class.html#__int__">__int__()</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._Vec_LocalForm-class.html#__init__">__init__()</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.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-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>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.LogEvent-class.html#__int__">__int__()</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.LogClass-class.html#__int__">__int__()</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.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-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>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.LogStage-class.html#__int__">__int__()</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.LogEvent-class.html#__int__">__int__()</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.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._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>
-<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.LogStage-class.html#__int__">__int__()</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.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._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>
-<td width="33%" class="link-index"><a href="petsc4py.PETSc.Vec-class.html#__isub__">__isub__()</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#__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.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.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#__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.Vec-class.html#__isub__">__isub__()</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.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"><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>
-<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.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.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"><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.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.Type-class.html#__qualname__">__qualname__</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_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.Comm-class.html#__le__">__le__()</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.LGMap.MapMode-class.html#__qualname__">__qualname__</a><br />
+<span class="index-where">(in <a href="petsc4py.PETSc.LGMap.MapMode-class.html">MapMode</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>
 </tr>
@@ -6072,7 +6315,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:46 2016
+    Generated by Epydoc 3.0.1
     </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 8fdcad0..e8fbd51 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 May  1 16:53:46 2016
+    Generated by Epydoc 3.0.1
     </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 85694d7..865e9dd 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.7.0
+        3.8.0
       </p>
       <p><strong>Author:</strong>
         Lisandro Dalcin
@@ -152,6 +152,23 @@ communication.</p>
       
     </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="get_config"></a><span class="summary-sig-name">get_config</span>()</span><br />
+      Return a dictionary with information about PETSc.</td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
 </table>
 <!-- ==================== VARIABLES ==================== -->
 <a name="section-Variables"></a>
@@ -291,7 +308,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 May  1 16:53:46 2016
+    Generated by Epydoc 3.0.1
     </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 891d211..015ee58 100644
--- a/docs/apiref/petsc4py.PETSc-module.html
+++ b/docs/apiref/petsc4py.PETSc-module.html
@@ -81,307 +81,221 @@ Portable, Extensible Toolkit for Scientific Computation
   </td>
 </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.AO-class.html" class="summary-name">AO</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.Comm-class.html" class="summary-name">Comm</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.DMDA-class.html" class="summary-name">DA</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.DM-class.html" class="summary-name">DM</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.DMComposite-class.html" class="summary-name">DMComposite</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.DMDA-class.html" class="summary-name">DMDA</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.DMPlex-class.html" class="summary-name">DMPlex</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.DMShell-class.html" class="summary-name">DMShell</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.Error-class.html" class="summary-name">Error</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.IS-class.html" class="summary-name">IS</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.InsertMode-class.html" class="summary-name">InsertMode</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.KSP-class.html" class="summary-name">KSP</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.LGMap-class.html" class="summary-name">LGMap</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.Log-class.html" class="summary-name">Log</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.LogClass-class.html" class="summary-name">LogClass</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.LogEvent-class.html" class="summary-name">LogEvent</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.LogStage-class.html" class="summary-name">LogStage</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.Mat-class.html" class="summary-name">Mat</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.NormType-class.html" class="summary-name">NormType</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.NullSpace-class.html" class="summary-name">NullSpace</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.Object-class.html" class="summary-name">Object</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.Options-class.html" class="summary-name">Options</a><br />
       Options(prefix=None)
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.PC-class.html" class="summary-name">PC</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.Partitioner-class.html" class="summary-name">Partitioner</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.PartitionerType-class.html" class="summary-name">PartitionerType</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.Random-class.html" class="summary-name">Random</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.SF-class.html" class="summary-name">SF</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.SNES-class.html" class="summary-name">SNES</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.Scatter-class.html" class="summary-name">Scatter</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.ScatterMode-class.html" class="summary-name">ScatterMode</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.Section-class.html" class="summary-name">Section</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.Sys-class.html" class="summary-name">Sys</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.TAO-class.html" class="summary-name">TAO</a><br />
       TAO Solver
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.TS-class.html" class="summary-name">TS</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.Vec-class.html" class="summary-name">Vec</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.Viewer-class.html" class="summary-name">Viewer</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.ViewerHDF5-class.html" class="summary-name">ViewerHDF5</a>
     </td>
   </tr>
 <tr class="private">
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc._DMComposite_access-class.html" class="summary-name" onclick="show_private();">_DMComposite_access</a>
     </td>
   </tr>
 <tr class="private">
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc._DMDA_Vec_array-class.html" class="summary-name" onclick="show_private();">_DMDA_Vec_array</a>
     </td>
   </tr>
 <tr class="private">
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc._IS_buffer-class.html" class="summary-name" onclick="show_private();">_IS_buffer</a>
     </td>
   </tr>
 <tr class="private">
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc._Mat_Stencil-class.html" class="summary-name" onclick="show_private();">_Mat_Stencil</a>
     </td>
   </tr>
 <tr class="private">
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc._Vec_LocalForm-class.html" class="summary-name" onclick="show_private();">_Vec_LocalForm</a><br />
       _Vec_LocalForm(Vec gvec)
 Context manager for <a href="petsc4py.PETSc.Vec-class.html" class="link">Vec</a> local form
     </td>
   </tr>
 <tr class="private">
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc._Vec_buffer-class.html" class="summary-name" onclick="show_private();">_Vec_buffer</a>
     </td>
   </tr>
@@ -458,21 +372,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 0x7fea2aa4c510>"><petsc4py.PETSc.Comm object at 0x7fea2aa4c510></code>
+        <a name="COMM_NULL"></a><span class="summary-name">COMM_NULL</span> = <code title="<petsc4py.PETSc.Comm object at 0x7f25e632bd90>"><petsc4py.PETSc.Comm object at 0x7f25e632bd90></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 0x7fea2aa4c550>"><petsc4py.PETSc.Comm object at 0x7fea2aa4c550></code>
+        <a name="COMM_SELF"></a><span class="summary-name">COMM_SELF</span> = <code title="<petsc4py.PETSc.Comm object at 0x7f25e632bdd0>"><petsc4py.PETSc.Comm object at 0x7f25e632bdd0></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 0x7fea2aa4c590>"><petsc4py.PETSc.Comm object at 0x7fea2aa4c590></code>
+        <a name="COMM_WORLD"></a><span class="summary-name">COMM_WORLD</span> = <code title="<petsc4py.PETSc.Comm object at 0x7f25e632be10>"><petsc4py.PETSc.Comm object at 0x7f25e632be10></code>
     </td>
   </tr>
 <tr>
@@ -535,14 +449,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 0x7fe\
-a3f702960>,
- 'GetCommDefault': <capsule object "MPI_Comm (void)" at 0x7fea3f7029c0\
+        <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 0x7f2\
+5f99085d0>,
+ 'GetCommDefault': <capsule object "MPI_Comm (void)" at 0x7f25f9908630\
 >,
- 'PyPetscAO_Get': <capsule object "AO (PyObject *)" at 0x7fea3f706150>\
+ 'PyPetscAO_Get': <capsule object "AO (PyObject *)" at 0x7f25f9908d80>\
 ,
- 'PyPetscAO_New': <capsule object "PyObject *(AO)" at 0x7fea3f706120>,
- 'PyPetscComm_Get': <capsule object "MPI_Comm (PyObject *)" at 0x7fea3\
+ 'PyPetscAO_New': <capsule object "PyObject *(AO)" at 0x7f25f9908d50>,
+ 'PyPetscComm_Get': <capsule object "MPI_Comm (PyObject *)" at 0x7f25f\
 ..."><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>
@@ -557,7 +471,7 @@ a3f702960>,
  1211216: <type 'petsc4py.PETSc.IS'>,
  1211217: <type 'petsc4py.PETSc.LGMap'>,
  1211218: <type 'petsc4py.PETSc.Section'>,
- 1211219: <type 'petsc4py.PETSc.Vec'>,
+ 1211220: <type 'petsc4py.PETSc.Vec'>,
 ..."><code class="variable-group">{</code>0<code class="variable-op">: </code>None<code class="variable-op">, </code>1211212<code class="variable-op">: </code><type 'petsc4py.PETSc.O<code class="variable-ellipsis">...</code></code>
     </td>
   </tr>
@@ -592,14 +506,14 @@ a3f702960>,
   <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 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-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 0x7f2<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
+5f99085d0><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 0x7f25f9908630<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 0x7fea3f706150><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 0x7f25f9908d80><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 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-quote">'</code><code class="variable-string">PyPetscAO_New</code><code class="variable-quote">'</code><code class="variable-op">: </code><capsule object "PyObject *(AO)" at 0x7f25f9908d50><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 0x7f25f<span class="variable-linewrap"><img src="crarr.png" alt="\" /></span>
 <code class="variable-ellipsis">...</code>
 </pre></td></tr></table>
 </dd>
@@ -625,7 +539,7 @@ a3f702960><code class="variable-op">,</code>
  1211216<code class="variable-op">: </code><type 'petsc4py.PETSc.IS'><code class="variable-op">,</code>
  1211217<code class="variable-op">: </code><type 'petsc4py.PETSc.LGMap'><code class="variable-op">,</code>
  1211218<code class="variable-op">: </code><type 'petsc4py.PETSc.Section'><code class="variable-op">,</code>
- 1211219<code class="variable-op">: </code><type 'petsc4py.PETSc.Vec'><code class="variable-op">,</code>
+ 1211220<code class="variable-op">: </code><type 'petsc4py.PETSc.Vec'><code class="variable-op">,</code>
 <code class="variable-ellipsis">...</code>
 </pre></td></tr></table>
 </dd>
@@ -664,7 +578,7 @@ a3f702960><code class="variable-op">,</code>
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:46 2016
+    Generated by Epydoc 3.0.1
     </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 becba16..c8d6b7b 100644
--- a/docs/apiref/petsc4py.PETSc.AO-class.html
+++ b/docs/apiref/petsc4py.PETSc.AO-class.html
@@ -60,15 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class AO</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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="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>
+
 </center>
 <hr />
 <!-- ==================== NESTED CLASSES ==================== -->
@@ -89,9 +84,7 @@
   </td>
 </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.AO.Type-class.html" class="summary-name">Type</a>
     </td>
   </tr>
@@ -301,21 +294,8 @@
       <code><a href="petsc4py.PETSc.Object-class.html#setName">setName</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setOptionsPrefix">setOptionsPrefix</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setTabLevel">setTabLevel</a></code>,
-      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>
-      </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
+      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>,
+      <code><a href="petsc4py.PETSc.Object-class.html#viewFromOptions">viewFromOptions</a></code>
       </p>
     </td>
   </tr>
@@ -350,9 +330,6 @@
       <code><a href="petsc4py.PETSc.Object-class.html#refcount">refcount</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#type">type</a></code>
       </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
     </td>
   </tr>
 </table>
@@ -393,7 +370,7 @@
   <dl class="fields">
     <dt>Returns: a new object with type S, a subtype of T</dt>
     <dt>Overrides:
-        object.__new__
+        <a href="petsc4py.PETSc.Object-class.html#__new__">Object.__new__</a>
     </dt>
   </dl>
 </td></tr></table>
@@ -497,7 +474,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:46 2016
+    Generated by Epydoc 3.0.1
     </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 9680be4..d769c65 100644
--- a/docs/apiref/petsc4py.PETSc.AO.Type-class.html
+++ b/docs/apiref/petsc4py.PETSc.AO.Type-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Type</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,56,31"/>
-</map>
-  <img src="class_hierarchy_for_type.png" alt='' usemap="#class_hierarchy_for_type" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -161,31 +120,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -217,7 +151,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:46 2016
+    Generated by Epydoc 3.0.1
     </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 34500c9..2f09c59 100644
--- a/docs/apiref/petsc4py.PETSc.Comm-class.html
+++ b/docs/apiref/petsc4py.PETSc.Comm-class.html
@@ -60,14 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Comm</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,67,31"/>
-</map>
-  <img src="class_hierarchy_for_comm.png" alt='' usemap="#class_hierarchy_for_comm" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
 <!-- ==================== INSTANCE METHODS ==================== -->
@@ -415,24 +411,6 @@
       
     </td>
   </tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
 </table>
 <!-- ==================== PROPERTIES ==================== -->
 <a name="section-Properties"></a>
@@ -472,13 +450,6 @@
         <a name="size"></a><span class="summary-name">size</span>
     </td>
   </tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
 </table>
 <!-- ==================== METHOD DETAILS ==================== -->
 <a name="section-MethodDetails"></a>
@@ -554,7 +525,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:46 2016
+    Generated by Epydoc 3.0.1
     </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 2b4a9ff..bfc7ea1 100644
--- a/docs/apiref/petsc4py.PETSc.DM-class.html
+++ b/docs/apiref/petsc4py.PETSc.DM-class.html
@@ -60,20 +60,17 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class DM</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
+<dl><dt>Known Subclasses:</dt>
+<dd>
+      <ul class="subclass-list">
+<li><a href="petsc4py.PETSc.DMDA-class.html">DMDA</a></li><li>, <a href="petsc4py.PETSc.DMComposite-class.html">DMComposite</a></li><li>, <a href="petsc4py.PETSc.DMPlex-class.html">DMPlex</a></li><li>, <a href="petsc4py.PETSc.DMShell-class.html">DMShell</a></li>  </ul>
+</dd></dl>
+
 <hr />
 <!-- ==================== NESTED CLASSES ==================== -->
 <a name="section-NestedClasses"></a>
@@ -93,16 +90,12 @@
   </td>
 </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.DM.BoundaryType-class.html" class="summary-name">BoundaryType</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.DM.Type-class.html" class="summary-name">Type</a>
     </td>
   </tr>
@@ -147,6 +140,41 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="adaptLabel"></a><span class="summary-sig-name">adaptLabel</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">label</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="adaptMetric"></a><span class="summary-sig-name">adaptMetric</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">Vec metric</span>,
+        <span class="summary-sig-arg">label</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="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>
@@ -303,6 +331,22 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="createFieldDecomposition"></a><span class="summary-sig-name">createFieldDecomposition</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="createGlobalVec"></a><span class="summary-sig-name">createGlobalVec</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -498,6 +542,22 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="getCoarsenLevel"></a><span class="summary-sig-name">getCoarsenLevel</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="getCoordinateDM"></a><span class="summary-sig-name">getCoordinateDM</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -626,6 +686,22 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="getGlobalVec"></a><span class="summary-sig-name">getGlobalVec</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="getLGMap"></a><span class="summary-sig-name">getLGMap</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -728,6 +804,22 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="getLocalVec"></a><span class="summary-sig-name">getLocalVec</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="getMatrix"></a><span class="summary-sig-name">getMatrix</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -776,6 +868,22 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="getRefineLevel"></a><span class="summary-sig-name">getRefineLevel</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="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>
@@ -953,6 +1061,40 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="restoreGlobalVec"></a><span class="summary-sig-name">restoreGlobalVec</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">Vec vg</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="restoreLocalVec"></a><span class="summary-sig-name">restoreLocalVec</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">Vec vl</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">
@@ -1071,6 +1213,25 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="setKSPComputeOperators"></a><span class="summary-sig-name">setKSPComputeOperators</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="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>
@@ -1160,6 +1321,61 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="setRefineLevel"></a><span class="summary-sig-name">setRefineLevel</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">level</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="setSNESFunction"></a><span class="summary-sig-name">setSNESFunction</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">function</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="setSNESJacobian"></a><span class="summary-sig-name">setSNESJacobian</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">jacobian</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="setType"></a><span class="summary-sig-name">setType</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">dm_type</span>)</span></td>
           <td align="right" valign="top">
@@ -1250,21 +1466,8 @@
       <code><a href="petsc4py.PETSc.Object-class.html#setAttr">setAttr</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setName">setName</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setTabLevel">setTabLevel</a></code>,
-      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>
-      </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
+      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>,
+      <code><a href="petsc4py.PETSc.Object-class.html#viewFromOptions">viewFromOptions</a></code>
       </p>
     </td>
   </tr>
@@ -1299,9 +1502,6 @@
       <code><a href="petsc4py.PETSc.Object-class.html#refcount">refcount</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#type">type</a></code>
       </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
     </td>
   </tr>
 </table>
@@ -1342,7 +1542,7 @@
   <dl class="fields">
     <dt>Returns: a new object with type S, a subtype of T</dt>
     <dt>Overrides:
-        object.__new__
+        <a href="petsc4py.PETSc.Object-class.html#__new__">Object.__new__</a>
     </dt>
   </dl>
 </td></tr></table>
@@ -1491,7 +1691,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:46 2016
+    Generated by Epydoc 3.0.1
     </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 7c40762..f0fa8a7 100644
--- a/docs/apiref/petsc4py.PETSc.DM.BoundaryType-class.html
+++ b/docs/apiref/petsc4py.PETSc.DM.BoundaryType-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class BoundaryType</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,112,31"/>
-</map>
-  <img src="class_hierarchy_for_boundaryty.png" alt='' usemap="#class_hierarchy_for_boundaryty" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -168,31 +127,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -224,7 +158,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:46 2016
+    Generated by Epydoc 3.0.1
     </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 1ac2ddd..18c9c1a 100644
--- a/docs/apiref/petsc4py.PETSc.DM.Type-class.html
+++ b/docs/apiref/petsc4py.PETSc.DM.Type-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Type</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -203,31 +162,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -259,7 +193,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:46 2016
+    Generated by Epydoc 3.0.1
     </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 77cb455..07c5294 100644
--- a/docs/apiref/petsc4py.PETSc.DMComposite-class.html
+++ b/docs/apiref/petsc4py.PETSc.DMComposite-class.html
@@ -60,16 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class DMComposite</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
 <hr />
 <!-- ==================== NESTED CLASSES ==================== -->
@@ -328,6 +322,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#adaptLabel">adaptLabel</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#adaptMetric">adaptMetric</a></code>,
       <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>,
@@ -336,6 +332,7 @@
       <code><a href="petsc4py.PETSc.DM-class.html#convert">convert</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createAggregates">createAggregates</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createDefaultSF">createDefaultSF</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#createFieldDecomposition">createFieldDecomposition</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createGlobalVec">createGlobalVec</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createGlobalVector">createGlobalVector</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createInjection">createInjection</a></code>,
@@ -348,6 +345,7 @@
       <code><a href="petsc4py.PETSc.DM-class.html#destroy">destroy</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getAppCtx">getAppCtx</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getBlockSize">getBlockSize</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getCoarsenLevel">getCoarsenLevel</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getCoordinateDM">getCoordinateDM</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getCoordinateSection">getCoordinateSection</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getCoordinates">getCoordinates</a></code>,
@@ -356,15 +354,18 @@
       <code><a href="petsc4py.PETSc.DM-class.html#getDefaultSF">getDefaultSF</a></code>,
       <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#getGlobalVec">getGlobalVec</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#getLocalVec">getLocalVec</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#getRefineLevel">getRefineLevel</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>,
@@ -375,6 +376,8 @@
       <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#restoreGlobalVec">restoreGlobalVec</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#restoreLocalVec">restoreLocalVec</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>,
@@ -382,11 +385,15 @@
       <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#setKSPComputeOperators">setKSPComputeOperators</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>,
+      <code><a href="petsc4py.PETSc.DM-class.html#setRefineLevel">setRefineLevel</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#setSNESFunction">setSNESFunction</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#setSNESJacobian">setSNESJacobian</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setType">setType</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setUp">setUp</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setVecType">setVecType</a></code>,
@@ -419,21 +426,8 @@
       <code><a href="petsc4py.PETSc.Object-class.html#setAttr">setAttr</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setName">setName</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setTabLevel">setTabLevel</a></code>,
-      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>
-      </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
+      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>,
+      <code><a href="petsc4py.PETSc.Object-class.html#viewFromOptions">viewFromOptions</a></code>
       </p>
     </td>
   </tr>
@@ -468,9 +462,6 @@
       <code><a href="petsc4py.PETSc.Object-class.html#refcount">refcount</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#type">type</a></code>
       </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
     </td>
   </tr>
 </table>
@@ -511,7 +502,7 @@
   <dl class="fields">
     <dt>Returns: a new object with type S, a subtype of T</dt>
     <dt>Overrides:
-        object.__new__
+        <a href="petsc4py.PETSc.Object-class.html#__new__">Object.__new__</a>
     </dt>
   </dl>
 </td></tr></table>
@@ -594,7 +585,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 May  1 16:53:47 2016
+    Generated by Epydoc 3.0.1
     </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 d25c438..c9ee58d 100644
--- a/docs/apiref/petsc4py.PETSc.DMDA-class.html
+++ b/docs/apiref/petsc4py.PETSc.DMDA-class.html
@@ -60,16 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class DMDA</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
 <hr />
 <!-- ==================== NESTED CLASSES ==================== -->
@@ -90,23 +84,17 @@
   </td>
 </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.DMDA.ElementType-class.html" class="summary-name">ElementType</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.DMDA.InterpolationType-class.html" class="summary-name">InterpolationType</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.DMDA.StencilType-class.html" class="summary-name">StencilType</a>
     </td>
   </tr>
@@ -908,6 +896,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#adaptLabel">adaptLabel</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#adaptMetric">adaptMetric</a></code>,
       <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>,
@@ -916,6 +906,7 @@
       <code><a href="petsc4py.PETSc.DM-class.html#convert">convert</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createAggregates">createAggregates</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createDefaultSF">createDefaultSF</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#createFieldDecomposition">createFieldDecomposition</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createGlobalVec">createGlobalVec</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createGlobalVector">createGlobalVector</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createInjection">createInjection</a></code>,
@@ -928,6 +919,7 @@
       <code><a href="petsc4py.PETSc.DM-class.html#destroy">destroy</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getAppCtx">getAppCtx</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getBlockSize">getBlockSize</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getCoarsenLevel">getCoarsenLevel</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getCoordinateDM">getCoordinateDM</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getCoordinateSection">getCoordinateSection</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getCoordinates">getCoordinates</a></code>,
@@ -936,15 +928,18 @@
       <code><a href="petsc4py.PETSc.DM-class.html#getDefaultSF">getDefaultSF</a></code>,
       <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#getGlobalVec">getGlobalVec</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#getLocalVec">getLocalVec</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#getRefineLevel">getRefineLevel</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>,
@@ -955,6 +950,8 @@
       <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#restoreGlobalVec">restoreGlobalVec</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#restoreLocalVec">restoreLocalVec</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>,
@@ -962,11 +959,15 @@
       <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#setKSPComputeOperators">setKSPComputeOperators</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>,
+      <code><a href="petsc4py.PETSc.DM-class.html#setRefineLevel">setRefineLevel</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#setSNESFunction">setSNESFunction</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#setSNESJacobian">setSNESJacobian</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setType">setType</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setUp">setUp</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setVecType">setVecType</a></code>,
@@ -999,21 +1000,8 @@
       <code><a href="petsc4py.PETSc.Object-class.html#setAttr">setAttr</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setName">setName</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setTabLevel">setTabLevel</a></code>,
-      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>
-      </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
+      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>,
+      <code><a href="petsc4py.PETSc.Object-class.html#viewFromOptions">viewFromOptions</a></code>
       </p>
     </td>
   </tr>
@@ -1132,9 +1120,6 @@
       <code><a href="petsc4py.PETSc.Object-class.html#refcount">refcount</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#type">type</a></code>
       </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
     </td>
   </tr>
 </table>
@@ -1175,7 +1160,7 @@
   <dl class="fields">
     <dt>Returns: a new object with type S, a subtype of T</dt>
     <dt>Overrides:
-        object.__new__
+        <a href="petsc4py.PETSc.Object-class.html#__new__">Object.__new__</a>
     </dt>
   </dl>
 </td></tr></table>
@@ -1244,7 +1229,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:47 2016
+    Generated by Epydoc 3.0.1
     </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 e4fb0b9..f3507e7 100644
--- a/docs/apiref/petsc4py.PETSc.DMDA.ElementType-class.html
+++ b/docs/apiref/petsc4py.PETSc.DMDA.ElementType-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class ElementType</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,104,31"/>
-</map>
-  <img src="class_hierarchy_for_elementtyp.png" alt='' usemap="#class_hierarchy_for_elementtyp" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -147,31 +106,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -203,7 +137,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:47 2016
+    Generated by Epydoc 3.0.1
     </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 ee20d87..43d6cc0 100644
--- a/docs/apiref/petsc4py.PETSc.DMDA.InterpolationType-class.html
+++ b/docs/apiref/petsc4py.PETSc.DMDA.InterpolationType-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class InterpolationType</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,128,31"/>
-</map>
-  <img src="class_hierarchy_for_interpolat.png" alt='' usemap="#class_hierarchy_for_interpolat" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -147,31 +106,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -203,7 +137,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:47 2016
+    Generated by Epydoc 3.0.1
     </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 138b7fe..f6b0776 100644
--- a/docs/apiref/petsc4py.PETSc.DMDA.StencilType-class.html
+++ b/docs/apiref/petsc4py.PETSc.DMDA.StencilType-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class StencilType</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,96,31"/>
-</map>
-  <img src="class_hierarchy_for_stenciltyp.png" alt='' usemap="#class_hierarchy_for_stenciltyp" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -147,31 +106,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -203,7 +137,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:47 2016
+    Generated by Epydoc 3.0.1
     </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 a71f66f..b34e93d 100644
--- a/docs/apiref/petsc4py.PETSc.DMPlex-class.html
+++ b/docs/apiref/petsc4py.PETSc.DMPlex-class.html
@@ -60,16 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class DMPlex</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
 <hr />
 <!-- ==================== NESTED CLASSES ==================== -->
@@ -155,6 +149,23 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="constructGhostCells"></a><span class="summary-sig-name">constructGhostCells</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">labelName</span>=<span class="summary-sig-default">None</span>)</span></td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
           <td><span class="summary-sig"><a href="petsc4py.PETSc.DMPlex-class.html#create" class="summary-sig-name">create</a>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">comm</span>=<span class="summary-sig-default">None</span>)</span></td>
           <td align="right" valign="top">
@@ -174,6 +185,7 @@
         <tr>
           <td><span class="summary-sig"><a name="createBoxMesh"></a><span class="summary-sig-name">createBoxMesh</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">dim</span>,
+        <span class="summary-sig-arg">numFaces</span>=<span class="summary-sig-default">1</span>,
         <span class="summary-sig-arg">interpolate</span>=<span class="summary-sig-default">True</span>,
         <span class="summary-sig-arg">comm</span>=<span class="summary-sig-default">None</span>)</span></td>
           <td align="right" valign="top">
@@ -341,6 +353,25 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="createFromFile"></a><span class="summary-sig-name">createFromFile</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">filename</span>,
+        <span class="summary-sig-arg">interpolate</span>=<span class="summary-sig-default">True</span>,
+        <span class="summary-sig-arg">comm</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="createGmsh"></a><span class="summary-sig-name">createGmsh</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">Viewer viewer</span>,
         <span class="summary-sig-arg">interpolate</span>=<span class="summary-sig-default">True</span>,
@@ -510,6 +541,71 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="getAdjacency"></a><span class="summary-sig-name">getAdjacency</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">p</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="getAdjacencyUseAnchors"></a><span class="summary-sig-name">getAdjacencyUseAnchors</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="getAdjacencyUseClosure"></a><span class="summary-sig-name">getAdjacencyUseClosure</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="getAdjacencyUseCone"></a><span class="summary-sig-name">getAdjacencyUseCone</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="getCellNumbering"></a><span class="summary-sig-name">getCellNumbering</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -726,6 +822,76 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="getPointGlobal"></a><span class="summary-sig-name">getPointGlobal</span>(<span class="summary-sig-arg">self</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="getPointGlobalField"></a><span class="summary-sig-name">getPointGlobalField</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">point</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="getPointLocal"></a><span class="summary-sig-name">getPointLocal</span>(<span class="summary-sig-arg">self</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="getPointLocalField"></a><span class="summary-sig-name">getPointLocalField</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">point</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="getRefinementLimit"></a><span class="summary-sig-name">getRefinementLimit</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -810,6 +976,25 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="getVecClosure"></a><span class="summary-sig-name">getVecClosure</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">Section sec</span>,
+        <span class="summary-sig-arg">Vec vec</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="getVertexNumbering"></a><span class="summary-sig-name">getVertexNumbering</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -864,6 +1049,22 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="interpolate"></a><span class="summary-sig-name">interpolate</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="markBoundaryFaces"></a><span class="summary-sig-name">markBoundaryFaces</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">label</span>)</span></td>
           <td align="right" valign="top">
@@ -914,6 +1115,23 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="setAdjacencyUseAnchors"></a><span class="summary-sig-name">setAdjacencyUseAnchors</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">useAnchors</span>=<span class="summary-sig-default">True</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">
@@ -1021,6 +1239,45 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="setMatClosure"></a><span class="summary-sig-name">setMatClosure</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">Section sec</span>,
+        <span class="summary-sig-arg">Section gsec</span>,
+        <span class="summary-sig-arg">Mat mat</span>,
+        <span class="summary-sig-arg">point</span>,
+        <span class="summary-sig-arg">values</span>,
+        <span class="summary-sig-arg">addv</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="setPartitioner"></a><span class="summary-sig-name">setPartitioner</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">Partitioner part</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">
@@ -1125,6 +1382,27 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="setVecClosure"></a><span class="summary-sig-name">setVecClosure</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">Section sec</span>,
+        <span class="summary-sig-arg">Vec vec</span>,
+        <span class="summary-sig-arg">point</span>,
+        <span class="summary-sig-arg">values</span>,
+        <span class="summary-sig-arg">addv</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="stratify"></a><span class="summary-sig-name">stratify</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -1157,6 +1435,22 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="uninterpolate"></a><span class="summary-sig-name">uninterpolate</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="vecGetClosure"></a><span class="summary-sig-name">vecGetClosure</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">Section sec</span>,
         <span class="summary-sig-arg">Vec vec</span>,
@@ -1173,6 +1467,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#adaptLabel">adaptLabel</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#adaptMetric">adaptMetric</a></code>,
       <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>,
@@ -1181,6 +1477,7 @@
       <code><a href="petsc4py.PETSc.DM-class.html#convert">convert</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createAggregates">createAggregates</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createDefaultSF">createDefaultSF</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#createFieldDecomposition">createFieldDecomposition</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createGlobalVec">createGlobalVec</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createGlobalVector">createGlobalVector</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createInjection">createInjection</a></code>,
@@ -1193,6 +1490,7 @@
       <code><a href="petsc4py.PETSc.DM-class.html#destroy">destroy</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getAppCtx">getAppCtx</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getBlockSize">getBlockSize</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getCoarsenLevel">getCoarsenLevel</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getCoordinateDM">getCoordinateDM</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getCoordinateSection">getCoordinateSection</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getCoordinates">getCoordinates</a></code>,
@@ -1201,15 +1499,18 @@
       <code><a href="petsc4py.PETSc.DM-class.html#getDefaultSF">getDefaultSF</a></code>,
       <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#getGlobalVec">getGlobalVec</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#getLocalVec">getLocalVec</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#getRefineLevel">getRefineLevel</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>,
@@ -1220,6 +1521,8 @@
       <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#restoreGlobalVec">restoreGlobalVec</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#restoreLocalVec">restoreLocalVec</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>,
@@ -1227,11 +1530,15 @@
       <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#setKSPComputeOperators">setKSPComputeOperators</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>,
+      <code><a href="petsc4py.PETSc.DM-class.html#setRefineLevel">setRefineLevel</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#setSNESFunction">setSNESFunction</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#setSNESJacobian">setSNESJacobian</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setType">setType</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setUp">setUp</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setVecType">setVecType</a></code>,
@@ -1264,21 +1571,8 @@
       <code><a href="petsc4py.PETSc.Object-class.html#setAttr">setAttr</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setName">setName</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setTabLevel">setTabLevel</a></code>,
-      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>
-      </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
+      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>,
+      <code><a href="petsc4py.PETSc.Object-class.html#viewFromOptions">viewFromOptions</a></code>
       </p>
     </td>
   </tr>
@@ -1313,9 +1607,6 @@
       <code><a href="petsc4py.PETSc.Object-class.html#refcount">refcount</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#type">type</a></code>
       </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
     </td>
   </tr>
 </table>
@@ -1356,7 +1647,7 @@
   <dl class="fields">
     <dt>Returns: a new object with type S, a subtype of T</dt>
     <dt>Overrides:
-        object.__new__
+        <a href="petsc4py.PETSc.Object-class.html#__new__">Object.__new__</a>
     </dt>
   </dl>
 </td></tr></table>
@@ -1416,7 +1707,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:47 2016
+    Generated by Epydoc 3.0.1
     </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 6c3a8ad..e2b66cd 100644
--- a/docs/apiref/petsc4py.PETSc.DMShell-class.html
+++ b/docs/apiref/petsc4py.PETSc.DMShell-class.html
@@ -60,16 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class DMShell</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
 <hr />
 <!-- ==================== NESTED CLASSES ==================== -->
@@ -174,6 +168,44 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="setCreateDomainDecomposition"></a><span class="summary-sig-name">setCreateDomainDecomposition</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">decomp</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="setCreateDomainDecompositionScatters"></a><span class="summary-sig-name">setCreateDomainDecompositionScatters</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">scatter</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="setCreateFieldDecomposition"></a><span class="summary-sig-name">setCreateFieldDecomposition</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">decomp</span>,
         <span class="summary-sig-arg">args</span>=<span class="summary-sig-default">None</span>,
@@ -288,6 +320,25 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="setCreateRestriction"></a><span class="summary-sig-name">setCreateRestriction</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">create_restriction</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="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>,
@@ -491,6 +542,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#adaptLabel">adaptLabel</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#adaptMetric">adaptMetric</a></code>,
       <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>,
@@ -499,6 +552,7 @@
       <code><a href="petsc4py.PETSc.DM-class.html#convert">convert</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createAggregates">createAggregates</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createDefaultSF">createDefaultSF</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#createFieldDecomposition">createFieldDecomposition</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createGlobalVec">createGlobalVec</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createGlobalVector">createGlobalVector</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#createInjection">createInjection</a></code>,
@@ -511,6 +565,7 @@
       <code><a href="petsc4py.PETSc.DM-class.html#destroy">destroy</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getAppCtx">getAppCtx</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getBlockSize">getBlockSize</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#getCoarsenLevel">getCoarsenLevel</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getCoordinateDM">getCoordinateDM</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getCoordinateSection">getCoordinateSection</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#getCoordinates">getCoordinates</a></code>,
@@ -519,15 +574,18 @@
       <code><a href="petsc4py.PETSc.DM-class.html#getDefaultSF">getDefaultSF</a></code>,
       <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#getGlobalVec">getGlobalVec</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#getLocalVec">getLocalVec</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#getRefineLevel">getRefineLevel</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>,
@@ -538,6 +596,8 @@
       <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#restoreGlobalVec">restoreGlobalVec</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#restoreLocalVec">restoreLocalVec</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>,
@@ -545,11 +605,15 @@
       <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#setKSPComputeOperators">setKSPComputeOperators</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>,
+      <code><a href="petsc4py.PETSc.DM-class.html#setRefineLevel">setRefineLevel</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#setSNESFunction">setSNESFunction</a></code>,
+      <code><a href="petsc4py.PETSc.DM-class.html#setSNESJacobian">setSNESJacobian</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setType">setType</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setUp">setUp</a></code>,
       <code><a href="petsc4py.PETSc.DM-class.html#setVecType">setVecType</a></code>,
@@ -582,21 +646,8 @@
       <code><a href="petsc4py.PETSc.Object-class.html#setAttr">setAttr</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setName">setName</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setTabLevel">setTabLevel</a></code>,
-      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>
-      </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
+      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>,
+      <code><a href="petsc4py.PETSc.Object-class.html#viewFromOptions">viewFromOptions</a></code>
       </p>
     </td>
   </tr>
@@ -631,9 +682,6 @@
       <code><a href="petsc4py.PETSc.Object-class.html#refcount">refcount</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#type">type</a></code>
       </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
     </td>
   </tr>
 </table>
@@ -674,7 +722,7 @@
   <dl class="fields">
     <dt>Returns: a new object with type S, a subtype of T</dt>
     <dt>Overrides:
-        object.__new__
+        <a href="petsc4py.PETSc.Object-class.html#__new__">Object.__new__</a>
     </dt>
   </dl>
 </td></tr></table>
@@ -734,7 +782,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:47 2016
+    Generated by Epydoc 3.0.1
     </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 8e281fa..5244d08 100644
--- a/docs/apiref/petsc4py.PETSc.Error-class.html
+++ b/docs/apiref/petsc4py.PETSc.Error-class.html
@@ -60,18 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Error</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
 <hr />
 <!-- ==================== INSTANCE METHODS ==================== -->
@@ -172,13 +164,6 @@
       <code>__setstate__</code>,
       <code>__unicode__</code>
       </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__format__</code>,
-      <code>__hash__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__sizeof__</code>,
-      <code>__subclasshook__</code>
-      </p>
     </td>
   </tr>
 </table>
@@ -237,9 +222,6 @@
       <code>args</code>,
       <code>message</code>
       </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
     </td>
   </tr>
 </table>
@@ -280,7 +262,7 @@
   x.__init__(...) initializes x; see help(type(x)) for signature
   <dl class="fields">
     <dt>Overrides:
-        object.__init__
+        exceptions.BaseException.__init__
     </dt>
   </dl>
 </td></tr></table>
@@ -303,7 +285,7 @@
   
   <dl class="fields">
     <dt>Overrides:
-        object.__repr__
+        exceptions.BaseException.__repr__
     </dt>
   </dl>
 </td></tr></table>
@@ -326,7 +308,7 @@
   
   <dl class="fields">
     <dt>Overrides:
-        object.__str__
+        exceptions.BaseException.__str__
     </dt>
   </dl>
 </td></tr></table>
@@ -363,7 +345,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:47 2016
+    Generated by Epydoc 3.0.1
     </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 3f2668e..0521186 100644
--- a/docs/apiref/petsc4py.PETSc.IS-class.html
+++ b/docs/apiref/petsc4py.PETSc.IS-class.html
@@ -60,15 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class IS</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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="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>
+
 </center>
 <hr />
 <!-- ==================== NESTED CLASSES ==================== -->
@@ -89,9 +84,7 @@
   </td>
 </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.IS.Type-class.html" class="summary-name">Type</a>
     </td>
   </tr>
@@ -849,21 +842,8 @@
       <code><a href="petsc4py.PETSc.Object-class.html#setName">setName</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setOptionsPrefix">setOptionsPrefix</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setTabLevel">setTabLevel</a></code>,
-      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>
-      </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
+      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>,
+      <code><a href="petsc4py.PETSc.Object-class.html#viewFromOptions">viewFromOptions</a></code>
       </p>
     </td>
   </tr>
@@ -968,9 +948,6 @@
       <code><a href="petsc4py.PETSc.Object-class.html#refcount">refcount</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#type">type</a></code>
       </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
     </td>
   </tr>
 </table>
@@ -1011,7 +988,7 @@
   <dl class="fields">
     <dt>Returns: a new object with type S, a subtype of T</dt>
     <dt>Overrides:
-        object.__new__
+        <a href="petsc4py.PETSc.Object-class.html#__new__">Object.__new__</a>
     </dt>
   </dl>
 </td></tr></table>
@@ -1115,7 +1092,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:47 2016
+    Generated by Epydoc 3.0.1
     </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 9a33068..b9acbdf 100644
--- a/docs/apiref/petsc4py.PETSc.IS.Type-class.html
+++ b/docs/apiref/petsc4py.PETSc.IS.Type-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Type</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -154,31 +113,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -210,7 +144,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:47 2016
+    Generated by Epydoc 3.0.1
     </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 ab4e3fd..bf6e1ad 100644
--- a/docs/apiref/petsc4py.PETSc.InsertMode-class.html
+++ b/docs/apiref/petsc4py.PETSc.InsertMode-class.html
@@ -60,53 +60,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class InsertMode</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,92,31"/>
-</map>
-  <img src="class_hierarchy_for_insertmode.png" alt='' usemap="#class_hierarchy_for_insertmode" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -237,31 +196,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -293,7 +227,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:47 2016
+    Generated by Epydoc 3.0.1
     </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 0cffc62..da2093c 100644
--- a/docs/apiref/petsc4py.PETSc.KSP-class.html
+++ b/docs/apiref/petsc4py.PETSc.KSP-class.html
@@ -60,15 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class KSP</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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="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>
+
 </center>
 <hr />
 <!-- ==================== NESTED CLASSES ==================== -->
@@ -89,23 +84,17 @@
   </td>
 </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.KSP.ConvergedReason-class.html" class="summary-name">ConvergedReason</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.KSP.NormType-class.html" class="summary-name">NormType</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.KSP.Type-class.html" class="summary-name">Type</a>
     </td>
   </tr>
@@ -1317,21 +1306,8 @@
       <code><a href="petsc4py.PETSc.Object-class.html#setAttr">setAttr</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setName">setName</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setTabLevel">setTabLevel</a></code>,
-      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>
-      </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
+      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>,
+      <code><a href="petsc4py.PETSc.Object-class.html#viewFromOptions">viewFromOptions</a></code>
       </p>
     </td>
   </tr>
@@ -1520,9 +1496,6 @@
       <code><a href="petsc4py.PETSc.Object-class.html#refcount">refcount</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#type">type</a></code>
       </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
     </td>
   </tr>
 </table>
@@ -1563,7 +1536,7 @@
   <dl class="fields">
     <dt>Returns: a new object with type S, a subtype of T</dt>
     <dt>Overrides:
-        object.__new__
+        <a href="petsc4py.PETSc.Object-class.html#__new__">Object.__new__</a>
     </dt>
   </dl>
 </td></tr></table>
@@ -1734,7 +1707,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:47 2016
+    Generated by Epydoc 3.0.1
     </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 c9179c8..c9bcfdc 100644
--- a/docs/apiref/petsc4py.PETSc.KSP.ConvergedReason-class.html
+++ b/docs/apiref/petsc4py.PETSc.KSP.ConvergedReason-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class ConvergedReason</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,136,31"/>
-</map>
-  <img src="class_hierarchy_for_convergedr.png" alt='' usemap="#class_hierarchy_for_convergedr" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -273,31 +232,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -329,7 +263,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:47 2016
+    Generated by Epydoc 3.0.1
     </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 2c35c58..ce4f126 100644
--- a/docs/apiref/petsc4py.PETSc.KSP.NormType-class.html
+++ b/docs/apiref/petsc4py.PETSc.KSP.NormType-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class NormType</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,88,31"/>
-</map>
-  <img src="class_hierarchy_for_normtype.png" alt='' usemap="#class_hierarchy_for_normtype" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -210,31 +169,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -266,7 +200,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:48 2016
+    Generated by Epydoc 3.0.1
     </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 013063a..f7a7ec6 100644
--- a/docs/apiref/petsc4py.PETSc.KSP.Type-class.html
+++ b/docs/apiref/petsc4py.PETSc.KSP.Type-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Type</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -157,6 +116,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a name="CGGLTR"></a><span class="summary-name">CGGLTR</span> = <code title="'gltr'"><code class="variable-quote">'</code><code class="variable-string">gltr</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="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>
@@ -164,6 +130,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a name="CGNASH"></a><span class="summary-name">CGNASH</span> = <code title="'nash'"><code class="variable-quote">'</code><code class="variable-string">nash</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>
@@ -178,6 +151,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a name="CGSTCG"></a><span class="summary-name">CGSTCG</span> = <code title="'stcg'"><code class="variable-quote">'</code><code class="variable-string">stcg</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="CHEBYSHEV"></a><span class="summary-name">CHEBYSHEV</span> = <code title="'chebyshev'"><code class="variable-quote">'</code><code class="variable-string">chebyshev</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -220,21 +200,21 @@
     <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>
+        <a name="FETIDP"></a><span class="summary-name">FETIDP</span> = <code title="'fetidp'"><code class="variable-quote">'</code><code class="variable-string">fetidp</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="GCR"></a><span class="summary-name">GCR</span> = <code title="'gcr'"><code class="variable-quote">'</code><code class="variable-string">gcr</code><code class="variable-quote">'</code></code>
+        <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>
 <tr>
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="GLTR"></a><span class="summary-name">GLTR</span> = <code title="'gltr'"><code class="variable-quote">'</code><code class="variable-string">gltr</code><code class="variable-quote">'</code></code>
+        <a name="GCR"></a><span class="summary-name">GCR</span> = <code title="'gcr'"><code class="variable-quote">'</code><code class="variable-string">gcr</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
 <tr>
@@ -290,13 +270,6 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="NASH"></a><span class="summary-name">NASH</span> = <code title="'nash'"><code class="variable-quote">'</code><code class="variable-string">nash</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="PGMRES"></a><span class="summary-name">PGMRES</span> = <code title="'pgmres'"><code class="variable-quote">'</code><code class="variable-string">pgmres</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -374,13 +347,6 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="STCG"></a><span class="summary-name">STCG</span> = <code title="'stcg'"><code class="variable-quote">'</code><code class="variable-string">stcg</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="SYMMLQ"></a><span class="summary-name">SYMMLQ</span> = <code title="'symmlq'"><code class="variable-quote">'</code><code class="variable-string">symmlq</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -413,31 +379,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -469,7 +410,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:48 2016
+    Generated by Epydoc 3.0.1
     </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 860d2cb..7741dfc 100644
--- a/docs/apiref/petsc4py.PETSc.LGMap-class.html
+++ b/docs/apiref/petsc4py.PETSc.LGMap-class.html
@@ -60,15 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class LGMap</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
 <hr />
 <!-- ==================== NESTED CLASSES ==================== -->
@@ -89,10 +84,13 @@
   </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.LGMap.MapType-class.html" class="summary-name">MapType</a>
+    <td class="summary" colspan="2">
+        <a href="petsc4py.PETSc.LGMap.MapMode-class.html" class="summary-name">MapMode</a>
+    </td>
+  </tr>
+<tr>
+    <td class="summary" colspan="2">
+        <a href="petsc4py.PETSc.LGMap.Type-class.html" class="summary-name">Type</a>
     </td>
   </tr>
 </table>
@@ -190,7 +188,7 @@
         <tr>
           <td><span class="summary-sig"><a name="applyBlockInverse"></a><span class="summary-sig-name">applyBlockInverse</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">indices</span>,
-        <span class="summary-sig-arg">map_type</span>=<span class="summary-sig-default">None</span>)</span></td>
+        <span class="summary-sig-arg">mode</span>=<span class="summary-sig-default">None</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -225,7 +223,7 @@
         <tr>
           <td><span class="summary-sig"><a name="applyInverse"></a><span class="summary-sig-name">applyInverse</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">indices</span>,
-        <span class="summary-sig-arg">map_type</span>=<span class="summary-sig-default">None</span>)</span></td>
+        <span class="summary-sig-arg">mode</span>=<span class="summary-sig-default">None</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -407,6 +405,39 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a href="petsc4py.PETSc.LGMap-class.html#setFromOptions" class="summary-sig-name">setFromOptions</a>(<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="setType"></a><span class="summary-sig-name">setType</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">lgmap_type</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.LGMap-class.html#view" class="summary-sig-name">view</a>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">Viewer viewer</span>=<span class="summary-sig-default">None</span>)</span></td>
           <td align="right" valign="top">
@@ -446,25 +477,11 @@
       <code><a href="petsc4py.PETSc.Object-class.html#incrementTabLevel">incrementTabLevel</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#query">query</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setAttr">setAttr</a></code>,
-      <code><a href="petsc4py.PETSc.Object-class.html#setFromOptions">setFromOptions</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setName">setName</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setOptionsPrefix">setOptionsPrefix</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setTabLevel">setTabLevel</a></code>,
-      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>
-      </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
+      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>,
+      <code><a href="petsc4py.PETSc.Object-class.html#viewFromOptions">viewFromOptions</a></code>
       </p>
     </td>
   </tr>
@@ -541,9 +558,6 @@
       <code><a href="petsc4py.PETSc.Object-class.html#refcount">refcount</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#type">type</a></code>
       </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
     </td>
   </tr>
 </table>
@@ -584,7 +598,7 @@
   <dl class="fields">
     <dt>Returns: a new object with type S, a subtype of T</dt>
     <dt>Overrides:
-        object.__new__
+        <a href="petsc4py.PETSc.Object-class.html#__new__">Object.__new__</a>
     </dt>
   </dl>
 </td></tr></table>
@@ -611,6 +625,28 @@
   </dl>
 </td></tr></table>
 </div>
+<a name="setFromOptions"></a>
+<div>
+<table class="details" border="1" cellpadding="3"
+       cellspacing="0" width="100%" bgcolor="white">
+<tr><td>
+  <table width="100%" cellpadding="0" cellspacing="0" border="0">
+  <tr valign="top"><td>
+  <h3 class="epydoc"><span class="sig"><span class="sig-name">setFromOptions</span>(<span class="sig-arg">self</span>)</span>
+  </h3>
+  </td><td align="right" valign="top"
+    > 
+    </td>
+  </tr></table>
+  
+  
+  <dl class="fields">
+    <dt>Overrides:
+        <a href="petsc4py.PETSc.Object-class.html#setFromOptions">Object.setFromOptions</a>
+    </dt>
+  </dl>
+</td></tr></table>
+</div>
 <a name="view"></a>
 <div>
 <table class="details" border="1" cellpadding="3"
@@ -666,7 +702,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:48 2016
+    Generated by Epydoc 3.0.1
     </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.MapMode-class.html
similarity index 64%
copy from docs/apiref/petsc4py.PETSc.LGMap.MapType-class.html
copy to docs/apiref/petsc4py.PETSc.LGMap.MapMode-class.html
index ceee697..7f98a59 100644
--- a/docs/apiref/petsc4py.PETSc.LGMap.MapType-class.html
+++ b/docs/apiref/petsc4py.PETSc.LGMap.MapMode-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.LGMap.MapType</title>
+  <title>petsc4py.PETSc.LGMap.MapMode</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.LGMap-class.html">Class LGMap</a> ::
-        Class MapType
+        Class MapMode
       </span>
     </td>
     <td>
@@ -55,59 +55,18 @@
     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.LGMap.MapType-class.html"
+            >] | <a href="petsc4py.PETSc.LGMap.MapMode-class.html"
             target="_top">no frames</a>]</span></td></tr>
       </table>
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class MapType</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type MapMode</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,5,81,31"/>
-</map>
-  <img src="class_hierarchy_for_maptype.png" alt='' usemap="#class_hierarchy_for_maptype" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -143,32 +102,7 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="__qualname__"></a><span class="summary-name">__qualname__</span> = <code title="'GLMapType'"><code class="variable-quote">'</code><code class="variable-string">GLMapType</code><code class="variable-quote">'</code></code>
-    </td>
-  </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
+        <a name="__qualname__"></a><span class="summary-name">__qualname__</span> = <code title="'GLMapMode'"><code class="variable-quote">'</code><code class="variable-string">GLMapMode</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
 </table>
@@ -203,7 +137,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:48 2016
+    Generated by Epydoc 3.0.1
     </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.Type-class.html
similarity index 62%
rename from docs/apiref/petsc4py.PETSc.LGMap.MapType-class.html
rename to docs/apiref/petsc4py.PETSc.LGMap.Type-class.html
index ceee697..f0dc2e4 100644
--- a/docs/apiref/petsc4py.PETSc.LGMap.MapType-class.html
+++ b/docs/apiref/petsc4py.PETSc.LGMap.Type-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.LGMap.MapType</title>
+  <title>petsc4py.PETSc.LGMap.Type</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.LGMap-class.html">Class LGMap</a> ::
-        Class MapType
+        Class Type
       </span>
     </td>
     <td>
@@ -55,59 +55,18 @@
     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.LGMap.MapType-class.html"
+            >] | <a href="petsc4py.PETSc.LGMap.Type-class.html"
             target="_top">no frames</a>]</span></td></tr>
       </table>
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class MapType</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type Type</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,5,81,31"/>
-</map>
-  <img src="class_hierarchy_for_maptype.png" alt='' usemap="#class_hierarchy_for_maptype" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -129,46 +88,21 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="DROP"></a><span class="summary-name">DROP</span> = <code title="1">1</code>
+        <a name="BASIC"></a><span class="summary-name">BASIC</span> = <code title="'basic'"><code class="variable-quote">'</code><code class="variable-string">basic</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="MASK"></a><span class="summary-name">MASK</span> = <code title="0">0</code>
+        <a name="HASH"></a><span class="summary-name">HASH</span> = <code title="'hash'"><code class="variable-quote">'</code><code class="variable-string">hash</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="'GLMapType'"><code class="variable-quote">'</code><code class="variable-string">GLMapType</code><code class="variable-quote">'</code></code>
-    </td>
-  </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
+        <a name="__qualname__"></a><span class="summary-name">__qualname__</span> = <code title="'LGMapType'"><code class="variable-quote">'</code><code class="variable-string">LGMapType</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
 </table>
@@ -203,7 +137,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:48 2016
+    Generated by Epydoc 3.0.1
     </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 4d203a2..78ee660 100644
--- a/docs/apiref/petsc4py.PETSc.Log-class.html
+++ b/docs/apiref/petsc4py.PETSc.Log-class.html
@@ -60,14 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Log</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,48,31"/>
-</map>
-  <img src="class_hierarchy_for_log.png" alt='' usemap="#class_hierarchy_for_log" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
 <!-- ==================== INSTANCE METHODS ==================== -->
@@ -288,49 +284,6 @@
       
     </td>
   </tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
 </table>
 <!-- ==================== METHOD DETAILS ==================== -->
 <a name="section-MethodDetails"></a>
@@ -406,7 +359,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:48 2016
+    Generated by Epydoc 3.0.1
     </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 eb45180..2df1aee 100644
--- a/docs/apiref/petsc4py.PETSc.LogClass-class.html
+++ b/docs/apiref/petsc4py.PETSc.LogClass-class.html
@@ -60,14 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class LogClass</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,83,31"/>
-</map>
-  <img src="class_hierarchy_for_logclass.png" alt='' usemap="#class_hierarchy_for_logclass" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
 <!-- ==================== INSTANCE METHODS ==================== -->
@@ -217,24 +213,6 @@
       
     </td>
   </tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
 </table>
 <!-- ==================== PROPERTIES ==================== -->
 <a name="section-Properties"></a>
@@ -274,13 +252,6 @@
         <a name="name"></a><span class="summary-name">name</span>
     </td>
   </tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
 </table>
 <!-- ==================== METHOD DETAILS ==================== -->
 <a name="section-MethodDetails"></a>
@@ -356,7 +327,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:48 2016
+    Generated by Epydoc 3.0.1
     </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 47a7e3a..d02a8a4 100644
--- a/docs/apiref/petsc4py.PETSc.LogEvent-class.html
+++ b/docs/apiref/petsc4py.PETSc.LogEvent-class.html
@@ -60,14 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class LogEvent</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,83,31"/>
-</map>
-  <img src="class_hierarchy_for_logevent.png" alt='' usemap="#class_hierarchy_for_logevent" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
 <!-- ==================== INSTANCE METHODS ==================== -->
@@ -370,24 +366,6 @@
       
     </td>
   </tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
 </table>
 <!-- ==================== PROPERTIES ==================== -->
 <a name="section-Properties"></a>
@@ -434,13 +412,6 @@
         <a name="name"></a><span class="summary-name">name</span>
     </td>
   </tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
 </table>
 <!-- ==================== METHOD DETAILS ==================== -->
 <a name="section-MethodDetails"></a>
@@ -516,7 +487,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:48 2016
+    Generated by Epydoc 3.0.1
     </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 0401b9b..f95608b 100644
--- a/docs/apiref/petsc4py.PETSc.LogStage-class.html
+++ b/docs/apiref/petsc4py.PETSc.LogStage-class.html
@@ -60,14 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class LogStage</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,83,31"/>
-</map>
-  <img src="class_hierarchy_for_logstage.png" alt='' usemap="#class_hierarchy_for_logstage" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
 <!-- ==================== INSTANCE METHODS ==================== -->
@@ -315,24 +311,6 @@
       
     </td>
   </tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
 </table>
 <!-- ==================== PROPERTIES ==================== -->
 <a name="section-Properties"></a>
@@ -379,13 +357,6 @@
         <a name="visible"></a><span class="summary-name">visible</span>
     </td>
   </tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
 </table>
 <!-- ==================== METHOD DETAILS ==================== -->
 <a name="section-MethodDetails"></a>
@@ -461,7 +432,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:48 2016
+    Generated by Epydoc 3.0.1
     </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 cc64f95..446eed5 100644
--- a/docs/apiref/petsc4py.PETSc.Mat-class.html
+++ b/docs/apiref/petsc4py.PETSc.Mat-class.html
@@ -60,15 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Mat</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
 <hr />
 <!-- ==================== NESTED CLASSES ==================== -->
@@ -89,65 +84,47 @@
   </td>
 </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.Mat.AssemblyType-class.html" class="summary-name">AssemblyType</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.Mat.FactorShiftType-class.html" class="summary-name">FactorShiftType</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <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">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.Mat.Option-class.html" class="summary-name">Option</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.Mat.OrderingType-class.html" class="summary-name">OrderingType</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.Mat.SORType-class.html" class="summary-name">SORType</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc._Mat_Stencil-class.html" class="summary-name">Stencil</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.Mat.Structure-class.html" class="summary-name">Structure</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.Mat.Type-class.html" class="summary-name">Type</a>
     </td>
   </tr>
@@ -175,6 +152,25 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="PtAP"></a><span class="summary-sig-name">PtAP</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">Mat P</span>,
+        <span class="summary-sig-arg">Mat result</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">fill</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="SOR"></a><span class="summary-sig-name">SOR</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">Vec b</span>,
         <span class="summary-sig-arg">Vec x</span>,
@@ -854,6 +850,7 @@
           <td><span class="summary-sig"><a name="createLRC"></a><span class="summary-sig-name">createLRC</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">Mat A</span>,
         <span class="summary-sig-arg">Mat U</span>,
+        <span class="summary-sig-arg">Vec c</span>,
         <span class="summary-sig-arg">Mat V</span>)</span></td>
           <td align="right" valign="top">
             
@@ -965,7 +962,45 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="createSubMatrices"></a><span class="summary-sig-name">createSubMatrices</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="createSubMatrix"></a><span class="summary-sig-name">createSubMatrix</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>,
+        <span class="summary-sig-arg">Mat submat</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="createSubMatrixVirtual"></a><span class="summary-sig-name">createSubMatrixVirtual</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">Mat A</span>,
         <span class="summary-sig-arg">IS isrow</span>,
         <span class="summary-sig-arg">IS iscol</span>=<span class="summary-sig-default">None</span>)</span></td>
@@ -1469,6 +1504,38 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="getLGMap"></a><span class="summary-sig-name">getLGMap</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="getLRCMats"></a><span class="summary-sig-name">getLRCMats</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="getLocalSize"></a><span class="summary-sig-name">getLocalSize</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -1870,29 +1937,7 @@
     </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>,
-        <span class="summary-sig-arg">Mat submat</span>=<span class="summary-sig-default">None</span>)</span></td>
+          <td><span class="summary-sig"><a name="getTransposeNullSpace"></a><span class="summary-sig-name">getTransposeNullSpace</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -2850,6 +2895,23 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="setTransposeNullSpace"></a><span class="summary-sig-name">setTransposeNullSpace</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">NullSpace nsp</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">mat_type</span>)</span></td>
           <td align="right" valign="top">
@@ -3597,21 +3659,8 @@
       <code><a href="petsc4py.PETSc.Object-class.html#setAttr">setAttr</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setName">setName</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setTabLevel">setTabLevel</a></code>,
-      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>
-      </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
+      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>,
+      <code><a href="petsc4py.PETSc.Object-class.html#viewFromOptions">viewFromOptions</a></code>
       </p>
     </td>
   </tr>
@@ -3723,9 +3772,6 @@
       <code><a href="petsc4py.PETSc.Object-class.html#refcount">refcount</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#type">type</a></code>
       </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
     </td>
   </tr>
 </table>
@@ -3766,7 +3812,7 @@
   <dl class="fields">
     <dt>Returns: a new object with type S, a subtype of T</dt>
     <dt>Overrides:
-        object.__new__
+        <a href="petsc4py.PETSc.Object-class.html#__new__">Object.__new__</a>
     </dt>
   </dl>
 </td></tr></table>
@@ -3937,7 +3983,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:48 2016
+    Generated by Epydoc 3.0.1
     </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 fa3577e..5cefd9b 100644
--- a/docs/apiref/petsc4py.PETSc.Mat.AssemblyType-class.html
+++ b/docs/apiref/petsc4py.PETSc.Mat.AssemblyType-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class AssemblyType</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,115,31"/>
-</map>
-  <img src="class_hierarchy_for_assemblyty.png" alt='' usemap="#class_hierarchy_for_assemblyty" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -161,31 +120,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -217,7 +151,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:48 2016
+    Generated by Epydoc 3.0.1
     </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 af9befd..e03e01a 100644
--- a/docs/apiref/petsc4py.PETSc.Mat.FactorShiftType-class.html
+++ b/docs/apiref/petsc4py.PETSc.Mat.FactorShiftType-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class FactorShiftType</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,120,31"/>
-</map>
-  <img src="class_hierarchy_for_factorshif.png" alt='' usemap="#class_hierarchy_for_factorshif" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -175,31 +134,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -231,7 +165,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:48 2016
+    Generated by Epydoc 3.0.1
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.Mat.InfoType-class.html b/docs/apiref/petsc4py.PETSc.Mat.InfoType-class.html
index deda331..46c64d5 100644
--- a/docs/apiref/petsc4py.PETSc.Mat.InfoType-class.html
+++ b/docs/apiref/petsc4py.PETSc.Mat.InfoType-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class InfoType</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type InfoType</h1><p class="nomargin-top"></p>
 <center>
-<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_infotype.png" alt='' usemap="#class_hierarchy_for_infotype" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -154,31 +113,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -210,7 +144,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:48 2016
+    Generated by Epydoc 3.0.1
     </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 42ee539..2c62748 100644
--- a/docs/apiref/petsc4py.PETSc.Mat.Option-class.html
+++ b/docs/apiref/petsc4py.PETSc.Mat.Option-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Option</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,65,31"/>
-</map>
-  <img src="class_hierarchy_for_option.png" alt='' usemap="#class_hierarchy_for_option" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -287,31 +246,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -343,7 +277,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:48 2016
+    Generated by Epydoc 3.0.1
     </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 859841c..e6a9c8f 100644
--- a/docs/apiref/petsc4py.PETSc.Mat.OrderingType-class.html
+++ b/docs/apiref/petsc4py.PETSc.Mat.OrderingType-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class OrderingType</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,105,31"/>
-</map>
-  <img src="class_hierarchy_for_orderingty.png" alt='' usemap="#class_hierarchy_for_orderingty" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -196,31 +155,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -252,7 +186,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:48 2016
+    Generated by Epydoc 3.0.1
     </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 7740b30..356bd08 100644
--- a/docs/apiref/petsc4py.PETSc.Mat.SORType-class.html
+++ b/docs/apiref/petsc4py.PETSc.Mat.SORType-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class SORType</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,85,31"/>
-</map>
-  <img src="class_hierarchy_for_sortype.png" alt='' usemap="#class_hierarchy_for_sortype" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -203,31 +162,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -259,7 +193,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:48 2016
+    Generated by Epydoc 3.0.1
     </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 38dfefc..ee4af59 100644
--- a/docs/apiref/petsc4py.PETSc.Mat.Structure-class.html
+++ b/docs/apiref/petsc4py.PETSc.Mat.Structure-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Structure</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,80,31"/>
-</map>
-  <img src="class_hierarchy_for_structure.png" alt='' usemap="#class_hierarchy_for_structure" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -196,31 +155,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -252,7 +186,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:49 2016
+    Generated by Epydoc 3.0.1
     </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 6f901c3..29ce995 100644
--- a/docs/apiref/petsc4py.PETSc.Mat.Type-class.html
+++ b/docs/apiref/petsc4py.PETSc.Mat.Type-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Type</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,56,31"/>
-</map>
-  <img src="class_hierarchy_for_type_5.png" alt='' usemap="#class_hierarchy_for_type_5" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -185,13 +144,6 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="BSTRM"></a><span class="summary-name">BSTRM</span> = <code title="'bstrm'"><code class="variable-quote">'</code><code class="variable-string">bstrm</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="COMPOSITE"></a><span class="summary-name">COMPOSITE</span> = <code title="'composite'"><code class="variable-quote">'</code><code class="variable-string">composite</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -339,13 +291,6 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="MPIBSTRM"></a><span class="summary-name">MPIBSTRM</span> = <code title="'mpibstrm'"><code class="variable-quote">'</code><code class="variable-string">mpibstrm</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="MPIDENSE"></a><span class="summary-name">MPIDENSE</span> = <code title="'mpidense'"><code class="variable-quote">'</code><code class="variable-string">mpidense</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -367,13 +312,6 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="MPISBSTRM"></a><span class="summary-name">MPISBSTRM</span> = <code title="'mpisbstrm'"><code class="variable-quote">'</code><code class="variable-string">mpisbstrm</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="NEST"></a><span class="summary-name">NEST</span> = <code title="'nest'"><code class="variable-quote">'</code><code class="variable-string">nest</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -423,13 +361,6 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="SBSTRM"></a><span class="summary-name">SBSTRM</span> = <code title="'sbstrm'"><code class="variable-quote">'</code><code class="variable-string">sbstrm</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="SCATTER"></a><span class="summary-name">SCATTER</span> = <code title="'scatter'"><code class="variable-quote">'</code><code class="variable-string">scatter</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -493,13 +424,6 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="SEQBSTRM"></a><span class="summary-name">SEQBSTRM</span> = <code title="'seqbstrm'"><code class="variable-quote">'</code><code class="variable-string">seqbstrm</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="SEQCUFFT"></a><span class="summary-name">SEQCUFFT</span> = <code title="'seqcufft'"><code class="variable-quote">'</code><code class="variable-string">seqcufft</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -528,13 +452,6 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="SEQSBSTRM"></a><span class="summary-name">SEQSBSTRM</span> = <code title="'seqsbstrm'"><code class="variable-quote">'</code><code class="variable-string">seqsbstrm</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="SHELL"></a><span class="summary-name">SHELL</span> = <code title="'shell'"><code class="variable-quote">'</code><code class="variable-string">shell</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -560,31 +477,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -616,7 +508,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:49 2016
+    Generated by Epydoc 3.0.1
     </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 1a77935..3940d0b 100644
--- a/docs/apiref/petsc4py.PETSc.NormType-class.html
+++ b/docs/apiref/petsc4py.PETSc.NormType-class.html
@@ -60,53 +60,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class NormType</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -230,31 +189,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -286,7 +220,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:49 2016
+    Generated by Epydoc 3.0.1
     </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 ab70470..ea0eae0 100644
--- a/docs/apiref/petsc4py.PETSc.NullSpace-class.html
+++ b/docs/apiref/petsc4py.PETSc.NullSpace-class.html
@@ -60,15 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class NullSpace</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
 <hr />
 <!-- ==================== INSTANCE METHODS ==================== -->
@@ -263,6 +258,23 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="test"></a><span class="summary-sig-name">test</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 href="petsc4py.PETSc.NullSpace-class.html#view" class="summary-sig-name">view</a>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">Viewer viewer</span>=<span class="summary-sig-default">None</span>)</span></td>
           <td align="right" valign="top">
@@ -306,21 +318,8 @@
       <code><a href="petsc4py.PETSc.Object-class.html#setName">setName</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setOptionsPrefix">setOptionsPrefix</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setTabLevel">setTabLevel</a></code>,
-      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>
-      </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
+      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>,
+      <code><a href="petsc4py.PETSc.Object-class.html#viewFromOptions">viewFromOptions</a></code>
       </p>
     </td>
   </tr>
@@ -355,9 +354,6 @@
       <code><a href="petsc4py.PETSc.Object-class.html#refcount">refcount</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#type">type</a></code>
       </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
     </td>
   </tr>
 </table>
@@ -398,7 +394,7 @@
   <dl class="fields">
     <dt>Returns: a new object with type S, a subtype of T</dt>
     <dt>Overrides:
-        object.__new__
+        <a href="petsc4py.PETSc.Object-class.html#__new__">Object.__new__</a>
     </dt>
   </dl>
 </td></tr></table>
@@ -480,7 +476,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:49 2016
+    Generated by Epydoc 3.0.1
     </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 f03dfb1..469958e 100644
--- a/docs/apiref/petsc4py.PETSc.Object-class.html
+++ b/docs/apiref/petsc4py.PETSc.Object-class.html
@@ -60,38 +60,17 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Object</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
+<dl><dt>Known Subclasses:</dt>
+<dd>
+      <ul class="subclass-list">
+<li><a href="petsc4py.PETSc.AO-class.html">AO</a></li><li>, <a href="petsc4py.PETSc.DM-class.html">DM</a></li><li>, <a href="petsc4py.PETSc.IS-class.html">IS</a></li><li>, <a href="petsc4py.PETSc.KSP-class.html">KSP</a></li><li>, <a href="petsc4py.PETSc.LGMap-class.html">LGMap</a></li><li>, <a href="petsc4py.PETSc.Mat-class.html">Mat</a></li><li>, <a href="petsc4py.PETSc.NullSpace-class.html">NullSpace</a></li><li>, <a href="petsc4py.PETSc.PC-class.html">PC</a></li><li>, <a href="petsc4p [...]
+</dd></dl>
+
 <hr />
 <!-- ==================== INSTANCE METHODS ==================== -->
 <a name="section-InstanceMethods"></a>
@@ -659,22 +638,22 @@
       
     </td>
   </tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
+      <table width="100%" cellpadding="0" cellspacing="0" border="0">
+        <tr>
+          <td><span class="summary-sig"><a name="viewFromOptions"></a><span class="summary-sig-name">viewFromOptions</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">name</span>,
+        <span class="summary-sig-arg">Object prefix</span>=<span class="summary-sig-default">None</span>)</span></td>
+          <td align="right" valign="top">
+            
+            
+          </td>
+        </tr>
+      </table>
+      
     </td>
   </tr>
 </table>
@@ -758,13 +737,6 @@
         <a name="type"></a><span class="summary-name">type</span>
     </td>
   </tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
 </table>
 <!-- ==================== METHOD DETAILS ==================== -->
 <a name="section-MethodDetails"></a>
@@ -840,7 +812,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:49 2016
+    Generated by Epydoc 3.0.1
     </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 191e92d..d1baaad 100644
--- a/docs/apiref/petsc4py.PETSc.Options-class.html
+++ b/docs/apiref/petsc4py.PETSc.Options-class.html
@@ -60,14 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Options</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,72,31"/>
-</map>
-  <img src="class_hierarchy_for_options.png" alt='' usemap="#class_hierarchy_for_options" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
 Options(prefix=None)
@@ -464,23 +460,6 @@ Options(prefix=None)
       
     </td>
   </tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
 </table>
 <!-- ==================== PROPERTIES ==================== -->
 <a name="section-Properties"></a>
@@ -506,13 +485,6 @@ Options(prefix=None)
         <a name="prefix"></a><span class="summary-name">prefix</span>
     </td>
   </tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
 </table>
 <!-- ==================== METHOD DETAILS ==================== -->
 <a name="section-MethodDetails"></a>
@@ -611,7 +583,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 May  1 16:53:49 2016
+    Generated by Epydoc 3.0.1
     </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 4738e5c..04a7491 100644
--- a/docs/apiref/petsc4py.PETSc.PC-class.html
+++ b/docs/apiref/petsc4py.PETSc.PC-class.html
@@ -60,15 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class PC</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
 <hr />
 <!-- ==================== NESTED CLASSES ==================== -->
@@ -89,65 +84,52 @@
   </td>
 </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.PC.ASMType-class.html" class="summary-name">ASMType</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.PC.CompositeType-class.html" class="summary-name">CompositeType</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.PC.GAMGType-class.html" class="summary-name">GAMGType</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.PC.GASMType-class.html" class="summary-name">GASMType</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
+        <a href="petsc4py.PETSc.PC.MGCycleType-class.html" class="summary-name">MGCycleType</a>
+    </td>
+  </tr>
+<tr>
+    <td class="summary" colspan="2">
         <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">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.PC.SchurFactType-class.html" class="summary-name">SchurFactType</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.PC.SchurPreType-class.html" class="summary-name">SchurPreType</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.PC.Side-class.html" class="summary-name">Side</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.PC.Type-class.html" class="summary-name">Type</a>
     </td>
   </tr>
@@ -1207,9 +1189,26 @@
     </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>,
+          <td><span class="summary-sig"><a name="setMGCycleType"></a><span class="summary-sig-name">setMGCycleType</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">cycle_type</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="setMGCycleTypeOnLevel"></a><span class="summary-sig-name">setMGCycleTypeOnLevel</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">level</span>,
-        <span class="summary-sig-arg">ncycle</span>)</span></td>
+        <span class="summary-sig-arg">cycle_type</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -1541,21 +1540,8 @@
       <code><a href="petsc4py.PETSc.Object-class.html#setAttr">setAttr</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setName">setName</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setTabLevel">setTabLevel</a></code>,
-      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>
-      </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
+      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>,
+      <code><a href="petsc4py.PETSc.Object-class.html#viewFromOptions">viewFromOptions</a></code>
       </p>
     </td>
   </tr>
@@ -1590,9 +1576,6 @@
       <code><a href="petsc4py.PETSc.Object-class.html#refcount">refcount</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#type">type</a></code>
       </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
     </td>
   </tr>
 </table>
@@ -1633,7 +1616,7 @@
   <dl class="fields">
     <dt>Returns: a new object with type S, a subtype of T</dt>
     <dt>Overrides:
-        object.__new__
+        <a href="petsc4py.PETSc.Object-class.html#__new__">Object.__new__</a>
     </dt>
   </dl>
 </td></tr></table>
@@ -1804,7 +1787,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:49 2016
+    Generated by Epydoc 3.0.1
     </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 bc161e8..84a4e35 100644
--- a/docs/apiref/petsc4py.PETSc.PC.ASMType-class.html
+++ b/docs/apiref/petsc4py.PETSc.PC.ASMType-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class ASMType</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,85,31"/>
-</map>
-  <img src="class_hierarchy_for_asmtype.png" alt='' usemap="#class_hierarchy_for_asmtype" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -161,31 +120,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -217,7 +151,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:49 2016
+    Generated by Epydoc 3.0.1
     </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 34b551f..04762c8 100644
--- a/docs/apiref/petsc4py.PETSc.PC.CompositeType-class.html
+++ b/docs/apiref/petsc4py.PETSc.PC.CompositeType-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class CompositeType</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,120,31"/>
-</map>
-  <img src="class_hierarchy_for_compositet.png" alt='' usemap="#class_hierarchy_for_compositet" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -168,31 +127,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -224,7 +158,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:49 2016
+    Generated by Epydoc 3.0.1
     </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 e9fc255..ac4f940 100644
--- a/docs/apiref/petsc4py.PETSc.PC.GAMGType-class.html
+++ b/docs/apiref/petsc4py.PETSc.PC.GAMGType-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class GAMGType</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,96,31"/>
-</map>
-  <img src="class_hierarchy_for_gamgtype.png" alt='' usemap="#class_hierarchy_for_gamgtype" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -154,31 +113,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -210,7 +144,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:49 2016
+    Generated by Epydoc 3.0.1
     </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 ccc1116..8228144 100644
--- a/docs/apiref/petsc4py.PETSc.PC.GASMType-class.html
+++ b/docs/apiref/petsc4py.PETSc.PC.GASMType-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class GASMType</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,96,31"/>
-</map>
-  <img src="class_hierarchy_for_gasmtype.png" alt='' usemap="#class_hierarchy_for_gasmtype" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -161,31 +120,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -217,7 +151,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:49 2016
+    Generated by Epydoc 3.0.1
     </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.PC.MGCycleType-class.html
similarity index 61%
copy from docs/apiref/petsc4py.PETSc.TS.ProblemType-class.html
copy to docs/apiref/petsc4py.PETSc.PC.MGCycleType-class.html
index b1840db..dc6e163 100644
--- a/docs/apiref/petsc4py.PETSc.TS.ProblemType-class.html
+++ b/docs/apiref/petsc4py.PETSc.PC.MGCycleType-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.ProblemType</title>
+  <title>petsc4py.PETSc.PC.MGCycleType</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 ProblemType
+        <a href="petsc4py.PETSc.PC-class.html">Class PC</a> ::
+        Class MGCycleType
       </span>
     </td>
     <td>
@@ -55,59 +55,18 @@
     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.ProblemType-class.html"
+            >] | <a href="petsc4py.PETSc.PC.MGCycleType-class.html"
             target="_top">no frames</a>]</span></td></tr>
       </table>
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class ProblemType</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type MGCycleType</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,5,104,31"/>
-</map>
-  <img src="class_hierarchy_for_problemtyp.png" alt='' usemap="#class_hierarchy_for_problemtyp" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -129,46 +88,21 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="LINEAR"></a><span class="summary-name">LINEAR</span> = <code title="0">0</code>
+        <a name="V"></a><span class="summary-name">V</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="NONLINEAR"></a><span class="summary-name">NONLINEAR</span> = <code title="1">1</code>
+        <a name="W"></a><span class="summary-name">W</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="__qualname__"></a><span class="summary-name">__qualname__</span> = <code title="'TSProblemType'"><code class="variable-quote">'</code><code class="variable-string">TSProblemType</code><code class="variable-quote">'</code></code>
-    </td>
-  </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
+        <a name="__qualname__"></a><span class="summary-name">__qualname__</span> = <code title="'PCMGCycleType'"><code class="variable-quote">'</code><code class="variable-string">PCMGCycleType</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
 </table>
@@ -203,7 +137,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:51 2016
+    Generated by Epydoc 3.0.1
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.PC.MGType-class.html b/docs/apiref/petsc4py.PETSc.PC.MGType-class.html
index c6c3dd0..95769de 100644
--- a/docs/apiref/petsc4py.PETSc.PC.MGType-class.html
+++ b/docs/apiref/petsc4py.PETSc.PC.MGType-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class MGType</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type MGType</h1><p class="nomargin-top"></p>
 <center>
-<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_mgtype.png" alt='' usemap="#class_hierarchy_for_mgtype" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -161,31 +120,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -217,7 +151,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:49 2016
+    Generated by Epydoc 3.0.1
     </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 b9c3d2f..45906a1 100644
--- a/docs/apiref/petsc4py.PETSc.PC.SchurFactType-class.html
+++ b/docs/apiref/petsc4py.PETSc.PC.SchurFactType-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class SchurFactType</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,116,31"/>
-</map>
-  <img src="class_hierarchy_for_schurfactt.png" alt='' usemap="#class_hierarchy_for_schurfactt" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -161,31 +120,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -217,7 +151,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:49 2016
+    Generated by Epydoc 3.0.1
     </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 a14239b..8e9b90f 100644
--- a/docs/apiref/petsc4py.PETSc.PC.SchurPreType-class.html
+++ b/docs/apiref/petsc4py.PETSc.PC.SchurPreType-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class SchurPreType</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,111,31"/>
-</map>
-  <img src="class_hierarchy_for_schurprety.png" alt='' usemap="#class_hierarchy_for_schurprety" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -168,31 +127,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -224,7 +158,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
+    Generated by Epydoc 3.0.1
     </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 8128eaa..8332d79 100644
--- a/docs/apiref/petsc4py.PETSc.PC.Side-class.html
+++ b/docs/apiref/petsc4py.PETSc.PC.Side-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Side</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,53,31"/>
-</map>
-  <img src="class_hierarchy_for_side.png" alt='' usemap="#class_hierarchy_for_side" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -175,31 +134,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -231,7 +165,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
+    Generated by Epydoc 3.0.1
     </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 c96cbf4..b9bd85f 100644
--- a/docs/apiref/petsc4py.PETSc.PC.Type-class.html
+++ b/docs/apiref/petsc4py.PETSc.PC.Type-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Type</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -434,31 +393,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -490,7 +424,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
+    Generated by Epydoc 3.0.1
     </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 b0b9e28..4be8697 100644
--- a/docs/apiref/petsc4py.PETSc.Partitioner-class.html
+++ b/docs/apiref/petsc4py.PETSc.Partitioner-class.html
@@ -60,15 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Partitioner</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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="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>
+
 </center>
 <hr />
 <!-- ==================== NESTED CLASSES ==================== -->
@@ -89,9 +84,7 @@
   </td>
 </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.PartitionerType-class.html" class="summary-name">Type</a>
     </td>
   </tr>
@@ -294,21 +287,8 @@
       <code><a href="petsc4py.PETSc.Object-class.html#setName">setName</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setOptionsPrefix">setOptionsPrefix</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setTabLevel">setTabLevel</a></code>,
-      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>
-      </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
+      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>,
+      <code><a href="petsc4py.PETSc.Object-class.html#viewFromOptions">viewFromOptions</a></code>
       </p>
     </td>
   </tr>
@@ -343,9 +323,6 @@
       <code><a href="petsc4py.PETSc.Object-class.html#refcount">refcount</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#type">type</a></code>
       </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
     </td>
   </tr>
 </table>
@@ -386,7 +363,7 @@
   <dl class="fields">
     <dt>Returns: a new object with type S, a subtype of T</dt>
     <dt>Overrides:
-        object.__new__
+        <a href="petsc4py.PETSc.Object-class.html#__new__">Object.__new__</a>
     </dt>
   </dl>
 </td></tr></table>
@@ -512,7 +489,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
+    Generated by Epydoc 3.0.1
     </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 2a04dbc..2f6bf32 100644
--- a/docs/apiref/petsc4py.PETSc.PartitionerType-class.html
+++ b/docs/apiref/petsc4py.PETSc.PartitionerType-class.html
@@ -60,53 +60,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class PartitionerType</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -153,31 +112,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -209,7 +143,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
+    Generated by Epydoc 3.0.1
     </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 410088b..204ab05 100644
--- a/docs/apiref/petsc4py.PETSc.Random-class.html
+++ b/docs/apiref/petsc4py.PETSc.Random-class.html
@@ -60,15 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Random</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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="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>
+
 </center>
 <hr />
 <!-- ==================== NESTED CLASSES ==================== -->
@@ -89,9 +84,7 @@
   </td>
 </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.Random.Type-class.html" class="summary-name">Type</a>
     </td>
   </tr>
@@ -373,21 +366,8 @@
       <code><a href="petsc4py.PETSc.Object-class.html#setName">setName</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setOptionsPrefix">setOptionsPrefix</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setTabLevel">setTabLevel</a></code>,
-      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>
-      </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
+      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>,
+      <code><a href="petsc4py.PETSc.Object-class.html#viewFromOptions">viewFromOptions</a></code>
       </p>
     </td>
   </tr>
@@ -436,9 +416,6 @@
       <code><a href="petsc4py.PETSc.Object-class.html#refcount">refcount</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#type">type</a></code>
       </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
     </td>
   </tr>
 </table>
@@ -479,7 +456,7 @@
   <dl class="fields">
     <dt>Returns: a new object with type S, a subtype of T</dt>
     <dt>Overrides:
-        object.__new__
+        <a href="petsc4py.PETSc.Object-class.html#__new__">Object.__new__</a>
     </dt>
   </dl>
 </td></tr></table>
@@ -605,7 +582,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
+    Generated by Epydoc 3.0.1
     </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 121f39e..bbbec4c 100644
--- a/docs/apiref/petsc4py.PETSc.Random.Type-class.html
+++ b/docs/apiref/petsc4py.PETSc.Random.Type-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Type</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -161,31 +120,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -217,7 +151,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
+    Generated by Epydoc 3.0.1
     </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 55eee29..2f3010b 100644
--- a/docs/apiref/petsc4py.PETSc.SF-class.html
+++ b/docs/apiref/petsc4py.PETSc.SF-class.html
@@ -60,15 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class SF</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
 <hr />
 <!-- ==================== NESTED CLASSES ==================== -->
@@ -89,9 +84,7 @@
   </td>
 </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.SF.Type-class.html" class="summary-name">Type</a>
     </td>
   </tr>
@@ -376,21 +369,8 @@
       <code><a href="petsc4py.PETSc.Object-class.html#setName">setName</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setOptionsPrefix">setOptionsPrefix</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setTabLevel">setTabLevel</a></code>,
-      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>
-      </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
+      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>,
+      <code><a href="petsc4py.PETSc.Object-class.html#viewFromOptions">viewFromOptions</a></code>
       </p>
     </td>
   </tr>
@@ -425,9 +405,6 @@
       <code><a href="petsc4py.PETSc.Object-class.html#refcount">refcount</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#type">type</a></code>
       </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
     </td>
   </tr>
 </table>
@@ -468,7 +445,7 @@
   <dl class="fields">
     <dt>Returns: a new object with type S, a subtype of T</dt>
     <dt>Overrides:
-        object.__new__
+        <a href="petsc4py.PETSc.Object-class.html#__new__">Object.__new__</a>
     </dt>
   </dl>
 </td></tr></table>
@@ -594,7 +571,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
+    Generated by Epydoc 3.0.1
     </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 8a47236..8bfd8a3 100644
--- a/docs/apiref/petsc4py.PETSc.SF.Type-class.html
+++ b/docs/apiref/petsc4py.PETSc.SF.Type-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Type</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -147,31 +106,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -203,7 +137,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
+    Generated by Epydoc 3.0.1
     </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 387add8..794bd8f 100644
--- a/docs/apiref/petsc4py.PETSc.SNES-class.html
+++ b/docs/apiref/petsc4py.PETSc.SNES-class.html
@@ -60,15 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class SNES</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
 <hr />
 <!-- ==================== NESTED CLASSES ==================== -->
@@ -89,23 +84,17 @@
   </td>
 </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.SNES.ConvergedReason-class.html" class="summary-name">ConvergedReason</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.SNES.NormSchedule-class.html" class="summary-name">NormSchedule</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.SNES.Type-class.html" class="summary-name">Type</a>
     </td>
   </tr>
@@ -223,6 +212,24 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="computeNGS"></a><span class="summary-sig-name">computeNGS</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">Vec x</span>,
+        <span class="summary-sig-arg">Vec b</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="computeObjective"></a><span class="summary-sig-name">computeObjective</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">Vec x</span>)</span></td>
           <td align="right" valign="top">
@@ -587,6 +594,22 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="getFunctionNorm"></a><span class="summary-sig-name">getFunctionNorm</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="getInitialGuess"></a><span class="summary-sig-name">getInitialGuess</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -795,6 +818,55 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="getNASMNumber"></a><span class="summary-sig-name">getNASMNumber</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="getNASMSNES"></a><span class="summary-sig-name">getNASMSNES</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">n</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="getNGS"></a><span class="summary-sig-name">getNGS</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="getNPC"></a><span class="summary-sig-name">getNPC</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -1365,6 +1437,23 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="setFunctionNorm"></a><span class="summary-sig-name">setFunctionNorm</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">norm</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="setInitialGuess"></a><span class="summary-sig-name">setInitialGuess</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">initialguess</span>,
         <span class="summary-sig-arg">args</span>=<span class="summary-sig-default">None</span>,
@@ -1403,7 +1492,7 @@
         <tr>
           <td><span class="summary-sig"><a name="setJacobian"></a><span class="summary-sig-name">setJacobian</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">jacobian</span>,
-        <span class="summary-sig-arg">Mat J</span>,
+        <span class="summary-sig-arg">Mat J</span>=<span class="summary-sig-default">None</span>,
         <span class="summary-sig-arg">Mat P</span>=<span class="summary-sig-default">None</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>
@@ -1543,6 +1632,25 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="setNGS"></a><span class="summary-sig-name">setNGS</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">ngs</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="setNPC"></a><span class="summary-sig-name">setNPC</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">SNES snes</span>)</span></td>
           <td align="right" valign="top">
@@ -1904,21 +2012,8 @@
       <code><a href="petsc4py.PETSc.Object-class.html#setAttr">setAttr</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setName">setName</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setTabLevel">setTabLevel</a></code>,
-      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>
-      </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
+      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>,
+      <code><a href="petsc4py.PETSc.Object-class.html#viewFromOptions">viewFromOptions</a></code>
       </p>
     </td>
   </tr>
@@ -2021,6 +2116,13 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
+        <a name="norm"></a><span class="summary-name">norm</span>
+    </td>
+  </tr>
+<tr>
+    <td width="15%" align="right" valign="top" class="summary">
+      <span class="summary-type"> </span>
+    </td><td class="summary">
         <a name="npc"></a><span class="summary-name">npc</span>
     </td>
   </tr>
@@ -2100,9 +2202,6 @@
       <code><a href="petsc4py.PETSc.Object-class.html#refcount">refcount</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#type">type</a></code>
       </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
     </td>
   </tr>
 </table>
@@ -2143,7 +2242,7 @@
   <dl class="fields">
     <dt>Returns: a new object with type S, a subtype of T</dt>
     <dt>Overrides:
-        object.__new__
+        <a href="petsc4py.PETSc.Object-class.html#__new__">Object.__new__</a>
     </dt>
   </dl>
 </td></tr></table>
@@ -2314,7 +2413,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
+    Generated by Epydoc 3.0.1
     </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 a09f306..8bb7f45 100644
--- a/docs/apiref/petsc4py.PETSc.SNES.ConvergedReason-class.html
+++ b/docs/apiref/petsc4py.PETSc.SNES.ConvergedReason-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class ConvergedReason</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -231,31 +190,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -287,7 +221,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
+    Generated by Epydoc 3.0.1
     </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 d2e6a7c..b01c42c 100644
--- a/docs/apiref/petsc4py.PETSc.SNES.NormSchedule-class.html
+++ b/docs/apiref/petsc4py.PETSc.SNES.NormSchedule-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class NormSchedule</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,113,31"/>
-</map>
-  <img src="class_hierarchy_for_normschedu.png" alt='' usemap="#class_hierarchy_for_normschedu" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -217,31 +176,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -273,7 +207,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
+    Generated by Epydoc 3.0.1
     </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 707057e..ebc96f0 100644
--- a/docs/apiref/petsc4py.PETSc.SNES.Type-class.html
+++ b/docs/apiref/petsc4py.PETSc.SNES.Type-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Type</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -266,31 +225,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -322,7 +256,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
+    Generated by Epydoc 3.0.1
     </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 cd34b2e..8d4bd39 100644
--- a/docs/apiref/petsc4py.PETSc.Scatter-class.html
+++ b/docs/apiref/petsc4py.PETSc.Scatter-class.html
@@ -60,15 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Scatter</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
 <hr />
 <!-- ==================== NESTED CLASSES ==================== -->
@@ -89,9 +84,7 @@
   </td>
 </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.ScatterMode-class.html" class="summary-name">Mode</a>
     </td>
   </tr>
@@ -381,21 +374,8 @@
       <code><a href="petsc4py.PETSc.Object-class.html#setName">setName</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setOptionsPrefix">setOptionsPrefix</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setTabLevel">setTabLevel</a></code>,
-      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>
-      </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
+      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>,
+      <code><a href="petsc4py.PETSc.Object-class.html#viewFromOptions">viewFromOptions</a></code>
       </p>
     </td>
   </tr>
@@ -430,9 +410,6 @@
       <code><a href="petsc4py.PETSc.Object-class.html#refcount">refcount</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#type">type</a></code>
       </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
     </td>
   </tr>
 </table>
@@ -473,7 +450,7 @@
   <dl class="fields">
     <dt>Returns: a new object with type S, a subtype of T</dt>
     <dt>Overrides:
-        object.__new__
+        <a href="petsc4py.PETSc.Object-class.html#__new__">Object.__new__</a>
     </dt>
   </dl>
 </td></tr></table>
@@ -555,7 +532,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
+    Generated by Epydoc 3.0.1
     </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 8b098bf..f40e77a 100644
--- a/docs/apiref/petsc4py.PETSc.ScatterMode-class.html
+++ b/docs/apiref/petsc4py.PETSc.ScatterMode-class.html
@@ -60,53 +60,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class ScatterMode</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,101,31"/>
-</map>
-  <img src="class_hierarchy_for_scattermod.png" alt='' usemap="#class_hierarchy_for_scattermod" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -195,31 +154,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -251,7 +185,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
+    Generated by Epydoc 3.0.1
     </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 5fdcb8d..bac5839 100644
--- a/docs/apiref/petsc4py.PETSc.Section-class.html
+++ b/docs/apiref/petsc4py.PETSc.Section-class.html
@@ -60,15 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Section</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
 <hr />
 <!-- ==================== INSTANCE METHODS ==================== -->
@@ -778,21 +773,8 @@
       <code><a href="petsc4py.PETSc.Object-class.html#setName">setName</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setOptionsPrefix">setOptionsPrefix</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setTabLevel">setTabLevel</a></code>,
-      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>
-      </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
+      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>,
+      <code><a href="petsc4py.PETSc.Object-class.html#viewFromOptions">viewFromOptions</a></code>
       </p>
     </td>
   </tr>
@@ -827,9 +809,6 @@
       <code><a href="petsc4py.PETSc.Object-class.html#refcount">refcount</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#type">type</a></code>
       </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
     </td>
   </tr>
 </table>
@@ -870,7 +849,7 @@
   <dl class="fields">
     <dt>Returns: a new object with type S, a subtype of T</dt>
     <dt>Overrides:
-        object.__new__
+        <a href="petsc4py.PETSc.Object-class.html#__new__">Object.__new__</a>
     </dt>
   </dl>
 </td></tr></table>
@@ -952,7 +931,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:50 2016
+    Generated by Epydoc 3.0.1
     </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 8c6d4d1..75e09d0 100644
--- a/docs/apiref/petsc4py.PETSc.Sys-class.html
+++ b/docs/apiref/petsc4py.PETSc.Sys-class.html
@@ -60,14 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Sys</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,51,31"/>
-</map>
-  <img src="class_hierarchy_for_sys.png" alt='' usemap="#class_hierarchy_for_sys" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
 <!-- ==================== INSTANCE METHODS ==================== -->
@@ -145,7 +141,6 @@
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
           <td><span class="summary-sig"><a name="getVersion"></a><span class="summary-sig-name">getVersion</span>(<span class="summary-sig-arg">type cls</span>,
-        <span class="summary-sig-arg">patch</span>=<span class="summary-sig-default">False</span>,
         <span class="summary-sig-arg">devel</span>=<span class="summary-sig-default">False</span>,
         <span class="summary-sig-arg">date</span>=<span class="summary-sig-default">False</span>,
         <span class="summary-sig-arg">author</span>=<span class="summary-sig-default">False</span>)</span></td>
@@ -245,6 +240,22 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="popSignalHandler"></a><span class="summary-sig-name">popSignalHandler</span>(<span class="summary-sig-arg">type cls</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="pushErrorHandler"></a><span class="summary-sig-name">pushErrorHandler</span>(<span class="summary-sig-arg">type cls</span>,
         <span class="summary-sig-arg">errhandler</span>)</span></td>
           <td align="right" valign="top">
@@ -361,49 +372,6 @@
       
     </td>
   </tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
 </table>
 <!-- ==================== METHOD DETAILS ==================== -->
 <a name="section-MethodDetails"></a>
@@ -479,7 +447,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:51 2016
+    Generated by Epydoc 3.0.1
     </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 3236ffc..51d707d 100644
--- a/docs/apiref/petsc4py.PETSc.TAO-class.html
+++ b/docs/apiref/petsc4py.PETSc.TAO-class.html
@@ -60,15 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class TAO</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
 <hr />
 TAO Solver
@@ -91,17 +86,13 @@ TAO Solver
   </td>
 </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.TAO.Reason-class.html" class="summary-name">Reason</a><br />
       TAO Solver Termination Reasons
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.TAO.Type-class.html" class="summary-name">Type</a><br />
       TAO Solver Types
     </td>
@@ -1052,8 +1043,8 @@ TAO Solver
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
           <td><span class="summary-sig"><a name="setStateDesignIS"></a><span class="summary-sig-name">setStateDesignIS</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">IS state</span>,
-        <span class="summary-sig-arg">IS design</span>)</span></td>
+        <span class="summary-sig-arg">IS state</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">IS design</span>=<span class="summary-sig-default">None</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -1196,21 +1187,8 @@ TAO Solver
       <code><a href="petsc4py.PETSc.Object-class.html#setAttr">setAttr</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setName">setName</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setTabLevel">setTabLevel</a></code>,
-      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>
-      </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
+      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>,
+      <code><a href="petsc4py.PETSc.Object-class.html#viewFromOptions">viewFromOptions</a></code>
       </p>
     </td>
   </tr>
@@ -1357,9 +1335,6 @@ TAO Solver
       <code><a href="petsc4py.PETSc.Object-class.html#refcount">refcount</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#type">type</a></code>
       </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
     </td>
   </tr>
 </table>
@@ -1400,7 +1375,7 @@ TAO Solver
   <dl class="fields">
     <dt>Returns: a new object with type S, a subtype of T</dt>
     <dt>Overrides:
-        object.__new__
+        <a href="petsc4py.PETSc.Object-class.html#__new__">Object.__new__</a>
     </dt>
   </dl>
 </td></tr></table>
@@ -1571,7 +1546,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 May  1 16:53:51 2016
+    Generated by Epydoc 3.0.1
     </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 9ca2fcd..1a02152 100644
--- a/docs/apiref/petsc4py.PETSc.TAO.Reason-class.html
+++ b/docs/apiref/petsc4py.PETSc.TAO.Reason-class.html
@@ -61,8 +61,8 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Reason</h1><p class="nomargin-top"></p>
+<!-- ==================== CLASSOBJ DESCRIPTION ==================== -->
+<h1 class="epydoc">classobj Reason</h1><p class="nomargin-top"></p>
 TAO Solver Termination Reasons
 
 <!-- ==================== CLASS VARIABLES ==================== -->
@@ -226,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 May  1 16:53:51 2016
+    Generated by Epydoc 3.0.1
     </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 8f6fcda..c4387df 100644
--- a/docs/apiref/petsc4py.PETSc.TAO.Type-class.html
+++ b/docs/apiref/petsc4py.PETSc.TAO.Type-class.html
@@ -61,8 +61,8 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Type</h1><p class="nomargin-top"></p>
+<!-- ==================== CLASSOBJ DESCRIPTION ==================== -->
+<h1 class="epydoc">classobj Type</h1><p class="nomargin-top"></p>
 TAO Solver Types
 
 <!-- ==================== CLASS VARIABLES ==================== -->
@@ -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 May  1 16:53:51 2016
+    Generated by Epydoc 3.0.1
     </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 224d2b3..a151be5 100644
--- a/docs/apiref/petsc4py.PETSc.TS-class.html
+++ b/docs/apiref/petsc4py.PETSc.TS-class.html
@@ -60,15 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class TS</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
 <hr />
 <!-- ==================== NESTED CLASSES ==================== -->
@@ -89,44 +84,37 @@
   </td>
 </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.TS.ConvergedReason-class.html" class="summary-name">ConvergedReason</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.TS.EquationType-class.html" class="summary-name">EquationType</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <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">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.TS.ExactFinalTime-class.html" class="summary-name">ExactFinalTimeOption</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.TS.ProblemType-class.html" class="summary-name">ProblemType</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
+        <a href="petsc4py.PETSc.TS.RKType-class.html" class="summary-name">RKType</a>
+    </td>
+  </tr>
+<tr>
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.TS.Type-class.html" class="summary-name">Type</a>
     </td>
   </tr>
@@ -171,6 +159,110 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="adjointComputeRHSJacobian"></a><span class="summary-sig-name">adjointComputeRHSJacobian</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">t</span>,
+        <span class="summary-sig-arg">Vec x</span>,
+        <span class="summary-sig-arg">Mat J</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="adjointSetRHSJacobian"></a><span class="summary-sig-name">adjointSetRHSJacobian</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">adjointjacobian</span>,
+        <span class="summary-sig-arg">Mat A</span>=<span class="summary-sig-default">None</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="adjointSetSteps"></a><span class="summary-sig-name">adjointSetSteps</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">adjoint_steps</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="adjointSetUp"></a><span class="summary-sig-name">adjointSetUp</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="adjointSolve"></a><span class="summary-sig-name">adjointSolve</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="adjointStep"></a><span class="summary-sig-name">adjointStep</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="cancelMonitor"></a><span class="summary-sig-name">cancelMonitor</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -203,6 +295,51 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="computeI2Function"></a><span class="summary-sig-name">computeI2Function</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">t</span>,
+        <span class="summary-sig-arg">Vec x</span>,
+        <span class="summary-sig-arg">Vec xdot</span>,
+        <span class="summary-sig-arg">Vec xdotdot</span>,
+        <span class="summary-sig-arg">Vec f</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="computeI2Jacobian"></a><span class="summary-sig-name">computeI2Jacobian</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">t</span>,
+        <span class="summary-sig-arg">Vec x</span>,
+        <span class="summary-sig-arg">Vec xdot</span>,
+        <span class="summary-sig-arg">Vec xdotdot</span>,
+        <span class="summary-sig-arg">v</span>,
+        <span class="summary-sig-arg">a</span>,
+        <span class="summary-sig-arg">Mat J</span>,
+        <span class="summary-sig-arg">Mat P</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="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>,
@@ -424,7 +561,23 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="getDM"></a><span class="summary-sig-name">getDM</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td><span class="summary-sig"><a name="getCostGradients"></a><span class="summary-sig-name">getCostGradients</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="getCostIntegral"></a><span class="summary-sig-name">getCostIntegral</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -440,7 +593,7 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="getDuration"></a><span class="summary-sig-name">getDuration</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td><span class="summary-sig"><a name="getDM"></a><span class="summary-sig-name">getDM</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -472,6 +625,38 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="getI2Function"></a><span class="summary-sig-name">getI2Function</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="getI2Jacobian"></a><span class="summary-sig-name">getI2Jacobian</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="getIFunction"></a><span class="summary-sig-name">getIFunction</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -712,6 +897,22 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="getRKType"></a><span class="summary-sig-name">getRKType</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="getSNES"></a><span class="summary-sig-name">getSNES</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -776,7 +977,7 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="getSolveTime"></a><span class="summary-sig-name">getSolveTime</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td><span class="summary-sig"><a name="getSolution2"></a><span class="summary-sig-name">getSolution2</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -792,7 +993,7 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="getStepNumber"></a><span class="summary-sig-name">getStepNumber</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td><span class="summary-sig"><a name="getSolveTime"></a><span class="summary-sig-name">getSolveTime</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -808,7 +1009,7 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="getStepRejections"></a><span class="summary-sig-name">getStepRejections</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td><span class="summary-sig"><a name="getStepNumber"></a><span class="summary-sig-name">getStepNumber</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -824,7 +1025,7 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="getTheta"></a><span class="summary-sig-name">getTheta</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td><span class="summary-sig"><a name="getStepRejections"></a><span class="summary-sig-name">getStepRejections</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -840,7 +1041,7 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="getThetaEndpoint"></a><span class="summary-sig-name">getThetaEndpoint</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td><span class="summary-sig"><a name="getTheta"></a><span class="summary-sig-name">getTheta</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -856,7 +1057,7 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="getTime"></a><span class="summary-sig-name">getTime</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td><span class="summary-sig"><a name="getThetaEndpoint"></a><span class="summary-sig-name">getThetaEndpoint</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -872,7 +1073,7 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="getTimeStep"></a><span class="summary-sig-name">getTimeStep</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td><span class="summary-sig"><a name="getTime"></a><span class="summary-sig-name">getTime</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -888,7 +1089,7 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="getTolerances"></a><span class="summary-sig-name">getTolerances</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td><span class="summary-sig"><a name="getTimeStep"></a><span class="summary-sig-name">getTimeStep</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -904,7 +1105,7 @@
     </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><span class="summary-sig"><a name="getTolerances"></a><span class="summary-sig-name">getTolerances</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -1092,8 +1293,33 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="setDM"></a><span class="summary-sig-name">setDM</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">DM dm</span>)</span></td>
+          <td><span class="summary-sig"><a name="setCostGradients"></a><span class="summary-sig-name">setCostGradients</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">vl</span>,
+        <span class="summary-sig-arg">vm</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="setCostIntegrand"></a><span class="summary-sig-name">setCostIntegrand</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">Vec cost</span>,
+        <span class="summary-sig-arg">rfunction</span>,
+        <span class="summary-sig-arg">n</span>=<span class="summary-sig-default">0</span>,
+        <span class="summary-sig-arg">drdyfunction</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">drdpfunction</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">forward</span>=<span class="summary-sig-default">True</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">
             
             
@@ -1109,9 +1335,8 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="setDuration"></a><span class="summary-sig-name">setDuration</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">max_time</span>,
-        <span class="summary-sig-arg">max_steps</span>=<span class="summary-sig-default">None</span>)</span></td>
+          <td><span class="summary-sig"><a name="setDM"></a><span class="summary-sig-name">setDM</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">DM dm</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -1194,7 +1419,7 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="setIFunction"></a><span class="summary-sig-name">setIFunction</span>(<span class="summary-sig-arg">self</span>,
+          <td><span class="summary-sig"><a name="setI2Function"></a><span class="summary-sig-name">setI2Function</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">function</span>,
         <span class="summary-sig-arg">Vec f</span>=<span class="summary-sig-default">None</span>,
         <span class="summary-sig-arg">args</span>=<span class="summary-sig-default">None</span>,
@@ -1214,7 +1439,7 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="setIJacobian"></a><span class="summary-sig-name">setIJacobian</span>(<span class="summary-sig-arg">self</span>,
+          <td><span class="summary-sig"><a name="setI2Jacobian"></a><span class="summary-sig-name">setI2Jacobian</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">jacobian</span>,
         <span class="summary-sig-arg">Mat J</span>=<span class="summary-sig-default">None</span>,
         <span class="summary-sig-arg">Mat P</span>=<span class="summary-sig-default">None</span>,
@@ -1235,9 +1460,32 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="setInitialTimeStep"></a><span class="summary-sig-name">setInitialTimeStep</span>(<span class="summary-sig-arg">self</span>,
-        <span class="summary-sig-arg">initial_time</span>,
-        <span class="summary-sig-arg">initial_time_step</span>)</span></td>
+          <td><span class="summary-sig"><a name="setIFunction"></a><span class="summary-sig-name">setIFunction</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">function</span>,
+        <span class="summary-sig-arg">Vec f</span>=<span class="summary-sig-default">None</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="setIJacobian"></a><span class="summary-sig-name">setIJacobian</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">jacobian</span>,
+        <span class="summary-sig-arg">Mat J</span>=<span class="summary-sig-default">None</span>,
+        <span class="summary-sig-arg">Mat P</span>=<span class="summary-sig-default">None</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">
             
             
@@ -1487,6 +1735,39 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="setRKType"></a><span class="summary-sig-name">setRKType</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">ts_type</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="setSaveTrajectory"></a><span class="summary-sig-name">setSaveTrajectory</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="setSolution"></a><span class="summary-sig-name">setSolution</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">Vec u</span>)</span></td>
           <td align="right" valign="top">
@@ -1504,6 +1785,24 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="setSolution2"></a><span class="summary-sig-name">setSolution2</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">Vec u</span>,
+        <span class="summary-sig-arg">Vec v</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="setStepNumber"></a><span class="summary-sig-name">setStepNumber</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">step_number</span>)</span></td>
           <td align="right" valign="top">
@@ -1712,21 +2011,8 @@
       <code><a href="petsc4py.PETSc.Object-class.html#setAttr">setAttr</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setName">setName</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setTabLevel">setTabLevel</a></code>,
-      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>
-      </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
+      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>,
+      <code><a href="petsc4py.PETSc.Object-class.html#viewFromOptions">viewFromOptions</a></code>
       </p>
     </td>
   </tr>
@@ -1887,9 +2173,6 @@
       <code><a href="petsc4py.PETSc.Object-class.html#refcount">refcount</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#type">type</a></code>
       </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
     </td>
   </tr>
 </table>
@@ -1930,7 +2213,7 @@
   <dl class="fields">
     <dt>Returns: a new object with type S, a subtype of T</dt>
     <dt>Overrides:
-        object.__new__
+        <a href="petsc4py.PETSc.Object-class.html#__new__">Object.__new__</a>
     </dt>
   </dl>
 </td></tr></table>
@@ -2101,7 +2384,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:51 2016
+    Generated by Epydoc 3.0.1
     </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 4e82b1d..cd871cd 100644
--- a/docs/apiref/petsc4py.PETSc.TS.ConvergedReason-class.html
+++ b/docs/apiref/petsc4py.PETSc.TS.ConvergedReason-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class ConvergedReason</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -189,31 +148,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -245,7 +179,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:51 2016
+    Generated by Epydoc 3.0.1
     </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 4b90f21..780f8c5 100644
--- a/docs/apiref/petsc4py.PETSc.TS.EquationType-class.html
+++ b/docs/apiref/petsc4py.PETSc.TS.EquationType-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class EquationType</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,108,31"/>
-</map>
-  <img src="class_hierarchy_for_equationty.png" alt='' usemap="#class_hierarchy_for_equationty" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -224,31 +183,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -280,7 +214,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:51 2016
+    Generated by Epydoc 3.0.1
     </td>
     <td align="right" class="footer">
       <a target="mainFrame" href="http://epydoc.sourceforge.net"
diff --git a/docs/apiref/petsc4py.PETSc.TS.ExactFinalTime-class.html b/docs/apiref/petsc4py.PETSc.TS.ExactFinalTime-class.html
index cedb858..ff6e465 100644
--- a/docs/apiref/petsc4py.PETSc.TS.ExactFinalTime-class.html
+++ b/docs/apiref/petsc4py.PETSc.TS.ExactFinalTime-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class ExactFinalTime</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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.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>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -161,31 +120,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -217,7 +151,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:51 2016
+    Generated by Epydoc 3.0.1
     </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 b1840db..68a6d1a 100644
--- a/docs/apiref/petsc4py.PETSc.TS.ProblemType-class.html
+++ b/docs/apiref/petsc4py.PETSc.TS.ProblemType-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class ProblemType</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,104,31"/>
-</map>
-  <img src="class_hierarchy_for_problemtyp.png" alt='' usemap="#class_hierarchy_for_problemtyp" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -147,31 +106,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -203,7 +137,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:51 2016
+    Generated by Epydoc 3.0.1
     </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.TS.RKType-class.html
similarity index 63%
copy from docs/apiref/petsc4py.PETSc.TAO.Reason-class.html
copy to docs/apiref/petsc4py.PETSc.TS.RKType-class.html
index 9ca2fcd..b1c247c 100644
--- a/docs/apiref/petsc4py.PETSc.TAO.Reason-class.html
+++ b/docs/apiref/petsc4py.PETSc.TS.RKType-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.TAO.Reason</title>
+  <title>petsc4py.PETSc.TS.RKType</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.TAO-class.html">Class TAO</a> ::
-        Class Reason
+        <a href="petsc4py.PETSc.TS-class.html">Class TS</a> ::
+        Class RKType
       </span>
     </td>
     <td>
@@ -55,16 +55,18 @@
     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.TAO.Reason-class.html"
+            >] | <a href="petsc4py.PETSc.TS.RKType-class.html"
             target="_top">no frames</a>]</span></td></tr>
       </table>
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Reason</h1><p class="nomargin-top"></p>
-TAO Solver Termination Reasons
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type RKType</h1><p class="nomargin-top"></p>
+<center>
 
+</center>
+<hr />
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -86,112 +88,63 @@ TAO Solver Termination Reasons
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="CONTINUE_ITERATING"></a><span class="summary-name">CONTINUE_ITERATING</span> = <code title="0">0</code>
+        <a name="RK1FE"></a><span class="summary-name">RK1FE</span> = <code title="'1fe'"><code class="variable-quote">'</code><code class="variable-string">1fe</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="CONVERGED_GATOL"></a><span class="summary-name">CONVERGED_GATOL</span> = <code title="3">3</code>
+        <a name="RK2A"></a><span class="summary-name">RK2A</span> = <code title="'2a'"><code class="variable-quote">'</code><code class="variable-string">2a</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="CONVERGED_GRTOL"></a><span class="summary-name">CONVERGED_GRTOL</span> = <code title="4">4</code>
+        <a name="RK3"></a><span class="summary-name">RK3</span> = <code title="'3'"><code class="variable-quote">'</code><code class="variable-string">3</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="CONVERGED_GTTOL"></a><span class="summary-name">CONVERGED_GTTOL</span> = <code title="5">5</code>
+        <a name="RK3BS"></a><span class="summary-name">RK3BS</span> = <code title="'3bs'"><code class="variable-quote">'</code><code class="variable-string">3bs</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="CONVERGED_ITERATING"></a><span class="summary-name">CONVERGED_ITERATING</span> = <code title="0">0</code>
+        <a name="RK4"></a><span class="summary-name">RK4</span> = <code title="'4'"><code class="variable-quote">'</code><code class="variable-string">4</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="CONVERGED_MINF"></a><span class="summary-name">CONVERGED_MINF</span> = <code title="7">7</code>
+        <a name="RK5BS"></a><span class="summary-name">RK5BS</span> = <code title="'5bs'"><code class="variable-quote">'</code><code class="variable-string">5bs</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="CONVERGED_STEPTOL"></a><span class="summary-name">CONVERGED_STEPTOL</span> = <code title="6">6</code>
+        <a name="RK5DP"></a><span class="summary-name">RK5DP</span> = <code title="'5dp'"><code class="variable-quote">'</code><code class="variable-string">5dp</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="CONVERGED_USER"></a><span class="summary-name">CONVERGED_USER</span> = <code title="8">8</code>
+        <a name="RK5F"></a><span class="summary-name">RK5F</span> = <code title="'5f'"><code class="variable-quote">'</code><code class="variable-string">5f</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="DIVERGED_LS_FAILURE"></a><span class="summary-name">DIVERGED_LS_FAILURE</span> = <code title="-6">-6</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_MAXFCN"></a><span class="summary-name">DIVERGED_MAXFCN</span> = <code title="-5">-5</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_MAXITS"></a><span class="summary-name">DIVERGED_MAXITS</span> = <code title="-2">-2</code>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
-        <a name="DIVERGED_NAN"></a><span class="summary-name">DIVERGED_NAN</span> = <code title="-4">-4</code>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
-        <a name="DIVERGED_TR_REDUCTION"></a><span class="summary-name">DIVERGED_TR_REDUCTION</span> = <code title="-7">-7</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_USER"></a><span class="summary-name">DIVERGED_USER</span> = <code title="-8">-8</code>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
-        <a name="ITERATING"></a><span class="summary-name">ITERATING</span> = <code title="0">0</code>
-    </td>
-  </tr>
-<tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
-        <a name="__qualname__"></a><span class="summary-name">__qualname__</span> = <code title="'TAOConvergedReason'"><code class="variable-quote">'</code><code class="variable-string">TAOConvergedReason</code><code class="variable-quote">'</code></code>
+        <a name="__qualname__"></a><span class="summary-name">__qualname__</span> = <code title="'TSRKType'"><code class="variable-quote">'</code><code class="variable-string">TSRKType</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
 </table>
@@ -226,7 +179,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 May  1 16:53:51 2016
+    Generated by Epydoc 3.0.1
     </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 e69ff54..43a84e8 100644
--- a/docs/apiref/petsc4py.PETSc.TS.Type-class.html
+++ b/docs/apiref/petsc4py.PETSc.TS.Type-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Type</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -206,7 +165,7 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="GL"></a><span class="summary-name">GL</span> = <code title="'gl'"><code class="variable-quote">'</code><code class="variable-string">gl</code><code class="variable-quote">'</code></code>
+        <a name="GLLE"></a><span class="summary-name">GLLE</span> = <code title="'glle'"><code class="variable-quote">'</code><code class="variable-string">glle</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
 <tr>
@@ -287,31 +246,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -343,7 +277,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:51 2016
+    Generated by Epydoc 3.0.1
     </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 28103ec..8401d52 100644
--- a/docs/apiref/petsc4py.PETSc.Vec-class.html
+++ b/docs/apiref/petsc4py.PETSc.Vec-class.html
@@ -60,15 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Vec</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
 <hr />
 <!-- ==================== NESTED CLASSES ==================== -->
@@ -89,16 +84,12 @@
   </td>
 </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.Vec.Option-class.html" class="summary-name">Option</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.Vec.Type-class.html" class="summary-name">Type</a>
     </td>
   </tr>
@@ -1040,6 +1031,22 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="getLGMap"></a><span class="summary-sig-name">getLGMap</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="getLocalSize"></a><span class="summary-sig-name">getLocalSize</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -2468,21 +2475,8 @@
       <code><a href="petsc4py.PETSc.Object-class.html#setAttr">setAttr</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setName">setName</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setTabLevel">setTabLevel</a></code>,
-      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>
-      </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
+      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>,
+      <code><a href="petsc4py.PETSc.Object-class.html#viewFromOptions">viewFromOptions</a></code>
       </p>
     </td>
   </tr>
@@ -2612,9 +2606,6 @@
       <code><a href="petsc4py.PETSc.Object-class.html#refcount">refcount</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#type">type</a></code>
       </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
     </td>
   </tr>
 </table>
@@ -2655,7 +2646,7 @@
   <dl class="fields">
     <dt>Returns: a new object with type S, a subtype of T</dt>
     <dt>Overrides:
-        object.__new__
+        <a href="petsc4py.PETSc.Object-class.html#__new__">Object.__new__</a>
     </dt>
   </dl>
 </td></tr></table>
@@ -2826,7 +2817,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:51 2016
+    Generated by Epydoc 3.0.1
     </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 3e4ee0b..f547ea0 100644
--- a/docs/apiref/petsc4py.PETSc.Vec.Option-class.html
+++ b/docs/apiref/petsc4py.PETSc.Vec.Option-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Option</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -147,31 +106,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -203,7 +137,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:51 2016
+    Generated by Epydoc 3.0.1
     </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 4f4f7c0..12512f9 100644
--- a/docs/apiref/petsc4py.PETSc.Vec.Type-class.html
+++ b/docs/apiref/petsc4py.PETSc.Vec.Type-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Type</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -210,31 +169,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -266,7 +200,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:51 2016
+    Generated by Epydoc 3.0.1
     </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 1602142..39c8f7f 100644
--- a/docs/apiref/petsc4py.PETSc.Viewer-class.html
+++ b/docs/apiref/petsc4py.PETSc.Viewer-class.html
@@ -60,17 +60,17 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Viewer</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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="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>
+
 </center>
+<dl><dt>Known Subclasses:</dt>
+<dd>
+      <ul class="subclass-list">
+<li><a href="petsc4py.PETSc.ViewerHDF5-class.html">ViewerHDF5</a></li>  </ul>
+</dd></dl>
+
 <hr />
 <!-- ==================== NESTED CLASSES ==================== -->
 <a name="section-NestedClasses"></a>
@@ -90,30 +90,22 @@
   </td>
 </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.Viewer.Format-class.html" class="summary-name">Format</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.Viewer.Mode-class.html" class="summary-name">Mode</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.Viewer.Size-class.html" class="summary-name">Size</a>
     </td>
   </tr>
 <tr>
-    <td width="15%" align="right" valign="top" class="summary">
-      <span class="summary-type"> </span>
-    </td><td class="summary">
+    <td class="summary" colspan="2">
         <a href="petsc4py.PETSc.Viewer.Type-class.html" class="summary-name">Type</a>
     </td>
   </tr>
@@ -260,6 +252,23 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="addASCIITab"></a><span class="summary-sig-name">addASCIITab</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">tabs</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="clearDraw"></a><span class="summary-sig-name">clearDraw</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -390,7 +399,7 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="createNetCDF"></a><span class="summary-sig-name">createNetCDF</span>(<span class="summary-sig-arg">self</span>,
+          <td><span class="summary-sig"><a name="createVTK"></a><span class="summary-sig-name">createVTK</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">comm</span>=<span class="summary-sig-default">None</span>)</span></td>
@@ -409,10 +418,7 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="createVTK"></a><span class="summary-sig-name">createVTK</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">comm</span>=<span class="summary-sig-default">None</span>)</span></td>
+          <td><span class="summary-sig"><a href="petsc4py.PETSc.Viewer-class.html#destroy" class="summary-sig-name">destroy</a>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -428,7 +434,7 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a href="petsc4py.PETSc.Viewer-class.html#destroy" class="summary-sig-name">destroy</a>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td><span class="summary-sig"><a name="flush"></a><span class="summary-sig-name">flush</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -444,7 +450,7 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
-          <td><span class="summary-sig"><a name="flush"></a><span class="summary-sig-name">flush</span>(<span class="summary-sig-arg">self</span>)</span></td>
+          <td><span class="summary-sig"><a name="getASCIITab"></a><span class="summary-sig-name">getASCIITab</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
             
@@ -524,6 +530,38 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="popASCIISynchronized"></a><span class="summary-sig-name">popASCIISynchronized</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="popASCIITab"></a><span class="summary-sig-name">popASCIITab</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="popFormat"></a><span class="summary-sig-name">popFormat</span>(<span class="summary-sig-arg">self</span>)</span></td>
           <td align="right" valign="top">
             
@@ -540,6 +578,72 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="printfASCII"></a><span class="summary-sig-name">printfASCII</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">msg</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="printfASCIISynchronized"></a><span class="summary-sig-name">printfASCIISynchronized</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">msg</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="pushASCIISynchronized"></a><span class="summary-sig-name">pushASCIISynchronized</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="pushASCIITab"></a><span class="summary-sig-name">pushASCIITab</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="pushFormat"></a><span class="summary-sig-name">pushFormat</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">format</span>)</span></td>
           <td align="right" valign="top">
@@ -557,6 +661,23 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="setASCIITab"></a><span class="summary-sig-name">setASCIITab</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">tabs</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="setDrawInfo"></a><span class="summary-sig-name">setDrawInfo</span>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">display</span>=<span class="summary-sig-default">None</span>,
         <span class="summary-sig-arg">title</span>=<span class="summary-sig-default">None</span>,
@@ -628,6 +749,40 @@
     </td><td class="summary">
       <table width="100%" cellpadding="0" cellspacing="0" border="0">
         <tr>
+          <td><span class="summary-sig"><a name="subtractASCIITab"></a><span class="summary-sig-name">subtractASCIITab</span>(<span class="summary-sig-arg">self</span>,
+        <span class="summary-sig-arg">tabs</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="useASCIITabs"></a><span class="summary-sig-name">useASCIITabs</span>(<span class="summary-sig-arg">self</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 href="petsc4py.PETSc.Viewer-class.html#view" class="summary-sig-name">view</a>(<span class="summary-sig-arg">self</span>,
         <span class="summary-sig-arg">obj</span>=<span class="summary-sig-default">None</span>)</span></td>
           <td align="right" valign="top">
@@ -670,21 +825,8 @@
       <code><a href="petsc4py.PETSc.Object-class.html#setName">setName</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setOptionsPrefix">setOptionsPrefix</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setTabLevel">setTabLevel</a></code>,
-      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>
-      </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
+      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>,
+      <code><a href="petsc4py.PETSc.Object-class.html#viewFromOptions">viewFromOptions</a></code>
       </p>
     </td>
   </tr>
@@ -719,9 +861,6 @@
       <code><a href="petsc4py.PETSc.Object-class.html#refcount">refcount</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#type">type</a></code>
       </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
     </td>
   </tr>
 </table>
@@ -762,7 +901,7 @@
   <dl class="fields">
     <dt>Returns: a new object with type S, a subtype of T</dt>
     <dt>Overrides:
-        object.__new__
+        <a href="petsc4py.PETSc.Object-class.html#__new__">Object.__new__</a>
     </dt>
   </dl>
 </td></tr></table>
@@ -866,7 +1005,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:51 2016
+    Generated by Epydoc 3.0.1
     </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 88dd674..178adee 100644
--- a/docs/apiref/petsc4py.PETSc.Viewer.Format-class.html
+++ b/docs/apiref/petsc4py.PETSc.Viewer.Format-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Format</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,68,31"/>
-</map>
-  <img src="class_hierarchy_for_format.png" alt='' usemap="#class_hierarchy_for_format" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -255,7 +214,7 @@
     <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>
+        <a name="BINARY_MATLAB"></a><span class="summary-name">BINARY_MATLAB</span> = <code title="27">27</code>
     </td>
   </tr>
 <tr>
@@ -269,70 +228,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="19">19</code>
+        <a name="DRAW_BASIC"></a><span class="summary-name">DRAW_BASIC</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_CONTOUR"></a><span class="summary-name">DRAW_CONTOUR</span> = <code title="21">21</code>
+        <a name="DRAW_CONTOUR"></a><span class="summary-name">DRAW_CONTOUR</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="DRAW_LG"></a><span class="summary-name">DRAW_LG</span> = <code title="20">20</code>
+        <a name="DRAW_LG"></a><span class="summary-name">DRAW_LG</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_PORTS"></a><span class="summary-name">DRAW_PORTS</span> = <code title="22">22</code>
+        <a name="DRAW_PORTS"></a><span class="summary-name">DRAW_PORTS</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="HDF5_VIZ"></a><span class="summary-name">HDF5_VIZ</span> = <code title="28">28</code>
+        <a name="HDF5_VIZ"></a><span class="summary-name">HDF5_VIZ</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="NATIVE"></a><span class="summary-name">NATIVE</span> = <code title="27">27</code>
+        <a name="NATIVE"></a><span class="summary-name">NATIVE</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="NOFORMAT"></a><span class="summary-name">NOFORMAT</span> = <code title="29">29</code>
+        <a name="NOFORMAT"></a><span class="summary-name">NOFORMAT</span> = <code title="30">30</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="24">24</code>
+        <a name="VTK_VTR"></a><span class="summary-name">VTK_VTR</span> = <code title="25">25</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="23">23</code>
+        <a name="VTK_VTS"></a><span class="summary-name">VTK_VTS</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_VTU"></a><span class="summary-name">VTK_VTU</span> = <code title="25">25</code>
+        <a name="VTK_VTU"></a><span class="summary-name">VTK_VTU</span> = <code title="26">26</code>
     </td>
   </tr>
 <tr>
@@ -343,31 +302,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -399,7 +333,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:52 2016
+    Generated by Epydoc 3.0.1
     </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 43e8a37..bb2965e 100644
--- a/docs/apiref/petsc4py.PETSc.Viewer.Mode-class.html
+++ b/docs/apiref/petsc4py.PETSc.Viewer.Mode-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Mode</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,60,31"/>
-</map>
-  <img src="class_hierarchy_for_mode.png" alt='' usemap="#class_hierarchy_for_mode" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -210,31 +169,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -266,7 +200,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:52 2016
+    Generated by Epydoc 3.0.1
     </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 d0c6626..ace5355 100644
--- a/docs/apiref/petsc4py.PETSc.Viewer.Size-class.html
+++ b/docs/apiref/petsc4py.PETSc.Viewer.Size-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Size</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,5,53,31"/>
-</map>
-  <img src="class_hierarchy_for_size.png" alt='' usemap="#class_hierarchy_for_size" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -189,31 +148,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -245,7 +179,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:52 2016
+    Generated by Epydoc 3.0.1
     </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 55fd30a..d51f920 100644
--- a/docs/apiref/petsc4py.PETSc.Viewer.Type-class.html
+++ b/docs/apiref/petsc4py.PETSc.Viewer.Type-class.html
@@ -61,53 +61,12 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class Type</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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,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>
+
 </center>
 <hr />
-<!-- ==================== INSTANCE METHODS ==================== -->
-<a name="section-InstanceMethods"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Instance Methods</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-InstanceMethods"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__new__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== CLASS VARIABLES ==================== -->
 <a name="section-ClassVariables"></a>
 <table class="summary" border="1" cellpadding="3"
@@ -171,13 +130,6 @@
     <td width="15%" align="right" valign="top" class="summary">
       <span class="summary-type"> </span>
     </td><td class="summary">
-        <a name="NETCDF"></a><span class="summary-name">NETCDF</span> = <code title="'netcdf'"><code class="variable-quote">'</code><code class="variable-string">netcdf</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="SAWS"></a><span class="summary-name">SAWS</span> = <code title="'saws'"><code class="variable-quote">'</code><code class="variable-string">saws</code><code class="variable-quote">'</code></code>
     </td>
   </tr>
@@ -217,31 +169,6 @@
     </td>
   </tr>
 </table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
-</table>
 <!-- ==================== NAVIGATION BAR ==================== -->
 <table class="navbar" border="0" width="100%" cellpadding="0"
        bgcolor="#a0c0ff" cellspacing="0">
@@ -273,7 +200,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:52 2016
+    Generated by Epydoc 3.0.1
     </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 ca9f504..6e8f9ba 100644
--- a/docs/apiref/petsc4py.PETSc.ViewerHDF5-class.html
+++ b/docs/apiref/petsc4py.PETSc.ViewerHDF5-class.html
@@ -60,16 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class ViewerHDF5</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type 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="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>
+
 </center>
 <hr />
 <!-- ==================== NESTED CLASSES ==================== -->
@@ -260,26 +254,36 @@
       <code><a href="petsc4py.PETSc.Viewer-class.html#STDERR">STDERR</a></code>,
       <code><a href="petsc4py.PETSc.Viewer-class.html#STDOUT">STDOUT</a></code>,
       <code><a href="petsc4py.PETSc.Viewer-class.html#__call__">__call__</a></code>,
+      <code><a href="petsc4py.PETSc.Viewer-class.html#addASCIITab">addASCIITab</a></code>,
       <code><a href="petsc4py.PETSc.Viewer-class.html#clearDraw">clearDraw</a></code>,
       <code><a href="petsc4py.PETSc.Viewer-class.html#createASCII">createASCII</a></code>,
       <code><a href="petsc4py.PETSc.Viewer-class.html#createBinary">createBinary</a></code>,
       <code><a href="petsc4py.PETSc.Viewer-class.html#createDraw">createDraw</a></code>,
       <code><a href="petsc4py.PETSc.Viewer-class.html#createHDF5">createHDF5</a></code>,
       <code><a href="petsc4py.PETSc.Viewer-class.html#createMPIIO">createMPIIO</a></code>,
-      <code><a href="petsc4py.PETSc.Viewer-class.html#createNetCDF">createNetCDF</a></code>,
       <code><a href="petsc4py.PETSc.Viewer-class.html#createVTK">createVTK</a></code>,
       <code><a href="petsc4py.PETSc.Viewer-class.html#destroy">destroy</a></code>,
       <code><a href="petsc4py.PETSc.Viewer-class.html#flush">flush</a></code>,
+      <code><a href="petsc4py.PETSc.Viewer-class.html#getASCIITab">getASCIITab</a></code>,
       <code><a href="petsc4py.PETSc.Viewer-class.html#getFileMode">getFileMode</a></code>,
       <code><a href="petsc4py.PETSc.Viewer-class.html#getFileName">getFileName</a></code>,
       <code><a href="petsc4py.PETSc.Viewer-class.html#getFormat">getFormat</a></code>,
       <code><a href="petsc4py.PETSc.Viewer-class.html#getType">getType</a></code>,
+      <code><a href="petsc4py.PETSc.Viewer-class.html#popASCIISynchronized">popASCIISynchronized</a></code>,
+      <code><a href="petsc4py.PETSc.Viewer-class.html#popASCIITab">popASCIITab</a></code>,
       <code><a href="petsc4py.PETSc.Viewer-class.html#popFormat">popFormat</a></code>,
+      <code><a href="petsc4py.PETSc.Viewer-class.html#printfASCII">printfASCII</a></code>,
+      <code><a href="petsc4py.PETSc.Viewer-class.html#printfASCIISynchronized">printfASCIISynchronized</a></code>,
+      <code><a href="petsc4py.PETSc.Viewer-class.html#pushASCIISynchronized">pushASCIISynchronized</a></code>,
+      <code><a href="petsc4py.PETSc.Viewer-class.html#pushASCIITab">pushASCIITab</a></code>,
       <code><a href="petsc4py.PETSc.Viewer-class.html#pushFormat">pushFormat</a></code>,
+      <code><a href="petsc4py.PETSc.Viewer-class.html#setASCIITab">setASCIITab</a></code>,
       <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#setType">setType</a></code>,
+      <code><a href="petsc4py.PETSc.Viewer-class.html#subtractASCIITab">subtractASCIITab</a></code>,
+      <code><a href="petsc4py.PETSc.Viewer-class.html#useASCIITabs">useASCIITabs</a></code>,
       <code><a href="petsc4py.PETSc.Viewer-class.html#view">view</a></code>
       </p>
     <p class="indent-wrapped-lines"><b>Inherited from <code><a href="petsc4py.PETSc.Object-class.html">Object</a></code></b>:
@@ -311,21 +315,8 @@
       <code><a href="petsc4py.PETSc.Object-class.html#setName">setName</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setOptionsPrefix">setOptionsPrefix</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#setTabLevel">setTabLevel</a></code>,
-      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>
-      </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
+      <code><a href="petsc4py.PETSc.Object-class.html#stateIncrease">stateIncrease</a></code>,
+      <code><a href="petsc4py.PETSc.Object-class.html#viewFromOptions">viewFromOptions</a></code>
       </p>
     </td>
   </tr>
@@ -360,9 +351,6 @@
       <code><a href="petsc4py.PETSc.Object-class.html#refcount">refcount</a></code>,
       <code><a href="petsc4py.PETSc.Object-class.html#type">type</a></code>
       </p>
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
     </td>
   </tr>
 </table>
@@ -403,7 +391,7 @@
   <dl class="fields">
     <dt>Returns: a new object with type S, a subtype of T</dt>
     <dt>Overrides:
-        object.__new__
+        <a href="petsc4py.PETSc.Object-class.html#__new__">Object.__new__</a>
     </dt>
   </dl>
 </td></tr></table>
@@ -465,7 +453,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:52 2016
+    Generated by Epydoc 3.0.1
     </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 cb3fcb7..68e4911 100644
--- a/docs/apiref/petsc4py.PETSc._DMComposite_access-class.html
+++ b/docs/apiref/petsc4py.PETSc._DMComposite_access-class.html
@@ -60,14 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class _DMComposite_access</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type _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,5,168,31"/>
-</map>
-  <img src="class_hierarchy_for__dmcomposi.png" alt='' usemap="#class_hierarchy_for__dmcomposi" ismap="ismap" class="graph-without-title" />
-</center>
+
 </center>
 <hr />
 <!-- ==================== INSTANCE METHODS ==================== -->
@@ -137,49 +133,6 @@
       
     </td>
   </tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
 </table>
 <!-- ==================== METHOD DETAILS ==================== -->
 <a name="section-MethodDetails"></a>
@@ -255,7 +208,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:52 2016
+    Generated by Epydoc 3.0.1
     </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 d9fde80..3f8ffd5 100644
--- a/docs/apiref/petsc4py.PETSc._DMDA_Vec_array-class.html
+++ b/docs/apiref/petsc4py.PETSc._DMDA_Vec_array-class.html
@@ -60,14 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class _DMDA_Vec_array</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type _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,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>
+
 </center>
 <hr />
 <!-- ==================== INSTANCE METHODS ==================== -->
@@ -189,24 +185,6 @@
       
     </td>
   </tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
 </table>
 <!-- ==================== PROPERTIES ==================== -->
 <a name="section-Properties"></a>
@@ -260,13 +238,6 @@
         <a name="strides"></a><span class="summary-name">strides</span>
     </td>
   </tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
 </table>
 <!-- ==================== METHOD DETAILS ==================== -->
 <a name="section-MethodDetails"></a>
@@ -342,7 +313,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:52 2016
+    Generated by Epydoc 3.0.1
     </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 7264e75..4d95728 100644
--- a/docs/apiref/petsc4py.PETSc._IS_buffer-class.html
+++ b/docs/apiref/petsc4py.PETSc._IS_buffer-class.html
@@ -60,14 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class _IS_buffer</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type _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,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>
+
 </center>
 <hr />
 <!-- ==================== INSTANCE METHODS ==================== -->
@@ -137,24 +133,6 @@
       
     </td>
   </tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
 </table>
 <!-- ==================== PROPERTIES ==================== -->
 <a name="section-Properties"></a>
@@ -180,13 +158,6 @@
         <a name="__array_interface__"></a><span class="summary-name">__array_interface__</span>
     </td>
   </tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
 </table>
 <!-- ==================== METHOD DETAILS ==================== -->
 <a name="section-MethodDetails"></a>
@@ -262,7 +233,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:52 2016
+    Generated by Epydoc 3.0.1
     </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 846127b..718b69a 100644
--- a/docs/apiref/petsc4py.PETSc._Mat_Stencil-class.html
+++ b/docs/apiref/petsc4py.PETSc._Mat_Stencil-class.html
@@ -60,14 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class _Mat_Stencil</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type _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,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>
+
 </center>
 <hr />
 <!-- ==================== INSTANCE METHODS ==================== -->
@@ -104,24 +100,6 @@
       
     </td>
   </tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
 </table>
 <!-- ==================== PROPERTIES ==================== -->
 <a name="section-Properties"></a>
@@ -182,13 +160,6 @@
         <a name="k"></a><span class="summary-name">k</span>
     </td>
   </tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
 </table>
 <!-- ==================== METHOD DETAILS ==================== -->
 <a name="section-MethodDetails"></a>
@@ -264,7 +235,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:52 2016
+    Generated by Epydoc 3.0.1
     </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 100c374..4441432 100644
--- a/docs/apiref/petsc4py.PETSc._Vec_LocalForm-class.html
+++ b/docs/apiref/petsc4py.PETSc._Vec_LocalForm-class.html
@@ -60,14 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class _Vec_LocalForm</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type _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,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>
+
 </center>
 <hr />
 _Vec_LocalForm(Vec gvec)
@@ -157,48 +153,6 @@ Context manager for <a href="petsc4py.PETSc.Vec-class.html" class="link">Vec</a>
       
     </td>
   </tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
-</table>
-<!-- ==================== PROPERTIES ==================== -->
-<a name="section-Properties"></a>
-<table class="summary" border="1" cellpadding="3"
-       cellspacing="0" width="100%" bgcolor="white">
-<tr bgcolor="#70b0f0" class="table-header">
-  <td colspan="2" class="table-header">
-    <table border="0" cellpadding="0" cellspacing="0" width="100%">
-      <tr valign="top">
-        <td align="left"><span class="table-header">Properties</span></td>
-        <td align="right" valign="top"
-         ><span class="options">[<a href="#section-Properties"
-         class="privatelink" onclick="toggle_private();"
-         >hide private</a>]</span></td>
-      </tr>
-    </table>
-  </td>
-</tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
 </table>
 <!-- ==================== METHOD DETAILS ==================== -->
 <a name="section-MethodDetails"></a>
@@ -297,7 +251,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 May  1 16:53:52 2016
+    Generated by Epydoc 3.0.1
     </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 f12a68b..899730d 100644
--- a/docs/apiref/petsc4py.PETSc._Vec_buffer-class.html
+++ b/docs/apiref/petsc4py.PETSc._Vec_buffer-class.html
@@ -60,14 +60,10 @@
     </td>
   </tr>
 </table>
-<!-- ==================== CLASS DESCRIPTION ==================== -->
-<h1 class="epydoc">Class _Vec_buffer</h1><p class="nomargin-top"></p>
+<!-- ==================== TYPE DESCRIPTION ==================== -->
+<h1 class="epydoc">type _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,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>
+
 </center>
 <hr />
 <!-- ==================== INSTANCE METHODS ==================== -->
@@ -137,24 +133,6 @@
       
     </td>
   </tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__delattr__</code>,
-      <code>__format__</code>,
-      <code>__getattribute__</code>,
-      <code>__hash__</code>,
-      <code>__init__</code>,
-      <code>__reduce__</code>,
-      <code>__reduce_ex__</code>,
-      <code>__repr__</code>,
-      <code>__setattr__</code>,
-      <code>__sizeof__</code>,
-      <code>__str__</code>,
-      <code>__subclasshook__</code>
-      </p>
-    </td>
-  </tr>
 </table>
 <!-- ==================== PROPERTIES ==================== -->
 <a name="section-Properties"></a>
@@ -180,13 +158,6 @@
         <a name="__array_interface__"></a><span class="summary-name">__array_interface__</span>
     </td>
   </tr>
-  <tr>
-    <td colspan="2" class="summary">
-    <p class="indent-wrapped-lines"><b>Inherited from <code>object</code></b>:
-      <code>__class__</code>
-      </p>
-    </td>
-  </tr>
 </table>
 <!-- ==================== METHOD DETAILS ==================== -->
 <a name="section-MethodDetails"></a>
@@ -262,7 +233,7 @@
 <table border="0" cellpadding="0" cellspacing="0" width="100%%">
   <tr>
     <td align="left" class="footer">
-    Generated by Epydoc 3.0.1 on Sun May  1 16:53:52 2016
+    Generated by Epydoc 3.0.1
     </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 bff73bf..2eb72bf 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 May  1 16:53:46 2016
+    Generated by Epydoc 3.0.1
     </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 a35ce72..22ac90e 100644
--- a/docs/apiref/redirect.html
+++ b/docs/apiref/redirect.html
@@ -7,7 +7,7 @@
 <body>
 <script type="text/javascript">
 <!--
-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 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 2bcb093..6983ae8 100644
--- a/docs/apiref/toc-everything.html
+++ b/docs/apiref/toc-everything.html
@@ -35,8 +35,9 @@
      >petsc4py.PETSc.KSP.ConvergedReason</a><br />    <a target="mainFrame" href="petsc4py.PETSc.KSP.NormType-class.html"
      >petsc4py.PETSc.KSP.NormType</a><br />    <a target="mainFrame" href="petsc4py.PETSc.KSP.Type-class.html"
      >petsc4py.PETSc.KSP.Type</a><br />    <a target="mainFrame" href="petsc4py.PETSc.LGMap-class.html"
-     >petsc4py.PETSc.LGMap</a><br />    <a target="mainFrame" href="petsc4py.PETSc.LGMap.MapType-class.html"
-     >petsc4py.PETSc.LGMap.MapType</a><br />    <a target="mainFrame" href="petsc4py.PETSc.Log-class.html"
+     >petsc4py.PETSc.LGMap</a><br />    <a target="mainFrame" href="petsc4py.PETSc.LGMap.MapMode-class.html"
+     >petsc4py.PETSc.LGMap.MapMode</a><br />    <a target="mainFrame" href="petsc4py.PETSc.LGMap.Type-class.html"
+     >petsc4py.PETSc.LGMap.Type</a><br />    <a target="mainFrame" href="petsc4py.PETSc.Log-class.html"
      >petsc4py.PETSc.Log</a><br />    <a target="mainFrame" href="petsc4py.PETSc.LogClass-class.html"
      >petsc4py.PETSc.LogClass</a><br />    <a target="mainFrame" href="petsc4py.PETSc.LogEvent-class.html"
      >petsc4py.PETSc.LogEvent</a><br />    <a target="mainFrame" href="petsc4py.PETSc.LogStage-class.html"
@@ -58,7 +59,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.MGType-class.html"
+     >petsc4py.PETSc.PC.GASMType</a><br />    <a target="mainFrame" href="petsc4py.PETSc.PC.MGCycleType-class.html"
+     >petsc4py.PETSc.PC.MGCycleType</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"
@@ -85,7 +87,8 @@
      >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.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.ProblemType</a><br />    <a target="mainFrame" href="petsc4py.PETSc.TS.RKType-class.html"
+     >petsc4py.PETSc.TS.RKType</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"
      >petsc4py.PETSc.Vec.Option</a><br />    <a target="mainFrame" href="petsc4py.PETSc.Vec.Type-class.html"
@@ -120,7 +123,8 @@
   <div class="private">
     <a target="mainFrame" href="petsc4py.PETSc-module.html#_initialize"
      >petsc4py.PETSc._initialize</a><br />  </div>
-    <a target="mainFrame" href="petsc4py-module.html#get_include"
+    <a target="mainFrame" href="petsc4py-module.html#get_config"
+     >petsc4py.get_config</a><br />    <a target="mainFrame" href="petsc4py-module.html#get_include"
      >petsc4py.get_include</a><br />    <a target="mainFrame" href="petsc4py-module.html#init"
      >petsc4py.init</a><br />    <a target="mainFrame" href="petsc4py.lib-module.html#Import"
      >petsc4py.lib.Import</a><br />    <a target="mainFrame" href="petsc4py.lib-module.html#ImportPETSc"
diff --git a/docs/apiref/toc-petsc4py-module.html b/docs/apiref/toc-petsc4py-module.html
index 4017768..d9b86d3 100644
--- a/docs/apiref/toc-petsc4py-module.html
+++ b/docs/apiref/toc-petsc4py-module.html
@@ -13,7 +13,8 @@
 <h1 class="toc">Module petsc4py</h1>
 <hr />
   <h2 class="toc">Functions</h2>
-    <a target="mainFrame" href="petsc4py-module.html#get_include"
+    <a target="mainFrame" href="petsc4py-module.html#get_config"
+     >get_config</a><br />    <a target="mainFrame" href="petsc4py-module.html#get_include"
      >get_include</a><br />    <a target="mainFrame" href="petsc4py-module.html#init"
      >init</a><br />  <h2 class="toc">Variables</h2>
     <a target="mainFrame" href="petsc4py-module.html#__credits__"
diff --git a/docs/index.html b/docs/index.html
index 7aa73c6..92e2dc2 100644
--- a/docs/index.html
+++ b/docs/index.html
@@ -3,14 +3,14 @@
 <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.12: http://docutils.sourceforge.net/" />
+<meta name="generator" content="Docutils 0.13.1: http://docutils.sourceforge.net/" />
 <title>PETSc for Python</title>
 <meta name="author" content="Lisandro Dalcin" />
 <style type="text/css">
 
 /*
 :Author: David Goodger (goodger at python.org)
-:Id: $Id: html4css1.css 7614 2013-02-21 15:55:51Z milde $
+:Id: $Id: html4css1.css 7952 2016-07-26 18:15:59Z milde $
 :Copyright: This stylesheet has been placed in the public domain.
 
 Default cascading style sheet for the HTML output of Docutils.
@@ -38,6 +38,14 @@ table.borderless td, table.borderless th {
 .hidden {
   display: none }
 
+.subscript {
+  vertical-align: sub;
+  font-size: smaller }
+
+.superscript {
+  vertical-align: super;
+  font-size: smaller }
+
 a.toc-backref {
   text-decoration: none ;
   color: black }
@@ -162,12 +170,12 @@ h2.subtitle {
 hr.docutils {
   width: 75% }
 
-img.align-left, .figure.align-left, object.align-left {
+img.align-left, .figure.align-left, object.align-left, table.align-left {
   clear: left ;
   float: left ;
   margin-right: 1em }
 
-img.align-right, .figure.align-right, object.align-right {
+img.align-right, .figure.align-right, object.align-right, table.align-right {
   clear: right ;
   float: right ;
   margin-left: 1em }
@@ -178,6 +186,11 @@ img.align-center, .figure.align-center, object.align-center {
   margin-right: auto;
 }
 
+table.align-center {
+  margin-left: auto;
+  margin-right: auto;
+}
+
 .align-left {
   text-align: left }
 
@@ -195,6 +208,15 @@ div.align-right {
 /* div.align-center * { */
 /*   text-align: left } */
 
+.align-top    {
+  vertical-align: top }
+
+.align-middle {
+  vertical-align: middle }
+
+.align-bottom {
+  vertical-align: bottom }
+
 ol.simple, ul.simple {
   margin-bottom: 1em }
 
@@ -397,7 +419,7 @@ Advances in Water Resources, 34(9):1124-1139, 2011.
 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.
+<em>PETSc Users Manual</em>, ANL-95/11 - Revision 3.8, 2017.
 <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>
diff --git a/docs/index.rst b/docs/index.rst
index bef6486..7a40e57 100644
--- a/docs/index.rst
+++ b/docs/index.rst
@@ -52,7 +52,7 @@ project.
   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.
+  *PETSc Users Manual*, ANL-95/11 - Revision 3.8, 2017.
   http://www.mcs.anl.gov/petsc/petsc-current/docs/manual.pdf
 
 
diff --git a/docs/petsc4py.1 b/docs/petsc4py.1
index 7716428..1fa665f 100644
--- a/docs/petsc4py.1
+++ b/docs/petsc4py.1
@@ -1,6 +1,6 @@
 .\" Man page generated from reStructuredText.
 .
-.TH "PETSC4PY" "1" "May 01, 2016" "3.7" "PETSc for Python"
+.TH "PETSC4PY" "1" "Oct 02, 2017" "3.8" "PETSc for Python"
 .SH NAME
 petsc4py \- PETSc for Python
 .
@@ -42,7 +42,7 @@ Lisandro Dalcin
 \fI\%https://bitbucket.org/petsc/petsc4py\fP
 .TP
 .B Date
-May 01, 2016
+Oct 02, 2017
 .UNINDENT
 .SS Abstract
 .sp
@@ -107,14 +107,14 @@ 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.
+\fIPETSc Users Manual\fP, ANL\-95/11 \- Revision 3.8, 2017.
 \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
 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.
+H. P. Langtangen, editors. 163–202. Birkhauser Press. 1997.
 .SS Components
 .sp
 PETSc is designed with an object\-oriented style. Almost all
@@ -227,7 +227,7 @@ A matching version of \fI\%PETSc\fP built with shared libraries.
 .UNINDENT
 .IP [1] 5
 Unless you have appropiatelly configured and built PETSc
-without MPI (configure option \fI\-\-with\-mpi=0\fP).
+without MPI (configure option \fB\-\-with\-mpi=0\fP).
 .IP [2] 5
 You may need to use a parallelized version of the Python
 interpreter with some MPI\-1 implementations (e.g. MPICH1).
@@ -244,7 +244,7 @@ Using \fBcurl\fP:
 .sp
 .nf
 .ft C
-$ curl \-O https://bitbucket.org/petsc/petsc4py/petsc4py\-X.Y.tar.gz
+$ curl \-O https://bitbucket.org/petsc/petsc4py/petsc4py\-X.Y.Z.tar.gz
 .ft P
 .fi
 .UNINDENT
@@ -256,7 +256,7 @@ Using \fBwget\fP:
 .sp
 .nf
 .ft C
-$ wget https://bitbucket.org/petsc/petsc4py/petsc4py\-X.Y.tar.gz
+$ wget https://bitbucket.org/petsc/petsc4py/petsc4py\-X.Y.Z.tar.gz
 .ft P
 .fi
 .UNINDENT
@@ -270,8 +270,8 @@ After unpacking the release tarball:
 .sp
 .nf
 .ft C
-$ tar \-zxf petsc4py\-X.Y.tar.gz
-$ cd petsc4py\-X.Y
+$ tar \-zxf petsc4py\-X.Y.Z.tar.gz
+$ cd petsc4py\-X.Y.Z
 .ft P
 .fi
 .UNINDENT
@@ -368,7 +368,7 @@ $ python setup.py install
 .UNINDENT
 .sp
 The previous steps will install the \fBpetsc4py\fP package at standard
-location \fB\fIprefix\fP/lib/python\fIX\fP\&.\fIX\fP/site\-packages\fP\&.
+location \fB\fIprefix\fP\fP\fB/lib/python\fP\fIX\fP\fB\&.\fP\fIY\fP\fB/site\-packages\fP\&.
 .sp
 If you do not have root privileges or you want to install \fIPETSc for
 Python\fP for your private use, just do:
@@ -384,7 +384,7 @@ $ python setup.py install \-\-user
 .UNINDENT
 .SS Tutorial
 .sp
-XXX To be written ... Any contribution welcome!
+XXX To be written … Any contribution welcome!
 .SS Citations
 .sp
 If PETSc for Python been significant to a project that leads to an
@@ -401,12 +401,12 @@ 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.
+\fIPETSc Users Manual\fP, ANL\-95/11 \- Revision 3.8, 2017.
 \fI\%http://www.mcs.anl.gov/petsc/petsc\-current/docs/manual.pdf\fP
 .UNINDENT
 .SH AUTHOR
 Lisandro Dalcin
 .SH COPYRIGHT
-2016, Lisandro Dalcin
+2017, Lisandro Dalcin
 .\" Generated by docutils manpage writer.
 .
diff --git a/docs/petsc4py.info b/docs/petsc4py.info
index 0fe2ad9..fd50a07 100644
--- a/docs/petsc4py.info
+++ b/docs/petsc4py.info
@@ -1,11 +1,11 @@
-This is petsc4py.info, produced by makeinfo version 6.0 from
+This is petsc4py.info, produced by makeinfo version 6.3 from
 petsc4py.texi.
 
-     PETSc for Python 3.7.0, May 01, 2016
+     PETSc for Python 3.8.0, Oct 02, 2017
 
      Lisandro Dalcin
 
-     Copyright © 2016, Lisandro Dalcin
+     Copyright © 2017, 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.2.3.
+   Generated by Sphinx 1.6.3.
 
 
 File: petsc4py.info,  Node: Top,  Next: Contents,  Up: (dir)
@@ -21,11 +21,11 @@ File: petsc4py.info,  Node: Top,  Next: Contents,  Up: (dir)
 PETSc for Python
 ****************
 
-     PETSc for Python 3.7.0, May 01, 2016
+     PETSc for Python 3.8.0, Oct 02, 2017
 
      Lisandro Dalcin
 
-     Copyright © 2016, Lisandro Dalcin
+     Copyright © 2017, Lisandro Dalcin
 
 
 Author: Lisandro Dalcin
@@ -37,7 +37,7 @@ Contact: <dalcinl at gmail.com>
 Web Site: ‘https://bitbucket.org/petsc/petsc4py’
 
 
-Date: May 01, 2016
+Date: Oct 02, 2017
 
 Abstract
 ========
@@ -159,7 +159,7 @@ 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.
+Users Manual', ANL-95/11 - Revision 3.8, 2017.
 ‘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
@@ -247,19 +247,19 @@ File: petsc4py.info,  Node: Using pip or easy_install,  Next: Using distutils,
 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
 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
@@ -316,16 +316,16 @@ File: petsc4py.info,  Node: Downloading,  Next: Building,  Prev: Requirements,
 ...................
 
 The `PETSc for Python' package is available for download at the project
-website generously hosted by Bitbucket.  You can use `curl' or `wget' to
+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
+          $ curl -O https://bitbucket.org/petsc/petsc4py/petsc4py-X.Y.Z.tar.gz
 
-   * Using `wget':
+   * Using ‘wget’:
 
-          $ wget https://bitbucket.org/petsc/petsc4py/petsc4py-X.Y.tar.gz
+          $ wget https://bitbucket.org/petsc/petsc4py/petsc4py-X.Y.Z.tar.gz
 
 
 File: petsc4py.info,  Node: Building,  Next: Installing,  Prev: Downloading,  Up: Using distutils
@@ -335,8 +335,8 @@ File: petsc4py.info,  Node: Building,  Next: Installing,  Prev: Downloading,  Up
 
 After unpacking the release tarball:
 
-     $ tar -zxf petsc4py-X.Y.tar.gz
-     $ cd petsc4py-X.Y
+     $ tar -zxf petsc4py-X.Y.Z.tar.gz
+     $ cd petsc4py-X.Y.Z
 
 the distribution is ready for building.
 
@@ -353,7 +353,7 @@ the distribution is ready for building.
           $ 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
+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:
 
@@ -381,13 +381,13 @@ 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
+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’.
+location ‘`prefix'/lib/python`X'.`Y'/site-packages’.
 
 If you do not have root privileges or you want to install `PETSc for
 Python' for your private use, just do:
@@ -400,7 +400,7 @@ File: petsc4py.info,  Node: Tutorial,  Next: Citations,  Prev: Installation,  Up
 1.3 Tutorial
 ============
 
-XXX To be written ...  Any contribution welcome!
+XXX To be written … Any contribution welcome!
 
 
 File: petsc4py.info,  Node: Citations,  Prev: Tutorial,  Up: Contents
@@ -421,7 +421,7 @@ project.
      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.
+     Revision 3.8, 2017.
      ‘http://www.mcs.anl.gov/petsc/petsc-current/docs/manual.pdf’
 
 
@@ -497,40 +497,40 @@ 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
+Node: Using distutils7519
+Ref: install using-distutils7619
+Ref: c7619
+Node: Requirements7743
+Ref: install requirements7829
+Ref: d7829
+Ref: Requirements-Footnote-18199
+Ref: Requirements-Footnote-28232
+Ref: Requirements-Footnote-38348
+Ref: Requirements-Footnote-48378
+Ref: Requirements-Footnote-58410
+Ref: Requirements-Footnote-68448
+Node: Downloading8477
+Ref: install downloading8580
+Ref: e8580
+Ref: install slepc4py8580
+Ref: f8580
+Node: Building9003
+Ref: install building9104
+Ref: 109104
+Node: Installing10544
+Ref: install installing10625
+Ref: 1110625
+Node: Tutorial11204
+Ref: tutorial doc11298
+Ref: 1211298
+Ref: tutorial tutorial11298
+Ref: 1311298
+Node: Citations11374
+Ref: citing citations11447
+Ref: 1411447
+Ref: citing doc11447
+Ref: 1511447
+Node: Index12210
 
 End Tag Table
 
diff --git a/docs/petsc4py.pdf b/docs/petsc4py.pdf
index bbf7f61..f18559c 100644
Binary files a/docs/petsc4py.pdf and b/docs/petsc4py.pdf differ
diff --git a/docs/source/Makefile b/docs/source/Makefile
index 22e3d91..0dc0f8f 100644
--- a/docs/source/Makefile
+++ b/docs/source/Makefile
@@ -1,172 +1,20 @@
-# Makefile for Sphinx documentation
+# Minimal makefile for Sphinx documentation
 #
 
 # You can set these variables from the command line.
 SPHINXOPTS    =
-SPHINXBUILD   = sphinx-build
-PAPER         =
+SPHINXBUILD   = python -msphinx
+SPHINXPROJ    = petsc4py
+SOURCEDIR     = .
 BUILDDIR      = _build
 
-# Internal variables.
-PAPEROPT_a4     = -D latex_paper_size=a4
-PAPEROPT_letter = -D latex_paper_size=letter
-ALLSPHINXOPTS   = -d $(BUILDDIR)/doctrees $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
-# the i18n builder cannot share the environment and doctrees with the others
-I18NSPHINXOPTS  = $(PAPEROPT_$(PAPER)) $(SPHINXOPTS) .
-
-.PHONY: help clean html dirhtml singlehtml pickle json htmlhelp qthelp devhelp epub latex latexpdf text man changes linkcheck doctest gettext
-
+# Put it first so that "make" without argument is like "make 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 "  latexpdf   to make LaTeX files and run them through pdflatex"
-	@echo "  latexpdfja to make LaTeX files and run them through platex/dvipdfmx"
-	@echo "  text       to make text files"
-	@echo "  man        to make manual pages"
-	@echo "  texinfo    to make Texinfo files"
-	@echo "  info       to make Texinfo files and run them through makeinfo"
-	@echo "  gettext    to make PO message catalogs"
-	@echo "  changes    to make an overview of 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)"
-
-clean:
-	rm -rf $(BUILDDIR)/*
-
-html:
-	$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
-	@echo
-	@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
-
-dirhtml:
-	$(SPHINXBUILD) -b dirhtml $(ALLSPHINXOPTS) $(BUILDDIR)/dirhtml
-	@echo
-	@echo "Build finished. The HTML pages are in $(BUILDDIR)/dirhtml."
-
-singlehtml:
-	$(SPHINXBUILD) -b singlehtml $(ALLSPHINXOPTS) $(BUILDDIR)/singlehtml
-	@echo
-	@echo "Build finished. The HTML page is in $(BUILDDIR)/singlehtml."
-
-pickle:
-	$(SPHINXBUILD) -b pickle $(ALLSPHINXOPTS) $(BUILDDIR)/pickle
-	@echo
-	@echo "Build finished; now you can process the pickle files."
-
-json:
-	$(SPHINXBUILD) -b json $(ALLSPHINXOPTS) $(BUILDDIR)/json
-	@echo
-	@echo "Build finished; now you can process the JSON files."
-
-htmlhelp:
-	$(SPHINXBUILD) -b htmlhelp $(ALLSPHINXOPTS) $(BUILDDIR)/htmlhelp
-	@echo
-	@echo "Build finished; now you can run HTML Help Workshop with the" \
-	      ".hhp project file in $(BUILDDIR)/htmlhelp."
-
-qthelp:
-	$(SPHINXBUILD) -b qthelp $(ALLSPHINXOPTS) $(BUILDDIR)/qthelp
-	@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.qhc"
-
-devhelp:
-	$(SPHINXBUILD) -b devhelp $(ALLSPHINXOPTS) $(BUILDDIR)/devhelp
-	@echo
-	@echo "Build finished."
-	@echo "To view the help file:"
-	@echo "# mkdir -p $$HOME/.local/share/devhelp/petsc4py"
-	@echo "# ln -s $(BUILDDIR)/devhelp $$HOME/.local/share/devhelp/petsc4py"
-	@echo "# devhelp"
-
-epub:
-	$(SPHINXBUILD) -b epub $(ALLSPHINXOPTS) $(BUILDDIR)/epub
-	@echo
-	@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
-
-latex:
-	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
-	@echo
-	@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
-	@echo "Run \`make' in that directory to run these through (pdf)latex" \
-	      "(use \`make latexpdf' here to do that automatically)."
-
-latexpdf:
-	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
-	@echo "Running LaTeX files through pdflatex..."
-	$(MAKE) -C $(BUILDDIR)/latex all-pdf
-	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
-
-latexpdfja:
-	$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
-	@echo "Running LaTeX files through platex and dvipdfmx..."
-	$(MAKE) -C $(BUILDDIR)/latex all-pdf-ja
-	@echo "pdflatex finished; the PDF files are in $(BUILDDIR)/latex."
-
-text:
-	$(SPHINXBUILD) -b text $(ALLSPHINXOPTS) $(BUILDDIR)/text
-	@echo
-	@echo "Build finished. The text files are in $(BUILDDIR)/text."
-
-man:
-	$(SPHINXBUILD) -b man $(ALLSPHINXOPTS) $(BUILDDIR)/man
-	@echo
-	@echo "Build finished. The manual pages are in $(BUILDDIR)/man."
-
-texinfo:
-	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
-	@echo
-	@echo "Build finished. The Texinfo files are in $(BUILDDIR)/texinfo."
-	@echo "Run \`make' in that directory to run these through makeinfo" \
-	      "(use \`make info' here to do that automatically)."
-
-info:
-	$(SPHINXBUILD) -b texinfo $(ALLSPHINXOPTS) $(BUILDDIR)/texinfo
-	@echo "Running Texinfo files through makeinfo..."
-	make -C $(BUILDDIR)/texinfo info
-	@echo "makeinfo finished; the Info files are in $(BUILDDIR)/texinfo."
-
-gettext:
-	$(SPHINXBUILD) -b gettext $(I18NSPHINXOPTS) $(BUILDDIR)/locale
-	@echo
-	@echo "Build finished. The message catalogs are in $(BUILDDIR)/locale."
-
-changes:
-	$(SPHINXBUILD) -b changes $(ALLSPHINXOPTS) $(BUILDDIR)/changes
-	@echo
-	@echo "The overview file is in $(BUILDDIR)/changes."
-
-linkcheck:
-	$(SPHINXBUILD) -b linkcheck $(ALLSPHINXOPTS) $(BUILDDIR)/linkcheck
-	@echo
-	@echo "Link check complete; look for any errors in the above output " \
-	      "or in $(BUILDDIR)/linkcheck/output.txt."
-
-doctest:
-	$(SPHINXBUILD) -b doctest $(ALLSPHINXOPTS) $(BUILDDIR)/doctest
-	@echo "Testing of doctests in the sources finished, look at the " \
-	      "results in $(BUILDDIR)/doctest/output.txt."
+	@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
 
-xml:
-	$(SPHINXBUILD) -b xml $(ALLSPHINXOPTS) $(BUILDDIR)/xml
-	@echo
-	@echo "Build finished. The XML files are in $(BUILDDIR)/xml."
+.PHONY: help Makefile
 
-pseudoxml:
-	$(SPHINXBUILD) -b pseudoxml $(ALLSPHINXOPTS) $(BUILDDIR)/pseudoxml
-	@echo
-	@echo "Build finished. The pseudo-XML files are in $(BUILDDIR)/pseudoxml."
+# Catch-all target: route all unknown targets to Sphinx using the new
+# "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
+%: Makefile
+	@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
diff --git a/docs/source/citing.rst b/docs/source/citing.rst
index f60ae27..da92809 100644
--- a/docs/source/citing.rst
+++ b/docs/source/citing.rst
@@ -14,5 +14,5 @@ project.
   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.
+  *PETSc Users Manual*, ANL-95/11 - Revision 3.8, 2017.
   http://www.mcs.anl.gov/petsc/petsc-current/docs/manual.pdf
diff --git a/docs/source/conf.py b/docs/source/conf.py
index 1de773f..467204e 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -1,7 +1,7 @@
 # -*- coding: utf-8 -*-
 #
 # PETSc for Python documentation build configuration file, created by
-# sphinx-quickstart on Sun Aug 17 12:57:45 2014.
+# sphinx-quickstart on Sun Oct  1 15:52:05 2017.
 #
 # This file is execfile()d with the current directory set to its
 # containing dir.
@@ -12,21 +12,30 @@
 # All configuration values have a default; values that are commented out
 # serve to show the default.
 
-import sys
-import os
-
-try: from petsc4py import __version__ as petsc4py_version
-except: petsc4py_version = 'X.X.X'
-
 # If extensions (or modules to document with autodoc) are in another directory,
 # add these directories to sys.path here. If the directory is relative to the
 # documentation root, use os.path.abspath to make it absolute, like shown here.
-#sys.path.insert(0, os.path.abspath('.'))
+#
+# import os
+# import sys
+# sys.path.insert(0, os.path.abspath('.'))
+
+def get_version():
+    import sys, os, re
+    here = os.path.dirname(__file__)
+    pardir = [os.path.pardir] * 2
+    topdir = os.path.join(here, *pardir)
+    srcdir = os.path.join(topdir, 'src')
+    with open(os.path.join(srcdir, '__init__.py')) as f:
+        m = re.search(r"__version__\s*=\s*'(.*)'", f.read())
+        return m.groups()[0]
+
+pkg_version = get_version()
 
 # -- General configuration ------------------------------------------------
 
 # If your documentation needs a minimal Sphinx version, state it here.
-#needs_sphinx = '1.0'
+# needs_sphinx = '1.0'
 
 # Add any Sphinx extension module names here, as strings. They can be
 # extensions coming with Sphinx (named 'sphinx.ext.*') or your custom
@@ -34,10 +43,12 @@ except: petsc4py_version = 'X.X.X'
 extensions = []
 
 # Add any paths that contain templates here, relative to this directory.
-#templates_path = ['_templates']
+# templates_path = ['_templates']
 templates_path = []
 
-# The suffix of source filenames.
+# The suffix(es) of source filenames.
+# You can specify multiple suffix as a list of string:
+# source_suffix = ['.rst', '.md']
 source_suffix = '.rst'
 
 # The encoding of source files.
@@ -48,56 +59,38 @@ master_doc = 'index'
 
 # General information about the project.
 project = u'PETSc for Python'
-copyright = u'2016, Lisandro Dalcin'
+copyright = u'2017, Lisandro Dalcin'
+author = u'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
 # built documents.
 #
 # The short X.Y version.
-version = petsc4py_version[:3]
+version = pkg_version[:3]
 # The full version, including alpha/beta/rc tags.
-release = petsc4py_version
+release = pkg_version
 
 # The language for content autogenerated by Sphinx. Refer to documentation
 # for a list of supported languages.
-#language = None
-
-# There are two options for replacing |today|: either, you set today to some
-# non-false value, then it is used:
-#today = ''
-# Else, today_fmt is used as the format for a strftime call.
-#today_fmt = '%B %d, %Y'
+#
+# This is also used if you do content translation via gettext catalogs.
+# Usually you set "language" from the command line for these cases.
+language = None
 
 # List of patterns, relative to source directory, that match files and
 # directories to ignore when looking for source files.
-exclude_patterns = ['_build']
-
-# The reST default role (used for this markup: `text`) to use for all
-# documents.
-#default_role = None
-
-# If true, '()' will be appended to :func: etc. cross-reference text.
-#add_function_parentheses = True
-
-# If true, the current module name will be prepended to all description
-# unit titles (such as .. function::).
-#add_module_names = True
-
-# If true, sectionauthor and moduleauthor directives will be shown in the
-# output. They are ignored by default.
-#show_authors = False
+# This patterns also effect to html_static_path and html_extra_path
+exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store']
 
 # The name of the Pygments (syntax highlighting) style to use.
 pygments_style = 'sphinx'
 
-# A list of ignored prefixes for module index sorting.
-#modindex_common_prefix = []
+# If true, `todo` and `todoList` produce output, else they produce nothing.
+todo_include_todos = False
 
-# If true, keep warnings as "system message" paragraphs in the built documents.
-#keep_warnings = False
 
-# -- Options for HTML output ---------------------------------------------------
+# -- Options for HTML output ----------------------------------------------
 
 # The theme to use for HTML and HTML Help pages.  See the documentation for
 # a list of builtin themes.
@@ -106,84 +99,40 @@ html_theme = 'default'
 # Theme options are theme-specific and customize the look and feel of a theme
 # further.  For a list of options available for each theme, see the
 # documentation.
-#html_theme_options = {}
-
-# Add any paths that contain custom themes here, relative to this directory.
-#html_theme_path = []
-
-# The name for this set of Sphinx documents.  If None, it defaults to
-# "<project> v<release> documentation".
-#html_title = None
-
-# A shorter title for the navigation bar.  Default is the same as html_title.
-#html_short_title = None
-
-# The name of an image file (relative to this directory) to place at the top
-# of the sidebar.
-#html_logo = None
-
-# The name of an image file (within the static path) to use as favicon of the
-# docs.  This file should be a Windows icon file (.ico) being 16x16 or 32x32
-# pixels large.
-#html_favicon = None
+# html_theme_options = {}
 
 # Add any paths that contain custom static files (such as style sheets) here,
 # relative to this directory. They are copied after the builtin static files,
 # so a file named "default.css" will overwrite the builtin "default.css".
-#html_static_path = ['_static']
+# html_static_path = ['_static']
 html_static_path = []
 
-# Add any extra paths that contain custom files (such as robots.txt or
-# .htaccess) here, relative to this directory. These files are copied
-# directly to the root of the documentation.
-#html_extra_path = []
+# Custom sidebar templates, must be a dictionary that maps document names
+# to template names.
+#
+# This is required for the alabaster theme
+# refs: http://alabaster.readthedocs.io/en/latest/installation.html#sidebars
+# html_sidebars = {
+#     '**': [
+#         'about.html',
+#         'navigation.html',
+#         'relations.html',  # needs 'show_related': True theme option to display
+#         'searchbox.html',
+#         'donate.html',
+#     ]
+# }
 
 # If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
 # using the given strftime format.
 #html_last_updated_fmt = '%b %d, %Y'
 
-# If true, SmartyPants will be used to convert quotes and dashes to
-# typographically correct entities.
-#html_use_smartypants = True
-
-# Custom sidebar templates, maps document names to template names.
-#html_sidebars = {}
-
-# Additional templates that should be rendered to pages, maps page names to
-# template names.
-#html_additional_pages = {}
-
-# If false, no module index is generated.
-#html_domain_indices = True
-
-# If false, no index is generated.
-#html_use_index = True
-
-# If true, the index is split into individual pages for each letter.
-#html_split_index = False
-
-# If true, links to the reST sources are added to the pages.
-#html_show_sourcelink = True
-
-# If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
-#html_show_sphinx = True
-
-# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
-#html_show_copyright = True
-
-# If true, an OpenSearch description file will be output, and all pages will
-# contain a <link> tag referring to it.  The value of this option must be the
-# base URL from which the finished HTML is served.
-#html_use_opensearch = ''
-
-# This is the file name suffix for HTML files (e.g. ".xhtml").
-#html_file_suffix = None
+# -- Options for HTMLHelp output ------------------------------------------
 
 # Output file base name for HTML help builder.
 htmlhelp_basename = 'petsc4py-man'
 
 
-# -- Options for LaTeX output --------------------------------------------------
+# -- Options for LaTeX output ---------------------------------------------
 
 latex_elements = {
 # The paper size ('letterpaper' or 'a4paper').
@@ -195,141 +144,61 @@ latex_elements = {
 
 # Additional stuff for the LaTeX preamble.
 #'preamble': '',
-'printmodindex': '',
-'printindex': '',
-'preamble' : r'\usepackage{sphinxfix}',
+#'printmodindex': '',
+#'printindex': '',
+#'preamble' : '',
 }
-latex_additional_files = ['sphinxfix.sty']
 
 # Grouping the document tree into LaTeX files. List of tuples
-# (source start file, target name, title, author, documentclass [howto/manual]).
+# (source start file, target name, title,
+#  author, documentclass [howto, manual, or own class]).
 latex_documents = [
-  ('manual', 'petsc4py.tex', u'PETSc for Python',
-   u'Lisandro Dalcin', 'howto'),
+    ('manual', 'petsc4py.tex', project, author, 'howto'),
 ]
 
 # The name of an image file (relative to this directory) to place at the top of
 # the title page.
 #latex_logo = None
 
-# For "manual" documents, if this is true, then toplevel headings are parts,
-# not chapters.
-#latex_use_parts = False
-
-# If true, show page references after internal links.
-#latex_show_pagerefs = False
-
-# If true, show URL addresses after external links.
-#latex_show_urls = False
-
-# Documents to append as an appendix to all manuals.
-#latex_appendices = []
-
-# If false, no module index is generated.
-#latex_domain_indices = True
-
-# -- Options for manual page output --------------------------------------------
+# -- Options for manual page output ---------------------------------------
 
 # One entry per manual page. List of tuples
 # (source start file, name, description, authors, manual section).
 man_pages = [
-    ('index', 'petsc4py', u'PETSc for Python',
-     [u'Lisandro Dalcin'], 1)
+    (master_doc, 'petsc4py', project, [author], 1)
 ]
 
 # If true, show URL addresses after external links.
 #man_show_urls = False
 
-
-# -- Options for Texinfo output ------------------------------------------------
+# -- Options for Texinfo output -------------------------------------------
 
 # Grouping the document tree into Texinfo files. List of tuples
 # (source start file, target name, title, author,
 #  dir menu entry, description, category)
 texinfo_documents = [
-  ('index', 'petsc4py', u'PETSc for Python',
-   u'Lisandro Dalcin', 'petsc4py', 'PETSc for Python.',
-   'Miscellaneous'),
+    (master_doc, 'petsc4py', project, author,
+     'petsc4py', project+u'.', 'Miscellaneous'),
 ]
 
-# Documents to append as an appendix to all manuals.
-#texinfo_appendices = []
-
-# If false, no module index is generated.
-#texinfo_domain_indices = True
-
-# How to display URL addresses: 'footnote', 'no', or 'inline'.
-#texinfo_show_urls = 'footnote'
-
-# If true, do not generate a @detailmenu in the "Top" node's menu.
-#texinfo_no_detailmenu = False
-
-
 # -- Options for Epub output ----------------------------------------------
 
 # Bibliographic Dublin Core info.
-epub_title = u'petsc4py'
-epub_author = u'Lisandro Dalcin'
-epub_publisher = u'Lisandro Dalcin'
-epub_copyright = u'2016, Lisandro Dalcin'
-
-# The basename for the epub file. It defaults to the project name.
-epub_basename = u'petsc4py'
-
-# The HTML theme for the epub output. Since the default themes are not optimized
-# for small screen space, using the same theme for HTML and epub output is
-# usually not wise. This defaults to 'epub', a theme designed to save visual
-# space.
-#epub_theme = 'epub'
-
-# The language of the text. It defaults to the language option
-# or en if the language is not set.
-#epub_language = ''
-
-# The scheme of the identifier. Typical schemes are ISBN or URL.
-#epub_scheme = ''
+epub_title = project
+epub_author = author
+epub_publisher = author
+epub_copyright = copyright
 
 # The unique identifier of the text. This can be a ISBN number
 # or the project homepage.
-#epub_identifier = ''
+#
+# epub_identifier = ''
 
 # A unique identification for the text.
-#epub_uid = ''
-
-# A tuple containing the cover image and cover page html template filenames.
-#epub_cover = ()
-
-# A sequence of (type, uri, title) tuples for the guide element of content.opf.
-#epub_guide = ()
-
-# HTML files that should be inserted before the pages created by sphinx.
-# The format is a list of tuples containing the path and title.
-#epub_pre_files = []
-
-# HTML files shat should be inserted after the pages created by sphinx.
-# The format is a list of tuples containing the path and title.
-#epub_post_files = []
+#
+# epub_uid = ''
 
 # A list of files that should not be packed into the epub file.
 epub_exclude_files = ['search.html']
 
-# The depth of the table of contents in toc.ncx.
-#epub_tocdepth = 3
-
-# Allow duplicate toc entries.
-#epub_tocdup = True
-
-# Choose between 'default' and 'includehidden'.
-#epub_tocscope = 'default'
-
-# Fix unsupported image types using the PIL.
-#epub_fix_images = False
-
-# Scale large images.
-#epub_max_image_width = 0
-
-# How to display URL addresses: 'footnote', 'no', or 'inline'.
-#epub_show_urls = 'inline'
 
-# If false, no index is generated.
-#epub_use_index = True
diff --git a/docs/source/install.rst b/docs/source/install.rst
index a9bcac4..74452bf 100644
--- a/docs/source/install.rst
+++ b/docs/source/install.rst
@@ -40,7 +40,7 @@ build *PETSc for Python*:
 * NumPy_ package.
 
 .. [#] Unless you have appropiatelly configured and built PETSc
-       without MPI (configure option :option:`--with-mpi=0`).
+       without MPI (configure option ``--with-mpi=0``).
 
 .. [#] You may need to use a parallelized version of the Python
        interpreter with some MPI-1 implementations (e.g. MPICH1).
@@ -56,19 +56,19 @@ project website generously hosted by Bitbucket. You can use
 
 * Using :program:`curl`::
 
-    $ curl -O https://bitbucket.org/petsc/petsc4py/petsc4py-X.Y.tar.gz
+    $ curl -O https://bitbucket.org/petsc/petsc4py/petsc4py-X.Y.Z.tar.gz
 
 * Using :program:`wget`::
 
-    $ wget https://bitbucket.org/petsc/petsc4py/petsc4py-X.Y.tar.gz
+    $ wget https://bitbucket.org/petsc/petsc4py/petsc4py-X.Y.Z.tar.gz
 
 Building
 ^^^^^^^^
 
 After unpacking the release tarball::
 
-  $ tar -zxf petsc4py-X.Y.tar.gz
-  $ cd petsc4py-X.Y
+  $ tar -zxf petsc4py-X.Y.Z.tar.gz
+  $ cd petsc4py-X.Y.Z
 
 the distribution is ready for building.
 
@@ -118,7 +118,7 @@ your system for all users, just do::
   $ python setup.py install
 
 The previous steps will install the :mod:`petsc4py` package at standard
-location :file:`{prefix}/lib/python{X}.{X}/site-packages`.
+location :file:`{prefix}/lib/python{X}.{Y}/site-packages`.
 
 If you do not have root privileges or you want to install *PETSc for
 Python* for your private use, just do::
diff --git a/docs/source/links.txt b/docs/source/links.txt
index 2fe4fec..3e06e5d 100644
--- a/docs/source/links.txt
+++ b/docs/source/links.txt
@@ -8,8 +8,6 @@
 
 .. _SLEPc:        http://slepc.upv.es
 
-.. _TAO:          http://www.mcs.anl.gov/tao/
-
 .. _Python:       http://www.python.org
 
 .. _NumPy:        http://www.numpy.org
diff --git a/docs/source/make.bat b/docs/source/make.bat
index 04057f3..d0cb6f6 100644
--- a/docs/source/make.bat
+++ b/docs/source/make.bat
@@ -1,228 +1,36 @@
- 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
+
+pushd %~dp0
+
+REM Command file for Sphinx documentation
+
+if "%SPHINXBUILD%" == "" (
+	set SPHINXBUILD=python -msphinx
+)
+set SOURCEDIR=.
+set BUILDDIR=_build
+set SPHINXPROJ=petsc4py
+
+if "%1" == "" goto help
+
+%SPHINXBUILD% >NUL 2>NUL
+if errorlevel 9009 (
+	echo.
+	echo.The Sphinx module was not found. Make sure you have Sphinx installed,
+	echo.then set the SPHINXBUILD environment variable to point to the full
+	echo.path of the 'sphinx-build' executable. Alternatively you may add the
+	echo.Sphinx directory to PATH.
+	echo.
+	echo.If you don't have Sphinx installed, grab it from
+	echo.http://sphinx-doc.org/
+	exit /b 1
+)
+
+%SPHINXBUILD% -M %1 %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
+goto end
+
+:help
+%SPHINXBUILD% -M help %SOURCEDIR% %BUILDDIR% %SPHINXOPTS%
+
+:end
+popd
diff --git a/docs/source/overview.rst b/docs/source/overview.rst
index 23d6d56..9f000ae 100644
--- a/docs/source/overview.rst
+++ b/docs/source/overview.rst
@@ -26,7 +26,7 @@ communication and computation.
    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.
+   *PETSc Users Manual*, ANL-95/11 - Revision 3.8, 2017.
    http://www.mcs.anl.gov/petsc/petsc-current/docs/manual.pdf
 
 .. [petsc-efficient] Satish Balay, Victor Eijkhout, William D. Gropp,
diff --git a/docs/source/sphinxfix.sty b/docs/source/sphinxfix.sty
deleted file mode 100644
index b1dc14e..0000000
--- a/docs/source/sphinxfix.sty
+++ /dev/null
@@ -1,34 +0,0 @@
-\setcounter{tocdepth}{2}
-
-\pagenumbering{arabic}
-
-\makeatletter
-\renewcommand{\theindex}{
-  \cleardoublepage
-  \phantomsection
-  \py at OldTheindex
-  \addcontentsline{toc}{section}{\indexname}
-}
-\makeatother
-
-\makeatletter
-\renewcommand{\thebibliography}[1]{
-  \cleardoublepage
-  \phantomsection
-  \py at OldThebibliography{1}
-  \addcontentsline{toc}{section}{\bibname}
-}
-\makeatother
-
-\makeatletter
-\renewcommand{\tableofcontents}{
-  \begingroup
-    \parskip = 0mm
-    \py at OldTableofcontents
-  \endgroup
-  \vfill
-  \rule{\textwidth}{1pt}
-  \newpage
-}
-\makeatother
-
diff --git a/docs/usrman/.buildinfo b/docs/usrman/.buildinfo
index 263491e..c422b13 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: b59cf89f477e7df72172e47fbf2b557f
+config: e43391bedd21eb20333259c0bd6fb54e
 tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/docs/usrman/_sources/citing.txt b/docs/usrman/_sources/citing.rst.txt
similarity index 92%
rename from docs/usrman/_sources/citing.txt
rename to docs/usrman/_sources/citing.rst.txt
index f60ae27..da92809 100644
--- a/docs/usrman/_sources/citing.txt
+++ b/docs/usrman/_sources/citing.rst.txt
@@ -14,5 +14,5 @@ project.
   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.
+  *PETSc Users Manual*, ANL-95/11 - Revision 3.8, 2017.
   http://www.mcs.anl.gov/petsc/petsc-current/docs/manual.pdf
diff --git a/docs/usrman/_sources/index.txt b/docs/usrman/_sources/index.rst.txt
similarity index 100%
rename from docs/usrman/_sources/index.txt
rename to docs/usrman/_sources/index.rst.txt
diff --git a/docs/usrman/_sources/install.txt b/docs/usrman/_sources/install.rst.txt
similarity index 93%
rename from docs/usrman/_sources/install.txt
rename to docs/usrman/_sources/install.rst.txt
index a9bcac4..74452bf 100644
--- a/docs/usrman/_sources/install.txt
+++ b/docs/usrman/_sources/install.rst.txt
@@ -40,7 +40,7 @@ build *PETSc for Python*:
 * NumPy_ package.
 
 .. [#] Unless you have appropiatelly configured and built PETSc
-       without MPI (configure option :option:`--with-mpi=0`).
+       without MPI (configure option ``--with-mpi=0``).
 
 .. [#] You may need to use a parallelized version of the Python
        interpreter with some MPI-1 implementations (e.g. MPICH1).
@@ -56,19 +56,19 @@ project website generously hosted by Bitbucket. You can use
 
 * Using :program:`curl`::
 
-    $ curl -O https://bitbucket.org/petsc/petsc4py/petsc4py-X.Y.tar.gz
+    $ curl -O https://bitbucket.org/petsc/petsc4py/petsc4py-X.Y.Z.tar.gz
 
 * Using :program:`wget`::
 
-    $ wget https://bitbucket.org/petsc/petsc4py/petsc4py-X.Y.tar.gz
+    $ wget https://bitbucket.org/petsc/petsc4py/petsc4py-X.Y.Z.tar.gz
 
 Building
 ^^^^^^^^
 
 After unpacking the release tarball::
 
-  $ tar -zxf petsc4py-X.Y.tar.gz
-  $ cd petsc4py-X.Y
+  $ tar -zxf petsc4py-X.Y.Z.tar.gz
+  $ cd petsc4py-X.Y.Z
 
 the distribution is ready for building.
 
@@ -118,7 +118,7 @@ your system for all users, just do::
   $ python setup.py install
 
 The previous steps will install the :mod:`petsc4py` package at standard
-location :file:`{prefix}/lib/python{X}.{X}/site-packages`.
+location :file:`{prefix}/lib/python{X}.{Y}/site-packages`.
 
 If you do not have root privileges or you want to install *PETSc for
 Python* for your private use, just do::
diff --git a/docs/usrman/_sources/manual.txt b/docs/usrman/_sources/manual.rst.txt
similarity index 100%
rename from docs/usrman/_sources/manual.txt
rename to docs/usrman/_sources/manual.rst.txt
diff --git a/docs/usrman/_sources/overview.txt b/docs/usrman/_sources/overview.rst.txt
similarity index 98%
rename from docs/usrman/_sources/overview.txt
rename to docs/usrman/_sources/overview.rst.txt
index 23d6d56..9f000ae 100644
--- a/docs/usrman/_sources/overview.txt
+++ b/docs/usrman/_sources/overview.rst.txt
@@ -26,7 +26,7 @@ communication and computation.
    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.
+   *PETSc Users Manual*, ANL-95/11 - Revision 3.8, 2017.
    http://www.mcs.anl.gov/petsc/petsc-current/docs/manual.pdf
 
 .. [petsc-efficient] Satish Balay, Victor Eijkhout, William D. Gropp,
diff --git a/docs/usrman/_sources/tutorial.txt b/docs/usrman/_sources/tutorial.rst.txt
similarity index 100%
rename from docs/usrman/_sources/tutorial.txt
rename to docs/usrman/_sources/tutorial.rst.txt
diff --git a/docs/usrman/_static/basic.css b/docs/usrman/_static/basic.css
index 967e36c..6df76b0 100644
--- a/docs/usrman/_static/basic.css
+++ b/docs/usrman/_static/basic.css
@@ -4,7 +4,7 @@
  *
  * Sphinx stylesheet -- basic theme.
  *
- * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2017 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  *
  */
@@ -52,6 +52,8 @@ div.sphinxsidebar {
     width: 230px;
     margin-left: -100%;
     font-size: 90%;
+    word-wrap: break-word;
+    overflow-wrap : break-word;
 }
 
 div.sphinxsidebar ul {
@@ -83,10 +85,6 @@ div.sphinxsidebar #searchbox input[type="text"] {
     width: 170px;
 }
 
-div.sphinxsidebar #searchbox input[type="submit"] {
-    width: 30px;
-}
-
 img {
     border: 0;
     max-width: 100%;
@@ -124,6 +122,8 @@ ul.keywordmatches li.goodmatch a {
 
 table.contentstable {
     width: 90%;
+    margin-left: auto;
+    margin-right: auto;
 }
 
 table.contentstable p.biglink {
@@ -151,9 +151,14 @@ table.indextable td {
     vertical-align: top;
 }
 
-table.indextable dl, table.indextable dd {
+table.indextable ul {
     margin-top: 0;
     margin-bottom: 0;
+    list-style-type: none;
+}
+
+table.indextable > tbody > tr > td > ul {
+    padding-left: 0em;
 }
 
 table.indextable tr.pcap {
@@ -185,8 +190,22 @@ div.genindex-jumpbox {
     padding: 0.4em;
 }
 
+/* -- domain module index --------------------------------------------------- */
+
+table.modindextable td {
+    padding: 2px;
+    border-collapse: collapse;
+}
+
 /* -- general body styles --------------------------------------------------- */
 
+div.body p, div.body dd, div.body li, div.body blockquote {
+    -moz-hyphens: auto;
+    -ms-hyphens: auto;
+    -webkit-hyphens: auto;
+    hyphens: auto;
+}
+
 a.headerlink {
     visibility: hidden;
 }
@@ -197,7 +216,10 @@ h3:hover > a.headerlink,
 h4:hover > a.headerlink,
 h5:hover > a.headerlink,
 h6:hover > a.headerlink,
-dt:hover > a.headerlink {
+dt:hover > a.headerlink,
+caption:hover > a.headerlink,
+p.caption:hover > a.headerlink,
+div.code-block-caption:hover > a.headerlink {
     visibility: visible;
 }
 
@@ -209,10 +231,6 @@ div.body td {
     text-align: left;
 }
 
-.field-list ul {
-    padding-left: 1em;
-}
-
 .first {
     margin-top: 0 !important;
 }
@@ -314,6 +332,13 @@ table.docutils {
     border-collapse: collapse;
 }
 
+table caption span.caption-number {
+    font-style: italic;
+}
+
+table caption span.caption-text {
+}
+
 table.docutils td, table.docutils th {
     padding: 1px 8px 1px 5px;
     border-top: 0;
@@ -322,10 +347,6 @@ table.docutils td, table.docutils th {
     border-bottom: 1px solid #aaa;
 }
 
-table.field-list td, table.field-list th {
-    border: 0 !important;
-}
-
 table.footnote td, table.footnote th {
     border: 0 !important;
 }
@@ -344,6 +365,46 @@ table.citation td {
     border-bottom: none;
 }
 
+/* -- figures --------------------------------------------------------------- */
+
+div.figure {
+    margin: 0.5em;
+    padding: 0.5em;
+}
+
+div.figure p.caption {
+    padding: 0.3em;
+}
+
+div.figure p.caption span.caption-number {
+    font-style: italic;
+}
+
+div.figure p.caption span.caption-text {
+}
+
+/* -- field list styles ----------------------------------------------------- */
+
+table.field-list td, table.field-list th {
+    border: 0 !important;
+}
+
+.field-list ul {
+    margin: 0;
+    padding-left: 1em;
+}
+
+.field-list p {
+    margin: 0;
+}
+
+.field-name {
+    -moz-hyphens: manual;
+    -ms-hyphens: manual;
+    -webkit-hyphens: manual;
+    hyphens: manual;
+}
+
 /* -- other body styles ----------------------------------------------------- */
 
 ol.arabic {
@@ -393,19 +454,14 @@ dl.glossary dt {
     font-size: 1.1em;
 }
 
-.field-list ul {
-    margin: 0;
-    padding-left: 1em;
-}
-
-.field-list p {
-    margin: 0;
-}
-
 .optional {
     font-size: 1.3em;
 }
 
+.sig-paren {
+    font-size: larger;
+}
+
 .versionmodified {
     font-style: italic;
 }
@@ -456,6 +512,13 @@ pre {
     overflow-y: hidden;  /* fixes display issues on Chrome browsers */
 }
 
+span.pre {
+    -moz-hyphens: none;
+    -ms-hyphens: none;
+    -webkit-hyphens: none;
+    hyphens: none;
+}
+
 td.linenos pre {
     padding: 5px 0px;
     border: 0;
@@ -471,22 +534,51 @@ table.highlighttable td {
     padding: 0 0.5em 0 0.5em;
 }
 
-tt.descname {
+div.code-block-caption {
+    padding: 2px 5px;
+    font-size: small;
+}
+
+div.code-block-caption code {
+    background-color: transparent;
+}
+
+div.code-block-caption + div > div.highlight > pre {
+    margin-top: 0;
+}
+
+div.code-block-caption span.caption-number {
+    padding: 0.1em 0.3em;
+    font-style: italic;
+}
+
+div.code-block-caption span.caption-text {
+}
+
+div.literal-block-wrapper {
+    padding: 1em 1em 0;
+}
+
+div.literal-block-wrapper div.highlight {
+    margin: 0;
+}
+
+code.descname {
     background-color: transparent;
     font-weight: bold;
     font-size: 1.2em;
 }
 
-tt.descclassname {
+code.descclassname {
     background-color: transparent;
 }
 
-tt.xref, a tt {
+code.xref, a code {
     background-color: transparent;
     font-weight: bold;
 }
 
-h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
+h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
     background-color: transparent;
 }
 
@@ -518,6 +610,16 @@ span.eqno {
     float: right;
 }
 
+span.eqno a.headerlink {
+    position: relative;
+    left: 0px;
+    z-index: 1;
+}
+
+div.math:hover a.headerlink {
+    visibility: visible;
+}
+
 /* -- printout stylesheet --------------------------------------------------- */
 
 @media print {
diff --git a/docs/usrman/_static/default.css b/docs/usrman/_static/classic.css
similarity index 92%
copy from docs/usrman/_static/default.css
copy to docs/usrman/_static/classic.css
index 5f1399a..22fa0bd 100644
--- a/docs/usrman/_static/default.css
+++ b/docs/usrman/_static/classic.css
@@ -1,10 +1,10 @@
 /*
- * default.css_t
+ * classic.css_t
  * ~~~~~~~~~~~~~
  *
- * Sphinx stylesheet -- default theme.
+ * Sphinx stylesheet -- classic theme.
  *
- * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2017 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  *
  */
@@ -169,7 +169,7 @@ a.headerlink:hover {
     color: white;
 }
 
-div.body p, div.body dd, div.body li {
+div.body p, div.body dd, div.body li, div.body blockquote {
     text-align: justify;
     line-height: 130%;
 }
@@ -227,7 +227,7 @@ pre {
     border-right: none;
 }
 
-tt {
+code {
     background-color: #ecf0f3;
     padding: 0 1px 0 1px;
     font-size: 0.95em;
@@ -237,11 +237,11 @@ th {
     background-color: #ede;
 }
 
-.warning tt {
+.warning code {
     background: #efc2c2;
 }
 
-.note tt {
+.note code {
     background: #d6d6d6;
 }
 
@@ -253,4 +253,9 @@ div.viewcode-block:target {
     background-color: #f4debf;
     border-top: 1px solid #ac9;
     border-bottom: 1px solid #ac9;
+}
+
+div.code-block-caption {
+    color: #efefef;
+    background-color: #1c4e63;
 }
\ No newline at end of file
diff --git a/docs/usrman/_static/comment-bright.png b/docs/usrman/_static/comment-bright.png
index 551517b..15e27ed 100644
Binary files a/docs/usrman/_static/comment-bright.png and b/docs/usrman/_static/comment-bright.png differ
diff --git a/docs/usrman/_static/comment-close.png b/docs/usrman/_static/comment-close.png
index 09b54be..4d91bcf 100644
Binary files a/docs/usrman/_static/comment-close.png and b/docs/usrman/_static/comment-close.png differ
diff --git a/docs/usrman/_static/comment.png b/docs/usrman/_static/comment.png
index 92feb52..dfbc0cb 100644
Binary files a/docs/usrman/_static/comment.png and b/docs/usrman/_static/comment.png differ
diff --git a/docs/usrman/_static/default.css b/docs/usrman/_static/default.css
index 5f1399a..81b9363 100644
--- a/docs/usrman/_static/default.css
+++ b/docs/usrman/_static/default.css
@@ -1,256 +1 @@
-/*
- * default.css_t
- * ~~~~~~~~~~~~~
- *
- * Sphinx stylesheet -- default theme.
- *
- * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
- * :license: BSD, see LICENSE for details.
- *
- */
-
- at import url("basic.css");
-
-/* -- page layout ----------------------------------------------------------- */
-
-body {
-    font-family: sans-serif;
-    font-size: 100%;
-    background-color: #11303d;
-    color: #000;
-    margin: 0;
-    padding: 0;
-}
-
-div.document {
-    background-color: #1c4e63;
-}
-
-div.documentwrapper {
-    float: left;
-    width: 100%;
-}
-
-div.bodywrapper {
-    margin: 0 0 0 230px;
-}
-
-div.body {
-    background-color: #ffffff;
-    color: #000000;
-    padding: 0 20px 30px 20px;
-}
-
-div.footer {
-    color: #ffffff;
-    width: 100%;
-    padding: 9px 0 9px 0;
-    text-align: center;
-    font-size: 75%;
-}
-
-div.footer a {
-    color: #ffffff;
-    text-decoration: underline;
-}
-
-div.related {
-    background-color: #133f52;
-    line-height: 30px;
-    color: #ffffff;
-}
-
-div.related a {
-    color: #ffffff;
-}
-
-div.sphinxsidebar {
-}
-
-div.sphinxsidebar h3 {
-    font-family: 'Trebuchet MS', sans-serif;
-    color: #ffffff;
-    font-size: 1.4em;
-    font-weight: normal;
-    margin: 0;
-    padding: 0;
-}
-
-div.sphinxsidebar h3 a {
-    color: #ffffff;
-}
-
-div.sphinxsidebar h4 {
-    font-family: 'Trebuchet MS', sans-serif;
-    color: #ffffff;
-    font-size: 1.3em;
-    font-weight: normal;
-    margin: 5px 0 0 0;
-    padding: 0;
-}
-
-div.sphinxsidebar p {
-    color: #ffffff;
-}
-
-div.sphinxsidebar p.topless {
-    margin: 5px 10px 10px 10px;
-}
-
-div.sphinxsidebar ul {
-    margin: 10px;
-    padding: 0;
-    color: #ffffff;
-}
-
-div.sphinxsidebar a {
-    color: #98dbcc;
-}
-
-div.sphinxsidebar input {
-    border: 1px solid #98dbcc;
-    font-family: sans-serif;
-    font-size: 1em;
-}
-
-
-
-/* -- hyperlink styles ------------------------------------------------------ */
-
-a {
-    color: #355f7c;
-    text-decoration: none;
-}
-
-a:visited {
-    color: #355f7c;
-    text-decoration: none;
-}
-
-a:hover {
-    text-decoration: underline;
-}
-
-
-
-/* -- body styles ----------------------------------------------------------- */
-
-div.body h1,
-div.body h2,
-div.body h3,
-div.body h4,
-div.body h5,
-div.body h6 {
-    font-family: 'Trebuchet MS', sans-serif;
-    background-color: #f2f2f2;
-    font-weight: normal;
-    color: #20435c;
-    border-bottom: 1px solid #ccc;
-    margin: 20px -20px 10px -20px;
-    padding: 3px 0 3px 10px;
-}
-
-div.body h1 { margin-top: 0; font-size: 200%; }
-div.body h2 { font-size: 160%; }
-div.body h3 { font-size: 140%; }
-div.body h4 { font-size: 120%; }
-div.body h5 { font-size: 110%; }
-div.body h6 { font-size: 100%; }
-
-a.headerlink {
-    color: #c60f0f;
-    font-size: 0.8em;
-    padding: 0 4px 0 4px;
-    text-decoration: none;
-}
-
-a.headerlink:hover {
-    background-color: #c60f0f;
-    color: white;
-}
-
-div.body p, div.body dd, div.body li {
-    text-align: justify;
-    line-height: 130%;
-}
-
-div.admonition p.admonition-title + p {
-    display: inline;
-}
-
-div.admonition p {
-    margin-bottom: 5px;
-}
-
-div.admonition pre {
-    margin-bottom: 5px;
-}
-
-div.admonition ul, div.admonition ol {
-    margin-bottom: 5px;
-}
-
-div.note {
-    background-color: #eee;
-    border: 1px solid #ccc;
-}
-
-div.seealso {
-    background-color: #ffc;
-    border: 1px solid #ff6;
-}
-
-div.topic {
-    background-color: #eee;
-}
-
-div.warning {
-    background-color: #ffe4e4;
-    border: 1px solid #f66;
-}
-
-p.admonition-title {
-    display: inline;
-}
-
-p.admonition-title:after {
-    content: ":";
-}
-
-pre {
-    padding: 5px;
-    background-color: #eeffcc;
-    color: #333333;
-    line-height: 120%;
-    border: 1px solid #ac9;
-    border-left: none;
-    border-right: none;
-}
-
-tt {
-    background-color: #ecf0f3;
-    padding: 0 1px 0 1px;
-    font-size: 0.95em;
-}
-
-th {
-    background-color: #ede;
-}
-
-.warning tt {
-    background: #efc2c2;
-}
-
-.note tt {
-    background: #d6d6d6;
-}
-
-.viewcode-back {
-    font-family: sans-serif;
-}
-
-div.viewcode-block:target {
-    background-color: #f4debf;
-    border-top: 1px solid #ac9;
-    border-bottom: 1px solid #ac9;
-}
\ No newline at end of file
+ at import url("classic.css");
diff --git a/docs/usrman/_static/doctools.js b/docs/usrman/_static/doctools.js
index c5455c9..5654977 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-2014 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2017 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  *
  */
@@ -91,6 +91,30 @@ jQuery.fn.highlightText = function(text, className) {
   });
 };
 
+/*
+ * backward compatibility for jQuery.browser
+ * This will be supported until firefox bug is fixed.
+ */
+if (!jQuery.browser) {
+  jQuery.uaMatch = function(ua) {
+    ua = ua.toLowerCase();
+
+    var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
+      /(webkit)[ \/]([\w.]+)/.exec(ua) ||
+      /(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
+      /(msie) ([\w.]+)/.exec(ua) ||
+      ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
+      [];
+
+    return {
+      browser: match[ 1 ] || "",
+      version: match[ 2 ] || "0"
+    };
+  };
+  jQuery.browser = {};
+  jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
+}
+
 /**
  * Small JavaScript module for the documentation.
  */
@@ -100,6 +124,7 @@ var Documentation = {
     this.fixFirefoxAnchorBug();
     this.highlightSearchWords();
     this.initIndexTable();
+    
   },
 
   /**
@@ -152,9 +177,10 @@ var Documentation = {
 
   /**
    * workaround a firefox stupidity
+   * see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
    */
   fixFirefoxAnchorBug : function() {
-    if (document.location.hash && $.browser.mozilla)
+    if (document.location.hash)
       window.setTimeout(function() {
         document.location.href += '';
       }, 10);
@@ -227,6 +253,29 @@ var Documentation = {
     });
     var url = parts.join('/');
     return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
+  },
+
+  initOnKeyListeners: function() {
+    $(document).keyup(function(event) {
+      var activeElementType = document.activeElement.tagName;
+      // don't navigate when in search box or textarea
+      if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT') {
+        switch (event.keyCode) {
+          case 37: // left
+            var prevHref = $('link[rel="prev"]').prop('href');
+            if (prevHref) {
+              window.location.href = prevHref;
+              return false;
+            }
+          case 39: // right
+            var nextHref = $('link[rel="next"]').prop('href');
+            if (nextHref) {
+              window.location.href = nextHref;
+              return false;
+            }
+        }
+      }
+    });
   }
 };
 
@@ -235,4 +284,4 @@ _ = Documentation.gettext;
 
 $(document).ready(function() {
   Documentation.init();
-});
+});
\ No newline at end of file
diff --git a/docs/usrman/_static/down-pressed.png b/docs/usrman/_static/down-pressed.png
index 6f7ad78..5756c8c 100644
Binary files a/docs/usrman/_static/down-pressed.png and b/docs/usrman/_static/down-pressed.png differ
diff --git a/docs/usrman/_static/down.png b/docs/usrman/_static/down.png
index 3003a88..1b3bdad 100644
Binary files a/docs/usrman/_static/down.png and b/docs/usrman/_static/down.png differ
diff --git a/docs/usrman/_static/file.png b/docs/usrman/_static/file.png
index d18082e..a858a41 100644
Binary files a/docs/usrman/_static/file.png and b/docs/usrman/_static/file.png differ
diff --git a/docs/usrman/_static/jquery-3.1.0.js b/docs/usrman/_static/jquery-3.1.0.js
new file mode 100644
index 0000000..f2fc274
--- /dev/null
+++ b/docs/usrman/_static/jquery-3.1.0.js
@@ -0,0 +1,10074 @@
+/*eslint-disable no-unused-vars*/
+/*!
+ * jQuery JavaScript Library v3.1.0
+ * https://jquery.com/
+ *
+ * Includes Sizzle.js
+ * https://sizzlejs.com/
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license
+ * https://jquery.org/license
+ *
+ * Date: 2016-07-07T21:44Z
+ */
+( function( global, factory ) {
+
+	"use strict";
+
+	if ( typeof module === "object" && typeof module.exports === "object" ) {
+
+		// For CommonJS and CommonJS-like environments where a proper `window`
+		// is present, execute the factory and get jQuery.
+		// For environments that do not have a `window` with a `document`
+		// (such as Node.js), expose a factory as module.exports.
+		// This accentuates the need for the creation of a real `window`.
+		// e.g. var jQuery = require("jquery")(window);
+		// See ticket #14549 for more info.
+		module.exports = global.document ?
+			factory( global, true ) :
+			function( w ) {
+				if ( !w.document ) {
+					throw new Error( "jQuery requires a window with a document" );
+				}
+				return factory( w );
+			};
+	} else {
+		factory( global );
+	}
+
+// Pass this if window is not defined yet
+} )( typeof window !== "undefined" ? window : this, function( window, noGlobal ) {
+
+// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
+// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
+// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
+// enough that all such attempts are guarded in a try block.
+"use strict";
+
+var arr = [];
+
+var document = window.document;
+
+var getProto = Object.getPrototypeOf;
+
+var slice = arr.slice;
+
+var concat = arr.concat;
+
+var push = arr.push;
+
+var indexOf = arr.indexOf;
+
+var class2type = {};
+
+var toString = class2type.toString;
+
+var hasOwn = class2type.hasOwnProperty;
+
+var fnToString = hasOwn.toString;
+
+var ObjectFunctionString = fnToString.call( Object );
+
+var support = {};
+
+
+
+	function DOMEval( code, doc ) {
+		doc = doc || document;
+
+		var script = doc.createElement( "script" );
+
+		script.text = code;
+		doc.head.appendChild( script ).parentNode.removeChild( script );
+	}
+/* global Symbol */
+// Defining this global in .eslintrc would create a danger of using the global
+// unguarded in another place, it seems safer to define global only for this module
+
+
+
+var
+	version = "3.1.0",
+
+	// Define a local copy of jQuery
+	jQuery = function( selector, context ) {
+
+		// The jQuery object is actually just the init constructor 'enhanced'
+		// Need init if jQuery is called (just allow error to be thrown if not included)
+		return new jQuery.fn.init( selector, context );
+	},
+
+	// Support: Android <=4.0 only
+	// Make sure we trim BOM and NBSP
+	rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,
+
+	// Matches dashed string for camelizing
+	rmsPrefix = /^-ms-/,
+	rdashAlpha = /-([a-z])/g,
+
+	// Used by jQuery.camelCase as callback to replace()
+	fcamelCase = function( all, letter ) {
+		return letter.toUpperCase();
+	};
+
+jQuery.fn = jQuery.prototype = {
+
+	// The current version of jQuery being used
+	jquery: version,
+
+	constructor: jQuery,
+
+	// The default length of a jQuery object is 0
+	length: 0,
+
+	toArray: function() {
+		return slice.call( this );
+	},
+
+	// Get the Nth element in the matched element set OR
+	// Get the whole matched element set as a clean array
+	get: function( num ) {
+		return num != null ?
+
+			// Return just the one element from the set
+			( num < 0 ? this[ num + this.length ] : this[ num ] ) :
+
+			// Return all the elements in a clean array
+			slice.call( this );
+	},
+
+	// Take an array of elements and push it onto the stack
+	// (returning the new matched element set)
+	pushStack: function( elems ) {
+
+		// Build a new jQuery matched element set
+		var ret = jQuery.merge( this.constructor(), elems );
+
+		// Add the old object onto the stack (as a reference)
+		ret.prevObject = this;
+
+		// Return the newly-formed element set
+		return ret;
+	},
+
+	// Execute a callback for every element in the matched set.
+	each: function( callback ) {
+		return jQuery.each( this, callback );
+	},
+
+	map: function( callback ) {
+		return this.pushStack( jQuery.map( this, function( elem, i ) {
+			return callback.call( elem, i, elem );
+		} ) );
+	},
+
+	slice: function() {
+		return this.pushStack( slice.apply( this, arguments ) );
+	},
+
+	first: function() {
+		return this.eq( 0 );
+	},
+
+	last: function() {
+		return this.eq( -1 );
+	},
+
+	eq: function( i ) {
+		var len = this.length,
+			j = +i + ( i < 0 ? len : 0 );
+		return this.pushStack( j >= 0 && j < len ? [ this[ j ] ] : [] );
+	},
+
+	end: function() {
+		return this.prevObject || this.constructor();
+	},
+
+	// For internal use only.
+	// Behaves like an Array's method, not like a jQuery method.
+	push: push,
+	sort: arr.sort,
+	splice: arr.splice
+};
+
+jQuery.extend = jQuery.fn.extend = function() {
+	var options, name, src, copy, copyIsArray, clone,
+		target = arguments[ 0 ] || {},
+		i = 1,
+		length = arguments.length,
+		deep = false;
+
+	// Handle a deep copy situation
+	if ( typeof target === "boolean" ) {
+		deep = target;
+
+		// Skip the boolean and the target
+		target = arguments[ i ] || {};
+		i++;
+	}
+
+	// Handle case when target is a string or something (possible in deep copy)
+	if ( typeof target !== "object" && !jQuery.isFunction( target ) ) {
+		target = {};
+	}
+
+	// Extend jQuery itself if only one argument is passed
+	if ( i === length ) {
+		target = this;
+		i--;
+	}
+
+	for ( ; i < length; i++ ) {
+
+		// Only deal with non-null/undefined values
+		if ( ( options = arguments[ i ] ) != null ) {
+
+			// Extend the base object
+			for ( name in options ) {
+				src = target[ name ];
+				copy = options[ name ];
+
+				// Prevent never-ending loop
+				if ( target === copy ) {
+					continue;
+				}
+
+				// Recurse if we're merging plain objects or arrays
+				if ( deep && copy && ( jQuery.isPlainObject( copy ) ||
+					( copyIsArray = jQuery.isArray( copy ) ) ) ) {
+
+					if ( copyIsArray ) {
+						copyIsArray = false;
+						clone = src && jQuery.isArray( src ) ? src : [];
+
+					} else {
+						clone = src && jQuery.isPlainObject( src ) ? src : {};
+					}
+
+					// Never move original objects, clone them
+					target[ name ] = jQuery.extend( deep, clone, copy );
+
+				// Don't bring in undefined values
+				} else if ( copy !== undefined ) {
+					target[ name ] = copy;
+				}
+			}
+		}
+	}
+
+	// Return the modified object
+	return target;
+};
+
+jQuery.extend( {
+
+	// Unique for each copy of jQuery on the page
+	expando: "jQuery" + ( version + Math.random() ).replace( /\D/g, "" ),
+
+	// Assume jQuery is ready without the ready module
+	isReady: true,
+
+	error: function( msg ) {
+		throw new Error( msg );
+	},
+
+	noop: function() {},
+
+	isFunction: function( obj ) {
+		return jQuery.type( obj ) === "function";
+	},
+
+	isArray: Array.isArray,
+
+	isWindow: function( obj ) {
+		return obj != null && obj === obj.window;
+	},
+
+	isNumeric: function( obj ) {
+
+		// As of jQuery 3.0, isNumeric is limited to
+		// strings and numbers (primitives or objects)
+		// that can be coerced to finite numbers (gh-2662)
+		var type = jQuery.type( obj );
+		return ( type === "number" || type === "string" ) &&
+
+			// parseFloat NaNs numeric-cast false positives ("")
+			// ...but misinterprets leading-number strings, particularly hex literals ("0x...")
+			// subtraction forces infinities to NaN
+			!isNaN( obj - parseFloat( obj ) );
+	},
+
+	isPlainObject: function( obj ) {
+		var proto, Ctor;
+
+		// Detect obvious negatives
+		// Use toString instead of jQuery.type to catch host objects
+		if ( !obj || toString.call( obj ) !== "[object Object]" ) {
+			return false;
+		}
+
+		proto = getProto( obj );
+
+		// Objects with no prototype (e.g., `Object.create( null )`) are plain
+		if ( !proto ) {
+			return true;
+		}
+
+		// Objects with prototype are plain iff they were constructed by a global Object function
+		Ctor = hasOwn.call( proto, "constructor" ) && proto.constructor;
+		return typeof Ctor === "function" && fnToString.call( Ctor ) === ObjectFunctionString;
+	},
+
+	isEmptyObject: function( obj ) {
+
+		/* eslint-disable no-unused-vars */
+		// See https://github.com/eslint/eslint/issues/6125
+		var name;
+
+		for ( name in obj ) {
+			return false;
+		}
+		return true;
+	},
+
+	type: function( obj ) {
+		if ( obj == null ) {
+			return obj + "";
+		}
+
+		// Support: Android <=2.3 only (functionish RegExp)
+		return typeof obj === "object" || typeof obj === "function" ?
+			class2type[ toString.call( obj ) ] || "object" :
+			typeof obj;
+	},
+
+	// Evaluates a script in a global context
+	globalEval: function( code ) {
+		DOMEval( code );
+	},
+
+	// Convert dashed to camelCase; used by the css and data modules
+	// Support: IE <=9 - 11, Edge 12 - 13
+	// Microsoft forgot to hump their vendor prefix (#9572)
+	camelCase: function( string ) {
+		return string.replace( rmsPrefix, "ms-" ).replace( rdashAlpha, fcamelCase );
+	},
+
+	nodeName: function( elem, name ) {
+		return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();
+	},
+
+	each: function( obj, callback ) {
+		var length, i = 0;
+
+		if ( isArrayLike( obj ) ) {
+			length = obj.length;
+			for ( ; i < length; i++ ) {
+				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+					break;
+				}
+			}
+		} else {
+			for ( i in obj ) {
+				if ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {
+					break;
+				}
+			}
+		}
+
+		return obj;
+	},
+
+	// Support: Android <=4.0 only
+	trim: function( text ) {
+		return text == null ?
+			"" :
+			( text + "" ).replace( rtrim, "" );
+	},
+
+	// results is for internal usage only
+	makeArray: function( arr, results ) {
+		var ret = results || [];
+
+		if ( arr != null ) {
+			if ( isArrayLike( Object( arr ) ) ) {
+				jQuery.merge( ret,
+					typeof arr === "string" ?
+					[ arr ] : arr
+				);
+			} else {
+				push.call( ret, arr );
+			}
+		}
+
+		return ret;
+	},
+
+	inArray: function( elem, arr, i ) {
+		return arr == null ? -1 : indexOf.call( arr, elem, i );
+	},
+
+	// Support: Android <=4.0 only, PhantomJS 1 only
+	// push.apply(_, arraylike) throws on ancient WebKit
+	merge: function( first, second ) {
+		var len = +second.length,
+			j = 0,
+			i = first.length;
+
+		for ( ; j < len; j++ ) {
+			first[ i++ ] = second[ j ];
+		}
+
+		first.length = i;
+
+		return first;
+	},
+
+	grep: function( elems, callback, invert ) {
+		var callbackInverse,
+			matches = [],
+			i = 0,
+			length = elems.length,
+			callbackExpect = !invert;
+
+		// Go through the array, only saving the items
+		// that pass the validator function
+		for ( ; i < length; i++ ) {
+			callbackInverse = !callback( elems[ i ], i );
+			if ( callbackInverse !== callbackExpect ) {
+				matches.push( elems[ i ] );
+			}
+		}
+
+		return matches;
+	},
+
+	// arg is for internal usage only
+	map: function( elems, callback, arg ) {
+		var length, value,
+			i = 0,
+			ret = [];
+
+		// Go through the array, translating each of the items to their new values
+		if ( isArrayLike( elems ) ) {
+			length = elems.length;
+			for ( ; i < length; i++ ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+
+		// Go through every key on the object,
+		} else {
+			for ( i in elems ) {
+				value = callback( elems[ i ], i, arg );
+
+				if ( value != null ) {
+					ret.push( value );
+				}
+			}
+		}
+
+		// Flatten any nested arrays
+		return concat.apply( [], ret );
+	},
+
+	// A global GUID counter for objects
+	guid: 1,
+
+	// Bind a function to a context, optionally partially applying any
+	// arguments.
+	proxy: function( fn, context ) {
+		var tmp, args, proxy;
+
+		if ( typeof context === "string" ) {
+			tmp = fn[ context ];
+			context = fn;
+			fn = tmp;
+		}
+
+		// Quick check to determine if target is callable, in the spec
+		// this throws a TypeError, but we will just return undefined.
+		if ( !jQuery.isFunction( fn ) ) {
+			return undefined;
+		}
+
+		// Simulated bind
+		args = slice.call( arguments, 2 );
+		proxy = function() {
+			return fn.apply( context || this, args.concat( slice.call( arguments ) ) );
+		};
+
+		// Set the guid of unique handler to the same of original handler, so it can be removed
+		proxy.guid = fn.guid = fn.guid || jQuery.guid++;
+
+		return proxy;
+	},
+
+	now: Date.now,
+
+	// jQuery.support is not used in Core but other projects attach their
+	// properties to it so it needs to exist.
+	support: support
+} );
+
+if ( typeof Symbol === "function" ) {
+	jQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];
+}
+
+// Populate the class2type map
+jQuery.each( "Boolean Number String Function Array Date RegExp Object Error Symbol".split( " " ),
+function( i, name ) {
+	class2type[ "[object " + name + "]" ] = name.toLowerCase();
+} );
+
+function isArrayLike( obj ) {
+
+	// Support: real iOS 8.2 only (not reproducible in simulator)
+	// `in` check used to prevent JIT error (gh-2145)
+	// hasOwn isn't used here due to false negatives
+	// regarding Nodelist length in IE
+	var length = !!obj && "length" in obj && obj.length,
+		type = jQuery.type( obj );
+
+	if ( type === "function" || jQuery.isWindow( obj ) ) {
+		return false;
+	}
+
+	return type === "array" || length === 0 ||
+		typeof length === "number" && length > 0 && ( length - 1 ) in obj;
+}
+var Sizzle =
+/*!
+ * Sizzle CSS Selector Engine v2.3.0
+ * https://sizzlejs.com/
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license
+ * http://jquery.org/license
+ *
+ * Date: 2016-01-04
+ */
+(function( window ) {
+
+var i,
+	support,
+	Expr,
+	getText,
+	isXML,
+	tokenize,
+	compile,
+	select,
+	outermostContext,
+	sortInput,
+	hasDuplicate,
+
+	// Local document vars
+	setDocument,
+	document,
+	docElem,
+	documentIsHTML,
+	rbuggyQSA,
+	rbuggyMatches,
+	matches,
+	contains,
+
+	// Instance-specific data
+	expando = "sizzle" + 1 * new Date(),
+	preferredDoc = window.document,
+	dirruns = 0,
+	done = 0,
+	classCache = createCache(),
+	tokenCache = createCache(),
+	compilerCache = createCache(),
+	sortOrder = function( a, b ) {
+		if ( a === b ) {
+			hasDuplicate = true;
+		}
+		return 0;
+	},
+
+	// Instance methods
+	hasOwn = ({}).hasOwnProperty,
+	arr = [],
+	pop = arr.pop,
+	push_native = arr.push,
+	push = arr.push,
+	slice = arr.slice,
+	// Use a stripped-down indexOf as it's faster than native
+	// https://jsperf.com/thor-indexof-vs-for/5
+	indexOf = function( list, elem ) {
+		var i = 0,
+			len = list.length;
+		for ( ; i < len; i++ ) {
+			if ( list[i] === elem ) {
+				return i;
+			}
+		}
+		return -1;
+	},
+
+	booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
+
+	// Regular expressions
+
+	// http://www.w3.org/TR/css3-selectors/#whitespace
+	whitespace = "[\\x20\\t\\r\\n\\f]",
+
+	// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
+	identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
+
+	// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
+	attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
+		// Operator (capture 2)
+		"*([*^$|!~]?=)" + whitespace +
+		// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
+		"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace +
+		"*\\]",
+
+	pseudos = ":(" + identifier + ")(?:\\((" +
+		// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
+		// 1. quoted (capture 3; capture 4 or capture 5)
+		"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
+		// 2. simple (capture 6)
+		"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
+		// 3. anything else (capture 2)
+		".*" +
+		")\\)|)",
+
+	// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
+	rwhitespace = new RegExp( whitespace + "+", "g" ),
+	rtrim = new RegExp( "^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g" ),
+
+	rcomma = new RegExp( "^" + whitespace + "*," + whitespace + "*" ),
+	rcombinators = new RegExp( "^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*" ),
+
+	rattributeQuotes = new RegExp( "=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g" ),
+
+	rpseudo = new RegExp( pseudos ),
+	ridentifier = new RegExp( "^" + identifier + "$" ),
+
+	matchExpr = {
+		"ID": new RegExp( "^#(" + identifier + ")" ),
+		"CLASS": new RegExp( "^\\.(" + identifier + ")" ),
+		"TAG": new RegExp( "^(" + identifier + "|[*])" ),
+		"ATTR": new RegExp( "^" + attributes ),
+		"PSEUDO": new RegExp( "^" + pseudos ),
+		"CHILD": new RegExp( "^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace +
+			"*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace +
+			"*(\\d+)|))" + whitespace + "*\\)|)", "i" ),
+		"bool": new RegExp( "^(?:" + booleans + ")$", "i" ),
+		// For use in libraries implementing .is()
+		// We use this for POS matching in `select`
+		"needsContext": new RegExp( "^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" +
+			whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i" )
+	},
+
+	rinputs = /^(?:input|select|textarea|button)$/i,
+	rheader = /^h\d$/i,
+
+	rnative = /^[^{]+\{\s*\[native \w/,
+
+	// Easily-parseable/retrievable ID or TAG or CLASS selectors
+	rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
+
+	rsibling = /[+~]/,
+
+	// CSS escapes
+	// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
+	runescape = new RegExp( "\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig" ),
+	funescape = function( _, escaped, escapedWhitespace ) {
+		var high = "0x" + escaped - 0x10000;
+		// NaN means non-codepoint
+		// Support: Firefox<24
+		// Workaround erroneous numeric interpretation of +"0x"
+		return high !== high || escapedWhitespace ?
+			escaped :
+			high < 0 ?
+				// BMP codepoint
+				String.fromCharCode( high + 0x10000 ) :
+				// Supplemental Plane codepoint (surrogate pair)
+				String.fromCharCode( high >> 10 | 0xD800, high & 0x3FF | 0xDC00 );
+	},
+
+	// CSS string/identifier serialization
+	// https://drafts.csswg.org/cssom/#common-serializing-idioms
+	rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g,
+	fcssescape = function( ch, asCodePoint ) {
+		if ( asCodePoint ) {
+
+			// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
+			if ( ch === "\0" ) {
+				return "\uFFFD";
+			}
+
+			// Control characters and (dependent upon position) numbers get escaped as code points
+			return ch.slice( 0, -1 ) + "\\" + ch.charCodeAt( ch.length - 1 ).toString( 16 ) + " ";
+		}
+
+		// Other potentially-special ASCII characters get backslash-escaped
+		return "\\" + ch;
+	},
+
+	// Used for iframes
+	// See setDocument()
+	// Removing the function wrapper causes a "Permission Denied"
+	// error in IE
+	unloadHandler = function() {
+		setDocument();
+	},
+
+	disabledAncestor = addCombinator(
+		function( elem ) {
+			return elem.disabled === true;
+		},
+		{ dir: "parentNode", next: "legend" }
+	);
+
+// Optimize for push.apply( _, NodeList )
+try {
+	push.apply(
+		(arr = slice.call( preferredDoc.childNodes )),
+		preferredDoc.childNodes
+	);
+	// Support: Android<4.0
+	// Detect silently failing push.apply
+	arr[ preferredDoc.childNodes.length ].nodeType;
+} catch ( e ) {
+	push = { apply: arr.length ?
+
+		// Leverage slice if possible
+		function( target, els ) {
+			push_native.apply( target, slice.call(els) );
+		} :
+
+		// Support: IE<9
+		// Otherwise append directly
+		function( target, els ) {
+			var j = target.length,
+				i = 0;
+			// Can't trust NodeList.length
+			while ( (target[j++] = els[i++]) ) {}
+			target.length = j - 1;
+		}
+	};
+}
+
+function Sizzle( selector, context, results, seed ) {
+	var m, i, elem, nid, match, groups, newSelector,
+		newContext = context && context.ownerDocument,
+
+		// nodeType defaults to 9, since context defaults to document
+		nodeType = context ? context.nodeType : 9;
+
+	results = results || [];
+
+	// Return early from calls with invalid selector or context
+	if ( typeof selector !== "string" || !selector ||
+		nodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {
+
+		return results;
+	}
+
+	// Try to shortcut find operations (as opposed to filters) in HTML documents
+	if ( !seed ) {
+
+		if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
+			setDocument( context );
+		}
+		context = context || document;
+
+		if ( documentIsHTML ) {
+
+			// If the selector is sufficiently simple, try using a "get*By*" DOM method
+			// (excepting DocumentFragment context, where the methods don't exist)
+			if ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {
+
+				// ID selector
+				if ( (m = match[1]) ) {
+
+					// Document context
+					if ( nodeType === 9 ) {
+						if ( (elem = context.getElementById( m )) ) {
+
+							// Support: IE, Opera, Webkit
+							// TODO: identify versions
+							// getElementById can match elements by name instead of ID
+							if ( elem.id === m ) {
+								results.push( elem );
+								return results;
+							}
+						} else {
+							return results;
+						}
+
+					// Element context
+					} else {
+
+						// Support: IE, Opera, Webkit
+						// TODO: identify versions
+						// getElementById can match elements by name instead of ID
+						if ( newContext && (elem = newContext.getElementById( m )) &&
+							contains( context, elem ) &&
+							elem.id === m ) {
+
+							results.push( elem );
+							return results;
+						}
+					}
+
+				// Type selector
+				} else if ( match[2] ) {
+					push.apply( results, context.getElementsByTagName( selector ) );
+					return results;
+
+				// Class selector
+				} else if ( (m = match[3]) && support.getElementsByClassName &&
+					context.getElementsByClassName ) {
+
+					push.apply( results, context.getElementsByClassName( m ) );
+					return results;
+				}
+			}
+
+			// Take advantage of querySelectorAll
+			if ( support.qsa &&
+				!compilerCache[ selector + " " ] &&
+				(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {
+
+				if ( nodeType !== 1 ) {
+					newContext = context;
+					newSelector = selector;
+
+				// qSA looks outside Element context, which is not what we want
+				// Thanks to Andrew Dupont for this workaround technique
+				// Support: IE <=8
+				// Exclude object elements
+				} else if ( context.nodeName.toLowerCase() !== "object" ) {
+
+					// Capture the context ID, setting it first if necessary
+					if ( (nid = context.getAttribute( "id" )) ) {
+						nid = nid.replace( rcssescape, fcssescape );
+					} else {
+						context.setAttribute( "id", (nid = expando) );
+					}
+
+					// Prefix every selector in the list
+					groups = tokenize( selector );
+					i = groups.length;
+					while ( i-- ) {
+						groups[i] = "#" + nid + " " + toSelector( groups[i] );
+					}
+					newSelector = groups.join( "," );
+
+					// Expand context for sibling selectors
+					newContext = rsibling.test( selector ) && testContext( context.parentNode ) ||
+						context;
+				}
+
+				if ( newSelector ) {
+					try {
+						push.apply( results,
+							newContext.querySelectorAll( newSelector )
+						);
+						return results;
+					} catch ( qsaError ) {
+					} finally {
+						if ( nid === expando ) {
+							context.removeAttribute( "id" );
+						}
+					}
+				}
+			}
+		}
+	}
+
+	// All others
+	return select( selector.replace( rtrim, "$1" ), context, results, seed );
+}
+
+/**
+ * Create key-value caches of limited size
+ * @returns {function(string, object)} Returns the Object data after storing it on itself with
+ *	property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
+ *	deleting the oldest entry
+ */
+function createCache() {
+	var keys = [];
+
+	function cache( key, value ) {
+		// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
+		if ( keys.push( key + " " ) > Expr.cacheLength ) {
+			// Only keep the most recent entries
+			delete cache[ keys.shift() ];
+		}
+		return (cache[ key + " " ] = value);
+	}
+	return cache;
+}
+
+/**
+ * Mark a function for special use by Sizzle
+ * @param {Function} fn The function to mark
+ */
+function markFunction( fn ) {
+	fn[ expando ] = true;
+	return fn;
+}
+
+/**
+ * Support testing using an element
+ * @param {Function} fn Passed the created element and returns a boolean result
+ */
+function assert( fn ) {
+	var el = document.createElement("fieldset");
+
+	try {
+		return !!fn( el );
+	} catch (e) {
+		return false;
+	} finally {
+		// Remove from its parent by default
+		if ( el.parentNode ) {
+			el.parentNode.removeChild( el );
+		}
+		// release memory in IE
+		el = null;
+	}
+}
+
+/**
+ * Adds the same handler for all of the specified attrs
+ * @param {String} attrs Pipe-separated list of attributes
+ * @param {Function} handler The method that will be applied
+ */
+function addHandle( attrs, handler ) {
+	var arr = attrs.split("|"),
+		i = arr.length;
+
+	while ( i-- ) {
+		Expr.attrHandle[ arr[i] ] = handler;
+	}
+}
+
+/**
+ * Checks document order of two siblings
+ * @param {Element} a
+ * @param {Element} b
+ * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
+ */
+function siblingCheck( a, b ) {
+	var cur = b && a,
+		diff = cur && a.nodeType === 1 && b.nodeType === 1 &&
+			a.sourceIndex - b.sourceIndex;
+
+	// Use IE sourceIndex if available on both nodes
+	if ( diff ) {
+		return diff;
+	}
+
+	// Check if b follows a
+	if ( cur ) {
+		while ( (cur = cur.nextSibling) ) {
+			if ( cur === b ) {
+				return -1;
+			}
+		}
+	}
+
+	return a ? 1 : -1;
+}
+
+/**
+ * Returns a function to use in pseudos for input types
+ * @param {String} type
+ */
+function createInputPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return name === "input" && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for buttons
+ * @param {String} type
+ */
+function createButtonPseudo( type ) {
+	return function( elem ) {
+		var name = elem.nodeName.toLowerCase();
+		return (name === "input" || name === "button") && elem.type === type;
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for :enabled/:disabled
+ * @param {Boolean} disabled true for :disabled; false for :enabled
+ */
+function createDisabledPseudo( disabled ) {
+	// Known :disabled false positives:
+	// IE: *[disabled]:not(button, input, select, textarea, optgroup, option, menuitem, fieldset)
+	// not IE: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
+	return function( elem ) {
+
+		// Check form elements and option elements for explicit disabling
+		return "label" in elem && elem.disabled === disabled ||
+			"form" in elem && elem.disabled === disabled ||
+
+			// Check non-disabled form elements for fieldset[disabled] ancestors
+			"form" in elem && elem.disabled === false && (
+				// Support: IE6-11+
+				// Ancestry is covered for us
+				elem.isDisabled === disabled ||
+
+				// Otherwise, assume any non-<option> under fieldset[disabled] is disabled
+				/* jshint -W018 */
+				elem.isDisabled !== !disabled &&
+					("label" in elem || !disabledAncestor( elem )) !== disabled
+			);
+	};
+}
+
+/**
+ * Returns a function to use in pseudos for positionals
+ * @param {Function} fn
+ */
+function createPositionalPseudo( fn ) {
+	return markFunction(function( argument ) {
+		argument = +argument;
+		return markFunction(function( seed, matches ) {
+			var j,
+				matchIndexes = fn( [], seed.length, argument ),
+				i = matchIndexes.length;
+
+			// Match elements found at the specified indexes
+			while ( i-- ) {
+				if ( seed[ (j = matchIndexes[i]) ] ) {
+					seed[j] = !(matches[j] = seed[j]);
+				}
+			}
+		});
+	});
+}
+
+/**
+ * Checks a node for validity as a Sizzle context
+ * @param {Element|Object=} context
+ * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
+ */
+function testContext( context ) {
+	return context && typeof context.getElementsByTagName !== "undefined" && context;
+}
+
+// Expose support vars for convenience
+support = Sizzle.support = {};
+
+/**
+ * Detects XML nodes
+ * @param {Element|Object} elem An element or a document
+ * @returns {Boolean} True iff elem is a non-HTML XML node
+ */
+isXML = Sizzle.isXML = function( elem ) {
+	// documentElement is verified for cases where it doesn't yet exist
+	// (such as loading iframes in IE - #4833)
+	var documentElement = elem && (elem.ownerDocument || elem).documentElement;
+	return documentElement ? documentElement.nodeName !== "HTML" : false;
+};
+
+/**
+ * Sets document-related variables once based on the current document
+ * @param {Element|Object} [doc] An element or document object to use to set the document
+ * @returns {Object} Returns the current document
+ */
+setDocument = Sizzle.setDocument = function( node ) {
+	var hasCompare, subWindow,
+		doc = node ? node.ownerDocument || node : preferredDoc;
+
+	// Return early if doc is invalid or already selected
+	if ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {
+		return document;
+	}
+
+	// Update global variables
+	document = doc;
+	docElem = document.documentElement;
+	documentIsHTML = !isXML( document );
+
+	// Support: IE 9-11, Edge
+	// Accessing iframe documents after unload throws "permission denied" errors (jQuery #13936)
+	if ( preferredDoc !== document &&
+		(subWindow = document.defaultView) && subWindow.top !== subWindow ) {
+
+		// Support: IE 11, Edge
+		if ( subWindow.addEventListener ) {
+			subWindow.addEventListener( "unload", unloadHandler, false );
+
+		// Support: IE 9 - 10 only
+		} else if ( subWindow.attachEvent ) {
+			subWindow.attachEvent( "onunload", unloadHandler );
+		}
+	}
+
+	/* Attributes
+	---------------------------------------------------------------------- */
+
+	// Support: IE<8
+	// Verify that getAttribute really returns attributes and not properties
+	// (excepting IE8 booleans)
+	support.attributes = assert(function( el ) {
+		el.className = "i";
+		return !el.getAttribute("className");
+	});
+
+	/* getElement(s)By*
+	---------------------------------------------------------------------- */
+
+	// Check if getElementsByTagName("*") returns only elements
+	support.getElementsByTagName = assert(function( el ) {
+		el.appendChild( document.createComment("") );
+		return !el.getElementsByTagName("*").length;
+	});
+
+	// Support: IE<9
+	support.getElementsByClassName = rnative.test( document.getElementsByClassName );
+
+	// Support: IE<10
+	// Check if getElementById returns elements by name
+	// The broken getElementById methods don't pick up programmatically-set names,
+	// so use a roundabout getElementsByName test
+	support.getById = assert(function( el ) {
+		docElem.appendChild( el ).id = expando;
+		return !document.getElementsByName || !document.getElementsByName( expando ).length;
+	});
+
+	// ID find and filter
+	if ( support.getById ) {
+		Expr.find["ID"] = function( id, context ) {
+			if ( typeof context.getElementById !== "undefined" && documentIsHTML ) {
+				var m = context.getElementById( id );
+				return m ? [ m ] : [];
+			}
+		};
+		Expr.filter["ID"] = function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				return elem.getAttribute("id") === attrId;
+			};
+		};
+	} else {
+		// Support: IE6/7
+		// getElementById is not reliable as a find shortcut
+		delete Expr.find["ID"];
+
+		Expr.filter["ID"] =  function( id ) {
+			var attrId = id.replace( runescape, funescape );
+			return function( elem ) {
+				var node = typeof elem.getAttributeNode !== "undefined" &&
+					elem.getAttributeNode("id");
+				return node && node.value === attrId;
+			};
+		};
+	}
+
+	// Tag
+	Expr.find["TAG"] = support.getElementsByTagName ?
+		function( tag, context ) {
+			if ( typeof context.getElementsByTagName !== "undefined" ) {
+				return context.getElementsByTagName( tag );
+
+			// DocumentFragment nodes don't have gEBTN
+			} else if ( support.qsa ) {
+				return context.querySelectorAll( tag );
+			}
+		} :
+
+		function( tag, context ) {
+			var elem,
+				tmp = [],
+				i = 0,
+				// By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too
+				results = context.getElementsByTagName( tag );
+
+			// Filter out possible comments
+			if ( tag === "*" ) {
+				while ( (elem = results[i++]) ) {
+					if ( elem.nodeType === 1 ) {
+						tmp.push( elem );
+					}
+				}
+
+				return tmp;
+			}
+			return results;
+		};
+
+	// Class
+	Expr.find["CLASS"] = support.getElementsByClassName && function( className, context ) {
+		if ( typeof context.getElementsByClassName !== "undefined" && documentIsHTML ) {
+			return context.getElementsByClassName( className );
+		}
+	};
+
+	/* QSA/matchesSelector
+	---------------------------------------------------------------------- */
+
+	// QSA and matchesSelector support
+
+	// matchesSelector(:active) reports false when true (IE9/Opera 11.5)
+	rbuggyMatches = [];
+
+	// qSa(:focus) reports false when true (Chrome 21)
+	// We allow this because of a bug in IE8/9 that throws an error
+	// whenever `document.activeElement` is accessed on an iframe
+	// So, we allow :focus to pass through QSA all the time to avoid the IE error
+	// See https://bugs.jquery.com/ticket/13378
+	rbuggyQSA = [];
+
+	if ( (support.qsa = rnative.test( document.querySelectorAll )) ) {
+		// Build QSA regex
+		// Regex strategy adopted from Diego Perini
+		assert(function( el ) {
+			// Select is set to empty string on purpose
+			// This is to test IE's treatment of not explicitly
+			// setting a boolean content attribute,
+			// since its presence should be enough
+			// https://bugs.jquery.com/ticket/12359
+			docElem.appendChild( el ).innerHTML = "<a id='" + expando + "'></a>" +
+				"<select id='" + expando + "-\r\\' msallowcapture=''>" +
+				"<option selected=''></option></select>";
+
+			// Support: IE8, Opera 11-12.16
+			// Nothing should be selected when empty strings follow ^= or $= or *=
+			// The test attribute must be unknown in Opera but "safe" for WinRT
+			// https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section
+			if ( el.querySelectorAll("[msallowcapture^='']").length ) {
+				rbuggyQSA.push( "[*^$]=" + whitespace + "*(?:''|\"\")" );
+			}
+
+			// Support: IE8
+			// Boolean attributes and "value" are not treated correctly
+			if ( !el.querySelectorAll("[selected]").length ) {
+				rbuggyQSA.push( "\\[" + whitespace + "*(?:value|" + booleans + ")" );
+			}
+
+			// Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+
+			if ( !el.querySelectorAll( "[id~=" + expando + "-]" ).length ) {
+				rbuggyQSA.push("~=");
+			}
+
+			// Webkit/Opera - :checked should return selected option elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			// IE8 throws error here and will not see later tests
+			if ( !el.querySelectorAll(":checked").length ) {
+				rbuggyQSA.push(":checked");
+			}
+
+			// Support: Safari 8+, iOS 8+
+			// https://bugs.webkit.org/show_bug.cgi?id=136851
+			// In-page `selector#id sibling-combinator selector` fails
+			if ( !el.querySelectorAll( "a#" + expando + "+*" ).length ) {
+				rbuggyQSA.push(".#.+[+~]");
+			}
+		});
+
+		assert(function( el ) {
+			el.innerHTML = "<a href='' disabled='disabled'></a>" +
+				"<select disabled='disabled'><option/></select>";
+
+			// Support: Windows 8 Native Apps
+			// The type and name attributes are restricted during .innerHTML assignment
+			var input = document.createElement("input");
+			input.setAttribute( "type", "hidden" );
+			el.appendChild( input ).setAttribute( "name", "D" );
+
+			// Support: IE8
+			// Enforce case-sensitivity of name attribute
+			if ( el.querySelectorAll("[name=d]").length ) {
+				rbuggyQSA.push( "name" + whitespace + "*[*^$|!~]?=" );
+			}
+
+			// FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)
+			// IE8 throws error here and will not see later tests
+			if ( el.querySelectorAll(":enabled").length !== 2 ) {
+				rbuggyQSA.push( ":enabled", ":disabled" );
+			}
+
+			// Support: IE9-11+
+			// IE's :disabled selector does not pick up the children of disabled fieldsets
+			docElem.appendChild( el ).disabled = true;
+			if ( el.querySelectorAll(":disabled").length !== 2 ) {
+				rbuggyQSA.push( ":enabled", ":disabled" );
+			}
+
+			// Opera 10-11 does not throw on post-comma invalid pseudos
+			el.querySelectorAll("*,:x");
+			rbuggyQSA.push(",.*:");
+		});
+	}
+
+	if ( (support.matchesSelector = rnative.test( (matches = docElem.matches ||
+		docElem.webkitMatchesSelector ||
+		docElem.mozMatchesSelector ||
+		docElem.oMatchesSelector ||
+		docElem.msMatchesSelector) )) ) {
+
+		assert(function( el ) {
+			// Check to see if it's possible to do matchesSelector
+			// on a disconnected node (IE 9)
+			support.disconnectedMatch = matches.call( el, "*" );
+
+			// This should fail with an exception
+			// Gecko does not error, returns false instead
+			matches.call( el, "[s!='']:x" );
+			rbuggyMatches.push( "!=", pseudos );
+		});
+	}
+
+	rbuggyQSA = rbuggyQSA.length && new RegExp( rbuggyQSA.join("|") );
+	rbuggyMatches = rbuggyMatches.length && new RegExp( rbuggyMatches.join("|") );
+
+	/* Contains
+	---------------------------------------------------------------------- */
+	hasCompare = rnative.test( docElem.compareDocumentPosition );
+
+	// Element contains another
+	// Purposefully self-exclusive
+	// As in, an element does not contain itself
+	contains = hasCompare || rnative.test( docElem.contains ) ?
+		function( a, b ) {
+			var adown = a.nodeType === 9 ? a.documentElement : a,
+				bup = b && b.parentNode;
+			return a === bup || !!( bup && bup.nodeType === 1 && (
+				adown.contains ?
+					adown.contains( bup ) :
+					a.compareDocumentPosition && a.compareDocumentPosition( bup ) & 16
+			));
+		} :
+		function( a, b ) {
+			if ( b ) {
+				while ( (b = b.parentNode) ) {
+					if ( b === a ) {
+						return true;
+					}
+				}
+			}
+			return false;
+		};
+
+	/* Sorting
+	---------------------------------------------------------------------- */
+
+	// Document order sorting
+	sortOrder = hasCompare ?
+	function( a, b ) {
+
+		// Flag for duplicate removal
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		// Sort on method existence if only one input has compareDocumentPosition
+		var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;
+		if ( compare ) {
+			return compare;
+		}
+
+		// Calculate position if both inputs belong to the same document
+		compare = ( a.ownerDocument || a ) === ( b.ownerDocument || b ) ?
+			a.compareDocumentPosition( b ) :
+
+			// Otherwise we know they are disconnected
+			1;
+
+		// Disconnected nodes
+		if ( compare & 1 ||
+			(!support.sortDetached && b.compareDocumentPosition( a ) === compare) ) {
+
+			// Choose the first element that is related to our preferred document
+			if ( a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {
+				return -1;
+			}
+			if ( b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b) ) {
+				return 1;
+			}
+
+			// Maintain original order
+			return sortInput ?
+				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+				0;
+		}
+
+		return compare & 4 ? -1 : 1;
+	} :
+	function( a, b ) {
+		// Exit early if the nodes are identical
+		if ( a === b ) {
+			hasDuplicate = true;
+			return 0;
+		}
+
+		var cur,
+			i = 0,
+			aup = a.parentNode,
+			bup = b.parentNode,
+			ap = [ a ],
+			bp = [ b ];
+
+		// Parentless nodes are either documents or disconnected
+		if ( !aup || !bup ) {
+			return a === document ? -1 :
+				b === document ? 1 :
+				aup ? -1 :
+				bup ? 1 :
+				sortInput ?
+				( indexOf( sortInput, a ) - indexOf( sortInput, b ) ) :
+				0;
+
+		// If the nodes are siblings, we can do a quick check
+		} else if ( aup === bup ) {
+			return siblingCheck( a, b );
+		}
+
+		// Otherwise we need full lists of their ancestors for comparison
+		cur = a;
+		while ( (cur = cur.parentNode) ) {
+			ap.unshift( cur );
+		}
+		cur = b;
+		while ( (cur = cur.parentNode) ) {
+			bp.unshift( cur );
+		}
+
+		// Walk down the tree looking for a discrepancy
+		while ( ap[i] === bp[i] ) {
+			i++;
+		}
+
+		return i ?
+			// Do a sibling check if the nodes have a common ancestor
+			siblingCheck( ap[i], bp[i] ) :
+
+			// Otherwise nodes in our document sort first
+			ap[i] === preferredDoc ? -1 :
+			bp[i] === preferredDoc ? 1 :
+			0;
+	};
+
+	return document;
+};
+
+Sizzle.matches = function( expr, elements ) {
+	return Sizzle( expr, null, null, elements );
+};
+
+Sizzle.matchesSelector = function( elem, expr ) {
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	// Make sure that attribute selectors are quoted
+	expr = expr.replace( rattributeQuotes, "='$1']" );
+
+	if ( support.matchesSelector && documentIsHTML &&
+		!compilerCache[ expr + " " ] &&
+		( !rbuggyMatches || !rbuggyMatches.test( expr ) ) &&
+		( !rbuggyQSA     || !rbuggyQSA.test( expr ) ) ) {
+
+		try {
+			var ret = matches.call( elem, expr );
+
+			// IE 9's matchesSelector returns false on disconnected nodes
+			if ( ret || support.disconnectedMatch ||
+					// As well, disconnected nodes are said to be in a document
+					// fragment in IE 9
+					elem.document && elem.document.nodeType !== 11 ) {
+				return ret;
+			}
+		} catch (e) {}
+	}
+
+	return Sizzle( expr, document, null, [ elem ] ).length > 0;
+};
+
+Sizzle.contains = function( context, elem ) {
+	// Set document vars if needed
+	if ( ( context.ownerDocument || context ) !== document ) {
+		setDocument( context );
+	}
+	return contains( context, elem );
+};
+
+Sizzle.attr = function( elem, name ) {
+	// Set document vars if needed
+	if ( ( elem.ownerDocument || elem ) !== document ) {
+		setDocument( elem );
+	}
+
+	var fn = Expr.attrHandle[ name.toLowerCase() ],
+		// Don't get fooled by Object.prototype properties (jQuery #13807)
+		val = fn && hasOwn.call( Expr.attrHandle, name.toLowerCase() ) ?
+			fn( elem, name, !documentIsHTML ) :
+			undefined;
+
+	return val !== undefined ?
+		val :
+		support.attributes || !documentIsHTML ?
+			elem.getAttribute( name ) :
+			(val = elem.getAttributeNode(name)) && val.specified ?
+				val.value :
+				null;
+};
+
+Sizzle.escape = function( sel ) {
+	return (sel + "").replace( rcssescape, fcssescape );
+};
+
+Sizzle.error = function( msg ) {
+	throw new Error( "Syntax error, unrecognized expression: " + msg );
+};
+
+/**
+ * Document sorting and removing duplicates
+ * @param {ArrayLike} results
+ */
+Sizzle.uniqueSort = function( results ) {
+	var elem,
+		duplicates = [],
+		j = 0,
+		i = 0;
+
+	// Unless we *know* we can detect duplicates, assume their presence
+	hasDuplicate = !support.detectDuplicates;
+	sortInput = !support.sortStable && results.slice( 0 );
+	results.sort( sortOrder );
+
+	if ( hasDuplicate ) {
+		while ( (elem = results[i++]) ) {
+			if ( elem === results[ i ] ) {
+				j = duplicates.push( i );
+			}
+		}
+		while ( j-- ) {
+			results.splice( duplicates[ j ], 1 );
+		}
+	}
+
+	// Clear input after sorting to release objects
+	// See https://github.com/jquery/sizzle/pull/225
+	sortInput = null;
+
+	return results;
+};
+
+/**
+ * Utility function for retrieving the text value of an array of DOM nodes
+ * @param {Array|Element} elem
+ */
+getText = Sizzle.getText = function( elem ) {
+	var node,
+		ret = "",
+		i = 0,
+		nodeType = elem.nodeType;
+
+	if ( !nodeType ) {
+		// If no nodeType, this is expected to be an array
+		while ( (node = elem[i++]) ) {
+			// Do not traverse comment nodes
+			ret += getText( node );
+		}
+	} else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) {
+		// Use textContent for elements
+		// innerText usage removed for consistency of new lines (jQuery #11153)
+		if ( typeof elem.textContent === "string" ) {
+			return elem.textContent;
+		} else {
+			// Traverse its children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				ret += getText( elem );
+			}
+		}
+	} else if ( nodeType === 3 || nodeType === 4 ) {
+		return elem.nodeValue;
+	}
+	// Do not include comment or processing instruction nodes
+
+	return ret;
+};
+
+Expr = Sizzle.selectors = {
+
+	// Can be adjusted by the user
+	cacheLength: 50,
+
+	createPseudo: markFunction,
+
+	match: matchExpr,
+
+	attrHandle: {},
+
+	find: {},
+
+	relative: {
+		">": { dir: "parentNode", first: true },
+		" ": { dir: "parentNode" },
+		"+": { dir: "previousSibling", first: true },
+		"~": { dir: "previousSibling" }
+	},
+
+	preFilter: {
+		"ATTR": function( match ) {
+			match[1] = match[1].replace( runescape, funescape );
+
+			// Move the given value to match[3] whether quoted or unquoted
+			match[3] = ( match[3] || match[4] || match[5] || "" ).replace( runescape, funescape );
+
+			if ( match[2] === "~=" ) {
+				match[3] = " " + match[3] + " ";
+			}
+
+			return match.slice( 0, 4 );
+		},
+
+		"CHILD": function( match ) {
+			/* matches from matchExpr["CHILD"]
+				1 type (only|nth|...)
+				2 what (child|of-type)
+				3 argument (even|odd|\d*|\d*n([+-]\d+)?|...)
+				4 xn-component of xn+y argument ([+-]?\d*n|)
+				5 sign of xn-component
+				6 x of xn-component
+				7 sign of y-component
+				8 y of y-component
+			*/
+			match[1] = match[1].toLowerCase();
+
+			if ( match[1].slice( 0, 3 ) === "nth" ) {
+				// nth-* requires argument
+				if ( !match[3] ) {
+					Sizzle.error( match[0] );
+				}
+
+				// numeric x and y parameters for Expr.filter.CHILD
+				// remember that false/true cast respectively to 0/1
+				match[4] = +( match[4] ? match[5] + (match[6] || 1) : 2 * ( match[3] === "even" || match[3] === "odd" ) );
+				match[5] = +( ( match[7] + match[8] ) || match[3] === "odd" );
+
+			// other types prohibit arguments
+			} else if ( match[3] ) {
+				Sizzle.error( match[0] );
+			}
+
+			return match;
+		},
+
+		"PSEUDO": function( match ) {
+			var excess,
+				unquoted = !match[6] && match[2];
+
+			if ( matchExpr["CHILD"].test( match[0] ) ) {
+				return null;
+			}
+
+			// Accept quoted arguments as-is
+			if ( match[3] ) {
+				match[2] = match[4] || match[5] || "";
+
+			// Strip excess characters from unquoted arguments
+			} else if ( unquoted && rpseudo.test( unquoted ) &&
+				// Get excess from tokenize (recursively)
+				(excess = tokenize( unquoted, true )) &&
+				// advance to the next closing parenthesis
+				(excess = unquoted.indexOf( ")", unquoted.length - excess ) - unquoted.length) ) {
+
+				// excess is a negative index
+				match[0] = match[0].slice( 0, excess );
+				match[2] = unquoted.slice( 0, excess );
+			}
+
+			// Return only captures needed by the pseudo filter method (type and argument)
+			return match.slice( 0, 3 );
+		}
+	},
+
+	filter: {
+
+		"TAG": function( nodeNameSelector ) {
+			var nodeName = nodeNameSelector.replace( runescape, funescape ).toLowerCase();
+			return nodeNameSelector === "*" ?
+				function() { return true; } :
+				function( elem ) {
+					return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;
+				};
+		},
+
+		"CLASS": function( className ) {
+			var pattern = classCache[ className + " " ];
+
+			return pattern ||
+				(pattern = new RegExp( "(^|" + whitespace + ")" + className + "(" + whitespace + "|$)" )) &&
+				classCache( className, function( elem ) {
+					return pattern.test( typeof elem.className === "string" && elem.className || typeof elem.getAttribute !== "undefined" && elem.getAttribute("class") || "" );
+				});
+		},
+
+		"ATTR": function( name, operator, check ) {
+			return function( elem ) {
+				var result = Sizzle.attr( elem, name );
+
+				if ( result == null ) {
+					return operator === "!=";
+				}
+				if ( !operator ) {
+					return true;
+				}
+
+				result += "";
+
+				return operator === "=" ? result === check :
+					operator === "!=" ? result !== check :
+					operator === "^=" ? check && result.indexOf( check ) === 0 :
+					operator === "*=" ? check && result.indexOf( check ) > -1 :
+					operator === "$=" ? check && result.slice( -check.length ) === check :
+					operator === "~=" ? ( " " + result.replace( rwhitespace, " " ) + " " ).indexOf( check ) > -1 :
+					operator === "|=" ? result === check || result.slice( 0, check.length + 1 ) === check + "-" :
+					false;
+			};
+		},
+
+		"CHILD": function( type, what, argument, first, last ) {
+			var simple = type.slice( 0, 3 ) !== "nth",
+				forward = type.slice( -4 ) !== "last",
+				ofType = what === "of-type";
+
+			return first === 1 && last === 0 ?
+
+				// Shortcut for :nth-*(n)
+				function( elem ) {
+					return !!elem.parentNode;
+				} :
+
+				function( elem, context, xml ) {
+					var cache, uniqueCache, outerCache, node, nodeIndex, start,
+						dir = simple !== forward ? "nextSibling" : "previousSibling",
+						parent = elem.parentNode,
+						name = ofType && elem.nodeName.toLowerCase(),
+						useCache = !xml && !ofType,
+						diff = false;
+
+					if ( parent ) {
+
+						// :(first|last|only)-(child|of-type)
+						if ( simple ) {
+							while ( dir ) {
+								node = elem;
+								while ( (node = node[ dir ]) ) {
+									if ( ofType ?
+										node.nodeName.toLowerCase() === name :
+										node.nodeType === 1 ) {
+
+										return false;
+									}
+								}
+								// Reverse direction for :only-* (if we haven't yet done so)
+								start = dir = type === "only" && !start && "nextSibling";
+							}
+							return true;
+						}
+
+						start = [ forward ? parent.firstChild : parent.lastChild ];
+
+						// non-xml :nth-child(...) stores cache data on `parent`
+						if ( forward && useCache ) {
+
+							// Seek `elem` from a previously-cached index
+
+							// ...in a gzip-friendly way
+							node = parent;
+							outerCache = node[ expando ] || (node[ expando ] = {});
+
+							// Support: IE <9 only
+							// Defend against cloned attroperties (jQuery gh-1709)
+							uniqueCache = outerCache[ node.uniqueID ] ||
+								(outerCache[ node.uniqueID ] = {});
+
+							cache = uniqueCache[ type ] || [];
+							nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+							diff = nodeIndex && cache[ 2 ];
+							node = nodeIndex && parent.childNodes[ nodeIndex ];
+
+							while ( (node = ++nodeIndex && node && node[ dir ] ||
+
+								// Fallback to seeking `elem` from the start
+								(diff = nodeIndex = 0) || start.pop()) ) {
+
+								// When found, cache indexes on `parent` and break
+								if ( node.nodeType === 1 && ++diff && node === elem ) {
+									uniqueCache[ type ] = [ dirruns, nodeIndex, diff ];
+									break;
+								}
+							}
+
+						} else {
+							// Use previously-cached element index if available
+							if ( useCache ) {
+								// ...in a gzip-friendly way
+								node = elem;
+								outerCache = node[ expando ] || (node[ expando ] = {});
+
+								// Support: IE <9 only
+								// Defend against cloned attroperties (jQuery gh-1709)
+								uniqueCache = outerCache[ node.uniqueID ] ||
+									(outerCache[ node.uniqueID ] = {});
+
+								cache = uniqueCache[ type ] || [];
+								nodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];
+								diff = nodeIndex;
+							}
+
+							// xml :nth-child(...)
+							// or :nth-last-child(...) or :nth(-last)?-of-type(...)
+							if ( diff === false ) {
+								// Use the same loop as above to seek `elem` from the start
+								while ( (node = ++nodeIndex && node && node[ dir ] ||
+									(diff = nodeIndex = 0) || start.pop()) ) {
+
+									if ( ( ofType ?
+										node.nodeName.toLowerCase() === name :
+										node.nodeType === 1 ) &&
+										++diff ) {
+
+										// Cache the index of each encountered element
+										if ( useCache ) {
+											outerCache = node[ expando ] || (node[ expando ] = {});
+
+											// Support: IE <9 only
+											// Defend against cloned attroperties (jQuery gh-1709)
+											uniqueCache = outerCache[ node.uniqueID ] ||
+												(outerCache[ node.uniqueID ] = {});
+
+											uniqueCache[ type ] = [ dirruns, diff ];
+										}
+
+										if ( node === elem ) {
+											break;
+										}
+									}
+								}
+							}
+						}
+
+						// Incorporate the offset, then check against cycle size
+						diff -= last;
+						return diff === first || ( diff % first === 0 && diff / first >= 0 );
+					}
+				};
+		},
+
+		"PSEUDO": function( pseudo, argument ) {
+			// pseudo-class names are case-insensitive
+			// http://www.w3.org/TR/selectors/#pseudo-classes
+			// Prioritize by case sensitivity in case custom pseudos are added with uppercase letters
+			// Remember that setFilters inherits from pseudos
+			var args,
+				fn = Expr.pseudos[ pseudo ] || Expr.setFilters[ pseudo.toLowerCase() ] ||
+					Sizzle.error( "unsupported pseudo: " + pseudo );
+
+			// The user may use createPseudo to indicate that
+			// arguments are needed to create the filter function
+			// just as Sizzle does
+			if ( fn[ expando ] ) {
+				return fn( argument );
+			}
+
+			// But maintain support for old signatures
+			if ( fn.length > 1 ) {
+				args = [ pseudo, pseudo, "", argument ];
+				return Expr.setFilters.hasOwnProperty( pseudo.toLowerCase() ) ?
+					markFunction(function( seed, matches ) {
+						var idx,
+							matched = fn( seed, argument ),
+							i = matched.length;
+						while ( i-- ) {
+							idx = indexOf( seed, matched[i] );
+							seed[ idx ] = !( matches[ idx ] = matched[i] );
+						}
+					}) :
+					function( elem ) {
+						return fn( elem, 0, args );
+					};
+			}
+
+			return fn;
+		}
+	},
+
+	pseudos: {
+		// Potentially complex pseudos
+		"not": markFunction(function( selector ) {
+			// Trim the selector passed to compile
+			// to avoid treating leading and trailing
+			// spaces as combinators
+			var input = [],
+				results = [],
+				matcher = compile( selector.replace( rtrim, "$1" ) );
+
+			return matcher[ expando ] ?
+				markFunction(function( seed, matches, context, xml ) {
+					var elem,
+						unmatched = matcher( seed, null, xml, [] ),
+						i = seed.length;
+
+					// Match elements unmatched by `matcher`
+					while ( i-- ) {
+						if ( (elem = unmatched[i]) ) {
+							seed[i] = !(matches[i] = elem);
+						}
+					}
+				}) :
+				function( elem, context, xml ) {
+					input[0] = elem;
+					matcher( input, null, xml, results );
+					// Don't keep the element (issue #299)
+					input[0] = null;
+					return !results.pop();
+				};
+		}),
+
+		"has": markFunction(function( selector ) {
+			return function( elem ) {
+				return Sizzle( selector, elem ).length > 0;
+			};
+		}),
+
+		"contains": markFunction(function( text ) {
+			text = text.replace( runescape, funescape );
+			return function( elem ) {
+				return ( elem.textContent || elem.innerText || getText( elem ) ).indexOf( text ) > -1;
+			};
+		}),
+
+		// "Whether an element is represented by a :lang() selector
+		// is based solely on the element's language value
+		// being equal to the identifier C,
+		// or beginning with the identifier C immediately followed by "-".
+		// The matching of C against the element's language value is performed case-insensitively.
+		// The identifier C does not have to be a valid language name."
+		// http://www.w3.org/TR/selectors/#lang-pseudo
+		"lang": markFunction( function( lang ) {
+			// lang value must be a valid identifier
+			if ( !ridentifier.test(lang || "") ) {
+				Sizzle.error( "unsupported lang: " + lang );
+			}
+			lang = lang.replace( runescape, funescape ).toLowerCase();
+			return function( elem ) {
+				var elemLang;
+				do {
+					if ( (elemLang = documentIsHTML ?
+						elem.lang :
+						elem.getAttribute("xml:lang") || elem.getAttribute("lang")) ) {
+
+						elemLang = elemLang.toLowerCase();
+						return elemLang === lang || elemLang.indexOf( lang + "-" ) === 0;
+					}
+				} while ( (elem = elem.parentNode) && elem.nodeType === 1 );
+				return false;
+			};
+		}),
+
+		// Miscellaneous
+		"target": function( elem ) {
+			var hash = window.location && window.location.hash;
+			return hash && hash.slice( 1 ) === elem.id;
+		},
+
+		"root": function( elem ) {
+			return elem === docElem;
+		},
+
+		"focus": function( elem ) {
+			return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);
+		},
+
+		// Boolean properties
+		"enabled": createDisabledPseudo( false ),
+		"disabled": createDisabledPseudo( true ),
+
+		"checked": function( elem ) {
+			// In CSS3, :checked should return both checked and selected elements
+			// http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked
+			var nodeName = elem.nodeName.toLowerCase();
+			return (nodeName === "input" && !!elem.checked) || (nodeName === "option" && !!elem.selected);
+		},
+
+		"selected": function( elem ) {
+			// Accessing this property makes selected-by-default
+			// options in Safari work properly
+			if ( elem.parentNode ) {
+				elem.parentNode.selectedIndex;
+			}
+
+			return elem.selected === true;
+		},
+
+		// Contents
+		"empty": function( elem ) {
+			// http://www.w3.org/TR/selectors/#empty-pseudo
+			// :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),
+			//   but not by others (comment: 8; processing instruction: 7; etc.)
+			// nodeType < 6 works because attributes (2) do not appear as children
+			for ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {
+				if ( elem.nodeType < 6 ) {
+					return false;
+				}
+			}
+			return true;
+		},
+
+		"parent": function( elem ) {
+			return !Expr.pseudos["empty"]( elem );
+		},
+
+		// Element/input types
+		"header": function( elem ) {
+			return rheader.test( elem.nodeName );
+		},
+
+		"input": function( elem ) {
+			return rinputs.test( elem.nodeName );
+		},
+
+		"button": function( elem ) {
+			var name = elem.nodeName.toLowerCase();
+			return name === "input" && elem.type === "button" || name === "button";
+		},
+
+		"text": function( elem ) {
+			var attr;
+			return elem.nodeName.toLowerCase() === "input" &&
+				elem.type === "text" &&
+
+				// Support: IE<8
+				// New HTML5 attribute values (e.g., "search") appear with elem.type === "text"
+				( (attr = elem.getAttribute("type")) == null || attr.toLowerCase() === "text" );
+		},
+
+		// Position-in-collection
+		"first": createPositionalPseudo(function() {
+			return [ 0 ];
+		}),
+
+		"last": createPositionalPseudo(function( matchIndexes, length ) {
+			return [ length - 1 ];
+		}),
+
+		"eq": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			return [ argument < 0 ? argument + length : argument ];
+		}),
+
+		"even": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 0;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"odd": createPositionalPseudo(function( matchIndexes, length ) {
+			var i = 1;
+			for ( ; i < length; i += 2 ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"lt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; --i >= 0; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		}),
+
+		"gt": createPositionalPseudo(function( matchIndexes, length, argument ) {
+			var i = argument < 0 ? argument + length : argument;
+			for ( ; ++i < length; ) {
+				matchIndexes.push( i );
+			}
+			return matchIndexes;
+		})
+	}
+};
+
+Expr.pseudos["nth"] = Expr.pseudos["eq"];
+
+// Add button/input type pseudos
+for ( i in { radio: true, checkbox: true, file: true, password: true, image: true } ) {
+	Expr.pseudos[ i ] = createInputPseudo( i );
+}
+for ( i in { submit: true, reset: true } ) {
+	Expr.pseudos[ i ] = createButtonPseudo( i );
+}
+
+// Easy API for creating new setFilters
+function setFilters() {}
+setFilters.prototype = Expr.filters = Expr.pseudos;
+Expr.setFilters = new setFilters();
+
+tokenize = Sizzle.tokenize = function( selector, parseOnly ) {
+	var matched, match, tokens, type,
+		soFar, groups, preFilters,
+		cached = tokenCache[ selector + " " ];
+
+	if ( cached ) {
+		return parseOnly ? 0 : cached.slice( 0 );
+	}
+
+	soFar = selector;
+	groups = [];
+	preFilters = Expr.preFilter;
+
+	while ( soFar ) {
+
+		// Comma and first run
+		if ( !matched || (match = rcomma.exec( soFar )) ) {
+			if ( match ) {
+				// Don't consume trailing commas as valid
+				soFar = soFar.slice( match[0].length ) || soFar;
+			}
+			groups.push( (tokens = []) );
+		}
+
+		matched = false;
+
+		// Combinators
+		if ( (match = rcombinators.exec( soFar )) ) {
+			matched = match.shift();
+			tokens.push({
+				value: matched,
+				// Cast descendant combinators to space
+				type: match[0].replace( rtrim, " " )
+			});
+			soFar = soFar.slice( matched.length );
+		}
+
+		// Filters
+		for ( type in Expr.filter ) {
+			if ( (match = matchExpr[ type ].exec( soFar )) && (!preFilters[ type ] ||
+				(match = preFilters[ type ]( match ))) ) {
+				matched = match.shift();
+				tokens.push({
+					value: matched,
+					type: type,
+					matches: match
+				});
+				soFar = soFar.slice( matched.length );
+			}
+		}
+
+		if ( !matched ) {
+			break;
+		}
+	}
+
+	// Return the length of the invalid excess
+	// if we're just parsing
+	// Otherwise, throw an error or return tokens
+	return parseOnly ?
+		soFar.length :
+		soFar ?
+			Sizzle.error( selector ) :
+			// Cache the tokens
+			tokenCache( selector, groups ).slice( 0 );
+};
+
+function toSelector( tokens ) {
+	var i = 0,
+		len = tokens.length,
+		selector = "";
+	for ( ; i < len; i++ ) {
+		selector += tokens[i].value;
+	}
+	return selector;
+}
+
+function addCombinator( matcher, combinator, base ) {
+	var dir = combinator.dir,
+		skip = combinator.next,
+		key = skip || dir,
+		checkNonElements = base && key === "parentNode",
+		doneName = done++;
+
+	return combinator.first ?
+		// Check against closest ancestor/preceding element
+		function( elem, context, xml ) {
+			while ( (elem = elem[ dir ]) ) {
+				if ( elem.nodeType === 1 || checkNonElements ) {
+					return matcher( elem, context, xml );
+				}
+			}
+		} :
+
+		// Check against all ancestor/preceding elements
+		function( elem, context, xml ) {
+			var oldCache, uniqueCache, outerCache,
+				newCache = [ dirruns, doneName ];
+
+			// We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching
+			if ( xml ) {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						if ( matcher( elem, context, xml ) ) {
+							return true;
+						}
+					}
+				}
+			} else {
+				while ( (elem = elem[ dir ]) ) {
+					if ( elem.nodeType === 1 || checkNonElements ) {
+						outerCache = elem[ expando ] || (elem[ expando ] = {});
+
+						// Support: IE <9 only
+						// Defend against cloned attroperties (jQuery gh-1709)
+						uniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});
+
+						if ( skip && skip === elem.nodeName.toLowerCase() ) {
+							elem = elem[ dir ] || elem;
+						} else if ( (oldCache = uniqueCache[ key ]) &&
+							oldCache[ 0 ] === dirruns && oldCache[ 1 ] === doneName ) {
+
+							// Assign to newCache so results back-propagate to previous elements
+							return (newCache[ 2 ] = oldCache[ 2 ]);
+						} else {
+							// Reuse newcache so results back-propagate to previous elements
+							uniqueCache[ key ] = newCache;
+
+							// A match means we're done; a fail means we have to keep checking
+							if ( (newCache[ 2 ] = matcher( elem, context, xml )) ) {
+								return true;
+							}
+						}
+					}
+				}
+			}
+		};
+}
+
+function elementMatcher( matchers ) {
+	return matchers.length > 1 ?
+		function( elem, context, xml ) {
+			var i = matchers.length;
+			while ( i-- ) {
+				if ( !matchers[i]( elem, context, xml ) ) {
+					return false;
+				}
+			}
+			return true;
+		} :
+		matchers[0];
+}
+
+function multipleContexts( selector, contexts, results ) {
+	var i = 0,
+		len = contexts.length;
+	for ( ; i < len; i++ ) {
+		Sizzle( selector, contexts[i], results );
+	}
+	return results;
+}
+
+function condense( unmatched, map, filter, context, xml ) {
+	var elem,
+		newUnmatched = [],
+		i = 0,
+		len = unmatched.length,
+		mapped = map != null;
+
+	for ( ; i < len; i++ ) {
+		if ( (elem = unmatched[i]) ) {
+			if ( !filter || filter( elem, context, xml ) ) {
+				newUnmatched.push( elem );
+				if ( mapped ) {
+					map.push( i );
+				}
+			}
+		}
+	}
+
+	return newUnmatched;
+}
+
+function setMatcher( preFilter, selector, matcher, postFilter, postFinder, postSelector ) {
+	if ( postFilter && !postFilter[ expando ] ) {
+		postFilter = setMatcher( postFilter );
+	}
+	if ( postFinder && !postFinder[ expando ] ) {
+		postFinder = setMatcher( postFinder, postSelector );
+	}
+	return markFunction(function( seed, results, context, xml ) {
+		var temp, i, elem,
+			preMap = [],
+			postMap = [],
+			preexisting = results.length,
+
+			// Get initial elements from seed or context
+			elems = seed || multipleContexts( selector || "*", context.nodeType ? [ context ] : context, [] ),
+
+			// Prefilter to get matcher input, preserving a map for seed-results synchronization
+			matcherIn = preFilter && ( seed || !selector ) ?
+				condense( elems, preMap, preFilter, context, xml ) :
+				elems,
+
+			matcherOut = matcher ?
+				// If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,
+				postFinder || ( seed ? preFilter : preexisting || postFilter ) ?
+
+					// ...intermediate processing is necessary
+					[] :
+
+					// ...otherwise use results directly
+					results :
+				matcherIn;
+
+		// Find primary matches
+		if ( matcher ) {
+			matcher( matcherIn, matcherOut, context, xml );
+		}
+
+		// Apply postFilter
+		if ( postFilter ) {
+			temp = condense( matcherOut, postMap );
+			postFilter( temp, [], context, xml );
+
+			// Un-match failing elements by moving them back to matcherIn
+			i = temp.length;
+			while ( i-- ) {
+				if ( (elem = temp[i]) ) {
+					matcherOut[ postMap[i] ] = !(matcherIn[ postMap[i] ] = elem);
+				}
+			}
+		}
+
+		if ( seed ) {
+			if ( postFinder || preFilter ) {
+				if ( postFinder ) {
+					// Get the final matcherOut by condensing this intermediate into postFinder contexts
+					temp = [];
+					i = matcherOut.length;
+					while ( i-- ) {
+						if ( (elem = matcherOut[i]) ) {
+							// Restore matcherIn since elem is not yet a final match
+							temp.push( (matcherIn[i] = elem) );
+						}
+					}
+					postFinder( null, (matcherOut = []), temp, xml );
+				}
+
+				// Move matched elements from seed to results to keep them synchronized
+				i = matcherOut.length;
+				while ( i-- ) {
+					if ( (elem = matcherOut[i]) &&
+						(temp = postFinder ? indexOf( seed, elem ) : preMap[i]) > -1 ) {
+
+						seed[temp] = !(results[temp] = elem);
+					}
+				}
+			}
+
+		// Add elements to results, through postFinder if defined
+		} else {
+			matcherOut = condense(
+				matcherOut === results ?
+					matcherOut.splice( preexisting, matcherOut.length ) :
+					matcherOut
+			);
+			if ( postFinder ) {
+				postFinder( null, results, matcherOut, xml );
+			} else {
+				push.apply( results, matcherOut );
+			}
+		}
+	});
+}
+
+function matcherFromTokens( tokens ) {
+	var checkContext, matcher, j,
+		len = tokens.length,
+		leadingRelative = Expr.relative[ tokens[0].type ],
+		implicitRelative = leadingRelative || Expr.relative[" "],
+		i = leadingRelative ? 1 : 0,
+
+		// The foundational matcher ensures that elements are reachable from top-level context(s)
+		matchContext = addCombinator( function( elem ) {
+			return elem === checkContext;
+		}, implicitRelative, true ),
+		matchAnyContext = addCombinator( function( elem ) {
+			return indexOf( checkContext, elem ) > -1;
+		}, implicitRelative, true ),
+		matchers = [ function( elem, context, xml ) {
+			var ret = ( !leadingRelative && ( xml || context !== outermostContext ) ) || (
+				(checkContext = context).nodeType ?
+					matchContext( elem, context, xml ) :
+					matchAnyContext( elem, context, xml ) );
+			// Avoid hanging onto element (issue #299)
+			checkContext = null;
+			return ret;
+		} ];
+
+	for ( ; i < len; i++ ) {
+		if ( (matcher = Expr.relative[ tokens[i].type ]) ) {
+			matchers = [ addCombinator(elementMatcher( matchers ), matcher) ];
+		} else {
+			matcher = Expr.filter[ tokens[i].type ].apply( null, tokens[i].matches );
+
+			// Return special upon seeing a positional matcher
+			if ( matcher[ expando ] ) {
+				// Find the next relative operator (if any) for proper handling
+				j = ++i;
+				for ( ; j < len; j++ ) {
+					if ( Expr.relative[ tokens[j].type ] ) {
+						break;
+					}
+				}
+				return setMatcher(
+					i > 1 && elementMatcher( matchers ),
+					i > 1 && toSelector(
+						// If the preceding token was a descendant combinator, insert an implicit any-element `*`
+						tokens.slice( 0, i - 1 ).concat({ value: tokens[ i - 2 ].type === " " ? "*" : "" })
+					).replace( rtrim, "$1" ),
+					matcher,
+					i < j && matcherFromTokens( tokens.slice( i, j ) ),
+					j < len && matcherFromTokens( (tokens = tokens.slice( j )) ),
+					j < len && toSelector( tokens )
+				);
+			}
+			matchers.push( matcher );
+		}
+	}
+
+	return elementMatcher( matchers );
+}
+
+function matcherFromGroupMatchers( elementMatchers, setMatchers ) {
+	var bySet = setMatchers.length > 0,
+		byElement = elementMatchers.length > 0,
+		superMatcher = function( seed, context, xml, results, outermost ) {
+			var elem, j, matcher,
+				matchedCount = 0,
+				i = "0",
+				unmatched = seed && [],
+				setMatched = [],
+				contextBackup = outermostContext,
+				// We must always have either seed elements or outermost context
+				elems = seed || byElement && Expr.find["TAG"]( "*", outermost ),
+				// Use integer dirruns iff this is the outermost matcher
+				dirrunsUnique = (dirruns += contextBackup == null ? 1 : Math.random() || 0.1),
+				len = elems.length;
+
+			if ( outermost ) {
+				outermostContext = context === document || context || outermost;
+			}
+
+			// Add elements passing elementMatchers directly to results
+			// Support: IE<9, Safari
+			// Tolerate NodeList properties (IE: "length"; Safari: <number>) matching elements by id
+			for ( ; i !== len && (elem = elems[i]) != null; i++ ) {
+				if ( byElement && elem ) {
+					j = 0;
+					if ( !context && elem.ownerDocument !== document ) {
+						setDocument( elem );
+						xml = !documentIsHTML;
+					}
+					while ( (matcher = elementMatchers[j++]) ) {
+						if ( matcher( elem, context || document, xml) ) {
+							results.push( elem );
+							break;
+						}
+					}
+					if ( outermost ) {
+						dirruns = dirrunsUnique;
+					}
+				}
+
+				// Track unmatched elements for set filters
+				if ( bySet ) {
+					// They will have gone through all possible matchers
+					if ( (elem = !matcher && elem) ) {
+						matchedCount--;
+					}
+
+					// Lengthen the array for every element, matched or not
+					if ( seed ) {
+						unmatched.push( elem );
+					}
+				}
+			}
+
+			// `i` is now the count of elements visited above, and adding it to `matchedCount`
+			// makes the latter nonnegative.
+			matchedCount += i;
+
+			// Apply set filters to unmatched elements
+			// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`
+			// equals `i`), unless we didn't visit _any_ elements in the above loop because we have
+			// no element matchers and no seed.
+			// Incrementing an initially-string "0" `i` allows `i` to remain a string only in that
+			// case, which will result in a "00" `matchedCount` that differs from `i` but is also
+			// numerically zero.
+			if ( bySet && i !== matchedCount ) {
+				j = 0;
+				while ( (matcher = setMatchers[j++]) ) {
+					matcher( unmatched, setMatched, context, xml );
+				}
+
+				if ( seed ) {
+					// Reintegrate element matches to eliminate the need for sorting
+					if ( matchedCount > 0 ) {
+						while ( i-- ) {
+							if ( !(unmatched[i] || setMatched[i]) ) {
+								setMatched[i] = pop.call( results );
+							}
+						}
+					}
+
+					// Discard index placeholder values to get only actual matches
+					setMatched = condense( setMatched );
+				}
+
+				// Add matches to results
+				push.apply( results, setMatched );
+
+				// Seedless set matches succeeding multiple successful matchers stipulate sorting
+				if ( outermost && !seed && setMatched.length > 0 &&
+					( matchedCount + setMatchers.length ) > 1 ) {
+
+					Sizzle.uniqueSort( results );
+				}
+			}
+
+			// Override manipulation of globals by nested matchers
+			if ( outermost ) {
+				dirruns = dirrunsUnique;
+				outermostContext = contextBackup;
+			}
+
+			return unmatched;
+		};
+
+	return bySet ?
+		markFunction( superMatcher ) :
+		superMatcher;
+}
+
+compile = Sizzle.compile = function( selector, match /* Internal Use Only */ ) {
+	var i,
+		setMatchers = [],
+		elementMatchers = [],
+		cached = compilerCache[ selector + " " ];
+
+	if ( !cached ) {
+		// Generate a function of recursive functions that can be used to check each element
+		if ( !match ) {
+			match = tokenize( selector );
+		}
+		i = match.length;
+		while ( i-- ) {
+			cached = matcherFromTokens( match[i] );
+			if ( cached[ expando ] ) {
+				setMatchers.push( cached );
+			} else {
+				elementMatchers.push( cached );
+			}
+		}
+
+		// Cache the compiled function
+		cached = compilerCache( selector, matcherFromGroupMatchers( elementMatchers, setMatchers ) );
+
+		// Save selector and tokenization
+		cached.selector = selector;
+	}
+	return cached;
+};
+
+/**
+ * A low-level selection function that works with Sizzle's compiled
+ *  selector functions
+ * @param {String|Function} selector A selector or a pre-compiled
+ *  selector function built with Sizzle.compile
+ * @param {Element} context
+ * @param {Array} [results]
+ * @param {Array} [seed] A set of elements to match against
+ */
+select = Sizzle.select = function( selector, context, results, seed ) {
+	var i, tokens, token, type, find,
+		compiled = typeof selector === "function" && selector,
+		match = !seed && tokenize( (selector = compiled.selector || selector) );
+
+	results = results || [];
+
+	// Try to minimize operations if there is only one selector in the list and no seed
+	// (the latter of which guarantees us context)
+	if ( match.length === 1 ) {
+
+		// Reduce context if the leading compound selector is an ID
+		tokens = match[0] = match[0].slice( 0 );
+		if ( tokens.length > 2 && (token = tokens[0]).type === "ID" &&
+				support.getById && context.nodeType === 9 && documentIsHTML &&
+				Expr.relative[ tokens[1].type ] ) {
+
+			context = ( Expr.find["ID"]( token.matches[0].replace(runescape, funescape), context ) || [] )[0];
+			if ( !context ) {
+				return results;
+
+			// Precompiled matchers will still verify ancestry, so step up a level
+			} else if ( compiled ) {
+				context = context.parentNode;
+			}
+
+			selector = selector.slice( tokens.shift().value.length );
+		}
+
+		// Fetch a seed set for right-to-left matching
+		i = matchExpr["needsContext"].test( selector ) ? 0 : tokens.length;
+		while ( i-- ) {
+			token = tokens[i];
+
+			// Abort if we hit a combinator
+			if ( Expr.relative[ (type = token.type) ] ) {
+				break;
+			}
+			if ( (find = Expr.find[ type ]) ) {
+				// Search, expanding context for leading sibling combinators
+				if ( (seed = find(
+					token.matches[0].replace( runescape, funescape ),
+					rsibling.test( tokens[0].type ) && testContext( context.parentNode ) || context
+				)) ) {
+
+					// If seed is empty or no tokens remain, we can return early
+					tokens.splice( i, 1 );
+					selector = seed.length && toSelector( tokens );
+					if ( !selector ) {
+						push.apply( results, seed );
+						return results;
+					}
+
+					break;
+				}
+			}
+		}
+	}
+
+	// Compile and execute a filtering function if one is not provided
+	// Provide `match` to avoid retokenization if we modified the selector above
+	( compiled || compile( selector, match ) )(
+		seed,
+		context,
+		!documentIsHTML,
+		results,
+		!context || rsibling.test( selector ) && testContext( context.parentNode ) || context
+	);
+	return results;
+};
+
+// One-time assignments
+
+// Sort stability
+support.sortStable = expando.split("").sort( sortOrder ).join("") === expando;
+
+// Support: Chrome 14-35+
+// Always assume duplicates if they aren't passed to the comparison function
+support.detectDuplicates = !!hasDuplicate;
+
+// Initialize against the default document
+setDocument();
+
+// Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)
+// Detached nodes confoundingly follow *each other*
+support.sortDetached = assert(function( el ) {
+	// Should return 1, but returns 4 (following)
+	return el.compareDocumentPosition( document.createElement("fieldset") ) & 1;
+});
+
+// Support: IE<8
+// Prevent attribute/property "interpolation"
+// https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx
+if ( !assert(function( el ) {
+	el.innerHTML = "<a href='#'></a>";
+	return el.firstChild.getAttribute("href") === "#" ;
+}) ) {
+	addHandle( "type|href|height|width", function( elem, name, isXML ) {
+		if ( !isXML ) {
+			return elem.getAttribute( name, name.toLowerCase() === "type" ? 1 : 2 );
+		}
+	});
+}
+
+// Support: IE<9
+// Use defaultValue in place of getAttribute("value")
+if ( !support.attributes || !assert(function( el ) {
+	el.innerHTML = "<input/>";
+	el.firstChild.setAttribute( "value", "" );
+	return el.firstChild.getAttribute( "value" ) === "";
+}) ) {
+	addHandle( "value", function( elem, name, isXML ) {
+		if ( !isXML && elem.nodeName.toLowerCase() === "input" ) {
+			return elem.defaultValue;
+		}
+	});
+}
+
+// Support: IE<9
+// Use getAttributeNode to fetch booleans when getAttribute lies
+if ( !assert(function( el ) {
+	return el.getAttribute("disabled") == null;
+}) ) {
+	addHandle( booleans, function( elem, name, isXML ) {
+		var val;
+		if ( !isXML ) {
+			return elem[ name ] === true ? name.toLowerCase() :
+					(val = elem.getAttributeNode( name )) && val.specified ?
+					val.value :
+				null;
+		}
+	});
+}
+
+return Sizzle;
+
+})( window );
+
+
+
+jQuery.find = Sizzle;
+jQuery.expr = Sizzle.selectors;
+
+// Deprecated
+jQuery.expr[ ":" ] = jQuery.expr.pseudos;
+jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;
+jQuery.text = Sizzle.getText;
+jQuery.isXMLDoc = Sizzle.isXML;
+jQuery.contains = Sizzle.contains;
+jQuery.escapeSelector = Sizzle.escape;
+
+
+
+
+var dir = function( elem, dir, until ) {
+	var matched = [],
+		truncate = until !== undefined;
+
+	while ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {
+		if ( elem.nodeType === 1 ) {
+			if ( truncate && jQuery( elem ).is( until ) ) {
+				break;
+			}
+			matched.push( elem );
+		}
+	}
+	return matched;
+};
+
+
+var siblings = function( n, elem ) {
+	var matched = [];
+
+	for ( ; n; n = n.nextSibling ) {
+		if ( n.nodeType === 1 && n !== elem ) {
+			matched.push( n );
+		}
+	}
+
+	return matched;
+};
+
+
+var rneedsContext = jQuery.expr.match.needsContext;
+
+var rsingleTag = ( /^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i );
+
+
+
+var risSimple = /^.[^:#\[\.,]*$/;
+
+// Implement the identical functionality for filter and not
+function winnow( elements, qualifier, not ) {
+	if ( jQuery.isFunction( qualifier ) ) {
+		return jQuery.grep( elements, function( elem, i ) {
+			return !!qualifier.call( elem, i, elem ) !== not;
+		} );
+
+	}
+
+	if ( qualifier.nodeType ) {
+		return jQuery.grep( elements, function( elem ) {
+			return ( elem === qualifier ) !== not;
+		} );
+
+	}
+
+	if ( typeof qualifier === "string" ) {
+		if ( risSimple.test( qualifier ) ) {
+			return jQuery.filter( qualifier, elements, not );
+		}
+
+		qualifier = jQuery.filter( qualifier, elements );
+	}
+
+	return jQuery.grep( elements, function( elem ) {
+		return ( indexOf.call( qualifier, elem ) > -1 ) !== not && elem.nodeType === 1;
+	} );
+}
+
+jQuery.filter = function( expr, elems, not ) {
+	var elem = elems[ 0 ];
+
+	if ( not ) {
+		expr = ":not(" + expr + ")";
+	}
+
+	return elems.length === 1 && elem.nodeType === 1 ?
+		jQuery.find.matchesSelector( elem, expr ) ? [ elem ] : [] :
+		jQuery.find.matches( expr, jQuery.grep( elems, function( elem ) {
+			return elem.nodeType === 1;
+		} ) );
+};
+
+jQuery.fn.extend( {
+	find: function( selector ) {
+		var i, ret,
+			len = this.length,
+			self = this;
+
+		if ( typeof selector !== "string" ) {
+			return this.pushStack( jQuery( selector ).filter( function() {
+				for ( i = 0; i < len; i++ ) {
+					if ( jQuery.contains( self[ i ], this ) ) {
+						return true;
+					}
+				}
+			} ) );
+		}
+
+		ret = this.pushStack( [] );
+
+		for ( i = 0; i < len; i++ ) {
+			jQuery.find( selector, self[ i ], ret );
+		}
+
+		return len > 1 ? jQuery.uniqueSort( ret ) : ret;
+	},
+	filter: function( selector ) {
+		return this.pushStack( winnow( this, selector || [], false ) );
+	},
+	not: function( selector ) {
+		return this.pushStack( winnow( this, selector || [], true ) );
+	},
+	is: function( selector ) {
+		return !!winnow(
+			this,
+
+			// If this is a positional/relative selector, check membership in the returned set
+			// so $("p:first").is("p:last") won't return true for a doc with two "p".
+			typeof selector === "string" && rneedsContext.test( selector ) ?
+				jQuery( selector ) :
+				selector || [],
+			false
+		).length;
+	}
+} );
+
+
+// Initialize a jQuery object
+
+
+// A central reference to the root jQuery(document)
+var rootjQuery,
+
+	// A simple way to check for HTML strings
+	// Prioritize #id over <tag> to avoid XSS via location.hash (#9521)
+	// Strict HTML recognition (#11290: must start with <)
+	// Shortcut simple #id case for speed
+	rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,
+
+	init = jQuery.fn.init = function( selector, context, root ) {
+		var match, elem;
+
+		// HANDLE: $(""), $(null), $(undefined), $(false)
+		if ( !selector ) {
+			return this;
+		}
+
+		// Method init() accepts an alternate rootjQuery
+		// so migrate can support jQuery.sub (gh-2101)
+		root = root || rootjQuery;
+
+		// Handle HTML strings
+		if ( typeof selector === "string" ) {
+			if ( selector[ 0 ] === "<" &&
+				selector[ selector.length - 1 ] === ">" &&
+				selector.length >= 3 ) {
+
+				// Assume that strings that start and end with <> are HTML and skip the regex check
+				match = [ null, selector, null ];
+
+			} else {
+				match = rquickExpr.exec( selector );
+			}
+
+			// Match html or make sure no context is specified for #id
+			if ( match && ( match[ 1 ] || !context ) ) {
+
+				// HANDLE: $(html) -> $(array)
+				if ( match[ 1 ] ) {
+					context = context instanceof jQuery ? context[ 0 ] : context;
+
+					// Option to run scripts is true for back-compat
+					// Intentionally let the error be thrown if parseHTML is not present
+					jQuery.merge( this, jQuery.parseHTML(
+						match[ 1 ],
+						context && context.nodeType ? context.ownerDocument || context : document,
+						true
+					) );
+
+					// HANDLE: $(html, props)
+					if ( rsingleTag.test( match[ 1 ] ) && jQuery.isPlainObject( context ) ) {
+						for ( match in context ) {
+
+							// Properties of context are called as methods if possible
+							if ( jQuery.isFunction( this[ match ] ) ) {
+								this[ match ]( context[ match ] );
+
+							// ...and otherwise set as attributes
+							} else {
+								this.attr( match, context[ match ] );
+							}
+						}
+					}
+
+					return this;
+
+				// HANDLE: $(#id)
+				} else {
+					elem = document.getElementById( match[ 2 ] );
+
+					if ( elem ) {
+
+						// Inject the element directly into the jQuery object
+						this[ 0 ] = elem;
+						this.length = 1;
+					}
+					return this;
+				}
+
+			// HANDLE: $(expr, $(...))
+			} else if ( !context || context.jquery ) {
+				return ( context || root ).find( selector );
+
+			// HANDLE: $(expr, context)
+			// (which is just equivalent to: $(context).find(expr)
+			} else {
+				return this.constructor( context ).find( selector );
+			}
+
+		// HANDLE: $(DOMElement)
+		} else if ( selector.nodeType ) {
+			this[ 0 ] = selector;
+			this.length = 1;
+			return this;
+
+		// HANDLE: $(function)
+		// Shortcut for document ready
+		} else if ( jQuery.isFunction( selector ) ) {
+			return root.ready !== undefined ?
+				root.ready( selector ) :
+
+				// Execute immediately if ready is not present
+				selector( jQuery );
+		}
+
+		return jQuery.makeArray( selector, this );
+	};
+
+// Give the init function the jQuery prototype for later instantiation
+init.prototype = jQuery.fn;
+
+// Initialize central reference
+rootjQuery = jQuery( document );
+
+
+var rparentsprev = /^(?:parents|prev(?:Until|All))/,
+
+	// Methods guaranteed to produce a unique set when starting from a unique set
+	guaranteedUnique = {
+		children: true,
+		contents: true,
+		next: true,
+		prev: true
+	};
+
+jQuery.fn.extend( {
+	has: function( target ) {
+		var targets = jQuery( target, this ),
+			l = targets.length;
+
+		return this.filter( function() {
+			var i = 0;
+			for ( ; i < l; i++ ) {
+				if ( jQuery.contains( this, targets[ i ] ) ) {
+					return true;
+				}
+			}
+		} );
+	},
+
+	closest: function( selectors, context ) {
+		var cur,
+			i = 0,
+			l = this.length,
+			matched = [],
+			targets = typeof selectors !== "string" && jQuery( selectors );
+
+		// Positional selectors never match, since there's no _selection_ context
+		if ( !rneedsContext.test( selectors ) ) {
+			for ( ; i < l; i++ ) {
+				for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ) {
+
+					// Always skip document fragments
+					if ( cur.nodeType < 11 && ( targets ?
+						targets.index( cur ) > -1 :
+
+						// Don't pass non-elements to Sizzle
+						cur.nodeType === 1 &&
+							jQuery.find.matchesSelector( cur, selectors ) ) ) {
+
+						matched.push( cur );
+						break;
+					}
+				}
+			}
+		}
+
+		return this.pushStack( matched.length > 1 ? jQuery.uniqueSort( matched ) : matched );
+	},
+
+	// Determine the position of an element within the set
+	index: function( elem ) {
+
+		// No argument, return index in parent
+		if ( !elem ) {
+			return ( this[ 0 ] && this[ 0 ].parentNode ) ? this.first().prevAll().length : -1;
+		}
+
+		// Index in selector
+		if ( typeof elem === "string" ) {
+			return indexOf.call( jQuery( elem ), this[ 0 ] );
+		}
+
+		// Locate the position of the desired element
+		return indexOf.call( this,
+
+			// If it receives a jQuery object, the first element is used
+			elem.jquery ? elem[ 0 ] : elem
+		);
+	},
+
+	add: function( selector, context ) {
+		return this.pushStack(
+			jQuery.uniqueSort(
+				jQuery.merge( this.get(), jQuery( selector, context ) )
+			)
+		);
+	},
+
+	addBack: function( selector ) {
+		return this.add( selector == null ?
+			this.prevObject : this.prevObject.filter( selector )
+		);
+	}
+} );
+
+function sibling( cur, dir ) {
+	while ( ( cur = cur[ dir ] ) && cur.nodeType !== 1 ) {}
+	return cur;
+}
+
+jQuery.each( {
+	parent: function( elem ) {
+		var parent = elem.parentNode;
+		return parent && parent.nodeType !== 11 ? parent : null;
+	},
+	parents: function( elem ) {
+		return dir( elem, "parentNode" );
+	},
+	parentsUntil: function( elem, i, until ) {
+		return dir( elem, "parentNode", until );
+	},
+	next: function( elem ) {
+		return sibling( elem, "nextSibling" );
+	},
+	prev: function( elem ) {
+		return sibling( elem, "previousSibling" );
+	},
+	nextAll: function( elem ) {
+		return dir( elem, "nextSibling" );
+	},
+	prevAll: function( elem ) {
+		return dir( elem, "previousSibling" );
+	},
+	nextUntil: function( elem, i, until ) {
+		return dir( elem, "nextSibling", until );
+	},
+	prevUntil: function( elem, i, until ) {
+		return dir( elem, "previousSibling", until );
+	},
+	siblings: function( elem ) {
+		return siblings( ( elem.parentNode || {} ).firstChild, elem );
+	},
+	children: function( elem ) {
+		return siblings( elem.firstChild );
+	},
+	contents: function( elem ) {
+		return elem.contentDocument || jQuery.merge( [], elem.childNodes );
+	}
+}, function( name, fn ) {
+	jQuery.fn[ name ] = function( until, selector ) {
+		var matched = jQuery.map( this, fn, until );
+
+		if ( name.slice( -5 ) !== "Until" ) {
+			selector = until;
+		}
+
+		if ( selector && typeof selector === "string" ) {
+			matched = jQuery.filter( selector, matched );
+		}
+
+		if ( this.length > 1 ) {
+
+			// Remove duplicates
+			if ( !guaranteedUnique[ name ] ) {
+				jQuery.uniqueSort( matched );
+			}
+
+			// Reverse order for parents* and prev-derivatives
+			if ( rparentsprev.test( name ) ) {
+				matched.reverse();
+			}
+		}
+
+		return this.pushStack( matched );
+	};
+} );
+var rnotwhite = ( /\S+/g );
+
+
+
+// Convert String-formatted options into Object-formatted ones
+function createOptions( options ) {
+	var object = {};
+	jQuery.each( options.match( rnotwhite ) || [], function( _, flag ) {
+		object[ flag ] = true;
+	} );
+	return object;
+}
+
+/*
+ * Create a callback list using the following parameters:
+ *
+ *	options: an optional list of space-separated options that will change how
+ *			the callback list behaves or a more traditional option object
+ *
+ * By default a callback list will act like an event callback list and can be
+ * "fired" multiple times.
+ *
+ * Possible options:
+ *
+ *	once:			will ensure the callback list can only be fired once (like a Deferred)
+ *
+ *	memory:			will keep track of previous values and will call any callback added
+ *					after the list has been fired right away with the latest "memorized"
+ *					values (like a Deferred)
+ *
+ *	unique:			will ensure a callback can only be added once (no duplicate in the list)
+ *
+ *	stopOnFalse:	interrupt callings when a callback returns false
+ *
+ */
+jQuery.Callbacks = function( options ) {
+
+	// Convert options from String-formatted to Object-formatted if needed
+	// (we check in cache first)
+	options = typeof options === "string" ?
+		createOptions( options ) :
+		jQuery.extend( {}, options );
+
+	var // Flag to know if list is currently firing
+		firing,
+
+		// Last fire value for non-forgettable lists
+		memory,
+
+		// Flag to know if list was already fired
+		fired,
+
+		// Flag to prevent firing
+		locked,
+
+		// Actual callback list
+		list = [],
+
+		// Queue of execution data for repeatable lists
+		queue = [],
+
+		// Index of currently firing callback (modified by add/remove as needed)
+		firingIndex = -1,
+
+		// Fire callbacks
+		fire = function() {
+
+			// Enforce single-firing
+			locked = options.once;
+
+			// Execute callbacks for all pending executions,
+			// respecting firingIndex overrides and runtime changes
+			fired = firing = true;
+			for ( ; queue.length; firingIndex = -1 ) {
+				memory = queue.shift();
+				while ( ++firingIndex < list.length ) {
+
+					// Run callback and check for early termination
+					if ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&
+						options.stopOnFalse ) {
+
+						// Jump to end and forget the data so .add doesn't re-fire
+						firingIndex = list.length;
+						memory = false;
+					}
+				}
+			}
+
+			// Forget the data if we're done with it
+			if ( !options.memory ) {
+				memory = false;
+			}
+
+			firing = false;
+
+			// Clean up if we're done firing for good
+			if ( locked ) {
+
+				// Keep an empty list if we have data for future add calls
+				if ( memory ) {
+					list = [];
+
+				// Otherwise, this object is spent
+				} else {
+					list = "";
+				}
+			}
+		},
+
+		// Actual Callbacks object
+		self = {
+
+			// Add a callback or a collection of callbacks to the list
+			add: function() {
+				if ( list ) {
+
+					// If we have memory from a past run, we should fire after adding
+					if ( memory && !firing ) {
+						firingIndex = list.length - 1;
+						queue.push( memory );
+					}
+
+					( function add( args ) {
+						jQuery.each( args, function( _, arg ) {
+							if ( jQuery.isFunction( arg ) ) {
+								if ( !options.unique || !self.has( arg ) ) {
+									list.push( arg );
+								}
+							} else if ( arg && arg.length && jQuery.type( arg ) !== "string" ) {
+
+								// Inspect recursively
+								add( arg );
+							}
+						} );
+					} )( arguments );
+
+					if ( memory && !firing ) {
+						fire();
+					}
+				}
+				return this;
+			},
+
+			// Remove a callback from the list
+			remove: function() {
+				jQuery.each( arguments, function( _, arg ) {
+					var index;
+					while ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {
+						list.splice( index, 1 );
+
+						// Handle firing indexes
+						if ( index <= firingIndex ) {
+							firingIndex--;
+						}
+					}
+				} );
+				return this;
+			},
+
+			// Check if a given callback is in the list.
+			// If no argument is given, return whether or not list has callbacks attached.
+			has: function( fn ) {
+				return fn ?
+					jQuery.inArray( fn, list ) > -1 :
+					list.length > 0;
+			},
+
+			// Remove all callbacks from the list
+			empty: function() {
+				if ( list ) {
+					list = [];
+				}
+				return this;
+			},
+
+			// Disable .fire and .add
+			// Abort any current/pending executions
+			// Clear all callbacks and values
+			disable: function() {
+				locked = queue = [];
+				list = memory = "";
+				return this;
+			},
+			disabled: function() {
+				return !list;
+			},
+
+			// Disable .fire
+			// Also disable .add unless we have memory (since it would have no effect)
+			// Abort any pending executions
+			lock: function() {
+				locked = queue = [];
+				if ( !memory && !firing ) {
+					list = memory = "";
+				}
+				return this;
+			},
+			locked: function() {
+				return !!locked;
+			},
+
+			// Call all callbacks with the given context and arguments
+			fireWith: function( context, args ) {
+				if ( !locked ) {
+					args = args || [];
+					args = [ context, args.slice ? args.slice() : args ];
+					queue.push( args );
+					if ( !firing ) {
+						fire();
+					}
+				}
+				return this;
+			},
+
+			// Call all the callbacks with the given arguments
+			fire: function() {
+				self.fireWith( this, arguments );
+				return this;
+			},
+
+			// To know if the callbacks have already been called at least once
+			fired: function() {
+				return !!fired;
+			}
+		};
+
+	return self;
+};
+
+
+function Identity( v ) {
+	return v;
+}
+function Thrower( ex ) {
+	throw ex;
+}
+
+function adoptValue( value, resolve, reject ) {
+	var method;
+
+	try {
+
+		// Check for promise aspect first to privilege synchronous behavior
+		if ( value && jQuery.isFunction( ( method = value.promise ) ) ) {
+			method.call( value ).done( resolve ).fail( reject );
+
+		// Other thenables
+		} else if ( value && jQuery.isFunction( ( method = value.then ) ) ) {
+			method.call( value, resolve, reject );
+
+		// Other non-thenables
+		} else {
+
+			// Support: Android 4.0 only
+			// Strict mode functions invoked without .call/.apply get global-object context
+			resolve.call( undefined, value );
+		}
+
+	// For Promises/A+, convert exceptions into rejections
+	// Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in
+	// Deferred#then to conditionally suppress rejection.
+	} catch ( value ) {
+
+		// Support: Android 4.0 only
+		// Strict mode functions invoked without .call/.apply get global-object context
+		reject.call( undefined, value );
+	}
+}
+
+jQuery.extend( {
+
+	Deferred: function( func ) {
+		var tuples = [
+
+				// action, add listener, callbacks,
+				// ... .then handlers, argument index, [final state]
+				[ "notify", "progress", jQuery.Callbacks( "memory" ),
+					jQuery.Callbacks( "memory" ), 2 ],
+				[ "resolve", "done", jQuery.Callbacks( "once memory" ),
+					jQuery.Callbacks( "once memory" ), 0, "resolved" ],
+				[ "reject", "fail", jQuery.Callbacks( "once memory" ),
+					jQuery.Callbacks( "once memory" ), 1, "rejected" ]
+			],
+			state = "pending",
+			promise = {
+				state: function() {
+					return state;
+				},
+				always: function() {
+					deferred.done( arguments ).fail( arguments );
+					return this;
+				},
+				"catch": function( fn ) {
+					return promise.then( null, fn );
+				},
+
+				// Keep pipe for back-compat
+				pipe: function( /* fnDone, fnFail, fnProgress */ ) {
+					var fns = arguments;
+
+					return jQuery.Deferred( function( newDefer ) {
+						jQuery.each( tuples, function( i, tuple ) {
+
+							// Map tuples (progress, done, fail) to arguments (done, fail, progress)
+							var fn = jQuery.isFunction( fns[ tuple[ 4 ] ] ) && fns[ tuple[ 4 ] ];
+
+							// deferred.progress(function() { bind to newDefer or newDefer.notify })
+							// deferred.done(function() { bind to newDefer or newDefer.resolve })
+							// deferred.fail(function() { bind to newDefer or newDefer.reject })
+							deferred[ tuple[ 1 ] ]( function() {
+								var returned = fn && fn.apply( this, arguments );
+								if ( returned && jQuery.isFunction( returned.promise ) ) {
+									returned.promise()
+										.progress( newDefer.notify )
+										.done( newDefer.resolve )
+										.fail( newDefer.reject );
+								} else {
+									newDefer[ tuple[ 0 ] + "With" ](
+										this,
+										fn ? [ returned ] : arguments
+									);
+								}
+							} );
+						} );
+						fns = null;
+					} ).promise();
+				},
+				then: function( onFulfilled, onRejected, onProgress ) {
+					var maxDepth = 0;
+					function resolve( depth, deferred, handler, special ) {
+						return function() {
+							var that = this,
+								args = arguments,
+								mightThrow = function() {
+									var returned, then;
+
+									// Support: Promises/A+ section 2.3.3.3.3
+									// https://promisesaplus.com/#point-59
+									// Ignore double-resolution attempts
+									if ( depth < maxDepth ) {
+										return;
+									}
+
+									returned = handler.apply( that, args );
+
+									// Support: Promises/A+ section 2.3.1
+									// https://promisesaplus.com/#point-48
+									if ( returned === deferred.promise() ) {
+										throw new TypeError( "Thenable self-resolution" );
+									}
+
+									// Support: Promises/A+ sections 2.3.3.1, 3.5
+									// https://promisesaplus.com/#point-54
+									// https://promisesaplus.com/#point-75
+									// Retrieve `then` only once
+									then = returned &&
+
+										// Support: Promises/A+ section 2.3.4
+										// https://promisesaplus.com/#point-64
+										// Only check objects and functions for thenability
+										( typeof returned === "object" ||
+											typeof returned === "function" ) &&
+										returned.then;
+
+									// Handle a returned thenable
+									if ( jQuery.isFunction( then ) ) {
+
+										// Special processors (notify) just wait for resolution
+										if ( special ) {
+											then.call(
+												returned,
+												resolve( maxDepth, deferred, Identity, special ),
+												resolve( maxDepth, deferred, Thrower, special )
+											);
+
+										// Normal processors (resolve) also hook into progress
+										} else {
+
+											// ...and disregard older resolution values
+											maxDepth++;
+
+											then.call(
+												returned,
+												resolve( maxDepth, deferred, Identity, special ),
+												resolve( maxDepth, deferred, Thrower, special ),
+												resolve( maxDepth, deferred, Identity,
+													deferred.notifyWith )
+											);
+										}
+
+									// Handle all other returned values
+									} else {
+
+										// Only substitute handlers pass on context
+										// and multiple values (non-spec behavior)
+										if ( handler !== Identity ) {
+											that = undefined;
+											args = [ returned ];
+										}
+
+										// Process the value(s)
+										// Default process is resolve
+										( special || deferred.resolveWith )( that, args );
+									}
+								},
+
+								// Only normal processors (resolve) catch and reject exceptions
+								process = special ?
+									mightThrow :
+									function() {
+										try {
+											mightThrow();
+										} catch ( e ) {
+
+											if ( jQuery.Deferred.exceptionHook ) {
+												jQuery.Deferred.exceptionHook( e,
+													process.stackTrace );
+											}
+
+											// Support: Promises/A+ section 2.3.3.3.4.1
+											// https://promisesaplus.com/#point-61
+											// Ignore post-resolution exceptions
+											if ( depth + 1 >= maxDepth ) {
+
+												// Only substitute handlers pass on context
+												// and multiple values (non-spec behavior)
+												if ( handler !== Thrower ) {
+													that = undefined;
+													args = [ e ];
+												}
+
+												deferred.rejectWith( that, args );
+											}
+										}
+									};
+
+							// Support: Promises/A+ section 2.3.3.3.1
+							// https://promisesaplus.com/#point-57
+							// Re-resolve promises immediately to dodge false rejection from
+							// subsequent errors
+							if ( depth ) {
+								process();
+							} else {
+
+								// Call an optional hook to record the stack, in case of exception
+								// since it's otherwise lost when execution goes async
+								if ( jQuery.Deferred.getStackHook ) {
+									process.stackTrace = jQuery.Deferred.getStackHook();
+								}
+								window.setTimeout( process );
+							}
+						};
+					}
+
+					return jQuery.Deferred( function( newDefer ) {
+
+						// progress_handlers.add( ... )
+						tuples[ 0 ][ 3 ].add(
+							resolve(
+								0,
+								newDefer,
+								jQuery.isFunction( onProgress ) ?
+									onProgress :
+									Identity,
+								newDefer.notifyWith
+							)
+						);
+
+						// fulfilled_handlers.add( ... )
+						tuples[ 1 ][ 3 ].add(
+							resolve(
+								0,
+								newDefer,
+								jQuery.isFunction( onFulfilled ) ?
+									onFulfilled :
+									Identity
+							)
+						);
+
+						// rejected_handlers.add( ... )
+						tuples[ 2 ][ 3 ].add(
+							resolve(
+								0,
+								newDefer,
+								jQuery.isFunction( onRejected ) ?
+									onRejected :
+									Thrower
+							)
+						);
+					} ).promise();
+				},
+
+				// Get a promise for this deferred
+				// If obj is provided, the promise aspect is added to the object
+				promise: function( obj ) {
+					return obj != null ? jQuery.extend( obj, promise ) : promise;
+				}
+			},
+			deferred = {};
+
+		// Add list-specific methods
+		jQuery.each( tuples, function( i, tuple ) {
+			var list = tuple[ 2 ],
+				stateString = tuple[ 5 ];
+
+			// promise.progress = list.add
+			// promise.done = list.add
+			// promise.fail = list.add
+			promise[ tuple[ 1 ] ] = list.add;
+
+			// Handle state
+			if ( stateString ) {
+				list.add(
+					function() {
+
+						// state = "resolved" (i.e., fulfilled)
+						// state = "rejected"
+						state = stateString;
+					},
+
+					// rejected_callbacks.disable
+					// fulfilled_callbacks.disable
+					tuples[ 3 - i ][ 2 ].disable,
+
+					// progress_callbacks.lock
+					tuples[ 0 ][ 2 ].lock
+				);
+			}
+
+			// progress_handlers.fire
+			// fulfilled_handlers.fire
+			// rejected_handlers.fire
+			list.add( tuple[ 3 ].fire );
+
+			// deferred.notify = function() { deferred.notifyWith(...) }
+			// deferred.resolve = function() { deferred.resolveWith(...) }
+			// deferred.reject = function() { deferred.rejectWith(...) }
+			deferred[ tuple[ 0 ] ] = function() {
+				deferred[ tuple[ 0 ] + "With" ]( this === deferred ? undefined : this, arguments );
+				return this;
+			};
+
+			// deferred.notifyWith = list.fireWith
+			// deferred.resolveWith = list.fireWith
+			// deferred.rejectWith = list.fireWith
+			deferred[ tuple[ 0 ] + "With" ] = list.fireWith;
+		} );
+
+		// Make the deferred a promise
+		promise.promise( deferred );
+
+		// Call given func if any
+		if ( func ) {
+			func.call( deferred, deferred );
+		}
+
+		// All done!
+		return deferred;
+	},
+
+	// Deferred helper
+	when: function( singleValue ) {
+		var
+
+			// count of uncompleted subordinates
+			remaining = arguments.length,
+
+			// count of unprocessed arguments
+			i = remaining,
+
+			// subordinate fulfillment data
+			resolveContexts = Array( i ),
+			resolveValues = slice.call( arguments ),
+
+			// the master Deferred
+			master = jQuery.Deferred(),
+
+			// subordinate callback factory
+			updateFunc = function( i ) {
+				return function( value ) {
+					resolveContexts[ i ] = this;
+					resolveValues[ i ] = arguments.length > 1 ? slice.call( arguments ) : value;
+					if ( !( --remaining ) ) {
+						master.resolveWith( resolveContexts, resolveValues );
+					}
+				};
+			};
+
+		// Single- and empty arguments are adopted like Promise.resolve
+		if ( remaining <= 1 ) {
+			adoptValue( singleValue, master.done( updateFunc( i ) ).resolve, master.reject );
+
+			// Use .then() to unwrap secondary thenables (cf. gh-3000)
+			if ( master.state() === "pending" ||
+				jQuery.isFunction( resolveValues[ i ] && resolveValues[ i ].then ) ) {
+
+				return master.then();
+			}
+		}
+
+		// Multiple arguments are aggregated like Promise.all array elements
+		while ( i-- ) {
+			adoptValue( resolveValues[ i ], updateFunc( i ), master.reject );
+		}
+
+		return master.promise();
+	}
+} );
+
+
+// These usually indicate a programmer mistake during development,
+// warn about them ASAP rather than swallowing them by default.
+var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;
+
+jQuery.Deferred.exceptionHook = function( error, stack ) {
+
+	// Support: IE 8 - 9 only
+	// Console exists when dev tools are open, which can happen at any time
+	if ( window.console && window.console.warn && error && rerrorNames.test( error.name ) ) {
+		window.console.warn( "jQuery.Deferred exception: " + error.message, error.stack, stack );
+	}
+};
+
+
+
+
+jQuery.readyException = function( error ) {
+	window.setTimeout( function() {
+		throw error;
+	} );
+};
+
+
+
+
+// The deferred used on DOM ready
+var readyList = jQuery.Deferred();
+
+jQuery.fn.ready = function( fn ) {
+
+	readyList
+		.then( fn )
+
+		// Wrap jQuery.readyException in a function so that the lookup
+		// happens at the time of error handling instead of callback
+		// registration.
+		.catch( function( error ) {
+			jQuery.readyException( error );
+		} );
+
+	return this;
+};
+
+jQuery.extend( {
+
+	// Is the DOM ready to be used? Set to true once it occurs.
+	isReady: false,
+
+	// A counter to track how many items to wait for before
+	// the ready event fires. See #6781
+	readyWait: 1,
+
+	// Hold (or release) the ready event
+	holdReady: function( hold ) {
+		if ( hold ) {
+			jQuery.readyWait++;
+		} else {
+			jQuery.ready( true );
+		}
+	},
+
+	// Handle when the DOM is ready
+	ready: function( wait ) {
+
+		// Abort if there are pending holds or we're already ready
+		if ( wait === true ? --jQuery.readyWait : jQuery.isReady ) {
+			return;
+		}
+
+		// Remember that the DOM is ready
+		jQuery.isReady = true;
+
+		// If a normal DOM Ready event fired, decrement, and wait if need be
+		if ( wait !== true && --jQuery.readyWait > 0 ) {
+			return;
+		}
+
+		// If there are functions bound, to execute
+		readyList.resolveWith( document, [ jQuery ] );
+	}
+} );
+
+jQuery.ready.then = readyList.then;
+
+// The ready event handler and self cleanup method
+function completed() {
+	document.removeEventListener( "DOMContentLoaded", completed );
+	window.removeEventListener( "load", completed );
+	jQuery.ready();
+}
+
+// Catch cases where $(document).ready() is called
+// after the browser event has already occurred.
+// Support: IE <=9 - 10 only
+// Older IE sometimes signals "interactive" too soon
+if ( document.readyState === "complete" ||
+	( document.readyState !== "loading" && !document.documentElement.doScroll ) ) {
+
+	// Handle it asynchronously to allow scripts the opportunity to delay ready
+	window.setTimeout( jQuery.ready );
+
+} else {
+
+	// Use the handy event callback
+	document.addEventListener( "DOMContentLoaded", completed );
+
+	// A fallback to window.onload, that will always work
+	window.addEventListener( "load", completed );
+}
+
+
+
+
+// Multifunctional method to get and set values of a collection
+// The value/s can optionally be executed if it's a function
+var access = function( elems, fn, key, value, chainable, emptyGet, raw ) {
+	var i = 0,
+		len = elems.length,
+		bulk = key == null;
+
+	// Sets many values
+	if ( jQuery.type( key ) === "object" ) {
+		chainable = true;
+		for ( i in key ) {
+			access( elems, fn, i, key[ i ], true, emptyGet, raw );
+		}
+
+	// Sets one value
+	} else if ( value !== undefined ) {
+		chainable = true;
+
+		if ( !jQuery.isFunction( value ) ) {
+			raw = true;
+		}
+
+		if ( bulk ) {
+
+			// Bulk operations run against the entire set
+			if ( raw ) {
+				fn.call( elems, value );
+				fn = null;
+
+			// ...except when executing function values
+			} else {
+				bulk = fn;
+				fn = function( elem, key, value ) {
+					return bulk.call( jQuery( elem ), value );
+				};
+			}
+		}
+
+		if ( fn ) {
+			for ( ; i < len; i++ ) {
+				fn(
+					elems[ i ], key, raw ?
+					value :
+					value.call( elems[ i ], i, fn( elems[ i ], key ) )
+				);
+			}
+		}
+	}
+
+	return chainable ?
+		elems :
+
+		// Gets
+		bulk ?
+			fn.call( elems ) :
+			len ? fn( elems[ 0 ], key ) : emptyGet;
+};
+var acceptData = function( owner ) {
+
+	// Accepts only:
+	//  - Node
+	//    - Node.ELEMENT_NODE
+	//    - Node.DOCUMENT_NODE
+	//  - Object
+	//    - Any
+	return owner.nodeType === 1 || owner.nodeType === 9 || !( +owner.nodeType );
+};
+
+
+
+
+function Data() {
+	this.expando = jQuery.expando + Data.uid++;
+}
+
+Data.uid = 1;
+
+Data.prototype = {
+
+	cache: function( owner ) {
+
+		// Check if the owner object already has a cache
+		var value = owner[ this.expando ];
+
+		// If not, create one
+		if ( !value ) {
+			value = {};
+
+			// We can accept data for non-element nodes in modern browsers,
+			// but we should not, see #8335.
+			// Always return an empty object.
+			if ( acceptData( owner ) ) {
+
+				// If it is a node unlikely to be stringify-ed or looped over
+				// use plain assignment
+				if ( owner.nodeType ) {
+					owner[ this.expando ] = value;
+
+				// Otherwise secure it in a non-enumerable property
+				// configurable must be true to allow the property to be
+				// deleted when data is removed
+				} else {
+					Object.defineProperty( owner, this.expando, {
+						value: value,
+						configurable: true
+					} );
+				}
+			}
+		}
+
+		return value;
+	},
+	set: function( owner, data, value ) {
+		var prop,
+			cache = this.cache( owner );
+
+		// Handle: [ owner, key, value ] args
+		// Always use camelCase key (gh-2257)
+		if ( typeof data === "string" ) {
+			cache[ jQuery.camelCase( data ) ] = value;
+
+		// Handle: [ owner, { properties } ] args
+		} else {
+
+			// Copy the properties one-by-one to the cache object
+			for ( prop in data ) {
+				cache[ jQuery.camelCase( prop ) ] = data[ prop ];
+			}
+		}
+		return cache;
+	},
+	get: function( owner, key ) {
+		return key === undefined ?
+			this.cache( owner ) :
+
+			// Always use camelCase key (gh-2257)
+			owner[ this.expando ] && owner[ this.expando ][ jQuery.camelCase( key ) ];
+	},
+	access: function( owner, key, value ) {
+
+		// In cases where either:
+		//
+		//   1. No key was specified
+		//   2. A string key was specified, but no value provided
+		//
+		// Take the "read" path and allow the get method to determine
+		// which value to return, respectively either:
+		//
+		//   1. The entire cache object
+		//   2. The data stored at the key
+		//
+		if ( key === undefined ||
+				( ( key && typeof key === "string" ) && value === undefined ) ) {
+
+			return this.get( owner, key );
+		}
+
+		// When the key is not a string, or both a key and value
+		// are specified, set or extend (existing objects) with either:
+		//
+		//   1. An object of properties
+		//   2. A key and value
+		//
+		this.set( owner, key, value );
+
+		// Since the "set" path can have two possible entry points
+		// return the expected data based on which path was taken[*]
+		return value !== undefined ? value : key;
+	},
+	remove: function( owner, key ) {
+		var i,
+			cache = owner[ this.expando ];
+
+		if ( cache === undefined ) {
+			return;
+		}
+
+		if ( key !== undefined ) {
+
+			// Support array or space separated string of keys
+			if ( jQuery.isArray( key ) ) {
+
+				// If key is an array of keys...
+				// We always set camelCase keys, so remove that.
+				key = key.map( jQuery.camelCase );
+			} else {
+				key = jQuery.camelCase( key );
+
+				// If a key with the spaces exists, use it.
+				// Otherwise, create an array by matching non-whitespace
+				key = key in cache ?
+					[ key ] :
+					( key.match( rnotwhite ) || [] );
+			}
+
+			i = key.length;
+
+			while ( i-- ) {
+				delete cache[ key[ i ] ];
+			}
+		}
+
+		// Remove the expando if there's no more data
+		if ( key === undefined || jQuery.isEmptyObject( cache ) ) {
+
+			// Support: Chrome <=35 - 45
+			// Webkit & Blink performance suffers when deleting properties
+			// from DOM nodes, so set to undefined instead
+			// https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)
+			if ( owner.nodeType ) {
+				owner[ this.expando ] = undefined;
+			} else {
+				delete owner[ this.expando ];
+			}
+		}
+	},
+	hasData: function( owner ) {
+		var cache = owner[ this.expando ];
+		return cache !== undefined && !jQuery.isEmptyObject( cache );
+	}
+};
+var dataPriv = new Data();
+
+var dataUser = new Data();
+
+
+
+//	Implementation Summary
+//
+//	1. Enforce API surface and semantic compatibility with 1.9.x branch
+//	2. Improve the module's maintainability by reducing the storage
+//		paths to a single mechanism.
+//	3. Use the same single mechanism to support "private" and "user" data.
+//	4. _Never_ expose "private" data to user code (TODO: Drop _data, _removeData)
+//	5. Avoid exposing implementation details on user objects (eg. expando properties)
+//	6. Provide a clear path for implementation upgrade to WeakMap in 2014
+
+var rbrace = /^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,
+	rmultiDash = /[A-Z]/g;
+
+function dataAttr( elem, key, data ) {
+	var name;
+
+	// If nothing was found internally, try to fetch any
+	// data from the HTML5 data-* attribute
+	if ( data === undefined && elem.nodeType === 1 ) {
+		name = "data-" + key.replace( rmultiDash, "-$&" ).toLowerCase();
+		data = elem.getAttribute( name );
+
+		if ( typeof data === "string" ) {
+			try {
+				data = data === "true" ? true :
+					data === "false" ? false :
+					data === "null" ? null :
+
+					// Only convert to a number if it doesn't change the string
+					+data + "" === data ? +data :
+					rbrace.test( data ) ? JSON.parse( data ) :
+					data;
+			} catch ( e ) {}
+
+			// Make sure we set the data so it isn't changed later
+			dataUser.set( elem, key, data );
+		} else {
+			data = undefined;
+		}
+	}
+	return data;
+}
+
+jQuery.extend( {
+	hasData: function( elem ) {
+		return dataUser.hasData( elem ) || dataPriv.hasData( elem );
+	},
+
+	data: function( elem, name, data ) {
+		return dataUser.access( elem, name, data );
+	},
+
+	removeData: function( elem, name ) {
+		dataUser.remove( elem, name );
+	},
+
+	// TODO: Now that all calls to _data and _removeData have been replaced
+	// with direct calls to dataPriv methods, these can be deprecated.
+	_data: function( elem, name, data ) {
+		return dataPriv.access( elem, name, data );
+	},
+
+	_removeData: function( elem, name ) {
+		dataPriv.remove( elem, name );
+	}
+} );
+
+jQuery.fn.extend( {
+	data: function( key, value ) {
+		var i, name, data,
+			elem = this[ 0 ],
+			attrs = elem && elem.attributes;
+
+		// Gets all values
+		if ( key === undefined ) {
+			if ( this.length ) {
+				data = dataUser.get( elem );
+
+				if ( elem.nodeType === 1 && !dataPriv.get( elem, "hasDataAttrs" ) ) {
+					i = attrs.length;
+					while ( i-- ) {
+
+						// Support: IE 11 only
+						// The attrs elements can be null (#14894)
+						if ( attrs[ i ] ) {
+							name = attrs[ i ].name;
+							if ( name.indexOf( "data-" ) === 0 ) {
+								name = jQuery.camelCase( name.slice( 5 ) );
+								dataAttr( elem, name, data[ name ] );
+							}
+						}
+					}
+					dataPriv.set( elem, "hasDataAttrs", true );
+				}
+			}
+
+			return data;
+		}
+
+		// Sets multiple values
+		if ( typeof key === "object" ) {
+			return this.each( function() {
+				dataUser.set( this, key );
+			} );
+		}
+
+		return access( this, function( value ) {
+			var data;
+
+			// The calling jQuery object (element matches) is not empty
+			// (and therefore has an element appears at this[ 0 ]) and the
+			// `value` parameter was not undefined. An empty jQuery object
+			// will result in `undefined` for elem = this[ 0 ] which will
+			// throw an exception if an attempt to read a data cache is made.
+			if ( elem && value === undefined ) {
+
+				// Attempt to get data from the cache
+				// The key will always be camelCased in Data
+				data = dataUser.get( elem, key );
+				if ( data !== undefined ) {
+					return data;
+				}
+
+				// Attempt to "discover" the data in
+				// HTML5 custom data-* attrs
+				data = dataAttr( elem, key );
+				if ( data !== undefined ) {
+					return data;
+				}
+
+				// We tried really hard, but the data doesn't exist.
+				return;
+			}
+
+			// Set the data...
+			this.each( function() {
+
+				// We always store the camelCased key
+				dataUser.set( this, key, value );
+			} );
+		}, null, value, arguments.length > 1, null, true );
+	},
+
+	removeData: function( key ) {
+		return this.each( function() {
+			dataUser.remove( this, key );
+		} );
+	}
+} );
+
+
+jQuery.extend( {
+	queue: function( elem, type, data ) {
+		var queue;
+
+		if ( elem ) {
+			type = ( type || "fx" ) + "queue";
+			queue = dataPriv.get( elem, type );
+
+			// Speed up dequeue by getting out quickly if this is just a lookup
+			if ( data ) {
+				if ( !queue || jQuery.isArray( data ) ) {
+					queue = dataPriv.access( elem, type, jQuery.makeArray( data ) );
+				} else {
+					queue.push( data );
+				}
+			}
+			return queue || [];
+		}
+	},
+
+	dequeue: function( elem, type ) {
+		type = type || "fx";
+
+		var queue = jQuery.queue( elem, type ),
+			startLength = queue.length,
+			fn = queue.shift(),
+			hooks = jQuery._queueHooks( elem, type ),
+			next = function() {
+				jQuery.dequeue( elem, type );
+			};
+
+		// If the fx queue is dequeued, always remove the progress sentinel
+		if ( fn === "inprogress" ) {
+			fn = queue.shift();
+			startLength--;
+		}
+
+		if ( fn ) {
+
+			// Add a progress sentinel to prevent the fx queue from being
+			// automatically dequeued
+			if ( type === "fx" ) {
+				queue.unshift( "inprogress" );
+			}
+
+			// Clear up the last queue stop function
+			delete hooks.stop;
+			fn.call( elem, next, hooks );
+		}
+
+		if ( !startLength && hooks ) {
+			hooks.empty.fire();
+		}
+	},
+
+	// Not public - generate a queueHooks object, or return the current one
+	_queueHooks: function( elem, type ) {
+		var key = type + "queueHooks";
+		return dataPriv.get( elem, key ) || dataPriv.access( elem, key, {
+			empty: jQuery.Callbacks( "once memory" ).add( function() {
+				dataPriv.remove( elem, [ type + "queue", key ] );
+			} )
+		} );
+	}
+} );
+
+jQuery.fn.extend( {
+	queue: function( type, data ) {
+		var setter = 2;
+
+		if ( typeof type !== "string" ) {
+			data = type;
+			type = "fx";
+			setter--;
+		}
+
+		if ( arguments.length < setter ) {
+			return jQuery.queue( this[ 0 ], type );
+		}
+
+		return data === undefined ?
+			this :
+			this.each( function() {
+				var queue = jQuery.queue( this, type, data );
+
+				// Ensure a hooks for this queue
+				jQuery._queueHooks( this, type );
+
+				if ( type === "fx" && queue[ 0 ] !== "inprogress" ) {
+					jQuery.dequeue( this, type );
+				}
+			} );
+	},
+	dequeue: function( type ) {
+		return this.each( function() {
+			jQuery.dequeue( this, type );
+		} );
+	},
+	clearQueue: function( type ) {
+		return this.queue( type || "fx", [] );
+	},
+
+	// Get a promise resolved when queues of a certain type
+	// are emptied (fx is the type by default)
+	promise: function( type, obj ) {
+		var tmp,
+			count = 1,
+			defer = jQuery.Deferred(),
+			elements = this,
+			i = this.length,
+			resolve = function() {
+				if ( !( --count ) ) {
+					defer.resolveWith( elements, [ elements ] );
+				}
+			};
+
+		if ( typeof type !== "string" ) {
+			obj = type;
+			type = undefined;
+		}
+		type = type || "fx";
+
+		while ( i-- ) {
+			tmp = dataPriv.get( elements[ i ], type + "queueHooks" );
+			if ( tmp && tmp.empty ) {
+				count++;
+				tmp.empty.add( resolve );
+			}
+		}
+		resolve();
+		return defer.promise( obj );
+	}
+} );
+var pnum = ( /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/ ).source;
+
+var rcssNum = new RegExp( "^(?:([+-])=|)(" + pnum + ")([a-z%]*)$", "i" );
+
+
+var cssExpand = [ "Top", "Right", "Bottom", "Left" ];
+
+var isHiddenWithinTree = function( elem, el ) {
+
+		// isHiddenWithinTree might be called from jQuery#filter function;
+		// in that case, element will be second argument
+		elem = el || elem;
+
+		// Inline style trumps all
+		return elem.style.display === "none" ||
+			elem.style.display === "" &&
+
+			// Otherwise, check computed style
+			// Support: Firefox <=43 - 45
+			// Disconnected elements can have computed display: none, so first confirm that elem is
+			// in the document.
+			jQuery.contains( elem.ownerDocument, elem ) &&
+
+			jQuery.css( elem, "display" ) === "none";
+	};
+
+var swap = function( elem, options, callback, args ) {
+	var ret, name,
+		old = {};
+
+	// Remember the old values, and insert the new ones
+	for ( name in options ) {
+		old[ name ] = elem.style[ name ];
+		elem.style[ name ] = options[ name ];
+	}
+
+	ret = callback.apply( elem, args || [] );
+
+	// Revert the old values
+	for ( name in options ) {
+		elem.style[ name ] = old[ name ];
+	}
+
+	return ret;
+};
+
+
+
+
+function adjustCSS( elem, prop, valueParts, tween ) {
+	var adjusted,
+		scale = 1,
+		maxIterations = 20,
+		currentValue = tween ?
+			function() {
+				return tween.cur();
+			} :
+			function() {
+				return jQuery.css( elem, prop, "" );
+			},
+		initial = currentValue(),
+		unit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? "" : "px" ),
+
+		// Starting value computation is required for potential unit mismatches
+		initialInUnit = ( jQuery.cssNumber[ prop ] || unit !== "px" && +initial ) &&
+			rcssNum.exec( jQuery.css( elem, prop ) );
+
+	if ( initialInUnit && initialInUnit[ 3 ] !== unit ) {
+
+		// Trust units reported by jQuery.css
+		unit = unit || initialInUnit[ 3 ];
+
+		// Make sure we update the tween properties later on
+		valueParts = valueParts || [];
+
+		// Iteratively approximate from a nonzero starting point
+		initialInUnit = +initial || 1;
+
+		do {
+
+			// If previous iteration zeroed out, double until we get *something*.
+			// Use string for doubling so we don't accidentally see scale as unchanged below
+			scale = scale || ".5";
+
+			// Adjust and apply
+			initialInUnit = initialInUnit / scale;
+			jQuery.style( elem, prop, initialInUnit + unit );
+
+		// Update scale, tolerating zero or NaN from tween.cur()
+		// Break the loop if scale is unchanged or perfect, or if we've just had enough.
+		} while (
+			scale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations
+		);
+	}
+
+	if ( valueParts ) {
+		initialInUnit = +initialInUnit || +initial || 0;
+
+		// Apply relative offset (+=/-=) if specified
+		adjusted = valueParts[ 1 ] ?
+			initialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :
+			+valueParts[ 2 ];
+		if ( tween ) {
+			tween.unit = unit;
+			tween.start = initialInUnit;
+			tween.end = adjusted;
+		}
+	}
+	return adjusted;
+}
+
+
+var defaultDisplayMap = {};
+
+function getDefaultDisplay( elem ) {
+	var temp,
+		doc = elem.ownerDocument,
+		nodeName = elem.nodeName,
+		display = defaultDisplayMap[ nodeName ];
+
+	if ( display ) {
+		return display;
+	}
+
+	temp = doc.body.appendChild( doc.createElement( nodeName ) ),
+	display = jQuery.css( temp, "display" );
+
+	temp.parentNode.removeChild( temp );
+
+	if ( display === "none" ) {
+		display = "block";
+	}
+	defaultDisplayMap[ nodeName ] = display;
+
+	return display;
+}
+
+function showHide( elements, show ) {
+	var display, elem,
+		values = [],
+		index = 0,
+		length = elements.length;
+
+	// Determine new display value for elements that need to change
+	for ( ; index < length; index++ ) {
+		elem = elements[ index ];
+		if ( !elem.style ) {
+			continue;
+		}
+
+		display = elem.style.display;
+		if ( show ) {
+
+			// Since we force visibility upon cascade-hidden elements, an immediate (and slow)
+			// check is required in this first loop unless we have a nonempty display value (either
+			// inline or about-to-be-restored)
+			if ( display === "none" ) {
+				values[ index ] = dataPriv.get( elem, "display" ) || null;
+				if ( !values[ index ] ) {
+					elem.style.display = "";
+				}
+			}
+			if ( elem.style.display === "" && isHiddenWithinTree( elem ) ) {
+				values[ index ] = getDefaultDisplay( elem );
+			}
+		} else {
+			if ( display !== "none" ) {
+				values[ index ] = "none";
+
+				// Remember what we're overwriting
+				dataPriv.set( elem, "display", display );
+			}
+		}
+	}
+
+	// Set the display of the elements in a second loop to avoid constant reflow
+	for ( index = 0; index < length; index++ ) {
+		if ( values[ index ] != null ) {
+			elements[ index ].style.display = values[ index ];
+		}
+	}
+
+	return elements;
+}
+
+jQuery.fn.extend( {
+	show: function() {
+		return showHide( this, true );
+	},
+	hide: function() {
+		return showHide( this );
+	},
+	toggle: function( state ) {
+		if ( typeof state === "boolean" ) {
+			return state ? this.show() : this.hide();
+		}
+
+		return this.each( function() {
+			if ( isHiddenWithinTree( this ) ) {
+				jQuery( this ).show();
+			} else {
+				jQuery( this ).hide();
+			}
+		} );
+	}
+} );
+var rcheckableType = ( /^(?:checkbox|radio)$/i );
+
+var rtagName = ( /<([a-z][^\/\0>\x20\t\r\n\f]+)/i );
+
+var rscriptType = ( /^$|\/(?:java|ecma)script/i );
+
+
+
+// We have to close these tags to support XHTML (#13200)
+var wrapMap = {
+
+	// Support: IE <=9 only
+	option: [ 1, "<select multiple='multiple'>", "</select>" ],
+
+	// XHTML parsers do not magically insert elements in the
+	// same way that tag soup parsers do. So we cannot shorten
+	// this by omitting <tbody> or other required elements.
+	thead: [ 1, "<table>", "</table>" ],
+	col: [ 2, "<table><colgroup>", "</colgroup></table>" ],
+	tr: [ 2, "<table><tbody>", "</tbody></table>" ],
+	td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
+
+	_default: [ 0, "", "" ]
+};
+
+// Support: IE <=9 only
+wrapMap.optgroup = wrapMap.option;
+
+wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
+wrapMap.th = wrapMap.td;
+
+
+function getAll( context, tag ) {
+
+	// Support: IE <=9 - 11 only
+	// Use typeof to avoid zero-argument method invocation on host objects (#15151)
+	var ret = typeof context.getElementsByTagName !== "undefined" ?
+			context.getElementsByTagName( tag || "*" ) :
+			typeof context.querySelectorAll !== "undefined" ?
+				context.querySelectorAll( tag || "*" ) :
+			[];
+
+	return tag === undefined || tag && jQuery.nodeName( context, tag ) ?
+		jQuery.merge( [ context ], ret ) :
+		ret;
+}
+
+
+// Mark scripts as having already been evaluated
+function setGlobalEval( elems, refElements ) {
+	var i = 0,
+		l = elems.length;
+
+	for ( ; i < l; i++ ) {
+		dataPriv.set(
+			elems[ i ],
+			"globalEval",
+			!refElements || dataPriv.get( refElements[ i ], "globalEval" )
+		);
+	}
+}
+
+
+var rhtml = /<|&#?\w+;/;
+
+function buildFragment( elems, context, scripts, selection, ignored ) {
+	var elem, tmp, tag, wrap, contains, j,
+		fragment = context.createDocumentFragment(),
+		nodes = [],
+		i = 0,
+		l = elems.length;
+
+	for ( ; i < l; i++ ) {
+		elem = elems[ i ];
+
+		if ( elem || elem === 0 ) {
+
+			// Add nodes directly
+			if ( jQuery.type( elem ) === "object" ) {
+
+				// Support: Android <=4.0 only, PhantomJS 1 only
+				// push.apply(_, arraylike) throws on ancient WebKit
+				jQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );
+
+			// Convert non-html into a text node
+			} else if ( !rhtml.test( elem ) ) {
+				nodes.push( context.createTextNode( elem ) );
+
+			// Convert html into DOM nodes
+			} else {
+				tmp = tmp || fragment.appendChild( context.createElement( "div" ) );
+
+				// Deserialize a standard representation
+				tag = ( rtagName.exec( elem ) || [ "", "" ] )[ 1 ].toLowerCase();
+				wrap = wrapMap[ tag ] || wrapMap._default;
+				tmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];
+
+				// Descend through wrappers to the right content
+				j = wrap[ 0 ];
+				while ( j-- ) {
+					tmp = tmp.lastChild;
+				}
+
+				// Support: Android <=4.0 only, PhantomJS 1 only
+				// push.apply(_, arraylike) throws on ancient WebKit
+				jQuery.merge( nodes, tmp.childNodes );
+
+				// Remember the top-level container
+				tmp = fragment.firstChild;
+
+				// Ensure the created nodes are orphaned (#12392)
+				tmp.textContent = "";
+			}
+		}
+	}
+
+	// Remove wrapper from fragment
+	fragment.textContent = "";
+
+	i = 0;
+	while ( ( elem = nodes[ i++ ] ) ) {
+
+		// Skip elements already in the context collection (trac-4087)
+		if ( selection && jQuery.inArray( elem, selection ) > -1 ) {
+			if ( ignored ) {
+				ignored.push( elem );
+			}
+			continue;
+		}
+
+		contains = jQuery.contains( elem.ownerDocument, elem );
+
+		// Append to fragment
+		tmp = getAll( fragment.appendChild( elem ), "script" );
+
+		// Preserve script evaluation history
+		if ( contains ) {
+			setGlobalEval( tmp );
+		}
+
+		// Capture executables
+		if ( scripts ) {
+			j = 0;
+			while ( ( elem = tmp[ j++ ] ) ) {
+				if ( rscriptType.test( elem.type || "" ) ) {
+					scripts.push( elem );
+				}
+			}
+		}
+	}
+
+	return fragment;
+}
+
+
+( function() {
+	var fragment = document.createDocumentFragment(),
+		div = fragment.appendChild( document.createElement( "div" ) ),
+		input = document.createElement( "input" );
+
+	// Support: Android 4.0 - 4.3 only
+	// Check state lost if the name is set (#11217)
+	// Support: Windows Web Apps (WWA)
+	// `name` and `type` must use .setAttribute for WWA (#14901)
+	input.setAttribute( "type", "radio" );
+	input.setAttribute( "checked", "checked" );
+	input.setAttribute( "name", "t" );
+
+	div.appendChild( input );
+
+	// Support: Android <=4.1 only
+	// Older WebKit doesn't clone checked state correctly in fragments
+	support.checkClone = div.cloneNode( true ).cloneNode( true ).lastChild.checked;
+
+	// Support: IE <=11 only
+	// Make sure textarea (and checkbox) defaultValue is properly cloned
+	div.innerHTML = "<textarea>x</textarea>";
+	support.noCloneChecked = !!div.cloneNode( true ).lastChild.defaultValue;
+} )();
+var documentElement = document.documentElement;
+
+
+
+var
+	rkeyEvent = /^key/,
+	rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,
+	rtypenamespace = /^([^.]*)(?:\.(.+)|)/;
+
+function returnTrue() {
+	return true;
+}
+
+function returnFalse() {
+	return false;
+}
+
+// Support: IE <=9 only
+// See #13393 for more info
+function safeActiveElement() {
+	try {
+		return document.activeElement;
+	} catch ( err ) { }
+}
+
+function on( elem, types, selector, data, fn, one ) {
+	var origFn, type;
+
+	// Types can be a map of types/handlers
+	if ( typeof types === "object" ) {
+
+		// ( types-Object, selector, data )
+		if ( typeof selector !== "string" ) {
+
+			// ( types-Object, data )
+			data = data || selector;
+			selector = undefined;
+		}
+		for ( type in types ) {
+			on( elem, type, selector, data, types[ type ], one );
+		}
+		return elem;
+	}
+
+	if ( data == null && fn == null ) {
+
+		// ( types, fn )
+		fn = selector;
+		data = selector = undefined;
+	} else if ( fn == null ) {
+		if ( typeof selector === "string" ) {
+
+			// ( types, selector, fn )
+			fn = data;
+			data = undefined;
+		} else {
+
+			// ( types, data, fn )
+			fn = data;
+			data = selector;
+			selector = undefined;
+		}
+	}
+	if ( fn === false ) {
+		fn = returnFalse;
+	} else if ( !fn ) {
+		return elem;
+	}
+
+	if ( one === 1 ) {
+		origFn = fn;
+		fn = function( event ) {
+
+			// Can use an empty set, since event contains the info
+			jQuery().off( event );
+			return origFn.apply( this, arguments );
+		};
+
+		// Use same guid so caller can remove using origFn
+		fn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );
+	}
+	return elem.each( function() {
+		jQuery.event.add( this, types, fn, data, selector );
+	} );
+}
+
+/*
+ * Helper functions for managing events -- not part of the public interface.
+ * Props to Dean Edwards' addEvent library for many of the ideas.
+ */
+jQuery.event = {
+
+	global: {},
+
+	add: function( elem, types, handler, data, selector ) {
+
+		var handleObjIn, eventHandle, tmp,
+			events, t, handleObj,
+			special, handlers, type, namespaces, origType,
+			elemData = dataPriv.get( elem );
+
+		// Don't attach events to noData or text/comment nodes (but allow plain objects)
+		if ( !elemData ) {
+			return;
+		}
+
+		// Caller can pass in an object of custom data in lieu of the handler
+		if ( handler.handler ) {
+			handleObjIn = handler;
+			handler = handleObjIn.handler;
+			selector = handleObjIn.selector;
+		}
+
+		// Ensure that invalid selectors throw exceptions at attach time
+		// Evaluate against documentElement in case elem is a non-element node (e.g., document)
+		if ( selector ) {
+			jQuery.find.matchesSelector( documentElement, selector );
+		}
+
+		// Make sure that the handler has a unique ID, used to find/remove it later
+		if ( !handler.guid ) {
+			handler.guid = jQuery.guid++;
+		}
+
+		// Init the element's event structure and main handler, if this is the first
+		if ( !( events = elemData.events ) ) {
+			events = elemData.events = {};
+		}
+		if ( !( eventHandle = elemData.handle ) ) {
+			eventHandle = elemData.handle = function( e ) {
+
+				// Discard the second event of a jQuery.event.trigger() and
+				// when an event is called after a page has unloaded
+				return typeof jQuery !== "undefined" && jQuery.event.triggered !== e.type ?
+					jQuery.event.dispatch.apply( elem, arguments ) : undefined;
+			};
+		}
+
+		// Handle multiple events separated by a space
+		types = ( types || "" ).match( rnotwhite ) || [ "" ];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[ t ] ) || [];
+			type = origType = tmp[ 1 ];
+			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+			// There *must* be a type, no attaching namespace-only handlers
+			if ( !type ) {
+				continue;
+			}
+
+			// If event changes its type, use the special event handlers for the changed type
+			special = jQuery.event.special[ type ] || {};
+
+			// If selector defined, determine special event api type, otherwise given type
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+
+			// Update special based on newly reset type
+			special = jQuery.event.special[ type ] || {};
+
+			// handleObj is passed to all event handlers
+			handleObj = jQuery.extend( {
+				type: type,
+				origType: origType,
+				data: data,
+				handler: handler,
+				guid: handler.guid,
+				selector: selector,
+				needsContext: selector && jQuery.expr.match.needsContext.test( selector ),
+				namespace: namespaces.join( "." )
+			}, handleObjIn );
+
+			// Init the event handler queue if we're the first
+			if ( !( handlers = events[ type ] ) ) {
+				handlers = events[ type ] = [];
+				handlers.delegateCount = 0;
+
+				// Only use addEventListener if the special events handler returns false
+				if ( !special.setup ||
+					special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
+
+					if ( elem.addEventListener ) {
+						elem.addEventListener( type, eventHandle );
+					}
+				}
+			}
+
+			if ( special.add ) {
+				special.add.call( elem, handleObj );
+
+				if ( !handleObj.handler.guid ) {
+					handleObj.handler.guid = handler.guid;
+				}
+			}
+
+			// Add to the element's handler list, delegates in front
+			if ( selector ) {
+				handlers.splice( handlers.delegateCount++, 0, handleObj );
+			} else {
+				handlers.push( handleObj );
+			}
+
+			// Keep track of which events have ever been used, for event optimization
+			jQuery.event.global[ type ] = true;
+		}
+
+	},
+
+	// Detach an event or set of events from an element
+	remove: function( elem, types, handler, selector, mappedTypes ) {
+
+		var j, origCount, tmp,
+			events, t, handleObj,
+			special, handlers, type, namespaces, origType,
+			elemData = dataPriv.hasData( elem ) && dataPriv.get( elem );
+
+		if ( !elemData || !( events = elemData.events ) ) {
+			return;
+		}
+
+		// Once for each type.namespace in types; type may be omitted
+		types = ( types || "" ).match( rnotwhite ) || [ "" ];
+		t = types.length;
+		while ( t-- ) {
+			tmp = rtypenamespace.exec( types[ t ] ) || [];
+			type = origType = tmp[ 1 ];
+			namespaces = ( tmp[ 2 ] || "" ).split( "." ).sort();
+
+			// Unbind all events (on this namespace, if provided) for the element
+			if ( !type ) {
+				for ( type in events ) {
+					jQuery.event.remove( elem, type + types[ t ], handler, selector, true );
+				}
+				continue;
+			}
+
+			special = jQuery.event.special[ type ] || {};
+			type = ( selector ? special.delegateType : special.bindType ) || type;
+			handlers = events[ type ] || [];
+			tmp = tmp[ 2 ] &&
+				new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" );
+
+			// Remove matching events
+			origCount = j = handlers.length;
+			while ( j-- ) {
+				handleObj = handlers[ j ];
+
+				if ( ( mappedTypes || origType === handleObj.origType ) &&
+					( !handler || handler.guid === handleObj.guid ) &&
+					( !tmp || tmp.test( handleObj.namespace ) ) &&
+					( !selector || selector === handleObj.selector ||
+						selector === "**" && handleObj.selector ) ) {
+					handlers.splice( j, 1 );
+
+					if ( handleObj.selector ) {
+						handlers.delegateCount--;
+					}
+					if ( special.remove ) {
+						special.remove.call( elem, handleObj );
+					}
+				}
+			}
+
+			// Remove generic event handler if we removed something and no more handlers exist
+			// (avoids potential for endless recursion during removal of special event handlers)
+			if ( origCount && !handlers.length ) {
+				if ( !special.teardown ||
+					special.teardown.call( elem, namespaces, elemData.handle ) === false ) {
+
+					jQuery.removeEvent( elem, type, elemData.handle );
+				}
+
+				delete events[ type ];
+			}
+		}
+
+		// Remove data and the expando if it's no longer used
+		if ( jQuery.isEmptyObject( events ) ) {
+			dataPriv.remove( elem, "handle events" );
+		}
+	},
+
+	dispatch: function( nativeEvent ) {
+
+		// Make a writable jQuery.Event from the native event object
+		var event = jQuery.event.fix( nativeEvent );
+
+		var i, j, ret, matched, handleObj, handlerQueue,
+			args = new Array( arguments.length ),
+			handlers = ( dataPriv.get( this, "events" ) || {} )[ event.type ] || [],
+			special = jQuery.event.special[ event.type ] || {};
+
+		// Use the fix-ed jQuery.Event rather than the (read-only) native event
+		args[ 0 ] = event;
+
+		for ( i = 1; i < arguments.length; i++ ) {
+			args[ i ] = arguments[ i ];
+		}
+
+		event.delegateTarget = this;
+
+		// Call the preDispatch hook for the mapped type, and let it bail if desired
+		if ( special.preDispatch && special.preDispatch.call( this, event ) === false ) {
+			return;
+		}
+
+		// Determine handlers
+		handlerQueue = jQuery.event.handlers.call( this, event, handlers );
+
+		// Run delegates first; they may want to stop propagation beneath us
+		i = 0;
+		while ( ( matched = handlerQueue[ i++ ] ) && !event.isPropagationStopped() ) {
+			event.currentTarget = matched.elem;
+
+			j = 0;
+			while ( ( handleObj = matched.handlers[ j++ ] ) &&
+				!event.isImmediatePropagationStopped() ) {
+
+				// Triggered event must either 1) have no namespace, or 2) have namespace(s)
+				// a subset or equal to those in the bound event (both can have no namespace).
+				if ( !event.rnamespace || event.rnamespace.test( handleObj.namespace ) ) {
+
+					event.handleObj = handleObj;
+					event.data = handleObj.data;
+
+					ret = ( ( jQuery.event.special[ handleObj.origType ] || {} ).handle ||
+						handleObj.handler ).apply( matched.elem, args );
+
+					if ( ret !== undefined ) {
+						if ( ( event.result = ret ) === false ) {
+							event.preventDefault();
+							event.stopPropagation();
+						}
+					}
+				}
+			}
+		}
+
+		// Call the postDispatch hook for the mapped type
+		if ( special.postDispatch ) {
+			special.postDispatch.call( this, event );
+		}
+
+		return event.result;
+	},
+
+	handlers: function( event, handlers ) {
+		var i, matches, sel, handleObj,
+			handlerQueue = [],
+			delegateCount = handlers.delegateCount,
+			cur = event.target;
+
+		// Support: IE <=9
+		// Find delegate handlers
+		// Black-hole SVG <use> instance trees (#13180)
+		//
+		// Support: Firefox <=42
+		// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)
+		if ( delegateCount && cur.nodeType &&
+			( event.type !== "click" || isNaN( event.button ) || event.button < 1 ) ) {
+
+			for ( ; cur !== this; cur = cur.parentNode || this ) {
+
+				// Don't check non-elements (#13208)
+				// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)
+				if ( cur.nodeType === 1 && ( cur.disabled !== true || event.type !== "click" ) ) {
+					matches = [];
+					for ( i = 0; i < delegateCount; i++ ) {
+						handleObj = handlers[ i ];
+
+						// Don't conflict with Object.prototype properties (#13203)
+						sel = handleObj.selector + " ";
+
+						if ( matches[ sel ] === undefined ) {
+							matches[ sel ] = handleObj.needsContext ?
+								jQuery( sel, this ).index( cur ) > -1 :
+								jQuery.find( sel, this, null, [ cur ] ).length;
+						}
+						if ( matches[ sel ] ) {
+							matches.push( handleObj );
+						}
+					}
+					if ( matches.length ) {
+						handlerQueue.push( { elem: cur, handlers: matches } );
+					}
+				}
+			}
+		}
+
+		// Add the remaining (directly-bound) handlers
+		if ( delegateCount < handlers.length ) {
+			handlerQueue.push( { elem: this, handlers: handlers.slice( delegateCount ) } );
+		}
+
+		return handlerQueue;
+	},
+
+	addProp: function( name, hook ) {
+		Object.defineProperty( jQuery.Event.prototype, name, {
+			enumerable: true,
+			configurable: true,
+
+			get: jQuery.isFunction( hook ) ?
+				function() {
+					if ( this.originalEvent ) {
+							return hook( this.originalEvent );
+					}
+				} :
+				function() {
+					if ( this.originalEvent ) {
+							return this.originalEvent[ name ];
+					}
+				},
+
+			set: function( value ) {
+				Object.defineProperty( this, name, {
+					enumerable: true,
+					configurable: true,
+					writable: true,
+					value: value
+				} );
+			}
+		} );
+	},
+
+	fix: function( originalEvent ) {
+		return originalEvent[ jQuery.expando ] ?
+			originalEvent :
+			new jQuery.Event( originalEvent );
+	},
+
+	special: {
+		load: {
+
+			// Prevent triggered image.load events from bubbling to window.load
+			noBubble: true
+		},
+		focus: {
+
+			// Fire native event if possible so blur/focus sequence is correct
+			trigger: function() {
+				if ( this !== safeActiveElement() && this.focus ) {
+					this.focus();
+					return false;
+				}
+			},
+			delegateType: "focusin"
+		},
+		blur: {
+			trigger: function() {
+				if ( this === safeActiveElement() && this.blur ) {
+					this.blur();
+					return false;
+				}
+			},
+			delegateType: "focusout"
+		},
+		click: {
+
+			// For checkbox, fire native event so checked state will be right
+			trigger: function() {
+				if ( this.type === "checkbox" && this.click && jQuery.nodeName( this, "input" ) ) {
+					this.click();
+					return false;
+				}
+			},
+
+			// For cross-browser consistency, don't fire native .click() on links
+			_default: function( event ) {
+				return jQuery.nodeName( event.target, "a" );
+			}
+		},
+
+		beforeunload: {
+			postDispatch: function( event ) {
+
+				// Support: Firefox 20+
+				// Firefox doesn't alert if the returnValue field is not set.
+				if ( event.result !== undefined && event.originalEvent ) {
+					event.originalEvent.returnValue = event.result;
+				}
+			}
+		}
+	}
+};
+
+jQuery.removeEvent = function( elem, type, handle ) {
+
+	// This "if" is needed for plain objects
+	if ( elem.removeEventListener ) {
+		elem.removeEventListener( type, handle );
+	}
+};
+
+jQuery.Event = function( src, props ) {
+
+	// Allow instantiation without the 'new' keyword
+	if ( !( this instanceof jQuery.Event ) ) {
+		return new jQuery.Event( src, props );
+	}
+
+	// Event object
+	if ( src && src.type ) {
+		this.originalEvent = src;
+		this.type = src.type;
+
+		// Events bubbling up the document may have been marked as prevented
+		// by a handler lower down the tree; reflect the correct value.
+		this.isDefaultPrevented = src.defaultPrevented ||
+				src.defaultPrevented === undefined &&
+
+				// Support: Android <=2.3 only
+				src.returnValue === false ?
+			returnTrue :
+			returnFalse;
+
+		// Create target properties
+		// Support: Safari <=6 - 7 only
+		// Target should not be a text node (#504, #13143)
+		this.target = ( src.target && src.target.nodeType === 3 ) ?
+			src.target.parentNode :
+			src.target;
+
+		this.currentTarget = src.currentTarget;
+		this.relatedTarget = src.relatedTarget;
+
+	// Event type
+	} else {
+		this.type = src;
+	}
+
+	// Put explicitly provided properties onto the event object
+	if ( props ) {
+		jQuery.extend( this, props );
+	}
+
+	// Create a timestamp if incoming event doesn't have one
+	this.timeStamp = src && src.timeStamp || jQuery.now();
+
+	// Mark it as fixed
+	this[ jQuery.expando ] = true;
+};
+
+// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
+// https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
+jQuery.Event.prototype = {
+	constructor: jQuery.Event,
+	isDefaultPrevented: returnFalse,
+	isPropagationStopped: returnFalse,
+	isImmediatePropagationStopped: returnFalse,
+	isSimulated: false,
+
+	preventDefault: function() {
+		var e = this.originalEvent;
+
+		this.isDefaultPrevented = returnTrue;
+
+		if ( e && !this.isSimulated ) {
+			e.preventDefault();
+		}
+	},
+	stopPropagation: function() {
+		var e = this.originalEvent;
+
+		this.isPropagationStopped = returnTrue;
+
+		if ( e && !this.isSimulated ) {
+			e.stopPropagation();
+		}
+	},
+	stopImmediatePropagation: function() {
+		var e = this.originalEvent;
+
+		this.isImmediatePropagationStopped = returnTrue;
+
+		if ( e && !this.isSimulated ) {
+			e.stopImmediatePropagation();
+		}
+
+		this.stopPropagation();
+	}
+};
+
+// Includes all common event props including KeyEvent and MouseEvent specific props
+jQuery.each( {
+	altKey: true,
+	bubbles: true,
+	cancelable: true,
+	changedTouches: true,
+	ctrlKey: true,
+	detail: true,
+	eventPhase: true,
+	metaKey: true,
+	pageX: true,
+	pageY: true,
+	shiftKey: true,
+	view: true,
+	"char": true,
+	charCode: true,
+	key: true,
+	keyCode: true,
+	button: true,
+	buttons: true,
+	clientX: true,
+	clientY: true,
+	offsetX: true,
+	offsetY: true,
+	pointerId: true,
+	pointerType: true,
+	screenX: true,
+	screenY: true,
+	targetTouches: true,
+	toElement: true,
+	touches: true,
+
+	which: function( event ) {
+		var button = event.button;
+
+		// Add which for key events
+		if ( event.which == null && rkeyEvent.test( event.type ) ) {
+			return event.charCode != null ? event.charCode : event.keyCode;
+		}
+
+		// Add which for click: 1 === left; 2 === middle; 3 === right
+		if ( !event.which && button !== undefined && rmouseEvent.test( event.type ) ) {
+			return ( button & 1 ? 1 : ( button & 2 ? 3 : ( button & 4 ? 2 : 0 ) ) );
+		}
+
+		return event.which;
+	}
+}, jQuery.event.addProp );
+
+// Create mouseenter/leave events using mouseover/out and event-time checks
+// so that event delegation works in jQuery.
+// Do the same for pointerenter/pointerleave and pointerover/pointerout
+//
+// Support: Safari 7 only
+// Safari sends mouseenter too often; see:
+// https://bugs.chromium.org/p/chromium/issues/detail?id=470258
+// for the description of the bug (it existed in older Chrome versions as well).
+jQuery.each( {
+	mouseenter: "mouseover",
+	mouseleave: "mouseout",
+	pointerenter: "pointerover",
+	pointerleave: "pointerout"
+}, function( orig, fix ) {
+	jQuery.event.special[ orig ] = {
+		delegateType: fix,
+		bindType: fix,
+
+		handle: function( event ) {
+			var ret,
+				target = this,
+				related = event.relatedTarget,
+				handleObj = event.handleObj;
+
+			// For mouseenter/leave call the handler if related is outside the target.
+			// NB: No relatedTarget if the mouse left/entered the browser window
+			if ( !related || ( related !== target && !jQuery.contains( target, related ) ) ) {
+				event.type = handleObj.origType;
+				ret = handleObj.handler.apply( this, arguments );
+				event.type = fix;
+			}
+			return ret;
+		}
+	};
+} );
+
+jQuery.fn.extend( {
+
+	on: function( types, selector, data, fn ) {
+		return on( this, types, selector, data, fn );
+	},
+	one: function( types, selector, data, fn ) {
+		return on( this, types, selector, data, fn, 1 );
+	},
+	off: function( types, selector, fn ) {
+		var handleObj, type;
+		if ( types && types.preventDefault && types.handleObj ) {
+
+			// ( event )  dispatched jQuery.Event
+			handleObj = types.handleObj;
+			jQuery( types.delegateTarget ).off(
+				handleObj.namespace ?
+					handleObj.origType + "." + handleObj.namespace :
+					handleObj.origType,
+				handleObj.selector,
+				handleObj.handler
+			);
+			return this;
+		}
+		if ( typeof types === "object" ) {
+
+			// ( types-object [, selector] )
+			for ( type in types ) {
+				this.off( type, selector, types[ type ] );
+			}
+			return this;
+		}
+		if ( selector === false || typeof selector === "function" ) {
+
+			// ( types [, fn] )
+			fn = selector;
+			selector = undefined;
+		}
+		if ( fn === false ) {
+			fn = returnFalse;
+		}
+		return this.each( function() {
+			jQuery.event.remove( this, types, fn, selector );
+		} );
+	}
+} );
+
+
+var
+
+	/* eslint-disable max-len */
+
+	// See https://github.com/eslint/eslint/issues/3229
+	rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,
+
+	/* eslint-enable */
+
+	// Support: IE <=10 - 11, Edge 12 - 13
+	// In IE/Edge using regex groups here causes severe slowdowns.
+	// See https://connect.microsoft.com/IE/feedback/details/1736512/
+	rnoInnerhtml = /<script|<style|<link/i,
+
+	// checked="checked" or checked
+	rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
+	rscriptTypeMasked = /^true\/(.*)/,
+	rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
+
+function manipulationTarget( elem, content ) {
+	if ( jQuery.nodeName( elem, "table" ) &&
+		jQuery.nodeName( content.nodeType !== 11 ? content : content.firstChild, "tr" ) ) {
+
+		return elem.getElementsByTagName( "tbody" )[ 0 ] || elem;
+	}
+
+	return elem;
+}
+
+// Replace/restore the type attribute of script elements for safe DOM manipulation
+function disableScript( elem ) {
+	elem.type = ( elem.getAttribute( "type" ) !== null ) + "/" + elem.type;
+	return elem;
+}
+function restoreScript( elem ) {
+	var match = rscriptTypeMasked.exec( elem.type );
+
+	if ( match ) {
+		elem.type = match[ 1 ];
+	} else {
+		elem.removeAttribute( "type" );
+	}
+
+	return elem;
+}
+
+function cloneCopyEvent( src, dest ) {
+	var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;
+
+	if ( dest.nodeType !== 1 ) {
+		return;
+	}
+
+	// 1. Copy private data: events, handlers, etc.
+	if ( dataPriv.hasData( src ) ) {
+		pdataOld = dataPriv.access( src );
+		pdataCur = dataPriv.set( dest, pdataOld );
+		events = pdataOld.events;
+
+		if ( events ) {
+			delete pdataCur.handle;
+			pdataCur.events = {};
+
+			for ( type in events ) {
+				for ( i = 0, l = events[ type ].length; i < l; i++ ) {
+					jQuery.event.add( dest, type, events[ type ][ i ] );
+				}
+			}
+		}
+	}
+
+	// 2. Copy user data
+	if ( dataUser.hasData( src ) ) {
+		udataOld = dataUser.access( src );
+		udataCur = jQuery.extend( {}, udataOld );
+
+		dataUser.set( dest, udataCur );
+	}
+}
+
+// Fix IE bugs, see support tests
+function fixInput( src, dest ) {
+	var nodeName = dest.nodeName.toLowerCase();
+
+	// Fails to persist the checked state of a cloned checkbox or radio button.
+	if ( nodeName === "input" && rcheckableType.test( src.type ) ) {
+		dest.checked = src.checked;
+
+	// Fails to return the selected option to the default selected state when cloning options
+	} else if ( nodeName === "input" || nodeName === "textarea" ) {
+		dest.defaultValue = src.defaultValue;
+	}
+}
+
+function domManip( collection, args, callback, ignored ) {
+
+	// Flatten any nested arrays
+	args = concat.apply( [], args );
+
+	var fragment, first, scripts, hasScripts, node, doc,
+		i = 0,
+		l = collection.length,
+		iNoClone = l - 1,
+		value = args[ 0 ],
+		isFunction = jQuery.isFunction( value );
+
+	// We can't cloneNode fragments that contain checked, in WebKit
+	if ( isFunction ||
+			( l > 1 && typeof value === "string" &&
+				!support.checkClone && rchecked.test( value ) ) ) {
+		return collection.each( function( index ) {
+			var self = collection.eq( index );
+			if ( isFunction ) {
+				args[ 0 ] = value.call( this, index, self.html() );
+			}
+			domManip( self, args, callback, ignored );
+		} );
+	}
+
+	if ( l ) {
+		fragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );
+		first = fragment.firstChild;
+
+		if ( fragment.childNodes.length === 1 ) {
+			fragment = first;
+		}
+
+		// Require either new content or an interest in ignored elements to invoke the callback
+		if ( first || ignored ) {
+			scripts = jQuery.map( getAll( fragment, "script" ), disableScript );
+			hasScripts = scripts.length;
+
+			// Use the original fragment for the last item
+			// instead of the first because it can end up
+			// being emptied incorrectly in certain situations (#8070).
+			for ( ; i < l; i++ ) {
+				node = fragment;
+
+				if ( i !== iNoClone ) {
+					node = jQuery.clone( node, true, true );
+
+					// Keep references to cloned scripts for later restoration
+					if ( hasScripts ) {
+
+						// Support: Android <=4.0 only, PhantomJS 1 only
+						// push.apply(_, arraylike) throws on ancient WebKit
+						jQuery.merge( scripts, getAll( node, "script" ) );
+					}
+				}
+
+				callback.call( collection[ i ], node, i );
+			}
+
+			if ( hasScripts ) {
+				doc = scripts[ scripts.length - 1 ].ownerDocument;
+
+				// Reenable scripts
+				jQuery.map( scripts, restoreScript );
+
+				// Evaluate executable scripts on first document insertion
+				for ( i = 0; i < hasScripts; i++ ) {
+					node = scripts[ i ];
+					if ( rscriptType.test( node.type || "" ) &&
+						!dataPriv.access( node, "globalEval" ) &&
+						jQuery.contains( doc, node ) ) {
+
+						if ( node.src ) {
+
+							// Optional AJAX dependency, but won't run scripts if not present
+							if ( jQuery._evalUrl ) {
+								jQuery._evalUrl( node.src );
+							}
+						} else {
+							DOMEval( node.textContent.replace( rcleanScript, "" ), doc );
+						}
+					}
+				}
+			}
+		}
+	}
+
+	return collection;
+}
+
+function remove( elem, selector, keepData ) {
+	var node,
+		nodes = selector ? jQuery.filter( selector, elem ) : elem,
+		i = 0;
+
+	for ( ; ( node = nodes[ i ] ) != null; i++ ) {
+		if ( !keepData && node.nodeType === 1 ) {
+			jQuery.cleanData( getAll( node ) );
+		}
+
+		if ( node.parentNode ) {
+			if ( keepData && jQuery.contains( node.ownerDocument, node ) ) {
+				setGlobalEval( getAll( node, "script" ) );
+			}
+			node.parentNode.removeChild( node );
+		}
+	}
+
+	return elem;
+}
+
+jQuery.extend( {
+	htmlPrefilter: function( html ) {
+		return html.replace( rxhtmlTag, "<$1></$2>" );
+	},
+
+	clone: function( elem, dataAndEvents, deepDataAndEvents ) {
+		var i, l, srcElements, destElements,
+			clone = elem.cloneNode( true ),
+			inPage = jQuery.contains( elem.ownerDocument, elem );
+
+		// Fix IE cloning issues
+		if ( !support.noCloneChecked && ( elem.nodeType === 1 || elem.nodeType === 11 ) &&
+				!jQuery.isXMLDoc( elem ) ) {
+
+			// We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2
+			destElements = getAll( clone );
+			srcElements = getAll( elem );
+
+			for ( i = 0, l = srcElements.length; i < l; i++ ) {
+				fixInput( srcElements[ i ], destElements[ i ] );
+			}
+		}
+
+		// Copy the events from the original to the clone
+		if ( dataAndEvents ) {
+			if ( deepDataAndEvents ) {
+				srcElements = srcElements || getAll( elem );
+				destElements = destElements || getAll( clone );
+
+				for ( i = 0, l = srcElements.length; i < l; i++ ) {
+					cloneCopyEvent( srcElements[ i ], destElements[ i ] );
+				}
+			} else {
+				cloneCopyEvent( elem, clone );
+			}
+		}
+
+		// Preserve script evaluation history
+		destElements = getAll( clone, "script" );
+		if ( destElements.length > 0 ) {
+			setGlobalEval( destElements, !inPage && getAll( elem, "script" ) );
+		}
+
+		// Return the cloned set
+		return clone;
+	},
+
+	cleanData: function( elems ) {
+		var data, elem, type,
+			special = jQuery.event.special,
+			i = 0;
+
+		for ( ; ( elem = elems[ i ] ) !== undefined; i++ ) {
+			if ( acceptData( elem ) ) {
+				if ( ( data = elem[ dataPriv.expando ] ) ) {
+					if ( data.events ) {
+						for ( type in data.events ) {
+							if ( special[ type ] ) {
+								jQuery.event.remove( elem, type );
+
+							// This is a shortcut to avoid jQuery.event.remove's overhead
+							} else {
+								jQuery.removeEvent( elem, type, data.handle );
+							}
+						}
+					}
+
+					// Support: Chrome <=35 - 45+
+					// Assign undefined instead of using delete, see Data#remove
+					elem[ dataPriv.expando ] = undefined;
+				}
+				if ( elem[ dataUser.expando ] ) {
+
+					// Support: Chrome <=35 - 45+
+					// Assign undefined instead of using delete, see Data#remove
+					elem[ dataUser.expando ] = undefined;
+				}
+			}
+		}
+	}
+} );
+
+jQuery.fn.extend( {
+	detach: function( selector ) {
+		return remove( this, selector, true );
+	},
+
+	remove: function( selector ) {
+		return remove( this, selector );
+	},
+
+	text: function( value ) {
+		return access( this, function( value ) {
+			return value === undefined ?
+				jQuery.text( this ) :
+				this.empty().each( function() {
+					if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+						this.textContent = value;
+					}
+				} );
+		}, null, value, arguments.length );
+	},
+
+	append: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				var target = manipulationTarget( this, elem );
+				target.appendChild( elem );
+			}
+		} );
+	},
+
+	prepend: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {
+				var target = manipulationTarget( this, elem );
+				target.insertBefore( elem, target.firstChild );
+			}
+		} );
+	},
+
+	before: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this );
+			}
+		} );
+	},
+
+	after: function() {
+		return domManip( this, arguments, function( elem ) {
+			if ( this.parentNode ) {
+				this.parentNode.insertBefore( elem, this.nextSibling );
+			}
+		} );
+	},
+
+	empty: function() {
+		var elem,
+			i = 0;
+
+		for ( ; ( elem = this[ i ] ) != null; i++ ) {
+			if ( elem.nodeType === 1 ) {
+
+				// Prevent memory leaks
+				jQuery.cleanData( getAll( elem, false ) );
+
+				// Remove any remaining nodes
+				elem.textContent = "";
+			}
+		}
+
+		return this;
+	},
+
+	clone: function( dataAndEvents, deepDataAndEvents ) {
+		dataAndEvents = dataAndEvents == null ? false : dataAndEvents;
+		deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;
+
+		return this.map( function() {
+			return jQuery.clone( this, dataAndEvents, deepDataAndEvents );
+		} );
+	},
+
+	html: function( value ) {
+		return access( this, function( value ) {
+			var elem = this[ 0 ] || {},
+				i = 0,
+				l = this.length;
+
+			if ( value === undefined && elem.nodeType === 1 ) {
+				return elem.innerHTML;
+			}
+
+			// See if we can take a shortcut and just use innerHTML
+			if ( typeof value === "string" && !rnoInnerhtml.test( value ) &&
+				!wrapMap[ ( rtagName.exec( value ) || [ "", "" ] )[ 1 ].toLowerCase() ] ) {
+
+				value = jQuery.htmlPrefilter( value );
+
+				try {
+					for ( ; i < l; i++ ) {
+						elem = this[ i ] || {};
+
+						// Remove element nodes and prevent memory leaks
+						if ( elem.nodeType === 1 ) {
+							jQuery.cleanData( getAll( elem, false ) );
+							elem.innerHTML = value;
+						}
+					}
+
+					elem = 0;
+
+				// If using innerHTML throws an exception, use the fallback method
+				} catch ( e ) {}
+			}
+
+			if ( elem ) {
+				this.empty().append( value );
+			}
+		}, null, value, arguments.length );
+	},
+
+	replaceWith: function() {
+		var ignored = [];
+
+		// Make the changes, replacing each non-ignored context element with the new content
+		return domManip( this, arguments, function( elem ) {
+			var parent = this.parentNode;
+
+			if ( jQuery.inArray( this, ignored ) < 0 ) {
+				jQuery.cleanData( getAll( this ) );
+				if ( parent ) {
+					parent.replaceChild( elem, this );
+				}
+			}
+
+		// Force callback invocation
+		}, ignored );
+	}
+} );
+
+jQuery.each( {
+	appendTo: "append",
+	prependTo: "prepend",
+	insertBefore: "before",
+	insertAfter: "after",
+	replaceAll: "replaceWith"
+}, function( name, original ) {
+	jQuery.fn[ name ] = function( selector ) {
+		var elems,
+			ret = [],
+			insert = jQuery( selector ),
+			last = insert.length - 1,
+			i = 0;
+
+		for ( ; i <= last; i++ ) {
+			elems = i === last ? this : this.clone( true );
+			jQuery( insert[ i ] )[ original ]( elems );
+
+			// Support: Android <=4.0 only, PhantomJS 1 only
+			// .get() because push.apply(_, arraylike) throws on ancient WebKit
+			push.apply( ret, elems.get() );
+		}
+
+		return this.pushStack( ret );
+	};
+} );
+var rmargin = ( /^margin/ );
+
+var rnumnonpx = new RegExp( "^(" + pnum + ")(?!px)[a-z%]+$", "i" );
+
+var getStyles = function( elem ) {
+
+		// Support: IE <=11 only, Firefox <=30 (#15098, #14150)
+		// IE throws on elements created in popups
+		// FF meanwhile throws on frame elements through "defaultView.getComputedStyle"
+		var view = elem.ownerDocument.defaultView;
+
+		if ( !view || !view.opener ) {
+			view = window;
+		}
+
+		return view.getComputedStyle( elem );
+	};
+
+
+
+( function() {
+
+	// Executing both pixelPosition & boxSizingReliable tests require only one layout
+	// so they're executed at the same time to save the second computation.
+	function computeStyleTests() {
+
+		// This is a singleton, we need to execute it only once
+		if ( !div ) {
+			return;
+		}
+
+		div.style.cssText =
+			"box-sizing:border-box;" +
+			"position:relative;display:block;" +
+			"margin:auto;border:1px;padding:1px;" +
+			"top:1%;width:50%";
+		div.innerHTML = "";
+		documentElement.appendChild( container );
+
+		var divStyle = window.getComputedStyle( div );
+		pixelPositionVal = divStyle.top !== "1%";
+
+		// Support: Android 4.0 - 4.3 only, Firefox <=3 - 44
+		reliableMarginLeftVal = divStyle.marginLeft === "2px";
+		boxSizingReliableVal = divStyle.width === "4px";
+
+		// Support: Android 4.0 - 4.3 only
+		// Some styles come back with percentage values, even though they shouldn't
+		div.style.marginRight = "50%";
+		pixelMarginRightVal = divStyle.marginRight === "4px";
+
+		documentElement.removeChild( container );
+
+		// Nullify the div so it wouldn't be stored in the memory and
+		// it will also be a sign that checks already performed
+		div = null;
+	}
+
+	var pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,
+		container = document.createElement( "div" ),
+		div = document.createElement( "div" );
+
+	// Finish early in limited (non-browser) environments
+	if ( !div.style ) {
+		return;
+	}
+
+	// Support: IE <=9 - 11 only
+	// Style of cloned element affects source element cloned (#8908)
+	div.style.backgroundClip = "content-box";
+	div.cloneNode( true ).style.backgroundClip = "";
+	support.clearCloneStyle = div.style.backgroundClip === "content-box";
+
+	container.style.cssText = "border:0;width:8px;height:0;top:0;left:-9999px;" +
+		"padding:0;margin-top:1px;position:absolute";
+	container.appendChild( div );
+
+	jQuery.extend( support, {
+		pixelPosition: function() {
+			computeStyleTests();
+			return pixelPositionVal;
+		},
+		boxSizingReliable: function() {
+			computeStyleTests();
+			return boxSizingReliableVal;
+		},
+		pixelMarginRight: function() {
+			computeStyleTests();
+			return pixelMarginRightVal;
+		},
+		reliableMarginLeft: function() {
+			computeStyleTests();
+			return reliableMarginLeftVal;
+		}
+	} );
+} )();
+
+
+function curCSS( elem, name, computed ) {
+	var width, minWidth, maxWidth, ret,
+		style = elem.style;
+
+	computed = computed || getStyles( elem );
+
+	// Support: IE <=9 only
+	// getPropertyValue is only needed for .css('filter') (#12537)
+	if ( computed ) {
+		ret = computed.getPropertyValue( name ) || computed[ name ];
+
+		if ( ret === "" && !jQuery.contains( elem.ownerDocument, elem ) ) {
+			ret = jQuery.style( elem, name );
+		}
+
+		// A tribute to the "awesome hack by Dean Edwards"
+		// Android Browser returns percentage for some values,
+		// but width seems to be reliably pixels.
+		// This is against the CSSOM draft spec:
+		// https://drafts.csswg.org/cssom/#resolved-values
+		if ( !support.pixelMarginRight() && rnumnonpx.test( ret ) && rmargin.test( name ) ) {
+
+			// Remember the original values
+			width = style.width;
+			minWidth = style.minWidth;
+			maxWidth = style.maxWidth;
+
+			// Put in the new values to get a computed value out
+			style.minWidth = style.maxWidth = style.width = ret;
+			ret = computed.width;
+
+			// Revert the changed values
+			style.width = width;
+			style.minWidth = minWidth;
+			style.maxWidth = maxWidth;
+		}
+	}
+
+	return ret !== undefined ?
+
+		// Support: IE <=9 - 11 only
+		// IE returns zIndex value as an integer.
+		ret + "" :
+		ret;
+}
+
+
+function addGetHookIf( conditionFn, hookFn ) {
+
+	// Define the hook, we'll check on the first run if it's really needed.
+	return {
+		get: function() {
+			if ( conditionFn() ) {
+
+				// Hook not needed (or it's not possible to use it due
+				// to missing dependency), remove it.
+				delete this.get;
+				return;
+			}
+
+			// Hook needed; redefine it so that the support test is not executed again.
+			return ( this.get = hookFn ).apply( this, arguments );
+		}
+	};
+}
+
+
+var
+
+	// Swappable if display is none or starts with table
+	// except "table", "table-cell", or "table-caption"
+	// See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display
+	rdisplayswap = /^(none|table(?!-c[ea]).+)/,
+	cssShow = { position: "absolute", visibility: "hidden", display: "block" },
+	cssNormalTransform = {
+		letterSpacing: "0",
+		fontWeight: "400"
+	},
+
+	cssPrefixes = [ "Webkit", "Moz", "ms" ],
+	emptyStyle = document.createElement( "div" ).style;
+
+// Return a css property mapped to a potentially vendor prefixed property
+function vendorPropName( name ) {
+
+	// Shortcut for names that are not vendor prefixed
+	if ( name in emptyStyle ) {
+		return name;
+	}
+
+	// Check for vendor prefixed names
+	var capName = name[ 0 ].toUpperCase() + name.slice( 1 ),
+		i = cssPrefixes.length;
+
+	while ( i-- ) {
+		name = cssPrefixes[ i ] + capName;
+		if ( name in emptyStyle ) {
+			return name;
+		}
+	}
+}
+
+function setPositiveNumber( elem, value, subtract ) {
+
+	// Any relative (+/-) values have already been
+	// normalized at this point
+	var matches = rcssNum.exec( value );
+	return matches ?
+
+		// Guard against undefined "subtract", e.g., when used as in cssHooks
+		Math.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || "px" ) :
+		value;
+}
+
+function augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {
+	var i = extra === ( isBorderBox ? "border" : "content" ) ?
+
+		// If we already have the right measurement, avoid augmentation
+		4 :
+
+		// Otherwise initialize for horizontal or vertical properties
+		name === "width" ? 1 : 0,
+
+		val = 0;
+
+	for ( ; i < 4; i += 2 ) {
+
+		// Both box models exclude margin, so add it if we want it
+		if ( extra === "margin" ) {
+			val += jQuery.css( elem, extra + cssExpand[ i ], true, styles );
+		}
+
+		if ( isBorderBox ) {
+
+			// border-box includes padding, so remove it if we want content
+			if ( extra === "content" ) {
+				val -= jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+			}
+
+			// At this point, extra isn't border nor margin, so remove border
+			if ( extra !== "margin" ) {
+				val -= jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		} else {
+
+			// At this point, extra isn't content, so add padding
+			val += jQuery.css( elem, "padding" + cssExpand[ i ], true, styles );
+
+			// At this point, extra isn't content nor padding, so add border
+			if ( extra !== "padding" ) {
+				val += jQuery.css( elem, "border" + cssExpand[ i ] + "Width", true, styles );
+			}
+		}
+	}
+
+	return val;
+}
+
+function getWidthOrHeight( elem, name, extra ) {
+
+	// Start with offset property, which is equivalent to the border-box value
+	var val,
+		valueIsBorderBox = true,
+		styles = getStyles( elem ),
+		isBorderBox = jQuery.css( elem, "boxSizing", false, styles ) === "border-box";
+
+	// Support: IE <=11 only
+	// Running getBoundingClientRect on a disconnected node
+	// in IE throws an error.
+	if ( elem.getClientRects().length ) {
+		val = elem.getBoundingClientRect()[ name ];
+	}
+
+	// Some non-html elements return undefined for offsetWidth, so check for null/undefined
+	// svg - https://bugzilla.mozilla.org/show_bug.cgi?id=649285
+	// MathML - https://bugzilla.mozilla.org/show_bug.cgi?id=491668
+	if ( val <= 0 || val == null ) {
+
+		// Fall back to computed then uncomputed css if necessary
+		val = curCSS( elem, name, styles );
+		if ( val < 0 || val == null ) {
+			val = elem.style[ name ];
+		}
+
+		// Computed unit is not pixels. Stop here and return.
+		if ( rnumnonpx.test( val ) ) {
+			return val;
+		}
+
+		// Check for style in case a browser which returns unreliable values
+		// for getComputedStyle silently falls back to the reliable elem.style
+		valueIsBorderBox = isBorderBox &&
+			( support.boxSizingReliable() || val === elem.style[ name ] );
+
+		// Normalize "", auto, and prepare for extra
+		val = parseFloat( val ) || 0;
+	}
+
+	// Use the active box-sizing model to add/subtract irrelevant styles
+	return ( val +
+		augmentWidthOrHeight(
+			elem,
+			name,
+			extra || ( isBorderBox ? "border" : "content" ),
+			valueIsBorderBox,
+			styles
+		)
+	) + "px";
+}
+
+jQuery.extend( {
+
+	// Add in style property hooks for overriding the default
+	// behavior of getting and setting a style property
+	cssHooks: {
+		opacity: {
+			get: function( elem, computed ) {
+				if ( computed ) {
+
+					// We should always get a number back from opacity
+					var ret = curCSS( elem, "opacity" );
+					return ret === "" ? "1" : ret;
+				}
+			}
+		}
+	},
+
+	// Don't automatically add "px" to these possibly-unitless properties
+	cssNumber: {
+		"animationIterationCount": true,
+		"columnCount": true,
+		"fillOpacity": true,
+		"flexGrow": true,
+		"flexShrink": true,
+		"fontWeight": true,
+		"lineHeight": true,
+		"opacity": true,
+		"order": true,
+		"orphans": true,
+		"widows": true,
+		"zIndex": true,
+		"zoom": true
+	},
+
+	// Add in properties whose names you wish to fix before
+	// setting or getting the value
+	cssProps: {
+		"float": "cssFloat"
+	},
+
+	// Get and set the style property on a DOM Node
+	style: function( elem, name, value, extra ) {
+
+		// Don't set styles on text and comment nodes
+		if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
+			return;
+		}
+
+		// Make sure that we're working with the right name
+		var ret, type, hooks,
+			origName = jQuery.camelCase( name ),
+			style = elem.style;
+
+		name = jQuery.cssProps[ origName ] ||
+			( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );
+
+		// Gets hook for the prefixed version, then unprefixed version
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// Check if we're setting a value
+		if ( value !== undefined ) {
+			type = typeof value;
+
+			// Convert "+=" or "-=" to relative numbers (#7345)
+			if ( type === "string" && ( ret = rcssNum.exec( value ) ) && ret[ 1 ] ) {
+				value = adjustCSS( elem, name, ret );
+
+				// Fixes bug #9237
+				type = "number";
+			}
+
+			// Make sure that null and NaN values aren't set (#7116)
+			if ( value == null || value !== value ) {
+				return;
+			}
+
+			// If a number was passed in, add the unit (except for certain CSS properties)
+			if ( type === "number" ) {
+				value += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? "" : "px" );
+			}
+
+			// background-* props affect original clone's values
+			if ( !support.clearCloneStyle && value === "" && name.indexOf( "background" ) === 0 ) {
+				style[ name ] = "inherit";
+			}
+
+			// If a hook was provided, use that value, otherwise just set the specified value
+			if ( !hooks || !( "set" in hooks ) ||
+				( value = hooks.set( elem, value, extra ) ) !== undefined ) {
+
+				style[ name ] = value;
+			}
+
+		} else {
+
+			// If a hook was provided get the non-computed value from there
+			if ( hooks && "get" in hooks &&
+				( ret = hooks.get( elem, false, extra ) ) !== undefined ) {
+
+				return ret;
+			}
+
+			// Otherwise just get the value from the style object
+			return style[ name ];
+		}
+	},
+
+	css: function( elem, name, extra, styles ) {
+		var val, num, hooks,
+			origName = jQuery.camelCase( name );
+
+		// Make sure that we're working with the right name
+		name = jQuery.cssProps[ origName ] ||
+			( jQuery.cssProps[ origName ] = vendorPropName( origName ) || origName );
+
+		// Try prefixed name followed by the unprefixed name
+		hooks = jQuery.cssHooks[ name ] || jQuery.cssHooks[ origName ];
+
+		// If a hook was provided get the computed value from there
+		if ( hooks && "get" in hooks ) {
+			val = hooks.get( elem, true, extra );
+		}
+
+		// Otherwise, if a way to get the computed value exists, use that
+		if ( val === undefined ) {
+			val = curCSS( elem, name, styles );
+		}
+
+		// Convert "normal" to computed value
+		if ( val === "normal" && name in cssNormalTransform ) {
+			val = cssNormalTransform[ name ];
+		}
+
+		// Make numeric if forced or a qualifier was provided and val looks numeric
+		if ( extra === "" || extra ) {
+			num = parseFloat( val );
+			return extra === true || isFinite( num ) ? num || 0 : val;
+		}
+		return val;
+	}
+} );
+
+jQuery.each( [ "height", "width" ], function( i, name ) {
+	jQuery.cssHooks[ name ] = {
+		get: function( elem, computed, extra ) {
+			if ( computed ) {
+
+				// Certain elements can have dimension info if we invisibly show them
+				// but it must have a current display style that would benefit
+				return rdisplayswap.test( jQuery.css( elem, "display" ) ) &&
+
+					// Support: Safari 8+
+					// Table columns in Safari have non-zero offsetWidth & zero
+					// getBoundingClientRect().width unless display is changed.
+					// Support: IE <=11 only
+					// Running getBoundingClientRect on a disconnected node
+					// in IE throws an error.
+					( !elem.getClientRects().length || !elem.getBoundingClientRect().width ) ?
+						swap( elem, cssShow, function() {
+							return getWidthOrHeight( elem, name, extra );
+						} ) :
+						getWidthOrHeight( elem, name, extra );
+			}
+		},
+
+		set: function( elem, value, extra ) {
+			var matches,
+				styles = extra && getStyles( elem ),
+				subtract = extra && augmentWidthOrHeight(
+					elem,
+					name,
+					extra,
+					jQuery.css( elem, "boxSizing", false, styles ) === "border-box",
+					styles
+				);
+
+			// Convert to pixels if value adjustment is needed
+			if ( subtract && ( matches = rcssNum.exec( value ) ) &&
+				( matches[ 3 ] || "px" ) !== "px" ) {
+
+				elem.style[ name ] = value;
+				value = jQuery.css( elem, name );
+			}
+
+			return setPositiveNumber( elem, value, subtract );
+		}
+	};
+} );
+
+jQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,
+	function( elem, computed ) {
+		if ( computed ) {
+			return ( parseFloat( curCSS( elem, "marginLeft" ) ) ||
+				elem.getBoundingClientRect().left -
+					swap( elem, { marginLeft: 0 }, function() {
+						return elem.getBoundingClientRect().left;
+					} )
+				) + "px";
+		}
+	}
+);
+
+// These hooks are used by animate to expand properties
+jQuery.each( {
+	margin: "",
+	padding: "",
+	border: "Width"
+}, function( prefix, suffix ) {
+	jQuery.cssHooks[ prefix + suffix ] = {
+		expand: function( value ) {
+			var i = 0,
+				expanded = {},
+
+				// Assumes a single number if not a string
+				parts = typeof value === "string" ? value.split( " " ) : [ value ];
+
+			for ( ; i < 4; i++ ) {
+				expanded[ prefix + cssExpand[ i ] + suffix ] =
+					parts[ i ] || parts[ i - 2 ] || parts[ 0 ];
+			}
+
+			return expanded;
+		}
+	};
+
+	if ( !rmargin.test( prefix ) ) {
+		jQuery.cssHooks[ prefix + suffix ].set = setPositiveNumber;
+	}
+} );
+
+jQuery.fn.extend( {
+	css: function( name, value ) {
+		return access( this, function( elem, name, value ) {
+			var styles, len,
+				map = {},
+				i = 0;
+
+			if ( jQuery.isArray( name ) ) {
+				styles = getStyles( elem );
+				len = name.length;
+
+				for ( ; i < len; i++ ) {
+					map[ name[ i ] ] = jQuery.css( elem, name[ i ], false, styles );
+				}
+
+				return map;
+			}
+
+			return value !== undefined ?
+				jQuery.style( elem, name, value ) :
+				jQuery.css( elem, name );
+		}, name, value, arguments.length > 1 );
+	}
+} );
+
+
+function Tween( elem, options, prop, end, easing ) {
+	return new Tween.prototype.init( elem, options, prop, end, easing );
+}
+jQuery.Tween = Tween;
+
+Tween.prototype = {
+	constructor: Tween,
+	init: function( elem, options, prop, end, easing, unit ) {
+		this.elem = elem;
+		this.prop = prop;
+		this.easing = easing || jQuery.easing._default;
+		this.options = options;
+		this.start = this.now = this.cur();
+		this.end = end;
+		this.unit = unit || ( jQuery.cssNumber[ prop ] ? "" : "px" );
+	},
+	cur: function() {
+		var hooks = Tween.propHooks[ this.prop ];
+
+		return hooks && hooks.get ?
+			hooks.get( this ) :
+			Tween.propHooks._default.get( this );
+	},
+	run: function( percent ) {
+		var eased,
+			hooks = Tween.propHooks[ this.prop ];
+
+		if ( this.options.duration ) {
+			this.pos = eased = jQuery.easing[ this.easing ](
+				percent, this.options.duration * percent, 0, 1, this.options.duration
+			);
+		} else {
+			this.pos = eased = percent;
+		}
+		this.now = ( this.end - this.start ) * eased + this.start;
+
+		if ( this.options.step ) {
+			this.options.step.call( this.elem, this.now, this );
+		}
+
+		if ( hooks && hooks.set ) {
+			hooks.set( this );
+		} else {
+			Tween.propHooks._default.set( this );
+		}
+		return this;
+	}
+};
+
+Tween.prototype.init.prototype = Tween.prototype;
+
+Tween.propHooks = {
+	_default: {
+		get: function( tween ) {
+			var result;
+
+			// Use a property on the element directly when it is not a DOM element,
+			// or when there is no matching style property that exists.
+			if ( tween.elem.nodeType !== 1 ||
+				tween.elem[ tween.prop ] != null && tween.elem.style[ tween.prop ] == null ) {
+				return tween.elem[ tween.prop ];
+			}
+
+			// Passing an empty string as a 3rd parameter to .css will automatically
+			// attempt a parseFloat and fallback to a string if the parse fails.
+			// Simple values such as "10px" are parsed to Float;
+			// complex values such as "rotate(1rad)" are returned as-is.
+			result = jQuery.css( tween.elem, tween.prop, "" );
+
+			// Empty strings, null, undefined and "auto" are converted to 0.
+			return !result || result === "auto" ? 0 : result;
+		},
+		set: function( tween ) {
+
+			// Use step hook for back compat.
+			// Use cssHook if its there.
+			// Use .style if available and use plain properties where available.
+			if ( jQuery.fx.step[ tween.prop ] ) {
+				jQuery.fx.step[ tween.prop ]( tween );
+			} else if ( tween.elem.nodeType === 1 &&
+				( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||
+					jQuery.cssHooks[ tween.prop ] ) ) {
+				jQuery.style( tween.elem, tween.prop, tween.now + tween.unit );
+			} else {
+				tween.elem[ tween.prop ] = tween.now;
+			}
+		}
+	}
+};
+
+// Support: IE <=9 only
+// Panic based approach to setting things on disconnected nodes
+Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {
+	set: function( tween ) {
+		if ( tween.elem.nodeType && tween.elem.parentNode ) {
+			tween.elem[ tween.prop ] = tween.now;
+		}
+	}
+};
+
+jQuery.easing = {
+	linear: function( p ) {
+		return p;
+	},
+	swing: function( p ) {
+		return 0.5 - Math.cos( p * Math.PI ) / 2;
+	},
+	_default: "swing"
+};
+
+jQuery.fx = Tween.prototype.init;
+
+// Back compat <1.8 extension point
+jQuery.fx.step = {};
+
+
+
+
+var
+	fxNow, timerId,
+	rfxtypes = /^(?:toggle|show|hide)$/,
+	rrun = /queueHooks$/;
+
+function raf() {
+	if ( timerId ) {
+		window.requestAnimationFrame( raf );
+		jQuery.fx.tick();
+	}
+}
+
+// Animations created synchronously will run synchronously
+function createFxNow() {
+	window.setTimeout( function() {
+		fxNow = undefined;
+	} );
+	return ( fxNow = jQuery.now() );
+}
+
+// Generate parameters to create a standard animation
+function genFx( type, includeWidth ) {
+	var which,
+		i = 0,
+		attrs = { height: type };
+
+	// If we include width, step value is 1 to do all cssExpand values,
+	// otherwise step value is 2 to skip over Left and Right
+	includeWidth = includeWidth ? 1 : 0;
+	for ( ; i < 4; i += 2 - includeWidth ) {
+		which = cssExpand[ i ];
+		attrs[ "margin" + which ] = attrs[ "padding" + which ] = type;
+	}
+
+	if ( includeWidth ) {
+		attrs.opacity = attrs.width = type;
+	}
+
+	return attrs;
+}
+
+function createTween( value, prop, animation ) {
+	var tween,
+		collection = ( Animation.tweeners[ prop ] || [] ).concat( Animation.tweeners[ "*" ] ),
+		index = 0,
+		length = collection.length;
+	for ( ; index < length; index++ ) {
+		if ( ( tween = collection[ index ].call( animation, prop, value ) ) ) {
+
+			// We're done with this property
+			return tween;
+		}
+	}
+}
+
+function defaultPrefilter( elem, props, opts ) {
+	var prop, value, toggle, hooks, oldfire, propTween, restoreDisplay, display,
+		isBox = "width" in props || "height" in props,
+		anim = this,
+		orig = {},
+		style = elem.style,
+		hidden = elem.nodeType && isHiddenWithinTree( elem ),
+		dataShow = dataPriv.get( elem, "fxshow" );
+
+	// Queue-skipping animations hijack the fx hooks
+	if ( !opts.queue ) {
+		hooks = jQuery._queueHooks( elem, "fx" );
+		if ( hooks.unqueued == null ) {
+			hooks.unqueued = 0;
+			oldfire = hooks.empty.fire;
+			hooks.empty.fire = function() {
+				if ( !hooks.unqueued ) {
+					oldfire();
+				}
+			};
+		}
+		hooks.unqueued++;
+
+		anim.always( function() {
+
+			// Ensure the complete handler is called before this completes
+			anim.always( function() {
+				hooks.unqueued--;
+				if ( !jQuery.queue( elem, "fx" ).length ) {
+					hooks.empty.fire();
+				}
+			} );
+		} );
+	}
+
+	// Detect show/hide animations
+	for ( prop in props ) {
+		value = props[ prop ];
+		if ( rfxtypes.test( value ) ) {
+			delete props[ prop ];
+			toggle = toggle || value === "toggle";
+			if ( value === ( hidden ? "hide" : "show" ) ) {
+
+				// Pretend to be hidden if this is a "show" and
+				// there is still data from a stopped show/hide
+				if ( value === "show" && dataShow && dataShow[ prop ] !== undefined ) {
+					hidden = true;
+
+				// Ignore all other no-op show/hide data
+				} else {
+					continue;
+				}
+			}
+			orig[ prop ] = dataShow && dataShow[ prop ] || jQuery.style( elem, prop );
+		}
+	}
+
+	// Bail out if this is a no-op like .hide().hide()
+	propTween = !jQuery.isEmptyObject( props );
+	if ( !propTween && jQuery.isEmptyObject( orig ) ) {
+		return;
+	}
+
+	// Restrict "overflow" and "display" styles during box animations
+	if ( isBox && elem.nodeType === 1 ) {
+
+		// Support: IE <=9 - 11, Edge 12 - 13
+		// Record all 3 overflow attributes because IE does not infer the shorthand
+		// from identically-valued overflowX and overflowY
+		opts.overflow = [ style.overflow, style.overflowX, style.overflowY ];
+
+		// Identify a display type, preferring old show/hide data over the CSS cascade
+		restoreDisplay = dataShow && dataShow.display;
+		if ( restoreDisplay == null ) {
+			restoreDisplay = dataPriv.get( elem, "display" );
+		}
+		display = jQuery.css( elem, "display" );
+		if ( display === "none" ) {
+			if ( restoreDisplay ) {
+				display = restoreDisplay;
+			} else {
+
+				// Get nonempty value(s) by temporarily forcing visibility
+				showHide( [ elem ], true );
+				restoreDisplay = elem.style.display || restoreDisplay;
+				display = jQuery.css( elem, "display" );
+				showHide( [ elem ] );
+			}
+		}
+
+		// Animate inline elements as inline-block
+		if ( display === "inline" || display === "inline-block" && restoreDisplay != null ) {
+			if ( jQuery.css( elem, "float" ) === "none" ) {
+
+				// Restore the original display value at the end of pure show/hide animations
+				if ( !propTween ) {
+					anim.done( function() {
+						style.display = restoreDisplay;
+					} );
+					if ( restoreDisplay == null ) {
+						display = style.display;
+						restoreDisplay = display === "none" ? "" : display;
+					}
+				}
+				style.display = "inline-block";
+			}
+		}
+	}
+
+	if ( opts.overflow ) {
+		style.overflow = "hidden";
+		anim.always( function() {
+			style.overflow = opts.overflow[ 0 ];
+			style.overflowX = opts.overflow[ 1 ];
+			style.overflowY = opts.overflow[ 2 ];
+		} );
+	}
+
+	// Implement show/hide animations
+	propTween = false;
+	for ( prop in orig ) {
+
+		// General show/hide setup for this element animation
+		if ( !propTween ) {
+			if ( dataShow ) {
+				if ( "hidden" in dataShow ) {
+					hidden = dataShow.hidden;
+				}
+			} else {
+				dataShow = dataPriv.access( elem, "fxshow", { display: restoreDisplay } );
+			}
+
+			// Store hidden/visible for toggle so `.stop().toggle()` "reverses"
+			if ( toggle ) {
+				dataShow.hidden = !hidden;
+			}
+
+			// Show elements before animating them
+			if ( hidden ) {
+				showHide( [ elem ], true );
+			}
+
+			/* eslint-disable no-loop-func */
+
+			anim.done( function() {
+
+			/* eslint-enable no-loop-func */
+
+				// The final step of a "hide" animation is actually hiding the element
+				if ( !hidden ) {
+					showHide( [ elem ] );
+				}
+				dataPriv.remove( elem, "fxshow" );
+				for ( prop in orig ) {
+					jQuery.style( elem, prop, orig[ prop ] );
+				}
+			} );
+		}
+
+		// Per-property setup
+		propTween = createTween( hidden ? dataShow[ prop ] : 0, prop, anim );
+		if ( !( prop in dataShow ) ) {
+			dataShow[ prop ] = propTween.start;
+			if ( hidden ) {
+				propTween.end = propTween.start;
+				propTween.start = 0;
+			}
+		}
+	}
+}
+
+function propFilter( props, specialEasing ) {
+	var index, name, easing, value, hooks;
+
+	// camelCase, specialEasing and expand cssHook pass
+	for ( index in props ) {
+		name = jQuery.camelCase( index );
+		easing = specialEasing[ name ];
+		value = props[ index ];
+		if ( jQuery.isArray( value ) ) {
+			easing = value[ 1 ];
+			value = props[ index ] = value[ 0 ];
+		}
+
+		if ( index !== name ) {
+			props[ name ] = value;
+			delete props[ index ];
+		}
+
+		hooks = jQuery.cssHooks[ name ];
+		if ( hooks && "expand" in hooks ) {
+			value = hooks.expand( value );
+			delete props[ name ];
+
+			// Not quite $.extend, this won't overwrite existing keys.
+			// Reusing 'index' because we have the correct "name"
+			for ( index in value ) {
+				if ( !( index in props ) ) {
+					props[ index ] = value[ index ];
+					specialEasing[ index ] = easing;
+				}
+			}
+		} else {
+			specialEasing[ name ] = easing;
+		}
+	}
+}
+
+function Animation( elem, properties, options ) {
+	var result,
+		stopped,
+		index = 0,
+		length = Animation.prefilters.length,
+		deferred = jQuery.Deferred().always( function() {
+
+			// Don't match elem in the :animated selector
+			delete tick.elem;
+		} ),
+		tick = function() {
+			if ( stopped ) {
+				return false;
+			}
+			var currentTime = fxNow || createFxNow(),
+				remaining = Math.max( 0, animation.startTime + animation.duration - currentTime ),
+
+				// Support: Android 2.3 only
+				// Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)
+				temp = remaining / animation.duration || 0,
+				percent = 1 - temp,
+				index = 0,
+				length = animation.tweens.length;
+
+			for ( ; index < length; index++ ) {
+				animation.tweens[ index ].run( percent );
+			}
+
+			deferred.notifyWith( elem, [ animation, percent, remaining ] );
+
+			if ( percent < 1 && length ) {
+				return remaining;
+			} else {
+				deferred.resolveWith( elem, [ animation ] );
+				return false;
+			}
+		},
+		animation = deferred.promise( {
+			elem: elem,
+			props: jQuery.extend( {}, properties ),
+			opts: jQuery.extend( true, {
+				specialEasing: {},
+				easing: jQuery.easing._default
+			}, options ),
+			originalProperties: properties,
+			originalOptions: options,
+			startTime: fxNow || createFxNow(),
+			duration: options.duration,
+			tweens: [],
+			createTween: function( prop, end ) {
+				var tween = jQuery.Tween( elem, animation.opts, prop, end,
+						animation.opts.specialEasing[ prop ] || animation.opts.easing );
+				animation.tweens.push( tween );
+				return tween;
+			},
+			stop: function( gotoEnd ) {
+				var index = 0,
+
+					// If we are going to the end, we want to run all the tweens
+					// otherwise we skip this part
+					length = gotoEnd ? animation.tweens.length : 0;
+				if ( stopped ) {
+					return this;
+				}
+				stopped = true;
+				for ( ; index < length; index++ ) {
+					animation.tweens[ index ].run( 1 );
+				}
+
+				// Resolve when we played the last frame; otherwise, reject
+				if ( gotoEnd ) {
+					deferred.notifyWith( elem, [ animation, 1, 0 ] );
+					deferred.resolveWith( elem, [ animation, gotoEnd ] );
+				} else {
+					deferred.rejectWith( elem, [ animation, gotoEnd ] );
+				}
+				return this;
+			}
+		} ),
+		props = animation.props;
+
+	propFilter( props, animation.opts.specialEasing );
+
+	for ( ; index < length; index++ ) {
+		result = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );
+		if ( result ) {
+			if ( jQuery.isFunction( result.stop ) ) {
+				jQuery._queueHooks( animation.elem, animation.opts.queue ).stop =
+					jQuery.proxy( result.stop, result );
+			}
+			return result;
+		}
+	}
+
+	jQuery.map( props, createTween, animation );
+
+	if ( jQuery.isFunction( animation.opts.start ) ) {
+		animation.opts.start.call( elem, animation );
+	}
+
+	jQuery.fx.timer(
+		jQuery.extend( tick, {
+			elem: elem,
+			anim: animation,
+			queue: animation.opts.queue
+		} )
+	);
+
+	// attach callbacks from options
+	return animation.progress( animation.opts.progress )
+		.done( animation.opts.done, animation.opts.complete )
+		.fail( animation.opts.fail )
+		.always( animation.opts.always );
+}
+
+jQuery.Animation = jQuery.extend( Animation, {
+
+	tweeners: {
+		"*": [ function( prop, value ) {
+			var tween = this.createTween( prop, value );
+			adjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );
+			return tween;
+		} ]
+	},
+
+	tweener: function( props, callback ) {
+		if ( jQuery.isFunction( props ) ) {
+			callback = props;
+			props = [ "*" ];
+		} else {
+			props = props.match( rnotwhite );
+		}
+
+		var prop,
+			index = 0,
+			length = props.length;
+
+		for ( ; index < length; index++ ) {
+			prop = props[ index ];
+			Animation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];
+			Animation.tweeners[ prop ].unshift( callback );
+		}
+	},
+
+	prefilters: [ defaultPrefilter ],
+
+	prefilter: function( callback, prepend ) {
+		if ( prepend ) {
+			Animation.prefilters.unshift( callback );
+		} else {
+			Animation.prefilters.push( callback );
+		}
+	}
+} );
+
+jQuery.speed = function( speed, easing, fn ) {
+	var opt = speed && typeof speed === "object" ? jQuery.extend( {}, speed ) : {
+		complete: fn || !fn && easing ||
+			jQuery.isFunction( speed ) && speed,
+		duration: speed,
+		easing: fn && easing || easing && !jQuery.isFunction( easing ) && easing
+	};
+
+	// Go to the end state if fx are off or if document is hidden
+	if ( jQuery.fx.off || document.hidden ) {
+		opt.duration = 0;
+
+	} else {
+		opt.duration = typeof opt.duration === "number" ?
+			opt.duration : opt.duration in jQuery.fx.speeds ?
+				jQuery.fx.speeds[ opt.duration ] : jQuery.fx.speeds._default;
+	}
+
+	// Normalize opt.queue - true/undefined/null -> "fx"
+	if ( opt.queue == null || opt.queue === true ) {
+		opt.queue = "fx";
+	}
+
+	// Queueing
+	opt.old = opt.complete;
+
+	opt.complete = function() {
+		if ( jQuery.isFunction( opt.old ) ) {
+			opt.old.call( this );
+		}
+
+		if ( opt.queue ) {
+			jQuery.dequeue( this, opt.queue );
+		}
+	};
+
+	return opt;
+};
+
+jQuery.fn.extend( {
+	fadeTo: function( speed, to, easing, callback ) {
+
+		// Show any hidden elements after setting opacity to 0
+		return this.filter( isHiddenWithinTree ).css( "opacity", 0 ).show()
+
+			// Animate to the value specified
+			.end().animate( { opacity: to }, speed, easing, callback );
+	},
+	animate: function( prop, speed, easing, callback ) {
+		var empty = jQuery.isEmptyObject( prop ),
+			optall = jQuery.speed( speed, easing, callback ),
+			doAnimation = function() {
+
+				// Operate on a copy of prop so per-property easing won't be lost
+				var anim = Animation( this, jQuery.extend( {}, prop ), optall );
+
+				// Empty animations, or finishing resolves immediately
+				if ( empty || dataPriv.get( this, "finish" ) ) {
+					anim.stop( true );
+				}
+			};
+			doAnimation.finish = doAnimation;
+
+		return empty || optall.queue === false ?
+			this.each( doAnimation ) :
+			this.queue( optall.queue, doAnimation );
+	},
+	stop: function( type, clearQueue, gotoEnd ) {
+		var stopQueue = function( hooks ) {
+			var stop = hooks.stop;
+			delete hooks.stop;
+			stop( gotoEnd );
+		};
+
+		if ( typeof type !== "string" ) {
+			gotoEnd = clearQueue;
+			clearQueue = type;
+			type = undefined;
+		}
+		if ( clearQueue && type !== false ) {
+			this.queue( type || "fx", [] );
+		}
+
+		return this.each( function() {
+			var dequeue = true,
+				index = type != null && type + "queueHooks",
+				timers = jQuery.timers,
+				data = dataPriv.get( this );
+
+			if ( index ) {
+				if ( data[ index ] && data[ index ].stop ) {
+					stopQueue( data[ index ] );
+				}
+			} else {
+				for ( index in data ) {
+					if ( data[ index ] && data[ index ].stop && rrun.test( index ) ) {
+						stopQueue( data[ index ] );
+					}
+				}
+			}
+
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this &&
+					( type == null || timers[ index ].queue === type ) ) {
+
+					timers[ index ].anim.stop( gotoEnd );
+					dequeue = false;
+					timers.splice( index, 1 );
+				}
+			}
+
+			// Start the next in the queue if the last step wasn't forced.
+			// Timers currently will call their complete callbacks, which
+			// will dequeue but only if they were gotoEnd.
+			if ( dequeue || !gotoEnd ) {
+				jQuery.dequeue( this, type );
+			}
+		} );
+	},
+	finish: function( type ) {
+		if ( type !== false ) {
+			type = type || "fx";
+		}
+		return this.each( function() {
+			var index,
+				data = dataPriv.get( this ),
+				queue = data[ type + "queue" ],
+				hooks = data[ type + "queueHooks" ],
+				timers = jQuery.timers,
+				length = queue ? queue.length : 0;
+
+			// Enable finishing flag on private data
+			data.finish = true;
+
+			// Empty the queue first
+			jQuery.queue( this, type, [] );
+
+			if ( hooks && hooks.stop ) {
+				hooks.stop.call( this, true );
+			}
+
+			// Look for any active animations, and finish them
+			for ( index = timers.length; index--; ) {
+				if ( timers[ index ].elem === this && timers[ index ].queue === type ) {
+					timers[ index ].anim.stop( true );
+					timers.splice( index, 1 );
+				}
+			}
+
+			// Look for any animations in the old queue and finish them
+			for ( index = 0; index < length; index++ ) {
+				if ( queue[ index ] && queue[ index ].finish ) {
+					queue[ index ].finish.call( this );
+				}
+			}
+
+			// Turn off finishing flag
+			delete data.finish;
+		} );
+	}
+} );
+
+jQuery.each( [ "toggle", "show", "hide" ], function( i, name ) {
+	var cssFn = jQuery.fn[ name ];
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return speed == null || typeof speed === "boolean" ?
+			cssFn.apply( this, arguments ) :
+			this.animate( genFx( name, true ), speed, easing, callback );
+	};
+} );
+
+// Generate shortcuts for custom animations
+jQuery.each( {
+	slideDown: genFx( "show" ),
+	slideUp: genFx( "hide" ),
+	slideToggle: genFx( "toggle" ),
+	fadeIn: { opacity: "show" },
+	fadeOut: { opacity: "hide" },
+	fadeToggle: { opacity: "toggle" }
+}, function( name, props ) {
+	jQuery.fn[ name ] = function( speed, easing, callback ) {
+		return this.animate( props, speed, easing, callback );
+	};
+} );
+
+jQuery.timers = [];
+jQuery.fx.tick = function() {
+	var timer,
+		i = 0,
+		timers = jQuery.timers;
+
+	fxNow = jQuery.now();
+
+	for ( ; i < timers.length; i++ ) {
+		timer = timers[ i ];
+
+		// Checks the timer has not already been removed
+		if ( !timer() && timers[ i ] === timer ) {
+			timers.splice( i--, 1 );
+		}
+	}
+
+	if ( !timers.length ) {
+		jQuery.fx.stop();
+	}
+	fxNow = undefined;
+};
+
+jQuery.fx.timer = function( timer ) {
+	jQuery.timers.push( timer );
+	if ( timer() ) {
+		jQuery.fx.start();
+	} else {
+		jQuery.timers.pop();
+	}
+};
+
+jQuery.fx.interval = 13;
+jQuery.fx.start = function() {
+	if ( !timerId ) {
+		timerId = window.requestAnimationFrame ?
+			window.requestAnimationFrame( raf ) :
+			window.setInterval( jQuery.fx.tick, jQuery.fx.interval );
+	}
+};
+
+jQuery.fx.stop = function() {
+	if ( window.cancelAnimationFrame ) {
+		window.cancelAnimationFrame( timerId );
+	} else {
+		window.clearInterval( timerId );
+	}
+
+	timerId = null;
+};
+
+jQuery.fx.speeds = {
+	slow: 600,
+	fast: 200,
+
+	// Default speed
+	_default: 400
+};
+
+
+// Based off of the plugin by Clint Helfers, with permission.
+// https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/
+jQuery.fn.delay = function( time, type ) {
+	time = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;
+	type = type || "fx";
+
+	return this.queue( type, function( next, hooks ) {
+		var timeout = window.setTimeout( next, time );
+		hooks.stop = function() {
+			window.clearTimeout( timeout );
+		};
+	} );
+};
+
+
+( function() {
+	var input = document.createElement( "input" ),
+		select = document.createElement( "select" ),
+		opt = select.appendChild( document.createElement( "option" ) );
+
+	input.type = "checkbox";
+
+	// Support: Android <=4.3 only
+	// Default value for a checkbox should be "on"
+	support.checkOn = input.value !== "";
+
+	// Support: IE <=11 only
+	// Must access selectedIndex to make default options select
+	support.optSelected = opt.selected;
+
+	// Support: IE <=11 only
+	// An input loses its value after becoming a radio
+	input = document.createElement( "input" );
+	input.value = "t";
+	input.type = "radio";
+	support.radioValue = input.value === "t";
+} )();
+
+
+var boolHook,
+	attrHandle = jQuery.expr.attrHandle;
+
+jQuery.fn.extend( {
+	attr: function( name, value ) {
+		return access( this, jQuery.attr, name, value, arguments.length > 1 );
+	},
+
+	removeAttr: function( name ) {
+		return this.each( function() {
+			jQuery.removeAttr( this, name );
+		} );
+	}
+} );
+
+jQuery.extend( {
+	attr: function( elem, name, value ) {
+		var ret, hooks,
+			nType = elem.nodeType;
+
+		// Don't get/set attributes on text, comment and attribute nodes
+		if ( nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		// Fallback to prop when attributes are not supported
+		if ( typeof elem.getAttribute === "undefined" ) {
+			return jQuery.prop( elem, name, value );
+		}
+
+		// Attribute hooks are determined by the lowercase version
+		// Grab necessary hook if one is defined
+		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+			hooks = jQuery.attrHooks[ name.toLowerCase() ] ||
+				( jQuery.expr.match.bool.test( name ) ? boolHook : undefined );
+		}
+
+		if ( value !== undefined ) {
+			if ( value === null ) {
+				jQuery.removeAttr( elem, name );
+				return;
+			}
+
+			if ( hooks && "set" in hooks &&
+				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+				return ret;
+			}
+
+			elem.setAttribute( name, value + "" );
+			return value;
+		}
+
+		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+			return ret;
+		}
+
+		ret = jQuery.find.attr( elem, name );
+
+		// Non-existent attributes return null, we normalize to undefined
+		return ret == null ? undefined : ret;
+	},
+
+	attrHooks: {
+		type: {
+			set: function( elem, value ) {
+				if ( !support.radioValue && value === "radio" &&
+					jQuery.nodeName( elem, "input" ) ) {
+					var val = elem.value;
+					elem.setAttribute( "type", value );
+					if ( val ) {
+						elem.value = val;
+					}
+					return value;
+				}
+			}
+		}
+	},
+
+	removeAttr: function( elem, value ) {
+		var name,
+			i = 0,
+			attrNames = value && value.match( rnotwhite );
+
+		if ( attrNames && elem.nodeType === 1 ) {
+			while ( ( name = attrNames[ i++ ] ) ) {
+				elem.removeAttribute( name );
+			}
+		}
+	}
+} );
+
+// Hooks for boolean attributes
+boolHook = {
+	set: function( elem, value, name ) {
+		if ( value === false ) {
+
+			// Remove boolean attributes when set to false
+			jQuery.removeAttr( elem, name );
+		} else {
+			elem.setAttribute( name, name );
+		}
+		return name;
+	}
+};
+
+jQuery.each( jQuery.expr.match.bool.source.match( /\w+/g ), function( i, name ) {
+	var getter = attrHandle[ name ] || jQuery.find.attr;
+
+	attrHandle[ name ] = function( elem, name, isXML ) {
+		var ret, handle,
+			lowercaseName = name.toLowerCase();
+
+		if ( !isXML ) {
+
+			// Avoid an infinite loop by temporarily removing this function from the getter
+			handle = attrHandle[ lowercaseName ];
+			attrHandle[ lowercaseName ] = ret;
+			ret = getter( elem, name, isXML ) != null ?
+				lowercaseName :
+				null;
+			attrHandle[ lowercaseName ] = handle;
+		}
+		return ret;
+	};
+} );
+
+
+
+
+var rfocusable = /^(?:input|select|textarea|button)$/i,
+	rclickable = /^(?:a|area)$/i;
+
+jQuery.fn.extend( {
+	prop: function( name, value ) {
+		return access( this, jQuery.prop, name, value, arguments.length > 1 );
+	},
+
+	removeProp: function( name ) {
+		return this.each( function() {
+			delete this[ jQuery.propFix[ name ] || name ];
+		} );
+	}
+} );
+
+jQuery.extend( {
+	prop: function( elem, name, value ) {
+		var ret, hooks,
+			nType = elem.nodeType;
+
+		// Don't get/set properties on text, comment and attribute nodes
+		if ( nType === 3 || nType === 8 || nType === 2 ) {
+			return;
+		}
+
+		if ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {
+
+			// Fix name and attach hooks
+			name = jQuery.propFix[ name ] || name;
+			hooks = jQuery.propHooks[ name ];
+		}
+
+		if ( value !== undefined ) {
+			if ( hooks && "set" in hooks &&
+				( ret = hooks.set( elem, value, name ) ) !== undefined ) {
+				return ret;
+			}
+
+			return ( elem[ name ] = value );
+		}
+
+		if ( hooks && "get" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {
+			return ret;
+		}
+
+		return elem[ name ];
+	},
+
+	propHooks: {
+		tabIndex: {
+			get: function( elem ) {
+
+				// Support: IE <=9 - 11 only
+				// elem.tabIndex doesn't always return the
+				// correct value when it hasn't been explicitly set
+				// https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
+				// Use proper attribute retrieval(#12072)
+				var tabindex = jQuery.find.attr( elem, "tabindex" );
+
+				return tabindex ?
+					parseInt( tabindex, 10 ) :
+					rfocusable.test( elem.nodeName ) ||
+						rclickable.test( elem.nodeName ) && elem.href ?
+							0 :
+							-1;
+			}
+		}
+	},
+
+	propFix: {
+		"for": "htmlFor",
+		"class": "className"
+	}
+} );
+
+// Support: IE <=11 only
+// Accessing the selectedIndex property
+// forces the browser to respect setting selected
+// on the option
+// The getter ensures a default option is selected
+// when in an optgroup
+if ( !support.optSelected ) {
+	jQuery.propHooks.selected = {
+		get: function( elem ) {
+			var parent = elem.parentNode;
+			if ( parent && parent.parentNode ) {
+				parent.parentNode.selectedIndex;
+			}
+			return null;
+		},
+		set: function( elem ) {
+			var parent = elem.parentNode;
+			if ( parent ) {
+				parent.selectedIndex;
+
+				if ( parent.parentNode ) {
+					parent.parentNode.selectedIndex;
+				}
+			}
+		}
+	};
+}
+
+jQuery.each( [
+	"tabIndex",
+	"readOnly",
+	"maxLength",
+	"cellSpacing",
+	"cellPadding",
+	"rowSpan",
+	"colSpan",
+	"useMap",
+	"frameBorder",
+	"contentEditable"
+], function() {
+	jQuery.propFix[ this.toLowerCase() ] = this;
+} );
+
+
+
+
+var rclass = /[\t\r\n\f]/g;
+
+function getClass( elem ) {
+	return elem.getAttribute && elem.getAttribute( "class" ) || "";
+}
+
+jQuery.fn.extend( {
+	addClass: function( value ) {
+		var classes, elem, cur, curValue, clazz, j, finalValue,
+			i = 0;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each( function( j ) {
+				jQuery( this ).addClass( value.call( this, j, getClass( this ) ) );
+			} );
+		}
+
+		if ( typeof value === "string" && value ) {
+			classes = value.match( rnotwhite ) || [];
+
+			while ( ( elem = this[ i++ ] ) ) {
+				curValue = getClass( elem );
+				cur = elem.nodeType === 1 &&
+					( " " + curValue + " " ).replace( rclass, " " );
+
+				if ( cur ) {
+					j = 0;
+					while ( ( clazz = classes[ j++ ] ) ) {
+						if ( cur.indexOf( " " + clazz + " " ) < 0 ) {
+							cur += clazz + " ";
+						}
+					}
+
+					// Only assign if different to avoid unneeded rendering.
+					finalValue = jQuery.trim( cur );
+					if ( curValue !== finalValue ) {
+						elem.setAttribute( "class", finalValue );
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	removeClass: function( value ) {
+		var classes, elem, cur, curValue, clazz, j, finalValue,
+			i = 0;
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each( function( j ) {
+				jQuery( this ).removeClass( value.call( this, j, getClass( this ) ) );
+			} );
+		}
+
+		if ( !arguments.length ) {
+			return this.attr( "class", "" );
+		}
+
+		if ( typeof value === "string" && value ) {
+			classes = value.match( rnotwhite ) || [];
+
+			while ( ( elem = this[ i++ ] ) ) {
+				curValue = getClass( elem );
+
+				// This expression is here for better compressibility (see addClass)
+				cur = elem.nodeType === 1 &&
+					( " " + curValue + " " ).replace( rclass, " " );
+
+				if ( cur ) {
+					j = 0;
+					while ( ( clazz = classes[ j++ ] ) ) {
+
+						// Remove *all* instances
+						while ( cur.indexOf( " " + clazz + " " ) > -1 ) {
+							cur = cur.replace( " " + clazz + " ", " " );
+						}
+					}
+
+					// Only assign if different to avoid unneeded rendering.
+					finalValue = jQuery.trim( cur );
+					if ( curValue !== finalValue ) {
+						elem.setAttribute( "class", finalValue );
+					}
+				}
+			}
+		}
+
+		return this;
+	},
+
+	toggleClass: function( value, stateVal ) {
+		var type = typeof value;
+
+		if ( typeof stateVal === "boolean" && type === "string" ) {
+			return stateVal ? this.addClass( value ) : this.removeClass( value );
+		}
+
+		if ( jQuery.isFunction( value ) ) {
+			return this.each( function( i ) {
+				jQuery( this ).toggleClass(
+					value.call( this, i, getClass( this ), stateVal ),
+					stateVal
+				);
+			} );
+		}
+
+		return this.each( function() {
+			var className, i, self, classNames;
+
+			if ( type === "string" ) {
+
+				// Toggle individual class names
+				i = 0;
+				self = jQuery( this );
+				classNames = value.match( rnotwhite ) || [];
+
+				while ( ( className = classNames[ i++ ] ) ) {
+
+					// Check each className given, space separated list
+					if ( self.hasClass( className ) ) {
+						self.removeClass( className );
+					} else {
+						self.addClass( className );
+					}
+				}
+
+			// Toggle whole class name
+			} else if ( value === undefined || type === "boolean" ) {
+				className = getClass( this );
+				if ( className ) {
+
+					// Store className if set
+					dataPriv.set( this, "__className__", className );
+				}
+
+				// If the element has a class name or if we're passed `false`,
+				// then remove the whole classname (if there was one, the above saved it).
+				// Otherwise bring back whatever was previously saved (if anything),
+				// falling back to the empty string if nothing was stored.
+				if ( this.setAttribute ) {
+					this.setAttribute( "class",
+						className || value === false ?
+						"" :
+						dataPriv.get( this, "__className__" ) || ""
+					);
+				}
+			}
+		} );
+	},
+
+	hasClass: function( selector ) {
+		var className, elem,
+			i = 0;
+
+		className = " " + selector + " ";
+		while ( ( elem = this[ i++ ] ) ) {
+			if ( elem.nodeType === 1 &&
+				( " " + getClass( elem ) + " " ).replace( rclass, " " )
+					.indexOf( className ) > -1
+			) {
+				return true;
+			}
+		}
+
+		return false;
+	}
+} );
+
+
+
+
+var rreturn = /\r/g,
+	rspaces = /[\x20\t\r\n\f]+/g;
+
+jQuery.fn.extend( {
+	val: function( value ) {
+		var hooks, ret, isFunction,
+			elem = this[ 0 ];
+
+		if ( !arguments.length ) {
+			if ( elem ) {
+				hooks = jQuery.valHooks[ elem.type ] ||
+					jQuery.valHooks[ elem.nodeName.toLowerCase() ];
+
+				if ( hooks &&
+					"get" in hooks &&
+					( ret = hooks.get( elem, "value" ) ) !== undefined
+				) {
+					return ret;
+				}
+
+				ret = elem.value;
+
+				return typeof ret === "string" ?
+
+					// Handle most common string cases
+					ret.replace( rreturn, "" ) :
+
+					// Handle cases where value is null/undef or number
+					ret == null ? "" : ret;
+			}
+
+			return;
+		}
+
+		isFunction = jQuery.isFunction( value );
+
+		return this.each( function( i ) {
+			var val;
+
+			if ( this.nodeType !== 1 ) {
+				return;
+			}
+
+			if ( isFunction ) {
+				val = value.call( this, i, jQuery( this ).val() );
+			} else {
+				val = value;
+			}
+
+			// Treat null/undefined as ""; convert numbers to string
+			if ( val == null ) {
+				val = "";
+
+			} else if ( typeof val === "number" ) {
+				val += "";
+
+			} else if ( jQuery.isArray( val ) ) {
+				val = jQuery.map( val, function( value ) {
+					return value == null ? "" : value + "";
+				} );
+			}
+
+			hooks = jQuery.valHooks[ this.type ] || jQuery.valHooks[ this.nodeName.toLowerCase() ];
+
+			// If set returns undefined, fall back to normal setting
+			if ( !hooks || !( "set" in hooks ) || hooks.set( this, val, "value" ) === undefined ) {
+				this.value = val;
+			}
+		} );
+	}
+} );
+
+jQuery.extend( {
+	valHooks: {
+		option: {
+			get: function( elem ) {
+
+				var val = jQuery.find.attr( elem, "value" );
+				return val != null ?
+					val :
+
+					// Support: IE <=10 - 11 only
+					// option.text throws exceptions (#14686, #14858)
+					// Strip and collapse whitespace
+					// https://html.spec.whatwg.org/#strip-and-collapse-whitespace
+					jQuery.trim( jQuery.text( elem ) ).replace( rspaces, " " );
+			}
+		},
+		select: {
+			get: function( elem ) {
+				var value, option,
+					options = elem.options,
+					index = elem.selectedIndex,
+					one = elem.type === "select-one",
+					values = one ? null : [],
+					max = one ? index + 1 : options.length,
+					i = index < 0 ?
+						max :
+						one ? index : 0;
+
+				// Loop through all the selected options
+				for ( ; i < max; i++ ) {
+					option = options[ i ];
+
+					// Support: IE <=9 only
+					// IE8-9 doesn't update selected after form reset (#2551)
+					if ( ( option.selected || i === index ) &&
+
+							// Don't return options that are disabled or in a disabled optgroup
+							!option.disabled &&
+							( !option.parentNode.disabled ||
+								!jQuery.nodeName( option.parentNode, "optgroup" ) ) ) {
+
+						// Get the specific value for the option
+						value = jQuery( option ).val();
+
+						// We don't need an array for one selects
+						if ( one ) {
+							return value;
+						}
+
+						// Multi-Selects return an array
+						values.push( value );
+					}
+				}
+
+				return values;
+			},
+
+			set: function( elem, value ) {
+				var optionSet, option,
+					options = elem.options,
+					values = jQuery.makeArray( value ),
+					i = options.length;
+
+				while ( i-- ) {
+					option = options[ i ];
+
+					/* eslint-disable no-cond-assign */
+
+					if ( option.selected =
+						jQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1
+					) {
+						optionSet = true;
+					}
+
+					/* eslint-enable no-cond-assign */
+				}
+
+				// Force browsers to behave consistently when non-matching value is set
+				if ( !optionSet ) {
+					elem.selectedIndex = -1;
+				}
+				return values;
+			}
+		}
+	}
+} );
+
+// Radios and checkboxes getter/setter
+jQuery.each( [ "radio", "checkbox" ], function() {
+	jQuery.valHooks[ this ] = {
+		set: function( elem, value ) {
+			if ( jQuery.isArray( value ) ) {
+				return ( elem.checked = jQuery.inArray( jQuery( elem ).val(), value ) > -1 );
+			}
+		}
+	};
+	if ( !support.checkOn ) {
+		jQuery.valHooks[ this ].get = function( elem ) {
+			return elem.getAttribute( "value" ) === null ? "on" : elem.value;
+		};
+	}
+} );
+
+
+
+
+// Return jQuery for attributes-only inclusion
+
+
+var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;
+
+jQuery.extend( jQuery.event, {
+
+	trigger: function( event, data, elem, onlyHandlers ) {
+
+		var i, cur, tmp, bubbleType, ontype, handle, special,
+			eventPath = [ elem || document ],
+			type = hasOwn.call( event, "type" ) ? event.type : event,
+			namespaces = hasOwn.call( event, "namespace" ) ? event.namespace.split( "." ) : [];
+
+		cur = tmp = elem = elem || document;
+
+		// Don't do events on text and comment nodes
+		if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
+			return;
+		}
+
+		// focus/blur morphs to focusin/out; ensure we're not firing them right now
+		if ( rfocusMorph.test( type + jQuery.event.triggered ) ) {
+			return;
+		}
+
+		if ( type.indexOf( "." ) > -1 ) {
+
+			// Namespaced trigger; create a regexp to match event type in handle()
+			namespaces = type.split( "." );
+			type = namespaces.shift();
+			namespaces.sort();
+		}
+		ontype = type.indexOf( ":" ) < 0 && "on" + type;
+
+		// Caller can pass in a jQuery.Event object, Object, or just an event type string
+		event = event[ jQuery.expando ] ?
+			event :
+			new jQuery.Event( type, typeof event === "object" && event );
+
+		// Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)
+		event.isTrigger = onlyHandlers ? 2 : 3;
+		event.namespace = namespaces.join( "." );
+		event.rnamespace = event.namespace ?
+			new RegExp( "(^|\\.)" + namespaces.join( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) :
+			null;
+
+		// Clean up the event in case it is being reused
+		event.result = undefined;
+		if ( !event.target ) {
+			event.target = elem;
+		}
+
+		// Clone any incoming data and prepend the event, creating the handler arg list
+		data = data == null ?
+			[ event ] :
+			jQuery.makeArray( data, [ event ] );
+
+		// Allow special events to draw outside the lines
+		special = jQuery.event.special[ type ] || {};
+		if ( !onlyHandlers && special.trigger && special.trigger.apply( elem, data ) === false ) {
+			return;
+		}
+
+		// Determine event propagation path in advance, per W3C events spec (#9951)
+		// Bubble up to document, then to window; watch for a global ownerDocument var (#9724)
+		if ( !onlyHandlers && !special.noBubble && !jQuery.isWindow( elem ) ) {
+
+			bubbleType = special.delegateType || type;
+			if ( !rfocusMorph.test( bubbleType + type ) ) {
+				cur = cur.parentNode;
+			}
+			for ( ; cur; cur = cur.parentNode ) {
+				eventPath.push( cur );
+				tmp = cur;
+			}
+
+			// Only add window if we got to document (e.g., not plain obj or detached DOM)
+			if ( tmp === ( elem.ownerDocument || document ) ) {
+				eventPath.push( tmp.defaultView || tmp.parentWindow || window );
+			}
+		}
+
+		// Fire handlers on the event path
+		i = 0;
+		while ( ( cur = eventPath[ i++ ] ) && !event.isPropagationStopped() ) {
+
+			event.type = i > 1 ?
+				bubbleType :
+				special.bindType || type;
+
+			// jQuery handler
+			handle = ( dataPriv.get( cur, "events" ) || {} )[ event.type ] &&
+				dataPriv.get( cur, "handle" );
+			if ( handle ) {
+				handle.apply( cur, data );
+			}
+
+			// Native handler
+			handle = ontype && cur[ ontype ];
+			if ( handle && handle.apply && acceptData( cur ) ) {
+				event.result = handle.apply( cur, data );
+				if ( event.result === false ) {
+					event.preventDefault();
+				}
+			}
+		}
+		event.type = type;
+
+		// If nobody prevented the default action, do it now
+		if ( !onlyHandlers && !event.isDefaultPrevented() ) {
+
+			if ( ( !special._default ||
+				special._default.apply( eventPath.pop(), data ) === false ) &&
+				acceptData( elem ) ) {
+
+				// Call a native DOM method on the target with the same name as the event.
+				// Don't do default actions on window, that's where global variables be (#6170)
+				if ( ontype && jQuery.isFunction( elem[ type ] ) && !jQuery.isWindow( elem ) ) {
+
+					// Don't re-trigger an onFOO event when we call its FOO() method
+					tmp = elem[ ontype ];
+
+					if ( tmp ) {
+						elem[ ontype ] = null;
+					}
+
+					// Prevent re-triggering of the same event, since we already bubbled it above
+					jQuery.event.triggered = type;
+					elem[ type ]();
+					jQuery.event.triggered = undefined;
+
+					if ( tmp ) {
+						elem[ ontype ] = tmp;
+					}
+				}
+			}
+		}
+
+		return event.result;
+	},
+
+	// Piggyback on a donor event to simulate a different one
+	// Used only for `focus(in | out)` events
+	simulate: function( type, elem, event ) {
+		var e = jQuery.extend(
+			new jQuery.Event(),
+			event,
+			{
+				type: type,
+				isSimulated: true
+			}
+		);
+
+		jQuery.event.trigger( e, null, elem );
+	}
+
+} );
+
+jQuery.fn.extend( {
+
+	trigger: function( type, data ) {
+		return this.each( function() {
+			jQuery.event.trigger( type, data, this );
+		} );
+	},
+	triggerHandler: function( type, data ) {
+		var elem = this[ 0 ];
+		if ( elem ) {
+			return jQuery.event.trigger( type, data, elem, true );
+		}
+	}
+} );
+
+
+jQuery.each( ( "blur focus focusin focusout resize scroll click dblclick " +
+	"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
+	"change select submit keydown keypress keyup contextmenu" ).split( " " ),
+	function( i, name ) {
+
+	// Handle event binding
+	jQuery.fn[ name ] = function( data, fn ) {
+		return arguments.length > 0 ?
+			this.on( name, null, data, fn ) :
+			this.trigger( name );
+	};
+} );
+
+jQuery.fn.extend( {
+	hover: function( fnOver, fnOut ) {
+		return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
+	}
+} );
+
+
+
+
+support.focusin = "onfocusin" in window;
+
+
+// Support: Firefox <=44
+// Firefox doesn't have focus(in | out) events
+// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787
+//
+// Support: Chrome <=48 - 49, Safari <=9.0 - 9.1
+// focus(in | out) events fire after focus & blur events,
+// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order
+// Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857
+if ( !support.focusin ) {
+	jQuery.each( { focus: "focusin", blur: "focusout" }, function( orig, fix ) {
+
+		// Attach a single capturing handler on the document while someone wants focusin/focusout
+		var handler = function( event ) {
+			jQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );
+		};
+
+		jQuery.event.special[ fix ] = {
+			setup: function() {
+				var doc = this.ownerDocument || this,
+					attaches = dataPriv.access( doc, fix );
+
+				if ( !attaches ) {
+					doc.addEventListener( orig, handler, true );
+				}
+				dataPriv.access( doc, fix, ( attaches || 0 ) + 1 );
+			},
+			teardown: function() {
+				var doc = this.ownerDocument || this,
+					attaches = dataPriv.access( doc, fix ) - 1;
+
+				if ( !attaches ) {
+					doc.removeEventListener( orig, handler, true );
+					dataPriv.remove( doc, fix );
+
+				} else {
+					dataPriv.access( doc, fix, attaches );
+				}
+			}
+		};
+	} );
+}
+var location = window.location;
+
+var nonce = jQuery.now();
+
+var rquery = ( /\?/ );
+
+
+
+// Cross-browser xml parsing
+jQuery.parseXML = function( data ) {
+	var xml;
+	if ( !data || typeof data !== "string" ) {
+		return null;
+	}
+
+	// Support: IE 9 - 11 only
+	// IE throws on parseFromString with invalid input.
+	try {
+		xml = ( new window.DOMParser() ).parseFromString( data, "text/xml" );
+	} catch ( e ) {
+		xml = undefined;
+	}
+
+	if ( !xml || xml.getElementsByTagName( "parsererror" ).length ) {
+		jQuery.error( "Invalid XML: " + data );
+	}
+	return xml;
+};
+
+
+var
+	rbracket = /\[\]$/,
+	rCRLF = /\r?\n/g,
+	rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,
+	rsubmittable = /^(?:input|select|textarea|keygen)/i;
+
+function buildParams( prefix, obj, traditional, add ) {
+	var name;
+
+	if ( jQuery.isArray( obj ) ) {
+
+		// Serialize array item.
+		jQuery.each( obj, function( i, v ) {
+			if ( traditional || rbracket.test( prefix ) ) {
+
+				// Treat each array item as a scalar.
+				add( prefix, v );
+
+			} else {
+
+				// Item is non-scalar (array or object), encode its numeric index.
+				buildParams(
+					prefix + "[" + ( typeof v === "object" && v != null ? i : "" ) + "]",
+					v,
+					traditional,
+					add
+				);
+			}
+		} );
+
+	} else if ( !traditional && jQuery.type( obj ) === "object" ) {
+
+		// Serialize object item.
+		for ( name in obj ) {
+			buildParams( prefix + "[" + name + "]", obj[ name ], traditional, add );
+		}
+
+	} else {
+
+		// Serialize scalar item.
+		add( prefix, obj );
+	}
+}
+
+// Serialize an array of form elements or a set of
+// key/values into a query string
+jQuery.param = function( a, traditional ) {
+	var prefix,
+		s = [],
+		add = function( key, valueOrFunction ) {
+
+			// If value is a function, invoke it and use its return value
+			var value = jQuery.isFunction( valueOrFunction ) ?
+				valueOrFunction() :
+				valueOrFunction;
+
+			s[ s.length ] = encodeURIComponent( key ) + "=" +
+				encodeURIComponent( value == null ? "" : value );
+		};
+
+	// If an array was passed in, assume that it is an array of form elements.
+	if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
+
+		// Serialize the form elements
+		jQuery.each( a, function() {
+			add( this.name, this.value );
+		} );
+
+	} else {
+
+		// If traditional, encode the "old" way (the way 1.3.2 or older
+		// did it), otherwise encode params recursively.
+		for ( prefix in a ) {
+			buildParams( prefix, a[ prefix ], traditional, add );
+		}
+	}
+
+	// Return the resulting serialization
+	return s.join( "&" );
+};
+
+jQuery.fn.extend( {
+	serialize: function() {
+		return jQuery.param( this.serializeArray() );
+	},
+	serializeArray: function() {
+		return this.map( function() {
+
+			// Can add propHook for "elements" to filter or add form elements
+			var elements = jQuery.prop( this, "elements" );
+			return elements ? jQuery.makeArray( elements ) : this;
+		} )
+		.filter( function() {
+			var type = this.type;
+
+			// Use .is( ":disabled" ) so that fieldset[disabled] works
+			return this.name && !jQuery( this ).is( ":disabled" ) &&
+				rsubmittable.test( this.nodeName ) && !rsubmitterTypes.test( type ) &&
+				( this.checked || !rcheckableType.test( type ) );
+		} )
+		.map( function( i, elem ) {
+			var val = jQuery( this ).val();
+
+			return val == null ?
+				null :
+				jQuery.isArray( val ) ?
+					jQuery.map( val, function( val ) {
+						return { name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+					} ) :
+					{ name: elem.name, value: val.replace( rCRLF, "\r\n" ) };
+		} ).get();
+	}
+} );
+
+
+var
+	r20 = /%20/g,
+	rhash = /#.*$/,
+	rts = /([?&])_=[^&]*/,
+	rheaders = /^(.*?):[ \t]*([^\r\n]*)$/mg,
+
+	// #7653, #8125, #8152: local protocol detection
+	rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,
+	rnoContent = /^(?:GET|HEAD)$/,
+	rprotocol = /^\/\//,
+
+	/* Prefilters
+	 * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)
+	 * 2) These are called:
+	 *    - BEFORE asking for a transport
+	 *    - AFTER param serialization (s.data is a string if s.processData is true)
+	 * 3) key is the dataType
+	 * 4) the catchall symbol "*" can be used
+	 * 5) execution will start with transport dataType and THEN continue down to "*" if needed
+	 */
+	prefilters = {},
+
+	/* Transports bindings
+	 * 1) key is the dataType
+	 * 2) the catchall symbol "*" can be used
+	 * 3) selection will start with transport dataType and THEN go to "*" if needed
+	 */
+	transports = {},
+
+	// Avoid comment-prolog char sequence (#10098); must appease lint and evade compression
+	allTypes = "*/".concat( "*" ),
+
+	// Anchor tag for parsing the document origin
+	originAnchor = document.createElement( "a" );
+	originAnchor.href = location.href;
+
+// Base "constructor" for jQuery.ajaxPrefilter and jQuery.ajaxTransport
+function addToPrefiltersOrTransports( structure ) {
+
+	// dataTypeExpression is optional and defaults to "*"
+	return function( dataTypeExpression, func ) {
+
+		if ( typeof dataTypeExpression !== "string" ) {
+			func = dataTypeExpression;
+			dataTypeExpression = "*";
+		}
+
+		var dataType,
+			i = 0,
+			dataTypes = dataTypeExpression.toLowerCase().match( rnotwhite ) || [];
+
+		if ( jQuery.isFunction( func ) ) {
+
+			// For each dataType in the dataTypeExpression
+			while ( ( dataType = dataTypes[ i++ ] ) ) {
+
+				// Prepend if requested
+				if ( dataType[ 0 ] === "+" ) {
+					dataType = dataType.slice( 1 ) || "*";
+					( structure[ dataType ] = structure[ dataType ] || [] ).unshift( func );
+
+				// Otherwise append
+				} else {
+					( structure[ dataType ] = structure[ dataType ] || [] ).push( func );
+				}
+			}
+		}
+	};
+}
+
+// Base inspection function for prefilters and transports
+function inspectPrefiltersOrTransports( structure, options, originalOptions, jqXHR ) {
+
+	var inspected = {},
+		seekingTransport = ( structure === transports );
+
+	function inspect( dataType ) {
+		var selected;
+		inspected[ dataType ] = true;
+		jQuery.each( structure[ dataType ] || [], function( _, prefilterOrFactory ) {
+			var dataTypeOrTransport = prefilterOrFactory( options, originalOptions, jqXHR );
+			if ( typeof dataTypeOrTransport === "string" &&
+				!seekingTransport && !inspected[ dataTypeOrTransport ] ) {
+
+				options.dataTypes.unshift( dataTypeOrTransport );
+				inspect( dataTypeOrTransport );
+				return false;
+			} else if ( seekingTransport ) {
+				return !( selected = dataTypeOrTransport );
+			}
+		} );
+		return selected;
+	}
+
+	return inspect( options.dataTypes[ 0 ] ) || !inspected[ "*" ] && inspect( "*" );
+}
+
+// A special extend for ajax options
+// that takes "flat" options (not to be deep extended)
+// Fixes #9887
+function ajaxExtend( target, src ) {
+	var key, deep,
+		flatOptions = jQuery.ajaxSettings.flatOptions || {};
+
+	for ( key in src ) {
+		if ( src[ key ] !== undefined ) {
+			( flatOptions[ key ] ? target : ( deep || ( deep = {} ) ) )[ key ] = src[ key ];
+		}
+	}
+	if ( deep ) {
+		jQuery.extend( true, target, deep );
+	}
+
+	return target;
+}
+
+/* Handles responses to an ajax request:
+ * - finds the right dataType (mediates between content-type and expected dataType)
+ * - returns the corresponding response
+ */
+function ajaxHandleResponses( s, jqXHR, responses ) {
+
+	var ct, type, finalDataType, firstDataType,
+		contents = s.contents,
+		dataTypes = s.dataTypes;
+
+	// Remove auto dataType and get content-type in the process
+	while ( dataTypes[ 0 ] === "*" ) {
+		dataTypes.shift();
+		if ( ct === undefined ) {
+			ct = s.mimeType || jqXHR.getResponseHeader( "Content-Type" );
+		}
+	}
+
+	// Check if we're dealing with a known content-type
+	if ( ct ) {
+		for ( type in contents ) {
+			if ( contents[ type ] && contents[ type ].test( ct ) ) {
+				dataTypes.unshift( type );
+				break;
+			}
+		}
+	}
+
+	// Check to see if we have a response for the expected dataType
+	if ( dataTypes[ 0 ] in responses ) {
+		finalDataType = dataTypes[ 0 ];
+	} else {
+
+		// Try convertible dataTypes
+		for ( type in responses ) {
+			if ( !dataTypes[ 0 ] || s.converters[ type + " " + dataTypes[ 0 ] ] ) {
+				finalDataType = type;
+				break;
+			}
+			if ( !firstDataType ) {
+				firstDataType = type;
+			}
+		}
+
+		// Or just use first one
+		finalDataType = finalDataType || firstDataType;
+	}
+
+	// If we found a dataType
+	// We add the dataType to the list if needed
+	// and return the corresponding response
+	if ( finalDataType ) {
+		if ( finalDataType !== dataTypes[ 0 ] ) {
+			dataTypes.unshift( finalDataType );
+		}
+		return responses[ finalDataType ];
+	}
+}
+
+/* Chain conversions given the request and the original response
+ * Also sets the responseXXX fields on the jqXHR instance
+ */
+function ajaxConvert( s, response, jqXHR, isSuccess ) {
+	var conv2, current, conv, tmp, prev,
+		converters = {},
+
+		// Work with a copy of dataTypes in case we need to modify it for conversion
+		dataTypes = s.dataTypes.slice();
+
+	// Create converters map with lowercased keys
+	if ( dataTypes[ 1 ] ) {
+		for ( conv in s.converters ) {
+			converters[ conv.toLowerCase() ] = s.converters[ conv ];
+		}
+	}
+
+	current = dataTypes.shift();
+
+	// Convert to each sequential dataType
+	while ( current ) {
+
+		if ( s.responseFields[ current ] ) {
+			jqXHR[ s.responseFields[ current ] ] = response;
+		}
+
+		// Apply the dataFilter if provided
+		if ( !prev && isSuccess && s.dataFilter ) {
+			response = s.dataFilter( response, s.dataType );
+		}
+
+		prev = current;
+		current = dataTypes.shift();
+
+		if ( current ) {
+
+			// There's only work to do if current dataType is non-auto
+			if ( current === "*" ) {
+
+				current = prev;
+
+			// Convert response if prev dataType is non-auto and differs from current
+			} else if ( prev !== "*" && prev !== current ) {
+
+				// Seek a direct converter
+				conv = converters[ prev + " " + current ] || converters[ "* " + current ];
+
+				// If none found, seek a pair
+				if ( !conv ) {
+					for ( conv2 in converters ) {
+
+						// If conv2 outputs current
+						tmp = conv2.split( " " );
+						if ( tmp[ 1 ] === current ) {
+
+							// If prev can be converted to accepted input
+							conv = converters[ prev + " " + tmp[ 0 ] ] ||
+								converters[ "* " + tmp[ 0 ] ];
+							if ( conv ) {
+
+								// Condense equivalence converters
+								if ( conv === true ) {
+									conv = converters[ conv2 ];
+
+								// Otherwise, insert the intermediate dataType
+								} else if ( converters[ conv2 ] !== true ) {
+									current = tmp[ 0 ];
+									dataTypes.unshift( tmp[ 1 ] );
+								}
+								break;
+							}
+						}
+					}
+				}
+
+				// Apply converter (if not an equivalence)
+				if ( conv !== true ) {
+
+					// Unless errors are allowed to bubble, catch and return them
+					if ( conv && s.throws ) {
+						response = conv( response );
+					} else {
+						try {
+							response = conv( response );
+						} catch ( e ) {
+							return {
+								state: "parsererror",
+								error: conv ? e : "No conversion from " + prev + " to " + current
+							};
+						}
+					}
+				}
+			}
+		}
+	}
+
+	return { state: "success", data: response };
+}
+
+jQuery.extend( {
+
+	// Counter for holding the number of active queries
+	active: 0,
+
+	// Last-Modified header cache for next request
+	lastModified: {},
+	etag: {},
+
+	ajaxSettings: {
+		url: location.href,
+		type: "GET",
+		isLocal: rlocalProtocol.test( location.protocol ),
+		global: true,
+		processData: true,
+		async: true,
+		contentType: "application/x-www-form-urlencoded; charset=UTF-8",
+
+		/*
+		timeout: 0,
+		data: null,
+		dataType: null,
+		username: null,
+		password: null,
+		cache: null,
+		throws: false,
+		traditional: false,
+		headers: {},
+		*/
+
+		accepts: {
+			"*": allTypes,
+			text: "text/plain",
+			html: "text/html",
+			xml: "application/xml, text/xml",
+			json: "application/json, text/javascript"
+		},
+
+		contents: {
+			xml: /\bxml\b/,
+			html: /\bhtml/,
+			json: /\bjson\b/
+		},
+
+		responseFields: {
+			xml: "responseXML",
+			text: "responseText",
+			json: "responseJSON"
+		},
+
+		// Data converters
+		// Keys separate source (or catchall "*") and destination types with a single space
+		converters: {
+
+			// Convert anything to text
+			"* text": String,
+
+			// Text to html (true = no transformation)
+			"text html": true,
+
+			// Evaluate text as a json expression
+			"text json": JSON.parse,
+
+			// Parse text as xml
+			"text xml": jQuery.parseXML
+		},
+
+		// For options that shouldn't be deep extended:
+		// you can add your own custom options here if
+		// and when you create one that shouldn't be
+		// deep extended (see ajaxExtend)
+		flatOptions: {
+			url: true,
+			context: true
+		}
+	},
+
+	// Creates a full fledged settings object into target
+	// with both ajaxSettings and settings fields.
+	// If target is omitted, writes into ajaxSettings.
+	ajaxSetup: function( target, settings ) {
+		return settings ?
+
+			// Building a settings object
+			ajaxExtend( ajaxExtend( target, jQuery.ajaxSettings ), settings ) :
+
+			// Extending ajaxSettings
+			ajaxExtend( jQuery.ajaxSettings, target );
+	},
+
+	ajaxPrefilter: addToPrefiltersOrTransports( prefilters ),
+	ajaxTransport: addToPrefiltersOrTransports( transports ),
+
+	// Main method
+	ajax: function( url, options ) {
+
+		// If url is an object, simulate pre-1.5 signature
+		if ( typeof url === "object" ) {
+			options = url;
+			url = undefined;
+		}
+
+		// Force options to be an object
+		options = options || {};
+
+		var transport,
+
+			// URL without anti-cache param
+			cacheURL,
+
+			// Response headers
+			responseHeadersString,
+			responseHeaders,
+
+			// timeout handle
+			timeoutTimer,
+
+			// Url cleanup var
+			urlAnchor,
+
+			// Request state (becomes false upon send and true upon completion)
+			completed,
+
+			// To know if global events are to be dispatched
+			fireGlobals,
+
+			// Loop variable
+			i,
+
+			// uncached part of the url
+			uncached,
+
+			// Create the final options object
+			s = jQuery.ajaxSetup( {}, options ),
+
+			// Callbacks context
+			callbackContext = s.context || s,
+
+			// Context for global events is callbackContext if it is a DOM node or jQuery collection
+			globalEventContext = s.context &&
+				( callbackContext.nodeType || callbackContext.jquery ) ?
+					jQuery( callbackContext ) :
+					jQuery.event,
+
+			// Deferreds
+			deferred = jQuery.Deferred(),
+			completeDeferred = jQuery.Callbacks( "once memory" ),
+
+			// Status-dependent callbacks
+			statusCode = s.statusCode || {},
+
+			// Headers (they are sent all at once)
+			requestHeaders = {},
+			requestHeadersNames = {},
+
+			// Default abort message
+			strAbort = "canceled",
+
+			// Fake xhr
+			jqXHR = {
+				readyState: 0,
+
+				// Builds headers hashtable if needed
+				getResponseHeader: function( key ) {
+					var match;
+					if ( completed ) {
+						if ( !responseHeaders ) {
+							responseHeaders = {};
+							while ( ( match = rheaders.exec( responseHeadersString ) ) ) {
+								responseHeaders[ match[ 1 ].toLowerCase() ] = match[ 2 ];
+							}
+						}
+						match = responseHeaders[ key.toLowerCase() ];
+					}
+					return match == null ? null : match;
+				},
+
+				// Raw string
+				getAllResponseHeaders: function() {
+					return completed ? responseHeadersString : null;
+				},
+
+				// Caches the header
+				setRequestHeader: function( name, value ) {
+					if ( completed == null ) {
+						name = requestHeadersNames[ name.toLowerCase() ] =
+							requestHeadersNames[ name.toLowerCase() ] || name;
+						requestHeaders[ name ] = value;
+					}
+					return this;
+				},
+
+				// Overrides response content-type header
+				overrideMimeType: function( type ) {
+					if ( completed == null ) {
+						s.mimeType = type;
+					}
+					return this;
+				},
+
+				// Status-dependent callbacks
+				statusCode: function( map ) {
+					var code;
+					if ( map ) {
+						if ( completed ) {
+
+							// Execute the appropriate callbacks
+							jqXHR.always( map[ jqXHR.status ] );
+						} else {
+
+							// Lazy-add the new callbacks in a way that preserves old ones
+							for ( code in map ) {
+								statusCode[ code ] = [ statusCode[ code ], map[ code ] ];
+							}
+						}
+					}
+					return this;
+				},
+
+				// Cancel the request
+				abort: function( statusText ) {
+					var finalText = statusText || strAbort;
+					if ( transport ) {
+						transport.abort( finalText );
+					}
+					done( 0, finalText );
+					return this;
+				}
+			};
+
+		// Attach deferreds
+		deferred.promise( jqXHR );
+
+		// Add protocol if not provided (prefilters might expect it)
+		// Handle falsy url in the settings object (#10093: consistency with old signature)
+		// We also use the url parameter if available
+		s.url = ( ( url || s.url || location.href ) + "" )
+			.replace( rprotocol, location.protocol + "//" );
+
+		// Alias method option to type as per ticket #12004
+		s.type = options.method || options.type || s.method || s.type;
+
+		// Extract dataTypes list
+		s.dataTypes = ( s.dataType || "*" ).toLowerCase().match( rnotwhite ) || [ "" ];
+
+		// A cross-domain request is in order when the origin doesn't match the current origin.
+		if ( s.crossDomain == null ) {
+			urlAnchor = document.createElement( "a" );
+
+			// Support: IE <=8 - 11, Edge 12 - 13
+			// IE throws exception on accessing the href property if url is malformed,
+			// e.g. http://example.com:80x/
+			try {
+				urlAnchor.href = s.url;
+
+				// Support: IE <=8 - 11 only
+				// Anchor's host property isn't correctly set when s.url is relative
+				urlAnchor.href = urlAnchor.href;
+				s.crossDomain = originAnchor.protocol + "//" + originAnchor.host !==
+					urlAnchor.protocol + "//" + urlAnchor.host;
+			} catch ( e ) {
+
+				// If there is an error parsing the URL, assume it is crossDomain,
+				// it can be rejected by the transport if it is invalid
+				s.crossDomain = true;
+			}
+		}
+
+		// Convert data if not already a string
+		if ( s.data && s.processData && typeof s.data !== "string" ) {
+			s.data = jQuery.param( s.data, s.traditional );
+		}
+
+		// Apply prefilters
+		inspectPrefiltersOrTransports( prefilters, s, options, jqXHR );
+
+		// If request was aborted inside a prefilter, stop there
+		if ( completed ) {
+			return jqXHR;
+		}
+
+		// We can fire global events as of now if asked to
+		// Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)
+		fireGlobals = jQuery.event && s.global;
+
+		// Watch for a new set of requests
+		if ( fireGlobals && jQuery.active++ === 0 ) {
+			jQuery.event.trigger( "ajaxStart" );
+		}
+
+		// Uppercase the type
+		s.type = s.type.toUpperCase();
+
+		// Determine if request has content
+		s.hasContent = !rnoContent.test( s.type );
+
+		// Save the URL in case we're toying with the If-Modified-Since
+		// and/or If-None-Match header later on
+		// Remove hash to simplify url manipulation
+		cacheURL = s.url.replace( rhash, "" );
+
+		// More options handling for requests with no content
+		if ( !s.hasContent ) {
+
+			// Remember the hash so we can put it back
+			uncached = s.url.slice( cacheURL.length );
+
+			// If data is available, append data to url
+			if ( s.data ) {
+				cacheURL += ( rquery.test( cacheURL ) ? "&" : "?" ) + s.data;
+
+				// #9682: remove data so that it's not used in an eventual retry
+				delete s.data;
+			}
+
+			// Add anti-cache in uncached url if needed
+			if ( s.cache === false ) {
+				cacheURL = cacheURL.replace( rts, "" );
+				uncached = ( rquery.test( cacheURL ) ? "&" : "?" ) + "_=" + ( nonce++ ) + uncached;
+			}
+
+			// Put hash and anti-cache on the URL that will be requested (gh-1732)
+			s.url = cacheURL + uncached;
+
+		// Change '%20' to '+' if this is encoded form body content (gh-2658)
+		} else if ( s.data && s.processData &&
+			( s.contentType || "" ).indexOf( "application/x-www-form-urlencoded" ) === 0 ) {
+			s.data = s.data.replace( r20, "+" );
+		}
+
+		// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+		if ( s.ifModified ) {
+			if ( jQuery.lastModified[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-Modified-Since", jQuery.lastModified[ cacheURL ] );
+			}
+			if ( jQuery.etag[ cacheURL ] ) {
+				jqXHR.setRequestHeader( "If-None-Match", jQuery.etag[ cacheURL ] );
+			}
+		}
+
+		// Set the correct header, if data is being sent
+		if ( s.data && s.hasContent && s.contentType !== false || options.contentType ) {
+			jqXHR.setRequestHeader( "Content-Type", s.contentType );
+		}
+
+		// Set the Accepts header for the server, depending on the dataType
+		jqXHR.setRequestHeader(
+			"Accept",
+			s.dataTypes[ 0 ] && s.accepts[ s.dataTypes[ 0 ] ] ?
+				s.accepts[ s.dataTypes[ 0 ] ] +
+					( s.dataTypes[ 0 ] !== "*" ? ", " + allTypes + "; q=0.01" : "" ) :
+				s.accepts[ "*" ]
+		);
+
+		// Check for headers option
+		for ( i in s.headers ) {
+			jqXHR.setRequestHeader( i, s.headers[ i ] );
+		}
+
+		// Allow custom headers/mimetypes and early abort
+		if ( s.beforeSend &&
+			( s.beforeSend.call( callbackContext, jqXHR, s ) === false || completed ) ) {
+
+			// Abort if not done already and return
+			return jqXHR.abort();
+		}
+
+		// Aborting is no longer a cancellation
+		strAbort = "abort";
+
+		// Install callbacks on deferreds
+		completeDeferred.add( s.complete );
+		jqXHR.done( s.success );
+		jqXHR.fail( s.error );
+
+		// Get transport
+		transport = inspectPrefiltersOrTransports( transports, s, options, jqXHR );
+
+		// If no transport, we auto-abort
+		if ( !transport ) {
+			done( -1, "No Transport" );
+		} else {
+			jqXHR.readyState = 1;
+
+			// Send global event
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxSend", [ jqXHR, s ] );
+			}
+
+			// If request was aborted inside ajaxSend, stop there
+			if ( completed ) {
+				return jqXHR;
+			}
+
+			// Timeout
+			if ( s.async && s.timeout > 0 ) {
+				timeoutTimer = window.setTimeout( function() {
+					jqXHR.abort( "timeout" );
+				}, s.timeout );
+			}
+
+			try {
+				completed = false;
+				transport.send( requestHeaders, done );
+			} catch ( e ) {
+
+				// Rethrow post-completion exceptions
+				if ( completed ) {
+					throw e;
+				}
+
+				// Propagate others as results
+				done( -1, e );
+			}
+		}
+
+		// Callback for when everything is done
+		function done( status, nativeStatusText, responses, headers ) {
+			var isSuccess, success, error, response, modified,
+				statusText = nativeStatusText;
+
+			// Ignore repeat invocations
+			if ( completed ) {
+				return;
+			}
+
+			completed = true;
+
+			// Clear timeout if it exists
+			if ( timeoutTimer ) {
+				window.clearTimeout( timeoutTimer );
+			}
+
+			// Dereference transport for early garbage collection
+			// (no matter how long the jqXHR object will be used)
+			transport = undefined;
+
+			// Cache response headers
+			responseHeadersString = headers || "";
+
+			// Set readyState
+			jqXHR.readyState = status > 0 ? 4 : 0;
+
+			// Determine if successful
+			isSuccess = status >= 200 && status < 300 || status === 304;
+
+			// Get response data
+			if ( responses ) {
+				response = ajaxHandleResponses( s, jqXHR, responses );
+			}
+
+			// Convert no matter what (that way responseXXX fields are always set)
+			response = ajaxConvert( s, response, jqXHR, isSuccess );
+
+			// If successful, handle type chaining
+			if ( isSuccess ) {
+
+				// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
+				if ( s.ifModified ) {
+					modified = jqXHR.getResponseHeader( "Last-Modified" );
+					if ( modified ) {
+						jQuery.lastModified[ cacheURL ] = modified;
+					}
+					modified = jqXHR.getResponseHeader( "etag" );
+					if ( modified ) {
+						jQuery.etag[ cacheURL ] = modified;
+					}
+				}
+
+				// if no content
+				if ( status === 204 || s.type === "HEAD" ) {
+					statusText = "nocontent";
+
+				// if not modified
+				} else if ( status === 304 ) {
+					statusText = "notmodified";
+
+				// If we have data, let's convert it
+				} else {
+					statusText = response.state;
+					success = response.data;
+					error = response.error;
+					isSuccess = !error;
+				}
+			} else {
+
+				// Extract error from statusText and normalize for non-aborts
+				error = statusText;
+				if ( status || !statusText ) {
+					statusText = "error";
+					if ( status < 0 ) {
+						status = 0;
+					}
+				}
+			}
+
+			// Set data for the fake xhr object
+			jqXHR.status = status;
+			jqXHR.statusText = ( nativeStatusText || statusText ) + "";
+
+			// Success/Error
+			if ( isSuccess ) {
+				deferred.resolveWith( callbackContext, [ success, statusText, jqXHR ] );
+			} else {
+				deferred.rejectWith( callbackContext, [ jqXHR, statusText, error ] );
+			}
+
+			// Status-dependent callbacks
+			jqXHR.statusCode( statusCode );
+			statusCode = undefined;
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( isSuccess ? "ajaxSuccess" : "ajaxError",
+					[ jqXHR, s, isSuccess ? success : error ] );
+			}
+
+			// Complete
+			completeDeferred.fireWith( callbackContext, [ jqXHR, statusText ] );
+
+			if ( fireGlobals ) {
+				globalEventContext.trigger( "ajaxComplete", [ jqXHR, s ] );
+
+				// Handle the global AJAX counter
+				if ( !( --jQuery.active ) ) {
+					jQuery.event.trigger( "ajaxStop" );
+				}
+			}
+		}
+
+		return jqXHR;
+	},
+
+	getJSON: function( url, data, callback ) {
+		return jQuery.get( url, data, callback, "json" );
+	},
+
+	getScript: function( url, callback ) {
+		return jQuery.get( url, undefined, callback, "script" );
+	}
+} );
+
+jQuery.each( [ "get", "post" ], function( i, method ) {
+	jQuery[ method ] = function( url, data, callback, type ) {
+
+		// Shift arguments if data argument was omitted
+		if ( jQuery.isFunction( data ) ) {
+			type = type || callback;
+			callback = data;
+			data = undefined;
+		}
+
+		// The url can be an options object (which then must have .url)
+		return jQuery.ajax( jQuery.extend( {
+			url: url,
+			type: method,
+			dataType: type,
+			data: data,
+			success: callback
+		}, jQuery.isPlainObject( url ) && url ) );
+	};
+} );
+
+
+jQuery._evalUrl = function( url ) {
+	return jQuery.ajax( {
+		url: url,
+
+		// Make this explicit, since user can override this through ajaxSetup (#11264)
+		type: "GET",
+		dataType: "script",
+		cache: true,
+		async: false,
+		global: false,
+		"throws": true
+	} );
+};
+
+
+jQuery.fn.extend( {
+	wrapAll: function( html ) {
+		var wrap;
+
+		if ( this[ 0 ] ) {
+			if ( jQuery.isFunction( html ) ) {
+				html = html.call( this[ 0 ] );
+			}
+
+			// The elements to wrap the target around
+			wrap = jQuery( html, this[ 0 ].ownerDocument ).eq( 0 ).clone( true );
+
+			if ( this[ 0 ].parentNode ) {
+				wrap.insertBefore( this[ 0 ] );
+			}
+
+			wrap.map( function() {
+				var elem = this;
+
+				while ( elem.firstElementChild ) {
+					elem = elem.firstElementChild;
+				}
+
+				return elem;
+			} ).append( this );
+		}
+
+		return this;
+	},
+
+	wrapInner: function( html ) {
+		if ( jQuery.isFunction( html ) ) {
+			return this.each( function( i ) {
+				jQuery( this ).wrapInner( html.call( this, i ) );
+			} );
+		}
+
+		return this.each( function() {
+			var self = jQuery( this ),
+				contents = self.contents();
+
+			if ( contents.length ) {
+				contents.wrapAll( html );
+
+			} else {
+				self.append( html );
+			}
+		} );
+	},
+
+	wrap: function( html ) {
+		var isFunction = jQuery.isFunction( html );
+
+		return this.each( function( i ) {
+			jQuery( this ).wrapAll( isFunction ? html.call( this, i ) : html );
+		} );
+	},
+
+	unwrap: function( selector ) {
+		this.parent( selector ).not( "body" ).each( function() {
+			jQuery( this ).replaceWith( this.childNodes );
+		} );
+		return this;
+	}
+} );
+
+
+jQuery.expr.pseudos.hidden = function( elem ) {
+	return !jQuery.expr.pseudos.visible( elem );
+};
+jQuery.expr.pseudos.visible = function( elem ) {
+	return !!( elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length );
+};
+
+
+
+
+jQuery.ajaxSettings.xhr = function() {
+	try {
+		return new window.XMLHttpRequest();
+	} catch ( e ) {}
+};
+
+var xhrSuccessStatus = {
+
+		// File protocol always yields status code 0, assume 200
+		0: 200,
+
+		// Support: IE <=9 only
+		// #1450: sometimes IE returns 1223 when it should be 204
+		1223: 204
+	},
+	xhrSupported = jQuery.ajaxSettings.xhr();
+
+support.cors = !!xhrSupported && ( "withCredentials" in xhrSupported );
+support.ajax = xhrSupported = !!xhrSupported;
+
+jQuery.ajaxTransport( function( options ) {
+	var callback, errorCallback;
+
+	// Cross domain only allowed if supported through XMLHttpRequest
+	if ( support.cors || xhrSupported && !options.crossDomain ) {
+		return {
+			send: function( headers, complete ) {
+				var i,
+					xhr = options.xhr();
+
+				xhr.open(
+					options.type,
+					options.url,
+					options.async,
+					options.username,
+					options.password
+				);
+
+				// Apply custom fields if provided
+				if ( options.xhrFields ) {
+					for ( i in options.xhrFields ) {
+						xhr[ i ] = options.xhrFields[ i ];
+					}
+				}
+
+				// Override mime type if needed
+				if ( options.mimeType && xhr.overrideMimeType ) {
+					xhr.overrideMimeType( options.mimeType );
+				}
+
+				// X-Requested-With header
+				// For cross-domain requests, seeing as conditions for a preflight are
+				// akin to a jigsaw puzzle, we simply never set it to be sure.
+				// (it can always be set on a per-request basis or even using ajaxSetup)
+				// For same-domain requests, won't change header if already provided.
+				if ( !options.crossDomain && !headers[ "X-Requested-With" ] ) {
+					headers[ "X-Requested-With" ] = "XMLHttpRequest";
+				}
+
+				// Set headers
+				for ( i in headers ) {
+					xhr.setRequestHeader( i, headers[ i ] );
+				}
+
+				// Callback
+				callback = function( type ) {
+					return function() {
+						if ( callback ) {
+							callback = errorCallback = xhr.onload =
+								xhr.onerror = xhr.onabort = xhr.onreadystatechange = null;
+
+							if ( type === "abort" ) {
+								xhr.abort();
+							} else if ( type === "error" ) {
+
+								// Support: IE <=9 only
+								// On a manual native abort, IE9 throws
+								// errors on any property access that is not readyState
+								if ( typeof xhr.status !== "number" ) {
+									complete( 0, "error" );
+								} else {
+									complete(
+
+										// File: protocol always yields status 0; see #8605, #14207
+										xhr.status,
+										xhr.statusText
+									);
+								}
+							} else {
+								complete(
+									xhrSuccessStatus[ xhr.status ] || xhr.status,
+									xhr.statusText,
+
+									// Support: IE <=9 only
+									// IE9 has no XHR2 but throws on binary (trac-11426)
+									// For XHR2 non-text, let the caller handle it (gh-2498)
+									( xhr.responseType || "text" ) !== "text"  ||
+									typeof xhr.responseText !== "string" ?
+										{ binary: xhr.response } :
+										{ text: xhr.responseText },
+									xhr.getAllResponseHeaders()
+								);
+							}
+						}
+					};
+				};
+
+				// Listen to events
+				xhr.onload = callback();
+				errorCallback = xhr.onerror = callback( "error" );
+
+				// Support: IE 9 only
+				// Use onreadystatechange to replace onabort
+				// to handle uncaught aborts
+				if ( xhr.onabort !== undefined ) {
+					xhr.onabort = errorCallback;
+				} else {
+					xhr.onreadystatechange = function() {
+
+						// Check readyState before timeout as it changes
+						if ( xhr.readyState === 4 ) {
+
+							// Allow onerror to be called first,
+							// but that will not handle a native abort
+							// Also, save errorCallback to a variable
+							// as xhr.onerror cannot be accessed
+							window.setTimeout( function() {
+								if ( callback ) {
+									errorCallback();
+								}
+							} );
+						}
+					};
+				}
+
+				// Create the abort callback
+				callback = callback( "abort" );
+
+				try {
+
+					// Do send the request (this may raise an exception)
+					xhr.send( options.hasContent && options.data || null );
+				} catch ( e ) {
+
+					// #14683: Only rethrow if this hasn't been notified as an error yet
+					if ( callback ) {
+						throw e;
+					}
+				}
+			},
+
+			abort: function() {
+				if ( callback ) {
+					callback();
+				}
+			}
+		};
+	}
+} );
+
+
+
+
+// Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)
+jQuery.ajaxPrefilter( function( s ) {
+	if ( s.crossDomain ) {
+		s.contents.script = false;
+	}
+} );
+
+// Install script dataType
+jQuery.ajaxSetup( {
+	accepts: {
+		script: "text/javascript, application/javascript, " +
+			"application/ecmascript, application/x-ecmascript"
+	},
+	contents: {
+		script: /\b(?:java|ecma)script\b/
+	},
+	converters: {
+		"text script": function( text ) {
+			jQuery.globalEval( text );
+			return text;
+		}
+	}
+} );
+
+// Handle cache's special case and crossDomain
+jQuery.ajaxPrefilter( "script", function( s ) {
+	if ( s.cache === undefined ) {
+		s.cache = false;
+	}
+	if ( s.crossDomain ) {
+		s.type = "GET";
+	}
+} );
+
+// Bind script tag hack transport
+jQuery.ajaxTransport( "script", function( s ) {
+
+	// This transport only deals with cross domain requests
+	if ( s.crossDomain ) {
+		var script, callback;
+		return {
+			send: function( _, complete ) {
+				script = jQuery( "<script>" ).prop( {
+					charset: s.scriptCharset,
+					src: s.url
+				} ).on(
+					"load error",
+					callback = function( evt ) {
+						script.remove();
+						callback = null;
+						if ( evt ) {
+							complete( evt.type === "error" ? 404 : 200, evt.type );
+						}
+					}
+				);
+
+				// Use native DOM manipulation to avoid our domManip AJAX trickery
+				document.head.appendChild( script[ 0 ] );
+			},
+			abort: function() {
+				if ( callback ) {
+					callback();
+				}
+			}
+		};
+	}
+} );
+
+
+
+
+var oldCallbacks = [],
+	rjsonp = /(=)\?(?=&|$)|\?\?/;
+
+// Default jsonp settings
+jQuery.ajaxSetup( {
+	jsonp: "callback",
+	jsonpCallback: function() {
+		var callback = oldCallbacks.pop() || ( jQuery.expando + "_" + ( nonce++ ) );
+		this[ callback ] = true;
+		return callback;
+	}
+} );
+
+// Detect, normalize options and install callbacks for jsonp requests
+jQuery.ajaxPrefilter( "json jsonp", function( s, originalSettings, jqXHR ) {
+
+	var callbackName, overwritten, responseContainer,
+		jsonProp = s.jsonp !== false && ( rjsonp.test( s.url ) ?
+			"url" :
+			typeof s.data === "string" &&
+				( s.contentType || "" )
+					.indexOf( "application/x-www-form-urlencoded" ) === 0 &&
+				rjsonp.test( s.data ) && "data"
+		);
+
+	// Handle iff the expected data type is "jsonp" or we have a parameter to set
+	if ( jsonProp || s.dataTypes[ 0 ] === "jsonp" ) {
+
+		// Get callback name, remembering preexisting value associated with it
+		callbackName = s.jsonpCallback = jQuery.isFunction( s.jsonpCallback ) ?
+			s.jsonpCallback() :
+			s.jsonpCallback;
+
+		// Insert callback into url or form data
+		if ( jsonProp ) {
+			s[ jsonProp ] = s[ jsonProp ].replace( rjsonp, "$1" + callbackName );
+		} else if ( s.jsonp !== false ) {
+			s.url += ( rquery.test( s.url ) ? "&" : "?" ) + s.jsonp + "=" + callbackName;
+		}
+
+		// Use data converter to retrieve json after script execution
+		s.converters[ "script json" ] = function() {
+			if ( !responseContainer ) {
+				jQuery.error( callbackName + " was not called" );
+			}
+			return responseContainer[ 0 ];
+		};
+
+		// Force json dataType
+		s.dataTypes[ 0 ] = "json";
+
+		// Install callback
+		overwritten = window[ callbackName ];
+		window[ callbackName ] = function() {
+			responseContainer = arguments;
+		};
+
+		// Clean-up function (fires after converters)
+		jqXHR.always( function() {
+
+			// If previous value didn't exist - remove it
+			if ( overwritten === undefined ) {
+				jQuery( window ).removeProp( callbackName );
+
+			// Otherwise restore preexisting value
+			} else {
+				window[ callbackName ] = overwritten;
+			}
+
+			// Save back as free
+			if ( s[ callbackName ] ) {
+
+				// Make sure that re-using the options doesn't screw things around
+				s.jsonpCallback = originalSettings.jsonpCallback;
+
+				// Save the callback name for future use
+				oldCallbacks.push( callbackName );
+			}
+
+			// Call if it was a function and we have a response
+			if ( responseContainer && jQuery.isFunction( overwritten ) ) {
+				overwritten( responseContainer[ 0 ] );
+			}
+
+			responseContainer = overwritten = undefined;
+		} );
+
+		// Delegate to script
+		return "script";
+	}
+} );
+
+
+
+
+// Support: Safari 8 only
+// In Safari 8 documents created via document.implementation.createHTMLDocument
+// collapse sibling forms: the second one becomes a child of the first one.
+// Because of that, this security measure has to be disabled in Safari 8.
+// https://bugs.webkit.org/show_bug.cgi?id=137337
+support.createHTMLDocument = ( function() {
+	var body = document.implementation.createHTMLDocument( "" ).body;
+	body.innerHTML = "<form></form><form></form>";
+	return body.childNodes.length === 2;
+} )();
+
+
+// Argument "data" should be string of html
+// context (optional): If specified, the fragment will be created in this context,
+// defaults to document
+// keepScripts (optional): If true, will include scripts passed in the html string
+jQuery.parseHTML = function( data, context, keepScripts ) {
+	if ( typeof data !== "string" ) {
+		return [];
+	}
+	if ( typeof context === "boolean" ) {
+		keepScripts = context;
+		context = false;
+	}
+
+	var base, parsed, scripts;
+
+	if ( !context ) {
+
+		// Stop scripts or inline event handlers from being executed immediately
+		// by using document.implementation
+		if ( support.createHTMLDocument ) {
+			context = document.implementation.createHTMLDocument( "" );
+
+			// Set the base href for the created document
+			// so any parsed elements with URLs
+			// are based on the document's URL (gh-2965)
+			base = context.createElement( "base" );
+			base.href = document.location.href;
+			context.head.appendChild( base );
+		} else {
+			context = document;
+		}
+	}
+
+	parsed = rsingleTag.exec( data );
+	scripts = !keepScripts && [];
+
+	// Single tag
+	if ( parsed ) {
+		return [ context.createElement( parsed[ 1 ] ) ];
+	}
+
+	parsed = buildFragment( [ data ], context, scripts );
+
+	if ( scripts && scripts.length ) {
+		jQuery( scripts ).remove();
+	}
+
+	return jQuery.merge( [], parsed.childNodes );
+};
+
+
+/**
+ * Load a url into a page
+ */
+jQuery.fn.load = function( url, params, callback ) {
+	var selector, type, response,
+		self = this,
+		off = url.indexOf( " " );
+
+	if ( off > -1 ) {
+		selector = jQuery.trim( url.slice( off ) );
+		url = url.slice( 0, off );
+	}
+
+	// If it's a function
+	if ( jQuery.isFunction( params ) ) {
+
+		// We assume that it's the callback
+		callback = params;
+		params = undefined;
+
+	// Otherwise, build a param string
+	} else if ( params && typeof params === "object" ) {
+		type = "POST";
+	}
+
+	// If we have elements to modify, make the request
+	if ( self.length > 0 ) {
+		jQuery.ajax( {
+			url: url,
+
+			// If "type" variable is undefined, then "GET" method will be used.
+			// Make value of this field explicit since
+			// user can override it through ajaxSetup method
+			type: type || "GET",
+			dataType: "html",
+			data: params
+		} ).done( function( responseText ) {
+
+			// Save response for use in complete callback
+			response = arguments;
+
+			self.html( selector ?
+
+				// If a selector was specified, locate the right elements in a dummy div
+				// Exclude scripts to avoid IE 'Permission Denied' errors
+				jQuery( "<div>" ).append( jQuery.parseHTML( responseText ) ).find( selector ) :
+
+				// Otherwise use the full result
+				responseText );
+
+		// If the request succeeds, this function gets "data", "status", "jqXHR"
+		// but they are ignored because response was set above.
+		// If it fails, this function gets "jqXHR", "status", "error"
+		} ).always( callback && function( jqXHR, status ) {
+			self.each( function() {
+				callback.apply( this, response || [ jqXHR.responseText, status, jqXHR ] );
+			} );
+		} );
+	}
+
+	return this;
+};
+
+
+
+
+// Attach a bunch of functions for handling common AJAX events
+jQuery.each( [
+	"ajaxStart",
+	"ajaxStop",
+	"ajaxComplete",
+	"ajaxError",
+	"ajaxSuccess",
+	"ajaxSend"
+], function( i, type ) {
+	jQuery.fn[ type ] = function( fn ) {
+		return this.on( type, fn );
+	};
+} );
+
+
+
+
+jQuery.expr.pseudos.animated = function( elem ) {
+	return jQuery.grep( jQuery.timers, function( fn ) {
+		return elem === fn.elem;
+	} ).length;
+};
+
+
+
+
+/**
+ * Gets a window from an element
+ */
+function getWindow( elem ) {
+	return jQuery.isWindow( elem ) ? elem : elem.nodeType === 9 && elem.defaultView;
+}
+
+jQuery.offset = {
+	setOffset: function( elem, options, i ) {
+		var curPosition, curLeft, curCSSTop, curTop, curOffset, curCSSLeft, calculatePosition,
+			position = jQuery.css( elem, "position" ),
+			curElem = jQuery( elem ),
+			props = {};
+
+		// Set position first, in-case top/left are set even on static elem
+		if ( position === "static" ) {
+			elem.style.position = "relative";
+		}
+
+		curOffset = curElem.offset();
+		curCSSTop = jQuery.css( elem, "top" );
+		curCSSLeft = jQuery.css( elem, "left" );
+		calculatePosition = ( position === "absolute" || position === "fixed" ) &&
+			( curCSSTop + curCSSLeft ).indexOf( "auto" ) > -1;
+
+		// Need to be able to calculate position if either
+		// top or left is auto and position is either absolute or fixed
+		if ( calculatePosition ) {
+			curPosition = curElem.position();
+			curTop = curPosition.top;
+			curLeft = curPosition.left;
+
+		} else {
+			curTop = parseFloat( curCSSTop ) || 0;
+			curLeft = parseFloat( curCSSLeft ) || 0;
+		}
+
+		if ( jQuery.isFunction( options ) ) {
+
+			// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)
+			options = options.call( elem, i, jQuery.extend( {}, curOffset ) );
+		}
+
+		if ( options.top != null ) {
+			props.top = ( options.top - curOffset.top ) + curTop;
+		}
+		if ( options.left != null ) {
+			props.left = ( options.left - curOffset.left ) + curLeft;
+		}
+
+		if ( "using" in options ) {
+			options.using.call( elem, props );
+
+		} else {
+			curElem.css( props );
+		}
+	}
+};
+
+jQuery.fn.extend( {
+	offset: function( options ) {
+
+		// Preserve chaining for setter
+		if ( arguments.length ) {
+			return options === undefined ?
+				this :
+				this.each( function( i ) {
+					jQuery.offset.setOffset( this, options, i );
+				} );
+		}
+
+		var docElem, win, rect, doc,
+			elem = this[ 0 ];
+
+		if ( !elem ) {
+			return;
+		}
+
+		// Support: IE <=11 only
+		// Running getBoundingClientRect on a
+		// disconnected node in IE throws an error
+		if ( !elem.getClientRects().length ) {
+			return { top: 0, left: 0 };
+		}
+
+		rect = elem.getBoundingClientRect();
+
+		// Make sure element is not hidden (display: none)
+		if ( rect.width || rect.height ) {
+			doc = elem.ownerDocument;
+			win = getWindow( doc );
+			docElem = doc.documentElement;
+
+			return {
+				top: rect.top + win.pageYOffset - docElem.clientTop,
+				left: rect.left + win.pageXOffset - docElem.clientLeft
+			};
+		}
+
+		// Return zeros for disconnected and hidden elements (gh-2310)
+		return rect;
+	},
+
+	position: function() {
+		if ( !this[ 0 ] ) {
+			return;
+		}
+
+		var offsetParent, offset,
+			elem = this[ 0 ],
+			parentOffset = { top: 0, left: 0 };
+
+		// Fixed elements are offset from window (parentOffset = {top:0, left: 0},
+		// because it is its only offset parent
+		if ( jQuery.css( elem, "position" ) === "fixed" ) {
+
+			// Assume getBoundingClientRect is there when computed position is fixed
+			offset = elem.getBoundingClientRect();
+
+		} else {
+
+			// Get *real* offsetParent
+			offsetParent = this.offsetParent();
+
+			// Get correct offsets
+			offset = this.offset();
+			if ( !jQuery.nodeName( offsetParent[ 0 ], "html" ) ) {
+				parentOffset = offsetParent.offset();
+			}
+
+			// Add offsetParent borders
+			parentOffset = {
+				top: parentOffset.top + jQuery.css( offsetParent[ 0 ], "borderTopWidth", true ),
+				left: parentOffset.left + jQuery.css( offsetParent[ 0 ], "borderLeftWidth", true )
+			};
+		}
+
+		// Subtract parent offsets and element margins
+		return {
+			top: offset.top - parentOffset.top - jQuery.css( elem, "marginTop", true ),
+			left: offset.left - parentOffset.left - jQuery.css( elem, "marginLeft", true )
+		};
+	},
+
+	// This method will return documentElement in the following cases:
+	// 1) For the element inside the iframe without offsetParent, this method will return
+	//    documentElement of the parent window
+	// 2) For the hidden or detached element
+	// 3) For body or html element, i.e. in case of the html node - it will return itself
+	//
+	// but those exceptions were never presented as a real life use-cases
+	// and might be considered as more preferable results.
+	//
+	// This logic, however, is not guaranteed and can change at any point in the future
+	offsetParent: function() {
+		return this.map( function() {
+			var offsetParent = this.offsetParent;
+
+			while ( offsetParent && jQuery.css( offsetParent, "position" ) === "static" ) {
+				offsetParent = offsetParent.offsetParent;
+			}
+
+			return offsetParent || documentElement;
+		} );
+	}
+} );
+
+// Create scrollLeft and scrollTop methods
+jQuery.each( { scrollLeft: "pageXOffset", scrollTop: "pageYOffset" }, function( method, prop ) {
+	var top = "pageYOffset" === prop;
+
+	jQuery.fn[ method ] = function( val ) {
+		return access( this, function( elem, method, val ) {
+			var win = getWindow( elem );
+
+			if ( val === undefined ) {
+				return win ? win[ prop ] : elem[ method ];
+			}
+
+			if ( win ) {
+				win.scrollTo(
+					!top ? val : win.pageXOffset,
+					top ? val : win.pageYOffset
+				);
+
+			} else {
+				elem[ method ] = val;
+			}
+		}, method, val, arguments.length );
+	};
+} );
+
+// Support: Safari <=7 - 9.1, Chrome <=37 - 49
+// Add the top/left cssHooks using jQuery.fn.position
+// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084
+// Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347
+// getComputedStyle returns percent when specified for top/left/bottom/right;
+// rather than make the css module depend on the offset module, just check for it here
+jQuery.each( [ "top", "left" ], function( i, prop ) {
+	jQuery.cssHooks[ prop ] = addGetHookIf( support.pixelPosition,
+		function( elem, computed ) {
+			if ( computed ) {
+				computed = curCSS( elem, prop );
+
+				// If curCSS returns percentage, fallback to offset
+				return rnumnonpx.test( computed ) ?
+					jQuery( elem ).position()[ prop ] + "px" :
+					computed;
+			}
+		}
+	);
+} );
+
+
+// Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods
+jQuery.each( { Height: "height", Width: "width" }, function( name, type ) {
+	jQuery.each( { padding: "inner" + name, content: type, "": "outer" + name },
+		function( defaultExtra, funcName ) {
+
+		// Margin is only for outerHeight, outerWidth
+		jQuery.fn[ funcName ] = function( margin, value ) {
+			var chainable = arguments.length && ( defaultExtra || typeof margin !== "boolean" ),
+				extra = defaultExtra || ( margin === true || value === true ? "margin" : "border" );
+
+			return access( this, function( elem, type, value ) {
+				var doc;
+
+				if ( jQuery.isWindow( elem ) ) {
+
+					// $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)
+					return funcName.indexOf( "outer" ) === 0 ?
+						elem[ "inner" + name ] :
+						elem.document.documentElement[ "client" + name ];
+				}
+
+				// Get document width or height
+				if ( elem.nodeType === 9 ) {
+					doc = elem.documentElement;
+
+					// Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],
+					// whichever is greatest
+					return Math.max(
+						elem.body[ "scroll" + name ], doc[ "scroll" + name ],
+						elem.body[ "offset" + name ], doc[ "offset" + name ],
+						doc[ "client" + name ]
+					);
+				}
+
+				return value === undefined ?
+
+					// Get width or height on the element, requesting but not forcing parseFloat
+					jQuery.css( elem, type, extra ) :
+
+					// Set width or height on the element
+					jQuery.style( elem, type, value, extra );
+			}, type, chainable ? margin : undefined, chainable );
+		};
+	} );
+} );
+
+
+jQuery.fn.extend( {
+
+	bind: function( types, data, fn ) {
+		return this.on( types, null, data, fn );
+	},
+	unbind: function( types, fn ) {
+		return this.off( types, null, fn );
+	},
+
+	delegate: function( selector, types, data, fn ) {
+		return this.on( types, selector, data, fn );
+	},
+	undelegate: function( selector, types, fn ) {
+
+		// ( namespace ) or ( selector, types [, fn] )
+		return arguments.length === 1 ?
+			this.off( selector, "**" ) :
+			this.off( types, selector || "**", fn );
+	}
+} );
+
+jQuery.parseJSON = JSON.parse;
+
+
+
+
+// Register as a named AMD module, since jQuery can be concatenated with other
+// files that may use define, but not via a proper concatenation script that
+// understands anonymous AMD modules. A named AMD is safest and most robust
+// way to register. Lowercase jquery is used because AMD module names are
+// derived from file names, and jQuery is normally delivered in a lowercase
+// file name. Do this after creating the global so that if an AMD module wants
+// to call noConflict to hide this version of jQuery, it will work.
+
+// Note that for maximum portability, libraries that are not jQuery should
+// declare themselves as anonymous modules, and avoid setting a global if an
+// AMD loader is present. jQuery is a special case. For more information, see
+// https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon
+
+if ( typeof define === "function" && define.amd ) {
+	define( "jquery", [], function() {
+		return jQuery;
+	} );
+}
+
+
+
+
+
+var
+
+	// Map over jQuery in case of overwrite
+	_jQuery = window.jQuery,
+
+	// Map over the $ in case of overwrite
+	_$ = window.$;
+
+jQuery.noConflict = function( deep ) {
+	if ( window.$ === jQuery ) {
+		window.$ = _$;
+	}
+
+	if ( deep && window.jQuery === jQuery ) {
+		window.jQuery = _jQuery;
+	}
+
+	return jQuery;
+};
+
+// Expose jQuery and $ identifiers, even in AMD
+// (#7102#comment:10, https://github.com/jquery/jquery/pull/557)
+// and CommonJS for browser emulators (#13566)
+if ( !noGlobal ) {
+	window.jQuery = window.$ = jQuery;
+}
+
+
+return jQuery;
+} );
diff --git a/docs/usrman/_static/jquery.js b/docs/usrman/_static/jquery.js
index 3883779..f6a6a99 100644
--- a/docs/usrman/_static/jquery.js
+++ b/docs/usrman/_static/jquery.js
@@ -1,2 +1,4 @@
-/*! 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
+/*! jQuery v3.1.0 | (c) jQuery Foundation | jquery.org/license */
+!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElem [...]
+r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h<i;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},T=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function U(){this.expando=r.expando+U.uid++}U.uid=1,U.prototype={cache:function(a){var b=a[this.expando];return b||(b={},T(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:fun [...]
+if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),hb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=ib[b]||r.find.attr;ib[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=ib[g],ib[g]=e,e=null!=c(a,b,d)?g:null,ib[g]=f),e}});var jb=/^(?:input|select|textarea|button)$/i,kb=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return S(this,r.prop,a,b,arguments.length>1)},removeProp:f [...]
diff --git a/docs/usrman/_static/minus.png b/docs/usrman/_static/minus.png
index da1c562..d96755f 100644
Binary files a/docs/usrman/_static/minus.png and b/docs/usrman/_static/minus.png differ
diff --git a/docs/usrman/_static/plus.png b/docs/usrman/_static/plus.png
index b3cb374..7107cec 100644
Binary files a/docs/usrman/_static/plus.png and b/docs/usrman/_static/plus.png differ
diff --git a/docs/usrman/_static/pygments.css b/docs/usrman/_static/pygments.css
index 8213e90..20c4814 100644
--- a/docs/usrman/_static/pygments.css
+++ b/docs/usrman/_static/pygments.css
@@ -47,8 +47,10 @@
 .highlight .mh { color: #208050 } /* Literal.Number.Hex */
 .highlight .mi { color: #208050 } /* Literal.Number.Integer */
 .highlight .mo { color: #208050 } /* Literal.Number.Oct */
+.highlight .sa { color: #4070a0 } /* Literal.String.Affix */
 .highlight .sb { color: #4070a0 } /* Literal.String.Backtick */
 .highlight .sc { color: #4070a0 } /* Literal.String.Char */
+.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */
 .highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
 .highlight .s2 { color: #4070a0 } /* Literal.String.Double */
 .highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
@@ -59,7 +61,9 @@
 .highlight .s1 { color: #4070a0 } /* Literal.String.Single */
 .highlight .ss { color: #517918 } /* Literal.String.Symbol */
 .highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */
+.highlight .fm { color: #06287e } /* Name.Function.Magic */
 .highlight .vc { color: #bb60d5 } /* Name.Variable.Class */
 .highlight .vg { color: #bb60d5 } /* Name.Variable.Global */
 .highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */
+.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */
 .highlight .il { color: #208050 } /* Literal.Number.Integer.Long */
\ No newline at end of file
diff --git a/docs/usrman/_static/searchtools.js b/docs/usrman/_static/searchtools.js
index 6e1f06b..c821573 100644
--- a/docs/usrman/_static/searchtools.js
+++ b/docs/usrman/_static/searchtools.js
@@ -2,14 +2,15 @@
  * searchtools.js_t
  * ~~~~~~~~~~~~~~~~
  *
- * Sphinx JavaScript utilties for the full-text search.
+ * Sphinx JavaScript utilities for the full-text search.
  *
- * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2017 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  *
  */
 
 
+/* Non-minified version JS is _stemmer.js if file is provided */ 
 /**
  * Porter Stemmer
  */
@@ -225,6 +226,106 @@ var Scorer = {
 };
 
 
+
+
+
+var splitChars = (function() {
+    var result = {};
+    var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648,
+         1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702,
+         2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971,
+         2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345,
+         3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761,
+         3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823,
+         4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125,
+         8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695,
+         11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587,
+         43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141];
+    var i, j, start, end;
+    for (i = 0; i < singles.length; i++) {
+        result[singles[i]] = true;
+    }
+    var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709],
+         [722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161],
+         [1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568],
+         [1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807],
+         [1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047],
+         [2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383],
+         [2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450],
+         [2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547],
+         [2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673],
+         [2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820],
+         [2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946],
+         [2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023],
+         [3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173],
+         [3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332],
+         [3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481],
+         [3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718],
+         [3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791],
+         [3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095],
+         [4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205],
+         [4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687],
+         [4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968],
+         [4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869],
+         [5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102],
+         [6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271],
+         [6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592],
+         [6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822],
+         [6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167],
+         [7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959],
+         [7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143],
+         [8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318],
+         [8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483],
+         [8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101],
+         [10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567],
+         [11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292],
+         [12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444],
+         [12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783],
+         [12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311],
+         [19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511],
+         [42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774],
+         [42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071],
+         [43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263],
+         [43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519],
+         [43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647],
+         [43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967],
+         [44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295],
+         [57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274],
+         [64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007],
+         [65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381],
+         [65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]];
+    for (i = 0; i < ranges.length; i++) {
+        start = ranges[i][0];
+        end = ranges[i][1];
+        for (j = start; j <= end; j++) {
+            result[j] = true;
+        }
+    }
+    return result;
+})();
+
+function splitQuery(query) {
+    var result = [];
+    var start = -1;
+    for (var i = 0; i < query.length; i++) {
+        if (splitChars[query.charCodeAt(i)]) {
+            if (start !== -1) {
+                result.push(query.slice(start, i));
+                start = -1;
+            }
+        } else if (start === -1) {
+            start = i;
+        }
+    }
+    if (start !== -1) {
+        result.push(query.slice(start));
+    }
+    return result;
+}
+
+
+
+
 /**
  * Search Module
  */
@@ -323,7 +424,7 @@ var Search = {
     var searchterms = [];
     var excluded = [];
     var hlterms = [];
-    var tmp = query.split(/\s+/);
+    var tmp = splitQuery(query);
     var objectterms = [];
     for (i = 0; i < tmp.length; i++) {
       if (tmp[i] !== "") {
@@ -337,6 +438,10 @@ var Search = {
       }
       // stem the word
       var word = stemmer.stemWord(tmp[i].toLowerCase());
+      // prevent stemmer from cutting word smaller than two chars
+      if(word.length < 3 && tmp[i].length >= 3) {
+        word = tmp[i];
+      }
       var toAppend;
       // select the correct list
       if (word[0] == '-') {
@@ -373,8 +478,7 @@ var Search = {
     }
 
     // lookup as search terms in fulltext
-    results = results.concat(this.performTermsSearch(searchterms, excluded, terms, Scorer.term))
-                     .concat(this.performTermsSearch(searchterms, excluded, titleterms, Scorer.title));
+    results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms));
 
     // let the scorer override scores with a custom scoring function
     if (Scorer.score) {
@@ -435,11 +539,12 @@ var Search = {
             displayNextItem();
           });
         } else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
-          $.ajax({url: DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' + item[0] + '.txt',
+          var suffix = DOCUMENTATION_OPTIONS.SOURCELINK_SUFFIX;
+          $.ajax({url: DOCUMENTATION_OPTIONS.URL_ROOT + '_sources/' + item[5] + (item[5].slice(-suffix.length) === suffix ? '' : suffix),
                   dataType: "text",
                   complete: function(jqxhr, textstatus) {
                     var data = jqxhr.responseText;
-                    if (data !== '') {
+                    if (data !== '' && data !== undefined) {
                       listItem.append(Search.makeSearchSummary(data, searchterms, hlterms));
                     }
                     Search.output.append(listItem);
@@ -474,6 +579,7 @@ var Search = {
    */
   performObjectSearch : function(object, otherterms) {
     var filenames = this._index.filenames;
+    var docnames = this._index.docnames;
     var objects = this._index.objects;
     var objnames = this._index.objnames;
     var titles = this._index.titles;
@@ -527,7 +633,7 @@ var Search = {
           } else {
             score += Scorer.objPrioDefault;
           }
-          results.push([filenames[match[0]], fullname, '#'+anchor, descr, score]);
+          results.push([docnames[match[0]], fullname, '#'+anchor, descr, score, filenames[match[0]]]);
         }
       }
     }
@@ -538,23 +644,48 @@ var Search = {
   /**
    * search for full-text terms in the index
    */
-  performTermsSearch : function(searchterms, excluded, terms, score) {
+  performTermsSearch : function(searchterms, excluded, terms, titleterms) {
+    var docnames = this._index.docnames;
     var filenames = this._index.filenames;
     var titles = this._index.titles;
 
-    var i, j, file, files;
+    var i, j, file;
     var fileMap = {};
+    var scoreMap = {};
     var results = [];
 
     // perform the search on the required terms
     for (i = 0; i < searchterms.length; i++) {
       var word = searchterms[i];
+      var files = [];
+      var _o = [
+        {files: terms[word], score: Scorer.term},
+        {files: titleterms[word], score: Scorer.title}
+      ];
+
       // no match but word was a required one
-      if ((files = terms[word]) === undefined)
+      if ($u.every(_o, function(o){return o.files === undefined;})) {
         break;
-      if (files.length === undefined) {
-        files = [files];
       }
+      // found search word in contents
+      $u.each(_o, function(o) {
+        var _files = o.files;
+        if (_files === undefined)
+          return
+
+        if (_files.length === undefined)
+          _files = [_files];
+        files = files.concat(_files);
+
+        // set score for the word in each file to Scorer.term
+        for (j = 0; j < _files.length; j++) {
+          file = _files[j];
+          if (!(file in scoreMap))
+            scoreMap[file] = {}
+          scoreMap[file][word] = o.score;
+        }
+      });
+
       // create the mapping
       for (j = 0; j < files.length; j++) {
         file = files[j];
@@ -576,7 +707,9 @@ var Search = {
       // 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)) {
+            titleterms[excluded[i]] == file ||
+            $u.contains(terms[excluded[i]] || [], file) ||
+            $u.contains(titleterms[excluded[i]] || [], file)) {
           valid = false;
           break;
         }
@@ -584,7 +717,10 @@ var Search = {
 
       // 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]);
+        // select one (max) score for the file.
+        // for better ranking, we should calculate ranking by using words statistics like basic tf-idf...
+        var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]}));
+        results.push([docnames[file], titles[file], '', null, score, filenames[file]]);
       }
     }
     return results;
@@ -594,7 +730,7 @@ var Search = {
    * 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
+   * words. the first one is used to find the occurrence, the
    * latter for highlighting it.
    */
   makeSearchSummary : function(text, keywords, hlwords) {
diff --git a/docs/usrman/_static/sidebar.js b/docs/usrman/_static/sidebar.js
index 4f09a0d..332bbf2 100644
--- a/docs/usrman/_static/sidebar.js
+++ b/docs/usrman/_static/sidebar.js
@@ -16,7 +16,7 @@
  * Once the browser is closed the cookie is deleted and the position
  * reset to the default (expanded).
  *
- * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2017 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  *
  */
diff --git a/docs/usrman/_static/underscore-1.3.1.js b/docs/usrman/_static/underscore-1.3.1.js
new file mode 100644
index 0000000..208d4cd
--- /dev/null
+++ b/docs/usrman/_static/underscore-1.3.1.js
@@ -0,0 +1,999 @@
+//     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() {
+
+  // Baseline setup
+  // --------------
+
+  // Establish the root object, `window` in the browser, or `global` on the server.
+  var root = this;
+
+  // Save the previous value of the `_` variable.
+  var previousUnderscore = root._;
+
+  // Establish the object that gets returned to break out of a loop iteration.
+  var breaker = {};
+
+  // Save bytes in the minified (but not gzipped) version:
+  var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;
+
+  // Create quick reference variables for speed access to core prototypes.
+  var slice            = ArrayProto.slice,
+      unshift          = ArrayProto.unshift,
+      toString         = ObjProto.toString,
+      hasOwnProperty   = ObjProto.hasOwnProperty;
+
+  // All **ECMAScript 5** native function implementations that we hope to use
+  // are declared here.
+  var
+    nativeForEach      = ArrayProto.forEach,
+    nativeMap          = ArrayProto.map,
+    nativeReduce       = ArrayProto.reduce,
+    nativeReduceRight  = ArrayProto.reduceRight,
+    nativeFilter       = ArrayProto.filter,
+    nativeEvery        = ArrayProto.every,
+    nativeSome         = ArrayProto.some,
+    nativeIndexOf      = ArrayProto.indexOf,
+    nativeLastIndexOf  = ArrayProto.lastIndexOf,
+    nativeIsArray      = Array.isArray,
+    nativeKeys         = Object.keys,
+    nativeBind         = FuncProto.bind;
+
+  // Create a safe reference to the Underscore object for use below.
+  var _ = function(obj) { return new wrapper(obj); };
+
+  // Export the Underscore object for **Node.js**, with
+  // backwards-compatibility for the old `require()` API. If we're in
+  // the browser, add `_` as a global object via a string identifier,
+  // for Closure Compiler "advanced" mode.
+  if (typeof exports !== 'undefined') {
+    if (typeof module !== 'undefined' && module.exports) {
+      exports = module.exports = _;
+    }
+    exports._ = _;
+  } else {
+    root['_'] = _;
+  }
+
+  // Current version.
+  _.VERSION = '1.3.1';
+
+  // Collection Functions
+  // --------------------
+
+  // The cornerstone, an `each` implementation, aka `forEach`.
+  // Handles objects with the built-in `forEach`, arrays, and raw objects.
+  // Delegates to **ECMAScript 5**'s native `forEach` if available.
+  var each = _.each = _.forEach = function(obj, iterator, context) {
+    if (obj == null) return;
+    if (nativeForEach && obj.forEach === nativeForEach) {
+      obj.forEach(iterator, context);
+    } else if (obj.length === +obj.length) {
+      for (var i = 0, l = obj.length; i < l; i++) {
+        if (i in obj && iterator.call(context, obj[i], i, obj) === breaker) return;
+      }
+    } else {
+      for (var key in obj) {
+        if (_.has(obj, key)) {
+          if (iterator.call(context, obj[key], key, obj) === breaker) return;
+        }
+      }
+    }
+  };
+
+  // Return the results of applying the iterator to each element.
+  // Delegates to **ECMAScript 5**'s native `map` if available.
+  _.map = _.collect = function(obj, iterator, context) {
+    var results = [];
+    if (obj == null) return results;
+    if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);
+    each(obj, function(value, index, list) {
+      results[results.length] = iterator.call(context, value, index, list);
+    });
+    if (obj.length === +obj.length) results.length = obj.length;
+    return results;
+  };
+
+  // **Reduce** builds up a single result from a list of values, aka `inject`,
+  // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available.
+  _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) {
+    var initial = arguments.length > 2;
+    if (obj == null) obj = [];
+    if (nativeReduce && obj.reduce === nativeReduce) {
+      if (context) iterator = _.bind(iterator, context);
+      return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator);
+    }
+    each(obj, function(value, index, list) {
+      if (!initial) {
+        memo = value;
+        initial = true;
+      } else {
+        memo = iterator.call(context, memo, value, index, list);
+      }
+    });
+    if (!initial) throw new TypeError('Reduce of empty array with no initial value');
+    return memo;
+  };
+
+  // The right-associative version of reduce, also known as `foldr`.
+  // Delegates to **ECMAScript 5**'s native `reduceRight` if available.
+  _.reduceRight = _.foldr = function(obj, iterator, memo, context) {
+    var initial = arguments.length > 2;
+    if (obj == null) obj = [];
+    if (nativeReduceRight && obj.reduceRight === nativeReduceRight) {
+      if (context) iterator = _.bind(iterator, context);
+      return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator);
+    }
+    var reversed = _.toArray(obj).reverse();
+    if (context && !initial) iterator = _.bind(iterator, context);
+    return initial ? _.reduce(reversed, iterator, memo, context) : _.reduce(reversed, iterator);
+  };
+
+  // Return the first value which passes a truth test. Aliased as `detect`.
+  _.find = _.detect = function(obj, iterator, context) {
+    var result;
+    any(obj, function(value, index, list) {
+      if (iterator.call(context, value, index, list)) {
+        result = value;
+        return true;
+      }
+    });
+    return result;
+  };
+
+  // Return all the elements that pass a truth test.
+  // Delegates to **ECMAScript 5**'s native `filter` if available.
+  // Aliased as `select`.
+  _.filter = _.select = function(obj, iterator, context) {
+    var results = [];
+    if (obj == null) return results;
+    if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context);
+    each(obj, function(value, index, list) {
+      if (iterator.call(context, value, index, list)) results[results.length] = value;
+    });
+    return results;
+  };
+
+  // Return all the elements for which a truth test fails.
+  _.reject = function(obj, iterator, context) {
+    var results = [];
+    if (obj == null) return results;
+    each(obj, function(value, index, list) {
+      if (!iterator.call(context, value, index, list)) results[results.length] = value;
+    });
+    return results;
+  };
+
+  // Determine whether all of the elements match a truth test.
+  // Delegates to **ECMAScript 5**'s native `every` if available.
+  // Aliased as `all`.
+  _.every = _.all = function(obj, iterator, context) {
+    var result = true;
+    if (obj == null) return result;
+    if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context);
+    each(obj, function(value, index, list) {
+      if (!(result = result && iterator.call(context, value, index, list))) return breaker;
+    });
+    return result;
+  };
+
+  // Determine if at least one element in the object matches a truth test.
+  // Delegates to **ECMAScript 5**'s native `some` if available.
+  // Aliased as `any`.
+  var any = _.some = _.any = function(obj, iterator, context) {
+    iterator || (iterator = _.identity);
+    var result = false;
+    if (obj == null) return result;
+    if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);
+    each(obj, function(value, index, list) {
+      if (result || (result = iterator.call(context, value, index, list))) return breaker;
+    });
+    return !!result;
+  };
+
+  // Determine if a given value is included in the array or object using `===`.
+  // Aliased as `contains`.
+  _.include = _.contains = function(obj, target) {
+    var found = false;
+    if (obj == null) return found;
+    if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;
+    found = any(obj, function(value) {
+      return value === target;
+    });
+    return found;
+  };
+
+  // Invoke a method (with arguments) on every item in a collection.
+  _.invoke = function(obj, method) {
+    var args = slice.call(arguments, 2);
+    return _.map(obj, function(value) {
+      return (_.isFunction(method) ? method || value : value[method]).apply(value, args);
+    });
+  };
+
+  // Convenience version of a common use case of `map`: fetching a property.
+  _.pluck = function(obj, key) {
+    return _.map(obj, function(value){ return value[key]; });
+  };
+
+  // Return the maximum element or (element-based computation).
+  _.max = function(obj, iterator, context) {
+    if (!iterator && _.isArray(obj)) return Math.max.apply(Math, obj);
+    if (!iterator && _.isEmpty(obj)) return -Infinity;
+    var result = {computed : -Infinity};
+    each(obj, function(value, index, list) {
+      var computed = iterator ? iterator.call(context, value, index, list) : value;
+      computed >= result.computed && (result = {value : value, computed : computed});
+    });
+    return result.value;
+  };
+
+  // Return the minimum element (or element-based computation).
+  _.min = function(obj, iterator, context) {
+    if (!iterator && _.isArray(obj)) return Math.min.apply(Math, obj);
+    if (!iterator && _.isEmpty(obj)) return Infinity;
+    var result = {computed : Infinity};
+    each(obj, function(value, index, list) {
+      var computed = iterator ? iterator.call(context, value, index, list) : value;
+      computed < result.computed && (result = {value : value, computed : computed});
+    });
+    return result.value;
+  };
+
+  // Shuffle an array.
+  _.shuffle = function(obj) {
+    var shuffled = [], rand;
+    each(obj, function(value, index, list) {
+      if (index == 0) {
+        shuffled[0] = value;
+      } else {
+        rand = Math.floor(Math.random() * (index + 1));
+        shuffled[index] = shuffled[rand];
+        shuffled[rand] = value;
+      }
+    });
+    return shuffled;
+  };
+
+  // Sort the object's values by a criterion produced by an iterator.
+  _.sortBy = function(obj, iterator, context) {
+    return _.pluck(_.map(obj, function(value, index, list) {
+      return {
+        value : value,
+        criteria : iterator.call(context, value, index, list)
+      };
+    }).sort(function(left, right) {
+      var a = left.criteria, b = right.criteria;
+      return a < b ? -1 : a > b ? 1 : 0;
+    }), 'value');
+  };
+
+  // Groups the object's values by a criterion. Pass either a string attribute
+  // to group by, or a function that returns the criterion.
+  _.groupBy = function(obj, val) {
+    var result = {};
+    var iterator = _.isFunction(val) ? val : function(obj) { return obj[val]; };
+    each(obj, function(value, index) {
+      var key = iterator(value, index);
+      (result[key] || (result[key] = [])).push(value);
+    });
+    return result;
+  };
+
+  // Use a comparator function to figure out at what index an object should
+  // be inserted so as to maintain order. Uses binary search.
+  _.sortedIndex = function(array, obj, iterator) {
+    iterator || (iterator = _.identity);
+    var low = 0, high = array.length;
+    while (low < high) {
+      var mid = (low + high) >> 1;
+      iterator(array[mid]) < iterator(obj) ? low = mid + 1 : high = mid;
+    }
+    return low;
+  };
+
+  // Safely convert anything iterable into a real, live array.
+  _.toArray = function(iterable) {
+    if (!iterable)                return [];
+    if (iterable.toArray)         return iterable.toArray();
+    if (_.isArray(iterable))      return slice.call(iterable);
+    if (_.isArguments(iterable))  return slice.call(iterable);
+    return _.values(iterable);
+  };
+
+  // Return the number of elements in an object.
+  _.size = function(obj) {
+    return _.toArray(obj).length;
+  };
+
+  // Array Functions
+  // ---------------
+
+  // Get the first element of an array. Passing **n** will return the first N
+  // values in the array. Aliased as `head`. The **guard** check allows it to work
+  // with `_.map`.
+  _.first = _.head = function(array, n, guard) {
+    return (n != null) && !guard ? slice.call(array, 0, n) : array[0];
+  };
+
+  // Returns everything but the last entry of the array. Especcialy useful on
+  // the arguments object. Passing **n** will return all the values in
+  // the array, excluding the last N. The **guard** check allows it to work with
+  // `_.map`.
+  _.initial = function(array, n, guard) {
+    return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n));
+  };
+
+  // Get the last element of an array. Passing **n** will return the last N
+  // values in the array. The **guard** check allows it to work with `_.map`.
+  _.last = function(array, n, guard) {
+    if ((n != null) && !guard) {
+      return slice.call(array, Math.max(array.length - n, 0));
+    } else {
+      return array[array.length - 1];
+    }
+  };
+
+  // Returns everything but the first entry of the array. Aliased as `tail`.
+  // Especially useful on the arguments object. Passing an **index** will return
+  // the rest of the values in the array from that index onward. The **guard**
+  // check allows it to work with `_.map`.
+  _.rest = _.tail = function(array, index, guard) {
+    return slice.call(array, (index == null) || guard ? 1 : index);
+  };
+
+  // Trim out all falsy values from an array.
+  _.compact = function(array) {
+    return _.filter(array, function(value){ return !!value; });
+  };
+
+  // Return a completely flattened version of an array.
+  _.flatten = function(array, shallow) {
+    return _.reduce(array, function(memo, value) {
+      if (_.isArray(value)) return memo.concat(shallow ? value : _.flatten(value));
+      memo[memo.length] = value;
+      return memo;
+    }, []);
+  };
+
+  // Return a version of the array that does not contain the specified value(s).
+  _.without = function(array) {
+    return _.difference(array, slice.call(arguments, 1));
+  };
+
+  // Produce a duplicate-free version of the array. If the array has already
+  // been sorted, you have the option of using a faster algorithm.
+  // Aliased as `unique`.
+  _.uniq = _.unique = function(array, isSorted, iterator) {
+    var initial = iterator ? _.map(array, iterator) : array;
+    var result = [];
+    _.reduce(initial, function(memo, el, i) {
+      if (0 == i || (isSorted === true ? _.last(memo) != el : !_.include(memo, el))) {
+        memo[memo.length] = el;
+        result[result.length] = array[i];
+      }
+      return memo;
+    }, []);
+    return result;
+  };
+
+  // Produce an array that contains the union: each distinct element from all of
+  // the passed-in arrays.
+  _.union = function() {
+    return _.uniq(_.flatten(arguments, true));
+  };
+
+  // Produce an array that contains every item shared between all the
+  // passed-in arrays. (Aliased as "intersect" for back-compat.)
+  _.intersection = _.intersect = function(array) {
+    var rest = slice.call(arguments, 1);
+    return _.filter(_.uniq(array), function(item) {
+      return _.every(rest, function(other) {
+        return _.indexOf(other, item) >= 0;
+      });
+    });
+  };
+
+  // Take the difference between one array and a number of other arrays.
+  // Only the elements present in just the first array will remain.
+  _.difference = function(array) {
+    var rest = _.flatten(slice.call(arguments, 1));
+    return _.filter(array, function(value){ return !_.include(rest, value); });
+  };
+
+  // Zip together multiple lists into a single array -- elements that share
+  // an index go together.
+  _.zip = function() {
+    var args = slice.call(arguments);
+    var length = _.max(_.pluck(args, 'length'));
+    var results = new Array(length);
+    for (var i = 0; i < length; i++) results[i] = _.pluck(args, "" + i);
+    return results;
+  };
+
+  // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**),
+  // we need this function. Return the position of the first occurrence of an
+  // item in an array, or -1 if the item is not included in the array.
+  // Delegates to **ECMAScript 5**'s native `indexOf` if available.
+  // If the array is large and already in sort order, pass `true`
+  // for **isSorted** to use binary search.
+  _.indexOf = function(array, item, isSorted) {
+    if (array == null) return -1;
+    var i, l;
+    if (isSorted) {
+      i = _.sortedIndex(array, item);
+      return array[i] === item ? i : -1;
+    }
+    if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item);
+    for (i = 0, l = array.length; i < l; i++) if (i in array && array[i] === item) return i;
+    return -1;
+  };
+
+  // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available.
+  _.lastIndexOf = function(array, item) {
+    if (array == null) return -1;
+    if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) return array.lastIndexOf(item);
+    var i = array.length;
+    while (i--) if (i in array && array[i] === item) return i;
+    return -1;
+  };
+
+  // Generate an integer Array containing an arithmetic progression. A port of
+  // the native Python `range()` function. See
+  // [the Python documentation](http://docs.python.org/library/functions.html#range).
+  _.range = function(start, stop, step) {
+    if (arguments.length <= 1) {
+      stop = start || 0;
+      start = 0;
+    }
+    step = arguments[2] || 1;
+
+    var len = Math.max(Math.ceil((stop - start) / step), 0);
+    var idx = 0;
+    var range = new Array(len);
+
+    while(idx < len) {
+      range[idx++] = start;
+      start += step;
+    }
+
+    return range;
+  };
+
+  // Function (ahem) Functions
+  // ------------------
+
+  // Reusable constructor function for prototype setting.
+  var ctor = function(){};
+
+  // Create a function bound to a given object (assigning `this`, and arguments,
+  // optionally). Binding with arguments is also known as `curry`.
+  // Delegates to **ECMAScript 5**'s native `Function.bind` if available.
+  // We check for `func.bind` first, to fail fast when `func` is undefined.
+  _.bind = function bind(func, context) {
+    var bound, args;
+    if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
+    if (!_.isFunction(func)) throw new TypeError;
+    args = slice.call(arguments, 2);
+    return bound = function() {
+      if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments)));
+      ctor.prototype = func.prototype;
+      var self = new ctor;
+      var result = func.apply(self, args.concat(slice.call(arguments)));
+      if (Object(result) === result) return result;
+      return self;
+    };
+  };
+
+  // Bind all of an object's methods to that object. Useful for ensuring that
+  // all callbacks defined on an object belong to it.
+  _.bindAll = function(obj) {
+    var funcs = slice.call(arguments, 1);
+    if (funcs.length == 0) funcs = _.functions(obj);
+    each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); });
+    return obj;
+  };
+
+  // Memoize an expensive function by storing its results.
+  _.memoize = function(func, hasher) {
+    var memo = {};
+    hasher || (hasher = _.identity);
+    return function() {
+      var key = hasher.apply(this, arguments);
+      return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments));
+    };
+  };
+
+  // Delays a function for the given number of milliseconds, and then calls
+  // it with the arguments supplied.
+  _.delay = function(func, wait) {
+    var args = slice.call(arguments, 2);
+    return setTimeout(function(){ return func.apply(func, args); }, wait);
+  };
+
+  // Defers a function, scheduling it to run after the current call stack has
+  // cleared.
+  _.defer = function(func) {
+    return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));
+  };
+
+  // Returns a function, that, when invoked, will only be triggered at most once
+  // during a given window of time.
+  _.throttle = function(func, wait) {
+    var context, args, timeout, throttling, more;
+    var whenDone = _.debounce(function(){ more = throttling = false; }, wait);
+    return function() {
+      context = this; args = arguments;
+      var later = function() {
+        timeout = null;
+        if (more) func.apply(context, args);
+        whenDone();
+      };
+      if (!timeout) timeout = setTimeout(later, wait);
+      if (throttling) {
+        more = true;
+      } else {
+        func.apply(context, args);
+      }
+      whenDone();
+      throttling = true;
+    };
+  };
+
+  // Returns a function, that, as long as it continues to be invoked, will not
+  // be triggered. The function will be called after it stops being called for
+  // N milliseconds.
+  _.debounce = function(func, wait) {
+    var timeout;
+    return function() {
+      var context = this, args = arguments;
+      var later = function() {
+        timeout = null;
+        func.apply(context, args);
+      };
+      clearTimeout(timeout);
+      timeout = setTimeout(later, wait);
+    };
+  };
+
+  // Returns a function that will be executed at most one time, no matter how
+  // often you call it. Useful for lazy initialization.
+  _.once = function(func) {
+    var ran = false, memo;
+    return function() {
+      if (ran) return memo;
+      ran = true;
+      return memo = func.apply(this, arguments);
+    };
+  };
+
+  // Returns the first function passed as an argument to the second,
+  // allowing you to adjust arguments, run code before and after, and
+  // conditionally execute the original function.
+  _.wrap = function(func, wrapper) {
+    return function() {
+      var args = [func].concat(slice.call(arguments, 0));
+      return wrapper.apply(this, args);
+    };
+  };
+
+  // Returns a function that is the composition of a list of functions, each
+  // consuming the return value of the function that follows.
+  _.compose = function() {
+    var funcs = arguments;
+    return function() {
+      var args = arguments;
+      for (var i = funcs.length - 1; i >= 0; i--) {
+        args = [funcs[i].apply(this, args)];
+      }
+      return args[0];
+    };
+  };
+
+  // Returns a function that will only be executed after being called N times.
+  _.after = function(times, func) {
+    if (times <= 0) return func();
+    return function() {
+      if (--times < 1) { return func.apply(this, arguments); }
+    };
+  };
+
+  // Object Functions
+  // ----------------
+
+  // Retrieve the names of an object's properties.
+  // Delegates to **ECMAScript 5**'s native `Object.keys`
+  _.keys = nativeKeys || function(obj) {
+    if (obj !== Object(obj)) throw new TypeError('Invalid object');
+    var keys = [];
+    for (var key in obj) if (_.has(obj, key)) keys[keys.length] = key;
+    return keys;
+  };
+
+  // Retrieve the values of an object's properties.
+  _.values = function(obj) {
+    return _.map(obj, _.identity);
+  };
+
+  // Return a sorted list of the function names available on the object.
+  // Aliased as `methods`
+  _.functions = _.methods = function(obj) {
+    var names = [];
+    for (var key in obj) {
+      if (_.isFunction(obj[key])) names.push(key);
+    }
+    return names.sort();
+  };
+
+  // Extend a given object with all the properties in passed-in object(s).
+  _.extend = function(obj) {
+    each(slice.call(arguments, 1), function(source) {
+      for (var prop in source) {
+        obj[prop] = source[prop];
+      }
+    });
+    return obj;
+  };
+
+  // Fill in a given object with default properties.
+  _.defaults = function(obj) {
+    each(slice.call(arguments, 1), function(source) {
+      for (var prop in source) {
+        if (obj[prop] == null) obj[prop] = source[prop];
+      }
+    });
+    return obj;
+  };
+
+  // Create a (shallow-cloned) duplicate of an object.
+  _.clone = function(obj) {
+    if (!_.isObject(obj)) return obj;
+    return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
+  };
+
+  // Invokes interceptor with the obj, and then returns obj.
+  // The primary purpose of this method is to "tap into" a method chain, in
+  // order to perform operations on intermediate results within the chain.
+  _.tap = function(obj, interceptor) {
+    interceptor(obj);
+    return obj;
+  };
+
+  // Internal recursive comparison function.
+  function eq(a, b, stack) {
+    // Identical objects are equal. `0 === -0`, but they aren't identical.
+    // See the Harmony `egal` proposal: http://wiki.ecmascript.org/doku.php?id=harmony:egal.
+    if (a === b) return a !== 0 || 1 / a == 1 / b;
+    // A strict comparison is necessary because `null == undefined`.
+    if (a == null || b == null) return a === b;
+    // Unwrap any wrapped objects.
+    if (a._chain) a = a._wrapped;
+    if (b._chain) b = b._wrapped;
+    // Invoke a custom `isEqual` method if one is provided.
+    if (a.isEqual && _.isFunction(a.isEqual)) return a.isEqual(b);
+    if (b.isEqual && _.isFunction(b.isEqual)) return b.isEqual(a);
+    // Compare `[[Class]]` names.
+    var className = toString.call(a);
+    if (className != toString.call(b)) return false;
+    switch (className) {
+      // Strings, numbers, dates, and booleans are compared by value.
+      case '[object String]':
+        // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
+        // equivalent to `new String("5")`.
+        return a == String(b);
+      case '[object Number]':
+        // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for
+        // other numeric values.
+        return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b);
+      case '[object Date]':
+      case '[object Boolean]':
+        // Coerce dates and booleans to numeric primitive values. Dates are compared by their
+        // millisecond representations. Note that invalid dates with millisecond representations
+        // of `NaN` are not equivalent.
+        return +a == +b;
+      // RegExps are compared by their source patterns and flags.
+      case '[object RegExp]':
+        return a.source == b.source &&
+               a.global == b.global &&
+               a.multiline == b.multiline &&
+               a.ignoreCase == b.ignoreCase;
+    }
+    if (typeof a != 'object' || typeof b != 'object') return false;
+    // Assume equality for cyclic structures. The algorithm for detecting cyclic
+    // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
+    var length = stack.length;
+    while (length--) {
+      // Linear search. Performance is inversely proportional to the number of
+      // unique nested structures.
+      if (stack[length] == a) return true;
+    }
+    // Add the first object to the stack of traversed objects.
+    stack.push(a);
+    var size = 0, result = true;
+    // Recursively compare objects and arrays.
+    if (className == '[object Array]') {
+      // Compare array lengths to determine if a deep comparison is necessary.
+      size = a.length;
+      result = size == b.length;
+      if (result) {
+        // Deep compare the contents, ignoring non-numeric properties.
+        while (size--) {
+          // Ensure commutative equality for sparse arrays.
+          if (!(result = size in a == size in b && eq(a[size], b[size], stack))) break;
+        }
+      }
+    } else {
+      // Objects with different constructors are not equivalent.
+      if ('constructor' in a != 'constructor' in b || a.constructor != b.constructor) return false;
+      // Deep compare objects.
+      for (var key in a) {
+        if (_.has(a, key)) {
+          // Count the expected number of properties.
+          size++;
+          // Deep compare each member.
+          if (!(result = _.has(b, key) && eq(a[key], b[key], stack))) break;
+        }
+      }
+      // Ensure that both objects contain the same number of properties.
+      if (result) {
+        for (key in b) {
+          if (_.has(b, key) && !(size--)) break;
+        }
+        result = !size;
+      }
+    }
+    // Remove the first object from the stack of traversed objects.
+    stack.pop();
+    return result;
+  }
+
+  // Perform a deep comparison to check if two objects are equal.
+  _.isEqual = function(a, b) {
+    return eq(a, b, []);
+  };
+
+  // Is a given array, string, or object empty?
+  // An "empty" object has no enumerable own-properties.
+  _.isEmpty = function(obj) {
+    if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;
+    for (var key in obj) if (_.has(obj, key)) return false;
+    return true;
+  };
+
+  // Is a given value a DOM element?
+  _.isElement = function(obj) {
+    return !!(obj && obj.nodeType == 1);
+  };
+
+  // Is a given value an array?
+  // Delegates to ECMA5's native Array.isArray
+  _.isArray = nativeIsArray || function(obj) {
+    return toString.call(obj) == '[object Array]';
+  };
+
+  // Is a given variable an object?
+  _.isObject = function(obj) {
+    return obj === Object(obj);
+  };
+
+  // Is a given variable an arguments object?
+  _.isArguments = function(obj) {
+    return toString.call(obj) == '[object Arguments]';
+  };
+  if (!_.isArguments(arguments)) {
+    _.isArguments = function(obj) {
+      return !!(obj && _.has(obj, 'callee'));
+    };
+  }
+
+  // Is a given value a function?
+  _.isFunction = function(obj) {
+    return toString.call(obj) == '[object Function]';
+  };
+
+  // Is a given value a string?
+  _.isString = function(obj) {
+    return toString.call(obj) == '[object String]';
+  };
+
+  // Is a given value a number?
+  _.isNumber = function(obj) {
+    return toString.call(obj) == '[object Number]';
+  };
+
+  // Is the given value `NaN`?
+  _.isNaN = function(obj) {
+    // `NaN` is the only value for which `===` is not reflexive.
+    return obj !== obj;
+  };
+
+  // Is a given value a boolean?
+  _.isBoolean = function(obj) {
+    return obj === true || obj === false || toString.call(obj) == '[object Boolean]';
+  };
+
+  // Is a given value a date?
+  _.isDate = function(obj) {
+    return toString.call(obj) == '[object Date]';
+  };
+
+  // Is the given value a regular expression?
+  _.isRegExp = function(obj) {
+    return toString.call(obj) == '[object RegExp]';
+  };
+
+  // Is a given value equal to null?
+  _.isNull = function(obj) {
+    return obj === null;
+  };
+
+  // Is a given variable undefined?
+  _.isUndefined = function(obj) {
+    return obj === void 0;
+  };
+
+  // Has own property?
+  _.has = function(obj, key) {
+    return hasOwnProperty.call(obj, key);
+  };
+
+  // Utility Functions
+  // -----------------
+
+  // Run Underscore.js in *noConflict* mode, returning the `_` variable to its
+  // previous owner. Returns a reference to the Underscore object.
+  _.noConflict = function() {
+    root._ = previousUnderscore;
+    return this;
+  };
+
+  // Keep the identity function around for default iterators.
+  _.identity = function(value) {
+    return value;
+  };
+
+  // Run a function **n** times.
+  _.times = function (n, iterator, context) {
+    for (var i = 0; i < n; i++) iterator.call(context, i);
+  };
+
+  // Escape a string for HTML interpolation.
+  _.escape = function(string) {
+    return (''+string).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, '&#x27;').replace(/\//g,'&#x2F;');
+  };
+
+  // Add your own custom functions to the Underscore object, ensuring that
+  // they're correctly added to the OOP wrapper as well.
+  _.mixin = function(obj) {
+    each(_.functions(obj), function(name){
+      addToWrapper(name, _[name] = obj[name]);
+    });
+  };
+
+  // Generate a unique integer id (unique within the entire client session).
+  // Useful for temporary DOM ids.
+  var idCounter = 0;
+  _.uniqueId = function(prefix) {
+    var id = idCounter++;
+    return prefix ? prefix + id : id;
+  };
+
+  // By default, Underscore uses ERB-style template delimiters, change the
+  // following template settings to use alternative delimiters.
+  _.templateSettings = {
+    evaluate    : /<%([\s\S]+?)%>/g,
+    interpolate : /<%=([\s\S]+?)%>/g,
+    escape      : /<%-([\s\S]+?)%>/g
+  };
+
+  // When customizing `templateSettings`, if you don't want to define an
+  // interpolation, evaluation or escaping regex, we need one that is
+  // guaranteed not to match.
+  var noMatch = /.^/;
+
+  // Within an interpolation, evaluation, or escaping, remove HTML escaping
+  // that had been previously added.
+  var unescape = function(code) {
+    return code.replace(/\\\\/g, '\\').replace(/\\'/g, "'");
+  };
+
+  // JavaScript micro-templating, similar to John Resig's implementation.
+  // Underscore templating handles arbitrary delimiters, preserves whitespace,
+  // and correctly escapes quotes within interpolated code.
+  _.template = function(str, data) {
+    var c  = _.templateSettings;
+    var tmpl = 'var __p=[],print=function(){__p.push.apply(__p,arguments);};' +
+      'with(obj||{}){__p.push(\'' +
+      str.replace(/\\/g, '\\\\')
+         .replace(/'/g, "\\'")
+         .replace(c.escape || noMatch, function(match, code) {
+           return "',_.escape(" + unescape(code) + "),'";
+         })
+         .replace(c.interpolate || noMatch, function(match, code) {
+           return "'," + unescape(code) + ",'";
+         })
+         .replace(c.evaluate || noMatch, function(match, code) {
+           return "');" + unescape(code).replace(/[\r\n\t]/g, ' ') + ";__p.push('";
+         })
+         .replace(/\r/g, '\\r')
+         .replace(/\n/g, '\\n')
+         .replace(/\t/g, '\\t')
+         + "');}return __p.join('');";
+    var func = new Function('obj', '_', tmpl);
+    if (data) return func(data, _);
+    return function(data) {
+      return func.call(this, data, _);
+    };
+  };
+
+  // Add a "chain" function, which will delegate to the wrapper.
+  _.chain = function(obj) {
+    return _(obj).chain();
+  };
+
+  // The OOP Wrapper
+  // ---------------
+
+  // If Underscore is called as a function, it returns a wrapped object that
+  // can be used OO-style. This wrapper holds altered versions of all the
+  // underscore functions. Wrapped objects may be chained.
+  var wrapper = function(obj) { this._wrapped = obj; };
+
+  // Expose `wrapper.prototype` as `_.prototype`
+  _.prototype = wrapper.prototype;
+
+  // Helper function to continue chaining intermediate results.
+  var result = function(obj, chain) {
+    return chain ? _(obj).chain() : obj;
+  };
+
+  // A method to easily add functions to the OOP wrapper.
+  var addToWrapper = function(name, func) {
+    wrapper.prototype[name] = function() {
+      var args = slice.call(arguments);
+      unshift.call(args, this._wrapped);
+      return result(func.apply(_, args), this._chain);
+    };
+  };
+
+  // Add all of the Underscore functions to the wrapper object.
+  _.mixin(_);
+
+  // Add all mutator Array functions to the wrapper.
+  each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
+    var method = ArrayProto[name];
+    wrapper.prototype[name] = function() {
+      var wrapped = this._wrapped;
+      method.apply(wrapped, arguments);
+      var length = wrapped.length;
+      if ((name == 'shift' || name == 'splice') && length === 0) delete wrapped[0];
+      return result(wrapped, this._chain);
+    };
+  });
+
+  // Add all accessor Array functions to the wrapper.
+  each(['concat', 'join', 'slice'], function(name) {
+    var method = ArrayProto[name];
+    wrapper.prototype[name] = function() {
+      return result(method.apply(this._wrapped, arguments), this._chain);
+    };
+  });
+
+  // Start chaining a wrapped Underscore object.
+  wrapper.prototype.chain = function() {
+    this._chain = true;
+    return this;
+  };
+
+  // Extracts the result from a wrapped and chained object.
+  wrapper.prototype.value = function() {
+    return this._wrapped;
+  };
+
+}).call(this);
diff --git a/docs/usrman/_static/up-pressed.png b/docs/usrman/_static/up-pressed.png
index 8bd587a..acee3b6 100644
Binary files a/docs/usrman/_static/up-pressed.png and b/docs/usrman/_static/up-pressed.png differ
diff --git a/docs/usrman/_static/up.png b/docs/usrman/_static/up.png
index b946256..2a940a7 100644
Binary files a/docs/usrman/_static/up.png and b/docs/usrman/_static/up.png differ
diff --git a/docs/usrman/_static/websupport.js b/docs/usrman/_static/websupport.js
index 71c0a13..53f6a45 100644
--- a/docs/usrman/_static/websupport.js
+++ b/docs/usrman/_static/websupport.js
@@ -2,9 +2,9 @@
  * websupport.js
  * ~~~~~~~~~~~~~
  *
- * sphinx.websupport utilties for all documentation.
+ * sphinx.websupport utilities for all documentation.
  *
- * :copyright: Copyright 2007-2014 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2017 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  *
  */
@@ -50,51 +50,51 @@
   }
 
   function initEvents() {
-    $('a.comment-close').live("click", function(event) {
+    $(document).on("click", 'a.comment-close', function(event) {
       event.preventDefault();
       hide($(this).attr('id').substring(2));
     });
-    $('a.vote').live("click", function(event) {
+    $(document).on("click", 'a.vote', function(event) {
       event.preventDefault();
       handleVote($(this));
     });
-    $('a.reply').live("click", function(event) {
+    $(document).on("click", 'a.reply', function(event) {
       event.preventDefault();
       openReply($(this).attr('id').substring(2));
     });
-    $('a.close-reply').live("click", function(event) {
+    $(document).on("click", 'a.close-reply', function(event) {
       event.preventDefault();
       closeReply($(this).attr('id').substring(2));
     });
-    $('a.sort-option').live("click", function(event) {
+    $(document).on("click", 'a.sort-option', function(event) {
       event.preventDefault();
       handleReSort($(this));
     });
-    $('a.show-proposal').live("click", function(event) {
+    $(document).on("click", 'a.show-proposal', function(event) {
       event.preventDefault();
       showProposal($(this).attr('id').substring(2));
     });
-    $('a.hide-proposal').live("click", function(event) {
+    $(document).on("click", 'a.hide-proposal', function(event) {
       event.preventDefault();
       hideProposal($(this).attr('id').substring(2));
     });
-    $('a.show-propose-change').live("click", function(event) {
+    $(document).on("click", 'a.show-propose-change', function(event) {
       event.preventDefault();
       showProposeChange($(this).attr('id').substring(2));
     });
-    $('a.hide-propose-change').live("click", function(event) {
+    $(document).on("click", 'a.hide-propose-change', function(event) {
       event.preventDefault();
       hideProposeChange($(this).attr('id').substring(2));
     });
-    $('a.accept-comment').live("click", function(event) {
+    $(document).on("click", 'a.accept-comment', function(event) {
       event.preventDefault();
       acceptComment($(this).attr('id').substring(2));
     });
-    $('a.delete-comment').live("click", function(event) {
+    $(document).on("click", 'a.delete-comment', function(event) {
       event.preventDefault();
       deleteComment($(this).attr('id').substring(2));
     });
-    $('a.comment-markup').live("click", function(event) {
+    $(document).on("click", 'a.comment-markup', function(event) {
       event.preventDefault();
       toggleCommentMarkupBox($(this).attr('id').substring(2));
     });
@@ -700,8 +700,8 @@
         (<a href="#" class="comment-markup" id="ab<%id%>">markup</a>):</p>\
       <div class="comment-markup-box" id="mb<%id%>">\
         reStructured text markup: <i>*emph*</i>, <b>**strong**</b>, \
-        <tt>``code``</tt>, \
-        code blocks: <tt>::</tt> and an indented block after blank line</div>\
+        <code>``code``</code>, \
+        code blocks: <code>::</code> and an indented block after blank line</div>\
       <form method="post" id="cf<%id%>" class="comment-form" action="">\
         <textarea name="comment" cols="80"></textarea>\
         <p class="propose-button">\
diff --git a/docs/usrman/citing.html b/docs/usrman/citing.html
index 43e186f..edfad26 100644
--- a/docs/usrman/citing.html
+++ b/docs/usrman/citing.html
@@ -1,33 +1,32 @@
+
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
-
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    
-    <title>Citations — PETSc for Python 3.7.0 documentation</title>
-    
-    <link rel="stylesheet" href="_static/default.css" type="text/css" />
+    <title>Citations — PETSc for Python 3.8.0 documentation</title>
+    <link rel="stylesheet" href="_static/classic.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.7.0',
+        VERSION:     '3.8.0',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
-        HAS_SOURCE:  true
+        HAS_SOURCE:  true,
+        SOURCELINK_SUFFIX: '.txt'
       };
     </script>
     <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.7.0 documentation" href="index.html" />
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
     <link rel="prev" title="Tutorial" href="tutorial.html" /> 
   </head>
   <body>
-    <div class="related">
+    <div class="related" role="navigation" aria-label="related navigation">
       <h3>Navigation</h3>
       <ul>
         <li class="right" style="margin-right: 10px">
@@ -36,14 +35,14 @@
         <li class="right" >
           <a href="tutorial.html" title="Tutorial"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">PETSc for Python 3.7.0 documentation</a> »</li> 
+        <li class="nav-item nav-item-0"><a href="index.html">PETSc for Python 3.8.0 documentation</a> »</li> 
       </ul>
     </div>  
 
     <div class="document">
       <div class="documentwrapper">
         <div class="bodywrapper">
-          <div class="body">
+          <div class="body" role="main">
             
   <div class="section" id="citations">
 <h1>Citations<a class="headerlink" href="#citations" title="Permalink to this headline">¶</a></h1>
@@ -59,7 +58,7 @@ Advances in Water Resources, 34(9):1124-1139, 2011.
 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.
+<em>PETSc Users Manual</em>, ANL-95/11 - Revision 3.8, 2017.
 <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>
@@ -68,34 +67,33 @@ H. Zhang, and H. Zhang,
           </div>
         </div>
       </div>
-      <div class="sphinxsidebar">
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
         <div class="sphinxsidebarwrapper">
   <h4>Previous topic</h4>
   <p class="topless"><a href="tutorial.html"
                         title="previous chapter">Tutorial</a></p>
-  <h3>This Page</h3>
-  <ul class="this-page-menu">
-    <li><a href="_sources/citing.txt"
-           rel="nofollow">Show Source</a></li>
-  </ul>
-<div id="searchbox" style="display: none">
+  <div role="note" aria-label="source link">
+    <h3>This Page</h3>
+    <ul class="this-page-menu">
+      <li><a href="_sources/citing.rst.txt"
+            rel="nofollow">Show Source</a></li>
+    </ul>
+   </div>
+<div id="searchbox" style="display: none" role="search">
   <h3>Quick search</h3>
     <form class="search" action="search.html" method="get">
-      <input type="text" name="q" />
-      <input type="submit" value="Go" />
+      <div><input type="text" name="q" /></div>
+      <div><input type="submit" value="Go" /></div>
       <input type="hidden" name="check_keywords" value="yes" />
       <input type="hidden" name="area" value="default" />
     </form>
-    <p class="searchtip" style="font-size: 90%">
-    Enter search terms or a module, class or function name.
-    </p>
 </div>
 <script type="text/javascript">$('#searchbox').show(0);</script>
         </div>
       </div>
       <div class="clearer"></div>
     </div>
-    <div class="related">
+    <div class="related" role="navigation" aria-label="related navigation">
       <h3>Navigation</h3>
       <ul>
         <li class="right" style="margin-right: 10px">
@@ -104,12 +102,12 @@ H. Zhang, and H. Zhang,
         <li class="right" >
           <a href="tutorial.html" title="Tutorial"
              >previous</a> |</li>
-        <li><a href="index.html">PETSc for Python 3.7.0 documentation</a> »</li> 
+        <li class="nav-item nav-item-0"><a href="index.html">PETSc for Python 3.8.0 documentation</a> »</li> 
       </ul>
     </div>
-    <div class="footer">
-        © Copyright 2016, Lisandro Dalcin.
-      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    <div class="footer" role="contentinfo">
+        © Copyright 2017, Lisandro Dalcin.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.3.
     </div>
   </body>
 </html>
\ No newline at end of file
diff --git a/docs/usrman/genindex.html b/docs/usrman/genindex.html
index ee7fbad..214da81 100644
--- a/docs/usrman/genindex.html
+++ b/docs/usrman/genindex.html
@@ -1,46 +1,45 @@
 
+
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
-
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    
-    <title>Index — PETSc for Python 3.7.0 documentation</title>
-    
-    <link rel="stylesheet" href="_static/default.css" type="text/css" />
+    <title>Index — PETSc for Python 3.8.0 documentation</title>
+    <link rel="stylesheet" href="_static/classic.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.7.0',
+        VERSION:     '3.8.0',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
-        HAS_SOURCE:  true
+        HAS_SOURCE:  true,
+        SOURCELINK_SUFFIX: '.txt'
       };
     </script>
     <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.7.0 documentation" href="index.html" /> 
+    <link rel="index" title="Index" href="#" />
+    <link rel="search" title="Search" href="search.html" /> 
   </head>
   <body>
-    <div class="related">
+    <div class="related" role="navigation" aria-label="related navigation">
       <h3>Navigation</h3>
       <ul>
         <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.7.0 documentation</a> »</li> 
+        <li class="nav-item nav-item-0"><a href="index.html">PETSc for Python 3.8.0 documentation</a> »</li> 
       </ul>
     </div>  
 
     <div class="document">
       <div class="documentwrapper">
         <div class="bodywrapper">
-          <div class="body">
+          <div class="body" role="main">
             
 
 <h1 id="index">Index</h1>
@@ -55,81 +54,59 @@
 </div>
 <h2 id="A">A</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="install.html#index-4">ARCHFLAGS</a>
-  </dt>
-
-  </dl></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="install.html#index-4">ARCHFLAGS</a>
+</li>
+  </ul></td>
 </tr></table>
 
 <h2 id="E">E</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li>
     environment variable
-  </dt>
-
-      <dd><dl>
-        
-  <dt><a href="install.html#index-4">ARCHFLAGS</a>
-  </dt>
-
-        
-  <dt><a href="install.html#index-2">MACOSX_DEPLOYMENT_TARGET</a>
-  </dt>
-
-        
-  <dt><a href="install.html#index-1">PETSC_ARCH</a>, <a href="install.html#index-6">[1]</a>
-  </dt>
 
-        
-  <dt><a href="install.html#index-0">PETSC_DIR</a>, <a href="install.html#index-5">[1]</a>
-  </dt>
-
-        
-  <dt><a href="install.html#index-3">SDKROOT</a>
-  </dt>
-
-      </dl></dd>
-  </dl></td>
+      <ul>
+        <li><a href="install.html#index-4">ARCHFLAGS</a>
+</li>
+        <li><a href="install.html#index-2">MACOSX_DEPLOYMENT_TARGET</a>
+</li>
+        <li><a href="install.html#index-1">PETSC_ARCH</a>, <a href="install.html#index-6">[1]</a>
+</li>
+        <li><a href="install.html#index-0">PETSC_DIR</a>, <a href="install.html#index-5">[1]</a>
+</li>
+        <li><a href="install.html#index-3">SDKROOT</a>
+</li>
+      </ul></li>
+  </ul></td>
 </tr></table>
 
 <h2 id="M">M</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="install.html#index-2">MACOSX_DEPLOYMENT_TARGET</a>
-  </dt>
-
-  </dl></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="install.html#index-2">MACOSX_DEPLOYMENT_TARGET</a>
+</li>
+  </ul></td>
 </tr></table>
 
 <h2 id="P">P</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="install.html#index-1">PETSC_ARCH</a>, <a href="install.html#index-6">[1]</a>
-  </dt>
-
-  </dl></td>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="install.html#index-0">PETSC_DIR</a>, <a href="install.html#index-5">[1]</a>
-  </dt>
-
-  </dl></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="install.html#index-1">PETSC_ARCH</a>, <a href="install.html#index-6">[1]</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="install.html#index-0">PETSC_DIR</a>, <a href="install.html#index-5">[1]</a>
+</li>
+  </ul></td>
 </tr></table>
 
 <h2 id="S">S</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
-  <td style="width: 33%" valign="top"><dl>
-      
-  <dt><a href="install.html#index-3">SDKROOT</a>
-  </dt>
-
-  </dl></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="install.html#index-3">SDKROOT</a>
+</li>
+  </ul></td>
 </tr></table>
 
 
@@ -137,40 +114,37 @@
           </div>
         </div>
       </div>
-      <div class="sphinxsidebar">
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
         <div class="sphinxsidebarwrapper">
 
    
 
-<div id="searchbox" style="display: none">
+<div id="searchbox" style="display: none" role="search">
   <h3>Quick search</h3>
     <form class="search" action="search.html" method="get">
-      <input type="text" name="q" />
-      <input type="submit" value="Go" />
+      <div><input type="text" name="q" /></div>
+      <div><input type="submit" value="Go" /></div>
       <input type="hidden" name="check_keywords" value="yes" />
       <input type="hidden" name="area" value="default" />
     </form>
-    <p class="searchtip" style="font-size: 90%">
-    Enter search terms or a module, class or function name.
-    </p>
 </div>
 <script type="text/javascript">$('#searchbox').show(0);</script>
         </div>
       </div>
       <div class="clearer"></div>
     </div>
-    <div class="related">
+    <div class="related" role="navigation" aria-label="related navigation">
       <h3>Navigation</h3>
       <ul>
         <li class="right" style="margin-right: 10px">
           <a href="#" title="General Index"
              >index</a></li>
-        <li><a href="index.html">PETSc for Python 3.7.0 documentation</a> »</li> 
+        <li class="nav-item nav-item-0"><a href="index.html">PETSc for Python 3.8.0 documentation</a> »</li> 
       </ul>
     </div>
-    <div class="footer">
-        © Copyright 2016, Lisandro Dalcin.
-      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    <div class="footer" role="contentinfo">
+        © Copyright 2017, Lisandro Dalcin.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.3.
     </div>
   </body>
 </html>
\ No newline at end of file
diff --git a/docs/usrman/index.html b/docs/usrman/index.html
index 0b29102..7c3a066 100644
--- a/docs/usrman/index.html
+++ b/docs/usrman/index.html
@@ -1,33 +1,32 @@
+
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
-
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    
-    <title>PETSc for Python — PETSc for Python 3.7.0 documentation</title>
-    
-    <link rel="stylesheet" href="_static/default.css" type="text/css" />
+    <title>PETSc for Python — PETSc for Python 3.8.0 documentation</title>
+    <link rel="stylesheet" href="_static/classic.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.7.0',
+        VERSION:     '3.8.0',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
-        HAS_SOURCE:  true
+        HAS_SOURCE:  true,
+        SOURCELINK_SUFFIX: '.txt'
       };
     </script>
     <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.7.0 documentation" href="#" />
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="Overview" href="overview.html" /> 
   </head>
   <body>
-    <div class="related">
+    <div class="related" role="navigation" aria-label="related navigation">
       <h3>Navigation</h3>
       <ul>
         <li class="right" style="margin-right: 10px">
@@ -36,14 +35,14 @@
         <li class="right" >
           <a href="overview.html" title="Overview"
              accesskey="N">next</a> |</li>
-        <li><a href="#">PETSc for Python 3.7.0 documentation</a> »</li> 
+        <li class="nav-item nav-item-0"><a href="#">PETSc for Python 3.8.0 documentation</a> »</li> 
       </ul>
     </div>  
 
     <div class="document">
       <div class="documentwrapper">
         <div class="bodywrapper">
-          <div class="body">
+          <div class="body" role="main">
             
   <div class="section" id="petsc-for-python">
 <h1>PETSc for Python<a class="headerlink" href="#petsc-for-python" title="Permalink to this headline">¶</a></h1>
@@ -57,7 +56,7 @@
 </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">May 01, 2016</td>
+<tr class="field-even field"><th class="field-name">Date:</th><td class="field-body">Oct 02, 2017</td>
 </tr>
 </tbody>
 </table>
@@ -111,7 +110,7 @@ the <em>Scalable Library for Eigenvalue Problem Computations</em>.</li>
           </div>
         </div>
       </div>
-      <div class="sphinxsidebar">
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
         <div class="sphinxsidebarwrapper">
   <h3><a href="#">Table Of Contents</a></h3>
   <ul>
@@ -124,29 +123,28 @@ the <em>Scalable Library for Eigenvalue Problem Computations</em>.</li>
   <h4>Next topic</h4>
   <p class="topless"><a href="overview.html"
                         title="next chapter">Overview</a></p>
-  <h3>This Page</h3>
-  <ul class="this-page-menu">
-    <li><a href="_sources/index.txt"
-           rel="nofollow">Show Source</a></li>
-  </ul>
-<div id="searchbox" style="display: none">
+  <div role="note" aria-label="source link">
+    <h3>This Page</h3>
+    <ul class="this-page-menu">
+      <li><a href="_sources/index.rst.txt"
+            rel="nofollow">Show Source</a></li>
+    </ul>
+   </div>
+<div id="searchbox" style="display: none" role="search">
   <h3>Quick search</h3>
     <form class="search" action="search.html" method="get">
-      <input type="text" name="q" />
-      <input type="submit" value="Go" />
+      <div><input type="text" name="q" /></div>
+      <div><input type="submit" value="Go" /></div>
       <input type="hidden" name="check_keywords" value="yes" />
       <input type="hidden" name="area" value="default" />
     </form>
-    <p class="searchtip" style="font-size: 90%">
-    Enter search terms or a module, class or function name.
-    </p>
 </div>
 <script type="text/javascript">$('#searchbox').show(0);</script>
         </div>
       </div>
       <div class="clearer"></div>
     </div>
-    <div class="related">
+    <div class="related" role="navigation" aria-label="related navigation">
       <h3>Navigation</h3>
       <ul>
         <li class="right" style="margin-right: 10px">
@@ -155,12 +153,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.7.0 documentation</a> »</li> 
+        <li class="nav-item nav-item-0"><a href="#">PETSc for Python 3.8.0 documentation</a> »</li> 
       </ul>
     </div>
-    <div class="footer">
-        © Copyright 2016, Lisandro Dalcin.
-      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    <div class="footer" role="contentinfo">
+        © Copyright 2017, Lisandro Dalcin.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.3.
     </div>
   </body>
 </html>
\ No newline at end of file
diff --git a/docs/usrman/install.html b/docs/usrman/install.html
index 98dce84..a34736c 100644
--- a/docs/usrman/install.html
+++ b/docs/usrman/install.html
@@ -1,34 +1,33 @@
+
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
-
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    
-    <title>Installation — PETSc for Python 3.7.0 documentation</title>
-    
-    <link rel="stylesheet" href="_static/default.css" type="text/css" />
+    <title>Installation — PETSc for Python 3.8.0 documentation</title>
+    <link rel="stylesheet" href="_static/classic.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.7.0',
+        VERSION:     '3.8.0',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
-        HAS_SOURCE:  true
+        HAS_SOURCE:  true,
+        SOURCELINK_SUFFIX: '.txt'
       };
     </script>
     <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.7.0 documentation" href="index.html" />
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="Tutorial" href="tutorial.html" />
     <link rel="prev" title="Overview" href="overview.html" /> 
   </head>
   <body>
-    <div class="related">
+    <div class="related" role="navigation" aria-label="related navigation">
       <h3>Navigation</h3>
       <ul>
         <li class="right" style="margin-right: 10px">
@@ -40,33 +39,33 @@
         <li class="right" >
           <a href="overview.html" title="Overview"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">PETSc for Python 3.7.0 documentation</a> »</li> 
+        <li class="nav-item nav-item-0"><a href="index.html">PETSc for Python 3.8.0 documentation</a> »</li> 
       </ul>
     </div>  
 
     <div class="document">
       <div class="documentwrapper">
         <div class="bodywrapper">
-          <div class="body">
+          <div class="body" role="main">
             
   <div class="section" id="installation">
 <h1>Installation<a class="headerlink" href="#installation" title="Permalink to this headline">¶</a></h1>
 <div class="section" id="using-pip-or-easy-install">
 <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"><div class="highlight"><pre><span></span>$ pip install [--user] numpy mpi4py
+<p>You can use <strong class="program">pip</strong> to install <code class="xref py py-mod docutils literal"><span class="pre">petsc4py</span></code> and its
+dependencies (<code class="xref py py-mod docutils literal"><span class="pre">mpi4py</span></code> is optional but highly recommended):</p>
+<div class="highlight-default"><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"><div class="highlight"><pre><span></span>$ easy_install petsc4py
+<div class="highlight-default"><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
+variables <span class="target" id="index-0"></span><code class="xref std std-envvar docutils literal"><span class="pre">PETSC_DIR</span></code> and <span class="target" id="index-1"></span><code class="xref std std-envvar docutils literal"><span class="pre">PETSC_ARCH</span></code> to appropriate
 values and next use <strong class="program">pip</strong>:</p>
-<div class="highlight-python"><div class="highlight"><pre><span></span>$ export PETSC_DIR=/path/to/petsc
+<div class="highlight-default"><div class="highlight"><pre><span></span>$ export PETSC_DIR=/path/to/petsc
 $ export PETSC_ARCH=arch-linux2-c-opt
 $ pip install petsc4py
 </pre></div>
@@ -88,7 +87,7 @@ built with shared libraries.</li>
 <colgroup><col class="label" /><col /></colgroup>
 <tbody valign="top">
 <tr><td class="label"><a class="fn-backref" href="#id1">[1]</a></td><td>Unless you have appropiatelly configured and built PETSc
-without MPI (configure option <em class="xref std std-option">--with-mpi=0</em>).</td></tr>
+without MPI (configure option <code class="docutils literal"><span class="pre">--with-mpi=0</span></code>).</td></tr>
 </tbody>
 </table>
 <table class="docutils footnote" frame="void" id="id3" rules="none">
@@ -106,12 +105,12 @@ 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"><div class="highlight"><pre><span></span>$ curl -O https://bitbucket.org/petsc/petsc4py/petsc4py-X.Y.tar.gz
+<div class="highlight-default"><div class="highlight"><pre><span></span>$ curl -O https://bitbucket.org/petsc/petsc4py/petsc4py-X.Y.Z.tar.gz
 </pre></div>
 </div>
 </li>
 <li><p class="first">Using <strong class="program">wget</strong>:</p>
-<div class="highlight-python"><div class="highlight"><pre><span></span>$ wget https://bitbucket.org/petsc/petsc4py/petsc4py-X.Y.tar.gz
+<div class="highlight-default"><div class="highlight"><pre><span></span>$ wget https://bitbucket.org/petsc/petsc4py/petsc4py-X.Y.Z.tar.gz
 </pre></div>
 </div>
 </li>
@@ -120,8 +119,8 @@ 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"><div class="highlight"><pre><span></span>$ tar -zxf petsc4py-X.Y.tar.gz
-$ cd petsc4py-X.Y
+<div class="highlight-default"><div class="highlight"><pre><span></span>$ tar -zxf petsc4py-X.Y.Z.tar.gz
+$ cd petsc4py-X.Y.Z
 </pre></div>
 </div>
 <p>the distribution is ready for building.</p>
@@ -129,13 +128,13 @@ $ cd petsc4py-X.Y
 <p class="first admonition-title">Note</p>
 <p><strong>Mac OS X</strong> users employing a Python distribution built
 with <strong>universal binaries</strong> may need to set the environment
-variables <span class="target" id="index-2"></span><tt class="xref std std-envvar docutils literal"><span class="pre">MACOSX_DEPLOYMENT_TARGET</span></tt>, <span class="target" id="index-3"></span><tt class="xref std std-envvar docutils literal"><span class="pre">SDKROOT</span></tt>,
-and <span class="target" id="index-4"></span><tt class="xref std std-envvar docutils literal"><span class="pre">ARCHFLAGS</span></tt> to appropriate values. As an example,
+variables <span class="target" id="index-2"></span><code class="xref std std-envvar docutils literal"><span class="pre">MACOSX_DEPLOYMENT_TARGET</span></code>, <span class="target" id="index-3"></span><code class="xref std std-envvar docutils literal"><span class="pre">SDKROOT</span></code>,
+and <span class="target" id="index-4"></span><code class="xref std std-envvar docutils literal"><span class="pre">ARCHFLAGS</span></code> to appropriate values. As an example,
 assume your Mac is running <strong>Snow Leopard</strong> on a <strong>64-bit Intel</strong>
 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"><div class="highlight"><pre><span></span>$ export MACOSX_DEPLOYMENT_TARGET=10.6
+<div class="last highlight-default"><div class="highlight"><pre><span></span>$ export MACOSX_DEPLOYMENT_TARGET=10.6
 $ export SDKROOT=/
 $ export ARCHFLAGS='-arch x86_64'
 </pre></div>
@@ -144,22 +143,22 @@ $ export ARCHFLAGS='-arch x86_64'
 <p>Some environment configuration is needed to inform the location of
 PETSc. You can set (using <strong class="command">setenv</strong>, <strong class="command">export</strong> or what
 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
+<span class="target" id="index-5"></span><code class="xref std std-envvar docutils literal"><span class="pre">PETSC_DIR</span></code>, and <span class="target" id="index-6"></span><code class="xref std std-envvar docutils literal"><span class="pre">PETSC_ARCH</span></code> indicating where you
 have built/installed PETSc:</p>
-<div class="highlight-python"><div class="highlight"><pre><span></span>$ export PETSC_DIR=/usr/local/petsc
+<div class="highlight-default"><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"><div class="highlight"><pre><span></span>[config]
-petsc_dir  = /usr/local/petsc
-petsc_arch = arch-linux2-c-opt
-...
+<p>Alternatively, you can edit the file <code class="file docutils literal"><span class="pre">setup.cfg</span></code> and provide the
+required information below the <code class="docutils literal"><span class="pre">[config]</span></code> section:</p>
+<div class="highlight-default"><div class="highlight"><pre><span></span><span class="p">[</span><span class="n">config</span><span class="p">]</span>
+<span class="n">petsc_dir</span>  <span class="o">=</span> <span class="o">/</span><span class="n">usr</span><span class="o">/</span><span class="n">local</span><span class="o">/</span><span class="n">petsc</span>
+<span class="n">petsc_arch</span> <span class="o">=</span> <span class="n">arch</span><span class="o">-</span><span class="n">linux2</span><span class="o">-</span><span class="n">c</span><span class="o">-</span><span class="n">opt</span>
+<span class="o">...</span>
 </pre></div>
 </div>
 <p>Finally, you can build the distribution by typing:</p>
-<div class="highlight-python"><div class="highlight"><pre><span></span>$ python setup.py build
+<div class="highlight-default"><div class="highlight"><pre><span></span>$ python setup.py build
 </pre></div>
 </div>
 </div>
@@ -169,14 +168,14 @@ 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"><div class="highlight"><pre><span></span>$ python setup.py install
+<div class="highlight-default"><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>The previous steps will install the <code class="xref py py-mod docutils literal"><span class="pre">petsc4py</span></code> package at standard
+location <code 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">Y</span></em><span class="pre">/site-packages</span></code>.</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"><div class="highlight"><pre><span></span>$ python setup.py install --user
+<div class="highlight-default"><div class="highlight"><pre><span></span>$ python setup.py install --user
 </pre></div>
 </div>
 </div>
@@ -187,7 +186,7 @@ Python</em> for your private use, just do:</p>
           </div>
         </div>
       </div>
-      <div class="sphinxsidebar">
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
         <div class="sphinxsidebarwrapper">
   <h3><a href="index.html">Table Of Contents</a></h3>
   <ul>
@@ -210,29 +209,28 @@ Python</em> for your private use, just do:</p>
   <h4>Next topic</h4>
   <p class="topless"><a href="tutorial.html"
                         title="next chapter">Tutorial</a></p>
-  <h3>This Page</h3>
-  <ul class="this-page-menu">
-    <li><a href="_sources/install.txt"
-           rel="nofollow">Show Source</a></li>
-  </ul>
-<div id="searchbox" style="display: none">
+  <div role="note" aria-label="source link">
+    <h3>This Page</h3>
+    <ul class="this-page-menu">
+      <li><a href="_sources/install.rst.txt"
+            rel="nofollow">Show Source</a></li>
+    </ul>
+   </div>
+<div id="searchbox" style="display: none" role="search">
   <h3>Quick search</h3>
     <form class="search" action="search.html" method="get">
-      <input type="text" name="q" />
-      <input type="submit" value="Go" />
+      <div><input type="text" name="q" /></div>
+      <div><input type="submit" value="Go" /></div>
       <input type="hidden" name="check_keywords" value="yes" />
       <input type="hidden" name="area" value="default" />
     </form>
-    <p class="searchtip" style="font-size: 90%">
-    Enter search terms or a module, class or function name.
-    </p>
 </div>
 <script type="text/javascript">$('#searchbox').show(0);</script>
         </div>
       </div>
       <div class="clearer"></div>
     </div>
-    <div class="related">
+    <div class="related" role="navigation" aria-label="related navigation">
       <h3>Navigation</h3>
       <ul>
         <li class="right" style="margin-right: 10px">
@@ -244,12 +242,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.7.0 documentation</a> »</li> 
+        <li class="nav-item nav-item-0"><a href="index.html">PETSc for Python 3.8.0 documentation</a> »</li> 
       </ul>
     </div>
-    <div class="footer">
-        © Copyright 2016, Lisandro Dalcin.
-      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    <div class="footer" role="contentinfo">
+        © Copyright 2017, Lisandro Dalcin.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.3.
     </div>
   </body>
 </html>
\ No newline at end of file
diff --git a/docs/usrman/manual.html b/docs/usrman/manual.html
index 4a657a2..d791bda 100644
--- a/docs/usrman/manual.html
+++ b/docs/usrman/manual.html
@@ -1,45 +1,44 @@
+
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
-
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    
-    <title>PETSc for Python — PETSc for Python 3.7.0 documentation</title>
-    
-    <link rel="stylesheet" href="_static/default.css" type="text/css" />
+    <title>PETSc for Python — PETSc for Python 3.8.0 documentation</title>
+    <link rel="stylesheet" href="_static/classic.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.7.0',
+        VERSION:     '3.8.0',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
-        HAS_SOURCE:  true
+        HAS_SOURCE:  true,
+        SOURCELINK_SUFFIX: '.txt'
       };
     </script>
     <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.7.0 documentation" href="index.html" /> 
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" /> 
   </head>
   <body>
-    <div class="related">
+    <div class="related" role="navigation" aria-label="related navigation">
       <h3>Navigation</h3>
       <ul>
         <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.7.0 documentation</a> »</li> 
+        <li class="nav-item nav-item-0"><a href="index.html">PETSc for Python 3.8.0 documentation</a> »</li> 
       </ul>
     </div>  
 
     <div class="document">
       <div class="documentwrapper">
         <div class="bodywrapper">
-          <div class="body">
+          <div class="body" role="main">
             
   <div class="section" id="petsc-for-python">
 <h1>PETSc for Python<a class="headerlink" href="#petsc-for-python" title="Permalink to this headline">¶</a></h1>
@@ -90,42 +89,41 @@ the <em>Scalable Library for Eigenvalue Problem Computations</em>.</li>
           </div>
         </div>
       </div>
-      <div class="sphinxsidebar">
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
         <div class="sphinxsidebarwrapper">
-  <h3>This Page</h3>
-  <ul class="this-page-menu">
-    <li><a href="_sources/manual.txt"
-           rel="nofollow">Show Source</a></li>
-  </ul>
-<div id="searchbox" style="display: none">
+  <div role="note" aria-label="source link">
+    <h3>This Page</h3>
+    <ul class="this-page-menu">
+      <li><a href="_sources/manual.rst.txt"
+            rel="nofollow">Show Source</a></li>
+    </ul>
+   </div>
+<div id="searchbox" style="display: none" role="search">
   <h3>Quick search</h3>
     <form class="search" action="search.html" method="get">
-      <input type="text" name="q" />
-      <input type="submit" value="Go" />
+      <div><input type="text" name="q" /></div>
+      <div><input type="submit" value="Go" /></div>
       <input type="hidden" name="check_keywords" value="yes" />
       <input type="hidden" name="area" value="default" />
     </form>
-    <p class="searchtip" style="font-size: 90%">
-    Enter search terms or a module, class or function name.
-    </p>
 </div>
 <script type="text/javascript">$('#searchbox').show(0);</script>
         </div>
       </div>
       <div class="clearer"></div>
     </div>
-    <div class="related">
+    <div class="related" role="navigation" aria-label="related navigation">
       <h3>Navigation</h3>
       <ul>
         <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.7.0 documentation</a> »</li> 
+        <li class="nav-item nav-item-0"><a href="index.html">PETSc for Python 3.8.0 documentation</a> »</li> 
       </ul>
     </div>
-    <div class="footer">
-        © Copyright 2016, Lisandro Dalcin.
-      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    <div class="footer" role="contentinfo">
+        © Copyright 2017, Lisandro Dalcin.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.3.
     </div>
   </body>
 </html>
\ No newline at end of file
diff --git a/docs/usrman/objects.inv b/docs/usrman/objects.inv
index 3e33240..87d91eb 100644
--- a/docs/usrman/objects.inv
+++ b/docs/usrman/objects.inv
@@ -1,7 +1,8 @@
 # Sphinx inventory version 2
 # Project: PETSc for Python
-# Version: 3.7
+# Version: 3.8
 # The remainder of this file is compressed using zlib.
-xڅ�K
-�0��yVqA�Wp�
t � &'M ���Uw/%� 8=��C�.j��T=x��'����Џ�������A�6�	�G���h�@fe��m�=��	bF-�a�S�
��"��֝�;_
-2g��
��P�
\ No newline at end of file
+xڅ��
+1
E����n+�u+.\�����:��f|���NAqל�$�*$�
�7�).�\E��i0|�$	�
��V�=�F^���B��?�G�
gF�;�o��̓zg_r iL�GTV�"�`�����D~�
��y|��Hs�'9����"��G
+K�1Wl
+J@ۢB�T_�fK.�>��C�� ��k+�������D�c�1�%��+��?
\ No newline at end of file
diff --git a/docs/usrman/overview.html b/docs/usrman/overview.html
index 3bdb43d..35e9541 100644
--- a/docs/usrman/overview.html
+++ b/docs/usrman/overview.html
@@ -1,34 +1,33 @@
+
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
-
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    
-    <title>Overview — PETSc for Python 3.7.0 documentation</title>
-    
-    <link rel="stylesheet" href="_static/default.css" type="text/css" />
+    <title>Overview — PETSc for Python 3.8.0 documentation</title>
+    <link rel="stylesheet" href="_static/classic.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.7.0',
+        VERSION:     '3.8.0',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
-        HAS_SOURCE:  true
+        HAS_SOURCE:  true,
+        SOURCELINK_SUFFIX: '.txt'
       };
     </script>
     <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.7.0 documentation" href="index.html" />
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="Installation" href="install.html" />
     <link rel="prev" title="PETSc for Python" href="index.html" /> 
   </head>
   <body>
-    <div class="related">
+    <div class="related" role="navigation" aria-label="related navigation">
       <h3>Navigation</h3>
       <ul>
         <li class="right" style="margin-right: 10px">
@@ -40,14 +39,14 @@
         <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.7.0 documentation</a> »</li> 
+        <li class="nav-item nav-item-0"><a href="index.html">PETSc for Python 3.8.0 documentation</a> »</li> 
       </ul>
     </div>  
 
     <div class="document">
       <div class="documentwrapper">
         <div class="bodywrapper">
-          <div class="body">
+          <div class="body" role="main">
             
   <div class="section" id="overview">
 <h1>Overview<a class="headerlink" href="#overview" title="Permalink to this headline">¶</a></h1>
@@ -76,7 +75,7 @@ communication and computation.</p>
 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.
+<em>PETSc Users Manual</em>, ANL-95/11 - Revision 3.8, 2017.
 <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>
@@ -87,7 +86,7 @@ B.F. Smith, S. Zampini, H. Zhang, and H. Zhang,
 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.</td></tr>
+H. P. Langtangen, editors. 163–202. Birkhauser Press. 1997.</td></tr>
 </tbody>
 </table>
 <div class="section" id="components">
@@ -146,7 +145,7 @@ steady-state solutions.</td>
           </div>
         </div>
       </div>
-      <div class="sphinxsidebar">
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
         <div class="sphinxsidebarwrapper">
   <h3><a href="index.html">Table Of Contents</a></h3>
   <ul>
@@ -162,29 +161,28 @@ steady-state solutions.</td>
   <h4>Next topic</h4>
   <p class="topless"><a href="install.html"
                         title="next chapter">Installation</a></p>
-  <h3>This Page</h3>
-  <ul class="this-page-menu">
-    <li><a href="_sources/overview.txt"
-           rel="nofollow">Show Source</a></li>
-  </ul>
-<div id="searchbox" style="display: none">
+  <div role="note" aria-label="source link">
+    <h3>This Page</h3>
+    <ul class="this-page-menu">
+      <li><a href="_sources/overview.rst.txt"
+            rel="nofollow">Show Source</a></li>
+    </ul>
+   </div>
+<div id="searchbox" style="display: none" role="search">
   <h3>Quick search</h3>
     <form class="search" action="search.html" method="get">
-      <input type="text" name="q" />
-      <input type="submit" value="Go" />
+      <div><input type="text" name="q" /></div>
+      <div><input type="submit" value="Go" /></div>
       <input type="hidden" name="check_keywords" value="yes" />
       <input type="hidden" name="area" value="default" />
     </form>
-    <p class="searchtip" style="font-size: 90%">
-    Enter search terms or a module, class or function name.
-    </p>
 </div>
 <script type="text/javascript">$('#searchbox').show(0);</script>
         </div>
       </div>
       <div class="clearer"></div>
     </div>
-    <div class="related">
+    <div class="related" role="navigation" aria-label="related navigation">
       <h3>Navigation</h3>
       <ul>
         <li class="right" style="margin-right: 10px">
@@ -196,12 +194,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.7.0 documentation</a> »</li> 
+        <li class="nav-item nav-item-0"><a href="index.html">PETSc for Python 3.8.0 documentation</a> »</li> 
       </ul>
     </div>
-    <div class="footer">
-        © Copyright 2016, Lisandro Dalcin.
-      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    <div class="footer" role="contentinfo">
+        © Copyright 2017, Lisandro Dalcin.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.3.
     </div>
   </body>
 </html>
\ No newline at end of file
diff --git a/docs/usrman/search.html b/docs/usrman/search.html
index 6e88321..3c37c5a 100644
--- a/docs/usrman/search.html
+++ b/docs/usrman/search.html
@@ -1,30 +1,29 @@
+
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
-
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    
-    <title>Search — PETSc for Python 3.7.0 documentation</title>
-    
-    <link rel="stylesheet" href="_static/default.css" type="text/css" />
+    <title>Search — PETSc for Python 3.8.0 documentation</title>
+    <link rel="stylesheet" href="_static/classic.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.7.0',
+        VERSION:     '3.8.0',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
-        HAS_SOURCE:  true
+        HAS_SOURCE:  true,
+        SOURCELINK_SUFFIX: '.txt'
       };
     </script>
     <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>
     <script type="text/javascript" src="_static/searchtools.js"></script>
-    <link rel="top" title="PETSc for Python 3.7.0 documentation" href="index.html" />
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="#" />
   <script type="text/javascript">
     jQuery(function() { Search.loadIndex("searchindex.js"); });
   </script>
@@ -34,20 +33,20 @@
 
   </head>
   <body>
-    <div class="related">
+    <div class="related" role="navigation" aria-label="related navigation">
       <h3>Navigation</h3>
       <ul>
         <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.7.0 documentation</a> »</li> 
+        <li class="nav-item nav-item-0"><a href="index.html">PETSc for Python 3.8.0 documentation</a> »</li> 
       </ul>
     </div>  
 
     <div class="document">
       <div class="documentwrapper">
         <div class="bodywrapper">
-          <div class="body">
+          <div class="body" role="main">
             
   <h1 id="search-documentation">Search</h1>
   <div id="fallback" class="admonition warning">
@@ -76,24 +75,24 @@
           </div>
         </div>
       </div>
-      <div class="sphinxsidebar">
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
         <div class="sphinxsidebarwrapper">
         </div>
       </div>
       <div class="clearer"></div>
     </div>
-    <div class="related">
+    <div class="related" role="navigation" aria-label="related navigation">
       <h3>Navigation</h3>
       <ul>
         <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.7.0 documentation</a> »</li> 
+        <li class="nav-item nav-item-0"><a href="index.html">PETSc for Python 3.8.0 documentation</a> »</li> 
       </ul>
     </div>
-    <div class="footer">
-        © Copyright 2016, Lisandro Dalcin.
-      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    <div class="footer" role="contentinfo">
+        © Copyright 2017, Lisandro Dalcin.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.3.
     </div>
   </body>
 </html>
\ No newline at end of file
diff --git a/docs/usrman/searchindex.js b/docs/usrman/searchindex.js
index a6c3d03..04dd24c 100644
--- a/docs/usrman/searchindex.js
+++ b/docs/usrman/searchindex.js
@@ -1 +1 @@
-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
+Search.setIndex({docnames:["citing","index","install","manual","overview","tutorial"],envversion:52,filenames:["citing.rst","index.rst","install.rst","manual.rst","overview.rst","tutorial.rst"],objects:{},objnames:{},objtypes:{},terms:{"abstract":4,"class":4,"default":4,"export":2,"final":2,"function":[1,3,4],"import":[1,3],"public":0,"transient":4,CGS:4,The:2,These:4,Using:[1,3],With:4,abhyankar:[0,4],abov:4,academ:0,access:4,acknowledg:0,adam:[0,4],addit:4,advanc:[0,4],advwatr:0,after: [...]
\ No newline at end of file
diff --git a/docs/usrman/tutorial.html b/docs/usrman/tutorial.html
index 0550beb..0d20d90 100644
--- a/docs/usrman/tutorial.html
+++ b/docs/usrman/tutorial.html
@@ -1,34 +1,33 @@
+
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
   "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
-
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    
-    <title>Tutorial — PETSc for Python 3.7.0 documentation</title>
-    
-    <link rel="stylesheet" href="_static/default.css" type="text/css" />
+    <title>Tutorial — PETSc for Python 3.8.0 documentation</title>
+    <link rel="stylesheet" href="_static/classic.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.7.0',
+        VERSION:     '3.8.0',
         COLLAPSE_INDEX: false,
         FILE_SUFFIX: '.html',
-        HAS_SOURCE:  true
+        HAS_SOURCE:  true,
+        SOURCELINK_SUFFIX: '.txt'
       };
     </script>
     <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.7.0 documentation" href="index.html" />
+    <link rel="index" title="Index" href="genindex.html" />
+    <link rel="search" title="Search" href="search.html" />
     <link rel="next" title="Citations" href="citing.html" />
     <link rel="prev" title="Installation" href="install.html" /> 
   </head>
   <body>
-    <div class="related">
+    <div class="related" role="navigation" aria-label="related navigation">
       <h3>Navigation</h3>
       <ul>
         <li class="right" style="margin-right: 10px">
@@ -40,25 +39,25 @@
         <li class="right" >
           <a href="install.html" title="Installation"
              accesskey="P">previous</a> |</li>
-        <li><a href="index.html">PETSc for Python 3.7.0 documentation</a> »</li> 
+        <li class="nav-item nav-item-0"><a href="index.html">PETSc for Python 3.8.0 documentation</a> »</li> 
       </ul>
     </div>  
 
     <div class="document">
       <div class="documentwrapper">
         <div class="bodywrapper">
-          <div class="body">
+          <div class="body" role="main">
             
   <div class="section" id="tutorial">
 <h1>Tutorial<a class="headerlink" href="#tutorial" title="Permalink to this headline">¶</a></h1>
-<p>XXX To be written ... Any contribution welcome!</p>
+<p>XXX To be written … Any contribution welcome!</p>
 </div>
 
 
           </div>
         </div>
       </div>
-      <div class="sphinxsidebar">
+      <div class="sphinxsidebar" role="navigation" aria-label="main navigation">
         <div class="sphinxsidebarwrapper">
   <h4>Previous topic</h4>
   <p class="topless"><a href="install.html"
@@ -66,29 +65,28 @@
   <h4>Next topic</h4>
   <p class="topless"><a href="citing.html"
                         title="next chapter">Citations</a></p>
-  <h3>This Page</h3>
-  <ul class="this-page-menu">
-    <li><a href="_sources/tutorial.txt"
-           rel="nofollow">Show Source</a></li>
-  </ul>
-<div id="searchbox" style="display: none">
+  <div role="note" aria-label="source link">
+    <h3>This Page</h3>
+    <ul class="this-page-menu">
+      <li><a href="_sources/tutorial.rst.txt"
+            rel="nofollow">Show Source</a></li>
+    </ul>
+   </div>
+<div id="searchbox" style="display: none" role="search">
   <h3>Quick search</h3>
     <form class="search" action="search.html" method="get">
-      <input type="text" name="q" />
-      <input type="submit" value="Go" />
+      <div><input type="text" name="q" /></div>
+      <div><input type="submit" value="Go" /></div>
       <input type="hidden" name="check_keywords" value="yes" />
       <input type="hidden" name="area" value="default" />
     </form>
-    <p class="searchtip" style="font-size: 90%">
-    Enter search terms or a module, class or function name.
-    </p>
 </div>
 <script type="text/javascript">$('#searchbox').show(0);</script>
         </div>
       </div>
       <div class="clearer"></div>
     </div>
-    <div class="related">
+    <div class="related" role="navigation" aria-label="related navigation">
       <h3>Navigation</h3>
       <ul>
         <li class="right" style="margin-right: 10px">
@@ -100,12 +98,12 @@
         <li class="right" >
           <a href="install.html" title="Installation"
              >previous</a> |</li>
-        <li><a href="index.html">PETSc for Python 3.7.0 documentation</a> »</li> 
+        <li class="nav-item nav-item-0"><a href="index.html">PETSc for Python 3.8.0 documentation</a> »</li> 
       </ul>
     </div>
-    <div class="footer">
-        © Copyright 2016, Lisandro Dalcin.
-      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.2.3.
+    <div class="footer" role="contentinfo">
+        © Copyright 2017, Lisandro Dalcin.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.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 ed8ef1e..a58768c 100644
--- a/petsc4py.egg-info/PKG-INFO
+++ b/petsc4py.egg-info/PKG-INFO
@@ -1,12 +1,13 @@
 Metadata-Version: 1.1
 Name: petsc4py
-Version: 3.7.0
+Version: 3.8.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.7.0.tar.gz
+Download-URL: https://bitbucket.org/petsc/petsc4py/downloads/petsc4py-3.8.0.tar.gz
+Description-Content-Type: UNKNOWN
 Description: PETSc for Python
         ================
         
@@ -58,7 +59,7 @@ Description: PETSc for Python
           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.
+          *PETSc Users Manual*, ANL-95/11 - Revision 3.8, 2017.
           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 8b7996d..bc51e87 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/adaptivity.py
 demo/dmplex/distribute_field.py
 demo/kspsolve/makefile
 demo/kspsolve/petsc-cg.py
@@ -78,92 +79,6 @@ docs/petsc4py.info
 docs/petsc4py.pdf
 docs/apiref/api-objects.txt
 docs/apiref/class-tree.html
-docs/apiref/class_hierarchy_for__dmcomposi.png
-docs/apiref/class_hierarchy_for__dmda_vec_.png
-docs/apiref/class_hierarchy_for__is_buffer.png
-docs/apiref/class_hierarchy_for__mat_stenc.png
-docs/apiref/class_hierarchy_for__vec_buffe.png
-docs/apiref/class_hierarchy_for__vec_local.png
-docs/apiref/class_hierarchy_for_ao.png
-docs/apiref/class_hierarchy_for_asmtype.png
-docs/apiref/class_hierarchy_for_assemblyty.png
-docs/apiref/class_hierarchy_for_boundaryty.png
-docs/apiref/class_hierarchy_for_comm.png
-docs/apiref/class_hierarchy_for_compositet.png
-docs/apiref/class_hierarchy_for_convergedr.png
-docs/apiref/class_hierarchy_for_convergedr_2.png
-docs/apiref/class_hierarchy_for_convergedr_3.png
-docs/apiref/class_hierarchy_for_dm.png
-docs/apiref/class_hierarchy_for_dmcomposit.png
-docs/apiref/class_hierarchy_for_dmda.png
-docs/apiref/class_hierarchy_for_dmplex.png
-docs/apiref/class_hierarchy_for_dmshell.png
-docs/apiref/class_hierarchy_for_elementtyp.png
-docs/apiref/class_hierarchy_for_equationty.png
-docs/apiref/class_hierarchy_for_error.png
-docs/apiref/class_hierarchy_for_exactfinal.png
-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
-docs/apiref/class_hierarchy_for_ksp.png
-docs/apiref/class_hierarchy_for_lgmap.png
-docs/apiref/class_hierarchy_for_log.png
-docs/apiref/class_hierarchy_for_logclass.png
-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
-docs/apiref/class_hierarchy_for_normtype_2.png
-docs/apiref/class_hierarchy_for_nullspace.png
-docs/apiref/class_hierarchy_for_object.png
-docs/apiref/class_hierarchy_for_option.png
-docs/apiref/class_hierarchy_for_option_2.png
-docs/apiref/class_hierarchy_for_options.png
-docs/apiref/class_hierarchy_for_orderingty.png
-docs/apiref/class_hierarchy_for_partitione.png
-docs/apiref/class_hierarchy_for_partitione_2.png
-docs/apiref/class_hierarchy_for_pc.png
-docs/apiref/class_hierarchy_for_problemtyp.png
-docs/apiref/class_hierarchy_for_random.png
-docs/apiref/class_hierarchy_for_scatter.png
-docs/apiref/class_hierarchy_for_scattermod.png
-docs/apiref/class_hierarchy_for_schurfactt.png
-docs/apiref/class_hierarchy_for_schurprety.png
-docs/apiref/class_hierarchy_for_section.png
-docs/apiref/class_hierarchy_for_sf.png
-docs/apiref/class_hierarchy_for_side.png
-docs/apiref/class_hierarchy_for_size.png
-docs/apiref/class_hierarchy_for_snes.png
-docs/apiref/class_hierarchy_for_sortype.png
-docs/apiref/class_hierarchy_for_stenciltyp.png
-docs/apiref/class_hierarchy_for_structure.png
-docs/apiref/class_hierarchy_for_sys.png
-docs/apiref/class_hierarchy_for_tao.png
-docs/apiref/class_hierarchy_for_ts.png
-docs/apiref/class_hierarchy_for_type.png
-docs/apiref/class_hierarchy_for_type_10.png
-docs/apiref/class_hierarchy_for_type_11.png
-docs/apiref/class_hierarchy_for_type_12.png
-docs/apiref/class_hierarchy_for_type_2.png
-docs/apiref/class_hierarchy_for_type_3.png
-docs/apiref/class_hierarchy_for_type_4.png
-docs/apiref/class_hierarchy_for_type_5.png
-docs/apiref/class_hierarchy_for_type_6.png
-docs/apiref/class_hierarchy_for_type_7.png
-docs/apiref/class_hierarchy_for_type_8.png
-docs/apiref/class_hierarchy_for_type_9.png
-docs/apiref/class_hierarchy_for_vec.png
-docs/apiref/class_hierarchy_for_viewer.png
-docs/apiref/class_hierarchy_for_viewerhdf5.png
 docs/apiref/crarr.png
 docs/apiref/epydoc.css
 docs/apiref/epydoc.js
@@ -196,7 +111,8 @@ docs/apiref/petsc4py.PETSc.KSP.ConvergedReason-class.html
 docs/apiref/petsc4py.PETSc.KSP.NormType-class.html
 docs/apiref/petsc4py.PETSc.KSP.Type-class.html
 docs/apiref/petsc4py.PETSc.LGMap-class.html
-docs/apiref/petsc4py.PETSc.LGMap.MapType-class.html
+docs/apiref/petsc4py.PETSc.LGMap.MapMode-class.html
+docs/apiref/petsc4py.PETSc.LGMap.Type-class.html
 docs/apiref/petsc4py.PETSc.Log-class.html
 docs/apiref/petsc4py.PETSc.LogClass-class.html
 docs/apiref/petsc4py.PETSc.LogEvent-class.html
@@ -219,6 +135,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.MGCycleType-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
@@ -246,6 +163,7 @@ docs/apiref/petsc4py.PETSc.TS.ConvergedReason-class.html
 docs/apiref/petsc4py.PETSc.TS.EquationType-class.html
 docs/apiref/petsc4py.PETSc.TS.ExactFinalTime-class.html
 docs/apiref/petsc4py.PETSc.TS.ProblemType-class.html
+docs/apiref/petsc4py.PETSc.TS.RKType-class.html
 docs/apiref/petsc4py.PETSc.TS.Type-class.html
 docs/apiref/petsc4py.PETSc.Vec-class.html
 docs/apiref/petsc4py.PETSc.Vec.Option-class.html
@@ -279,7 +197,6 @@ docs/source/links.txt
 docs/source/make.bat
 docs/source/manual.rst
 docs/source/overview.rst
-docs/source/sphinxfix.sty
 docs/source/toctree.txt
 docs/source/tutorial.rst
 docs/usrman/.buildinfo
@@ -293,14 +210,15 @@ docs/usrman/overview.html
 docs/usrman/search.html
 docs/usrman/searchindex.js
 docs/usrman/tutorial.html
-docs/usrman/_sources/citing.txt
-docs/usrman/_sources/index.txt
-docs/usrman/_sources/install.txt
-docs/usrman/_sources/manual.txt
-docs/usrman/_sources/overview.txt
-docs/usrman/_sources/tutorial.txt
+docs/usrman/_sources/citing.rst.txt
+docs/usrman/_sources/index.rst.txt
+docs/usrman/_sources/install.rst.txt
+docs/usrman/_sources/manual.rst.txt
+docs/usrman/_sources/overview.rst.txt
+docs/usrman/_sources/tutorial.rst.txt
 docs/usrman/_static/ajax-loader.gif
 docs/usrman/_static/basic.css
+docs/usrman/_static/classic.css
 docs/usrman/_static/comment-bright.png
 docs/usrman/_static/comment-close.png
 docs/usrman/_static/comment.png
@@ -309,12 +227,14 @@ docs/usrman/_static/doctools.js
 docs/usrman/_static/down-pressed.png
 docs/usrman/_static/down.png
 docs/usrman/_static/file.png
+docs/usrman/_static/jquery-3.1.0.js
 docs/usrman/_static/jquery.js
 docs/usrman/_static/minus.png
 docs/usrman/_static/plus.png
 docs/usrman/_static/pygments.css
 docs/usrman/_static/searchtools.js
 docs/usrman/_static/sidebar.js
+docs/usrman/_static/underscore-1.3.1.js
 docs/usrman/_static/underscore.js
 docs/usrman/_static/up-pressed.png
 docs/usrman/_static/up.png
@@ -326,6 +246,7 @@ petsc4py.egg-info/not-zip-safe
 petsc4py.egg-info/requires.txt
 petsc4py.egg-info/top_level.txt
 src/PETSc.c
+src/PETSc.pxd
 src/PETSc.py
 src/__init__.py
 src/__main__.py
@@ -373,6 +294,7 @@ src/PETSc/petscdmplex.pxi
 src/PETSc/petscdmshell.pxi
 src/PETSc/petscis.pxi
 src/PETSc/petscksp.pxi
+src/PETSc/petsclinesearch.pxi
 src/PETSc/petsclog.pxi
 src/PETSc/petscmat.pxi
 src/PETSc/petscmem.pxi
diff --git a/setup.cfg b/setup.cfg
index 197d5bb..6979cb1 100644
--- a/setup.cfg
+++ b/setup.cfg
@@ -19,5 +19,4 @@ doc_files = README.rst CHANGES.rst LICENSE.rst
 [egg_info]
 tag_build = 
 tag_date = 0
-tag_svn_revision = 0
 
diff --git a/setup.py b/setup.py
index 381d006..1afadd9 100755
--- a/setup.py
+++ b/setup.py
@@ -16,8 +16,8 @@ except ImportError:
     setuptools = None
 
 pyver = sys.version_info[:2]
-if pyver < (2, 6) or (3, 0) <= pyver < (3, 2):
-    raise RuntimeError("Python version 2.6, 2.7 or >= 3.2 required")
+if pyver < (2, 6) or (3, 0) <= pyver < (3, 3):
+    raise RuntimeError("Python version 2.6, 2.7 or >= 3.3 required")
 
 # --------------------------------------------------------------------
 # Metadata
@@ -121,7 +121,8 @@ def run_setup():
                                             'include/petsc4py/*.i',
                                             'include/petsc4py/*.pxd',
                                             'include/petsc4py/*.pxi',
-                                            'include/petsc4py/*.pyx',],
+                                            'include/petsc4py/*.pyx',
+                                            'PETSc.pxd',],
                           'petsc4py.lib' : ['petsc.cfg'],},
           ext_modules  = get_ext_modules(Extension),
           cmdclass     = {'config'     : config,
diff --git a/src/PETSc.pxd b/src/PETSc.pxd
new file mode 100644
index 0000000..fa27117
--- /dev/null
+++ b/src/PETSc.pxd
@@ -0,0 +1,4 @@
+# Author:  Lisandro Dalcin
+# Contact: dalcinl at gmail.com
+
+include "include/petsc4py/PETSc.pxd"
diff --git a/src/PETSc/DM.pyx b/src/PETSc/DM.pyx
index 88cbe91..0d2b99a 100644
--- a/src/PETSc/DM.pyx
+++ b/src/PETSc/DM.pyx
@@ -115,17 +115,37 @@ cdef class DM(Object):
         CHKERR( DMCreateLocalVector(self.dm, &vl.vec) )
         return vl
 
-    def globalToLocal(self, Vec vg not None, Vec vl not None, addv=None):
+    def getGlobalVec(self):
+        cdef Vec vg = Vec()
+        CHKERR( DMGetGlobalVector(self.dm, &vg.vec) )
+        PetscINCREF(vg.obj)
+        return vg
+
+    def restoreGlobalVec(self, Vec vg):
+        CHKERR( PetscObjectDereference(<PetscObject>vg.vec) ) 
+        CHKERR( DMRestoreGlobalVector(self.dm, &vg.vec) )
+
+    def getLocalVec(self):
+        cdef Vec vl = Vec()
+        CHKERR( DMGetLocalVector(self.dm, &vl.vec) )
+        PetscINCREF(vl.obj)
+        return vl
+
+    def restoreLocalVec(self, Vec vl):
+        CHKERR( PetscObjectDereference(<PetscObject>vl.vec) ) 
+        CHKERR( DMRestoreLocalVector(self.dm, &vl.vec) )
+
+    def globalToLocal(self, Vec vg, Vec vl, 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 localToGlobal(self, Vec vl not None, Vec vg not None, addv=None):
+    def localToGlobal(self, Vec vl, Vec vg, 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 localToLocal(self, Vec vl not None, Vec vlg not None, addv=None):
+    def localToLocal(self, Vec vl, Vec vlg, 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) )
@@ -150,7 +170,7 @@ cdef class DM(Object):
         PetscINCREF(sec.obj)
         return sec
 
-    def setCoordinates(self, Vec c not None):
+    def setCoordinates(self, Vec c):
         CHKERR( DMSetCoordinates(self.dm, c.vec) )
 
     def getCoordinates(self):
@@ -159,7 +179,7 @@ cdef class DM(Object):
         PetscINCREF(c.obj)
         return c
 
-    def setCoordinatesLocal(self, Vec c not None):
+    def setCoordinatesLocal(self, Vec c):
         CHKERR( DMSetCoordinatesLocal(self.dm, c.vec) )
 
     def getCoordinatesLocal(self):
@@ -181,19 +201,19 @@ cdef class DM(Object):
         CHKERR( DMCreateMatrix(self.dm, &mat.mat) )
         return mat
 
-    def createInterpolation(self, DM dm not None):
+    def createInterpolation(self, DM dm):
         cdef Mat A = Mat()
         cdef Vec scale = Vec()
         CHKERR( DMCreateInterpolation(self.dm, dm.dm,
                                    &A.mat, &scale.vec))
         return(A, scale)
 
-    def createInjection(self, DM dm not None):
+    def createInjection(self, DM dm):
         cdef Mat inject = Mat()
         CHKERR( DMCreateInjection(self.dm, dm.dm, &inject.mat) )
         return inject
 
-    def createAggregates(self, DM dm not None):
+    def createAggregates(self, DM dm):
         cdef Mat mat = Mat()
         CHKERR( DMCreateAggregates(self.dm, dm.dm, &mat.mat) )
         return mat
@@ -253,9 +273,44 @@ cdef class DM(Object):
             hierarchy.append(dmc)
         return hierarchy
 
+    def getRefineLevel(self):
+        cdef PetscInt n = 0
+        CHKERR( DMGetRefineLevel(self.dm, &n) )
+        return toInt(n)
+
+    def setRefineLevel(self, level):
+        cdef PetscInt clevel = asInt(level)
+        CHKERR( DMSetRefineLevel(self.dm, clevel) )
+
+    def getCoarsenLevel(self):
+        cdef PetscInt n = 0
+        CHKERR( DMGetCoarsenLevel(self.dm, &n) )
+        return toInt(n)
+
+    #
+
+    def adaptLabel(self, label):
+        cdef const_char *cval = NULL
+        cdef PetscDMLabel clbl = NULL
+        label = str2bytes(label, &cval)
+        CHKERR( DMGetLabel(self.dm, cval, &clbl) )
+        cdef DM newdm = DMPlex()
+        CHKERR( DMAdaptLabel(self.dm, clbl, &newdm.dm) )
+        return newdm
+
+    def adaptMetric(self, Vec metric, label=None):
+        cdef const_char *cval = NULL
+        cdef PetscDMLabel clbl = NULL
+        label = str2bytes(label, &cval)
+        if cval == NULL: cval = b"" # XXX Should be fixed upstream
+        CHKERR( DMGetLabel(self.dm, cval, &clbl) )
+        cdef DM newdm = DMPlex()
+        CHKERR( DMAdaptMetric(self.dm, metric.vec, clbl, &newdm.dm) )
+        return newdm
+
     #
 
-    def setDefaultSection(self, Section sec not None):
+    def setDefaultSection(self, Section sec):
         CHKERR( DMSetDefaultSection(self.dm, sec.sec) )
 
     def getDefaultSection(self):
@@ -264,7 +319,7 @@ cdef class DM(Object):
         PetscINCREF(sec.obj)
         return sec
 
-    def setDefaultGlobalSection(self, Section sec not None):
+    def setDefaultGlobalSection(self, Section sec):
         CHKERR( DMSetDefaultGlobalSection(self.dm, sec.sec) )
 
     def getDefaultGlobalSection(self):
@@ -273,7 +328,7 @@ cdef class DM(Object):
         PetscINCREF(sec.obj)
         return sec
 
-    def createDefaultSF(self, Section localsec not None, Section globalsec not None):
+    def createDefaultSF(self, Section localsec, Section globalsec):
         CHKERR( DMCreateDefaultSF(self.dm, localsec.sec, globalsec.sec) )
 
     def getDefaultSF(self):
@@ -288,7 +343,7 @@ cdef class DM(Object):
         PetscINCREF(sf.obj)
         return sf
 
-    def setPointSF(self, SF sf not None):
+    def setPointSF(self, SF sf):
         CHKERR( DMSetPointSF(self.dm, sf.sf) )
 
     def getNumLabels(self):
@@ -307,7 +362,7 @@ cdef class DM(Object):
         cdef const_char *cname = NULL
         name = str2bytes(name, &cname)
         CHKERR( DMHasLabel(self.dm, cname, &flag) )
-        return <bint> flag
+        return toBool(flag)
 
     def createLabel(self, name):
         cdef const_char *cname = NULL
@@ -394,6 +449,68 @@ cdef class DM(Object):
     createLocalVector = createLocalVec
     getMatrix = createMatrix = createMat
 
+    def setKSPComputeOperators(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( DMKSPSetComputeOperators(self.dm, KSP_ComputeOps, <void*>context) )
+
+    def createFieldDecomposition(self):
+        cdef PetscInt clen = 0
+        cdef PetscIS *cis = NULL
+        cdef PetscDM *cdm = NULL
+        cdef char** cnamelist = NULL
+
+        CHKERR( DMCreateFieldDecomposition(self.dm, &clen, &cnamelist, &cis, &cdm) )
+
+        cdef list isets = [ref_IS(cis[i]) for i from 0 <= i < clen]
+        cdef list dms   = []
+        cdef list names = []
+        cdef DM dm = None
+
+        for i from 0 <= i < clen:
+            if cdm != NULL:
+                dm = subtype_DM(cdm[i])()
+                dm.dm = cdm[i]
+                PetscINCREF(dm.obj)
+                dms.append(dm)
+            else:
+                dms.append(None)
+
+            name = bytes2str(cnamelist[i])
+            names.append(name)
+            CHKERR( PetscFree(cnamelist[i]) )
+
+            CHKERR( ISDestroy(&cis[i]) )
+            CHKERR( DMDestroy(&cdm[i]) )
+
+        CHKERR( PetscFree(cis) )
+        CHKERR( PetscFree(cdm) )
+        CHKERR( PetscFree(cnamelist) )
+
+        return (names, isets, dms)
+
+    def setSNESFunction(self, function, args=None, kargs=None):
+        if function is not None:
+            if args  is None: args  = ()
+            if kargs is None: kargs = {}
+            context = (function, args, kargs)
+            self.set_attr('__function__', context)
+            CHKERR( DMSNESSetFunction(self.dm, SNES_Function, <void*>context) )
+        else:
+            CHKERR( DMSNESSetFunction(self.dm, NULL, NULL) )
+
+    def setSNESJacobian(self, jacobian, args=None, kargs=None):
+        if jacobian is not None:
+            if args  is None: args  = ()
+            if kargs is None: kargs = {}
+            context = (jacobian, args, kargs)
+            self.set_attr('__jacobian__', context)
+            CHKERR( DMSNESSetJacobian(self.dm, SNES_Jacobian, <void*>context) )
+        else:
+            CHKERR( DMSNESSetJacobian(self.dm, NULL, NULL) )
+
 # --------------------------------------------------------------------
 
 del DMType
diff --git a/src/PETSc/DMComposite.pyx b/src/PETSc/DMComposite.pyx
index f3e9245..61c104e 100644
--- a/src/PETSc/DMComposite.pyx
+++ b/src/PETSc/DMComposite.pyx
@@ -9,7 +9,7 @@ cdef class DMComposite(DM):
         PetscCLEAR(self.obj); self.dm = newdm
         return self
 
-    def addDM(self, DM dm not None, *args):
+    def addDM(self, DM dm, *args):
         """Add DM to composite"""
         CHKERR( DMCompositeAddDM(self.dm, dm.dm) )
         cdef object item
@@ -40,7 +40,7 @@ cdef class DMComposite(DM):
             entries.append(entry)
         return tuple(entries)
 
-    def scatter(self, Vec gvec not None, lvecs):
+    def scatter(self, Vec gvec, lvecs):
         """Scatter coupled global vector into split local vectors"""
         cdef PetscInt i, n = 0
         CHKERR( DMCompositeGetNumberDM(self.dm, &n) )
@@ -50,7 +50,7 @@ cdef class DMComposite(DM):
             clvecs[i] = (<Vec?>lvecs[<Py_ssize_t>i]).vec
         CHKERR( DMCompositeScatterArray(self.dm, gvec.vec, clvecs) )
 
-    def gather(self, Vec gvec not None, imode, lvecs):
+    def gather(self, Vec gvec, imode, lvecs):
         """Gather split local vectors into coupled global vector"""
         cdef PetscInsertMode cimode = insertmode(imode)
         cdef PetscInt i, n = 0
@@ -59,7 +59,7 @@ cdef class DMComposite(DM):
         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) )
+        CHKERR( DMCompositeGatherArray(self.dm, cimode, gvec.vec, clvecs) )
 
     def getGlobalISs(self):
         cdef PetscInt i, n = 0
@@ -94,7 +94,7 @@ cdef class DMComposite(DM):
         CHKERR( PetscFree(clgm) )
         return lgms
 
-    def getAccess(self, Vec gvec not None, locs=None):
+    def getAccess(self, Vec gvec, locs=None):
         """Get access to specified parts of global vector.
 
         Use via 'with' context manager (PEP 343).
diff --git a/src/PETSc/DMDA.pyx b/src/PETSc/DMDA.pyx
index 89dc219..fbf9700 100644
--- a/src/PETSc/DMDA.pyx
+++ b/src/PETSc/DMDA.pyx
@@ -336,7 +336,7 @@ cdef class DMDA(DM):
 
     #
 
-    def getVecArray(self, Vec vec not None):
+    def getVecArray(self, Vec vec):
         return _DMDA_Vec_array(self, vec)
 
     #
@@ -388,12 +388,12 @@ cdef class DMDA(DM):
         CHKERR( DMDACreateNaturalVector(self.dm, &vn.vec) )
         return vn
 
-    def globalToNatural(self, Vec vg not None, Vec vn not None, addv=None):
+    def globalToNatural(self, Vec vg, Vec vn, 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) )
 
-    def naturalToGlobal(self, Vec vn not None, Vec vg not None, addv=None):
+    def naturalToGlobal(self, Vec vn, Vec vg, 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) )
diff --git a/src/PETSc/DMPlex.pyx b/src/PETSc/DMPlex.pyx
index 4b7d937..0996757 100644
--- a/src/PETSc/DMPlex.pyx
+++ b/src/PETSc/DMPlex.pyx
@@ -41,12 +41,13 @@ cdef class DMPlex(DM):
         PetscCLEAR(self.obj); self.dm = newdm
         return self
 
-    def createBoxMesh(self, dim, interpolate=True, comm=None):
+    def createBoxMesh(self, dim, numFaces=1, interpolate=True, comm=None):
         cdef PetscInt  cdim = asInt(dim)
+        cdef PetscInt  cnumFaces = asInt(numFaces)
         cdef PetscBool interp = interpolate
         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
         cdef PetscDM   newdm = NULL
-        CHKERR( DMPlexCreateBoxMesh(ccomm,cdim, interp, &newdm) )
+        CHKERR( DMPlexCreateBoxMesh(ccomm, cdim, cnumFaces, interp, &newdm) )
         PetscCLEAR(self.obj); self.dm = newdm
         return self
 
@@ -64,6 +65,16 @@ cdef class DMPlex(DM):
         PetscCLEAR(self.obj); self.dm = newdm
         return self
 
+    def createFromFile(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
+        filename = str2bytes(filename, &cfile)
+        CHKERR( DMPlexCreateFromFile(ccomm, cfile, interp, &newdm) )
+        PetscCLEAR(self.obj); self.dm = newdm
+        return self
+
     def createCGNS(self, cgid, interpolate=True, comm=None):
         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
         cdef PetscBool interp = interpolate
@@ -344,6 +355,37 @@ cdef class DMPlex(DM):
             CHKERR( DMPlexVecRestoreClosure(self.dm, sec.sec, vec.vec, cp, &csize, &cvals) )
         return closure
 
+    def getVecClosure(self, Section sec or None, Vec vec, point):
+        cdef PetscSection csec = sec.sec if sec is not None else NULL
+        cdef PetscInt cp = asInt(point), csize = 0
+        cdef PetscScalar *cvals = NULL
+        CHKERR( DMPlexVecGetClosure(self.dm, csec, vec.vec, cp, &csize, &cvals) )
+        try:
+            closure = array_s(csize, cvals)
+        finally:
+            CHKERR( DMPlexVecRestoreClosure(self.dm, csec, vec.vec, cp, &csize, &cvals) )
+        return closure
+
+    def setVecClosure(self, Section sec or None, Vec vec, point, values, addv=None):
+        cdef PetscSection csec = sec.sec if sec is not None else NULL
+        cdef PetscInt cp = asInt(point)
+        cdef PetscInt csize = 0
+        cdef PetscScalar *cvals = NULL
+        cdef object tmp = iarray_s(values, &csize, &cvals)
+        cdef PetscInsertMode im = insertmode(addv)
+        CHKERR( DMPlexVecSetClosure(self.dm, csec, vec.vec, cp, cvals, im) )
+
+    def setMatClosure(self, Section sec or None, Section gsec or None,
+                      Mat mat, point, values, addv=None):
+        cdef PetscSection csec  =  sec.sec if  sec is not None else NULL
+        cdef PetscSection cgsec = gsec.sec if gsec is not None else NULL
+        cdef PetscInt cp = asInt(point)
+        cdef PetscInt csize = 0
+        cdef PetscScalar *cvals = NULL
+        cdef object tmp = iarray_s(values, &csize, &cvals)
+        cdef PetscInsertMode im = insertmode(addv)
+        CHKERR( DMPlexMatSetClosure(self.dm, csec, cgsec, mat.mat, cp, cvals, im) )
+
     def generate(self, DMPlex boundary, name=None, interpolate=True):
         cdef PetscBool interp = interpolate
         cdef const_char *cname = NULL
@@ -396,10 +438,43 @@ cdef class DMPlex(DM):
         cdef PetscBool flag = useCone
         CHKERR( DMPlexSetAdjacencyUseCone(self.dm, flag) )
 
+    def getAdjacencyUseCone(self):
+        cdef PetscBool flag = PETSC_FALSE
+        CHKERR( DMPlexGetAdjacencyUseCone(self.dm, &flag) )
+        return toBool(flag)
+
     def setAdjacencyUseClosure(self, useClosure=True):
         cdef PetscBool flag = useClosure
         CHKERR( DMPlexSetAdjacencyUseClosure(self.dm, flag) )
 
+    def getAdjacencyUseClosure(self):
+        cdef PetscBool flag = PETSC_FALSE
+        CHKERR( DMPlexGetAdjacencyUseClosure(self.dm, &flag) )
+        return toBool(flag)
+
+    def setAdjacencyUseAnchors(self, useAnchors=True):
+        cdef PetscBool flag = useAnchors
+        CHKERR( DMPlexSetAdjacencyUseAnchors(self.dm, flag) )
+
+    def getAdjacencyUseAnchors(self):
+        cdef PetscBool flag = PETSC_FALSE
+        CHKERR( DMPlexGetAdjacencyUseAnchors(self.dm, &flag) )
+        return toBool(flag)
+
+    def getAdjacency(self, p):
+        cdef PetscInt cp = asInt(p)
+        cdef PetscInt nadj = PETSC_DETERMINE
+        cdef PetscInt *iadj = NULL
+        CHKERR( DMPlexGetAdjacency(self.dm, cp, &nadj, &iadj) )
+        try:
+            adjacency = array_i(nadj, iadj)
+        finally:
+            CHKERR( PetscFree(iadj) )
+        return adjacency
+
+    def setPartitioner(self, Partitioner part):
+        CHKERR( DMPlexSetPartitioner(self.dm, part.part) )
+
     def getPartitioner(self):
         cdef Partitioner part = Partitioner()
         CHKERR( DMPlexGetPartitioner(self.dm, &part.part) )
@@ -411,8 +486,9 @@ cdef class DMPlex(DM):
         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
+        if dmParallel != NULL:
+            PetscCLEAR(self.obj); self.dm = dmParallel
+            return sf
 
     def distributeOverlap(self, overlap=0):
         cdef PetscInt coverlap = asInt(overlap)
@@ -423,8 +499,17 @@ 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,
+    def interpolate(self):
+        cdef PetscDM newdm = NULL
+        CHKERR( DMPlexInterpolate(self.dm, &newdm) )
+        PetscCLEAR(self.obj); self.dm = newdm
+
+    def uninterpolate(self):
+        cdef PetscDM newdm = NULL
+        CHKERR( DMPlexUninterpolate(self.dm, &newdm) )
+        PetscCLEAR(self.obj); self.dm = newdm
+
+    def distributeField(self, SF sf, Section sec, Vec vec,
                         Section newsec=None, Vec newvec=None):
         cdef MPI_Comm ccomm = MPI_COMM_NULL
         if newsec is None: newsec = Section()
@@ -491,6 +576,34 @@ cdef class DMPlex(DM):
                                     cperm, &sec.sec) )
         return sec
 
+    def getPointLocal(self, point):
+        cdef PetscInt start = 0, end = 0
+        cdef PetscInt cpoint = asInt(point)
+        CHKERR( DMPlexGetPointLocal(self.dm, cpoint, &start, &end) )
+        return toInt(start), toInt(end)
+
+    def getPointLocalField(self, point, field):
+        cdef PetscInt start = 0, end = 0
+        cdef PetscInt cpoint = asInt(point)
+        cdef PetscInt cfield = asInt(field)
+        CHKERR( DMPlexGetPointLocalField(self.dm, cpoint, cfield, &start, &end) )
+        return toInt(start), toInt(end)
+
+    def getPointGlobal(self, point):
+        cdef PetscInt start = 0, end = 0
+        cdef PetscInt cpoint = asInt(point)
+        CHKERR( DMPlexGetPointGlobal(self.dm, cpoint, &start, &end) )
+        return toInt(start), toInt(end)
+
+    def getPointGlobalField(self, point, field):
+        cdef PetscInt start = 0, end = 0
+        cdef PetscInt cpoint = asInt(point)
+        cdef PetscInt cfield = asInt(field)
+        CHKERR( DMPlexGetPointGlobalField(self.dm, cpoint, cfield, &start, &end) )
+        return toInt(start), toInt(end)
+
+    #
+
     def setRefinementUniform(self, refinementUniform=True):
         cdef PetscBool flag = refinementUniform
         CHKERR( DMPlexSetRefinementUniform(self.dm, flag) )
@@ -498,7 +611,7 @@ cdef class DMPlex(DM):
     def getRefinementUniform(self):
         cdef PetscBool flag = PETSC_FALSE
         CHKERR( DMPlexGetRefinementUniform(self.dm, &flag) )
-        return <bint> flag
+        return toBool(flag)
 
     def setRefinementLimit(self, refinementLimit):
         cdef PetscReal rval = asReal(refinementLimit)
@@ -517,7 +630,7 @@ cdef class DMPlex(DM):
         CHKERR( DMPlexGetOrdering(self.dm, cval, label, &perm.iset) )
         return perm
 
-    def permute(self, IS perm not None):
+    def permute(self, IS perm):
         cdef DMPlex dm = <DMPlex>type(self)()
         CHKERR( DMPlexPermute(self.dm, perm.iset, &dm.dm) )
         return dm
@@ -531,3 +644,12 @@ cdef class DMPlex(DM):
         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))
+
+    def constructGhostCells(self, labelName=None):
+        cdef const_char *cname = NULL
+        labelName = str2bytes(labelName, &cname)
+        cdef PetscInt numGhostCells = 0
+        cdef PetscDM dmGhosted = NULL
+        CHKERR( DMPlexConstructGhostCells(self.dm, cname, &numGhostCells, &dmGhosted))
+        PetscCLEAR(self.obj); self.dm = dmGhosted
+        return toInt(numGhostCells)
diff --git a/src/PETSc/DMShell.pyx b/src/PETSc/DMShell.pyx
index 4de8547..50e7bc0 100644
--- a/src/PETSc/DMShell.pyx
+++ b/src/PETSc/DMShell.pyx
@@ -7,13 +7,13 @@ cdef class DMShell(DM):
         PetscCLEAR(self.obj); self.dm = newdm
         return self
 
-    def setMatrix(self, Mat mat not None):
+    def setMatrix(self, Mat mat):
         CHKERR( DMShellSetMatrix(self.dm, mat.mat) )
 
-    def setGlobalVector(self, Vec gv not None):
+    def setGlobalVector(self, Vec gv):
         CHKERR( DMShellSetGlobalVector(self.dm, gv.vec) )
 
-    def setLocalVector(self, Vec lv not None):
+    def setLocalVector(self, Vec lv):
         CHKERR( DMShellSetLocalVector(self.dm, lv.vec) )
 
     def setCreateGlobalVector(self, create_gvec, args=None, kargs=None):
@@ -53,7 +53,7 @@ cdef class DMShell(DM):
             cend = &DMSHELL_GlobalToLocalEnd
         CHKERR( DMShellSetGlobalToLocal(self.dm, cbegin, cend) )
 
-    def setGlobalToLocalVecScatter(self, Scatter gtol not None):
+    def setGlobalToLocalVecScatter(self, Scatter gtol):
         CHKERR( DMShellSetGlobalToLocalVecScatter(self.dm, gtol.sct) )
 
     def setLocalToGlobal(self, begin, end, begin_args=None, begin_kargs=None,
@@ -73,7 +73,7 @@ cdef class DMShell(DM):
             cend = &DMSHELL_LocalToGlobalEnd
         CHKERR( DMShellSetLocalToGlobal(self.dm, cbegin, cend) )
 
-    def setLocalToGlobalVecScatter(self, Scatter ltog not None):
+    def setLocalToGlobalVecScatter(self, Scatter ltog):
         CHKERR( DMShellSetLocalToGlobalVecScatter(self.dm, ltog.sct) )
 
     def setLocalToLocal(self, begin, end, begin_args=None, begin_kargs=None,
@@ -95,7 +95,7 @@ cdef class DMShell(DM):
             cend = &DMSHELL_LocalToLocalEnd
         CHKERR( DMShellSetLocalToLocal(self.dm, cbegin, cend) )
 
-    def setLocalToLocalVecScatter(self, Scatter ltol not None):
+    def setLocalToLocalVecScatter(self, Scatter ltol):
         CHKERR( DMShellSetLocalToLocalVecScatter(self.dm, ltol.sct) )
 
     def setCreateMatrix(self, create_matrix, args=None, kargs=None):
@@ -148,6 +148,16 @@ cdef class DMShell(DM):
         else:
             CHKERR( DMShellSetCreateInjection(self.dm, NULL) )
 
+    def setCreateRestriction(self, create_restriction, args=None, kargs=None):
+        if create_restriction is not None:
+            if args  is None: args  = ()
+            if kargs is None: kargs = {}
+            context = (create_restriction, args, kargs)
+            self.set_attr('__create_restriction__', context)
+            CHKERR( DMShellSetCreateRestriction(self.dm, DMSHELL_CreateRestriction) )
+        else:
+            CHKERR( DMShellSetCreateRestriction(self.dm, NULL) )
+
     def setCreateFieldDecomposition(self, decomp, args=None, kargs=None):
         if decomp is not None:
             if args  is None: args = ()
@@ -158,6 +168,26 @@ cdef class DMShell(DM):
         else:
             CHKERR( DMShellSetCreateFieldDecomposition(self.dm, NULL) )
 
+    def setCreateDomainDecomposition(self, decomp, args=None, kargs=None):
+        if decomp is not None:
+            if args  is None: args = ()
+            if kargs is None: kargs = {}
+            context = (decomp, args, kargs)
+            self.set_attr('__create_domain_decomp__', context)
+            CHKERR( DMShellSetCreateDomainDecomposition(self.dm, DMSHELL_CreateDomainDecomposition) )
+        else:
+            CHKERR( DMShellSetCreateDomainDecomposition(self.dm, NULL) )
+
+    def setCreateDomainDecompositionScatters(self, scatter, args=None, kargs=None):
+        if scatter is not None:
+            if args  is None: args = ()
+            if kargs is None: kargs = {}
+            context = (scatter, args, kargs)
+            self.set_attr('__create_domain_decomp_scatters__', context)
+            CHKERR( DMShellSetCreateDomainDecompositionScatters(self.dm, DMSHELL_CreateDomainDecompositionScatters) )
+        else:
+            CHKERR( DMShellSetCreateDomainDecompositionScatters(self.dm, NULL) )
+
     def setCreateSubDM(self, create_subdm, args=None, kargs=None):
         if create_subdm is not None:
             if args  is None: args = ()
diff --git a/src/PETSc/IS.pyx b/src/PETSc/IS.pyx
index 539e770..593b108 100644
--- a/src/PETSc/IS.pyx
+++ b/src/PETSc/IS.pyx
@@ -112,7 +112,7 @@ cdef class IS(Object):
         CHKERR( ISCopy(self.iset, result.iset) )
         return result
 
-    def load(self, Viewer viewer not None):
+    def load(self, Viewer viewer):
         cdef MPI_Comm comm = MPI_COMM_NULL
         cdef PetscObject obj = <PetscObject>(viewer.vwr)
         if self.iset == NULL:
@@ -169,7 +169,7 @@ cdef class IS(Object):
     def isSorted(self):
         cdef PetscBool flag = PETSC_FALSE
         CHKERR( ISSorted(self.iset, &flag) )
-        return <bint> flag
+        return toBool(flag)
 
     def setPermutation(self):
         CHKERR( ISSetPermutation(self.iset) )
@@ -178,7 +178,7 @@ cdef class IS(Object):
     def isPermutation(self):
         cdef PetscBool flag = PETSC_FALSE
         CHKERR( ISPermutation(self.iset, &flag) )
-        return <bint> flag
+        return toBool(flag)
 
     def setIdentity(self):
         CHKERR( ISSetIdentity(self.iset) )
@@ -187,24 +187,24 @@ cdef class IS(Object):
     def isIdentity(self):
         cdef PetscBool flag = PETSC_FALSE
         CHKERR( ISIdentity(self.iset, &flag) )
-        return <bint> flag
+        return toBool(flag)
 
-    def equal(self, IS iset not None):
+    def equal(self, IS iset):
         cdef PetscBool flag = PETSC_FALSE
         CHKERR( ISEqual(self.iset, iset.iset, &flag) )
-        return <bint> flag
+        return toBool(flag)
 
-    def sum(self, IS iset not None):
+    def sum(self, IS iset):
         cdef IS out = IS()
         CHKERR( ISSum(self.iset, iset.iset, &out.iset) )
         return out
 
-    def expand(self, IS iset not None):
+    def expand(self, IS iset):
         cdef IS out = IS()
         CHKERR( ISExpand(self.iset, iset.iset, &out.iset) )
         return out
 
-    def union(self, IS iset not None): # XXX review this
+    def union(self, IS iset): # XXX review this
         cdef PetscBool flag1=PETSC_FALSE, flag2=PETSC_FALSE
         CHKERR( ISSorted(self.iset, &flag1) )
         CHKERR( ISSorted(iset.iset, &flag2) )
@@ -215,7 +215,7 @@ cdef class IS(Object):
             CHKERR( ISExpand(self.iset, iset.iset, &out.iset) )
         return out
 
-    def difference(self, IS iset not None):
+    def difference(self, IS iset):
         cdef IS out = IS()
         CHKERR( ISDifference(self.iset, iset.iset, &out.iset) )
         return out
@@ -227,7 +227,7 @@ cdef class IS(Object):
         CHKERR( ISComplement(self.iset, cnmin, cnmax, &out.iset) )
         return out
 
-    def embed(self, IS iset not None, drop):
+    def embed(self, IS iset, drop):
         cdef PetscBool bval = drop
         cdef IS out = IS()
         CHKERR( ISEmbed(self.iset, iset.iset, bval, &out.iset) )
@@ -340,17 +340,23 @@ cdef class IS(Object):
 # --------------------------------------------------------------------
 
 
-class GLMapType(object):
+class GLMapMode(object):
     MASK = PETSC_IS_GTOLM_MASK
     DROP = PETSC_IS_GTOLM_DROP
 
 
+class LGMapType(object):
+    BASIC = S_(ISLOCALTOGLOBALMAPPINGBASIC)
+    HASH  = S_(ISLOCALTOGLOBALMAPPINGHASH)
+
+
 # --------------------------------------------------------------------
 
 cdef class LGMap(Object):
 
-    MapType = GLMapType
+    MapMode = GLMapMode
 
+    Type = LGMapType
     #
 
     def __cinit__(self):
@@ -362,6 +368,14 @@ cdef class LGMap(Object):
 
     #
 
+    def setType(self, lgmap_type):
+        cdef PetscISLocalToGlobalMappingType cval = NULL
+        lgmap_type = str2bytes(lgmap_type, &cval)
+        CHKERR( ISLocalToGlobalMappingSetType(self.lgm, cval) )
+
+    def setFromOptions(self):
+        CHKERR( ISLocalToGlobalMappingSetFromOptions(self.lgm) )
+
     def view(self, Viewer viewer=None):
         cdef PetscViewer cviewer = NULL
         if viewer is not None: cviewer = viewer.vwr
@@ -384,14 +398,14 @@ cdef class LGMap(Object):
         PetscCLEAR(self.obj); self.lgm = newlgm
         return self
 
-    def createIS(self, IS iset not None):
+    def createIS(self, IS iset):
         cdef PetscLGMap newlgm = NULL
         CHKERR( ISLocalToGlobalMappingCreateIS(
             iset.iset, &newlgm) )
         PetscCLEAR(self.obj); self.lgm = newlgm
         return self
 
-    def createSF(self, SF sf not None, start):
+    def createSF(self, SF sf, start):
         cdef PetscLGMap newlgm = NULL
         cdef PetscInt cstart = asInt(start)
         CHKERR( ISLocalToGlobalMappingCreateSF(sf.sf, cstart, &newlgm) )
@@ -492,38 +506,38 @@ cdef class LGMap(Object):
             self.lgm, niidx, iidx, oidx) )
         return result
 
-    def applyIS(self, IS iset not None):
+    def applyIS(self, IS iset):
         cdef IS result = IS()
         CHKERR( ISLocalToGlobalMappingApplyIS(
             self.lgm, iset.iset, &result.iset) )
         return result
 
-    def applyInverse(self, indices, map_type=None):
-        cdef PetscGLMapType cmtype = PETSC_IS_GTOLM_MASK
-        if map_type is not None: cmtype = map_type
+    def applyInverse(self, indices, mode=None):
+        cdef PetscGLMapMode cmode = PETSC_IS_GTOLM_MASK
+        if mode is not None: cmode = mode
         cdef PetscInt n = 0, *idx = NULL
         indices = iarray_i(indices, &n, &idx)
         cdef PetscInt nout = n, *idxout = NULL
-        if cmtype != PETSC_IS_GTOLM_MASK:
+        if cmode != PETSC_IS_GTOLM_MASK:
             CHKERR( ISGlobalToLocalMappingApply(
-                    self.lgm, cmtype, n, idx, &nout, NULL) )
+                    self.lgm, cmode, n, idx, &nout, NULL) )
         result = oarray_i(empty_i(nout), &nout, &idxout)
         CHKERR( ISGlobalToLocalMappingApply(
-                self.lgm, cmtype, n, idx, &nout, idxout) )
+                self.lgm, cmode, n, idx, &nout, idxout) )
         return result
 
-    def applyBlockInverse(self, indices, map_type=None):
-        cdef PetscGLMapType cmtype = PETSC_IS_GTOLM_MASK
-        if map_type is not None: cmtype = map_type
+    def applyBlockInverse(self, indices, mode=None):
+        cdef PetscGLMapMode cmode = PETSC_IS_GTOLM_MASK
+        if mode is not None: cmode = mode
         cdef PetscInt n = 0, *idx = NULL
         indices = iarray_i(indices, &n, &idx)
         cdef PetscInt nout = n, *idxout = NULL
-        if cmtype != PETSC_IS_GTOLM_MASK:
+        if cmode != PETSC_IS_GTOLM_MASK:
             CHKERR( ISGlobalToLocalMappingApply(
-                    self.lgm, cmtype, n, idx, &nout, NULL) )
+                    self.lgm, cmode, n, idx, &nout, NULL) )
         result = oarray_i(empty_i(nout), &nout, &idxout)
         CHKERR( ISGlobalToLocalMappingApplyBlock(
-                self.lgm, cmtype, n, idx, &nout, idxout) )
+                self.lgm, cmode, n, idx, &nout, idxout) )
         return result
     #
 
@@ -554,6 +568,6 @@ cdef class LGMap(Object):
 # --------------------------------------------------------------------
 
 del ISType
-del GLMapType
-
+del GLMapMode
+del LGMapType
 # --------------------------------------------------------------------
diff --git a/src/PETSc/KSP.pyx b/src/PETSc/KSP.pyx
index db15522..07f0f1c 100644
--- a/src/PETSc/KSP.pyx
+++ b/src/PETSc/KSP.pyx
@@ -8,9 +8,9 @@ class KSPType(object):
     PIPECG     = S_(KSPPIPECG)
     PIPECGRR   = S_(KSPPIPECGRR)
     CGNE       = S_(KSPCGNE)
-    NASH       = S_(KSPNASH)
-    STCG       = S_(KSPSTCG)
-    GLTR       = S_(KSPGLTR)
+    CGNASH     = S_(KSPCGNASH)
+    CGSTCG     = S_(KSPCGSTCG)
+    CGGLTR     = S_(KSPCGGLTR)
     FCG        = S_(KSPFCG)
     PIPEFCG    = S_(KSPPIPEFCG)
     GMRES      = S_(KSPGMRES)
@@ -41,6 +41,7 @@ class KSPType(object):
     PIPEGCR    = S_(KSPPIPEGCR)
     TSIRM      = S_(KSPTSIRM)
     CGLS       = S_(KSPCGLS)
+    FETIDP     = S_(KSPFETIDP)
 
 class KSPNormType(object):
     # native
@@ -160,7 +161,7 @@ cdef class KSP(Object):
         PetscINCREF(dm.obj)
         return dm
 
-    def setDM(self, DM dm not None):
+    def setDM(self, DM dm):
         CHKERR( KSPSetDM(self.ksp, dm.dm) )
 
     def setDMActive(self, bint flag):
@@ -198,7 +199,7 @@ cdef class KSP(Object):
         PetscINCREF(P.obj)
         return (A, P)
 
-    def setPC(self, PC pc not None):
+    def setPC(self, PC pc):
         CHKERR( KSPSetPC(self.ksp, pc.pc) )
 
     def getPC(self):
@@ -328,9 +329,9 @@ cdef class KSP(Object):
         CHKERR( KSPSetComputeEigenvalues(self.ksp, compute) )
 
     def getComputeEigenvalues(self):
-        cdef PetscBool compute = PETSC_FALSE
-        CHKERR( KSPGetComputeEigenvalues(self.ksp, &compute) )
-        return <bint>compute
+        cdef PetscBool flag = PETSC_FALSE
+        CHKERR( KSPGetComputeEigenvalues(self.ksp, &flag) )
+        return toBool(flag)
 
     def setComputeSingularValues(self, bint flag):
         cdef PetscBool compute = PETSC_FALSE
@@ -338,9 +339,9 @@ cdef class KSP(Object):
         CHKERR( KSPSetComputeSingularValues(self.ksp, compute) )
 
     def getComputeSingularValues(self):
-        cdef PetscBool compute = PETSC_FALSE
-        CHKERR( KSPGetComputeSingularValues(self.ksp, &compute) )
-        return <bint>compute
+        cdef PetscBool flag = PETSC_FALSE
+        CHKERR( KSPGetComputeSingularValues(self.ksp, &flag) )
+        return toBool(flag)
 
     # --- initial guess ---
 
@@ -350,9 +351,9 @@ cdef class KSP(Object):
         CHKERR( KSPSetInitialGuessNonzero(self.ksp, guess_nonzero) )
 
     def getInitialGuessNonzero(self):
-        cdef PetscBool guess_nonzero = PETSC_FALSE
-        CHKERR( KSPGetInitialGuessNonzero(self.ksp, &guess_nonzero) )
-        return <bint>guess_nonzero
+        cdef PetscBool flag = PETSC_FALSE
+        CHKERR( KSPGetInitialGuessNonzero(self.ksp, &flag) )
+        return toBool(flag)
 
     def setInitialGuessKnoll(self, bint flag):
         cdef PetscBool guess_knoll = PETSC_FALSE
@@ -360,9 +361,9 @@ cdef class KSP(Object):
         CHKERR( KSPSetInitialGuessKnoll(self.ksp, guess_knoll) )
 
     def getInitialGuessKnoll(self):
-        cdef PetscBool guess_knoll = PETSC_FALSE
-        CHKERR( KSPGetInitialGuessKnoll(self.ksp, &guess_knoll) )
-        return <bint>guess_knoll
+        cdef PetscBool flag = PETSC_FALSE
+        CHKERR( KSPGetInitialGuessKnoll(self.ksp, &flag) )
+        return toBool(flag)
 
     def setUseFischerGuess(self, model, size):
         cdef PetscInt ival1 = asInt(model)
@@ -380,10 +381,10 @@ cdef class KSP(Object):
     def setUpOnBlocks(self):
         CHKERR( KSPSetUpOnBlocks(self.ksp) )
 
-    def solve(self, Vec b not None, Vec x not None):
+    def solve(self, Vec b, Vec x):
         CHKERR( KSPSolve(self.ksp, b.vec, x.vec) )
 
-    def solveTranspose(self, Vec b not None, Vec x not None):
+    def solveTranspose(self, Vec b, Vec x):
         CHKERR( KSPSolveTranspose(self.ksp, b.vec, x.vec) )
 
     def setIterationNumber(self, its):
@@ -427,7 +428,7 @@ cdef class KSP(Object):
 
     def getWorkVecs(self, right=None, left=None):
         cdef bint R = right is not None
-        cdef bint L = left is not None
+        cdef bint L = left  is not None
         cdef PetscInt i=0, nr=0, nl=0
         cdef PetscVec *vr=NULL, *vl=NULL
         if R: nr = asInt(right)
diff --git a/src/PETSc/Log.pyx b/src/PETSc/Log.pyx
index 9aa08ec..b3fc687 100644
--- a/src/PETSc/Log.pyx
+++ b/src/PETSc/Log.pyx
@@ -141,9 +141,9 @@ cdef class LogStage:
         CHKERR( PetscLogStageSetActive(self.id, PETSC_FALSE) )
 
     def getActive(self):
-        cdef PetscBool tval = PETSC_FALSE
-        CHKERR( PetscLogStageGetActive(self.id, &tval) )
-        return <bint> tval
+        cdef PetscBool flag = PETSC_FALSE
+        CHKERR( PetscLogStageGetActive(self.id, &flag) )
+        return toBool(flag)
 
     def setActive(self, flag):
         cdef PetscBool tval = PETSC_FALSE
@@ -159,9 +159,9 @@ cdef class LogStage:
     #
 
     def getVisible(self):
-        cdef PetscBool tval = PETSC_FALSE
-        CHKERR( PetscLogStageGetVisible(self.id, &tval) )
-        return <bint> tval
+        cdef PetscBool flag = PETSC_FALSE
+        CHKERR( PetscLogStageGetVisible(self.id, &flag) )
+        return toBool(flag)
 
     def setVisible(self, flag):
         cdef PetscBool tval = PETSC_FALSE
diff --git a/src/PETSc/Mat.pyx b/src/PETSc/Mat.pyx
index 2f34ff5..0341538 100644
--- a/src/PETSc/Mat.pyx
+++ b/src/PETSc/Mat.pyx
@@ -36,12 +36,6 @@ class MatType(object):
     SBAIJ           = S_(MATSBAIJ)
     SEQSBAIJ        = S_(MATSEQSBAIJ)
     MPISBAIJ        = S_(MATMPISBAIJ)
-    SEQBSTRM        = S_(MATSEQBSTRM)
-    MPIBSTRM        = S_(MATMPIBSTRM)
-    BSTRM           = S_(MATBSTRM)
-    SEQSBSTRM       = S_(MATSEQSBSTRM)
-    MPISBSTRM       = S_(MATMPISBSTRM)
-    SBSTRM          = S_(MATSBSTRM)
     DAAD            = S_(MATDAAD)
     MFFD            = S_(MATMFFD)
     NORMAL          = S_(MATNORMAL)
@@ -405,7 +399,7 @@ cdef class Mat(Object):
 
     #
 
-    def createScatter(self, Scatter scatter not None, comm=None):
+    def createScatter(self, Scatter scatter, comm=None):
         if comm is None: comm = scatter.getComm()
         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
         cdef PetscMat newmat = NULL
@@ -413,29 +407,35 @@ cdef class Mat(Object):
         PetscCLEAR(self.obj); self.mat = newmat
         return self
 
-    def createNormal(self, Mat mat not None):
+    def createNormal(self, Mat mat):
         cdef PetscMat newmat = NULL
         CHKERR( MatCreateNormal(mat.mat, &newmat) )
         PetscCLEAR(self.obj); self.mat = newmat
         return self
 
-    def createTranspose(self, Mat mat not None):
+    def createTranspose(self, Mat mat):
         cdef PetscMat newmat = NULL
         CHKERR( MatCreateTranspose(mat.mat, &newmat) )
         PetscCLEAR(self.obj); self.mat = newmat
         return self
 
-    def createLRC(self, Mat A not None, Mat U not None, Mat V not None):
+    def createLRC(self, Mat A or None, Mat U, Vec c or None, Mat V or None):
+        cdef PetscMat Amat = NULL
+        cdef PetscMat Umat = U.mat
+        cdef PetscVec cvec = NULL
+        cdef PetscMat Vmat = NULL
         cdef PetscMat newmat = NULL
-        CHKERR( MatCreateLRC(A.mat, U.mat, V.mat, &newmat) )
+        if A is not None: Amat = A.mat
+        if c is not None: cvec = c.vec
+        if V is not None: Vmat = V.mat
+        CHKERR( MatCreateLRC(Amat, Umat, cvec, Vmat, &newmat) )
         PetscCLEAR(self.obj); self.mat = newmat
         return self
 
-    def createSubMatrix(self, Mat A not None,
-                        IS isrow not None, IS iscol=None):
+    def createSubMatrixVirtual(self, Mat A, IS isrow, IS iscol=None):
         if iscol is None: iscol = isrow
         cdef PetscMat newmat = NULL
-        CHKERR( MatCreateSubMatrix(A.mat, isrow.iset, iscol.iset, &newmat) )
+        CHKERR( MatCreateSubMatrixVirtual(A.mat, isrow.iset, iscol.iset, &newmat) )
         PetscCLEAR(self.obj); self.mat = newmat
         return self
 
@@ -477,7 +477,7 @@ cdef class Mat(Object):
         PetscCLEAR(self.obj); self.mat = newmat
         return self
 
-    ##def createIS(self, size, LGMap lgmap not None, comm=None):
+    ##def createIS(self, size, LGMap lgmap, comm=None):
     ##    # communicator and sizes
     ##    if comm is None: comm = lgmap.getComm()
     ##    cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
@@ -618,6 +618,7 @@ cdef class Mat(Object):
     def duplicate(self, copy=False):
         cdef PetscMatDuplicateOption flag = MAT_DO_NOT_COPY_VALUES
         if copy: flag = MAT_COPY_VALUES
+        if copy > MAT_COPY_VALUES: flag = MAT_SHARE_NONZERO_PATTERN
         cdef Mat mat = type(self)()
         CHKERR( MatDuplicate(self.mat, flag, &mat.mat) )
         return mat
@@ -633,7 +634,7 @@ cdef class Mat(Object):
             CHKERR( MatCopy(self.mat, result.mat, mstr) )
         return result
 
-    def load(self, Viewer viewer not None):
+    def load(self, Viewer viewer):
         cdef MPI_Comm comm = MPI_COMM_NULL
         cdef PetscObject obj = <PetscObject>(viewer.vwr)
         if self.mat == NULL:
@@ -683,51 +684,51 @@ cdef class Mat(Object):
         CHKERR( MatConjugate(out.mat) )
         return out
 
-    def permute(self, IS row not None, IS col not None):
+    def permute(self, IS row, IS col):
         cdef Mat mat = Mat()
         CHKERR( MatPermute(self.mat, row.iset, col.iset, &mat.mat) )
         return mat
 
-    def equal(self, Mat mat not None):
+    def equal(self, Mat mat):
         cdef PetscBool flag = PETSC_FALSE
         CHKERR( MatEqual(self.mat, mat.mat, &flag) )
-        return <bint> mat
+        return toBool(flag)
 
     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) )
-        return <bint>flag
+        return toBool(flag)
 
     def isSymmetric(self, tol=0):
         cdef PetscReal rval = asReal(tol)
         cdef PetscBool flag = PETSC_FALSE
         CHKERR( MatIsSymmetric(self.mat, rval, &flag) )
-        return <bint>flag
+        return toBool(flag)
 
     def isSymmetricKnown(self):
         cdef PetscBool flag1 = PETSC_FALSE
         cdef PetscBool flag2 = PETSC_FALSE
         CHKERR( MatIsSymmetricKnown(self.mat, &flag1, &flag2) )
-        return (<bint>flag1, <bint>flag2)
+        return (toBool(flag1), toBool(flag2))
 
     def isHermitian(self, tol=0):
         cdef PetscReal rval = asReal(tol)
-        cdef PetscBool bval = PETSC_FALSE
-        CHKERR( MatIsHermitian(self.mat, rval, &bval) )
-        return <bint>bval
+        cdef PetscBool flag = PETSC_FALSE
+        CHKERR( MatIsHermitian(self.mat, rval, &flag) )
+        return toBool(flag)
 
     def isHermitianKnown(self):
-        cdef PetscBool bval1 = PETSC_FALSE
-        cdef PetscBool bval2 = PETSC_FALSE
-        CHKERR( MatIsHermitianKnown(self.mat, &bval1, &bval2) )
-        return (<bint>bval1, <bint>bval2)
+        cdef PetscBool flag1 = PETSC_FALSE
+        cdef PetscBool flag2 = PETSC_FALSE
+        CHKERR( MatIsHermitianKnown(self.mat, &flag1, &flag2) )
+        return (toBool(flag1), toBool(flag2))
 
     def isStructurallySymmetric(self):
-        cdef PetscBool bval = PETSC_FALSE
-        CHKERR( MatIsStructurallySymmetric(self.mat, &bval) )
-        return <bint>bval
+        cdef PetscBool flag = PETSC_FALSE
+        CHKERR( MatIsStructurallySymmetric(self.mat, &flag) )
+        return toBool(flag)
 
     def zeroEntries(self):
         CHKERR( MatZeroEntries(self.mat) )
@@ -842,10 +843,18 @@ cdef class Mat(Object):
     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):
+    def setLGMap(self, LGMap rmap, LGMap cmap=None):
         if cmap is None: cmap = rmap
         CHKERR( MatSetLocalToGlobalMapping(self.mat, rmap.lgm, cmap.lgm) )
 
+    def getLGMap(self):
+        cdef LGMap cmap = LGMap()
+        cdef LGMap rmap = LGMap()
+        CHKERR( MatGetLocalToGlobalMapping(self.mat, &rmap.lgm, &cmap.lgm) )
+        PetscINCREF(cmap.obj)
+        PetscINCREF(rmap.obj)
+        return (rmap, cmap)
+
     def setValueLocal(self, row, col, value, addv=None):
         cdef PetscInt    ival1 = asInt(row)
         cdef PetscInt    ival2 = asInt(col)
@@ -961,9 +970,9 @@ cdef class Mat(Object):
         CHKERR( MatAssemblyEnd(self.mat, flag) )
 
     def isAssembled(self):
-        cdef PetscBool assembled = PETSC_FALSE
-        CHKERR( MatAssembled(self.mat, &assembled) )
-        return <bint> assembled
+        cdef PetscBool flag = PETSC_FALSE
+        CHKERR( MatAssembled(self.mat, &flag) )
+        return toBool(flag)
     #
 
     def createVecs(self, side=None):
@@ -1034,7 +1043,7 @@ cdef class Mat(Object):
         CHKERR( MatGetRowSum(self.mat, result.vec) )
         return result
 
-    def setDiagonal(self, Vec diag not None, addv=None):
+    def setDiagonal(self, Vec diag, addv=None):
         cdef PetscInsertMode caddv = insertmode(addv)
         CHKERR( MatDiagonalSet(self.mat, diag.vec, caddv) )
 
@@ -1056,7 +1065,7 @@ cdef class Mat(Object):
 
     # null space
 
-    def setNullSpace(self, NullSpace nsp not None):
+    def setNullSpace(self, NullSpace nsp):
         CHKERR( MatSetNullSpace(self.mat, nsp.nsp) )
 
     def getNullSpace(self):
@@ -1065,7 +1074,16 @@ cdef class Mat(Object):
         PetscINCREF(nsp.obj)
         return nsp
 
-    def setNearNullSpace(self, NullSpace nsp not None):
+    def setTransposeNullSpace(self, NullSpace nsp):
+        CHKERR( MatSetTransposeNullSpace(self.mat, nsp.nsp) )
+
+    def getTransposeNullSpace(self):
+        cdef NullSpace nsp = NullSpace()
+        CHKERR( MatGetTransposeNullSpace(self.mat, &nsp.nsp) )
+        PetscINCREF(nsp.obj)
+        return nsp
+
+    def setNearNullSpace(self, NullSpace nsp):
         CHKERR( MatSetNearNullSpace(self.mat, nsp.nsp) )
 
     def getNearNullSpace(self):
@@ -1076,27 +1094,27 @@ cdef class Mat(Object):
 
     # matrix-vector product
 
-    def mult(self, Vec x not None, Vec y not None):
+    def mult(self, Vec x, Vec y):
         CHKERR( MatMult(self.mat, x.vec, y.vec) )
 
-    def multAdd(self, Vec x not None, Vec v not None, Vec y not None):
+    def multAdd(self, Vec x, Vec v, Vec y):
         CHKERR( MatMultAdd(self.mat, x.vec, v.vec, y.vec) )
 
-    def multTranspose(self, Vec x not None, Vec y not None):
+    def multTranspose(self, Vec x, Vec y):
         CHKERR( MatMultTranspose(self.mat, x.vec, y.vec) )
 
-    def multTransposeAdd(self, Vec x not None, Vec v not None, Vec y not None):
+    def multTransposeAdd(self, Vec x, Vec v, Vec y):
         CHKERR( MatMultTransposeAdd(self.mat, x.vec, v.vec, y.vec) )
 
-    def multHermitian(self, Vec x not None, Vec y not None):
+    def multHermitian(self, Vec x, Vec y):
         CHKERR( MatMultHermitian(self.mat, x.vec, y.vec) )
 
-    def multHermitianAdd(self, Vec x not None, Vec v not None, Vec y not None):
+    def multHermitianAdd(self, Vec x, Vec v, Vec y):
         CHKERR( MatMultHermitianAdd(self.mat, x.vec, v.vec, y.vec) )
 
     # SOR
 
-    def SOR(self, Vec b not None, Vec x not None, omega=1.0, sortype=None, shift=0.0, its=1, lits=1):
+    def SOR(self, Vec b, Vec x, 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:
@@ -1114,21 +1132,21 @@ cdef class Mat(Object):
         PetscINCREF(submat.obj)
         return submat
 
-    def increaseOverlap(self, IS iset not None, overlap=1):
+    def increaseOverlap(self, IS iset, 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):
+    def createSubMatrix(self, IS isrow, IS iscol=None, Mat submat=None):
         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
         cdef PetscIS ciscol = NULL
         if iscol is not None: ciscol = iscol.iset
         if submat is None: submat = Mat()
         if submat.mat != NULL: reuse = MAT_REUSE_MATRIX
-        CHKERR( MatGetSubMatrix(self.mat, isrow.iset, ciscol,
+        CHKERR( MatCreateSubMatrix(self.mat, isrow.iset, ciscol,
                                 reuse, &submat.mat) )
         return submat
 
-    def getSubMatrices(self, isrows not None, iscols=None, submats=None):
+    def createSubMatrices(self, isrows, 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)
@@ -1150,7 +1168,7 @@ cdef class Mat(Object):
             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) )
+        CHKERR( MatCreateSubMatrices(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
@@ -1162,13 +1180,13 @@ cdef class Mat(Object):
 
     #
 
-    def getLocalSubMatrix(self, IS isrow not None, IS iscol not None, Mat submat=None):
+    def getLocalSubMatrix(self, IS isrow, IS iscol, 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
 
-    def restoreLocalSubMatrix(self, IS isrow not None, IS iscol not None, Mat submat not None):
+    def restoreLocalSubMatrix(self, IS isrow, IS iscol, Mat submat):
         CHKERR( MatRestoreLocalSubMatrix(self.mat, isrow.iset, iscol.iset, &submat.mat) )
 
     #
@@ -1194,26 +1212,26 @@ cdef class Mat(Object):
         cdef PetscReal rval = asReal(tol)
         CHKERR( MatChop(self.mat, rval) )
 
-    def axpy(self, alpha, Mat X not None, structure=None):
+    def axpy(self, alpha, Mat X, structure=None):
         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):
+    def aypx(self, alpha, Mat X, structure=None):
         cdef PetscScalar sval = asScalar(alpha)
         cdef PetscMatStructure flag = matstructure(structure)
         CHKERR( MatAYPX(self.mat, sval, X.mat, flag) )
 
     # matrix-matrix product
 
-    def matMultSymbolic(self, Mat mat not None, fill=None):
+    def matMultSymbolic(self, Mat mat, fill=None):
         cdef Mat result = Mat()
         cdef PetscReal rval = 2
         if fill is not None: rval = asReal(fill)
         CHKERR( MatMatMultSymbolic(self.mat, mat.mat, rval, &result.mat) )
         return result
 
-    def matMultNumeric(self, Mat mat not None, Mat result=None):
+    def matMultNumeric(self, Mat mat, Mat result=None):
         if result is None:
             result = Mat()
         if result.mat == NULL:
@@ -1221,7 +1239,7 @@ cdef class Mat(Object):
         CHKERR( MatMatMultNumeric(self.mat, mat.mat, result.mat) )
         return result
 
-    def matMult(self, Mat mat not None, Mat result=None, fill=None):
+    def matMult(self, Mat mat, Mat result=None, fill=None):
         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
         cdef PetscReal rval = 2
         if result is None:
@@ -1232,7 +1250,7 @@ cdef class Mat(Object):
         CHKERR( MatMatMult(self.mat, mat.mat, reuse, rval, &result.mat) )
         return result
 
-    def matTransposeMult(self, Mat mat not None, Mat result=None, fill=None):
+    def matTransposeMult(self, Mat mat, Mat result=None, fill=None):
         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
         cdef PetscReal rval = 2
         if result is None:
@@ -1243,7 +1261,7 @@ cdef class Mat(Object):
         CHKERR( MatMatTransposeMult(self.mat, mat.mat, reuse, rval, &result.mat) )
         return result
 
-    def transposeMatMult(self, Mat mat not None, Mat result=None, fill=None):
+    def transposeMatMult(self, Mat mat, Mat result=None, fill=None):
         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
         cdef PetscReal rval = 2
         if result is None:
@@ -1254,6 +1272,17 @@ cdef class Mat(Object):
         CHKERR( MatTransposeMatMult(self.mat, mat.mat, reuse, rval, &result.mat) )
         return result
 
+    def PtAP(self, Mat P, Mat result=None, fill=None):
+        cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
+        cdef PetscReal cfill = PETSC_DEFAULT
+        if result is None:
+            result = Mat()
+        elif result.mat != NULL:
+            reuse = MAT_REUSE_MATRIX
+        if fill is not None: cfill = asReal(fill)
+        CHKERR( MatPtAP(self.mat, P.mat, reuse, cfill, &result.mat) )
+        return result
+
     # XXX factorization
 
     def getOrdering(self, ord_type):
@@ -1263,44 +1292,44 @@ cdef class Mat(Object):
         CHKERR( MatGetOrdering(self.mat, cval, &rp.iset, &cp.iset) )
         return (rp, cp)
 
-    def reorderForNonzeroDiagonal(self, IS isrow not None, IS iscol not None, atol=0):
+    def reorderForNonzeroDiagonal(self, IS isrow, IS iscol, atol=0):
         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):
+    def factorLU(self, IS isrow, IS iscol, 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):
+    def factorSymbolicLU(self, Mat mat, IS isrow, IS 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):
+    def factorNumericLU(self, Mat 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):
+    def factorILU(self, IS isrow, IS iscol, 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):
+    def factorSymbolicILU(self, IS isrow, IS iscol, options=None):
         <void>self; <void>isrow; <void>iscol; <void>options; # unused
         raise NotImplementedError
 
-    def factorCholesky(self, IS isperm not None, options=None):
+    def factorCholesky(self, IS isperm, 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):
+    def factorSymbolicCholesky(self, IS isperm, options=None):
         <void>self; <void>isperm; <void>options; # unused
         raise NotImplementedError
-    def factorNumericCholesky(self, Mat mat not None, options=None):
+    def factorNumericCholesky(self, Mat mat, options=None):
         <void>self; <void>mat; <void>options; # unused
         raise NotImplementedError
-    def factorICC(self, IS isperm not None, options=None):
+    def factorICC(self, IS isperm, 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):
+    def factorSymbolicICC(self, IS isperm, options=None):
         <void>self; <void>isperm; <void>options; # unused
         raise NotImplementedError
 
@@ -1312,6 +1341,20 @@ cdef class Mat(Object):
     def setUnfactored(self):
         CHKERR( MatSetUnfactored(self.mat) )
 
+    # LRC
+
+    def getLRCMats(self):
+        cdef Mat A = Mat()
+        cdef Mat U = Mat()
+        cdef Vec c = Vec()
+        cdef Mat V = Mat()
+        CHKERR( MatLRCGetMats(self.mat, &A.mat, &U.mat, &c.vec, &V.mat) )
+        PetscINCREF(A.obj)
+        PetscINCREF(U.obj)
+        PetscINCREF(c.obj)
+        PetscINCREF(V.obj)
+        return (A, U, c, V)
+
     # MUMPS
 
     def setMumpsIcntl(self, icntl, ival):
@@ -1362,25 +1405,25 @@ cdef class Mat(Object):
 
     # solve
 
-    def solveForward(self, Vec b not None, Vec x not None):
+    def solveForward(self, Vec b, Vec x):
         CHKERR( MatForwardSolve(self.mat, b.vec, x.vec) )
 
-    def solveBackward(self, Vec b not None, Vec x not None):
+    def solveBackward(self, Vec b, Vec x):
         CHKERR( MatBackwardSolve(self.mat, b.vec, x.vec) )
 
-    def solve(self, Vec b not None, Vec x not None):
+    def solve(self, Vec b, Vec x):
         CHKERR( MatSolve(self.mat, b.vec, x.vec) )
 
-    def solveTranspose(self, Vec b not None, Vec x not None):
+    def solveTranspose(self, Vec b, Vec x):
         CHKERR( MatSolveTranspose(self.mat, b.vec, x.vec) )
 
-    def solveAdd(self, Vec b not None, Vec y, Vec x not None):
+    def solveAdd(self, Vec b, Vec y, Vec x):
         CHKERR( MatSolveAdd(self.mat, b.vec, y.vec, x.vec) )
 
-    def solveTransposeAdd(self, Vec b not None, Vec y, Vec x not None):
+    def solveTransposeAdd(self, Vec b, Vec y, Vec x):
         CHKERR( MatSolveTransposeAdd(self.mat, b.vec, y.vec, x.vec) )
 
-    def matSolve(self, Mat B not None, Mat X not None):
+    def matSolve(self, Mat B, Mat X):
         CHKERR( MatMatSolve(self.mat, B.mat, X.mat) )
 
     # dense matrices
@@ -1494,7 +1537,7 @@ cdef class NullSpace(Object):
         PetscCLEAR(self.obj); self.nsp = newnsp
         return self
 
-    def createRigidBody(self, Vec coords not None):
+    def createRigidBody(self, Vec coords):
         cdef PetscNullSpace newnsp = NULL
         CHKERR( MatNullSpaceCreateRigidBody(coords.vec, &newnsp) )
         PetscCLEAR(self.obj); self.nsp = newnsp
@@ -1515,7 +1558,7 @@ cdef class NullSpace(Object):
     def hasConstant(self):
         cdef PetscBool flag = PETSC_FALSE
         CHKERR( MatNullSpaceGetVecs(self.nsp, &flag, NULL, NULL) )
-        return <bint> flag
+        return toBool(flag)
 
     def getVecs(self):
         cdef PetscInt i = 0, nv = 0
@@ -1535,9 +1578,14 @@ cdef class NullSpace(Object):
 
     #
 
-    def remove(self, Vec vec not None):
+    def remove(self, Vec vec):
         CHKERR( MatNullSpaceRemove(self.nsp, vec.vec) )
 
+    def test(self, Mat mat):
+        cdef PetscBool flag = PETSC_FALSE
+        CHKERR( MatNullSpaceTest(self.nsp, mat.mat, &flag) )
+        return toBool(flag)
+
 # --------------------------------------------------------------------
 
 del MatType
diff --git a/src/PETSc/Object.pyx b/src/PETSc/Object.pyx
index 8e6626d..890a220 100644
--- a/src/PETSc/Object.pyx
+++ b/src/PETSc/Object.pyx
@@ -31,7 +31,7 @@ cdef class Object:
         obj.obj[0] = o
         return obj
 
-    def __deepcopy__(self, dict memo not None):
+    def __deepcopy__(self, dict memo):
         cdef object obj_copy = None
         try:
             obj_copy = self.copy
@@ -82,6 +82,13 @@ cdef class Object:
     def setFromOptions(self):
         CHKERR( PetscObjectSetFromOptions(self.obj[0]) )
 
+    def viewFromOptions(self, name, Object prefix=None):
+        cdef PetscObject pobj = NULL
+        cdef const_char *cval = NULL
+        pobj = prefix.obj[0] if prefix is not None else NULL
+        name = str2bytes(name, &cval)
+        CHKERR( PetscObjectViewFromOptions(self.obj[0], pobj, cval) )
+
     #
 
     def getComm(self):
@@ -117,7 +124,7 @@ cdef class Object:
 
     # --- general support ---
 
-    def compose(self, name, Object obj):
+    def compose(self, name, Object obj or None):
         cdef const_char *cval = NULL
         cdef PetscObject cobj = NULL
         name = str2bytes(name, &cval)
diff --git a/src/PETSc/Options.pyx b/src/PETSc/Options.pyx
index d5b41fc..0cbf008 100644
--- a/src/PETSc/Options.pyx
+++ b/src/PETSc/Options.pyx
@@ -74,7 +74,7 @@ cdef class Options:
         tmp = getpair(self.prefix, name, &pr, &nm)
         cdef PetscBool flag = PETSC_FALSE
         CHKERR( PetscOptionsHasName(self.opt, pr, nm, &flag) )
-        return <bint> flag
+        return toBool(flag)
 
     def setValue(self, name, value):
         cdef const_char *pr = NULL
diff --git a/src/PETSc/PC.pyx b/src/PETSc/PC.pyx
index 23cc95c..7862954 100644
--- a/src/PETSc/PC.pyx
+++ b/src/PETSc/PC.pyx
@@ -74,6 +74,10 @@ class PCMGType(object):
     FULL           = PC_MG_FULL
     KASKADE        = PC_MG_KASKADE
 
+class PCMGCycleType(object):
+    V = PC_MG_CYCLE_V
+    W = PC_MG_CYCLE_W
+
 class PCGAMGType(object):
     AGG       = S_(PCGAMGAGG)
     GEO       = S_(PCGAMGGEO)
@@ -109,6 +113,7 @@ cdef class PC(Object):
     ASMType       = PCASMType
     GASMType      = PCGASMType
     MGType        = PCMGType
+    MGCycleType   = PCMGCycleType
     GAMGType      = PCGAMGType
     CompositeType = PCCompositeType
     SchurFactType = PCFieldSplitSchurFactType
@@ -197,16 +202,16 @@ cdef class PC(Object):
     def setUpOnBlocks(self):
         CHKERR( PCSetUpOnBlocks(self.pc) )
 
-    def apply(self, Vec x not None, Vec y not None):
+    def apply(self, Vec x, Vec y):
         CHKERR( PCApply(self.pc, x.vec, y.vec) )
 
-    def applyTranspose(self, Vec x not None, Vec y not None):
+    def applyTranspose(self, Vec x, Vec y):
         CHKERR( PCApplyTranspose(self.pc, x.vec, y.vec) )
 
-    def applySymmetricLeft(self, Vec x not None, Vec y not None):
+    def applySymmetricLeft(self, Vec x, Vec y):
         CHKERR( PCApplySymmetricLeft(self.pc, x.vec, y.vec) )
 
-    def applySymmetricRight(self, Vec x not None, Vec y not None):
+    def applySymmetricRight(self, Vec x, Vec y):
         CHKERR( PCApplySymmetricRight(self.pc, x.vec, y.vec) )
 
     # --- discretization space ---
@@ -219,7 +224,7 @@ cdef class PC(Object):
         PetscINCREF(dm.obj)
         return dm
 
-    def setDM(self, DM dm not None):
+    def setDM(self, DM dm):
         CHKERR( PCSetDM(self.pc, dm.dm) )
 
     def setCoordinates(self, coordinates):
@@ -319,13 +324,13 @@ cdef class PC(Object):
         hypretype = str2bytes(hypretype, &cval)
         CHKERR( PCHYPRESetType(self.pc, cval) )
 
-    def setHYPREDiscreteCurl(self, Mat mat not None):
+    def setHYPREDiscreteCurl(self, Mat mat):
         CHKERR( PCHYPRESetDiscreteCurl(self.pc, mat.mat) )
 
-    def setHYPREDiscreteGradient(self, Mat mat not None):
+    def setHYPREDiscreteGradient(self, Mat mat):
         CHKERR( PCHYPRESetDiscreteGradient(self.pc, mat.mat) )
 
-    def setHYPRESetAlphaPoissonMatrix(self, Mat mat not None):
+    def setHYPRESetAlphaPoissonMatrix(self, Mat mat):
         CHKERR( PCHYPRESetAlphaPoissonMatrix(self.pc, mat.mat) )
 
     def setHYPRESetBetaPoissonMatrix(self, Mat mat=None):
@@ -333,8 +338,7 @@ cdef class PC(Object):
         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):
+    def setHYPRESetEdgeConstantVectors(self, Vec ozz, Vec zoz, 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,
@@ -498,7 +502,7 @@ cdef class PC(Object):
         PetscINCREF(ksp.obj)
         return ksp
 
-    def setMGInterpolation(self, level, Mat mat not None):
+    def setMGInterpolation(self, level, Mat mat):
         cdef PetscInt clevel = asInt(level)
         CHKERR( PCMGSetInterpolation(self.pc, clevel, mat.mat) )
 
@@ -509,7 +513,7 @@ cdef class PC(Object):
         PetscINCREF(interpolation.obj)
         return interpolation
 
-    def setMGRestriction(self, level, Mat mat not None):
+    def setMGRestriction(self, level, Mat mat):
         cdef PetscInt clevel = asInt(level)
         CHKERR( PCMGSetRestriction(self.pc, clevel, mat.mat) )
 
@@ -520,7 +524,7 @@ cdef class PC(Object):
         PetscINCREF(restriction.obj)
         return restriction
 
-    def setMGRScale(self, level, Vec rscale not None):
+    def setMGRScale(self, level, Vec rscale):
         cdef PetscInt clevel = asInt(level)
         CHKERR( PCMGSetRScale(self.pc, clevel, rscale.vec) )
 
@@ -552,20 +556,24 @@ cdef class PC(Object):
         PetscINCREF(ksp.obj)
         return ksp
 
-    def setMGCyclesOnLevel(self, level, ncycle):
+    def setMGCycleType(self, cycle_type):
+        cdef PetscPCMGCycleType ctype = cycle_type
+        CHKERR( PCMGSetCycleType(self.pc, ctype) )
+
+    def setMGCycleTypeOnLevel(self, level, cycle_type):
         cdef PetscInt clevel = asInt(level)
-        cdef PetscInt c = asInt(ncycle)
-        CHKERR( PCMGSetCyclesOnLevel(self.pc, clevel, c) )
+        cdef PetscPCMGCycleType ctype = cycle_type
+        CHKERR( PCMGSetCycleTypeOnLevel(self.pc, clevel, ctype) )
 
-    def setMGRhs(self, level, Vec rhs not None):
+    def setMGRhs(self, level, Vec rhs):
         cdef PetscInt clevel = asInt(level)
         CHKERR( PCMGSetRhs(self.pc, clevel, rhs.vec) )
 
-    def setMGX(self, level, Vec x not None):
+    def setMGX(self, level, Vec x):
         cdef PetscInt clevel = asInt(level)
         CHKERR( PCMGSetX(self.pc, clevel, x.vec) )
 
-    def setMGR(self, level, Vec r not None):
+    def setMGR(self, level, Vec r):
         cdef PetscInt clevel = asInt(level)
         CHKERR( PCMGSetR(self.pc, clevel, r.vec) )
 
@@ -576,6 +584,7 @@ del PCSide
 del PCASMType
 del PCGASMType
 del PCMGType
+del PCMGCycleType
 del PCGAMGType
 del PCCompositeType
 del PCFieldSplitSchurPreType
diff --git a/src/PETSc/PETSc.pyx b/src/PETSc/PETSc.pyx
index cde7cd0..2e1ce8b 100644
--- a/src/PETSc/PETSc.pyx
+++ b/src/PETSc/PETSc.pyx
@@ -79,7 +79,10 @@ cdef extern from *:
 
 cdef extern from "scalar.h":
     object      PyPetscScalar_FromPetscScalar(PetscScalar)
-    PetscScalar PyPetscScalar_AsPetscScalar(object) except*
+    PetscScalar PyPetscScalar_AsPetscScalar(object) except? <PetscScalar>-1.0
+
+cdef inline object toBool(PetscBool value):
+    return True if value else False
 
 cdef inline object toInt(PetscInt value):
     return value
@@ -93,7 +96,7 @@ cdef inline PetscReal asReal(object value) except? -1:
 
 cdef inline object toScalar(PetscScalar value):
     return PyPetscScalar_FromPetscScalar(value)
-cdef inline PetscScalar asScalar(object value) except*:
+cdef inline PetscScalar asScalar(object value) except? <PetscScalar>-1.0:
     return PyPetscScalar_AsPetscScalar(value)
 
 # --------------------------------------------------------------------
@@ -139,6 +142,7 @@ include "petscdmcomposite.pxi"
 include "petscdmshell.pxi"
 include "petscsf.pxi"
 include "petscpartitioner.pxi"
+include "petsclinesearch.pxi"
 
 # --------------------------------------------------------------------
 
diff --git a/src/PETSc/SNES.pyx b/src/PETSc/SNES.pyx
index 9c58bf9..8a4d119 100644
--- a/src/PETSc/SNES.pyx
+++ b/src/PETSc/SNES.pyx
@@ -129,11 +129,11 @@ cdef class SNES(Object):
         PetscINCREF(dm.obj)
         return dm
 
-    def setDM(self, DM dm not None):
+    def setDM(self, DM dm):
         CHKERR( SNESSetDM(self.snes, dm.dm) )
 
     # --- FAS ---
-    def setFASInterpolation(self, level, Mat mat not None):
+    def setFASInterpolation(self, level, Mat mat):
         cdef PetscInt clevel = asInt(level)
         CHKERR( SNESFASSetInterpolation(self.snes, clevel, mat.mat) )
 
@@ -144,7 +144,7 @@ cdef class SNES(Object):
         PetscINCREF(mat.obj)
         return mat
 
-    def setFASRestriction(self, level, Mat mat not None):
+    def setFASRestriction(self, level, Mat mat):
         cdef PetscInt clevel = asInt(level)
         CHKERR( SNESFASSetRestriction(self.snes, clevel, mat.mat) )
 
@@ -155,7 +155,7 @@ cdef class SNES(Object):
         PetscINCREF(mat.obj)
         return mat
 
-    def setFASInjection(self, level, Mat mat not None):
+    def setFASInjection(self, level, Mat mat):
         cdef PetscInt clevel = asInt(level)
         CHKERR( SNESFASSetInjection(self.snes, clevel, mat.mat) )
 
@@ -166,7 +166,7 @@ cdef class SNES(Object):
         PetscINCREF(mat.obj)
         return mat
 
-    def setFASRScale(self, level, Vec vec not None):
+    def setFASRScale(self, level, Vec vec):
         cdef PetscInt clevel = asInt(level)
         CHKERR( SNESFASSetRScale(self.snes, clevel, vec.vec) )
 
@@ -234,11 +234,11 @@ cdef class SNES(Object):
         return snes
 
     def hasNPC(self):
-        cdef PetscBool has_npc = PETSC_FALSE
-        CHKERR( SNESHasNPC(self.snes, &has_npc) )
-        return <bint> has_npc
+        cdef PetscBool flag = PETSC_FALSE
+        CHKERR( SNESHasNPC(self.snes, &flag) )
+        return toBool(flag)
 
-    def setNPC(self, SNES snes not None):
+    def setNPC(self, SNES snes):
         CHKERR( SNESSetNPC(self.snes, snes.snes) )
 
     # --- user Function/Jacobian routines ---
@@ -290,7 +290,7 @@ cdef class SNES(Object):
     def getUpdate(self):
         return self.get_attr('__update__')
 
-    def setJacobian(self, jacobian, Mat J, Mat P=None, args=None, kargs=None):
+    def setJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None):
         cdef PetscMat Jmat=NULL
         if J is not None: Jmat = J.mat
         cdef PetscMat Pmat=Jmat
@@ -328,19 +328,36 @@ cdef class SNES(Object):
         cdef object objective = self.get_attr('__objective__')
         return objective
 
-    def computeFunction(self, Vec x not None, Vec f not None):
+    def computeFunction(self, Vec x, Vec f):
         CHKERR( SNESComputeFunction(self.snes, x.vec, f.vec) )
 
-    def computeJacobian(self, Vec x not None, Mat J not None, Mat P=None):
+    def computeJacobian(self, Vec x, Mat J, Mat P=None):
         cdef PetscMat jmat = J.mat, pmat = J.mat
         if P is not None: pmat = P.mat
         CHKERR( SNESComputeJacobian(self.snes, x.vec, jmat, pmat) )
 
-    def computeObjective(self, Vec x not None):
+    def computeObjective(self, Vec x):
         cdef PetscReal o = 0
         CHKERR( SNESComputeObjective(self.snes, x.vec, &o) )
         return toReal(o)
 
+    def setNGS(self, ngs, args=None, kargs=None):
+        if args  is None: args  = ()
+        if kargs is None: kargs = {}
+        context = (ngs, args, kargs)
+        self.set_attr('__ngs__', context)
+        CHKERR( SNESSetNGS(self.snes, SNES_NGS, <void*>context) )
+
+    def getNGS(self):
+        CHKERR( SNESGetNGS(self.snes, NULL, NULL) )
+        cdef object ngs = self.get_attr('__ngs__')
+        return ngs
+
+    def computeNGS(self, Vec x, Vec b=None):
+        cdef PetscVec bvec = NULL
+        if b is not None: bvec = b.vec
+        CHKERR( SNESComputeNGS(self.snes, bvec, x.vec) )
+
     # --- tolerances and convergence ---
 
     def setTolerances(self, rtol=None, atol=None, stol=None, max_it=None):
@@ -514,7 +531,7 @@ cdef class SNES(Object):
     def reset(self):
         CHKERR( SNESReset(self.snes) )
 
-    def solve(self, Vec b, Vec x not None):
+    def solve(self, Vec b or None, Vec x):
         cdef PetscVec rhs = NULL
         if b is not None: rhs = b.vec
         CHKERR( SNESSolve(self.snes, rhs, x.vec) )
@@ -537,6 +554,15 @@ cdef class SNES(Object):
         CHKERR( SNESGetIterationNumber(self.snes, &ival) )
         return toInt(ival)
 
+    def setFunctionNorm(self, norm):
+        cdef PetscReal rval = asReal(norm)
+        CHKERR( SNESSetFunctionNorm(self.snes, rval) )
+
+    def getFunctionNorm(self):
+        cdef PetscReal rval = 0
+        CHKERR( SNESGetFunctionNorm(self.snes, &rval) )
+        return toReal(rval)
+
     def getLinearSolveIterations(self):
         cdef PetscInt ival = 0
         CHKERR( SNESGetLinearSolveIterations(self.snes, &ival) )
@@ -554,7 +580,7 @@ cdef class SNES(Object):
         PetscINCREF(vec.obj)
         return vec
 
-    def setSolution(self, Vec vec not None):
+    def setSolution(self, Vec vec):
         CHKERR( SNESSetSolution(self.snes, vec.vec) )
 
     def getSolutionUpdate(self):
@@ -565,7 +591,7 @@ cdef class SNES(Object):
 
     # --- linear solver ---
 
-    def setKSP(self, KSP ksp not None):
+    def setKSP(self, KSP ksp):
         CHKERR( SNESSetKSP(self.snes, ksp.ksp) )
 
     def getKSP(self):
@@ -582,7 +608,7 @@ cdef class SNES(Object):
     def getUseEW(self):
         cdef PetscBool flag = PETSC_FALSE
         CHKERR( SNESKSPGetUseEW(self.snes, &flag) )
-        return <bint> flag
+        return toBool(flag)
 
     def setParamsEW(self, version=None,
                     rtol_0=None, rtol_max=None,
@@ -629,22 +655,22 @@ cdef class SNES(Object):
         CHKERR( SNESSetUseMFFD(self.snes, bval) )
 
     def getUseMF(self):
-        cdef PetscBool bval = PETSC_FALSE
-        CHKERR( SNESGetUseMFFD(self.snes, &bval) )
-        return <bint> bval
+        cdef PetscBool flag = PETSC_FALSE
+        CHKERR( SNESGetUseMFFD(self.snes, &flag) )
+        return toBool(flag)
 
     def setUseFD(self, flag=True):
         cdef PetscBool bval = flag
         CHKERR( SNESSetUseFDColoring(self.snes, bval) )
 
     def getUseFD(self):
-        cdef PetscBool bval = PETSC_FALSE
-        CHKERR( SNESGetUseFDColoring(self.snes, &bval) )
-        return <bint> bval
+        cdef PetscBool flag = PETSC_FALSE
+        CHKERR( SNESGetUseFDColoring(self.snes, &flag) )
+        return toBool(flag)
 
     # --- VI ---
 
-    def setVariableBounds(self, Vec xl not None, Vec xu not None):
+    def setVariableBounds(self, Vec xl, Vec xu):
         CHKERR( SNESVISetVariableBounds(self.snes, xl.vec, xu.vec) )
 
     def getVIInactiveSet(self):
@@ -693,6 +719,20 @@ cdef class SNES(Object):
         CHKERR( SNESCompositeGetNumber(self.snes, &cn) )
         return toInt(cn)
 
+    # --- NASM ---
+
+    def getNASMSNES(self, n):
+        cdef PetscInt cn = asInt(n)
+        cdef SNES snes = SNES()
+        CHKERR( SNESNASMGetSNES(self.snes, cn, &snes.snes) )
+        PetscINCREF(snes.obj)
+        return snes
+
+    def getNASMNumber(self):
+        cdef PetscInt cn = 0
+        CHKERR( SNESNASMGetNumber(self.snes, &cn) )
+        return toInt(cn)
+
     # --- application context ---
 
     property appctx:
@@ -787,6 +827,12 @@ cdef class SNES(Object):
         def __set__(self, value):
             self.setIterationNumber(value)
 
+    property norm:
+        def __get__(self):
+            return self.getFunctionNorm()
+        def __set__(self, value):
+            self.setFunctionNorm(value)
+
     property history:
         def __get__(self):
             return self.getConvergenceHistory()
diff --git a/src/PETSc/Scatter.pyx b/src/PETSc/Scatter.pyx
index 16c7ca7..e47f4a0 100644
--- a/src/PETSc/Scatter.pyx
+++ b/src/PETSc/Scatter.pyx
@@ -24,8 +24,8 @@ cdef class Scatter(Object):
         CHKERR( VecScatterDestroy(&self.sct) )
         return self
 
-    def create(self, Vec vec_from not None, IS is_from,
-               Vec vec_to not None, IS is_to):
+    def create(self, Vec vec_from, IS is_from or None,
+               Vec vec_to, IS is_to or None):
         cdef PetscIS cisfrom = NULL, cisto = NULL
         if is_from is not None: cisfrom = is_from.iset
         if is_to   is not None: cisto   = is_to.iset
@@ -41,7 +41,7 @@ cdef class Scatter(Object):
         return scatter
 
     @classmethod
-    def toAll(cls, Vec vec not None):
+    def toAll(cls, Vec vec):
         cdef Scatter scatter = Scatter()
         cdef Vec ovec = Vec()
         CHKERR( VecScatterCreateToAll(
@@ -49,7 +49,7 @@ cdef class Scatter(Object):
         return (scatter, ovec)
 
     @classmethod
-    def toZero(cls, Vec vec not None):
+    def toZero(cls, Vec vec):
         cdef Scatter scatter = Scatter()
         cdef Vec ovec = Vec()
         CHKERR( VecScatterCreateToZero(
@@ -57,15 +57,13 @@ cdef class Scatter(Object):
         return (scatter, ovec)
     #
 
-    def begin(self, Vec vec_from not None, Vec vec_to not None,
-              addv=None, mode=None):
+    def begin(self, Vec vec_from, Vec vec_to, addv=None, mode=None):
         cdef PetscInsertMode  caddv = insertmode(addv)
         cdef PetscScatterMode csctm = scattermode(mode)
         CHKERR( VecScatterBegin(self.sct, vec_from.vec, vec_to.vec,
                                 caddv, csctm) )
 
-    def end(self, Vec vec_from not None, Vec vec_to not None,
-            addv=None, mode=None):
+    def end(self, Vec vec_from, Vec vec_to, addv=None, mode=None):
         cdef PetscInsertMode  caddv = insertmode(addv)
         cdef PetscScatterMode csctm = scattermode(mode)
         CHKERR( VecScatterEnd(self.sct, vec_from.vec, vec_to.vec,
@@ -73,22 +71,19 @@ cdef class Scatter(Object):
 
     #
 
-    def scatterBegin(self, Vec vec_from not None, Vec vec_to not None,
-                     addv=None, mode=None):
+    def scatterBegin(self, Vec vec_from, Vec vec_to, addv=None, mode=None):
         cdef PetscInsertMode  caddv = insertmode(addv)
         cdef PetscScatterMode csctm = scattermode(mode)
         CHKERR( VecScatterBegin(self.sct, vec_from.vec, vec_to.vec,
                                 caddv, csctm) )
 
-    def scatterEnd(self, Vec vec_from not None, Vec vec_to not None,
-                   addv=None, mode=None):
+    def scatterEnd(self, Vec vec_from, Vec vec_to, addv=None, mode=None):
         cdef PetscInsertMode  caddv = insertmode(addv)
         cdef PetscScatterMode csctm = scattermode(mode)
         CHKERR( VecScatterEnd(self.sct, vec_from.vec, vec_to.vec,
                               caddv, csctm) )
 
-    def scatter(self, Vec vec_from not None, Vec vec_to not None,
-                addv=None, mode=None):
+    def scatter(self, Vec vec_from, Vec vec_to, addv=None, mode=None):
         cdef PetscInsertMode  caddv = insertmode(addv)
         cdef PetscScatterMode csctm = scattermode(mode)
         CHKERR( VecScatterBegin(self.sct, vec_from.vec, vec_to.vec,
diff --git a/src/PETSc/Section.pyx b/src/PETSc/Section.pyx
index 9472dc9..353b7fb 100644
--- a/src/PETSc/Section.pyx
+++ b/src/PETSc/Section.pyx
@@ -208,7 +208,7 @@ cdef class Section(Object):
         CHKERR( PetscSectionGetOffsetRange(self.sec,&oStart,&oEnd) )
         return toInt(oStart),toInt(oEnd)
 
-    def createGlobalSection(self, SF sf not None):
+    def createGlobalSection(self, SF sf):
         cdef Section gsec = Section()
         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 073288d..e557093 100644
--- a/src/PETSc/Sys.pyx
+++ b/src/PETSc/Sys.pyx
@@ -3,60 +3,48 @@
 cdef class Sys:
 
     @classmethod
-    def getVersion(cls, patch=False, devel=False,
-                   date=False, author=False):
-        cdef int cmajor = PETSC_VERSION_MAJOR
-        cdef int cminor = PETSC_VERSION_MINOR
-        cdef int cmicro = PETSC_VERSION_SUBMINOR
-        cdef int cpatch = PETSC_VERSION_PATCH
-        cdef int cdevel = not PETSC_VERSION_RELEASE
-        cdef const_char *cdate = PETSC_VERSION_DATE
-        cdef const_char *cauthorinfo = PETSC_AUTHOR_INFO
-        version = (cmajor, cminor, cmicro)
-        out = version
-        if patch or devel or date or author:
+    def getVersion(cls, devel=False, date=False, author=False):
+        cdef char cversion[256]
+        cdef PetscInt major=0, minor=0, micro=0, release=0
+        CHKERR( PetscGetVersion(cversion, sizeof(cversion)) )
+        CHKERR( PetscGetVersionNumber(&major, &minor, &micro, &release) )
+        out = version = (toInt(major), toInt(minor), toInt(micro))
+        if devel or date or author:
             out = [version]
-            if patch:
-                out.append(cpatch)
             if devel:
-                out.append(<bint>cdevel)
+                out.append(not <bint>release)
             if date:
-                date = bytes2str(cdate)
+                vstr = bytes2str(cversion)
+                if release != 0:
+                    date = vstr.split(",", 1)[-1].strip()
+                else:
+                    date = vstr.split("GIT Date:")[-1].strip()
                 out.append(date)
             if author:
-                author = bytes2str(cauthorinfo).split('\n')
-                author = [s.strip() for s in author if s]
+                author = bytes2str(PETSC_AUTHOR_INFO).split('\n')
+                author = tuple([s.strip() for s in author if s])
                 out.append(author)
         return tuple(out)
 
     @classmethod
     def getVersionInfo(cls):
-        cdef int cmajor = PETSC_VERSION_MAJOR
-        cdef int cminor = PETSC_VERSION_MINOR
-        cdef int cmicro = PETSC_VERSION_SUBMINOR
-        cdef int cpatch = PETSC_VERSION_PATCH
-        cdef int crelease = PETSC_VERSION_RELEASE
-        cdef const_char *cdate = PETSC_VERSION_DATE
-        cdef const_char *cauthorinfo = PETSC_AUTHOR_INFO
-        author = bytes2str(cauthorinfo).split('\n')
-        author = [s.strip() for s in author if s]
-        return dict(major      = cmajor,
-                    minor      = cminor,
-                    subminor   = cmicro,
-                    patch      = cpatch,
-                    release    = <bint>crelease,
-                    date       = bytes2str(cdate),
+        version, dev, date, author = cls.getVersion(True, True, True)
+        return dict(major      = version[0],
+                    minor      = version[1],
+                    subminor   = version[2],
+                    release    = not dev,
+                    date       = date,
                     authorinfo = author)
 
     # --- xxx ---
 
     @classmethod
     def isInitialized(cls):
-        return <bint>PetscInitializeCalled
+        return toBool(PetscInitializeCalled)
 
     @classmethod
     def isFinalized(cls):
-        return <bint>PetscFinalizeCalled
+        return toBool(PetscFinalizeCalled)
 
     # --- xxx ---
 
@@ -165,6 +153,10 @@ cdef class Sys:
         CHKERR( PetscPopErrorHandler() )
 
     @classmethod
+    def popSignalHandler(cls):
+        CHKERR( PetscPopSignalHandler() )
+
+    @classmethod
     def infoAllow(cls, flag):
         cdef PetscBool tval = PETSC_FALSE
         if flag: tval = PETSC_TRUE
@@ -175,9 +167,9 @@ cdef class Sys:
         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 PetscBool flag = get_citation(citation)
+        CHKERR( PetscCitationsRegister(cit, &flag) )
+        set_citation(citation, toBool(flag))
 
 cdef dict citations_registry = { }
 
diff --git a/src/PETSc/TAO.pyx b/src/PETSc/TAO.pyx
index c359b10..87771ab 100644
--- a/src/PETSc/TAO.pyx
+++ b/src/PETSc/TAO.pyx
@@ -137,7 +137,7 @@ cdef class TAO(Object):
     def getAppCtx(self):
         return self.get_attr("__appctx__")
 
-    def setInitial(self, Vec x not None):
+    def setInitial(self, Vec x):
         """
         """
         CHKERR( TaoSetInitialVector(self.tao, x.vec) )
@@ -235,7 +235,7 @@ cdef class TAO(Object):
 
     #
 
-    def setStateDesignIS(self, IS state, IS design):
+    def setStateDesignIS(self, IS state=None, IS design=None):
         """
         """
         cdef PetscIS s_is = NULL, d_is = NULL
@@ -273,36 +273,36 @@ cdef class TAO(Object):
 
     # --------------
 
-    def computeObjective(self, Vec x not None):
+    def computeObjective(self, Vec x):
         """
         """
         cdef PetscReal f = 0
         CHKERR( TaoComputeObjective(self.tao, x.vec, &f) )
         return toReal(f)
 
-    def computeSeparableObjective(self, Vec x not None, Vec f not None):
+    def computeSeparableObjective(self, Vec x, Vec f):
         """
         """
         CHKERR( TaoComputeSeparableObjective(self.tao, x.vec, f.vec) )
 
-    def computeGradient(self, Vec x not None, Vec g not None):
+    def computeGradient(self, Vec x, Vec g):
         """
         """
         CHKERR( TaoComputeGradient(self.tao, x.vec, g.vec) )
 
-    def computeObjectiveGradient(self, Vec x not None, Vec g not None):
+    def computeObjectiveGradient(self, Vec x, Vec g):
         """
         """
         cdef PetscReal f = 0
         CHKERR( TaoComputeObjectiveAndGradient(self.tao, x.vec, &f, g.vec) )
         return toReal(f)
 
-    def computeDualVariables(self, Vec xl not None, Vec xu not None):
+    def computeDualVariables(self, Vec xl, Vec xu):
         """
         """
         CHKERR( TaoComputeDualVariables(self.tao, xl.vec, xu.vec) )
 
-    def computeVariableBounds(self, Vec xl not None, Vec xu not None):
+    def computeVariableBounds(self, Vec xl, Vec xu):
         """
         """
         CHKERR( TaoComputeVariableBounds(self.tao) )
@@ -319,19 +319,19 @@ cdef class TAO(Object):
             else:
                 CHKERR( VecSet(xu.vec, <PetscScalar>PETSC_INFINITY) )
 
-    def computeConstraints(self, Vec x not None, Vec c not None):
+    def computeConstraints(self, Vec x, Vec c):
         """
         """
         CHKERR( TaoComputeConstraints(self.tao, x.vec, c.vec) )
 
-    def computeHessian(self, Vec x not None, Mat H not None, Mat P=None):
+    def computeHessian(self, Vec x, Mat H, Mat P=None):
         """
         """
         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):
+    def computeJacobian(self, Vec x, Mat J, Mat P=None):
         """
         """
         cdef PetscMat jmat = J.mat, pmat = J.mat
diff --git a/src/PETSc/TS.pyx b/src/PETSc/TS.pyx
index ae62dc0..8953414 100644
--- a/src/PETSc/TS.pyx
+++ b/src/PETSc/TS.pyx
@@ -12,7 +12,7 @@ class TSType(object):
     THETA    = S_(TSTHETA)
     ALPHA    = S_(TSALPHA)
     ALPHA2  = S_(TSALPHA2)
-    GL       = S_(TSGL)
+    GLLE     = S_(TSGLLE)
     SSP      = S_(TSSSP)
     ARKIMEX  = S_(TSARKIMEX)
     ROSW     = S_(TSROSW)
@@ -26,6 +26,16 @@ class TSType(object):
     CRANK_NICOLSON = CN
     RUNGE_KUTTA    = RK
 
+class TSRKType(object):
+    RK1FE = S_(TSRK1FE)
+    RK2A  = S_(TSRK2A)
+    RK4   = S_(TSRK4)
+    RK3BS = S_(TSRK3BS)
+    RK3   = S_(TSRK3)
+    RK5F  = S_(TSRK5F)
+    RK5DP = S_(TSRK5DP)
+    RK5BS = S_(TSRK5BS)
+
 class TSProblemType(object):
     LINEAR    = TS_LINEAR
     NONLINEAR = TS_NONLINEAR
@@ -69,6 +79,7 @@ class TSConvergedReason(object):
 cdef class TS(Object):
 
     Type = TSType
+    RKType = TSRKType
     ProblemType = TSProblemType
     EquationType = TSEquationType
     ExactFinalTime = TSExactFinalTime
@@ -88,7 +99,7 @@ cdef class TS(Object):
         if viewer is not None: cviewer = viewer.vwr
         CHKERR( TSView(self.ts, cviewer) )
 
-    def load(self, Viewer viewer not None):
+    def load(self, Viewer viewer):
         CHKERR( TSLoad(self.ts, viewer.vwr) )
 
     def destroy(self):
@@ -112,11 +123,21 @@ cdef class TS(Object):
         ts_type = str2bytes(ts_type, &cval)
         CHKERR( TSSetType(self.ts, cval) )
 
+    def setRKType(self, ts_type):
+        cdef const_char *cval = NULL
+        ts_type = str2bytes(ts_type, &cval)
+        CHKERR( TSRKSetType(self.ts, cval) )
+
     def getType(self):
         cdef PetscTSType cval = NULL
         CHKERR( TSGetType(self.ts, &cval) )
         return bytes2str(cval)
 
+    def getRKType(self):
+        cdef PetscTSRKType cval = NULL
+        CHKERR( TSRKGetType(self.ts, &cval) )
+        return bytes2str(cval)
+
     def setProblemType(self, ptype):
         CHKERR( TSSetProblemType(self.ts, ptype) )
 
@@ -182,21 +203,21 @@ cdef class TS(Object):
         else:
             CHKERR( TSSetRHSJacobian(self.ts, Jmat, Pmat, NULL, NULL) )
 
-    def computeRHSFunction(self, t, Vec x not None, Vec f not None):
+    def computeRHSFunction(self, t, Vec x, Vec f):
         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):
+    def computeRHSFunctionLinear(self, t, Vec x, Vec f):
         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):
+    def computeRHSJacobian(self, t, Vec x, Mat J, Mat P=None):
         cdef PetscReal time = asReal(t)
         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):
+    def computeRHSJacobianConstant(self, t, Vec x, Mat J, Mat P=None):
         cdef PetscReal time = asReal(t)
         cdef PetscMat jmat = J.mat, pmat = J.mat
         if P is not None: pmat = P.mat
@@ -245,16 +266,16 @@ cdef class TS(Object):
             CHKERR( TSSetIJacobian(self.ts, Jmat, Pmat, NULL, NULL) )
 
     def computeIFunction(self,
-                         t, Vec x not None, Vec xdot not None,
-                         Vec f not None, imex=False):
+                         t, Vec x, Vec xdot,
+                         Vec f, imex=False):
         cdef PetscReal rval = asReal(t)
         cdef PetscBool bval = imex
         CHKERR( TSComputeIFunction(self.ts, rval, x.vec, xdot.vec,
                                    f.vec, bval) )
 
     def computeIJacobian(self,
-                         t, Vec x not None, Vec xdot not None, a,
-                         Mat J not None, Mat P=None, imex=False):
+                         t, Vec x, Vec xdot, a,
+                         Mat J, Mat P=None, imex=False):
         cdef PetscReal rval1 = asReal(t)
         cdef PetscReal rval2 = asReal(a)
         cdef PetscBool bval  = imex
@@ -277,9 +298,63 @@ cdef class TS(Object):
         cdef object jacobian = self.get_attr('__ijacobian__')
         return (J, P, jacobian)
 
+    def setI2Function(self, function, Vec f=None, args=None, kargs=None):
+        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 = {}
+            context = (function, args, kargs)
+            self.set_attr('__i2function__', context)
+            CHKERR( TSSetI2Function(self.ts, fvec, TS_I2Function, <void*>context) )
+        else:
+            CHKERR( TSSetI2Function(self.ts, fvec, NULL, NULL) )
+
+    def setI2Jacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None):
+        cdef PetscMat Jmat=NULL
+        if J is not None: Jmat = J.mat
+        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 = {}
+            context = (jacobian, args, kargs)
+            self.set_attr('__i2jacobian__', context)
+            CHKERR( TSSetI2Jacobian(self.ts, Jmat, Pmat, TS_I2Jacobian, <void*>context) )
+        else:
+            CHKERR( TSSetI2Jacobian(self.ts, Jmat, Pmat, NULL, NULL) )
+
+    def computeI2Function(self, t, Vec x, Vec xdot, Vec xdotdot, Vec f):
+        cdef PetscReal rval = asReal(t)
+        CHKERR( TSComputeI2Function(self.ts, rval, x.vec, xdot.vec, xdotdot.vec,
+                                   f.vec) )
+
+    def computeI2Jacobian(self, t, Vec x, Vec xdot, Vec xdotdot, v, a, Mat J, Mat P=None):
+        cdef PetscReal rval1 = asReal(t)
+        cdef PetscReal rval2 = asReal(v)
+        cdef PetscReal rval3 = asReal(a)
+        cdef PetscMat jmat = J.mat, pmat = J.mat
+        if P is not None: pmat = P.mat
+        CHKERR( TSComputeI2Jacobian(self.ts, rval1, x.vec, xdot.vec, xdotdot.vec, rval2, rval3,
+                                   jmat, pmat) )
+
+    def getI2Function(self):
+        cdef Vec f = Vec()
+        CHKERR( TSGetI2Function(self.ts, &f.vec, NULL, NULL) )
+        PetscINCREF(f.obj)
+        cdef object function = self.get_attr('__i2function__')
+        return (f, function)
+
+    def getI2Jacobian(self):
+        cdef Mat J = Mat(), P = Mat()
+        CHKERR( TSGetI2Jacobian(self.ts, &J.mat, &P.mat, NULL, NULL) )
+        PetscINCREF(J.obj); PetscINCREF(P.obj)
+        cdef object jacobian = self.get_attr('__i2jacobian__')
+        return (J, P, jacobian)
+
     # --- solution vector ---
 
-    def setSolution(self, Vec u not None):
+    def setSolution(self, Vec u):
         CHKERR( TSSetSolution(self.ts, u.vec) )
 
     def getSolution(self):
@@ -288,6 +363,17 @@ cdef class TS(Object):
         PetscINCREF(u.obj)
         return u
 
+    def setSolution2(self, Vec u, Vec v):
+        CHKERR( TS2SetSolution(self.ts, u.vec, v.vec) )
+
+    def getSolution2(self):
+        cdef Vec u = Vec()
+        cdef Vec v = Vec()
+        CHKERR( TS2GetSolution(self.ts, &u.vec, &v.vec) )
+        PetscINCREF(u.obj)
+        PetscINCREF(v.obj)
+        return (u, v)
+
     # --- inner solver ---
 
     def getSNES(self):
@@ -312,7 +398,7 @@ cdef class TS(Object):
         PetscINCREF(dm.obj)
         return dm
 
-    def setDM(self, DM dm not None):
+    def setDM(self, DM dm):
         CHKERR( TSSetDM(self.ts, dm.dm) )
 
     # --- customization ---
@@ -336,11 +422,6 @@ cdef class TS(Object):
         CHKERR( TSGetSolveTime(self.ts, &rval) )
         return toReal(rval)
 
-    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) )
-
     def setTimeStep(self, time_step):
         cdef PetscReal rval = asReal(time_step)
         CHKERR( TSSetTimeStep(self.ts, rval) )
@@ -352,52 +433,29 @@ cdef class TS(Object):
 
     def setStepNumber(self, step_number):
         cdef PetscInt ival = asInt(step_number)
-        CHKERR( TSSetTimeStepNumber(self.ts, ival) )
+        CHKERR( TSSetStepNumber(self.ts, ival) )
 
     def getStepNumber(self):
         cdef PetscInt ival = 0
-        CHKERR( TSGetTimeStepNumber(self.ts, &ival) )
+        CHKERR( TSGetStepNumber(self.ts, &ival) )
         return toInt(ival)
 
     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) )
+        CHKERR( TSSetMaxTime(self.ts, rval) )
 
     def getMaxTime(self):
         cdef PetscReal rval = 0
-        CHKERR( TSGetDuration(self.ts, NULL, &rval) )
+        CHKERR( TSGetMaxTime(self.ts, &rval) )
         return toReal(rval)
 
     def setMaxSteps(self, max_steps):
         cdef PetscInt  ival = asInt(max_steps)
-        cdef PetscReal rval = 0
-        CHKERR( TSGetDuration(self.ts, NULL, &rval) )
-        CHKERR( TSSetDuration(self.ts, ival, rval) )
+        CHKERR( TSSetMaxSteps(self.ts, ival) )
 
     def getMaxSteps(self):
         cdef PetscInt ival = 0
-        CHKERR( TSGetDuration(self.ts, &ival, NULL) )
-        return toInt(ival)
-
-    def setDuration(self, max_time, max_steps=None):
-        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)
-        CHKERR( TSSetDuration(self.ts, ival, rval) )
-
-    def getDuration(self):
-        cdef PetscInt  ival = 0
-        cdef PetscReal rval = 0
-        CHKERR( TSGetDuration(self.ts, &ival, &rval) )
-        return (toReal(rval), toInt(ival))
-
-    def getTotalSteps(self):
-        cdef PetscInt ival = 0
-        CHKERR( TSGetTotalSteps(self.ts, &ival) )
+        CHKERR( TSGetMaxSteps(self.ts, &ival) )
         return toInt(ival)
 
     def getSNESIterations(self):
@@ -564,13 +622,109 @@ cdef class TS(Object):
     def rollBack(self):
         CHKERR( TSRollBack(self.ts) )
 
-    def solve(self, Vec u not None):
+    def solve(self, Vec u):
         CHKERR( TSSolve(self.ts, u.vec) )
 
-    def interpolate(self, t, Vec u not None):
+    def interpolate(self, t, Vec u):
         cdef PetscReal rval = asReal(t)
         CHKERR( TSInterpolate(self.ts, rval, u.vec) )
 
+    # --- Adjoint methods ---
+
+    def setSaveTrajectory(self):
+        CHKERR(TSSetSaveTrajectory(self.ts))
+
+    def getCostIntegral(self):
+        cdef Vec cost = Vec()
+        CHKERR( TSGetCostIntegral(self.ts, &cost.vec) )
+        PetscINCREF(cost.obj)
+        return cost
+
+    def setCostGradients(self, vl, vm=None):
+        cdef PetscInt n = 0;
+        cdef PetscVec *vecl = NULL
+        cdef PetscVec *vecm = NULL
+        cdef mem1 = None, mem2 = None
+        if isinstance(vl, Vec): vl = [vl]
+        if isinstance(vm, Vec): vm = [vm]
+        if vl is not None:
+            n = <PetscInt>len(vl)
+        elif vm is not None:
+            n = <PetscInt>len(vm)
+        if vl is not None:
+            assert len(vl) == <Py_ssize_t>n
+            mem1 = oarray_p(empty_p(n), NULL, <void**>&vecl)
+            for i from 0 <= i < n:
+                vecl[i] = (<Vec?>vl[i]).vec
+        if vm is not None:
+            assert len(vm) == <Py_ssize_t>n
+            mem2 = oarray_p(empty_p(n), NULL, <void**>&vecm)
+            for i from 0 <= i < n:
+                vecm[i] = (<Vec?>vm[i]).vec
+        self.set_attr('__costgradients_memory', (mem1, mem2))
+        CHKERR( TSSetCostGradients(self.ts, n, vecl, vecm) )
+
+    def getCostGradients(self):
+        cdef PetscInt i = 0, n = 0
+        cdef PetscVec *vecl = NULL
+        cdef PetscVec *vecm = NULL
+        CHKERR( TSGetCostGradients(self.ts, &n, &vecl, &vecm) )
+        cdef object vl = None, vm = None
+        if vecl != NULL:
+            vl = [ref_Vec(vecl[i]) for i from 0 <= i < n]
+        if vecm != NULL:
+            vm = [ref_Vec(vecm[i]) for i from 0 <= i < n]
+        return (vl, vm)
+
+    def setCostIntegrand(self, Vec cost or None, rfunction,
+                         n=0, drdyfunction=None, drdpfunction=None,
+                         forward=True, args=None, kargs=None):
+        cdef PetscInt ival = asInt(n)
+        cdef PetscVec vec = NULL
+        cdef int (*R   )(PetscTS,PetscReal,PetscVec,PetscVec,  void*) nogil except PETSC_ERR_PYTHON
+        cdef int (*DRDY)(PetscTS,PetscReal,PetscVec,PetscVec[],void*) nogil except PETSC_ERR_PYTHON
+        cdef int (*DRDP)(PetscTS,PetscReal,PetscVec,PetscVec[],void*) nogil except PETSC_ERR_PYTHON
+        R = NULL; DRDY = NULL; DRDP = NULL;
+        if cost is not None: vec = (<Vec>cost).vec
+        if rfunction    is not None: R    = TSAdjoint_CostIntegrand
+        if drdyfunction is not None: DRDY = TSAdjoint_CostIntegrand_DY
+        if drdpfunction is not None: DRDP = TSAdjoint_CostIntegrand_DP
+        cdef PetscBool fwd = forward
+        if args  is None: args  = ()
+        if kargs is None: kargs = {}
+        context = ((rfunction, drdyfunction, drdpfunction), args, kargs)
+        self.set_attr('__costintegrand__', context)
+        CHKERR( TSSetCostIntegrand(self.ts, ival, vec, R, DRDY, DRDP, fwd, <void*>context) )
+
+    def adjointSetRHSJacobian(self, adjointjacobian, Mat A=None, args=None, kargs=None):
+        cdef PetscMat Amat=NULL
+        if A is not None: Amat = A.mat
+        if adjointjacobian is not None:
+            if args  is None: args  = ()
+            if kargs is None: kargs = {}
+            context = (adjointjacobian, args, kargs)
+            self.set_attr('__adjointrhsjacobian__', context)
+            CHKERR( TSAdjointSetRHSJacobian(self.ts, Amat, TSAdjoint_RHSJacobian, <void*>context) )
+        else:
+            CHKERR( TSAdjointSetRHSJacobian(self.ts, Amat, NULL, NULL) )
+
+    def adjointComputeRHSJacobian(self, t, Vec x, Mat J):
+        cdef PetscReal rval = asReal(t)
+        CHKERR( TSAdjointComputeRHSJacobian(self.ts, rval, x.vec, J.mat) )
+
+    def adjointSetSteps(self, adjoint_steps):
+        cdef PetscInt ival = asInt(adjoint_steps)
+        CHKERR( TSAdjointSetSteps(self.ts, ival) )
+
+    def adjointSetUp(self):
+        CHKERR(TSAdjointSetUp(self.ts))
+
+    def adjointSolve(self):
+        CHKERR( TSAdjointSolve(self.ts) )
+
+    def adjointStep(self):
+        CHKERR(TSAdjointStep(self.ts))
+
 
     # --- Python ---
 
@@ -613,9 +767,9 @@ cdef class TS(Object):
         CHKERR( TSThetaSetEndpoint(self.ts, bval) )
 
     def getThetaEndpoint(self):
-        cdef PetscBool bval = PETSC_FALSE
-        CHKERR( TSThetaGetEndpoint(self.ts, &bval) )
-        return <bint> bval
+        cdef PetscBool flag = PETSC_FALSE
+        CHKERR( TSThetaGetEndpoint(self.ts, &flag) )
+        return toBool(flag)
 
     # --- Alpha ---
 
@@ -746,6 +900,7 @@ cdef class TS(Object):
 # -----------------------------------------------------------------------------
 
 del TSType
+del TSRKType
 del TSProblemType
 del TSEquationType
 del TSExactFinalTime
diff --git a/src/PETSc/Vec.pyx b/src/PETSc/Vec.pyx
index b0a8981..3b9d93b 100644
--- a/src/PETSc/Vec.pyx
+++ b/src/PETSc/Vec.pyx
@@ -438,7 +438,7 @@ cdef class Vec(Object):
         cdef PetscReal rval = asReal(tol)
         CHKERR( VecChop(self.vec, rval) )
 
-    def load(self, Viewer viewer not None):
+    def load(self, Viewer viewer):
         cdef MPI_Comm comm = MPI_COMM_NULL
         cdef PetscObject obj = <PetscObject>(viewer.vwr)
         if self.vec == NULL:
@@ -447,35 +447,35 @@ cdef class Vec(Object):
         CHKERR( VecLoad(self.vec, viewer.vwr) )
         return self
 
-    def equal(self, Vec vec not None):
+    def equal(self, Vec vec):
         cdef PetscBool flag = PETSC_FALSE
         CHKERR( VecEqual(self.vec, vec.vec, &flag) )
-        return <bint> flag
+        return toBool(flag)
 
-    def dot(self, Vec vec not None):
+    def dot(self, Vec vec):
         cdef PetscScalar sval = 0
         CHKERR( VecDot(self.vec, vec.vec, &sval) )
         return toScalar(sval)
 
-    def dotBegin(self, Vec vec not None):
+    def dotBegin(self, Vec vec):
         cdef PetscScalar sval = 0
         CHKERR( VecDotBegin(self.vec, vec.vec, &sval) )
 
-    def dotEnd(self, Vec vec not None):
+    def dotEnd(self, Vec vec):
         cdef PetscScalar sval = 0
         CHKERR( VecDotEnd(self.vec, vec.vec, &sval) )
         return toScalar(sval)
 
-    def tDot(self, Vec vec not None):
+    def tDot(self, Vec vec):
         cdef PetscScalar sval = 0
         CHKERR( VecTDot(self.vec, vec.vec, &sval) )
         return toScalar(sval)
 
-    def tDotBegin(self, Vec vec not None):
+    def tDotBegin(self, Vec vec):
         cdef PetscScalar sval = 0
         CHKERR( VecTDotBegin(self.vec, vec.vec, &sval) )
 
-    def tDotEnd(self, Vec vec not None):
+    def tDotEnd(self, Vec vec):
         cdef PetscScalar sval = 0
         CHKERR( VecTDotEnd(self.vec, vec.vec, &sval) )
         return toScalar(sval)
@@ -573,7 +573,7 @@ cdef class Vec(Object):
         if random is not None: rnd = random.rnd
         CHKERR( VecSetRandom(self.vec, rnd) )
 
-    def permute(self, IS order not None, invert=False):
+    def permute(self, IS order, invert=False):
         cdef PetscBool cinvert = PETSC_FALSE
         if invert: cinvert = PETSC_TRUE
         CHKERR( VecPermute(self.vec, order.iset, cinvert) )
@@ -585,7 +585,7 @@ cdef class Vec(Object):
         cdef PetscScalar sval = asScalar(alpha)
         CHKERR( VecSet(self.vec, sval) )
 
-    def isset(self, IS idx not None, alpha):
+    def isset(self, IS idx, alpha):
         cdef PetscScalar aval = asScalar(alpha)
         CHKERR( VecISSet(self.vec, idx.iset, aval) )
 
@@ -601,27 +601,27 @@ cdef class Vec(Object):
         cdef PetscReal rval = asReal(tol)
         CHKERR( VecChop(self.vec, rval) )
 
-    def swap(self, Vec vec not None):
+    def swap(self, Vec vec):
         CHKERR( VecSwap(self.vec, vec.vec) )
 
-    def axpy(self, alpha, Vec x not None):
+    def axpy(self, alpha, Vec x):
         cdef PetscScalar sval = asScalar(alpha)
         CHKERR( VecAXPY(self.vec, sval, x.vec) )
 
-    def isaxpy(self, IS idx not None, alpha, Vec x not None):
+    def isaxpy(self, IS idx, alpha, Vec x):
         cdef PetscScalar sval = asScalar(alpha)
         CHKERR( VecISAXPY(self.vec, idx.iset, sval, x.vec) )
 
-    def aypx(self, alpha, Vec x not None):
+    def aypx(self, alpha, Vec x):
         cdef PetscScalar sval = asScalar(alpha)
         CHKERR( VecAYPX(self.vec, sval, x.vec) )
 
-    def axpby(self, alpha, beta, Vec y not None):
+    def axpby(self, alpha, beta, Vec y):
         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):
+    def waxpy(self, alpha, Vec x, Vec y):
         cdef PetscScalar sval = asScalar(alpha)
         CHKERR( VecWAXPY(self.vec, sval, x.vec, y.vec) )
 
@@ -637,22 +637,22 @@ cdef class Vec(Object):
             v[i] = (<Vec?>(vecs[i])).vec
         CHKERR( VecMAXPY(self.vec, n, a, v) )
 
-    def pointwiseMult(self, Vec x not None, Vec y not None):
+    def pointwiseMult(self, Vec x, Vec y):
         CHKERR( VecPointwiseMult(self.vec, x.vec, y.vec) )
 
-    def pointwiseDivide(self, Vec x not None, Vec y not None):
+    def pointwiseDivide(self, Vec x, Vec y):
         CHKERR( VecPointwiseDivide(self.vec, x.vec, y.vec) )
 
-    def pointwiseMin(self, Vec x not None, Vec y not None):
+    def pointwiseMin(self, Vec x, Vec y):
         CHKERR( VecPointwiseMin(self.vec, x.vec, y.vec) )
 
-    def pointwiseMax(self, Vec x not None, Vec y not None):
+    def pointwiseMax(self, Vec x, Vec y):
         CHKERR( VecPointwiseMax(self.vec, x.vec, y.vec) )
 
-    def pointwiseMaxAbs(self, Vec x not None, Vec y not None):
+    def pointwiseMaxAbs(self, Vec x, Vec y):
         CHKERR( VecPointwiseMaxAbs(self.vec, x.vec, y.vec) )
 
-    def maxPointwiseDivide(self, Vec vec not None):
+    def maxPointwiseDivide(self, Vec vec):
         cdef PetscReal rval = 0
         CHKERR( VecMaxPointwiseDivide(self.vec, vec.vec, &rval) )
         return toReal(rval)
@@ -678,9 +678,15 @@ cdef class Vec(Object):
     def setValuesBlocked(self, indices, values, addv=None):
         vecsetvalues(self.vec, indices, values, addv, 1, 0)
 
-    def setLGMap(self, LGMap lgmap not None):
+    def setLGMap(self, LGMap lgmap):
         CHKERR( VecSetLocalToGlobalMapping(self.vec, lgmap.lgm) )
 
+    def getLGMap(self):
+        cdef LGMap cmap = LGMap()
+        CHKERR( VecGetLocalToGlobalMapping(self.vec, &cmap.lgm) )
+        PetscINCREF(cmap.obj)
+        return cmap
+
     def setValueLocal(self, index, value, addv=None):
         cdef PetscInt    ival = asInt(index)
         cdef PetscScalar sval = asScalar(value)
@@ -740,12 +746,12 @@ cdef class Vec(Object):
         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):
+    def strideScatter(self, field, Vec vec, addv=None):
         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):
+    def strideGather(self, field, Vec vec, addv=None):
         cdef PetscInt ival = asInt(field)
         cdef PetscInsertMode caddv = insertmode(addv)
         CHKERR( VecStrideGather(self.vec, ival, vec.vec, caddv) )
@@ -785,13 +791,13 @@ cdef class Vec(Object):
 
     #
 
-    def getSubVector(self, IS iset not None, Vec subvec=None):
+    def getSubVector(self, IS iset, Vec subvec=None):
         if subvec is None: subvec = Vec()
         else: CHKERR( VecDestroy(&subvec.vec) )
         CHKERR( VecGetSubVector(self.vec, iset.iset, &subvec.vec) )
         return subvec
 
-    def restoreSubVector(self, IS iset not None, Vec subvec not None):
+    def restoreSubVector(self, IS iset, Vec subvec):
         CHKERR( VecRestoreSubVector(self.vec, iset.iset, &subvec.vec) )
 
     def getNestSubVecs(self):
diff --git a/src/PETSc/Viewer.pyx b/src/PETSc/Viewer.pyx
index f255d8b..e83c752 100644
--- a/src/PETSc/Viewer.pyx
+++ b/src/PETSc/Viewer.pyx
@@ -9,7 +9,6 @@ class ViewerType(object):
     VU          = S_(PETSCVIEWERVU)
     MATHEMATICA = S_(PETSCVIEWERMATHEMATICA)
     HDF5        = S_(PETSCVIEWERHDF5)
-    NETCDF      = S_(PETSCVIEWERNETCDF)
     VTK         = S_(PETSCVIEWERVTK)
     MATLAB      = S_(PETSCVIEWERMATLAB)
     SAWS        = S_(PETSCVIEWERSAWS)
@@ -174,19 +173,6 @@ cdef class Viewer(Object):
         CHKERR( PetscViewerFileSetName(self.vwr, cname) )
         return self
 
-    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)
-        cdef PetscFileMode cmode = filemode(mode)
-        cdef PetscViewer newvwr = NULL
-        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) )
-        return self
-
     def createDraw(self, display=None, title=None,
                    position=None, size=None, comm=None):
         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
@@ -271,6 +257,51 @@ cdef class Viewer(Object):
         PetscINCREF(viewer.obj)
         return viewer
 
+    # --- ASCII viewers ---
+
+    def setASCIITab(self, tabs):
+        cdef PetscInt ctabs = asInt(tabs)
+        CHKERR( PetscViewerASCIISetTab(self.vwr, ctabs) )
+
+    def getASCIITab(self):
+        cdef PetscInt tabs = 0
+        CHKERR( PetscViewerASCIIGetTab(self.vwr, &tabs) )
+        return toInt(tabs)
+
+    def addASCIITab(self, tabs):
+        cdef PetscInt ctabs = asInt(tabs)
+        CHKERR( PetscViewerASCIIAddTab(self.vwr, ctabs) )
+
+    def subtractASCIITab(self, tabs):
+        cdef PetscInt ctabs = asInt(tabs)
+        CHKERR( PetscViewerASCIISubtractTab(self.vwr, ctabs) )
+
+    def pushASCIISynchronized(self):
+        CHKERR( PetscViewerASCIIPushSynchronized(self.vwr) )
+
+    def popASCIISynchronized(self):
+        CHKERR( PetscViewerASCIIPopSynchronized(self.vwr) )
+
+    def pushASCIITab(self):
+        CHKERR( PetscViewerASCIIPushTab(self.vwr) )
+
+    def popASCIITab(self):
+        CHKERR( PetscViewerASCIIPopTab(self.vwr) )
+
+    def useASCIITabs(self, flag):
+        cdef PetscBool flg = flag
+        CHKERR( PetscViewerASCIIUseTabs(self.vwr, flg) )
+
+    def printfASCII(self, msg):
+        cdef const_char *cmsg = NULL
+        msg = str2bytes(msg, &cmsg)
+        CHKERR( PetscViewerASCIIPrintf(self.vwr, cmsg) )
+
+    def printfASCIISynchronized(self, msg):
+        cdef const_char *cmsg = NULL
+        msg = str2bytes(msg, &cmsg)
+        CHKERR( PetscViewerASCIISynchronizedPrintf(self.vwr, cmsg) )
+
     # --- methods specific to file viewers ---
 
     def flush(self):
diff --git a/src/PETSc/petscdef.pxi b/src/PETSc/petscdef.pxi
index cf2eb5a..77c501d 100644
--- a/src/PETSc/petscdef.pxi
+++ b/src/PETSc/petscdef.pxi
@@ -8,8 +8,8 @@ cdef extern from * nogil:
     PetscReal PETSC_NINFINITY
 
     ctypedef enum PetscBool:
-        PETSC_TRUE,  PETSC_YES,
-        PETSC_FALSE, PETSC_NO,
+        PETSC_FALSE
+        PETSC_TRUE
 
     ctypedef enum PetscInsertMode "InsertMode":
         PETSC_NOT_SET_VALUES    "NOT_SET_VALUES"
diff --git a/src/PETSc/petscdm.pxi b/src/PETSc/petscdm.pxi
index eee61ff..67e0b6e 100644
--- a/src/PETSc/petscdm.pxi
+++ b/src/PETSc/petscdm.pxi
@@ -41,6 +41,10 @@ cdef extern from * nogil:
     int DMSetVecType(PetscDM,PetscVecType)
     int DMCreateLocalVector(PetscDM,PetscVec*)
     int DMCreateGlobalVector(PetscDM,PetscVec*)
+    int DMGetLocalVector(PetscDM,PetscVec*)
+    int DMRestoreLocalVector(PetscDM,PetscVec*)
+    int DMGetGlobalVector(PetscDM,PetscVec*)
+    int DMRestoreGlobalVector(PetscDM,PetscVec*)
     int DMSetMatType(PetscDM,PetscMatType)
     int DMCreateMatrix(PetscDM,PetscMat*)
 
@@ -60,6 +64,12 @@ cdef extern from * nogil:
     int DMCoarsen(PetscDM,MPI_Comm,PetscDM*)
     int DMRefineHierarchy(PetscDM,PetscInt,PetscDM[])
     int DMCoarsenHierarchy(PetscDM,PetscInt,PetscDM[])
+    int DMGetRefineLevel(PetscDM,PetscInt*)
+    int DMSetRefineLevel(PetscDM,PetscInt)
+    int DMGetCoarsenLevel(PetscDM,PetscInt*)
+
+    int DMAdaptLabel(PetscDM,PetscDMLabel,PetscDM*)
+    int DMAdaptMetric(PetscDM,PetscVec,PetscDMLabel,PetscDM*)
 
     int DMGlobalToLocalBegin(PetscDM,PetscVec,PetscInsertMode,PetscVec)
     int DMGlobalToLocalEnd(PetscDM,PetscVec,PetscInsertMode,PetscVec)
@@ -103,6 +113,13 @@ cdef extern from * nogil:
     int DMShellSetGlobalVector(PetscDM,PetscVec)
     int DMShellSetLocalVector(PetscDM,PetscVec)
 
+    int DMKSPSetComputeOperators(PetscDM,PetscKSPComputeOpsFunction,void*)
+
+    int DMCreateFieldDecomposition(PetscDM,PetscInt*,char***,PetscIS**,PetscDM**)
+
+    int DMSNESSetFunction(PetscDM,PetscSNESFunctionFunction,void*)
+    int DMSNESSetJacobian(PetscDM,PetscSNESJacobianFunction,void*)
+
 # --------------------------------------------------------------------
 
 cdef inline PetscDMBoundaryType asBoundaryType(object boundary) \
diff --git a/src/PETSc/petscdmcomposite.pxi b/src/PETSc/petscdmcomposite.pxi
index 1e89dc0..860ff6c 100644
--- a/src/PETSc/petscdmcomposite.pxi
+++ b/src/PETSc/petscdmcomposite.pxi
@@ -6,7 +6,7 @@ cdef extern from * nogil:
     int DMCompositeAddDM(PetscDM,PetscDM)
     int DMCompositeGetNumberDM(PetscDM,PetscInt*)
     int DMCompositeScatterArray(PetscDM,PetscVec,PetscVec*)
-    int DMCompositeGatherArray(PetscDM,PetscVec,PetscInsertMode,PetscVec*)
+    int DMCompositeGatherArray(PetscDM,PetscInsertMode,PetscVec,PetscVec*)
     int DMCompositeGetEntriesArray(PetscDM,PetscDM*)
     int DMCompositeGetAccessArray(PetscDM,PetscVec,PetscInt,const_PetscInt*,PetscVec*)
     int DMCompositeRestoreAccessArray(PetscDM,PetscVec,PetscInt,const_PetscInt*,PetscVec*)
@@ -24,7 +24,7 @@ cdef class _DMComposite_access:
     cdef object vecs_mem
     cdef object access
 
-    def __cinit__(self, DM dm, Vec gvec not None, locs=None):
+    def __cinit__(self, DM dm, Vec gvec, locs=None):
         self.dm = dm.dm
         CHKERR( PetscINCREF(<PetscObject*>&self.dm) )
         self.gvec = gvec.vec
diff --git a/src/PETSc/petscdmda.pxi b/src/PETSc/petscdmda.pxi
index b17b538..e5cb6df 100644
--- a/src/PETSc/petscdmda.pxi
+++ b/src/PETSc/petscdmda.pxi
@@ -178,7 +178,7 @@ cdef inline tuple asOwnershipRanges(object ownership_ranges,
         elif p[0] != nlz: raise ValueError(
             "ownership range size %d and number or processors %d" %
              (toInt(nlz), toInt(p[0])))
-    return ranges
+    return tuple(ranges)
 
 cdef inline tuple toOwnershipRanges(PetscInt dim,
                                     PetscInt m, PetscInt n, PetscInt p,
@@ -202,7 +202,7 @@ cdef class _DMDA_Vec_array(object):
     cdef readonly tuple shape, strides
     cdef readonly ndarray array
 
-    def __cinit__(self, DMDA da not None, Vec vec not None, bint DOF=False):
+    def __cinit__(self, DMDA da, Vec vec, bint DOF=False):
         #
         cdef PetscInt dim=0, dof=0
         CHKERR( DMDAGetInfo(da.dm,
diff --git a/src/PETSc/petscdmplex.pxi b/src/PETSc/petscdmplex.pxi
index 3afbdad..960c6f7 100644
--- a/src/PETSc/petscdmplex.pxi
+++ b/src/PETSc/petscdmplex.pxi
@@ -31,18 +31,20 @@ cdef extern from * nogil:
     int DMPlexStratify(PetscDM)
     #int DMPlexEqual(PetscDM,PetscDM,PetscBool*)
     int DMPlexOrient(PetscDM)
-    #int DMPlexInterpolate(PetscDM,PetscDM*)
-    #int DMPlexUninterpolate(PetscDM,PetscDM*)
+    int DMPlexInterpolate(PetscDM,PetscDM*)
+    int DMPlexUninterpolate(PetscDM,PetscDM*)
     #int DMPlexLoad(PetscViewer,PetscDM)
     #int DMPlexSetPreallocationCenterDimension(PetscDM,PetscInt)
     #int DMPlexGetPreallocationCenterDimension(PetscDM,PetscInt*)
     #int DMPlexPreallocateOperator(PetscDM,PetscInt,PetscSection,PetscSection,PetscInt[],PetscInt[],PetscInt[],PetscInt[],Mat,PetscBool)
-    #int DMPlexGetPointLocal(PetscDM,PetscInt,PetscInt*,PetscInt*)
+    int DMPlexGetPointLocal(PetscDM,PetscInt,PetscInt*,PetscInt*)
     #int DMPlexPointLocalRef(PetscDM,PetscInt,PetscScalar*,void*)
     #int DMPlexPointLocalRead(PetscDM,PetscInt,const_PetscScalar*,const_void*)
-    #int DMPlexGetPointGlobal(PetscDM,PetscInt,PetscInt*,PetscInt*)
+    int DMPlexGetPointGlobal(PetscDM,PetscInt,PetscInt*,PetscInt*)
     #int DMPlexPointGlobalRef(PetscDM,PetscInt,PetscScalar*,void*)
     #int DMPlexPointGlobalRead(PetscDM,PetscInt,const_PetscScalar*,const_void*)
+    int DMPlexGetPointLocalField(PetscDM,PetscInt,PetscInt,PetscInt*,PetscInt*)
+    int DMPlexGetPointGlobalField(PetscDM,PetscInt,PetscInt,PetscInt*,PetscInt*)
 
     #int PetscSectionCreateGlobalSectionLabel(PetscSection,PetscSF,PetscBool,PetscDMLabel,PetscInt,PetscSection*)
 
@@ -65,6 +67,8 @@ cdef extern from * nogil:
     int DMPlexRestoreTransitiveClosure(PetscDM,PetscInt,PetscBool,PetscInt*,PetscInt*[])
     int DMPlexVecGetClosure(PetscDM,PetscSection,PetscVec,PetscInt,PetscInt*,PetscScalar*[])
     int DMPlexVecRestoreClosure(PetscDM,PetscSection,PetscVec,PetscInt,PetscInt*,PetscScalar*[])
+    int DMPlexVecSetClosure(PetscDM,PetscSection,PetscVec,PetscInt,PetscScalar[],PetscInsertMode)
+    int DMPlexMatSetClosure(PetscDM,PetscSection,PetscSection,PetscMat,PetscInt,PetscScalar[],PetscInsertMode)
 
     int DMPlexGenerate(PetscDM,const_char[],PetscBool ,PetscDM*)
     int DMPlexTriangleSetOptions(PetscDM,const_char*)
@@ -73,8 +77,9 @@ cdef extern from * nogil:
     #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[])
-    int DMPlexCreateBoxMesh(MPI_Comm,PetscInt,PetscBool,PetscDM*)
+    int DMPlexCreateBoxMesh(MPI_Comm,PetscInt,PetscInt,PetscBool,PetscDM*)
     int DMPlexCreateHexBoxMesh(MPI_Comm,PetscInt,const_PetscInt[],PetscDMBoundaryType,PetscDMBoundaryType,PetscDMBoundaryType,PetscDM*)
+    int DMPlexCreateFromFile(MPI_Comm,const_char[],PetscBool,PetscDM*)
     int DMPlexCreateCGNS(MPI_Comm,PetscInt,PetscBool,PetscDM*)
     int DMPlexCreateCGNSFromFile(MPI_Comm,const_char[],PetscBool,PetscDM*)
     int DMPlexCreateExodus(MPI_Comm,PetscInt,PetscBool,PetscDM*)
@@ -89,11 +94,17 @@ cdef extern from * nogil:
 
     int DMPlexSetAdjacencyUseCone(PetscDM,PetscBool)
     int DMPlexSetAdjacencyUseClosure(PetscDM,PetscBool)
+    int DMPlexSetAdjacencyUseAnchors(PetscDM,PetscBool)
+    int DMPlexGetAdjacencyUseCone(PetscDM,PetscBool*)
+    int DMPlexGetAdjacencyUseClosure(PetscDM,PetscBool*)
+    int DMPlexGetAdjacencyUseAnchors(PetscDM,PetscBool*)
+    int DMPlexGetAdjacency(PetscDM,PetscInt,PetscInt*,PetscInt*[])
     #int DMPlexCreateNeighborCSR(PetscDM,PetscInt,PetscInt*,PetscInt**,PetscInt**)
     #int DMPlexCreatePartition(PetscDM,const_char[],PetscInt,PetscBool,PetscSection*,PetscIS*,PetscSection*,PetscIS*)
     #int DMPlexCreatePartitionClosure(PetscDM,PetscSection,PetscIS,PetscSection*,PetscIS*)
     int DMPlexDistribute(PetscDM,PetscInt,PetscSF*,PetscDM*)
     int DMPlexDistributeOverlap(PetscDM,PetscInt,PetscSF*,PetscDM*)
+    int DMPlexSetPartitioner(PetscDM,PetscPartitioner)
     int DMPlexGetPartitioner(PetscDM,PetscPartitioner*)
     int DMPlexDistributeField(PetscDM,PetscSF,PetscSection,PetscVec,PetscSection,PetscVec)
     #int DMPlexDistributeData(PetscDM,PetscSF,PetscSection,MPI_Datatype,void*,PetscSection,void**)
@@ -123,3 +134,4 @@ cdef extern from * nogil:
     int DMPlexCreateSection(PetscDM,PetscInt,PetscInt,const_PetscInt[],const_PetscInt[],PetscInt,const_PetscInt[],const_PetscIS[],const_PetscIS[],PetscIS,PetscSection*)
 
     int DMPlexComputeCellGeometryFVM(PetscDM,PetscInt,PetscReal*,PetscReal[],PetscReal[])
+    int DMPlexConstructGhostCells(PetscDM,const char[],PetscInt*,PetscDM*)
diff --git a/src/PETSc/petscdmshell.pxi b/src/PETSc/petscdmshell.pxi
index f4d45f4..fcb7ba1 100644
--- a/src/PETSc/petscdmshell.pxi
+++ b/src/PETSc/petscdmshell.pxi
@@ -17,11 +17,26 @@ cdef extern from * nogil:
     ctypedef int (*PetscDMShellCreateInjectionFunction)(PetscDM,
                                                         PetscDM,
                                                         PetscMat*) except PETSC_ERR_PYTHON
+    ctypedef int (*PetscDMShellCreateRestrictionFunction)(PetscDM,
+                                                          PetscDM,
+                                                          PetscMat*) except PETSC_ERR_PYTHON
     ctypedef int (*PetscDMShellCreateFieldDecompositionFunction)(PetscDM,
                                                                  PetscInt*,
                                                                  char***,
                                                                  PetscIS**,
                                                                  PetscDM**) except PETSC_ERR_PYTHON
+    ctypedef int (*PetscDMShellCreateDomainDecompositionFunction)(PetscDM,
+                                                                 PetscInt*,
+                                                                 char***,
+                                                                 PetscIS**,
+                                                                 PetscIS**,
+                                                                 PetscDM**) except PETSC_ERR_PYTHON
+    ctypedef int (*PetscDMShellCreateDomainDecompositionScattersFunction)(PetscDM,
+                                                                 PetscInt,
+                                                                 PetscDM*,
+                                                                 PetscScatter**,
+                                                                 PetscScatter**,
+                                                                 PetscScatter**) except PETSC_ERR_PYTHON
     ctypedef int (*PetscDMShellCreateSubDM)(PetscDM,
                                             PetscInt,
                                             PetscInt[],
@@ -44,7 +59,10 @@ cdef extern from * nogil:
     int DMShellSetRefine(PetscDM,PetscDMShellTransferFunction)
     int DMShellSetCreateInterpolation(PetscDM,PetscDMShellCreateInterpolationFunction)
     int DMShellSetCreateInjection(PetscDM,PetscDMShellCreateInjectionFunction)
+    int DMShellSetCreateRestriction(PetscDM,PetscDMShellCreateRestrictionFunction)
     int DMShellSetCreateFieldDecomposition(PetscDM,PetscDMShellCreateFieldDecompositionFunction)
+    int DMShellSetCreateDomainDecomposition(PetscDM,PetscDMShellCreateDomainDecompositionFunction)
+    int DMShellSetCreateDomainDecompositionScatters(PetscDM,PetscDMShellCreateDomainDecompositionScattersFunction)
     int DMShellSetCreateSubDM(PetscDM,PetscDMShellCreateSubDM)
 
 cdef int DMSHELL_CreateGlobalVector(
@@ -268,6 +286,25 @@ cdef int DMSHELL_CreateInjection(
     cmat[0] = mat.mat
     return 0
 
+cdef int DMSHELL_CreateRestriction(
+    PetscDM dmf,
+    PetscDM dmc,
+    PetscMat *cmat) except PETSC_ERR_PYTHON with gil:
+    cdef DM Dmf = subtype_DM(dmf)()
+    cdef DM Dmc = subtype_DM(dmc)()
+    cdef Mat mat
+    Dmf.dm = dmf
+    PetscINCREF(Dmf.obj)
+    Dmc.dm = dmc
+    PetscINCREF(Dmc.obj)
+    context = Dmf.get_attr('__create_restriction__')
+    assert context is not None and type(context) is tuple
+    (restriction, args, kargs) = context
+    mat = restriction(Dmf, Dmc, *args, **kargs)
+    PetscINCREF(mat.obj)
+    cmat[0] = mat.mat
+    return 0
+
 cdef int DMSHELL_CreateFieldDecomposition(
     PetscDM dm,
     PetscInt *clen,
@@ -313,6 +350,108 @@ cdef int DMSHELL_CreateFieldDecomposition(
             PetscINCREF((<DM?>dms[i]).obj)
     return 0
 
+cdef int DMSHELL_CreateDomainDecomposition(
+    PetscDM dm,
+    PetscInt *clen,
+    char ***namelist,
+    PetscIS **innerislist,
+    PetscIS **outerislist,
+    PetscDM **dmlist) except PETSC_ERR_PYTHON with gil:
+    cdef DM Dm = subtype_DM(dm)()
+    cdef int i
+    cdef const_char *cname = NULL
+    Dm.dm = dm
+    PetscINCREF(Dm.obj)
+    context = Dm.get_attr('__create_domain_decomp__')
+    assert context is not None and type(context) is tuple
+    (decomp, args, kargs) = context
+    names, innerises, outerises, dms = decomp(Dm, *args, **kargs)
+
+    if clen != NULL:
+        if names is not None:
+            clen[0] = <PetscInt>len(names)
+        elif innerises is not None:
+            clen[0] = <PetscInt>len(innerises)
+        elif outerises is not None:
+            clen[0] = <PetscInt>len(outerises)
+        elif dms is not None:
+            clen[0] = <PetscInt>len(dms)
+        else:
+            clen[0] = 0
+
+    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])) )
+
+    if innerislist != NULL and innerises is not None:
+        CHKERR( PetscMalloc(len(innerises)*sizeof(PetscIS), innerislist) )
+        for i in range(len(innerises)):
+            innerislist[0][i] = (<IS?>innerises[i]).iset
+            PetscINCREF((<IS?>innerises[i]).obj)
+
+    if outerislist != NULL and outerises is not None:
+        CHKERR( PetscMalloc(len(outerises)*sizeof(PetscIS), outerislist) )
+        for i in range(len(outerises)):
+            outerislist[0][i] = (<IS?>outerises[i]).iset
+            PetscINCREF((<IS?>outerises[i]).obj)
+
+    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)
+    return 0
+
+cdef int DMSHELL_CreateDomainDecompositionScatters(
+    PetscDM dm,
+    PetscInt clen,
+    PetscDM *subdms,
+    PetscScatter** iscat,
+    PetscScatter** oscat,
+    PetscScatter** gscat) except PETSC_ERR_PYTHON with gil:
+
+    cdef DM Dm = subtype_DM(dm)()
+    cdef int i
+    cdef const_char *cname = NULL
+    cdef DM subdm = None
+
+    Dm.dm = dm
+    PetscINCREF(Dm.obj)
+
+    psubdms = []
+    for i from 0 <= i < clen:
+        subdm = subtype_DM(subdms[i])()
+        subdm.dm = subdms[i]
+        PetscINCREF(subdm.obj)
+        psubdms.append(subdm)
+
+    context = Dm.get_attr('__create_domain_decomp_scatters__')
+    assert context is not None and type(context) is tuple
+    (scatters, args, kargs) = context
+    (iscatter, oscatter, gscatter) = scatters(Dm, psubdms, *args, **kargs)
+
+    assert len(iscatter) == clen
+    assert len(oscatter) == clen
+    assert len(gscatter) == clen
+
+    CHKERR ( PetscMalloc(clen*sizeof(PetscScatter), iscat) )
+    CHKERR ( PetscMalloc(clen*sizeof(PetscScatter), oscat) )
+    CHKERR ( PetscMalloc(clen*sizeof(PetscScatter), gscat) )
+
+    for i in range(clen):
+        iscat[0][i] = (<Scatter?>iscatter[i]).sct
+        PetscINCREF((<Scatter?>iscatter[i]).obj)
+
+        oscat[0][i] = (<Scatter?>oscatter[i]).sct
+        PetscINCREF((<Scatter?>oscatter[i]).obj)
+
+        gscat[0][i] = (<Scatter?>gscatter[i]).sct
+        PetscINCREF((<Scatter?>gscatter[i]).obj)
+
+    return 0
+
 cdef int DMSHELL_CreateSubDM(
     PetscDM cdm,
     PetscInt numFields,
diff --git a/src/PETSc/petscis.pxi b/src/PETSc/petscis.pxi
index f24196f..4170233 100644
--- a/src/PETSc/petscis.pxi
+++ b/src/PETSc/petscis.pxi
@@ -60,13 +60,19 @@ cdef extern from * nogil:
 
 cdef extern from * nogil:
 
-    ctypedef enum PetscGLMapType "ISGlobalToLocalMappingType":
+    ctypedef char* PetscISLocalToGlobalMappingType "const char*"
+    PetscISLocalToGlobalMappingType ISLOCALTOGLOBALMAPPINGBASIC
+    PetscISLocalToGlobalMappingType ISLOCALTOGLOBALMAPPINGHASH
+
+    ctypedef enum PetscGLMapMode "ISGlobalToLocalMappingMode":
         PETSC_IS_GTOLM_MASK "IS_GTOLM_MASK"
         PETSC_IS_GTOLM_DROP "IS_GTOLM_DROP"
 
     int ISLocalToGlobalMappingCreate(MPI_Comm,PetscInt,PetscInt,PetscInt[],PetscCopyMode,PetscLGMap*)
     int ISLocalToGlobalMappingCreateIS(PetscIS,PetscLGMap*)
     int ISLocalToGlobalMappingCreateSF(PetscSF,PetscInt,PetscLGMap*)
+    int ISLocalToGlobalMappingSetType(PetscLGMap,PetscISLocalToGlobalMappingType)
+    int ISLocalToGlobalMappingSetFromOptions(PetscLGMap)
     int ISLocalToGlobalMappingView(PetscLGMap,PetscViewer)
     int ISLocalToGlobalMappingDestroy(PetscLGMap*)
     int ISLocalToGlobalMappingGetSize(PetscLGMap,PetscInt*)
@@ -82,8 +88,8 @@ cdef extern from * nogil:
     int ISLocalToGlobalMappingApply(PetscLGMap,PetscInt,PetscInt[],PetscInt[])
     int ISLocalToGlobalMappingApplyBlock(PetscLGMap,PetscInt,PetscInt[],PetscInt[])
     int ISLocalToGlobalMappingApplyIS(PetscLGMap,PetscIS,PetscIS*)
-    int ISGlobalToLocalMappingApply(PetscLGMap,PetscGLMapType,PetscInt,PetscInt[],PetscInt*,PetscInt[])
-    int ISGlobalToLocalMappingApplyBlock(PetscLGMap,PetscGLMapType,PetscInt,PetscInt[],PetscInt*,PetscInt[])
+    int ISGlobalToLocalMappingApply(PetscLGMap,PetscGLMapMode,PetscInt,PetscInt[],PetscInt*,PetscInt[])
+    int ISGlobalToLocalMappingApplyBlock(PetscLGMap,PetscGLMapMode,PetscInt,PetscInt[],PetscInt*,PetscInt[])
 
 
 # --------------------------------------------------------------------
@@ -117,7 +123,7 @@ cdef class _IS_buffer:
     cdef const_PetscInt *data
     cdef bint hasarray
 
-    def __cinit__(self, IS iset not None):
+    def __cinit__(self, IS iset):
         cdef PetscIS i = iset.iset
         CHKERR( PetscINCREF(<PetscObject*>&i) )
         self.iset = i
diff --git a/src/PETSc/petscksp.pxi b/src/PETSc/petscksp.pxi
index c1d5869..acf2dd3 100644
--- a/src/PETSc/petscksp.pxi
+++ b/src/PETSc/petscksp.pxi
@@ -4,13 +4,13 @@ cdef extern from * nogil:
     PetscKSPType KSPRICHARDSON
     PetscKSPType KSPCHEBYSHEV
     PetscKSPType KSPCG
-    PetscKSPType   KSPGROPPCG
-    PetscKSPType   KSPPIPECG
-    PetscKSPType   KSPPIPECGRR
+    PetscKSPType KSPGROPPCG
+    PetscKSPType KSPPIPECG
+    PetscKSPType KSPPIPECGRR
     PetscKSPType   KSPCGNE
-    PetscKSPType   KSPNASH
-    PetscKSPType   KSPSTCG
-    PetscKSPType   KSPGLTR
+    PetscKSPType   KSPCGNASH
+    PetscKSPType   KSPCGSTCG
+    PetscKSPType   KSPCGGLTR
     PetscKSPType KSPFCG
     PetscKSPType KSPPIPEFCG
     PetscKSPType KSPGMRES
@@ -41,6 +41,7 @@ cdef extern from * nogil:
     PetscKSPType KSPPIPEGCR
     PetscKSPType KSPTSIRM
     PetscKSPType KSPCGLS
+    PetscKSPType KSPFETIDP
 
     ctypedef enum PetscKSPNormType "KSPNormType":
         KSP_NORM_DEFAULT
diff --git a/src/PETSc/petsclinesearch.pxi b/src/PETSc/petsclinesearch.pxi
new file mode 100644
index 0000000..94e4857
--- /dev/null
+++ b/src/PETSc/petsclinesearch.pxi
@@ -0,0 +1,13 @@
+cdef extern from * nogil:
+
+    ctypedef char* PetscSNESLineSearchType "const char*"
+    PetscSNESLineSearchType SNESLINESEARCHBT
+    PetscSNESLineSearchType SNESLINESEARCHNLEQERR
+    PetscSNESLineSearchType SNESLINESEARCHBASIC
+    PetscSNESLineSearchType SNESLINESEARCHL2
+    PetscSNESLineSearchType SNESLINESEARCHCP
+
+    int SNESGetLineSearch(PetscSNES,PetscSNESLineSearch*)
+    int SNESLineSearchSetFromOptions(PetscSNESLineSearch)
+    int SNESLineSearchApply(PetscSNESLineSearch,PetscVec,PetscVec,PetscReal*,PetscVec)
+    int SNESLineSearchDestroy(PetscSNESLineSearch*)
diff --git a/src/PETSc/petscmat.pxi b/src/PETSc/petscmat.pxi
index 71737f7..e0feeed 100644
--- a/src/PETSc/petscmat.pxi
+++ b/src/PETSc/petscmat.pxi
@@ -151,8 +151,8 @@ cdef extern from * nogil:
 
     int MatCreateNormal(PetscMat,PetscMat*)
     int MatCreateTranspose(PetscMat,PetscMat*)
-    int MatCreateLRC(PetscMat,PetscMat,PetscMat,PetscMat*)
-    int MatCreateSubMatrix(PetscMat,PetscIS,PetscIS,PetscMat*)
+    int MatCreateLRC(PetscMat,PetscMat,PetscVec,PetscMat,PetscMat*)
+    int MatCreateSubMatrixVirtual(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*)
@@ -220,6 +220,7 @@ cdef extern from * nogil:
     int MatSetValuesBlocked(PetscMat,PetscInt,PetscInt[],PetscInt,PetscInt[],PetscScalar[],PetscInsertMode)
 
     int MatSetLocalToGlobalMapping(PetscMat,PetscLGMap,PetscLGMap)
+    int MatGetLocalToGlobalMapping(PetscMat,PetscLGMap*,PetscLGMap*)
     int MatSetValueLocal(PetscMat,PetscInt,PetscInt,PetscScalar,PetscInsertMode)
     int MatSetValuesLocal(PetscMat,PetscInt,PetscInt[],PetscInt,PetscInt[],PetscScalar[],PetscInsertMode)
     int MatSetValuesBlockedLocal(PetscMat,PetscInt,PetscInt[],PetscInt,PetscInt[],PetscScalar[],PetscInsertMode)
@@ -257,6 +258,7 @@ cdef extern from * nogil:
     int MatTransposeMatMult(PetscMat,PetscMat,PetscMatReuse,PetscReal,PetscMat*)
     int MatMatMultSymbolic(PetscMat,PetscMat,PetscReal,PetscMat*)
     int MatMatMultNumeric(PetscMat,PetscMat,PetscMat)
+    int MatPtAP(PetscMat,PetscMat,PetscMatReuse,PetscReal,PetscMat*)
 
     int MatInterpolate(PetscMat,PetscVec,PetscVec)
     int MatInterpolateAdd(PetscMat,PetscVec,PetscVec,PetscVec)
@@ -266,8 +268,8 @@ cdef extern from * nogil:
     int MatPermuteSparsify(PetscMat,PetscInt,PetscReal,PetscReal,PetscIS,PetscIS,PetscMat*)
 
     int MatMerge(MPI_Comm,PetscMat,PetscInt,PetscMatReuse,PetscMat*)
-    int MatGetSubMatrix(PetscMat,PetscIS,PetscIS,PetscMatReuse,PetscMat*)
-    int MatGetSubMatrices(PetscMat,PetscInt,PetscIS[],PetscIS[],PetscMatReuse,PetscMat*[])
+    int MatCreateSubMatrix(PetscMat,PetscIS,PetscIS,PetscMatReuse,PetscMat*)
+    int MatCreateSubMatrices(PetscMat,PetscInt,PetscIS[],PetscIS[],PetscMatReuse,PetscMat*[])
     int MatIncreaseOverlap(PetscMat,PetscInt,PetscIS[],PetscInt)
     int MatGetDiagonalBlock(PetscMat,PetscMat*)
     int MatGetLocalSubMatrix(PetscMat,PetscIS,PetscIS,PetscMat*)
@@ -350,6 +352,8 @@ cdef extern from * nogil:
     int MatGetInertia(PetscMat,PetscInt*,PetscInt*,PetscInt*)
     int MatSetUnfactored(PetscMat)
 
+    int  MatLRCGetMats(PetscMat,PetscMat*,PetscMat*,PetscVec*,PetscMat*)
+
     int MatMumpsSetIcntl(PetscMat,PetscInt,PetscInt)
     int MatMumpsGetIcntl(PetscMat,PetscInt,PetscInt*)
     int MatMumpsSetCntl(PetscMat,PetscInt,PetscReal)
@@ -397,7 +401,7 @@ cdef extern from * nogil:
     int MatNullSpaceCreateRigidBody(PetscVec,PetscNullSpace*)
     int MatNullSpaceGetVecs(PetscNullSpace,PetscBool*,PetscInt*,const_PetscVec*[])
     int MatNullSpaceRemove(PetscNullSpace,PetscVec)
-    int MatNullSpaceTest(PetscNullSpace,PetscMat)
+    int MatNullSpaceTest(PetscNullSpace,PetscMat,PetscBool*)
 
     ctypedef int MatNullSpaceFunction(PetscNullSpace,
                                       PetscVec,
@@ -406,6 +410,8 @@ cdef extern from * nogil:
 
     int MatSetNullSpace(PetscMat,PetscNullSpace)
     int MatGetNullSpace(PetscMat,PetscNullSpace*)
+    int MatSetTransposeNullSpace(PetscMat,PetscNullSpace)
+    int MatGetTransposeNullSpace(PetscMat,PetscNullSpace*)
     int MatSetNearNullSpace(PetscMat,PetscNullSpace)
     int MatGetNearNullSpace(PetscMat,PetscNullSpace*)
 
diff --git a/src/PETSc/petscobj.pxi b/src/PETSc/petscobj.pxi
index 67155fe..8c24d84 100644
--- a/src/PETSc/petscobj.pxi
+++ b/src/PETSc/petscobj.pxi
@@ -14,6 +14,7 @@ cdef extern from * nogil:
     int PetscObjectSetOptionsPrefix(PetscObject,char[])
     int PetscObjectGetOptionsPrefix(PetscObject,char*[])
     int PetscObjectSetFromOptions(PetscObject)
+    int PetscObjectViewFromOptions(PetscObject,PetscObject,char[])
 
     int PetscObjectGetComm(PetscObject,MPI_Comm*)
     int PetscObjectGetClassId(PetscObject,PetscClassId*)
@@ -122,10 +123,11 @@ cdef object PetscSetPyObj(PetscObject o, char name[], object p):
 # --------------------------------------------------------------------
 
 cdef extern from *:
+    ctypedef ssize_t Py_intptr_t
     object PyLong_FromVoidPtr(void*)
 
-cdef inline long Object_toFortran(PetscObject o) nogil:
-    return <long> o
+cdef inline Py_intptr_t Object_toFortran(PetscObject o) nogil:
+    return <Py_intptr_t> o
 
 # --------------------------------------------------------------------
 
diff --git a/src/PETSc/petscopt.pxi b/src/PETSc/petscopt.pxi
index 3125d51..7d93e95 100644
--- a/src/PETSc/petscopt.pxi
+++ b/src/PETSc/petscopt.pxi
@@ -64,7 +64,7 @@ cdef getopt_Bool(PetscOptions opt, const_char *pre, const_char *name, object def
     cdef PetscBool value = PETSC_FALSE
     cdef PetscBool flag  = PETSC_FALSE
     CHKERR( PetscOptionsGetBool(opt, pre, name, &value, &flag) )
-    if flag==PETSC_TRUE: return <bint>value
+    if flag==PETSC_TRUE: return toBool(value)
     if deft is not None: return deft
     raise KeyError(opt2str(pre, name))
 
diff --git a/src/PETSc/petscpc.pxi b/src/PETSc/petscpc.pxi
index 9669878..933b305 100644
--- a/src/PETSc/petscpc.pxi
+++ b/src/PETSc/petscpc.pxi
@@ -69,6 +69,10 @@ cdef extern from * nogil:
         PC_MG_FULL
         PC_MG_KASKADE
 
+    ctypedef enum PetscPCMGCycleType "PCMGCycleType":
+        PC_MG_CYCLE_V
+        PC_MG_CYCLE_W
+
     ctypedef char* PetscPCGAMGType "const char*"
     PetscPCGAMGType PCGAMGAGG
     PetscPCGAMGType PCGAMGGEO
@@ -213,7 +217,8 @@ cdef extern from * nogil:
     int PCMGSetX(PetscPC,PetscInt,PetscVec)
     int PCMGSetR(PetscPC,PetscInt,PetscVec)
     int PCMGGetLevels(PetscPC,PetscInt*)
-    int PCMGSetCyclesOnLevel(PetscPC,PetscInt,PetscInt)
+    int PCMGSetCycleType(PetscPC,PetscPCMGCycleType)
+    int PCMGSetCycleTypeOnLevel(PetscPC,PetscInt,PetscPCMGCycleType)
 
 # --------------------------------------------------------------------
 
diff --git a/src/PETSc/petscsnes.pxi b/src/PETSc/petscsnes.pxi
index 9835914..7353558 100644
--- a/src/PETSc/petscsnes.pxi
+++ b/src/PETSc/petscsnes.pxi
@@ -141,6 +141,14 @@ cdef extern from * nogil:
     int SNESComputeJacobian(PetscSNES,PetscVec,PetscMat,PetscMat)
     int SNESComputeObjective(PetscSNES,PetscVec,PetscReal*)
 
+    ctypedef int (*PetscSNESNGSFunction)(PetscSNES,
+                                         PetscVec,
+                                         PetscVec,
+                                         void*) except PETSC_ERR_PYTHON
+    int SNESSetNGS(PetscSNES,PetscSNESNGSFunction,void*)
+    int SNESGetNGS(PetscSNES,PetscSNESNGSFunction*,void**)
+    int SNESComputeNGS(PetscSNES,PetscVec,PetscVec)
+
     int SNESSetNormSchedule(PetscSNES,PetscSNESNormSchedule)
     int SNESGetNormSchedule(PetscSNES,PetscSNESNormSchedule*)
 
@@ -168,6 +176,8 @@ cdef extern from * nogil:
     int SNESGetConvergedReason(PetscSNES,PetscSNESConvergedReason*)
     int SNESSetIterationNumber(PetscSNES,PetscInt)
     int SNESGetIterationNumber(PetscSNES,PetscInt*)
+    int SNESSetFunctionNorm(PetscSNES,PetscReal)
+    int SNESGetFunctionNorm(PetscSNES,PetscReal*)
     int SNESGetLinearSolveIterations(PetscSNES,PetscInt*)
     int SNESSetCountersReset(PetscSNES,PetscBool)
 
@@ -193,6 +203,8 @@ cdef extern from * nogil:
 
     int SNESCompositeGetSNES(PetscSNES,PetscInt,PetscSNES*)
     int SNESCompositeGetNumber(PetscSNES,PetscInt*)
+    int SNESNASMGetSNES(PetscSNES,PetscInt,PetscSNES*)
+    int SNESNASMGetNumber(PetscSNES,PetscInt*)
 
 cdef extern from "custom.h" nogil:
     int SNESSetUseMFFD(PetscSNES,PetscBool)
@@ -306,6 +318,24 @@ cdef int SNES_Objective(
 
 # -----------------------------------------------------------------------------
 
+cdef int SNES_NGS(
+    PetscSNES snes,
+    PetscVec  x,
+    PetscVec  b,
+    void*     ctx,
+    ) except PETSC_ERR_PYTHON with gil:
+    cdef SNES Snes = ref_SNES(snes)
+    cdef Vec  Xvec = ref_Vec(x)
+    cdef Vec  Bvec = ref_Vec(b)
+    cdef object context = Snes.get_attr('__ngs__')
+    if context is None and ctx != NULL: context = <object>ctx
+    assert context is not None and type(context) is tuple # sanity check
+    (ngs, args, kargs) = context
+    ngs(Snes, Xvec, Bvec, *args, **kargs)
+    return 0
+
+# -----------------------------------------------------------------------------
+
 cdef int SNES_Converged(
     PetscSNES  snes,
     PetscInt   iters,
diff --git a/src/PETSc/petscsys.pxi b/src/PETSc/petscsys.pxi
index 97f6e40..0b3d7c9 100644
--- a/src/PETSc/petscsys.pxi
+++ b/src/PETSc/petscsys.pxi
@@ -1,18 +1,8 @@
 cdef extern from * nogil:
 
-    enum: PETSC_VERSION_MAJOR
-    enum: PETSC_VERSION_MINOR
-    enum: PETSC_VERSION_SUBMINOR
-    enum: PETSC_VERSION_PATCH
-    enum: PETSC_VERSION_RELEASE
-    char* PETSC_VERSION_DATE
-    char* PETSC_AUTHOR_INFO
-
-    bint PETSC_VERSION_LT(int,int,int)
-    bint PETSC_VERSION_LE(int,int,int)
-    bint PETSC_VERSION_EQ(int,int,int)
-    bint PETSC_VERSION_GE(int,int,int)
-    bint PETSC_VERSION_GT(int,int,int)
+    const_char PETSC_AUTHOR_INFO[]
+    int PetscGetVersion(char[],size_t)
+    int PetscGetVersionNumber(PetscInt*,PetscInt*,PetscInt*,PetscInt*)
 
     int PetscInitialize(int*,char***,char[],char[])
     int PetscInitializeNoArguments()
@@ -33,6 +23,7 @@ cdef extern from * nogil:
     PetscErrorHandlerFunction PetscIgnoreErrorHandler
     int PetscPushErrorHandler(PetscErrorHandlerFunction,void*)
     int PetscPopErrorHandler()
+    int PetscPopSignalHandler()
     int PetscInfoAllow(PetscBool, char*)
 
     int PetscErrorMessage(int,char*[],char**)
diff --git a/src/PETSc/petscts.pxi b/src/PETSc/petscts.pxi
index 0c3b86f..822960e 100644
--- a/src/PETSc/petscts.pxi
+++ b/src/PETSc/petscts.pxi
@@ -11,7 +11,7 @@ cdef extern from * nogil:
     PetscTSType TSTHETA
     PetscTSType TSALPHA
     PetscTSType TSALPHA2
-    PetscTSType TSGL
+    PetscTSType TSGLLE
     PetscTSType TSSSP
     PetscTSType TSARKIMEX
     PetscTSType TSROSW
@@ -86,6 +86,24 @@ cdef extern from * nogil:
                                              PetscMat,
                                              void*) except PETSC_ERR_PYTHON
 
+    ctypedef int (*PetscTSI2FunctionFunction)(PetscTS,
+                                              PetscReal,
+                                              PetscVec,
+                                              PetscVec,
+                                              PetscVec,
+                                              PetscVec,
+                                              void*) except PETSC_ERR_PYTHON
+    ctypedef int (*PetscTSI2JacobianFunction)(PetscTS,
+                                              PetscReal,
+                                              PetscVec,
+                                              PetscVec,
+                                              PetscVec,
+                                              PetscReal,
+                                              PetscReal,
+                                              PetscMat,
+                                              PetscMat,
+                                              void*) except PETSC_ERR_PYTHON
+
     ctypedef int (*PetscTSMonitorFunction)(PetscTS,
                                            PetscInt,
                                            PetscReal,
@@ -115,7 +133,8 @@ cdef extern from * nogil:
 
     int TSSetSolution(PetscTS,PetscVec)
     int TSGetSolution(PetscTS,PetscVec*)
-    int TSGetSolveTime(PetscTS,PetscReal*)
+    int TS2SetSolution(PetscTS,PetscVec,PetscVec)
+    int TS2GetSolution(PetscTS,PetscVec*,PetscVec*)
 
     int TSGetRHSFunction(PetscTS,PetscVec*,PetscTSFunctionFunction*,void*)
     int TSGetRHSJacobian(PetscTS,PetscMat*,PetscMat*,PetscTSJacobianFunction*,void**)
@@ -125,6 +144,10 @@ cdef extern from * nogil:
     int TSSetIJacobian(PetscTS,PetscMat,PetscMat,PetscTSIJacobianFunction,void*)
     int TSGetIFunction(PetscTS,PetscVec*,PetscTSIFunctionFunction*,void*)
     int TSGetIJacobian(PetscTS,PetscMat*,PetscMat*,PetscTSIJacobianFunction*,void**)
+    int TSSetI2Function(PetscTS,PetscVec,PetscTSI2FunctionFunction,void*)
+    int TSSetI2Jacobian(PetscTS,PetscMat,PetscMat,PetscTSI2JacobianFunction,void*)
+    int TSGetI2Function(PetscTS,PetscVec*,PetscTSI2FunctionFunction*,void**)
+    int TSGetI2Jacobian(PetscTS,PetscMat*,PetscMat*,PetscTSI2JacobianFunction*,void**)
 
     int TSGetKSP(PetscTS,PetscKSP*)
     int TSGetSNES(PetscTS,PetscSNES*)
@@ -138,20 +161,24 @@ cdef extern from * nogil:
     int TSComputeRHSJacobianConstant(PetscTS,PetscReal,PetscVec,PetscMat,PetscMat,void*)
     int TSComputeIFunction(PetscTS,PetscReal,PetscVec,PetscVec,PetscVec,PetscBool)
     int TSComputeIJacobian(PetscTS,PetscReal,PetscVec,PetscVec,PetscReal,PetscMat,PetscMat,PetscBool)
+    int TSComputeI2Function(PetscTS,PetscReal,PetscVec,PetscVec,PetscVec,PetscVec)
+    int TSComputeI2Jacobian(PetscTS,PetscReal,PetscVec,PetscVec,PetscVec,PetscReal,PetscReal,PetscMat,PetscMat)
 
     int TSSetTime(PetscTS,PetscReal)
     int TSGetTime(PetscTS,PetscReal*)
     int TSGetPrevTime(PetscTS,PetscReal*)
-    int TSSetInitialTimeStep(PetscTS,PetscReal,PetscReal)
+    int TSGetSolveTime(PetscTS,PetscReal*)
     int TSSetTimeStep(PetscTS,PetscReal)
     int TSGetTimeStep(PetscTS,PetscReal*)
-    int TSGetTimeStepNumber(PetscTS,PetscInt*)
-    int TSSetDuration(PetscTS,PetscInt,PetscReal)
-    int TSGetDuration(PetscTS,PetscInt*,PetscReal*)
+    int TSSetStepNumber(PetscTS,PetscInt)
+    int TSGetStepNumber(PetscTS,PetscInt*)
+    int TSSetMaxSteps(PetscTS,PetscInt)
+    int TSGetMaxSteps(PetscTS,PetscInt*)
+    int TSSetMaxTime(PetscTS,PetscReal)
+    int TSGetMaxTime(PetscTS,PetscReal*)
     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*)
@@ -166,6 +193,44 @@ cdef extern from * nogil:
     int TSMonitorCancel(PetscTS)
     int TSMonitor(PetscTS,PetscInt,PetscReal,PetscVec)
 
+    ctypedef int (*PetscTSAdjointR)(PetscTS,PetscReal,PetscVec,PetscVec,void*) except PETSC_ERR_PYTHON
+    ctypedef int (*PetscTSAdjointDRDY)(PetscTS,PetscReal,PetscVec,PetscVec[],void*) except PETSC_ERR_PYTHON
+    ctypedef int (*PetscTSAdjointDRDP)(PetscTS,PetscReal,PetscVec,PetscVec[],void*) except PETSC_ERR_PYTHON
+    ctypedef int (*PetscTSAdjointRHSJacobianFunction)(PetscTS,
+                                                      PetscReal,
+                                                      PetscVec,
+                                                      PetscMat,
+                                                      void*) except PETSC_ERR_PYTHON
+
+
+    int TSSetSaveTrajectory(PetscTS)
+    int TSSetCostGradients(PetscTS,PetscInt,PetscVec*,PetscVec*)
+    int TSGetCostGradients(PetscTS,PetscInt*,PetscVec**,PetscVec**)
+    int TSGetCostIntegral(PetscTS,PetscVec*)
+
+    int TSSetCostIntegrand(PetscTS,PetscInt,PetscVec,PetscTSAdjointR,PetscTSAdjointDRDY,PetscTSAdjointDRDP,PetscBool,void*)
+    int TSAdjointSetRHSJacobian(PetscTS,PetscMat,PetscTSAdjointRHSJacobianFunction,void*)
+    int TSComputeCostIntegrand(PetscTS,PetscReal,PetscVec,PetscVec)
+    int TSAdjointComputeRHSJacobian(PetscTS,PetscReal,PetscVec,PetscMat)
+
+    int TSAdjointSolve(PetscTS)
+    int TSAdjointSetSteps(PetscTS,PetscInt)
+    int TSAdjointStep(PetscTS)
+    int TSAdjointSetUp(PetscTS)
+    int TSAdjointComputeDRDPFunction(PetscTS,PetscReal,PetscVec,PetscVec*)
+    int TSAdjointComputeDRDYFunction(PetscTS,PetscReal,PetscVec,PetscVec*)
+    int TSAdjointCostIntegral(PetscTS)
+
+    int TSForwardSetSensitivities(PetscTS,PetscInt,PetscVec*,PetscInt,PetscVec*)
+    int TSForwardGetSensitivities(PetscTS,PetscInt*,PetscVec**,PetscInt*,PetscVec**)
+    int TSForwardSetIntegralGradients(PetscTS,PetscInt,PetscVec *,PetscVec *)
+    int TSForwardGetIntegralGradients(PetscTS,PetscInt*,PetscVec **,PetscVec **)
+    int TSForwardSetRHSJacobianP(PetscTS,PetscVec*,PetscTSCostIntegrandFunction,void*)
+    int TSForwardComputeRHSJacobianP(PetscTS,PetscReal,PetscVec,PetscVec*)
+    int TSForwardSetUp(PetscTS)
+    int TSForwardCostIntegral(PetscTS)
+    int TSForwardStep(PetscTS)
+
     int TSSetPreStep(PetscTS, PetscTSPreStepFunction)
     int TSSetPostStep(PetscTS, PetscTSPostStepFunction)
 
@@ -185,6 +250,19 @@ cdef extern from * nogil:
     int TSAlphaSetParams(PetscTS,PetscReal,PetscReal,PetscReal)
     int TSAlphaGetParams(PetscTS,PetscReal*,PetscReal*,PetscReal*)
 
+    ctypedef char* PetscTSRKType "const char*"
+    PetscTSRKType TSRK1FE
+    PetscTSRKType TSRK2A
+    PetscTSRKType TSRK3
+    PetscTSRKType TSRK3BS
+    PetscTSRKType TSRK4
+    PetscTSRKType TSRK5F
+    PetscTSRKType TSRK5DP
+    PetscTSRKType TSRK5BS
+
+    int TSRKGetType(PetscTS ts,PetscTSRKType*)
+    int TSRKSetType(PetscTS ts,PetscTSRKType)
+
 cdef extern from "custom.h" nogil:
     int TSSetTimeStepNumber(PetscTS,PetscInt)
 
@@ -283,6 +361,52 @@ cdef int TS_IJacobian(
     jacobian(Ts, toReal(t), Xvec, XDvec, toReal(a), Jmat, Pmat, *args, **kargs)
     return 0
 
+cdef int TS_I2Function(
+    PetscTS   ts,
+    PetscReal t,
+    PetscVec  x,
+    PetscVec  xdot,
+    PetscVec  xdotdot,
+    PetscVec  f,
+    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)
+    cdef Vec XDDvec = ref_Vec(xdotdot)
+    cdef Vec Fvec  = ref_Vec(f)
+    cdef object context = Ts.get_attr('__i2function__')
+    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
+    function(Ts, toReal(t), Xvec, XDvec, XDDvec, Fvec, *args, **kargs)
+    return 0
+
+cdef int TS_I2Jacobian(
+    PetscTS   ts,
+    PetscReal t,
+    PetscVec  x,
+    PetscVec  xdot,
+    PetscVec  xdotdot,
+    PetscReal v,
+    PetscReal a,
+    PetscMat  J,
+    PetscMat  P,
+    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)
+    cdef Vec  XDDvec = ref_Vec(xdotdot)
+    cdef Mat  Jmat  = ref_Mat(J)
+    cdef Mat  Pmat  = ref_Mat(P)
+    cdef object context = Ts.get_attr('__i2jacobian__')
+    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
+    jacobian(Ts, toReal(t), Xvec, XDvec, XDDvec, toReal(v), toReal(a), Jmat, Pmat, *args, **kargs)
+    return 0
+
 # -----------------------------------------------------------------------------
 
 cdef int TS_Monitor(
@@ -319,3 +443,74 @@ cdef int TS_PostStep(
     return 0
 
 # -----------------------------------------------------------------------------
+
+cdef int TSAdjoint_CostIntegrand(
+    PetscTS   ts,
+    PetscReal t,
+    PetscVec  y,
+    PetscVec  r,
+    void*     ctx,
+    ) except PETSC_ERR_PYTHON with gil:
+    cdef TS  Ts   = ref_TS(ts)
+    cdef Vec Yvec = ref_Vec(y)
+    cdef Vec Rvec = ref_Vec(r)
+    cdef object context = Ts.get_attr('__costintegrand__')
+    if context is None and ctx != NULL: context = <object>ctx
+    ((rfunction, _, _), args, kargs) = context
+    rfunction(Ts, toReal(t), Yvec, Rvec, *args, **kargs)
+    return 0
+
+cdef int TSAdjoint_CostIntegrand_DY(
+    PetscTS   ts,
+    PetscReal t,
+    PetscVec  y,
+    PetscVec  drdy[],
+    void*     ctx,
+    ) except PETSC_ERR_PYTHON with gil:
+    cdef TS  Ts   = ref_TS(ts)
+    cdef Vec Yvec = ref_Vec(y)
+    cdef PetscInt i = 0, n = 0
+    CHKERR( TSGetCostGradients(ts, &n, NULL, NULL) )
+    cdef list vecs = [ref_Vec(drdy[i]) for i from 0 <= i < n]
+    cdef object context = Ts.get_attr('__costintegrand__')
+    if context is None and ctx != NULL: context = <object>ctx
+    ((_, drdyfunction, _), args, kargs) = context
+    drdyfunction(Ts, toReal(t), Yvec, vecs, *args, **kargs)
+    return 0
+
+cdef int TSAdjoint_CostIntegrand_DP(
+    PetscTS   ts,
+    PetscReal t,
+    PetscVec  y,
+    PetscVec  drdp[],
+    void*     ctx,
+    ) except PETSC_ERR_PYTHON with gil:
+    cdef TS  Ts   = ref_TS(ts)
+    cdef Vec Yvec = ref_Vec(y)
+    cdef PetscInt i = 0, n = 0
+    CHKERR( TSGetCostGradients(ts, &n, NULL, NULL) )
+    cdef list vecs = [ref_Vec(drdp[i]) for i from 0 <= i < n]
+    cdef object context = Ts.get_attr('__costintegrand__')
+    if context is None and ctx != NULL: context = <object>ctx
+    ((_, _, drdpfunction), args, kargs) = context
+    drdpfunction(Ts, toReal(t), Yvec, vecs, *args, **kargs)
+    return 0
+
+cdef int TSAdjoint_RHSJacobian(
+    PetscTS   ts,
+    PetscReal t,
+    PetscVec  x,
+    PetscMat  J,
+    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)
+    cdef object context = Ts.get_attr('__adjointrhsjacobian__')
+    if context is None and ctx != NULL: context = <object>ctx
+    assert context is not None and type(context) is tuple # sanity check
+    (adjointjacobian, args, kargs) = context
+    adjointjacobian(Ts, toReal(t), Xvec, Jmat, *args, **kargs)
+    return 0
+
+# -----------------------------------------------------------------------------
diff --git a/src/PETSc/petscvec.pxi b/src/PETSc/petscvec.pxi
index 884dc3d..919a509 100644
--- a/src/PETSc/petscvec.pxi
+++ b/src/PETSc/petscvec.pxi
@@ -76,6 +76,7 @@ cdef extern from * nogil:
     int VecSetValuesBlocked(PetscVec,PetscInt,PetscInt[],PetscScalar[],PetscInsertMode)
 
     int VecSetLocalToGlobalMapping(PetscVec,PetscLGMap)
+    int VecGetLocalToGlobalMapping(PetscVec,PetscLGMap*)
     int VecSetValueLocal(PetscVec,PetscInt,PetscScalar,PetscInsertMode)
     int VecSetValuesLocal(PetscVec,PetscInt,PetscInt[],PetscScalar[],PetscInsertMode)
     int VecSetValuesBlockedLocal(PetscVec,PetscInt,PetscInt[],PetscScalar[],PetscInsertMode)
@@ -418,7 +419,7 @@ cdef class _Vec_buffer:
     cdef bint readonly
     cdef bint hasarray
 
-    def __cinit__(self, Vec vec not None, bint readonly=0):
+    def __cinit__(self, Vec vec, bint readonly=0):
         cdef PetscVec v = vec.vec
         CHKERR( PetscINCREF(<PetscObject*>&v) )
         self.vec = v
@@ -537,7 +538,7 @@ cdef class _Vec_LocalForm:
     cdef Vec gvec
     cdef Vec lvec
 
-    def __init__(self, Vec gvec not None):
+    def __init__(self, Vec gvec):
         self.gvec = gvec
         self.lvec = Vec()
 
diff --git a/src/PETSc/petscvwr.pxi b/src/PETSc/petscvwr.pxi
index 4327030..95878d3 100644
--- a/src/PETSc/petscvwr.pxi
+++ b/src/PETSc/petscvwr.pxi
@@ -8,7 +8,6 @@ cdef extern from * nogil:
     PetscViewerType PETSCVIEWERDRAW
     PetscViewerType PETSCVIEWERVU
     PetscViewerType PETSCVIEWERMATHEMATICA
-    PetscViewerType PETSCVIEWERNETCDF
     PetscViewerType PETSCVIEWERHDF5
     PetscViewerType PETSCVIEWERVTK
     PetscViewerType PETSCVIEWERMATLAB
@@ -82,6 +81,18 @@ cdef extern from * nogil:
     int PetscViewerPushFormat(PetscViewer,PetscViewerFormat)
     int PetscViewerPopFormat(PetscViewer)
 
+    int PetscViewerASCIISetTab(PetscViewer,PetscInt)
+    int PetscViewerASCIIGetTab(PetscViewer,PetscInt*)
+    int PetscViewerASCIIAddTab(PetscViewer,PetscInt)
+    int PetscViewerASCIISubtractTab(PetscViewer,PetscInt)
+    int PetscViewerASCIIPushSynchronized(PetscViewer)
+    int PetscViewerASCIIPopSynchronized(PetscViewer)
+    int PetscViewerASCIIPushTab(PetscViewer)
+    int PetscViewerASCIIPopTab(PetscViewer)
+    int PetscViewerASCIIUseTabs(PetscViewer,PetscBool)
+    int PetscViewerASCIIPrintf(PetscViewer,const_char[],...)
+    int PetscViewerASCIISynchronizedPrintf(PetscViewer,const_char[],...)
+
     int PetscViewerFileGetName(PetscViewer,char*[])
     int PetscViewerFileSetName(PetscViewer,char[])
     int PetscViewerFileGetMode(PetscViewer,PetscFileMode*)
diff --git a/src/__init__.py b/src/__init__.py
index a6868b9..857083c 100644
--- a/src/__init__.py
+++ b/src/__init__.py
@@ -21,7 +21,7 @@ communication.
 """
 
 __author__    = 'Lisandro Dalcin'
-__version__   = '3.7.0'
+__version__   = '3.8.0'
 __credits__   = 'PETSc Team <petsc-maint at mcs.anl.gov>'
 
 # --------------------------------------------------------------------
@@ -61,3 +61,22 @@ def get_include():
     return join(dirname(__file__), 'include')
 
 # --------------------------------------------------------------------
+
+def get_config():
+    """Return a dictionary with information about PETSc."""
+    import sys, os.path as p
+    if sys.version_info[0] >= 3:
+        from io import StringIO
+        from configparser import ConfigParser
+    else:
+        from StringIO import StringIO
+        from ConfigParser import ConfigParser
+    filename = p.join(p.dirname(__file__), 'lib', 'petsc.cfg')
+    with open(filename) as fp:
+        stream = StringIO("[petsc]\n"+fp.read())
+    parser = ConfigParser()
+    parser.optionxform = str
+    parser.readfp(stream, filename)
+    return dict(parser.items('petsc'))
+
+# --------------------------------------------------------------------
diff --git a/src/include/compat/hdf5.h b/src/include/compat/hdf5.h
index d1224cd..ae94e4a 100644
--- a/src/include/compat/hdf5.h
+++ b/src/include/compat/hdf5.h
@@ -3,29 +3,21 @@
 
 #include <petscviewerhdf5.h>
 #if !defined(PETSC_HAVE_HDF5)
-#define PetscViewerHDF5Error do { \
+
+#define PetscViewerHDF5Error do {               \
     PetscFunctionBegin; \
-    SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,__FUNCT__"() requires HDF5"); \
+    SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_SUP,"%s() requires HDF5",PETSC_FUNCTION_NAME); \
     PetscFunctionReturn(PETSC_ERR_SUP);} while (0)
-#undef __FUNCT__
-#define __FUNCT__ "PetscViewerHDF5PushGroup"
+
 PetscErrorCode PetscViewerHDF5PushGroup(PETSC_UNUSED PetscViewer vw,PETSC_UNUSED const char g[]){PetscViewerHDF5Error;}
-#undef __FUNCT__
-#define __FUNCT__ "PetscViewerHDF5PopGroup"
 PetscErrorCode PetscViewerHDF5PopGroup(PETSC_UNUSED PetscViewer vw){PetscViewerHDF5Error;}
-#undef __FUNCT__
-#define __FUNCT__ "PetscViewerHDF5GetGroup"
 PetscErrorCode PetscViewerHDF5GetGroup(PETSC_UNUSED PetscViewer vw,PETSC_UNUSED const char *g[]){PetscViewerHDF5Error;}
-#undef __FUNCT__
-#define __FUNCT__ "PetscViewerHDF5SetTimestep"
 PetscErrorCode PetscViewerHDF5SetTimestep(PETSC_UNUSED PetscViewer vw, PETSC_UNUSED PetscInt n){PetscViewerHDF5Error;}
-#undef __FUNCT__
-#define __FUNCT__ "PetscViewerHDF5GetTimestep"
 PetscErrorCode PetscViewerHDF5GetTimestep(PETSC_UNUSED PetscViewer vw, PETSC_UNUSED PetscInt*n){PetscViewerHDF5Error;}
-#undef __FUNCT__
-#define __FUNCT__ "PetscViewerHDF5IncrementTimestep"
 PetscErrorCode PetscViewerHDF5IncrementTimestep(PETSC_UNUSED PetscViewer vw){PetscViewerHDF5Error;}
+
 #undef PetscViewerHDF5Error
+
 #endif
 
 #endif/*PETSC4PY_COMPAT_HDF5_H*/
diff --git a/src/include/compat/hypre.h b/src/include/compat/hypre.h
index 08e5816..6f8e01c 100644
--- a/src/include/compat/hypre.h
+++ b/src/include/compat/hypre.h
@@ -2,32 +2,22 @@
 #define PETSC4PY_COMPAT_HYPRE_H
 
 #if !defined(PETSC_HAVE_HYPRE)
+
 #define PetscPCHYPREError do { \
     PetscFunctionBegin; \
-    SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,__FUNCT__"() requires HYPRE"); \
+    SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_SUP,"%s() requires HYPRE",PETSC_FUNCTION_NAME); \
     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/mpi.h b/src/include/compat/mpi.h
index bf69bf6..9cb1771 100644
--- a/src/include/compat/mpi.h
+++ b/src/include/compat/mpi.h
@@ -3,6 +3,19 @@
 
 #if defined(OPEN_MPI)
 
+/*
+ * The hackery below redefines the actuall calls to 'MPI_Init()' and
+ * 'MPI_Init_thread()' in order to preload the main MPI dynamic
+ * library with appropriate flags to 'dlopen()' ensuring global
+ * availability of library symbols.
+ */
+
+#if !defined(OPENMPI_DLOPEN_LIBMPI) && defined(OMPI_MAJOR_VERSION)
+#if OMPI_MAJOR_VERSION >= 3 && OMPI_MAJOR_VERSION < 10
+#define OPENMPI_DLOPEN_LIBMPI 0
+#endif
+#endif
+
 #ifndef OPENMPI_DLOPEN_LIBMPI
 #define OPENMPI_DLOPEN_LIBMPI 1
 #endif
@@ -93,26 +106,48 @@ static void OPENMPI_dlopen_libmpi(void)
 {
   void *handle = 0;
   int mode = RTLD_NOW | RTLD_GLOBAL;
+#if defined(__APPLE__)
+  /* macOS */
   #ifdef RTLD_NOLOAD
   mode |= RTLD_NOLOAD;
   #endif
-#if defined(__CYGWIN__)
-  if (!handle) handle = dlopen("cygmpi.dll", mode);
-  if (!handle) handle = dlopen("mpi.dll",    mode);
-#elif defined(__APPLE__)
-  /* Mac OS X */
-  if (!handle) handle = dlopen("libmpi.3.dylib", mode);
-  if (!handle) handle = dlopen("libmpi.2.dylib", mode);
+  #if defined(OMPI_MAJOR_VERSION)
+  #if OMPI_MAJOR_VERSION == 3
+  if (!handle) handle = dlopen("libmpi.40.dylib", mode);
+  #elif OMPI_MAJOR_VERSION == 2
+  if (!handle) handle = dlopen("libmpi.20.dylib", mode);
+  #elif OMPI_MAJOR_VERSION == 1 && OMPI_MINOR_VERSION >= 10
+  if (!handle) handle = dlopen("libmpi.12.dylib", mode);
+  #elif OMPI_MAJOR_VERSION == 1 && OMPI_MINOR_VERSION >= 6
   if (!handle) handle = dlopen("libmpi.1.dylib", mode);
+  #elif OMPI_MAJOR_VERSION == 1
   if (!handle) handle = dlopen("libmpi.0.dylib", mode);
-  if (!handle) handle = dlopen("libmpi.dylib",   mode);
+  #endif
+  #endif
+  if (!handle) handle = dlopen("libmpi.dylib", mode);
 #else
   /* GNU/Linux and others */
-  if (!handle) handle = dlopen("libmpi.so.3", mode);
-  if (!handle) handle = dlopen("libmpi.so.2", mode);
+  #ifdef RTLD_NOLOAD
+  mode |= RTLD_NOLOAD;
+  #endif
+  #if defined(OMPI_MAJOR_VERSION)
+  #if OMPI_MAJOR_VERSION >= 10 /* IBM Spectrum MPI */
+  if (!handle) handle = dlopen("libmpi_ibm.so.2", mode);
+  if (!handle) handle = dlopen("libmpi_ibm.so.1", mode);
+  if (!handle) handle = dlopen("libmpi_ibm.so", mode);
+  #elif OMPI_MAJOR_VERSION == 3
+  if (!handle) handle = dlopen("libmpi.so.40", mode);
+  #elif OMPI_MAJOR_VERSION == 2
+  if (!handle) handle = dlopen("libmpi.so.20", mode);
+  #elif OMPI_MAJOR_VERSION == 1 && OMPI_MINOR_VERSION >= 10
+  if (!handle) handle = dlopen("libmpi.so.12", mode);
+  #elif OMPI_MAJOR_VERSION == 1 && OMPI_MINOR_VERSION >= 6
   if (!handle) handle = dlopen("libmpi.so.1", mode);
+  #elif OMPI_MAJOR_VERSION == 1
   if (!handle) handle = dlopen("libmpi.so.0", mode);
-  if (!handle) handle = dlopen("libmpi.so",   mode);
+  #endif
+  #endif
+  if (!handle) handle = dlopen("libmpi.so", mode);
 #endif
 }
 
diff --git a/src/include/compat/mumps.h b/src/include/compat/mumps.h
index dbc2e89..fbf3eee 100644
--- a/src/include/compat/mumps.h
+++ b/src/include/compat/mumps.h
@@ -3,35 +3,23 @@
 
 #include <petscmat.h>
 #if !defined(PETSC_HAVE_MUMPS)
-#define PetscMUMPSError do { \
+
+#define PetscMUMPSError do {                    \
     PetscFunctionBegin; \
-    SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,__FUNCT__"() requires MUMPS"); \
+    SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_SUP,"%s() requires MUMPS",PETSC_FUNCTION_NAME); \
     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
index b4b70ee..b31a8dc 100644
--- a/src/include/compat/tao.h
+++ b/src/include/compat/tao.h
@@ -4,19 +4,11 @@
 
 #define PetscTaoError do { \
     PetscFunctionBegin; \
-    SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,__FUNCT__"() not supported with complex scalars"); \
+    SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_SUP,"%s() not supported with complex scalars",PETSC_FUNCTION_NAME); \
     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
diff --git a/src/include/custom.h b/src/include/custom.h
index d4b544d..a036490 100644
--- a/src/include/custom.h
+++ b/src/include/custom.h
@@ -1,9 +1,6 @@
 #ifndef PETSC4PY_CUSTOM_H
 #define PETSC4PY_CUSTOM_H
 
-#undef  __FUNCT__
-#define __FUNCT__ "<petsc4py.PETSc>"
-
 #include "petsc/private/vecimpl.h"
 #include "petsc/private/matimpl.h"
 #include "petsc/private/kspimpl.h"
@@ -28,11 +25,13 @@ typedef PetscErrorCode (*PetscErrorHandlerFunction)
 
 /* ---------------------------------------------------------------- */
 
+#if !defined(PETSC_USE_LOG)
+static PetscStageLog petsc_stageLog = NULL;
+#endif
+
 #define PetscCLASSID(stageLog,index) \
         ((stageLog)->classLog->classInfo[(index)].classid)
 
-#undef __FUNCT__
-#define __FUNCT__ "PetscLogStageFindId"
 static PetscErrorCode
 PetscLogStageFindId(const char name[], PetscLogStage *stageid)
 {
@@ -53,8 +52,6 @@ PetscLogStageFindId(const char name[], PetscLogStage *stageid)
   PetscFunctionReturn(0);
 }
 
-#undef __FUNCT__
-#define __FUNCT__ "PetscLogClassFindId"
 static PetscErrorCode
 PetscLogClassFindId(const char name[], PetscClassId *classid)
 {
@@ -76,8 +73,6 @@ PetscLogClassFindId(const char name[], PetscClassId *classid)
   PetscFunctionReturn(0);
 }
 
-#undef __FUNCT__
-#define __FUNCT__ "PetscLogEventFindId"
 static PetscErrorCode
 PetscLogEventFindId(const char name[], PetscLogEvent *eventid)
 {
@@ -98,8 +93,6 @@ PetscLogEventFindId(const char name[], PetscLogEvent *eventid)
   PetscFunctionReturn(0);
 }
 
-#undef __FUNCT__
-#define __FUNCT__ "PetscLogStageFindName"
 static PetscErrorCode
 PetscLogStageFindName(PetscLogStage stageid,
                       const char *name[])
@@ -115,8 +108,6 @@ PetscLogStageFindName(PetscLogStage stageid,
   PetscFunctionReturn(0);
 }
 
-#undef __FUNCT__
-#define __FUNCT__ "PetscLogClassFindName"
 static PetscErrorCode
 PetscLogClassFindName(PetscClassId classid,
                       const char *name[])
@@ -136,8 +127,6 @@ PetscLogClassFindName(PetscClassId classid,
   PetscFunctionReturn(0);
 }
 
-#undef __FUNCT__
-#define __FUNCT__ "PetscLogEventFindName"
 static PetscErrorCode
 PetscLogEventFindName(PetscLogEvent eventid,
                       const char *name[])
@@ -153,12 +142,33 @@ PetscLogEventFindName(PetscLogEvent eventid,
   PetscFunctionReturn(0);
 }
 
+#if !defined(PETSC_USE_LOG)
+static PetscErrorCode
+PetscLogEventGetPerfInfo(int stage,PetscLogEvent event,PetscEventPerfInfo *info)
+{
+  PetscErrorCode ierr;
+  PetscFunctionBegin;
+  PetscValidPointer(info,3);
+  (void)stage; (void)event; /* unused */
+  ierr = PetscMemzero(info,sizeof(PetscEventPerfInfo));CHKERRQ(ierr);
+  PetscFunctionReturn(0);
+}
+#endif
+
 /* ---------------------------------------------------------------- */
 
-#if !defined(PETSC_HAVE_CUSP)
+#if defined(PETSC_HAVE_CUSP)
+
+PETSC_EXTERN PetscErrorCode VecCUSPGetCUDAArrayRead(Vec,PetscScalar**);
+PETSC_EXTERN PetscErrorCode VecCUSPGetCUDAArrayWrite(Vec,PetscScalar**);
+PETSC_EXTERN PetscErrorCode VecCUSPGetCUDAArrayReadWrite(Vec,PetscScalar**);
+
+PETSC_EXTERN PetscErrorCode VecCUSPRestoreCUDAArrayRead(Vec,PetscScalar**);
+PETSC_EXTERN PetscErrorCode VecCUSPRestoreCUDAArrayWrite(Vec,PetscScalar**);
+PETSC_EXTERN PetscErrorCode VecCUSPRestoreCUDAArrayReadWrite(Vec,PetscScalar**);
+
+#else
 
-#undef  __FUNCT__
-#define __FUNCT__ "VecCUSPGetCUDAArray"
 PETSC_STATIC_INLINE PetscErrorCode
 VecCUSPGetCUDAArray(Vec v,PetscScalar **a)
 {
@@ -166,15 +176,13 @@ VecCUSPGetCUDAArray(Vec v,PetscScalar **a)
   PetscValidHeaderSpecific(v,VEC_CLASSID,1);
   PetscValidType(v,1);
   PetscValidPointer(a,2);
-  SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,__FUNCT__"() requires CUSP");
+  SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_SUP,"%s() requires CUSP",PETSC_FUNCTION_NAME);
   PetscFunctionReturn(PETSC_ERR_SUP);
 }
 #define VecCUSPGetCUDAArrayRead      VecCUSPGetCUDAArray
 #define VecCUSPGetCUDAArrayWrite     VecCUSPGetCUDAArray
 #define VecCUSPGetCUDAArrayReadWrite VecCUSPGetCUDAArray
 
-#undef  __FUNCT__
-#define __FUNCT__ "VecCUSPRestoreCUDAArray"
 PETSC_STATIC_INLINE PetscErrorCode
 VecCUSPRestoreCUDAArray(Vec v,PetscScalar **a)
 {
@@ -182,7 +190,7 @@ VecCUSPRestoreCUDAArray(Vec v,PetscScalar **a)
   PetscValidHeaderSpecific(v,VEC_CLASSID,1);
   PetscValidType(v,1);
   PetscValidPointer(a,2);
-  SETERRQ(PETSC_COMM_SELF,PETSC_ERR_SUP,__FUNCT__"() requires CUSP");
+  SETERRQ1(PETSC_COMM_SELF,PETSC_ERR_SUP,"%s() requires CUSP",PETSC_FUNCTION_NAME);
   PetscFunctionReturn(PETSC_ERR_SUP);
 }
 #define VecCUSPRestoreCUDAArrayRead      VecCUSPRestoreCUDAArray
@@ -191,8 +199,6 @@ VecCUSPRestoreCUDAArray(Vec v,PetscScalar **a)
 
 #endif
 
-#undef  __FUNCT__
-#define __FUNCT__ "VecStrideSum"
 PETSC_STATIC_INLINE PetscErrorCode
 VecStrideSum(Vec v, PetscInt start, PetscScalar *a)
 {
@@ -224,8 +230,6 @@ VecStrideSum(Vec v, PetscInt start, PetscScalar *a)
 /* ---------------------------------------------------------------- */
 
 PETSC_STATIC_INLINE
-#undef  __FUNCT__
-#define __FUNCT__ "MatIsPreallocated"
 PetscErrorCode MatIsPreallocated(Mat A,PetscBool *flag)
 {
   PetscFunctionBegin;
@@ -236,8 +240,6 @@ PetscErrorCode MatIsPreallocated(Mat A,PetscBool *flag)
 }
 
 PETSC_STATIC_INLINE
-#undef  __FUNCT__
-#define __FUNCT__ "MatHasPreallocationAIJ"
 PetscErrorCode MatHasPreallocationAIJ(Mat A,PetscBool *aij,PetscBool *baij,PetscBool *sbaij)
 {
   void (*f)(void) = 0;
@@ -268,8 +270,6 @@ typedef PetscErrorCode MatNullSpaceFunction(MatNullSpace,Vec,void*);
 
 /* ---------------------------------------------------------------- */
 
-#undef __FUNCT__
-#define __FUNCT__ "MatFactorInfoDefaults"
 static PetscErrorCode
 MatFactorInfoDefaults(PetscBool incomplete,PetscBool cholesky,
                       MatFactorInfo *info)
@@ -309,8 +309,6 @@ MatFactorInfoDefaults(PetscBool incomplete,PetscBool cholesky,
 
 /* ---------------------------------------------------------------- */
 
-#undef __FUNCT__
-#define __FUNCT__ "KSPSetIterationNumber"
 static PetscErrorCode
 KSPSetIterationNumber(KSP ksp, PetscInt its)
 {
@@ -322,8 +320,6 @@ KSPSetIterationNumber(KSP ksp, PetscInt its)
   PetscFunctionReturn(0);
 }
 
-#undef __FUNCT__
-#define __FUNCT__ "KSPSetResidualNorm"
 static PetscErrorCode
 KSPSetResidualNorm(KSP ksp, PetscReal rnorm)
 {
@@ -335,8 +331,6 @@ KSPSetResidualNorm(KSP ksp, PetscReal rnorm)
   PetscFunctionReturn(0);
 }
 
-#undef __FUNCT__
-#define __FUNCT__ "KSPConvergenceTestCall"
 static PetscErrorCode
 KSPConvergenceTestCall(KSP ksp, PetscInt its, PetscReal rnorm, KSPConvergedReason *reason)
 {
@@ -352,8 +346,6 @@ KSPConvergenceTestCall(KSP ksp, PetscInt its, PetscReal rnorm, KSPConvergedReaso
   PetscFunctionReturn(0);
 }
 
-#undef __FUNCT__
-#define __FUNCT__ "KSPSetConvergedReason"
 static PetscErrorCode
 KSPSetConvergedReason(KSP ksp, KSPConvergedReason reason)
 {
@@ -365,8 +357,6 @@ KSPSetConvergedReason(KSP ksp, KSPConvergedReason reason)
 
 /* ---------------------------------------------------------------- */
 
-#undef __FUNCT__
-#define __FUNCT__ "SNESConvergenceTestCall"
 static PetscErrorCode
 SNESConvergenceTestCall(SNES snes, PetscInt its,
                         PetscReal xnorm, PetscReal ynorm, PetscReal fnorm,
@@ -388,8 +378,6 @@ SNESConvergenceTestCall(SNES snes, PetscInt its,
   PetscFunctionReturn(0);
 }
 
-#undef __FUNCT__
-#define __FUNCT__ "SNESGetUseMFFD"
 static PetscErrorCode
 SNESGetUseMFFD(SNES snes,PetscBool *flag)
 {
@@ -406,8 +394,6 @@ SNESGetUseMFFD(SNES snes,PetscBool *flag)
   PetscFunctionReturn(0);
 }
 
-#undef __FUNCT__
-#define __FUNCT__ "SNESSetUseMFFD"
 static PetscErrorCode
 SNESSetUseMFFD(SNES snes,PetscBool flag)
 {
@@ -459,8 +445,6 @@ SNESSetUseMFFD(SNES snes,PetscBool flag)
   PetscFunctionReturn(0);
 }
 
-#undef __FUNCT__
-#define __FUNCT__ "SNESGetUseFDColoring"
 static PetscErrorCode
 SNESGetUseFDColoring(SNES snes,PetscBool *flag)
 {
@@ -475,8 +459,6 @@ SNESGetUseFDColoring(SNES snes,PetscBool *flag)
   PetscFunctionReturn(0);
 }
 
-#undef __FUNCT__
-#define __FUNCT__ "SNESSetUseFDColoring"
 static PetscErrorCode
 SNESSetUseFDColoring(SNES snes,PetscBool flag)
 {
@@ -514,21 +496,6 @@ SNESSetUseFDColoring(SNES snes,PetscBool flag)
 
 /* ---------------------------------------------------------------- */
 
-#undef __FUNCT__
-#define __FUNCT__ "TSSetTimeStepNumber"
-static PetscErrorCode
-TSSetTimeStepNumber(TS ts, PetscInt step)
-{
-  PetscFunctionBegin;
-  PetscValidHeaderSpecific(ts,TS_CLASSID,1);
-  ts->steps = step;
-  PetscFunctionReturn(0);
-}
-
-/* ---------------------------------------------------------------- */
-
-#undef __FUNCT__
-#define __FUNCT__ "DMDACreateND"
 static PetscErrorCode
 DMDACreateND(MPI_Comm comm,
              PetscInt dim,PetscInt dof,
@@ -558,9 +525,6 @@ DMDACreateND(MPI_Comm comm,
 
 /* ---------------------------------------------------------------- */
 
-#undef  __FUNCT__
-#define __FUNCT__ "<petsc4py.PETSc>"
-
 #endif/* PETSC4PY_CUSTOM_H*/
 
 /*
diff --git a/src/include/initpkg.h b/src/include/initpkg.h
index 4071f28..300cd42 100644
--- a/src/include/initpkg.h
+++ b/src/include/initpkg.h
@@ -1,7 +1,5 @@
 /* ------------------------------------------------------------------------- */
 
-#undef  __FUNCT__
-#define __FUNCT__ "PetscInitializePackageAll"
 static PetscErrorCode PetscInitializePackageAll(void)
 {
   PetscErrorCode ierr;
@@ -23,8 +21,6 @@ static PetscErrorCode PetscInitializePackageAll(void)
   ierr = PetscSFInitializePackage();CHKERRQ(ierr);
   PetscFunctionReturn(0);
 }
-#undef  __FUNCT__
-#define __FUNCT__ "<petsc4py.PETSc>"
 
 /* ------------------------------------------------------------------------- */
 
diff --git a/src/include/petsc4py/PETSc.pxd b/src/include/petsc4py/PETSc.pxd
index a268b3f..2e13f40 100644
--- a/src/include/petsc4py/PETSc.pxd
+++ b/src/include/petsc4py/PETSc.pxd
@@ -65,6 +65,9 @@ cdef extern from "petsc.h":
     struct _p_PetscPartitioner
     ctypedef _p_PetscPartitioner* PetscPartitioner "PetscPartitioner"
 
+    struct _p_SNESLineSearch
+    ctypedef _p_SNESLineSearch* PetscSNESLineSearch "SNESLineSearch"
+
 # --------------------------------------------------------------------
 
 ctypedef public api class Comm [
diff --git a/src/include/petsc4py/petsc4py.PETSc.h b/src/include/petsc4py/petsc4py.PETSc.h
index dc55231..af1fea4 100644
--- a/src/include/petsc4py/petsc4py.PETSc.h
+++ b/src/include/petsc4py/petsc4py.PETSc.h
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.24 */
+/* Generated by Cython 0.27.1 */
 
 #ifndef __PYX_HAVE__petsc4py__PETSc
 #define __PYX_HAVE__petsc4py__PETSc
@@ -24,7 +24,7 @@ struct PyPetscAOObject;
 struct PyPetscDMObject;
 struct PyPetscPartitionerObject;
 
-/* "petsc4py/PETSc.pxd":70
+/* "petsc4py/PETSc.pxd":73
  * # --------------------------------------------------------------------
  * 
  * ctypedef public api class Comm [             # <<<<<<<<<<<<<<
@@ -39,7 +39,7 @@ struct PyPetscCommObject {
 };
 typedef struct PyPetscCommObject PyPetscCommObject;
 
-/* "petsc4py/PETSc.pxd":78
+/* "petsc4py/PETSc.pxd":81
  *     cdef object base
  * 
  * ctypedef public api class Object [             # <<<<<<<<<<<<<<
@@ -56,7 +56,7 @@ struct PyPetscObjectObject {
 };
 typedef struct PyPetscObjectObject PyPetscObjectObject;
 
-/* "petsc4py/PETSc.pxd":90
+/* "petsc4py/PETSc.pxd":93
  *     cdef object get_dict(self)
  * 
  * ctypedef public api class Viewer(Object) [             # <<<<<<<<<<<<<<
@@ -69,7 +69,7 @@ struct PyPetscViewerObject {
 };
 typedef struct PyPetscViewerObject PyPetscViewerObject;
 
-/* "petsc4py/PETSc.pxd":96
+/* "petsc4py/PETSc.pxd":99
  *     cdef PetscViewer vwr
  * 
  * ctypedef public api class Random(Object) [             # <<<<<<<<<<<<<<
@@ -82,7 +82,7 @@ struct PyPetscRandomObject {
 };
 typedef struct PyPetscRandomObject PyPetscRandomObject;
 
-/* "petsc4py/PETSc.pxd":102
+/* "petsc4py/PETSc.pxd":105
  *     cdef PetscRandom rnd
  * 
  * ctypedef public api class IS(Object) [             # <<<<<<<<<<<<<<
@@ -95,7 +95,7 @@ struct PyPetscISObject {
 };
 typedef struct PyPetscISObject PyPetscISObject;
 
-/* "petsc4py/PETSc.pxd":108
+/* "petsc4py/PETSc.pxd":111
  *     cdef PetscIS iset
  * 
  * ctypedef public api class LGMap(Object) [             # <<<<<<<<<<<<<<
@@ -108,7 +108,7 @@ struct PyPetscLGMapObject {
 };
 typedef struct PyPetscLGMapObject PyPetscLGMapObject;
 
-/* "petsc4py/PETSc.pxd":114
+/* "petsc4py/PETSc.pxd":117
  *     cdef PetscLGMap lgm
  * 
  * ctypedef public api class SF(Object) [             # <<<<<<<<<<<<<<
@@ -121,7 +121,7 @@ struct PyPetscSFObject {
 };
 typedef struct PyPetscSFObject PyPetscSFObject;
 
-/* "petsc4py/PETSc.pxd":120
+/* "petsc4py/PETSc.pxd":123
  *     cdef PetscSF sf
  * 
  * ctypedef public api class Vec(Object) [             # <<<<<<<<<<<<<<
@@ -134,7 +134,7 @@ struct PyPetscVecObject {
 };
 typedef struct PyPetscVecObject PyPetscVecObject;
 
-/* "petsc4py/PETSc.pxd":126
+/* "petsc4py/PETSc.pxd":129
  *     cdef PetscVec vec
  * 
  * ctypedef public api class Scatter(Object) [             # <<<<<<<<<<<<<<
@@ -147,7 +147,7 @@ struct PyPetscScatterObject {
 };
 typedef struct PyPetscScatterObject PyPetscScatterObject;
 
-/* "petsc4py/PETSc.pxd":132
+/* "petsc4py/PETSc.pxd":135
  *     cdef PetscScatter sct
  * 
  * ctypedef public api class Section(Object) [             # <<<<<<<<<<<<<<
@@ -160,7 +160,7 @@ struct PyPetscSectionObject {
 };
 typedef struct PyPetscSectionObject PyPetscSectionObject;
 
-/* "petsc4py/PETSc.pxd":138
+/* "petsc4py/PETSc.pxd":141
  *     cdef PetscSection sec
  * 
  * ctypedef public api class Mat(Object) [             # <<<<<<<<<<<<<<
@@ -173,7 +173,7 @@ struct PyPetscMatObject {
 };
 typedef struct PyPetscMatObject PyPetscMatObject;
 
-/* "petsc4py/PETSc.pxd":144
+/* "petsc4py/PETSc.pxd":147
  *     cdef PetscMat mat
  * 
  * ctypedef public api class NullSpace(Object) [             # <<<<<<<<<<<<<<
@@ -186,7 +186,7 @@ struct PyPetscNullSpaceObject {
 };
 typedef struct PyPetscNullSpaceObject PyPetscNullSpaceObject;
 
-/* "petsc4py/PETSc.pxd":150
+/* "petsc4py/PETSc.pxd":153
  *     cdef PetscNullSpace nsp
  * 
  * ctypedef public api class PC(Object) [             # <<<<<<<<<<<<<<
@@ -199,7 +199,7 @@ struct PyPetscPCObject {
 };
 typedef struct PyPetscPCObject PyPetscPCObject;
 
-/* "petsc4py/PETSc.pxd":156
+/* "petsc4py/PETSc.pxd":159
  *     cdef PetscPC pc
  * 
  * ctypedef public api class KSP(Object) [             # <<<<<<<<<<<<<<
@@ -212,7 +212,7 @@ struct PyPetscKSPObject {
 };
 typedef struct PyPetscKSPObject PyPetscKSPObject;
 
-/* "petsc4py/PETSc.pxd":162
+/* "petsc4py/PETSc.pxd":165
  *     cdef PetscKSP ksp
  * 
  * ctypedef public api class SNES(Object) [             # <<<<<<<<<<<<<<
@@ -225,7 +225,7 @@ struct PyPetscSNESObject {
 };
 typedef struct PyPetscSNESObject PyPetscSNESObject;
 
-/* "petsc4py/PETSc.pxd":168
+/* "petsc4py/PETSc.pxd":171
  *     cdef PetscSNES snes
  * 
  * ctypedef public api class TS(Object) [             # <<<<<<<<<<<<<<
@@ -238,7 +238,7 @@ struct PyPetscTSObject {
 };
 typedef struct PyPetscTSObject PyPetscTSObject;
 
-/* "petsc4py/PETSc.pxd":174
+/* "petsc4py/PETSc.pxd":177
  *     cdef PetscTS ts
  * 
  * ctypedef public api class TAO(Object) [             # <<<<<<<<<<<<<<
@@ -251,7 +251,7 @@ struct PyPetscTAOObject {
 };
 typedef struct PyPetscTAOObject PyPetscTAOObject;
 
-/* "petsc4py/PETSc.pxd":180
+/* "petsc4py/PETSc.pxd":183
  *     cdef PetscTAO tao
  * 
  * ctypedef public api class AO(Object) [             # <<<<<<<<<<<<<<
@@ -264,7 +264,7 @@ struct PyPetscAOObject {
 };
 typedef struct PyPetscAOObject PyPetscAOObject;
 
-/* "petsc4py/PETSc.pxd":186
+/* "petsc4py/PETSc.pxd":189
  *     cdef PetscAO ao
  * 
  * ctypedef public api class DM(Object) [             # <<<<<<<<<<<<<<
@@ -277,7 +277,7 @@ struct PyPetscDMObject {
 };
 typedef struct PyPetscDMObject PyPetscDMObject;
 
-/* "petsc4py/PETSc.pxd":192
+/* "petsc4py/PETSc.pxd":195
  *     cdef PetscDM dm
  * 
  * ctypedef public api class Partitioner(Object) [             # <<<<<<<<<<<<<<
@@ -327,6 +327,9 @@ __PYX_EXTERN_C DL_IMPORT(PyTypeObject) PyPetscPartitioner_Type;
 
 #endif /* !__PYX_HAVE_API__petsc4py__PETSc */
 
+/* WARNING: the interface of the module init function changed in CPython 3.5. */
+/* It now returns a PyModuleDef instance instead of a PyModule instance. */
+
 #if PY_MAJOR_VERSION < 3
 PyMODINIT_FUNC initPETSc(void);
 #else
diff --git a/src/include/petsc4py/petsc4py.PETSc_api.h b/src/include/petsc4py/petsc4py.PETSc_api.h
index 46b6589..b99af72 100644
--- a/src/include/petsc4py/petsc4py.PETSc_api.h
+++ b/src/include/petsc4py/petsc4py.PETSc_api.h
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.24 */
+/* Generated by Cython 0.27.1 */
 
 #ifndef __PYX_HAVE_API__petsc4py__PETSc
 #define __PYX_HAVE_API__petsc4py__PETSc
diff --git a/src/include/petsc4py/petsc4py.i b/src/include/petsc4py/petsc4py.i
index ef90150..58e2781 100644
--- a/src/include/petsc4py/petsc4py.i
+++ b/src/include/petsc4py/petsc4py.i
@@ -72,12 +72,12 @@ Py##Pkg##_ChkErrQ($1); %set_output(VOID_Object);
 
 /* PetscInt */
 /* -------- */
-%fragment(SWIG_From_frag(Petsc64bitInt),"header",
+%fragment(SWIG_From_frag(PetscInt64),"header",
           fragment=SWIG_From_frag(long long),
           fragment=SWIG_From_frag(long))
 {
 SWIGINTERN SWIG_Object
-SWIG_From_dec(Petsc64bitInt)(Petsc64bitInt val) {
+SWIG_From_dec(PetscInt64)(PetscInt64 val) {
 %#if PETSC_SIZEOF_LONG == 8
   return SWIG_From(long)(%numeric_cast(val,long));
 %#else
@@ -85,37 +85,37 @@ SWIG_From_dec(Petsc64bitInt)(Petsc64bitInt val) {
 %#endif
 }
 }
-%fragment(SWIG_AsVal_frag(Petsc64bitInt),"header",
+%fragment(SWIG_AsVal_frag(PetscInt64),"header",
           fragment=SWIG_AsVal_frag(long long),
           fragment=SWIG_AsVal_frag(long))
 {
 SWIGINTERN int
-SWIG_AsVal_dec(Petsc64bitInt)(SWIG_Object obj, Petsc64bitInt *val) {
+SWIG_AsVal_dec(PetscInt64)(SWIG_Object obj, PetscInt64 *val) {
 %#if PETSC_SIZEOF_LONG == 8
   long v; int res = SWIG_AsVal(long)(obj, &v);
 %#else
   long long v; int res = SWIG_AsVal(long long)(obj, &v);
 %#endif
-  if (SWIG_IsOK(res) && val) if (val) *val = %numeric_cast(v,Petsc64bitInt);
+  if (SWIG_IsOK(res) && val) if (val) *val = %numeric_cast(v,PetscInt64);
   return res;
 }
 }
 %fragment(SWIG_From_frag(PetscInt),"header",
-          fragment=SWIG_From_frag(Petsc64bitInt),
+          fragment=SWIG_From_frag(PetscInt64),
           fragment=SWIG_From_frag(int))
 {
 %#if defined(PETSC_USE_64BIT_INDICES)
-%define_as(SWIG_From(PetscInt), SWIG_From(Petsc64bitInt))
+%define_as(SWIG_From(PetscInt), SWIG_From(PetscInt64))
 %#else
 %define_as(SWIG_From(PetscInt), SWIG_From(int))
 %#endif
 }
 %fragment(SWIG_AsVal_frag(PetscInt),"header",
-          fragment=SWIG_AsVal_frag(Petsc64bitInt),
+          fragment=SWIG_AsVal_frag(PetscInt64),
           fragment=SWIG_AsVal_frag(int))
 {
 %#if defined(PETSC_USE_64BIT_INDICES)
-%define_as(SWIG_AsVal(PetscInt), SWIG_AsVal(Petsc64bitInt))
+%define_as(SWIG_AsVal(PetscInt), SWIG_AsVal(PetscInt64))
 %#else
 %define_as(SWIG_AsVal(PetscInt), SWIG_AsVal(int))
 %#endif
diff --git a/src/lib/__init__.py b/src/lib/__init__.py
index 19e4c15..7e02763 100644
--- a/src/lib/__init__.py
+++ b/src/lib/__init__.py
@@ -60,8 +60,8 @@ def Import(pkg, name, path, arch):
         return module
     # import extension module from 'path/arch' directory
     pathlist = [os.path.join(path, arch)]
-    fo, fn, stuff = imp.find_module(name, pathlist)
-    module = imp.load_module(fullname, fo, fn, stuff)
+    f, fn, info = imp.find_module(name, pathlist)
+    with f: module = imp.load_module(fullname, f, fn, info)
     module.__arch__ = arch # save arch value
     setattr(sys.modules[pkg], name, module)
     return module
diff --git a/src/libpetsc4py/custom.h b/src/libpetsc4py/custom.h
index 93e228d..974ec99 100644
--- a/src/libpetsc4py/custom.h
+++ b/src/libpetsc4py/custom.h
@@ -5,12 +5,8 @@
 #include "petsc/private/snesimpl.h"
 #include "petsc/private/tsimpl.h"
 
-EXTERN_C_BEGIN
-extern PetscErrorCode (*PetscPythonMonitorSet_C)(PetscObject,const char*);
-EXTERN_C_END
+PETSC_EXTERN PetscErrorCode (*PetscPythonMonitorSet_C)(PetscObject,const char*);
 
-#undef __FUNCT__
-#define __FUNCT__ "KSPLogHistory"
 PETSC_STATIC_INLINE
 PetscErrorCode KSPLogHistory(KSP ksp,PetscReal rnorm)
 {
@@ -21,8 +17,6 @@ PetscErrorCode KSPLogHistory(KSP ksp,PetscReal rnorm)
   PetscFunctionReturn(0);
 }
 
-#undef __FUNCT__
-#define __FUNCT__ "SNESLogHistory"
 PETSC_STATIC_INLINE
 PetscErrorCode SNESLogHistory(SNES snes,PetscReal rnorm,PetscInt lits)
 {
@@ -33,8 +27,6 @@ PetscErrorCode SNESLogHistory(SNES snes,PetscReal rnorm,PetscInt lits)
   PetscFunctionReturn(0);
 }
 
-#undef __FUNCT__
-#define __FUNCT__ "KSPConverged"
 PETSC_STATIC_INLINE
 PetscErrorCode KSPConverged(KSP ksp, 
                             PetscInt iter,PetscReal rnorm,
@@ -60,8 +52,6 @@ PetscErrorCode KSPConverged(KSP ksp,
   PetscFunctionReturn(0);
 }
 
-#undef __FUNCT__
-#define __FUNCT__ "SNESConverged"
 PETSC_STATIC_INLINE
 PetscErrorCode SNESConverged(SNES snes,
                              PetscInt iter,PetscReal xnorm,PetscReal ynorm,PetscReal fnorm,
@@ -96,6 +86,8 @@ PetscErrorCode SNESConverged(SNES snes,
 #if PY_MAJOR_VERSION < 3
 PyMODINIT_FUNC initlibpetsc4py(void);
 #else
+#undef  CYTHON_PEP489_MULTI_PHASE_INIT
+#define CYTHON_PEP489_MULTI_PHASE_INIT 0
 PyMODINIT_FUNC PyInit_libpetsc4py(void);
 static void initlibpetsc4py(void)
 {
@@ -108,6 +100,3 @@ static void initlibpetsc4py(void)
   Py_DECREF(m);
 }
 #endif
-
-#undef  __FUNCT__
-#define __FUNCT__ "<libpetsc4py>"
diff --git a/src/libpetsc4py/libpetsc4py.c b/src/libpetsc4py/libpetsc4py.c
index acbe5f9..08d7909 100644
--- a/src/libpetsc4py/libpetsc4py.c
+++ b/src/libpetsc4py/libpetsc4py.c
@@ -1,13 +1,14 @@
-/* Generated by Cython 0.24 */
+/* Generated by Cython 0.27.1 */
 
 #define PY_SSIZE_T_CLEAN
 #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+.
+#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000)
+    #error Cython requires Python 2.6+ or Python 3.3+.
 #else
-#define CYTHON_ABI "0_24"
+#define CYTHON_ABI "0_27_1"
+#define CYTHON_FUTURE_DIVISION 0
 #include <stddef.h>
 #ifndef offsetof
   #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
@@ -29,6 +30,12 @@
 #ifndef DL_EXPORT
   #define DL_EXPORT(t) t
 #endif
+#define __PYX_COMMA ,
+#ifndef HAVE_LONG_LONG
+  #if PY_VERSION_HEX >= 0x02070000
+    #define HAVE_LONG_LONG
+  #endif
+#endif
 #ifndef PY_LONG_LONG
   #define PY_LONG_LONG LONG_LONG
 #endif
@@ -37,13 +44,138 @@
 #endif
 #ifdef PYPY_VERSION
   #define CYTHON_COMPILING_IN_PYPY 1
+  #define CYTHON_COMPILING_IN_PYSTON 0
+  #define CYTHON_COMPILING_IN_CPYTHON 0
+  #undef CYTHON_USE_TYPE_SLOTS
+  #define CYTHON_USE_TYPE_SLOTS 0
+  #undef CYTHON_USE_PYTYPE_LOOKUP
+  #define CYTHON_USE_PYTYPE_LOOKUP 0
+  #if PY_VERSION_HEX < 0x03050000
+    #undef CYTHON_USE_ASYNC_SLOTS
+    #define CYTHON_USE_ASYNC_SLOTS 0
+  #elif !defined(CYTHON_USE_ASYNC_SLOTS)
+    #define CYTHON_USE_ASYNC_SLOTS 1
+  #endif
+  #undef CYTHON_USE_PYLIST_INTERNALS
+  #define CYTHON_USE_PYLIST_INTERNALS 0
+  #undef CYTHON_USE_UNICODE_INTERNALS
+  #define CYTHON_USE_UNICODE_INTERNALS 0
+  #undef CYTHON_USE_UNICODE_WRITER
+  #define CYTHON_USE_UNICODE_WRITER 0
+  #undef CYTHON_USE_PYLONG_INTERNALS
+  #define CYTHON_USE_PYLONG_INTERNALS 0
+  #undef CYTHON_AVOID_BORROWED_REFS
+  #define CYTHON_AVOID_BORROWED_REFS 1
+  #undef CYTHON_ASSUME_SAFE_MACROS
+  #define CYTHON_ASSUME_SAFE_MACROS 0
+  #undef CYTHON_UNPACK_METHODS
+  #define CYTHON_UNPACK_METHODS 0
+  #undef CYTHON_FAST_THREAD_STATE
+  #define CYTHON_FAST_THREAD_STATE 0
+  #undef CYTHON_FAST_PYCALL
+  #define CYTHON_FAST_PYCALL 0
+  #undef CYTHON_PEP489_MULTI_PHASE_INIT
+  #define CYTHON_PEP489_MULTI_PHASE_INIT 0
+  #undef CYTHON_USE_TP_FINALIZE
+  #define CYTHON_USE_TP_FINALIZE 0
+#elif defined(PYSTON_VERSION)
+  #define CYTHON_COMPILING_IN_PYPY 0
+  #define CYTHON_COMPILING_IN_PYSTON 1
   #define CYTHON_COMPILING_IN_CPYTHON 0
+  #ifndef CYTHON_USE_TYPE_SLOTS
+    #define CYTHON_USE_TYPE_SLOTS 1
+  #endif
+  #undef CYTHON_USE_PYTYPE_LOOKUP
+  #define CYTHON_USE_PYTYPE_LOOKUP 0
+  #undef CYTHON_USE_ASYNC_SLOTS
+  #define CYTHON_USE_ASYNC_SLOTS 0
+  #undef CYTHON_USE_PYLIST_INTERNALS
+  #define CYTHON_USE_PYLIST_INTERNALS 0
+  #ifndef CYTHON_USE_UNICODE_INTERNALS
+    #define CYTHON_USE_UNICODE_INTERNALS 1
+  #endif
+  #undef CYTHON_USE_UNICODE_WRITER
+  #define CYTHON_USE_UNICODE_WRITER 0
+  #undef CYTHON_USE_PYLONG_INTERNALS
+  #define CYTHON_USE_PYLONG_INTERNALS 0
+  #ifndef CYTHON_AVOID_BORROWED_REFS
+    #define CYTHON_AVOID_BORROWED_REFS 0
+  #endif
+  #ifndef CYTHON_ASSUME_SAFE_MACROS
+    #define CYTHON_ASSUME_SAFE_MACROS 1
+  #endif
+  #ifndef CYTHON_UNPACK_METHODS
+    #define CYTHON_UNPACK_METHODS 1
+  #endif
+  #undef CYTHON_FAST_THREAD_STATE
+  #define CYTHON_FAST_THREAD_STATE 0
+  #undef CYTHON_FAST_PYCALL
+  #define CYTHON_FAST_PYCALL 0
+  #undef CYTHON_PEP489_MULTI_PHASE_INIT
+  #define CYTHON_PEP489_MULTI_PHASE_INIT 0
+  #undef CYTHON_USE_TP_FINALIZE
+  #define CYTHON_USE_TP_FINALIZE 0
 #else
   #define CYTHON_COMPILING_IN_PYPY 0
+  #define CYTHON_COMPILING_IN_PYSTON 0
   #define CYTHON_COMPILING_IN_CPYTHON 1
+  #ifndef CYTHON_USE_TYPE_SLOTS
+    #define CYTHON_USE_TYPE_SLOTS 1
+  #endif
+  #if PY_VERSION_HEX < 0x02070000
+    #undef CYTHON_USE_PYTYPE_LOOKUP
+    #define CYTHON_USE_PYTYPE_LOOKUP 0
+  #elif !defined(CYTHON_USE_PYTYPE_LOOKUP)
+    #define CYTHON_USE_PYTYPE_LOOKUP 1
+  #endif
+  #if PY_MAJOR_VERSION < 3
+    #undef CYTHON_USE_ASYNC_SLOTS
+    #define CYTHON_USE_ASYNC_SLOTS 0
+  #elif !defined(CYTHON_USE_ASYNC_SLOTS)
+    #define CYTHON_USE_ASYNC_SLOTS 1
+  #endif
+  #if PY_VERSION_HEX < 0x02070000
+    #undef CYTHON_USE_PYLONG_INTERNALS
+    #define CYTHON_USE_PYLONG_INTERNALS 0
+  #elif !defined(CYTHON_USE_PYLONG_INTERNALS)
+    #define CYTHON_USE_PYLONG_INTERNALS 1
+  #endif
+  #ifndef CYTHON_USE_PYLIST_INTERNALS
+    #define CYTHON_USE_PYLIST_INTERNALS 1
+  #endif
+  #ifndef CYTHON_USE_UNICODE_INTERNALS
+    #define CYTHON_USE_UNICODE_INTERNALS 1
+  #endif
+  #if PY_VERSION_HEX < 0x030300F0
+    #undef CYTHON_USE_UNICODE_WRITER
+    #define CYTHON_USE_UNICODE_WRITER 0
+  #elif !defined(CYTHON_USE_UNICODE_WRITER)
+    #define CYTHON_USE_UNICODE_WRITER 1
+  #endif
+  #ifndef CYTHON_AVOID_BORROWED_REFS
+    #define CYTHON_AVOID_BORROWED_REFS 0
+  #endif
+  #ifndef CYTHON_ASSUME_SAFE_MACROS
+    #define CYTHON_ASSUME_SAFE_MACROS 1
+  #endif
+  #ifndef CYTHON_UNPACK_METHODS
+    #define CYTHON_UNPACK_METHODS 1
+  #endif
+  #ifndef CYTHON_FAST_THREAD_STATE
+    #define CYTHON_FAST_THREAD_STATE 1
+  #endif
+  #ifndef CYTHON_FAST_PYCALL
+    #define CYTHON_FAST_PYCALL 1
+  #endif
+  #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
+    #define CYTHON_PEP489_MULTI_PHASE_INIT (0 && PY_VERSION_HEX >= 0x03050000)
+  #endif
+  #ifndef CYTHON_USE_TP_FINALIZE
+    #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1)
+  #endif
 #endif
-#if !defined(CYTHON_USE_PYLONG_INTERNALS) && CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x02070000
-  #define CYTHON_USE_PYLONG_INTERNALS 1
+#if !defined(CYTHON_FAST_PYCCALL)
+#define CYTHON_FAST_PYCCALL  (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1)
 #endif
 #if CYTHON_USE_PYLONG_INTERNALS
   #include "longintrepr.h"
@@ -79,24 +211,69 @@
 #ifndef Py_TPFLAGS_HAVE_FINALIZE
   #define Py_TPFLAGS_HAVE_FINALIZE 0
 #endif
+#if PY_VERSION_HEX < 0x030700A0 || !defined(METH_FASTCALL)
+  #ifndef METH_FASTCALL
+     #define METH_FASTCALL 0x80
+  #endif
+  typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject **args, Py_ssize_t nargs);
+  typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject **args,
+                                                          Py_ssize_t nargs, PyObject *kwnames);
+#else
+  #define __Pyx_PyCFunctionFast _PyCFunctionFast
+  #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords
+#endif
+#if CYTHON_FAST_PYCCALL
+#define __Pyx_PyFastCFunction_Check(func)\
+    ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS)))))
+#else
+#define __Pyx_PyFastCFunction_Check(func) 0
+#endif
+#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000
+  #define __Pyx_PyThreadState_Current PyThreadState_GET()
+#elif PY_VERSION_HEX >= 0x03060000
+  #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet()
+#elif PY_VERSION_HEX >= 0x03000000
+  #define __Pyx_PyThreadState_Current PyThreadState_GET()
+#else
+  #define __Pyx_PyThreadState_Current _PyThreadState_Current
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized)
+#define __Pyx_PyDict_NewPresized(n)  ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n))
+#else
+#define __Pyx_PyDict_NewPresized(n)  PyDict_New()
+#endif
+#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION
+  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
+  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
+#else
+  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_Divide(x,y)
+  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceDivide(x,y)
+#endif
 #if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
   #define CYTHON_PEP393_ENABLED 1
   #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_MAX_CHAR_VALUE(u)   PyUnicode_MAX_CHAR_VALUE(u)
   #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_WRITE(k, d, i, ch)  PyUnicode_WRITE(k, d, i, ch)
   #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 PyUnicode_1BYTE_KIND  1
+  #define PyUnicode_2BYTE_KIND  2
+  #define PyUnicode_4BYTE_KIND  4
   #define __Pyx_PyUnicode_READY(op)       (0)
   #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_SIZE(u)
   #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))
+  #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u)   ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111)
   #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_WRITE(k, d, i, ch)  (((void)(k)), ((Py_UNICODE*)d)[i] = ch)
   #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_SIZE(u))
 #endif
 #if CYTHON_COMPILING_IN_PYPY
@@ -110,6 +287,9 @@
 #if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains)
   #define PyUnicode_Contains(u, s)  PySequence_Contains(u, s)
 #endif
+#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check)
+  #define PyByteArray_Check(obj)  PyObject_TypeCheck(obj, &PyByteArray_Type)
+#endif
 #if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format)
   #define PyObject_Format(obj, fmt)  PyObject_CallMethod(obj, "__format__", "O", fmt)
 #endif
@@ -118,6 +298,13 @@
   #define PyObject_Free(p)     PyMem_Free(p)
   #define PyObject_Realloc(p)  PyMem_Realloc(p)
 #endif
+#if CYTHON_COMPILING_IN_PYSTON
+  #define __Pyx_PyCode_HasFreeVars(co)  PyCode_HasFreeVars(co)
+  #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno)
+#else
+  #define __Pyx_PyCode_HasFreeVars(co)  (PyCode_GetNumFree(co) > 0)
+  #define __Pyx_PyFrame_SetLineNumber(frame, lineno)  (frame)->f_lineno = (lineno)
+#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
@@ -145,7 +332,7 @@
 #ifndef PySet_CheckExact
   #define PySet_CheckExact(obj)        (Py_TYPE(obj) == &PySet_Type)
 #endif
-#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
+#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception)
 #if PY_MAJOR_VERSION >= 3
   #define PyIntObject                  PyLongObject
   #define PyInt_Type                   PyLong_Type
@@ -184,18 +371,28 @@
 #else
   #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass)
 #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))
+#ifndef __has_attribute
+  #define __has_attribute(x) 0
+#endif
+#ifndef __has_cpp_attribute
+  #define __has_cpp_attribute(x) 0
+#endif
+#if CYTHON_USE_ASYNC_SLOTS
+  #if PY_VERSION_HEX >= 0x030500B1
+    #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods
+    #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async)
+  #else
+    #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved))
+  #endif
 #else
-#define __Pyx_PyType_AsAsync(obj) NULL
+  #define __Pyx_PyType_AsAsync(obj) NULL
+#endif
+#ifndef __Pyx_PyAsyncMethodsStruct
+    typedef struct {
+        unaryfunc am_await;
+        unaryfunc am_aiter;
+        unaryfunc am_anext;
+    } __Pyx_PyAsyncMethodsStruct;
 #endif
 #ifndef CYTHON_RESTRICT
   #if defined(__GNUC__)
@@ -208,10 +405,68 @@ typedef struct {
     #define CYTHON_RESTRICT
   #endif
 #endif
+#ifndef CYTHON_UNUSED
+# if defined(__GNUC__)
+#   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
+#     define CYTHON_UNUSED __attribute__ ((__unused__))
+#   else
+#     define CYTHON_UNUSED
+#   endif
+# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
+#   define CYTHON_UNUSED __attribute__ ((__unused__))
+# else
+#   define CYTHON_UNUSED
+# endif
+#endif
+#ifndef CYTHON_MAYBE_UNUSED_VAR
+#  if defined(__cplusplus)
+     template<class T> void CYTHON_MAYBE_UNUSED_VAR( const T& ) { }
+#  else
+#    define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x)
+#  endif
+#endif
+#ifndef CYTHON_NCP_UNUSED
+# if CYTHON_COMPILING_IN_CPYTHON
+#  define CYTHON_NCP_UNUSED
+# else
+#  define CYTHON_NCP_UNUSED CYTHON_UNUSED
+# endif
+#endif
 #define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None)
+#ifdef _MSC_VER
+    #ifndef _MSC_STDINT_H_
+        #if _MSC_VER < 1300
+           typedef unsigned char     uint8_t;
+           typedef unsigned int      uint32_t;
+        #else
+           typedef unsigned __int8   uint8_t;
+           typedef unsigned __int32  uint32_t;
+        #endif
+    #endif
+#else
+   #include <stdint.h>
+#endif
+#ifndef CYTHON_FALLTHROUGH
+  #ifdef __cplusplus
+    #if __has_cpp_attribute(fallthrough)
+      #define CYTHON_FALLTHROUGH [[fallthrough]]
+    #elif __has_cpp_attribute(clang::fallthrough)
+      #define CYTHON_FALLTHROUGH [[clang::fallthrough]]
+    #endif
+  #endif
+  #ifndef CYTHON_FALLTHROUGH
+    #if __has_attribute(fallthrough) || (defined(__GNUC__) && defined(__attribute__))
+      #define CYTHON_FALLTHROUGH __attribute__((fallthrough))
+    #else
+      #define CYTHON_FALLTHROUGH
+    #endif
+  #endif
+#endif
 
 #ifndef CYTHON_INLINE
-  #if defined(__GNUC__)
+  #if defined(__clang__)
+    #define CYTHON_INLINE __inline__ __attribute__ ((__unused__))
+  #elif defined(__GNUC__)
     #define CYTHON_INLINE __inline__
   #elif defined(_MSC_VER)
     #define CYTHON_INLINE __inline
@@ -235,6 +490,11 @@ static CYTHON_INLINE float __PYX_NAN() {
   return value;
 }
 #endif
+#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL)
+#define __Pyx_truncl trunc
+#else
+#define __Pyx_truncl truncl
+#endif
 
 
 #define __PYX_ERR(f_index, lineno, Ln_error) \
@@ -242,14 +502,6 @@ static CYTHON_INLINE float __PYX_NAN() {
   __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)
-#else
-  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_Divide(x,y)
-  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceDivide(x,y)
-#endif
-
 #ifndef __PYX_EXTERN_C
   #ifdef __cplusplus
     #define __PYX_EXTERN_C extern "C"
@@ -267,30 +519,10 @@ static CYTHON_INLINE float __PYX_NAN() {
 #include <omp.h>
 #endif /* _OPENMP */
 
-#ifdef PYREX_WITHOUT_ASSERTIONS
+#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS)
 #define CYTHON_WITHOUT_ASSERTIONS
 #endif
 
-#ifndef CYTHON_UNUSED
-# if defined(__GNUC__)
-#   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
-#     define CYTHON_UNUSED __attribute__ ((__unused__))
-#   else
-#     define CYTHON_UNUSED
-#   endif
-# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
-#   define CYTHON_UNUSED __attribute__ ((__unused__))
-# else
-#   define CYTHON_UNUSED
-# endif
-#endif
-#ifndef CYTHON_NCP_UNUSED
-# if CYTHON_COMPILING_IN_CPYTHON
-#  define CYTHON_NCP_UNUSED
-# else
-#  define CYTHON_NCP_UNUSED CYTHON_UNUSED
-# endif
-#endif
 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;
 
@@ -318,8 +550,8 @@ typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* enc
     #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 (_MSC_VER)
+    #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value))
 #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
     #define __Pyx_sst_abs(value) llabs(value)
 #elif defined (__GNUC__)
@@ -327,8 +559,8 @@ typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* enc
 #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);
+static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*);
+static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length);
 #define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s))
 #define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l)
 #define __Pyx_PyBytes_FromString        PyBytes_FromString
@@ -341,23 +573,27 @@ static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*);
     #define __Pyx_PyStr_FromString        __Pyx_PyUnicode_FromString
     #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize
 #endif
-#define __Pyx_PyObject_AsSString(s)    ((signed char*) __Pyx_PyObject_AsString(s))
-#define __Pyx_PyObject_AsUString(s)    ((unsigned char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyBytes_AsWritableString(s)     ((char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyBytes_AsWritableSString(s)    ((signed char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyBytes_AsWritableUString(s)    ((unsigned char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyBytes_AsString(s)     ((const char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyBytes_AsSString(s)    ((const signed char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyBytes_AsUString(s)    ((const unsigned char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyObject_AsWritableString(s)    ((char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_AsWritableSString(s)    ((signed char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_AsWritableUString(s)    ((unsigned char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_AsSString(s)    ((const signed char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_AsUString(s)    ((const unsigned char*) __Pyx_PyObject_AsString(s))
 #define __Pyx_PyObject_FromCString(s)  __Pyx_PyObject_FromString((const char*)s)
 #define __Pyx_PyBytes_FromCString(s)   __Pyx_PyBytes_FromString((const char*)s)
 #define __Pyx_PyByteArray_FromCString(s)   __Pyx_PyByteArray_FromString((const char*)s)
 #define __Pyx_PyStr_FromCString(s)     __Pyx_PyStr_FromString((const char*)s)
 #define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s)
-#if PY_MAJOR_VERSION < 3
-static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u)
-{
+static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) {
     const Py_UNICODE *u_end = u;
     while (*u_end++) ;
     return (size_t)(u_end - u - 1);
 }
-#else
-#define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen
-#endif
 #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
@@ -366,9 +602,11 @@ static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u)
 #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_IntOrLong(PyObject* x);
+#define __Pyx_PySequence_Tuple(obj)\
+    (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj))
 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
+#if CYTHON_ASSUME_SAFE_MACROS
 #define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
 #else
 #define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
@@ -464,10 +702,12 @@ bad:
   #define likely(x)   (x)
   #define unlikely(x) (x)
 #endif /* __GNUC__ */
+static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; }
 
-static PyObject *__pyx_m;
+static PyObject *__pyx_m = NULL;
 static PyObject *__pyx_d;
 static PyObject *__pyx_b;
+static PyObject *__pyx_cython_runtime;
 static PyObject *__pyx_empty_tuple;
 static PyObject *__pyx_empty_bytes;
 static PyObject *__pyx_empty_unicode;
@@ -481,6 +721,18 @@ static const char *__pyx_f[] = {
   "libpetsc4py/libpetsc4py.pyx",
   "include/petsc4py/PETSc.pxd",
 };
+/* ForceInitThreads.proto */
+#ifndef __PYX_FORCE_INIT_THREADS
+  #define __PYX_FORCE_INIT_THREADS 0
+#endif
+
+/* NoFastGil.proto */
+#define __Pyx_PyGILState_Ensure PyGILState_Ensure
+#define __Pyx_PyGILState_Release PyGILState_Release
+#define __Pyx_FastGIL_Remember()
+#define __Pyx_FastGIL_Forget()
+#define __Pyx_FastGilFuncInit()
+
 
 /*--- Type declarations ---*/
 struct PyPetscCommObject;
@@ -510,7 +762,7 @@ struct __pyx_obj_11libpetsc4py__PyKSP;
 struct __pyx_obj_11libpetsc4py__PySNES;
 struct __pyx_obj_11libpetsc4py__PyTS;
 
-/* "petsc4py/PETSc.pxd":70
+/* "petsc4py/PETSc.pxd":73
  * # --------------------------------------------------------------------
  * 
  * ctypedef public api class Comm [             # <<<<<<<<<<<<<<
@@ -527,7 +779,7 @@ typedef struct PyPetscCommObject PyPetscCommObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscComm_Type;
 
-/* "petsc4py/PETSc.pxd":78
+/* "petsc4py/PETSc.pxd":81
  *     cdef object base
  * 
  * ctypedef public api class Object [             # <<<<<<<<<<<<<<
@@ -546,7 +798,7 @@ typedef struct PyPetscObjectObject PyPetscObjectObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscObject_Type;
 
-/* "petsc4py/PETSc.pxd":90
+/* "petsc4py/PETSc.pxd":93
  *     cdef object get_dict(self)
  * 
  * ctypedef public api class Viewer(Object) [             # <<<<<<<<<<<<<<
@@ -561,7 +813,7 @@ typedef struct PyPetscViewerObject PyPetscViewerObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscViewer_Type;
 
-/* "petsc4py/PETSc.pxd":96
+/* "petsc4py/PETSc.pxd":99
  *     cdef PetscViewer vwr
  * 
  * ctypedef public api class Random(Object) [             # <<<<<<<<<<<<<<
@@ -576,7 +828,7 @@ typedef struct PyPetscRandomObject PyPetscRandomObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscRandom_Type;
 
-/* "petsc4py/PETSc.pxd":102
+/* "petsc4py/PETSc.pxd":105
  *     cdef PetscRandom rnd
  * 
  * ctypedef public api class IS(Object) [             # <<<<<<<<<<<<<<
@@ -591,7 +843,7 @@ typedef struct PyPetscISObject PyPetscISObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscIS_Type;
 
-/* "petsc4py/PETSc.pxd":108
+/* "petsc4py/PETSc.pxd":111
  *     cdef PetscIS iset
  * 
  * ctypedef public api class LGMap(Object) [             # <<<<<<<<<<<<<<
@@ -606,7 +858,7 @@ typedef struct PyPetscLGMapObject PyPetscLGMapObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscLGMap_Type;
 
-/* "petsc4py/PETSc.pxd":114
+/* "petsc4py/PETSc.pxd":117
  *     cdef PetscLGMap lgm
  * 
  * ctypedef public api class SF(Object) [             # <<<<<<<<<<<<<<
@@ -621,7 +873,7 @@ typedef struct PyPetscSFObject PyPetscSFObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscSF_Type;
 
-/* "petsc4py/PETSc.pxd":120
+/* "petsc4py/PETSc.pxd":123
  *     cdef PetscSF sf
  * 
  * ctypedef public api class Vec(Object) [             # <<<<<<<<<<<<<<
@@ -636,7 +888,7 @@ typedef struct PyPetscVecObject PyPetscVecObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscVec_Type;
 
-/* "petsc4py/PETSc.pxd":126
+/* "petsc4py/PETSc.pxd":129
  *     cdef PetscVec vec
  * 
  * ctypedef public api class Scatter(Object) [             # <<<<<<<<<<<<<<
@@ -651,7 +903,7 @@ typedef struct PyPetscScatterObject PyPetscScatterObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscScatter_Type;
 
-/* "petsc4py/PETSc.pxd":132
+/* "petsc4py/PETSc.pxd":135
  *     cdef PetscScatter sct
  * 
  * ctypedef public api class Section(Object) [             # <<<<<<<<<<<<<<
@@ -666,7 +918,7 @@ typedef struct PyPetscSectionObject PyPetscSectionObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscSection_Type;
 
-/* "petsc4py/PETSc.pxd":138
+/* "petsc4py/PETSc.pxd":141
  *     cdef PetscSection sec
  * 
  * ctypedef public api class Mat(Object) [             # <<<<<<<<<<<<<<
@@ -681,7 +933,7 @@ typedef struct PyPetscMatObject PyPetscMatObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscMat_Type;
 
-/* "petsc4py/PETSc.pxd":144
+/* "petsc4py/PETSc.pxd":147
  *     cdef PetscMat mat
  * 
  * ctypedef public api class NullSpace(Object) [             # <<<<<<<<<<<<<<
@@ -696,7 +948,7 @@ typedef struct PyPetscNullSpaceObject PyPetscNullSpaceObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscNullSpace_Type;
 
-/* "petsc4py/PETSc.pxd":150
+/* "petsc4py/PETSc.pxd":153
  *     cdef PetscNullSpace nsp
  * 
  * ctypedef public api class PC(Object) [             # <<<<<<<<<<<<<<
@@ -711,7 +963,7 @@ typedef struct PyPetscPCObject PyPetscPCObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscPC_Type;
 
-/* "petsc4py/PETSc.pxd":156
+/* "petsc4py/PETSc.pxd":159
  *     cdef PetscPC pc
  * 
  * ctypedef public api class KSP(Object) [             # <<<<<<<<<<<<<<
@@ -726,7 +978,7 @@ typedef struct PyPetscKSPObject PyPetscKSPObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscKSP_Type;
 
-/* "petsc4py/PETSc.pxd":162
+/* "petsc4py/PETSc.pxd":165
  *     cdef PetscKSP ksp
  * 
  * ctypedef public api class SNES(Object) [             # <<<<<<<<<<<<<<
@@ -741,7 +993,7 @@ typedef struct PyPetscSNESObject PyPetscSNESObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscSNES_Type;
 
-/* "petsc4py/PETSc.pxd":168
+/* "petsc4py/PETSc.pxd":171
  *     cdef PetscSNES snes
  * 
  * ctypedef public api class TS(Object) [             # <<<<<<<<<<<<<<
@@ -756,7 +1008,7 @@ typedef struct PyPetscTSObject PyPetscTSObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscTS_Type;
 
-/* "petsc4py/PETSc.pxd":174
+/* "petsc4py/PETSc.pxd":177
  *     cdef PetscTS ts
  * 
  * ctypedef public api class TAO(Object) [             # <<<<<<<<<<<<<<
@@ -771,7 +1023,7 @@ typedef struct PyPetscTAOObject PyPetscTAOObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscTAO_Type;
 
-/* "petsc4py/PETSc.pxd":180
+/* "petsc4py/PETSc.pxd":183
  *     cdef PetscTAO tao
  * 
  * ctypedef public api class AO(Object) [             # <<<<<<<<<<<<<<
@@ -786,7 +1038,7 @@ typedef struct PyPetscAOObject PyPetscAOObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscAO_Type;
 
-/* "petsc4py/PETSc.pxd":186
+/* "petsc4py/PETSc.pxd":189
  *     cdef PetscAO ao
  * 
  * ctypedef public api class DM(Object) [             # <<<<<<<<<<<<<<
@@ -801,7 +1053,7 @@ typedef struct PyPetscDMObject PyPetscDMObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscDM_Type;
 
-/* "petsc4py/PETSc.pxd":192
+/* "petsc4py/PETSc.pxd":195
  *     cdef PetscDM dm
  * 
  * ctypedef public api class Partitioner(Object) [             # <<<<<<<<<<<<<<
@@ -816,7 +1068,7 @@ typedef struct PyPetscPartitionerObject PyPetscPartitionerObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscPartitioner_Type;
 
-/* "libpetsc4py.pyx":284
+/* "libpetsc4py.pyx":286
  * 
  * @cython.internal
  * cdef class _PyObj:             # <<<<<<<<<<<<<<
@@ -831,7 +1083,7 @@ struct __pyx_obj_11libpetsc4py__PyObj {
 };
 
 
-/* "libpetsc4py.pyx":512
+/* "libpetsc4py.pyx":514
  * 
  * @cython.internal
  * cdef class _PyMat(_PyObj): pass             # <<<<<<<<<<<<<<
@@ -843,7 +1095,7 @@ struct __pyx_obj_11libpetsc4py__PyMat {
 };
 
 
-/* "libpetsc4py.pyx":1152
+/* "libpetsc4py.pyx":1154
  * 
  * @cython.internal
  * cdef class _PyPC(_PyObj): pass             # <<<<<<<<<<<<<<
@@ -855,7 +1107,7 @@ struct __pyx_obj_11libpetsc4py__PyPC {
 };
 
 
-/* "libpetsc4py.pyx":1427
+/* "libpetsc4py.pyx":1430
  * 
  * @cython.internal
  * cdef class _PyKSP(_PyObj): pass             # <<<<<<<<<<<<<<
@@ -867,7 +1119,7 @@ struct __pyx_obj_11libpetsc4py__PyKSP {
 };
 
 
-/* "libpetsc4py.pyx":1782
+/* "libpetsc4py.pyx":1792
  * 
  * @cython.internal
  * cdef class _PySNES(_PyObj): pass             # <<<<<<<<<<<<<<
@@ -879,7 +1131,7 @@ struct __pyx_obj_11libpetsc4py__PySNES {
 };
 
 
-/* "libpetsc4py.pyx":2117
+/* "libpetsc4py.pyx":2132
  * 
  * @cython.internal
  * cdef class _PyTS(_PyObj): pass             # <<<<<<<<<<<<<<
@@ -893,7 +1145,7 @@ struct __pyx_obj_11libpetsc4py__PyTS {
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscObject_Type;
 
-/* "petsc4py/PETSc.pxd":78
+/* "petsc4py/PETSc.pxd":81
  *     cdef object base
  * 
  * ctypedef public api class Object [             # <<<<<<<<<<<<<<
@@ -910,7 +1162,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_Object *__pyx_vtabptr_8petsc4py_
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscViewer_Type;
 
-/* "petsc4py/PETSc.pxd":90
+/* "petsc4py/PETSc.pxd":93
  *     cdef object get_dict(self)
  * 
  * ctypedef public api class Viewer(Object) [             # <<<<<<<<<<<<<<
@@ -925,7 +1177,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_Viewer *__pyx_vtabptr_8petsc4py_
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscRandom_Type;
 
-/* "petsc4py/PETSc.pxd":96
+/* "petsc4py/PETSc.pxd":99
  *     cdef PetscViewer vwr
  * 
  * ctypedef public api class Random(Object) [             # <<<<<<<<<<<<<<
@@ -940,7 +1192,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_Random *__pyx_vtabptr_8petsc4py_
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscIS_Type;
 
-/* "petsc4py/PETSc.pxd":102
+/* "petsc4py/PETSc.pxd":105
  *     cdef PetscRandom rnd
  * 
  * ctypedef public api class IS(Object) [             # <<<<<<<<<<<<<<
@@ -955,7 +1207,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_IS *__pyx_vtabptr_8petsc4py_5PET
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscLGMap_Type;
 
-/* "petsc4py/PETSc.pxd":108
+/* "petsc4py/PETSc.pxd":111
  *     cdef PetscIS iset
  * 
  * ctypedef public api class LGMap(Object) [             # <<<<<<<<<<<<<<
@@ -970,7 +1222,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_LGMap *__pyx_vtabptr_8petsc4py_5
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscSF_Type;
 
-/* "petsc4py/PETSc.pxd":114
+/* "petsc4py/PETSc.pxd":117
  *     cdef PetscLGMap lgm
  * 
  * ctypedef public api class SF(Object) [             # <<<<<<<<<<<<<<
@@ -985,7 +1237,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_SF *__pyx_vtabptr_8petsc4py_5PET
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscVec_Type;
 
-/* "petsc4py/PETSc.pxd":120
+/* "petsc4py/PETSc.pxd":123
  *     cdef PetscSF sf
  * 
  * ctypedef public api class Vec(Object) [             # <<<<<<<<<<<<<<
@@ -1000,7 +1252,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_Vec *__pyx_vtabptr_8petsc4py_5PE
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscScatter_Type;
 
-/* "petsc4py/PETSc.pxd":126
+/* "petsc4py/PETSc.pxd":129
  *     cdef PetscVec vec
  * 
  * ctypedef public api class Scatter(Object) [             # <<<<<<<<<<<<<<
@@ -1015,7 +1267,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_Scatter *__pyx_vtabptr_8petsc4py
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscSection_Type;
 
-/* "petsc4py/PETSc.pxd":132
+/* "petsc4py/PETSc.pxd":135
  *     cdef PetscScatter sct
  * 
  * ctypedef public api class Section(Object) [             # <<<<<<<<<<<<<<
@@ -1030,7 +1282,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_Section *__pyx_vtabptr_8petsc4py
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscMat_Type;
 
-/* "petsc4py/PETSc.pxd":138
+/* "petsc4py/PETSc.pxd":141
  *     cdef PetscSection sec
  * 
  * ctypedef public api class Mat(Object) [             # <<<<<<<<<<<<<<
@@ -1045,7 +1297,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_Mat *__pyx_vtabptr_8petsc4py_5PE
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscNullSpace_Type;
 
-/* "petsc4py/PETSc.pxd":144
+/* "petsc4py/PETSc.pxd":147
  *     cdef PetscMat mat
  * 
  * ctypedef public api class NullSpace(Object) [             # <<<<<<<<<<<<<<
@@ -1060,7 +1312,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_NullSpace *__pyx_vtabptr_8petsc4
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscPC_Type;
 
-/* "petsc4py/PETSc.pxd":150
+/* "petsc4py/PETSc.pxd":153
  *     cdef PetscNullSpace nsp
  * 
  * ctypedef public api class PC(Object) [             # <<<<<<<<<<<<<<
@@ -1075,7 +1327,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_PC *__pyx_vtabptr_8petsc4py_5PET
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscKSP_Type;
 
-/* "petsc4py/PETSc.pxd":156
+/* "petsc4py/PETSc.pxd":159
  *     cdef PetscPC pc
  * 
  * ctypedef public api class KSP(Object) [             # <<<<<<<<<<<<<<
@@ -1090,7 +1342,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_KSP *__pyx_vtabptr_8petsc4py_5PE
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscSNES_Type;
 
-/* "petsc4py/PETSc.pxd":162
+/* "petsc4py/PETSc.pxd":165
  *     cdef PetscKSP ksp
  * 
  * ctypedef public api class SNES(Object) [             # <<<<<<<<<<<<<<
@@ -1105,7 +1357,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *__pyx_vtabptr_8petsc4py_5P
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscTS_Type;
 
-/* "petsc4py/PETSc.pxd":168
+/* "petsc4py/PETSc.pxd":171
  *     cdef PetscSNES snes
  * 
  * ctypedef public api class TS(Object) [             # <<<<<<<<<<<<<<
@@ -1120,7 +1372,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *__pyx_vtabptr_8petsc4py_5PET
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscTAO_Type;
 
-/* "petsc4py/PETSc.pxd":174
+/* "petsc4py/PETSc.pxd":177
  *     cdef PetscTS ts
  * 
  * ctypedef public api class TAO(Object) [             # <<<<<<<<<<<<<<
@@ -1135,7 +1387,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_TAO *__pyx_vtabptr_8petsc4py_5PE
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscAO_Type;
 
-/* "petsc4py/PETSc.pxd":180
+/* "petsc4py/PETSc.pxd":183
  *     cdef PetscTAO tao
  * 
  * ctypedef public api class AO(Object) [             # <<<<<<<<<<<<<<
@@ -1150,7 +1402,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_AO *__pyx_vtabptr_8petsc4py_5PET
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscDM_Type;
 
-/* "petsc4py/PETSc.pxd":186
+/* "petsc4py/PETSc.pxd":189
  *     cdef PetscAO ao
  * 
  * ctypedef public api class DM(Object) [             # <<<<<<<<<<<<<<
@@ -1165,7 +1417,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *__pyx_vtabptr_8petsc4py_5PET
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscPartitioner_Type;
 
-/* "petsc4py/PETSc.pxd":192
+/* "petsc4py/PETSc.pxd":195
  *     cdef PetscDM dm
  * 
  * ctypedef public api class Partitioner(Object) [             # <<<<<<<<<<<<<<
@@ -1179,7 +1431,7 @@ struct __pyx_vtabstruct_8petsc4py_5PETSc_Partitioner {
 static struct __pyx_vtabstruct_8petsc4py_5PETSc_Partitioner *__pyx_vtabptr_8petsc4py_5PETSc_Partitioner;
 
 
-/* "libpetsc4py.pyx":284
+/* "libpetsc4py.pyx":286
  * 
  * @cython.internal
  * cdef class _PyObj:             # <<<<<<<<<<<<<<
@@ -1196,7 +1448,7 @@ struct __pyx_vtabstruct_11libpetsc4py__PyObj {
 static struct __pyx_vtabstruct_11libpetsc4py__PyObj *__pyx_vtabptr_11libpetsc4py__PyObj;
 
 
-/* "libpetsc4py.pyx":512
+/* "libpetsc4py.pyx":514
  * 
  * @cython.internal
  * cdef class _PyMat(_PyObj): pass             # <<<<<<<<<<<<<<
@@ -1210,7 +1462,7 @@ struct __pyx_vtabstruct_11libpetsc4py__PyMat {
 static struct __pyx_vtabstruct_11libpetsc4py__PyMat *__pyx_vtabptr_11libpetsc4py__PyMat;
 
 
-/* "libpetsc4py.pyx":1152
+/* "libpetsc4py.pyx":1154
  * 
  * @cython.internal
  * cdef class _PyPC(_PyObj): pass             # <<<<<<<<<<<<<<
@@ -1224,7 +1476,7 @@ struct __pyx_vtabstruct_11libpetsc4py__PyPC {
 static struct __pyx_vtabstruct_11libpetsc4py__PyPC *__pyx_vtabptr_11libpetsc4py__PyPC;
 
 
-/* "libpetsc4py.pyx":1427
+/* "libpetsc4py.pyx":1430
  * 
  * @cython.internal
  * cdef class _PyKSP(_PyObj): pass             # <<<<<<<<<<<<<<
@@ -1238,7 +1490,7 @@ struct __pyx_vtabstruct_11libpetsc4py__PyKSP {
 static struct __pyx_vtabstruct_11libpetsc4py__PyKSP *__pyx_vtabptr_11libpetsc4py__PyKSP;
 
 
-/* "libpetsc4py.pyx":1782
+/* "libpetsc4py.pyx":1792
  * 
  * @cython.internal
  * cdef class _PySNES(_PyObj): pass             # <<<<<<<<<<<<<<
@@ -1252,7 +1504,7 @@ struct __pyx_vtabstruct_11libpetsc4py__PySNES {
 static struct __pyx_vtabstruct_11libpetsc4py__PySNES *__pyx_vtabptr_11libpetsc4py__PySNES;
 
 
-/* "libpetsc4py.pyx":2117
+/* "libpetsc4py.pyx":2132
  * 
  * @cython.internal
  * cdef class _PyTS(_PyObj): pass             # <<<<<<<<<<<<<<
@@ -1330,7 +1582,7 @@ static struct __pyx_vtabstruct_11libpetsc4py__PyTS *__pyx_vtabptr_11libpetsc4py_
 #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
+#if CYTHON_USE_TYPE_SLOTS
 static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) {
     PyTypeObject* tp = Py_TYPE(obj);
     if (likely(tp->tp_getattro))
@@ -1348,29 +1600,34 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject
 /* GetBuiltinName.proto */
 static PyObject *__Pyx_GetBuiltinName(PyObject *name);
 
-/* ForceInitThreads.proto */
-#ifndef __PYX_FORCE_INIT_THREADS
-  #define __PYX_FORCE_INIT_THREADS 0
-#endif
-
 /* PyThreadStateGet.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_FAST_THREAD_STATE
 #define __Pyx_PyThreadState_declare  PyThreadState *__pyx_tstate;
-#define __Pyx_PyThreadState_assign  __pyx_tstate = PyThreadState_GET();
+#define __Pyx_PyThreadState_assign  __pyx_tstate = __Pyx_PyThreadState_Current;
+#define __Pyx_PyErr_Occurred()  __pyx_tstate->curexc_type
 #else
 #define __Pyx_PyThreadState_declare
 #define __Pyx_PyThreadState_assign
+#define __Pyx_PyErr_Occurred()  PyErr_Occurred()
 #endif
 
 /* PyErrFetchRestore.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_FAST_THREAD_STATE
+#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL)
 #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);
+#if CYTHON_COMPILING_IN_CPYTHON
+#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL))
+#else
+#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)
+#endif
 #else
+#define __Pyx_PyErr_Clear() PyErr_Clear()
+#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)
 #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)
@@ -1391,6 +1648,20 @@ static CYTHON_INLINE PyObject* __Pyx_tp_new_kwargs(PyObject* type_obj, PyObject*
 /* ExtTypeTest.proto */
 static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type);
 
+/* decode_c_string_utf16.proto */
+static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16(const char *s, Py_ssize_t size, const char *errors) {
+    int byteorder = 0;
+    return PyUnicode_DecodeUTF16(s, size, errors, &byteorder);
+}
+static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16LE(const char *s, Py_ssize_t size, const char *errors) {
+    int byteorder = -1;
+    return PyUnicode_DecodeUTF16(s, size, errors, &byteorder);
+}
+static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16BE(const char *s, Py_ssize_t size, const char *errors) {
+    int byteorder = 1;
+    return PyUnicode_DecodeUTF16(s, size, errors, &byteorder);
+}
+
 /* 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,
@@ -1454,7 +1725,7 @@ static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) {
 #endif
 
 /* PyObjectSetAttrStr.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_USE_TYPE_SLOTS
 #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) {
     PyTypeObject* tp = Py_TYPE(obj);
@@ -1471,6 +1742,24 @@ static CYTHON_INLINE int __Pyx_PyObject_SetAttrStr(PyObject* obj, PyObject* attr
 #define __Pyx_PyObject_SetAttrStr(o,n,v) PyObject_SetAttr(o,n,v)
 #endif
 
+/* PyCFunctionFastCall.proto */
+#if CYTHON_FAST_PYCCALL
+static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs);
+#else
+#define __Pyx_PyCFunction_FastCall(func, args, nargs)  (assert(0), NULL)
+#endif
+
+/* PyFunctionFastCall.proto */
+#if CYTHON_FAST_PYCALL
+#define __Pyx_PyFunction_FastCall(func, args, nargs)\
+    __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL)
+#if 1 || PY_VERSION_HEX < 0x030600B1
+static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, int nargs, PyObject *kwargs);
+#else
+#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs)
+#endif
+#endif
+
 /* PyObjectCallMethO.proto */
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg);
@@ -1487,7 +1776,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func);
 #endif
 
 /* GetException.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_FAST_THREAD_STATE
 #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
@@ -1495,7 +1784,7 @@ static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb);
 #endif
 
 /* SwapException.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_FAST_THREAD_STATE
 #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
@@ -1503,7 +1792,7 @@ static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value,
 #endif
 
 /* SaveResetException.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_FAST_THREAD_STATE
 #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)
@@ -1513,6 +1802,14 @@ static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject
 #define __Pyx_ExceptionReset(type, value, tb)  PyErr_SetExcInfo(type, value, tb)
 #endif
 
+/* PyErrExceptionMatches.proto */
+#if CYTHON_FAST_THREAD_STATE
+#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
+
 /* GetAttr.proto */
 static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *);
 
@@ -1525,6 +1822,9 @@ static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* s
     return unlikely(result < 0) ? result : (result == (eq == Py_EQ));
 }
 
+/* HasAttr.proto */
+static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *);
+
 /* SetVTable.proto */
 static int __Pyx_SetVtable(PyObject *dict, void *vtable);
 
@@ -1553,6 +1853,9 @@ static PyObject *__Pyx_ImportModule(const char *name);
 static void __pyx_module_cleanup(PyObject *self);
 static int __Pyx_RegisterCleanup(void);
 
+/* CLineInTraceback.proto */
+static int __Pyx_CLineForTraceback(int c_line);
+
 /* CodeObjectCache.proto */
 typedef struct {
     PyCodeObject* code_object;
@@ -1586,9 +1889,6 @@ 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 */
@@ -1606,6 +1906,18 @@ static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *);
 /* CIntFromPy.proto */
 static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *);
 
+/* FastTypeChecks.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type)
+static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b);
+static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type);
+static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2);
+#else
+#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
+#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type)
+#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2))
+#endif
+
 /* CheckBinaryVersion.proto */
 static int __Pyx_check_binary_version(void);
 
@@ -1660,7 +1972,7 @@ 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;
-__PYX_EXTERN_C DL_EXPORT(int) import_libpetsc4py(void); /*proto*/
+__PYX_EXTERN_C int import_libpetsc4py(void); /*proto*/
 static CYTHON_INLINE PyObject *__pyx_f_11libpetsc4py_toInt(PetscInt); /*proto*/
 static CYTHON_INLINE PetscInt __pyx_f_11libpetsc4py_asInt(PyObject *); /*proto*/
 static CYTHON_INLINE PyObject *__pyx_f_11libpetsc4py_toReal(PetscReal); /*proto*/
@@ -1692,8 +2004,8 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *); /*proto*/
 static PyObject *__pyx_f_11libpetsc4py_createcontext(char *); /*proto*/
 static int __pyx_f_11libpetsc4py_viewcontext(struct __pyx_obj_11libpetsc4py__PyObj *, PetscViewer); /*proto*/
 static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyMat *__pyx_f_11libpetsc4py_PyMat(Mat); /*proto*/
-__PYX_EXTERN_C DL_EXPORT(PetscErrorCode) MatPythonGetContext(Mat, void **); /*proto*/
-__PYX_EXTERN_C DL_EXPORT(PetscErrorCode) MatPythonSetContext(Mat, void *); /*proto*/
+__PYX_EXTERN_C PetscErrorCode MatPythonGetContext(Mat, void **); /*proto*/
+__PYX_EXTERN_C PetscErrorCode MatPythonSetContext(Mat, void *); /*proto*/
 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*/
@@ -1702,7 +2014,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatView_Python(Mat, PetscViewer); /*
 static PetscErrorCode __pyx_f_11libpetsc4py_MatDuplicate_Python(Mat, MatDuplicateOption, Mat *); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_MatCopy_Python(Mat, Mat, MatStructure); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_MatGetDiagonalBlock_Python(Mat, Mat *); /*proto*/
-static PetscErrorCode __pyx_f_11libpetsc4py_MatGetSubMatrix_Python(Mat, IS, IS, MatReuse, Mat *); /*proto*/
+static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateSubMatrix_Python(Mat, IS, IS, MatReuse, Mat *); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_MatSetOption_Python(Mat, MatOption, PetscBool); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_MatSetUp_Python(Mat); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_MatAssemblyBegin_Python(Mat, MatAssemblyType); /*proto*/
@@ -1731,8 +2043,8 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatRealPart_Python(Mat); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_MatImagPart_Python(Mat); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_MatConjugate_Python(Mat); /*proto*/
 static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyPC *__pyx_f_11libpetsc4py_PyPC(PC); /*proto*/
-__PYX_EXTERN_C DL_EXPORT(PetscErrorCode) PCPythonGetContext(PC, void **); /*proto*/
-__PYX_EXTERN_C DL_EXPORT(PetscErrorCode) PCPythonSetContext(PC, void *); /*proto*/
+__PYX_EXTERN_C PetscErrorCode PCPythonGetContext(PC, void **); /*proto*/
+__PYX_EXTERN_C PetscErrorCode PCPythonSetContext(PC, void *); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_PCPythonSetType_PYTHON(PC, char *); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_PCDestroy_Python(PC); /*proto*/
@@ -1747,8 +2059,8 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApplyTranspose_Python(PC, Vec, Vec
 static PetscErrorCode __pyx_f_11libpetsc4py_PCApplySymmetricLeft_Python(PC, Vec, Vec); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_PCApplySymmetricRight_Python(PC, Vec, Vec); /*proto*/
 static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyKSP *__pyx_f_11libpetsc4py_PyKSP(KSP); /*proto*/
-__PYX_EXTERN_C DL_EXPORT(PetscErrorCode) KSPPythonGetContext(KSP, void **); /*proto*/
-__PYX_EXTERN_C DL_EXPORT(PetscErrorCode) KSPPythonSetContext(KSP, void *); /*proto*/
+__PYX_EXTERN_C PetscErrorCode KSPPythonGetContext(KSP, void **); /*proto*/
+__PYX_EXTERN_C PetscErrorCode KSPPythonSetContext(KSP, void *); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_KSPPythonSetType_PYTHON(KSP, char *); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_KSPCreate_Python(KSP); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_KSPDestroy_Python(KSP); /*proto*/
@@ -1764,8 +2076,8 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPreStep_Python(KSP); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_KSPPostStep_Python(KSP); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_KSPStep_Python(KSP, Vec, Vec); /*proto*/
 static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PySNES *__pyx_f_11libpetsc4py_PySNES(SNES); /*proto*/
-__PYX_EXTERN_C DL_EXPORT(PetscErrorCode) SNESPythonGetContext(SNES, void **); /*proto*/
-__PYX_EXTERN_C DL_EXPORT(PetscErrorCode) SNESPythonSetContext(SNES, void *); /*proto*/
+__PYX_EXTERN_C PetscErrorCode SNESPythonGetContext(SNES, void **); /*proto*/
+__PYX_EXTERN_C PetscErrorCode SNESPythonSetContext(SNES, void *); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_SNESPythonSetType_PYTHON(SNES, char *); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_SNESCreate_Python(SNES); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_SNESDestroy_Python(SNES); /*proto*/
@@ -1780,8 +2092,8 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPostStep_Python(SNES); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_SNESStep_Python(SNES, Vec, Vec, Vec); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_SNESStep_Python_default(SNES, Vec, Vec, Vec); /*proto*/
 static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyTS *__pyx_f_11libpetsc4py_PyTS(TS); /*proto*/
-__PYX_EXTERN_C DL_EXPORT(PetscErrorCode) TSPythonGetContext(TS, void **); /*proto*/
-__PYX_EXTERN_C DL_EXPORT(PetscErrorCode) TSPythonSetContext(TS, void *); /*proto*/
+__PYX_EXTERN_C PetscErrorCode TSPythonGetContext(TS, void **); /*proto*/
+__PYX_EXTERN_C PetscErrorCode TSPythonSetContext(TS, void *); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_TSPythonSetType_PYTHON(TS, char *); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_TSDestroy_Python(TS); /*proto*/
@@ -1799,7 +2111,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSolveStep_Python(TS, PetscReal, Ve
 static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS, PetscReal, Vec, PetscReal *, PetscBool *); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS); /*proto*/
 static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscObject, const char *); /*proto*/
-__PYX_EXTERN_C DL_EXPORT(PetscErrorCode) PetscPythonRegisterAll(void); /*proto*/
+__PYX_EXTERN_C PetscErrorCode PetscPythonRegisterAll(void); /*proto*/
 #define __Pyx_MODULE_NAME "libpetsc4py"
 int __pyx_module_is_main_libpetsc4py = 0;
 
@@ -1867,7 +2179,6 @@ 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";
@@ -1879,6 +2190,7 @@ 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_createSubMatrix[] = "createSubMatrix";
 static const char __pyx_k_formSNESFunction[] = "formSNESFunction";
 static const char __pyx_k_formSNESJacobian[] = "formSNESJacobian";
 static const char __pyx_k_getDiagonalBlock[] = "getDiagonalBlock";
@@ -1887,6 +2199,7 @@ 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_cline_in_traceback[] = "cline_in_traceback";
 static const char __pyx_k_applySymmetricRight[] = "applySymmetricRight";
 static PyObject *__pyx_kp_s_;
 static PyObject *__pyx_n_s_Error;
@@ -1905,11 +2218,13 @@ static PyObject *__pyx_n_s_buildResidual;
 static PyObject *__pyx_n_s_buildSolution;
 static PyObject *__pyx_n_s_builtins;
 static PyObject *__pyx_n_s_class;
+static PyObject *__pyx_n_s_cline_in_traceback;
 static PyObject *__pyx_n_s_close;
 static PyObject *__pyx_n_s_compile;
 static PyObject *__pyx_n_s_conjugate;
 static PyObject *__pyx_n_s_copy;
 static PyObject *__pyx_n_s_create;
+static PyObject *__pyx_n_s_createSubMatrix;
 static PyObject *__pyx_n_s_createVecs;
 static PyObject *__pyx_n_s_destroy;
 static PyObject *__pyx_n_s_diagonalScale;
@@ -1923,7 +2238,6 @@ static PyObject *__pyx_n_s_formSNESFunction;
 static PyObject *__pyx_n_s_formSNESJacobian;
 static PyObject *__pyx_n_s_getDiagonal;
 static PyObject *__pyx_n_s_getDiagonalBlock;
-static PyObject *__pyx_n_s_getSubMatrix;
 static PyObject *__pyx_n_s_imagPart;
 static PyObject *__pyx_n_s_import;
 static PyObject *__pyx_n_s_interpolate;
@@ -1982,7 +2296,7 @@ static PyObject *__pyx_tuple__2;
 static PyObject *__pyx_tuple__4;
 static PyObject *__pyx_tuple__6;
 
-/* "libpetsc4py.pyx":28
+/* "libpetsc4py.pyx":30
  *     void initlibpetsc4py() nogil except *
  * 
  * cdef public int import_libpetsc4py() nogil except -1:             # <<<<<<<<<<<<<<
@@ -1993,16 +2307,16 @@ static PyObject *__pyx_tuple__6;
 int import_libpetsc4py(void) {
   int __pyx_r;
 
-  /* "libpetsc4py.pyx":29
+  /* "libpetsc4py.pyx":31
  * 
  * cdef public int import_libpetsc4py() nogil except -1:
  *     initlibpetsc4py()             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  initlibpetsc4py(); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 29, __pyx_L1_error)
+  initlibpetsc4py(); if (unlikely(__Pyx_ErrOccurredWithGIL())) __PYX_ERR(0, 31, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":30
+  /* "libpetsc4py.pyx":32
  * cdef public int import_libpetsc4py() nogil except -1:
  *     initlibpetsc4py()
  *     return 0             # <<<<<<<<<<<<<<
@@ -2012,7 +2326,7 @@ int import_libpetsc4py(void) {
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":28
+  /* "libpetsc4py.pyx":30
  *     void initlibpetsc4py() nogil except *
  * 
  * cdef public int import_libpetsc4py() nogil except -1:             # <<<<<<<<<<<<<<
@@ -2024,11 +2338,11 @@ int import_libpetsc4py(void) {
   __pyx_L1_error:;
   {
     #ifdef WITH_THREAD
-    PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
     #endif
     __Pyx_AddTraceback("libpetsc4py.import_libpetsc4py", __pyx_clineno, __pyx_lineno, __pyx_filename);
     #ifdef WITH_THREAD
-    PyGILState_Release(__pyx_gilstate_save);
+    __Pyx_PyGILState_Release(__pyx_gilstate_save);
     #endif
   }
   __pyx_r = -1;
@@ -2036,7 +2350,7 @@ int import_libpetsc4py(void) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":83
+/* "libpetsc4py.pyx":85
  *     PetscErrorCode PetscViewerStringSPrintf(PetscViewer,char[],...)
  * 
  * cdef inline object      toInt(PetscInt value):          return value             # <<<<<<<<<<<<<<
@@ -2050,7 +2364,7 @@ static CYTHON_INLINE PyObject *__pyx_f_11libpetsc4py_toInt(PetscInt __pyx_v_valu
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("toInt", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_PetscInt(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 83, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_PetscInt(__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;
@@ -2067,7 +2381,7 @@ static CYTHON_INLINE PyObject *__pyx_f_11libpetsc4py_toInt(PetscInt __pyx_v_valu
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":84
+/* "libpetsc4py.pyx":86
  * 
  * cdef inline object      toInt(PetscInt value):          return value
  * cdef inline PetscInt    asInt(object value)  except?-1: return value             # <<<<<<<<<<<<<<
@@ -2080,7 +2394,7 @@ static CYTHON_INLINE PetscInt __pyx_f_11libpetsc4py_asInt(PyObject *__pyx_v_valu
   __Pyx_RefNannyDeclarations
   PetscInt __pyx_t_1;
   __Pyx_RefNannySetupContext("asInt", 0);
-  __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_t_1 = __Pyx_PyInt_As_PetscInt(__pyx_v_value); if (unlikely((__pyx_t_1 == ((PetscInt)-1)) && PyErr_Occurred())) __PYX_ERR(0, 86, __pyx_L1_error)
   __pyx_r = __pyx_t_1;
   goto __pyx_L0;
 
@@ -2093,7 +2407,7 @@ static CYTHON_INLINE PetscInt __pyx_f_11libpetsc4py_asInt(PyObject *__pyx_v_valu
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":85
+/* "libpetsc4py.pyx":87
  * 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             # <<<<<<<<<<<<<<
@@ -2107,7 +2421,7 @@ static CYTHON_INLINE PyObject *__pyx_f_11libpetsc4py_toReal(PetscReal __pyx_v_va
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("toReal", 0);
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 85, __pyx_L1_error)
+  __pyx_t_1 = PyFloat_FromDouble(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 87, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
@@ -2124,7 +2438,7 @@ static CYTHON_INLINE PyObject *__pyx_f_11libpetsc4py_toReal(PetscReal __pyx_v_va
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":86
+/* "libpetsc4py.pyx":88
  * 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             # <<<<<<<<<<<<<<
@@ -2137,7 +2451,7 @@ static CYTHON_INLINE PetscReal __pyx_f_11libpetsc4py_asReal(PyObject *__pyx_v_va
   __Pyx_RefNannyDeclarations
   PetscReal __pyx_t_1;
   __Pyx_RefNannySetupContext("asReal", 0);
-  __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_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_1 == ((PetscReal)-1)) && PyErr_Occurred())) __PYX_ERR(0, 88, __pyx_L1_error)
   __pyx_r = __pyx_t_1;
   goto __pyx_L0;
 
@@ -2150,7 +2464,7 @@ static CYTHON_INLINE PetscReal __pyx_f_11libpetsc4py_asReal(PyObject *__pyx_v_va
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":103
+/* "libpetsc4py.pyx":105
  * cdef int   istack = 0
  * 
  * cdef inline void FunctionBegin(char name[]) nogil:             # <<<<<<<<<<<<<<
@@ -2161,7 +2475,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":105
+  /* "libpetsc4py.pyx":107
  * cdef inline void FunctionBegin(char name[]) nogil:
  *     global FUNCT
  *     FUNCT = name             # <<<<<<<<<<<<<<
@@ -2170,7 +2484,7 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_FunctionBegin(char *__pyx_v_name
  */
   __pyx_v_11libpetsc4py_FUNCT = __pyx_v_name;
 
-  /* "libpetsc4py.pyx":107
+  /* "libpetsc4py.pyx":109
  *     FUNCT = name
  *     global fstack, istack
  *     fstack[istack] = FUNCT             # <<<<<<<<<<<<<<
@@ -2179,7 +2493,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":108
+  /* "libpetsc4py.pyx":110
  *     global fstack, istack
  *     fstack[istack] = FUNCT
  *     istack += 1             # <<<<<<<<<<<<<<
@@ -2188,7 +2502,7 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_FunctionBegin(char *__pyx_v_name
  */
   __pyx_v_11libpetsc4py_istack = (__pyx_v_11libpetsc4py_istack + 1);
 
-  /* "libpetsc4py.pyx":109
+  /* "libpetsc4py.pyx":111
  *     fstack[istack] = FUNCT
  *     istack += 1
  *     if istack >= 1024:             # <<<<<<<<<<<<<<
@@ -2198,7 +2512,7 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_FunctionBegin(char *__pyx_v_name
   __pyx_t_1 = ((__pyx_v_11libpetsc4py_istack >= 0x400) != 0);
   if (__pyx_t_1) {
 
-    /* "libpetsc4py.pyx":110
+    /* "libpetsc4py.pyx":112
  *     istack += 1
  *     if istack >= 1024:
  *         istack = 0             # <<<<<<<<<<<<<<
@@ -2207,7 +2521,7 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_FunctionBegin(char *__pyx_v_name
  */
     __pyx_v_11libpetsc4py_istack = 0;
 
-    /* "libpetsc4py.pyx":109
+    /* "libpetsc4py.pyx":111
  *     fstack[istack] = FUNCT
  *     istack += 1
  *     if istack >= 1024:             # <<<<<<<<<<<<<<
@@ -2216,7 +2530,7 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_FunctionBegin(char *__pyx_v_name
  */
   }
 
-  /* "libpetsc4py.pyx":111
+  /* "libpetsc4py.pyx":113
  *     if istack >= 1024:
  *         istack = 0
  *     return             # <<<<<<<<<<<<<<
@@ -2225,7 +2539,7 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_FunctionBegin(char *__pyx_v_name
  */
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":103
+  /* "libpetsc4py.pyx":105
  * cdef int   istack = 0
  * 
  * cdef inline void FunctionBegin(char name[]) nogil:             # <<<<<<<<<<<<<<
@@ -2237,7 +2551,7 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_FunctionBegin(char *__pyx_v_name
   __pyx_L0:;
 }
 
-/* "libpetsc4py.pyx":113
+/* "libpetsc4py.pyx":115
  *     return
  * 
  * cdef inline PetscErrorCode FunctionEnd() nogil:             # <<<<<<<<<<<<<<
@@ -2249,7 +2563,7 @@ static CYTHON_INLINE PetscErrorCode __pyx_f_11libpetsc4py_FunctionEnd(void) {
   PetscErrorCode __pyx_r;
   int __pyx_t_1;
 
-  /* "libpetsc4py.pyx":115
+  /* "libpetsc4py.pyx":117
  * cdef inline PetscErrorCode FunctionEnd() nogil:
  *     global FUNCT
  *     FUNCT = NULL             # <<<<<<<<<<<<<<
@@ -2258,7 +2572,7 @@ static CYTHON_INLINE PetscErrorCode __pyx_f_11libpetsc4py_FunctionEnd(void) {
  */
   __pyx_v_11libpetsc4py_FUNCT = NULL;
 
-  /* "libpetsc4py.pyx":117
+  /* "libpetsc4py.pyx":119
  *     FUNCT = NULL
  *     global fstack, istack
  *     istack -= 1             # <<<<<<<<<<<<<<
@@ -2267,7 +2581,7 @@ static CYTHON_INLINE PetscErrorCode __pyx_f_11libpetsc4py_FunctionEnd(void) {
  */
   __pyx_v_11libpetsc4py_istack = (__pyx_v_11libpetsc4py_istack - 1);
 
-  /* "libpetsc4py.pyx":118
+  /* "libpetsc4py.pyx":120
  *     global fstack, istack
  *     istack -= 1
  *     if istack < 0:             # <<<<<<<<<<<<<<
@@ -2277,7 +2591,7 @@ static CYTHON_INLINE PetscErrorCode __pyx_f_11libpetsc4py_FunctionEnd(void) {
   __pyx_t_1 = ((__pyx_v_11libpetsc4py_istack < 0) != 0);
   if (__pyx_t_1) {
 
-    /* "libpetsc4py.pyx":119
+    /* "libpetsc4py.pyx":121
  *     istack -= 1
  *     if istack < 0:
  *         istack = 1024             # <<<<<<<<<<<<<<
@@ -2286,7 +2600,7 @@ static CYTHON_INLINE PetscErrorCode __pyx_f_11libpetsc4py_FunctionEnd(void) {
  */
     __pyx_v_11libpetsc4py_istack = 0x400;
 
-    /* "libpetsc4py.pyx":118
+    /* "libpetsc4py.pyx":120
  *     global fstack, istack
  *     istack -= 1
  *     if istack < 0:             # <<<<<<<<<<<<<<
@@ -2295,7 +2609,7 @@ static CYTHON_INLINE PetscErrorCode __pyx_f_11libpetsc4py_FunctionEnd(void) {
  */
   }
 
-  /* "libpetsc4py.pyx":120
+  /* "libpetsc4py.pyx":122
  *     if istack < 0:
  *         istack = 1024
  *     FUNCT = fstack[istack]             # <<<<<<<<<<<<<<
@@ -2304,7 +2618,7 @@ static CYTHON_INLINE PetscErrorCode __pyx_f_11libpetsc4py_FunctionEnd(void) {
  */
   __pyx_v_11libpetsc4py_FUNCT = (__pyx_v_11libpetsc4py_fstack[__pyx_v_11libpetsc4py_istack]);
 
-  /* "libpetsc4py.pyx":121
+  /* "libpetsc4py.pyx":123
  *         istack = 1024
  *     FUNCT = fstack[istack]
  *     return 0             # <<<<<<<<<<<<<<
@@ -2314,7 +2628,7 @@ static CYTHON_INLINE PetscErrorCode __pyx_f_11libpetsc4py_FunctionEnd(void) {
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":113
+  /* "libpetsc4py.pyx":115
  *     return
  * 
  * cdef inline PetscErrorCode FunctionEnd() nogil:             # <<<<<<<<<<<<<<
@@ -2327,7 +2641,7 @@ static CYTHON_INLINE PetscErrorCode __pyx_f_11libpetsc4py_FunctionEnd(void) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":123
+/* "libpetsc4py.pyx":125
  *     return 0
  * 
  * cdef PetscErrorCode PetscSETERR(PetscErrorCode ierr,char msg[]) nogil:             # <<<<<<<<<<<<<<
@@ -2338,7 +2652,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":125
+  /* "libpetsc4py.pyx":127
  * cdef PetscErrorCode PetscSETERR(PetscErrorCode ierr,char msg[]) nogil:
  *     global fstack, istack
  *     istack = 0; fstack[istack] = NULL;             # <<<<<<<<<<<<<<
@@ -2348,7 +2662,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":127
+  /* "libpetsc4py.pyx":129
  *     istack = 0; fstack[istack] = NULL;
  *     global FUNCT
  *     return PetscERROR(PETSC_COMM_SELF,FUNCT,ierr,             # <<<<<<<<<<<<<<
@@ -2358,7 +2672,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":123
+  /* "libpetsc4py.pyx":125
  *     return 0
  * 
  * cdef PetscErrorCode PetscSETERR(PetscErrorCode ierr,char msg[]) nogil:             # <<<<<<<<<<<<<<
@@ -2371,7 +2685,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscSETERR(PetscErrorCode __pyx_v_i
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":130
+/* "libpetsc4py.pyx":132
  *                       PETSC_ERROR_INITIAL, msg, NULL)
  * 
  * cdef PetscErrorCode PetscCHKERR(PetscErrorCode ierr) nogil:             # <<<<<<<<<<<<<<
@@ -2382,7 +2696,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":132
+  /* "libpetsc4py.pyx":134
  * cdef PetscErrorCode PetscCHKERR(PetscErrorCode ierr) nogil:
  *     global fstack, istack
  *     istack = 0; fstack[istack] = NULL;             # <<<<<<<<<<<<<<
@@ -2392,7 +2706,7 @@ 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":134
+  /* "libpetsc4py.pyx":136
  *     istack = 0; fstack[istack] = NULL;
  *     global FUNCT
  *     return PetscERROR(PETSC_COMM_SELF,FUNCT,ierr,             # <<<<<<<<<<<<<<
@@ -2402,7 +2716,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscCHKERR(PetscErrorCode __pyx_v_i
   __pyx_r = PetscERROR(PETSC_COMM_SELF, __pyx_v_11libpetsc4py_FUNCT, __pyx_v_ierr, PETSC_ERROR_REPEAT, ((char *)""), NULL);
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":130
+  /* "libpetsc4py.pyx":132
  *                       PETSC_ERROR_INITIAL, msg, NULL)
  * 
  * cdef PetscErrorCode PetscCHKERR(PetscErrorCode ierr) nogil:             # <<<<<<<<<<<<<<
@@ -2415,7 +2729,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscCHKERR(PetscErrorCode __pyx_v_i
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":145
+/* "libpetsc4py.pyx":147
  * from petsc4py.PETSc import Error as PetscError
  * 
  * cdef inline void PythonSETERR(PetscErrorCode ierr) with gil:             # <<<<<<<<<<<<<<
@@ -2429,11 +2743,11 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_PythonSETERR(PetscErrorCode __py
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("PythonSETERR", 0);
 
-  /* "libpetsc4py.pyx":146
+  /* "libpetsc4py.pyx":148
  * 
  * cdef inline void PythonSETERR(PetscErrorCode ierr) with gil:
  *     if (<void*>PetscError) != NULL:             # <<<<<<<<<<<<<<
@@ -2443,7 +2757,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":147
+    /* "libpetsc4py.pyx":149
  * cdef inline void PythonSETERR(PetscErrorCode ierr) with gil:
  *     if (<void*>PetscError) != NULL:
  *         PyErr_SetObject(PetscError, <long>ierr)             # <<<<<<<<<<<<<<
@@ -2452,13 +2766,13 @@ 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_ERR(0, 147, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyInt_From_long(((long)__pyx_v_ierr)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 149, __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
+    /* "libpetsc4py.pyx":148
  * 
  * cdef inline void PythonSETERR(PetscErrorCode ierr) with gil:
  *     if (<void*>PetscError) != NULL:             # <<<<<<<<<<<<<<
@@ -2468,7 +2782,7 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_PythonSETERR(PetscErrorCode __py
     goto __pyx_L3;
   }
 
-  /* "libpetsc4py.pyx":149
+  /* "libpetsc4py.pyx":151
  *         PyErr_SetObject(PetscError, <long>ierr)
  *     else:
  *         PyErr_SetObject(<object>PyExc_RuntimeError, <long>ierr)             # <<<<<<<<<<<<<<
@@ -2478,7 +2792,7 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_PythonSETERR(PetscErrorCode __py
   /*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(0, 149, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyInt_From_long(((long)__pyx_v_ierr)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 151, __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;
@@ -2486,7 +2800,7 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_PythonSETERR(PetscErrorCode __py
   }
   __pyx_L3:;
 
-  /* "libpetsc4py.pyx":145
+  /* "libpetsc4py.pyx":147
  * from petsc4py.PETSc import Error as PetscError
  * 
  * cdef inline void PythonSETERR(PetscErrorCode ierr) with gil:             # <<<<<<<<<<<<<<
@@ -2499,15 +2813,15 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_PythonSETERR(PetscErrorCode __py
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_WriteUnraisable("libpetsc4py.PythonSETERR", __pyx_clineno, __pyx_lineno, __pyx_filename, 0, 0);
+  __Pyx_WriteUnraisable("libpetsc4py.PythonSETERR", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
 }
 
-/* "libpetsc4py.pyx":151
+/* "libpetsc4py.pyx":153
  *         PyErr_SetObject(<object>PyExc_RuntimeError, <long>ierr)
  * 
  * cdef inline int CHKERR(PetscErrorCode ierr) nogil except -1:             # <<<<<<<<<<<<<<
@@ -2519,7 +2833,7 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_CHKERR(PetscErrorCode __pyx_v_ier
   int __pyx_r;
   int __pyx_t_1;
 
-  /* "libpetsc4py.pyx":152
+  /* "libpetsc4py.pyx":154
  * 
  * cdef inline int CHKERR(PetscErrorCode ierr) nogil except -1:
  *     if ierr == 0:             # <<<<<<<<<<<<<<
@@ -2529,7 +2843,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":153
+    /* "libpetsc4py.pyx":155
  * cdef inline int CHKERR(PetscErrorCode ierr) nogil except -1:
  *     if ierr == 0:
  *         return 0             # <<<<<<<<<<<<<<
@@ -2539,7 +2853,7 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_CHKERR(PetscErrorCode __pyx_v_ier
     __pyx_r = 0;
     goto __pyx_L0;
 
-    /* "libpetsc4py.pyx":152
+    /* "libpetsc4py.pyx":154
  * 
  * cdef inline int CHKERR(PetscErrorCode ierr) nogil except -1:
  *     if ierr == 0:             # <<<<<<<<<<<<<<
@@ -2548,7 +2862,7 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_CHKERR(PetscErrorCode __pyx_v_ier
  */
   }
 
-  /* "libpetsc4py.pyx":154
+  /* "libpetsc4py.pyx":156
  *     if ierr == 0:
  *         return 0
  *     if ierr == PETSC_ERR_PYTHON:             # <<<<<<<<<<<<<<
@@ -2558,7 +2872,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":156
+    /* "libpetsc4py.pyx":158
  *     if ierr == PETSC_ERR_PYTHON:
  *         #PetscCHKERR(ierr)
  *         return -1             # <<<<<<<<<<<<<<
@@ -2568,7 +2882,7 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_CHKERR(PetscErrorCode __pyx_v_ier
     __pyx_r = -1;
     goto __pyx_L0;
 
-    /* "libpetsc4py.pyx":154
+    /* "libpetsc4py.pyx":156
  *     if ierr == 0:
  *         return 0
  *     if ierr == PETSC_ERR_PYTHON:             # <<<<<<<<<<<<<<
@@ -2577,7 +2891,7 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_CHKERR(PetscErrorCode __pyx_v_ier
  */
   }
 
-  /* "libpetsc4py.pyx":157
+  /* "libpetsc4py.pyx":159
  *         #PetscCHKERR(ierr)
  *         return -1
  *     if Py_IsInitialized():             # <<<<<<<<<<<<<<
@@ -2587,7 +2901,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":158
+    /* "libpetsc4py.pyx":160
  *         return -1
  *     if Py_IsInitialized():
  *         PythonSETERR(ierr)             # <<<<<<<<<<<<<<
@@ -2596,7 +2910,7 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_CHKERR(PetscErrorCode __pyx_v_ier
  */
     __pyx_f_11libpetsc4py_PythonSETERR(__pyx_v_ierr);
 
-    /* "libpetsc4py.pyx":157
+    /* "libpetsc4py.pyx":159
  *         #PetscCHKERR(ierr)
  *         return -1
  *     if Py_IsInitialized():             # <<<<<<<<<<<<<<
@@ -2605,7 +2919,7 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_CHKERR(PetscErrorCode __pyx_v_ier
  */
   }
 
-  /* "libpetsc4py.pyx":159
+  /* "libpetsc4py.pyx":161
  *     if Py_IsInitialized():
  *         PythonSETERR(ierr)
  *     PetscCHKERR(ierr)             # <<<<<<<<<<<<<<
@@ -2614,7 +2928,7 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_CHKERR(PetscErrorCode __pyx_v_ier
  */
   __pyx_f_11libpetsc4py_PetscCHKERR(__pyx_v_ierr);
 
-  /* "libpetsc4py.pyx":160
+  /* "libpetsc4py.pyx":162
  *         PythonSETERR(ierr)
  *     PetscCHKERR(ierr)
  *     return -1             # <<<<<<<<<<<<<<
@@ -2624,7 +2938,7 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_CHKERR(PetscErrorCode __pyx_v_ier
   __pyx_r = -1;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":151
+  /* "libpetsc4py.pyx":153
  *         PyErr_SetObject(<object>PyExc_RuntimeError, <long>ierr)
  * 
  * cdef inline int CHKERR(PetscErrorCode ierr) nogil except -1:             # <<<<<<<<<<<<<<
@@ -2637,7 +2951,7 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_CHKERR(PetscErrorCode __pyx_v_ier
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":162
+/* "libpetsc4py.pyx":164
  *     return -1
  * 
  * cdef PetscErrorCode UNSUPPORTED(char msg[]) nogil:             # <<<<<<<<<<<<<<
@@ -2648,7 +2962,7 @@ 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":164
+  /* "libpetsc4py.pyx":166
  * cdef PetscErrorCode UNSUPPORTED(char msg[]) nogil:
  *     global FUNCT
  *     return PetscERROR(PETSC_COMM_SELF,FUNCT,PETSC_ERR_USER,             # <<<<<<<<<<<<<<
@@ -2658,7 +2972,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_UNSUPPORTED(char *__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":162
+  /* "libpetsc4py.pyx":164
  *     return -1
  * 
  * cdef PetscErrorCode UNSUPPORTED(char msg[]) nogil:             # <<<<<<<<<<<<<<
@@ -2671,7 +2985,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_UNSUPPORTED(char *__pyx_v_msg) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":169
+/* "libpetsc4py.pyx":171
  * # --------------------------------------------------------------------
  * 
  * cdef inline PetscInt getRef(void *pobj) nogil:             # <<<<<<<<<<<<<<
@@ -2684,7 +2998,7 @@ static CYTHON_INLINE PetscInt __pyx_f_11libpetsc4py_getRef(void *__pyx_v_pobj) {
   PetscInt __pyx_r;
   int __pyx_t_1;
 
-  /* "libpetsc4py.pyx":170
+  /* "libpetsc4py.pyx":172
  * 
  * cdef inline PetscInt getRef(void *pobj) nogil:
  *     cdef PetscObject obj = <PetscObject>pobj             # <<<<<<<<<<<<<<
@@ -2693,7 +3007,7 @@ static CYTHON_INLINE PetscInt __pyx_f_11libpetsc4py_getRef(void *__pyx_v_pobj) {
  */
   __pyx_v_obj = ((PetscObject)__pyx_v_pobj);
 
-  /* "libpetsc4py.pyx":171
+  /* "libpetsc4py.pyx":173
  * cdef inline PetscInt getRef(void *pobj) nogil:
  *     cdef PetscObject obj = <PetscObject>pobj
  *     if obj == NULL: return 0             # <<<<<<<<<<<<<<
@@ -2706,7 +3020,7 @@ static CYTHON_INLINE PetscInt __pyx_f_11libpetsc4py_getRef(void *__pyx_v_pobj) {
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":172
+  /* "libpetsc4py.pyx":174
  *     cdef PetscObject obj = <PetscObject>pobj
  *     if obj == NULL: return 0
  *     else: return obj.refct             # <<<<<<<<<<<<<<
@@ -2718,7 +3032,7 @@ static CYTHON_INLINE PetscInt __pyx_f_11libpetsc4py_getRef(void *__pyx_v_pobj) {
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":169
+  /* "libpetsc4py.pyx":171
  * # --------------------------------------------------------------------
  * 
  * cdef inline PetscInt getRef(void *pobj) nogil:             # <<<<<<<<<<<<<<
@@ -2731,7 +3045,7 @@ static CYTHON_INLINE PetscInt __pyx_f_11libpetsc4py_getRef(void *__pyx_v_pobj) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":174
+/* "libpetsc4py.pyx":176
  *     else: return obj.refct
  * 
  * cdef inline void addRef(void *pobj) nogil:             # <<<<<<<<<<<<<<
@@ -2743,7 +3057,7 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_addRef(void *__pyx_v_pobj) {
   PetscObject __pyx_v_obj;
   int __pyx_t_1;
 
-  /* "libpetsc4py.pyx":175
+  /* "libpetsc4py.pyx":177
  * 
  * cdef inline void addRef(void *pobj) nogil:
  *     cdef PetscObject obj = <PetscObject>pobj             # <<<<<<<<<<<<<<
@@ -2752,7 +3066,7 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_addRef(void *__pyx_v_pobj) {
  */
   __pyx_v_obj = ((PetscObject)__pyx_v_pobj);
 
-  /* "libpetsc4py.pyx":176
+  /* "libpetsc4py.pyx":178
  * cdef inline void addRef(void *pobj) nogil:
  *     cdef PetscObject obj = <PetscObject>pobj
  *     if obj != NULL: obj.refct += 1             # <<<<<<<<<<<<<<
@@ -2764,7 +3078,7 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_addRef(void *__pyx_v_pobj) {
     __pyx_v_obj->refct = (__pyx_v_obj->refct + 1);
   }
 
-  /* "libpetsc4py.pyx":174
+  /* "libpetsc4py.pyx":176
  *     else: return obj.refct
  * 
  * cdef inline void addRef(void *pobj) nogil:             # <<<<<<<<<<<<<<
@@ -2775,7 +3089,7 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_addRef(void *__pyx_v_pobj) {
   /* function exit code */
 }
 
-/* "libpetsc4py.pyx":178
+/* "libpetsc4py.pyx":180
  *     if obj != NULL: obj.refct += 1
  * 
  * cdef inline void delRef(void *pobj) nogil:             # <<<<<<<<<<<<<<
@@ -2787,7 +3101,7 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_delRef(void *__pyx_v_pobj) {
   PetscObject __pyx_v_obj;
   int __pyx_t_1;
 
-  /* "libpetsc4py.pyx":179
+  /* "libpetsc4py.pyx":181
  * 
  * cdef inline void delRef(void *pobj) nogil:
  *     cdef PetscObject obj = <PetscObject>pobj             # <<<<<<<<<<<<<<
@@ -2796,7 +3110,7 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_delRef(void *__pyx_v_pobj) {
  */
   __pyx_v_obj = ((PetscObject)__pyx_v_pobj);
 
-  /* "libpetsc4py.pyx":180
+  /* "libpetsc4py.pyx":182
  * cdef inline void delRef(void *pobj) nogil:
  *     cdef PetscObject obj = <PetscObject>pobj
  *     if obj != NULL: obj.refct -= 1             # <<<<<<<<<<<<<<
@@ -2808,7 +3122,7 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_delRef(void *__pyx_v_pobj) {
     __pyx_v_obj->refct = (__pyx_v_obj->refct - 1);
   }
 
-  /* "libpetsc4py.pyx":178
+  /* "libpetsc4py.pyx":180
  *     if obj != NULL: obj.refct += 1
  * 
  * cdef inline void delRef(void *pobj) nogil:             # <<<<<<<<<<<<<<
@@ -2819,7 +3133,7 @@ static CYTHON_INLINE void __pyx_f_11libpetsc4py_delRef(void *__pyx_v_pobj) {
   /* function exit code */
 }
 
-/* "libpetsc4py.pyx":182
+/* "libpetsc4py.pyx":184
  *     if obj != NULL: obj.refct -= 1
  * 
  * cdef inline PetscObject newRef(void *pobj) nogil:             # <<<<<<<<<<<<<<
@@ -2833,7 +3147,7 @@ static CYTHON_INLINE PetscObject __pyx_f_11libpetsc4py_newRef(void *__pyx_v_pobj
   PetscObject __pyx_r;
   int __pyx_t_1;
 
-  /* "libpetsc4py.pyx":183
+  /* "libpetsc4py.pyx":185
  * 
  * cdef inline PetscObject newRef(void *pobj) nogil:
  *     cdef PetscObject obj = <PetscObject>pobj             # <<<<<<<<<<<<<<
@@ -2842,7 +3156,7 @@ static CYTHON_INLINE PetscObject __pyx_f_11libpetsc4py_newRef(void *__pyx_v_pobj
  */
   __pyx_v_obj = ((PetscObject)__pyx_v_pobj);
 
-  /* "libpetsc4py.pyx":184
+  /* "libpetsc4py.pyx":186
  * cdef inline PetscObject newRef(void *pobj) nogil:
  *     cdef PetscObject obj = <PetscObject>pobj
  *     cdef int ierr = 0             # <<<<<<<<<<<<<<
@@ -2851,7 +3165,7 @@ static CYTHON_INLINE PetscObject __pyx_f_11libpetsc4py_newRef(void *__pyx_v_pobj
  */
   __pyx_v_ierr = 0;
 
-  /* "libpetsc4py.pyx":185
+  /* "libpetsc4py.pyx":187
  *     cdef PetscObject obj = <PetscObject>pobj
  *     cdef int ierr = 0
  *     if obj != NULL:             # <<<<<<<<<<<<<<
@@ -2861,7 +3175,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":186
+    /* "libpetsc4py.pyx":188
  *     cdef int ierr = 0
  *     if obj != NULL:
  *         ierr = PetscObjectReference(obj)             # <<<<<<<<<<<<<<
@@ -2870,7 +3184,7 @@ static CYTHON_INLINE PetscObject __pyx_f_11libpetsc4py_newRef(void *__pyx_v_pobj
  */
     __pyx_v_ierr = PetscObjectReference(__pyx_v_obj);
 
-    /* "libpetsc4py.pyx":187
+    /* "libpetsc4py.pyx":189
  *     if obj != NULL:
  *         ierr = PetscObjectReference(obj)
  *         if ierr: return NULL # XXX warning!             # <<<<<<<<<<<<<<
@@ -2883,7 +3197,7 @@ static CYTHON_INLINE PetscObject __pyx_f_11libpetsc4py_newRef(void *__pyx_v_pobj
       goto __pyx_L0;
     }
 
-    /* "libpetsc4py.pyx":185
+    /* "libpetsc4py.pyx":187
  *     cdef PetscObject obj = <PetscObject>pobj
  *     cdef int ierr = 0
  *     if obj != NULL:             # <<<<<<<<<<<<<<
@@ -2892,7 +3206,7 @@ static CYTHON_INLINE PetscObject __pyx_f_11libpetsc4py_newRef(void *__pyx_v_pobj
  */
   }
 
-  /* "libpetsc4py.pyx":188
+  /* "libpetsc4py.pyx":190
  *         ierr = PetscObjectReference(obj)
  *         if ierr: return NULL # XXX warning!
  *     return obj             # <<<<<<<<<<<<<<
@@ -2902,7 +3216,7 @@ static CYTHON_INLINE PetscObject __pyx_f_11libpetsc4py_newRef(void *__pyx_v_pobj
   __pyx_r = __pyx_v_obj;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":182
+  /* "libpetsc4py.pyx":184
  *     if obj != NULL: obj.refct -= 1
  * 
  * cdef inline PetscObject newRef(void *pobj) nogil:             # <<<<<<<<<<<<<<
@@ -2915,7 +3229,7 @@ static CYTHON_INLINE PetscObject __pyx_f_11libpetsc4py_newRef(void *__pyx_v_pobj
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":190
+/* "libpetsc4py.pyx":192
  *     return obj
  * 
  * cdef inline char* getPrefix(void *pobj) nogil:             # <<<<<<<<<<<<<<
@@ -2928,7 +3242,7 @@ static CYTHON_INLINE char *__pyx_f_11libpetsc4py_getPrefix(void *__pyx_v_pobj) {
   char *__pyx_r;
   int __pyx_t_1;
 
-  /* "libpetsc4py.pyx":191
+  /* "libpetsc4py.pyx":193
  * 
  * cdef inline char* getPrefix(void *pobj) nogil:
  *     cdef PetscObject obj = <PetscObject>pobj             # <<<<<<<<<<<<<<
@@ -2937,7 +3251,7 @@ static CYTHON_INLINE char *__pyx_f_11libpetsc4py_getPrefix(void *__pyx_v_pobj) {
  */
   __pyx_v_obj = ((PetscObject)__pyx_v_pobj);
 
-  /* "libpetsc4py.pyx":192
+  /* "libpetsc4py.pyx":194
  * cdef inline char* getPrefix(void *pobj) nogil:
  *     cdef PetscObject obj = <PetscObject>pobj
  *     if obj == NULL: return NULL             # <<<<<<<<<<<<<<
@@ -2950,7 +3264,7 @@ static CYTHON_INLINE char *__pyx_f_11libpetsc4py_getPrefix(void *__pyx_v_pobj) {
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":193
+  /* "libpetsc4py.pyx":195
  *     cdef PetscObject obj = <PetscObject>pobj
  *     if obj == NULL: return NULL
  *     return obj.prefix             # <<<<<<<<<<<<<<
@@ -2960,7 +3274,7 @@ static CYTHON_INLINE char *__pyx_f_11libpetsc4py_getPrefix(void *__pyx_v_pobj) {
   __pyx_r = __pyx_v_obj->prefix;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":190
+  /* "libpetsc4py.pyx":192
  *     return obj
  * 
  * cdef inline char* getPrefix(void *pobj) nogil:             # <<<<<<<<<<<<<<
@@ -2973,7 +3287,7 @@ static CYTHON_INLINE char *__pyx_f_11libpetsc4py_getPrefix(void *__pyx_v_pobj) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":195
+/* "libpetsc4py.pyx":197
  *     return obj.prefix
  * 
  * cdef inline int getCommSize(void *pobj) nogil:             # <<<<<<<<<<<<<<
@@ -2987,7 +3301,7 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_getCommSize(void *__pyx_v_pobj) {
   int __pyx_r;
   int __pyx_t_1;
 
-  /* "libpetsc4py.pyx":196
+  /* "libpetsc4py.pyx":198
  * 
  * cdef inline int getCommSize(void *pobj) nogil:
  *     cdef PetscObject obj = <PetscObject>pobj             # <<<<<<<<<<<<<<
@@ -2996,7 +3310,7 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_getCommSize(void *__pyx_v_pobj) {
  */
   __pyx_v_obj = ((PetscObject)__pyx_v_pobj);
 
-  /* "libpetsc4py.pyx":197
+  /* "libpetsc4py.pyx":199
  * cdef inline int getCommSize(void *pobj) nogil:
  *     cdef PetscObject obj = <PetscObject>pobj
  *     if obj == NULL: return 0             # <<<<<<<<<<<<<<
@@ -3009,7 +3323,7 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_getCommSize(void *__pyx_v_pobj) {
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":198
+  /* "libpetsc4py.pyx":200
  *     cdef PetscObject obj = <PetscObject>pobj
  *     if obj == NULL: return 0
  *     cdef int size = 0             # <<<<<<<<<<<<<<
@@ -3018,7 +3332,7 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_getCommSize(void *__pyx_v_pobj) {
  */
   __pyx_v_size = 0;
 
-  /* "libpetsc4py.pyx":199
+  /* "libpetsc4py.pyx":201
  *     if obj == NULL: return 0
  *     cdef int size = 0
  *     MPI_Comm_size(obj.comm,&size)             # <<<<<<<<<<<<<<
@@ -3027,7 +3341,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":200
+  /* "libpetsc4py.pyx":202
  *     cdef int size = 0
  *     MPI_Comm_size(obj.comm,&size)
  *     return size             # <<<<<<<<<<<<<<
@@ -3037,7 +3351,7 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_getCommSize(void *__pyx_v_pobj) {
   __pyx_r = __pyx_v_size;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":195
+  /* "libpetsc4py.pyx":197
  *     return obj.prefix
  * 
  * cdef inline int getCommSize(void *pobj) nogil:             # <<<<<<<<<<<<<<
@@ -3050,7 +3364,7 @@ static CYTHON_INLINE int __pyx_f_11libpetsc4py_getCommSize(void *__pyx_v_pobj) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":202
+/* "libpetsc4py.pyx":204
  *     return size
  * 
  * cdef inline Viewer Viewer_(PetscViewer p):             # <<<<<<<<<<<<<<
@@ -3065,20 +3379,20 @@ static CYTHON_INLINE struct PyPetscViewerObject *__pyx_f_11libpetsc4py_Viewer_(P
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("Viewer_", 0);
 
-  /* "libpetsc4py.pyx":203
+  /* "libpetsc4py.pyx":205
  * 
  * 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 *)__pyx_ptype_8petsc4py_5PETSc_Viewer), __pyx_empty_tuple); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 203, __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, 205, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_Viewer)))) __PYX_ERR(0, 203, __pyx_L1_error)
+  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_Viewer)))) __PYX_ERR(0, 205, __pyx_L1_error)
   __pyx_v_ob = ((struct PyPetscViewerObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":204
+  /* "libpetsc4py.pyx":206
  * cdef inline Viewer Viewer_(PetscViewer p):
  *     cdef Viewer ob = Viewer.__new__(Viewer)
  *     ob.obj[0] = newRef(p)             # <<<<<<<<<<<<<<
@@ -3087,7 +3401,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":205
+  /* "libpetsc4py.pyx":207
  *     cdef Viewer ob = Viewer.__new__(Viewer)
  *     ob.obj[0] = newRef(p)
  *     return ob             # <<<<<<<<<<<<<<
@@ -3099,7 +3413,7 @@ static CYTHON_INLINE struct PyPetscViewerObject *__pyx_f_11libpetsc4py_Viewer_(P
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":202
+  /* "libpetsc4py.pyx":204
  *     return size
  * 
  * cdef inline Viewer Viewer_(PetscViewer p):             # <<<<<<<<<<<<<<
@@ -3119,7 +3433,7 @@ static CYTHON_INLINE struct PyPetscViewerObject *__pyx_f_11libpetsc4py_Viewer_(P
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":207
+/* "libpetsc4py.pyx":209
  *     return ob
  * 
  * cdef inline IS IS_(PetscIS p):             # <<<<<<<<<<<<<<
@@ -3134,20 +3448,20 @@ static CYTHON_INLINE struct PyPetscISObject *__pyx_f_11libpetsc4py_IS_(IS __pyx_
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("IS_", 0);
 
-  /* "libpetsc4py.pyx":208
+  /* "libpetsc4py.pyx":210
  * 
  * 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 *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 208, __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, 210, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_IS)))) __PYX_ERR(0, 208, __pyx_L1_error)
+  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_IS)))) __PYX_ERR(0, 210, __pyx_L1_error)
   __pyx_v_ob = ((struct PyPetscISObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":209
+  /* "libpetsc4py.pyx":211
  * cdef inline IS IS_(PetscIS p):
  *     cdef IS ob = IS.__new__(IS)
  *     ob.obj[0] = newRef(p)             # <<<<<<<<<<<<<<
@@ -3156,7 +3470,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":210
+  /* "libpetsc4py.pyx":212
  *     cdef IS ob = IS.__new__(IS)
  *     ob.obj[0] = newRef(p)
  *     return ob             # <<<<<<<<<<<<<<
@@ -3168,7 +3482,7 @@ static CYTHON_INLINE struct PyPetscISObject *__pyx_f_11libpetsc4py_IS_(IS __pyx_
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":207
+  /* "libpetsc4py.pyx":209
  *     return ob
  * 
  * cdef inline IS IS_(PetscIS p):             # <<<<<<<<<<<<<<
@@ -3188,7 +3502,7 @@ static CYTHON_INLINE struct PyPetscISObject *__pyx_f_11libpetsc4py_IS_(IS __pyx_
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":212
+/* "libpetsc4py.pyx":214
  *     return ob
  * 
  * cdef inline Vec Vec_(PetscVec p):             # <<<<<<<<<<<<<<
@@ -3203,20 +3517,20 @@ static CYTHON_INLINE struct PyPetscVecObject *__pyx_f_11libpetsc4py_Vec_(Vec __p
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("Vec_", 0);
 
-  /* "libpetsc4py.pyx":213
+  /* "libpetsc4py.pyx":215
  * 
  * 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 *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 213, __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, 215, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_Vec)))) __PYX_ERR(0, 213, __pyx_L1_error)
+  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_Vec)))) __PYX_ERR(0, 215, __pyx_L1_error)
   __pyx_v_ob = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":214
+  /* "libpetsc4py.pyx":216
  * cdef inline Vec Vec_(PetscVec p):
  *     cdef Vec ob = Vec.__new__(Vec)
  *     ob.obj[0] = newRef(p)             # <<<<<<<<<<<<<<
@@ -3225,7 +3539,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":215
+  /* "libpetsc4py.pyx":217
  *     cdef Vec ob = Vec.__new__(Vec)
  *     ob.obj[0] = newRef(p)
  *     return ob             # <<<<<<<<<<<<<<
@@ -3237,7 +3551,7 @@ static CYTHON_INLINE struct PyPetscVecObject *__pyx_f_11libpetsc4py_Vec_(Vec __p
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":212
+  /* "libpetsc4py.pyx":214
  *     return ob
  * 
  * cdef inline Vec Vec_(PetscVec p):             # <<<<<<<<<<<<<<
@@ -3257,7 +3571,7 @@ static CYTHON_INLINE struct PyPetscVecObject *__pyx_f_11libpetsc4py_Vec_(Vec __p
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":217
+/* "libpetsc4py.pyx":219
  *     return ob
  * 
  * cdef inline Mat Mat_(PetscMat p):             # <<<<<<<<<<<<<<
@@ -3272,20 +3586,20 @@ static CYTHON_INLINE struct PyPetscMatObject *__pyx_f_11libpetsc4py_Mat_(Mat __p
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("Mat_", 0);
 
-  /* "libpetsc4py.pyx":218
+  /* "libpetsc4py.pyx":220
  * 
  * 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 *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 218, __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, 220, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_Mat)))) __PYX_ERR(0, 218, __pyx_L1_error)
+  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_Mat)))) __PYX_ERR(0, 220, __pyx_L1_error)
   __pyx_v_ob = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":219
+  /* "libpetsc4py.pyx":221
  * cdef inline Mat Mat_(PetscMat p):
  *     cdef Mat ob = Mat.__new__(Mat)
  *     ob.obj[0] = newRef(p)             # <<<<<<<<<<<<<<
@@ -3294,7 +3608,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":220
+  /* "libpetsc4py.pyx":222
  *     cdef Mat ob = Mat.__new__(Mat)
  *     ob.obj[0] = newRef(p)
  *     return ob             # <<<<<<<<<<<<<<
@@ -3306,7 +3620,7 @@ static CYTHON_INLINE struct PyPetscMatObject *__pyx_f_11libpetsc4py_Mat_(Mat __p
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":217
+  /* "libpetsc4py.pyx":219
  *     return ob
  * 
  * cdef inline Mat Mat_(PetscMat p):             # <<<<<<<<<<<<<<
@@ -3326,7 +3640,7 @@ static CYTHON_INLINE struct PyPetscMatObject *__pyx_f_11libpetsc4py_Mat_(Mat __p
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":222
+/* "libpetsc4py.pyx":224
  *     return ob
  * 
  * cdef inline PC PC_(PetscPC p):             # <<<<<<<<<<<<<<
@@ -3341,20 +3655,20 @@ static CYTHON_INLINE struct PyPetscPCObject *__pyx_f_11libpetsc4py_PC_(PC __pyx_
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("PC_", 0);
 
-  /* "libpetsc4py.pyx":223
+  /* "libpetsc4py.pyx":225
  * 
  * 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 *)__pyx_ptype_8petsc4py_5PETSc_PC), __pyx_empty_tuple); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 223, __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, 225, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_PC)))) __PYX_ERR(0, 223, __pyx_L1_error)
+  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_PC)))) __PYX_ERR(0, 225, __pyx_L1_error)
   __pyx_v_ob = ((struct PyPetscPCObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":224
+  /* "libpetsc4py.pyx":226
  * cdef inline PC PC_(PetscPC p):
  *     cdef PC ob = PC.__new__(PC)
  *     ob.obj[0] = newRef(p)             # <<<<<<<<<<<<<<
@@ -3363,7 +3677,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":225
+  /* "libpetsc4py.pyx":227
  *     cdef PC ob = PC.__new__(PC)
  *     ob.obj[0] = newRef(p)
  *     return ob             # <<<<<<<<<<<<<<
@@ -3375,7 +3689,7 @@ static CYTHON_INLINE struct PyPetscPCObject *__pyx_f_11libpetsc4py_PC_(PC __pyx_
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":222
+  /* "libpetsc4py.pyx":224
  *     return ob
  * 
  * cdef inline PC PC_(PetscPC p):             # <<<<<<<<<<<<<<
@@ -3395,7 +3709,7 @@ static CYTHON_INLINE struct PyPetscPCObject *__pyx_f_11libpetsc4py_PC_(PC __pyx_
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":227
+/* "libpetsc4py.pyx":229
  *     return ob
  * 
  * cdef inline KSP KSP_(PetscKSP p):             # <<<<<<<<<<<<<<
@@ -3410,20 +3724,20 @@ static CYTHON_INLINE struct PyPetscKSPObject *__pyx_f_11libpetsc4py_KSP_(KSP __p
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("KSP_", 0);
 
-  /* "libpetsc4py.pyx":228
+  /* "libpetsc4py.pyx":230
  * 
  * 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 *)__pyx_ptype_8petsc4py_5PETSc_KSP), __pyx_empty_tuple); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 228, __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, 230, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_KSP)))) __PYX_ERR(0, 228, __pyx_L1_error)
+  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_KSP)))) __PYX_ERR(0, 230, __pyx_L1_error)
   __pyx_v_ob = ((struct PyPetscKSPObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":229
+  /* "libpetsc4py.pyx":231
  * cdef inline KSP KSP_(PetscKSP p):
  *     cdef KSP ob = KSP.__new__(KSP)
  *     ob.obj[0] = newRef(p)             # <<<<<<<<<<<<<<
@@ -3432,7 +3746,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":230
+  /* "libpetsc4py.pyx":232
  *     cdef KSP ob = KSP.__new__(KSP)
  *     ob.obj[0] = newRef(p)
  *     return ob             # <<<<<<<<<<<<<<
@@ -3444,7 +3758,7 @@ static CYTHON_INLINE struct PyPetscKSPObject *__pyx_f_11libpetsc4py_KSP_(KSP __p
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":227
+  /* "libpetsc4py.pyx":229
  *     return ob
  * 
  * cdef inline KSP KSP_(PetscKSP p):             # <<<<<<<<<<<<<<
@@ -3464,7 +3778,7 @@ static CYTHON_INLINE struct PyPetscKSPObject *__pyx_f_11libpetsc4py_KSP_(KSP __p
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":232
+/* "libpetsc4py.pyx":234
  *     return ob
  * 
  * cdef inline SNES SNES_(PetscSNES p):             # <<<<<<<<<<<<<<
@@ -3479,20 +3793,20 @@ static CYTHON_INLINE struct PyPetscSNESObject *__pyx_f_11libpetsc4py_SNES_(SNES
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("SNES_", 0);
 
-  /* "libpetsc4py.pyx":233
+  /* "libpetsc4py.pyx":235
  * 
  * 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 *)__pyx_ptype_8petsc4py_5PETSc_SNES), __pyx_empty_tuple); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 233, __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, 235, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_SNES)))) __PYX_ERR(0, 233, __pyx_L1_error)
+  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_SNES)))) __PYX_ERR(0, 235, __pyx_L1_error)
   __pyx_v_ob = ((struct PyPetscSNESObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":234
+  /* "libpetsc4py.pyx":236
  * cdef inline SNES SNES_(PetscSNES p):
  *     cdef SNES ob = SNES.__new__(SNES)
  *     ob.obj[0] = newRef(p)             # <<<<<<<<<<<<<<
@@ -3501,7 +3815,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":235
+  /* "libpetsc4py.pyx":237
  *     cdef SNES ob = SNES.__new__(SNES)
  *     ob.obj[0] = newRef(p)
  *     return ob             # <<<<<<<<<<<<<<
@@ -3513,7 +3827,7 @@ static CYTHON_INLINE struct PyPetscSNESObject *__pyx_f_11libpetsc4py_SNES_(SNES
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":232
+  /* "libpetsc4py.pyx":234
  *     return ob
  * 
  * cdef inline SNES SNES_(PetscSNES p):             # <<<<<<<<<<<<<<
@@ -3533,7 +3847,7 @@ static CYTHON_INLINE struct PyPetscSNESObject *__pyx_f_11libpetsc4py_SNES_(SNES
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":237
+/* "libpetsc4py.pyx":239
  *     return ob
  * 
  * cdef inline TS TS_(PetscTS p):             # <<<<<<<<<<<<<<
@@ -3548,20 +3862,20 @@ static CYTHON_INLINE struct PyPetscTSObject *__pyx_f_11libpetsc4py_TS_(TS __pyx_
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("TS_", 0);
 
-  /* "libpetsc4py.pyx":238
+  /* "libpetsc4py.pyx":240
  * 
  * 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 *)__pyx_ptype_8petsc4py_5PETSc_TS), __pyx_empty_tuple); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 238, __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, 240, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_TS)))) __PYX_ERR(0, 238, __pyx_L1_error)
+  if (!(likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_TS)))) __PYX_ERR(0, 240, __pyx_L1_error)
   __pyx_v_ob = ((struct PyPetscTSObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":239
+  /* "libpetsc4py.pyx":241
  * cdef inline TS TS_(PetscTS p):
  *     cdef TS ob = TS.__new__(TS)
  *     ob.obj[0] = newRef(p)             # <<<<<<<<<<<<<<
@@ -3570,7 +3884,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":240
+  /* "libpetsc4py.pyx":242
  *     cdef TS ob = TS.__new__(TS)
  *     ob.obj[0] = newRef(p)
  *     return ob             # <<<<<<<<<<<<<<
@@ -3582,7 +3896,7 @@ static CYTHON_INLINE struct PyPetscTSObject *__pyx_f_11libpetsc4py_TS_(TS __pyx_
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":237
+  /* "libpetsc4py.pyx":239
  *     return ob
  * 
  * cdef inline TS TS_(PetscTS p):             # <<<<<<<<<<<<<<
@@ -3602,7 +3916,7 @@ static CYTHON_INLINE struct PyPetscTSObject *__pyx_f_11libpetsc4py_TS_(TS __pyx_
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":247
+/* "libpetsc4py.pyx":249
  *     ctypedef char const_char "const char"
  * 
  * cdef inline object bytes2str(const_char p[]):             # <<<<<<<<<<<<<<
@@ -3619,7 +3933,7 @@ static CYTHON_INLINE PyObject *__pyx_f_11libpetsc4py_bytes2str(const char *__pyx
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("bytes2str", 0);
 
-  /* "libpetsc4py.pyx":248
+  /* "libpetsc4py.pyx":250
  * 
  * cdef inline object bytes2str(const_char p[]):
  *     if p == NULL: return None             # <<<<<<<<<<<<<<
@@ -3634,19 +3948,19 @@ static CYTHON_INLINE PyObject *__pyx_f_11libpetsc4py_bytes2str(const char *__pyx
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":249
+  /* "libpetsc4py.pyx":251
  * 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_ERR(0, 249, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyBytes_FromString(((char *)__pyx_v_p)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 251, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_s = ((PyObject*)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":250
+  /* "libpetsc4py.pyx":252
  *     if p == NULL: return None
  *     cdef bytes s = <char*>p
  *     if not isinstance(s, str):             # <<<<<<<<<<<<<<
@@ -3657,7 +3971,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":251
+    /* "libpetsc4py.pyx":253
  *     cdef bytes s = <char*>p
  *     if not isinstance(s, str):
  *         return s.decode()             # <<<<<<<<<<<<<<
@@ -3665,13 +3979,13 @@ 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_ERR(0, 251, __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, 253, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_r = __pyx_t_2;
     __pyx_t_2 = 0;
     goto __pyx_L0;
 
-    /* "libpetsc4py.pyx":250
+    /* "libpetsc4py.pyx":252
  *     if p == NULL: return None
  *     cdef bytes s = <char*>p
  *     if not isinstance(s, str):             # <<<<<<<<<<<<<<
@@ -3680,7 +3994,7 @@ static CYTHON_INLINE PyObject *__pyx_f_11libpetsc4py_bytes2str(const char *__pyx
  */
   }
 
-  /* "libpetsc4py.pyx":253
+  /* "libpetsc4py.pyx":255
  *         return s.decode()
  *     else:
  *         return s             # <<<<<<<<<<<<<<
@@ -3694,7 +4008,7 @@ static CYTHON_INLINE PyObject *__pyx_f_11libpetsc4py_bytes2str(const char *__pyx
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":247
+  /* "libpetsc4py.pyx":249
  *     ctypedef char const_char "const char"
  * 
  * cdef inline object bytes2str(const_char p[]):             # <<<<<<<<<<<<<<
@@ -3714,7 +4028,7 @@ static CYTHON_INLINE PyObject *__pyx_f_11libpetsc4py_bytes2str(const char *__pyx
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":255
+/* "libpetsc4py.pyx":257
  *         return s
  * 
  * cdef object parse_url(object url):             # <<<<<<<<<<<<<<
@@ -3734,21 +4048,21 @@ static PyObject *__pyx_f_11libpetsc4py_parse_url(PyObject *__pyx_v_url) {
   PyObject *(*__pyx_t_5)(PyObject *);
   __Pyx_RefNannySetupContext("parse_url", 0);
 
-  /* "libpetsc4py.pyx":256
+  /* "libpetsc4py.pyx":258
  * 
  * 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_ERR(0, 256, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_url, __pyx_n_s_rsplit); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __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_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__2, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 258, __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))) {
     PyObject* sequence = __pyx_t_2;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -3756,9 +4070,9 @@ 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_ERR(0, 256, __pyx_L1_error)
+      __PYX_ERR(0, 258, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
@@ -3769,15 +4083,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_ERR(0, 256, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 258, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 256, __pyx_L1_error)
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 258, __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_ERR(0, 256, __pyx_L1_error)
+    __pyx_t_4 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 258, __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;
@@ -3785,7 +4099,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_ERR(0, 256, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 2) < 0) __PYX_ERR(0, 258, __pyx_L1_error)
     __pyx_t_5 = NULL;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     goto __pyx_L4_unpacking_done;
@@ -3793,7 +4107,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_ERR(0, 256, __pyx_L1_error)
+    __PYX_ERR(0, 258, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_path = __pyx_t_1;
@@ -3801,7 +4115,7 @@ static PyObject *__pyx_f_11libpetsc4py_parse_url(PyObject *__pyx_v_url) {
   __pyx_v_name = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "libpetsc4py.pyx":257
+  /* "libpetsc4py.pyx":259
  * cdef object parse_url(object url):
  *     path, name = url.rsplit(":", 1)
  *     return (path, name)             # <<<<<<<<<<<<<<
@@ -3809,7 +4123,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_ERR(0, 257, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 259, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_v_path);
   __Pyx_GIVEREF(__pyx_v_path);
@@ -3821,7 +4135,7 @@ static PyObject *__pyx_f_11libpetsc4py_parse_url(PyObject *__pyx_v_url) {
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":255
+  /* "libpetsc4py.pyx":257
  *         return s
  * 
  * cdef object parse_url(object url):             # <<<<<<<<<<<<<<
@@ -3845,7 +4159,7 @@ static PyObject *__pyx_f_11libpetsc4py_parse_url(PyObject *__pyx_v_url) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":261
+/* "libpetsc4py.pyx":263
  * cdef dict module_cache = {}
  * 
  * cdef object load_module(object path):             # <<<<<<<<<<<<<<
@@ -3879,7 +4193,7 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
   PyObject *__pyx_t_17 = NULL;
   __Pyx_RefNannySetupContext("load_module", 0);
 
-  /* "libpetsc4py.pyx":262
+  /* "libpetsc4py.pyx":264
  * 
  * cdef object load_module(object path):
  *     if path in module_cache:             # <<<<<<<<<<<<<<
@@ -3888,13 +4202,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_ERR(0, 262, __pyx_L1_error)
+    __PYX_ERR(0, 264, __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_1 = (__Pyx_PyDict_ContainsTF(__pyx_v_path, __pyx_v_11libpetsc4py_module_cache, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 264, __pyx_L1_error)
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "libpetsc4py.pyx":263
+    /* "libpetsc4py.pyx":265
  * cdef object load_module(object path):
  *     if path in module_cache:
  *         return module_cache[path]             # <<<<<<<<<<<<<<
@@ -3904,15 +4218,15 @@ 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_ERR(0, 263, __pyx_L1_error)
+      __PYX_ERR(0, 265, __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_t_3 = __Pyx_PyDict_GetItem(__pyx_v_11libpetsc4py_module_cache, __pyx_v_path); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 265, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
 
-    /* "libpetsc4py.pyx":262
+    /* "libpetsc4py.pyx":264
  * 
  * cdef object load_module(object path):
  *     if path in module_cache:             # <<<<<<<<<<<<<<
@@ -3921,37 +4235,37 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
  */
   }
 
-  /* "libpetsc4py.pyx":264
+  /* "libpetsc4py.pyx":266
  *     if path in module_cache:
  *         return module_cache[path]
  *     module = PyModule_New("__petsc__")             # <<<<<<<<<<<<<<
  *     module.__file__ = path
  *     module.__package__ = None
  */
-  __pyx_t_3 = PyModule_New(((char *)"__petsc__")); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 264, __pyx_L1_error)
+  __pyx_t_3 = PyModule_New(((char *)"__petsc__")); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 266, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_module = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "libpetsc4py.pyx":265
+  /* "libpetsc4py.pyx":267
  *         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_ERR(0, 265, __pyx_L1_error)
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_module, __pyx_n_s_file, __pyx_v_path) < 0) __PYX_ERR(0, 267, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":266
+  /* "libpetsc4py.pyx":268
  *     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_ERR(0, 266, __pyx_L1_error)
+  if (__Pyx_PyObject_SetAttrStr(__pyx_v_module, __pyx_n_s_package, Py_None) < 0) __PYX_ERR(0, 268, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":267
+  /* "libpetsc4py.pyx":269
  *     module.__file__ = path
  *     module.__package__ = None
  *     module_cache[path] = module             # <<<<<<<<<<<<<<
@@ -3960,11 +4274,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_ERR(0, 267, __pyx_L1_error)
+    __PYX_ERR(0, 269, __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)
+  if (unlikely(PyDict_SetItem(__pyx_v_11libpetsc4py_module_cache, __pyx_v_path, __pyx_v_module) < 0)) __PYX_ERR(0, 269, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":268
+  /* "libpetsc4py.pyx":270
  *     module.__package__ = None
  *     module_cache[path] = module
  *     try:             # <<<<<<<<<<<<<<
@@ -3980,14 +4294,14 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
     __Pyx_XGOTREF(__pyx_t_6);
     /*try:*/ {
 
-      /* "libpetsc4py.pyx":269
+      /* "libpetsc4py.pyx":271
  *     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_ERR(0, 269, __pyx_L4_error)
+      __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 271, __pyx_L4_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_INCREF(__pyx_v_path);
       __Pyx_GIVEREF(__pyx_v_path);
@@ -3995,13 +4309,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_ERR(0, 269, __pyx_L4_error)
+      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_open, __pyx_t_3, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 271, __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":270
+      /* "libpetsc4py.pyx":272
  *     try:
  *         source = open(path, 'rU')
  *         try:             # <<<<<<<<<<<<<<
@@ -4010,17 +4324,17 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
  */
       /*try:*/ {
 
-        /* "libpetsc4py.pyx":271
+        /* "libpetsc4py.pyx":273
  *         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_ERR(0, 271, __pyx_L15_error)
+        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_source, __pyx_n_s_read); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 273, __pyx_L11_error)
         __Pyx_GOTREF(__pyx_t_3);
         __pyx_t_8 = NULL;
-        if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
           __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
           if (likely(__pyx_t_8)) {
             PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -4030,14 +4344,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_ERR(0, 271, __pyx_L15_error)
+          __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 273, __pyx_L11_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_ERR(0, 271, __pyx_L15_error)
+          __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 273, __pyx_L11_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_ERR(0, 271, __pyx_L15_error)
+        __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 273, __pyx_L11_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_GIVEREF(__pyx_t_7);
         PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_7);
@@ -4048,14 +4362,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_ERR(0, 271, __pyx_L15_error)
+        __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_compile, __pyx_t_3, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 273, __pyx_L11_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":273
+      /* "libpetsc4py.pyx":275
  *             code = compile(source.read(), path, 'exec')
  *         finally:
  *             source.close()             # <<<<<<<<<<<<<<
@@ -4064,10 +4378,10 @@ 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_ERR(0, 273, __pyx_L4_error)
+          __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_source, __pyx_n_s_close); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 275, __pyx_L4_error)
           __Pyx_GOTREF(__pyx_t_3);
           __pyx_t_8 = NULL;
-          if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
             __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
             if (likely(__pyx_t_8)) {
               PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -4077,19 +4391,19 @@ 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_ERR(0, 273, __pyx_L4_error)
+            __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 275, __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_ERR(0, 273, __pyx_L4_error)
+            __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 275, __pyx_L4_error)
           }
           __Pyx_GOTREF(__pyx_t_7);
           __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
           __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
-          goto __pyx_L16;
+          goto __pyx_L12;
         }
         /*exception exit:*/{
           __Pyx_PyThreadState_declare
-          __pyx_L15_error:;
+          __pyx_L11_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;
@@ -4105,10 +4419,10 @@ 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_ERR(0, 273, __pyx_L20_error)
+            __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_source, __pyx_n_s_close); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 275, __pyx_L14_error)
             __Pyx_GOTREF(__pyx_t_3);
             __pyx_t_8 = NULL;
-            if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+            if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
               __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_3);
               if (likely(__pyx_t_8)) {
                 PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -4118,16 +4432,15 @@ 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_ERR(0, 273, __pyx_L20_error)
+              __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 275, __pyx_L14_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_ERR(0, 273, __pyx_L20_error)
+              __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 275, __pyx_L14_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);
@@ -4141,8 +4454,7 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
           __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_lineno = __pyx_t_9; __pyx_clineno = __pyx_t_10; __pyx_filename = __pyx_t_11;
           goto __pyx_L4_error;
-          __pyx_L20_error:;
-          __Pyx_PyThreadState_assign
+          __pyx_L14_error:;
           if (PY_MAJOR_VERSION >= 3) {
             __Pyx_XGIVEREF(__pyx_t_15);
             __Pyx_XGIVEREF(__pyx_t_16);
@@ -4155,22 +4467,22 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
           __pyx_t_15 = 0; __pyx_t_16 = 0; __pyx_t_17 = 0;
           goto __pyx_L4_error;
         }
-        __pyx_L16:;
+        __pyx_L12:;
       }
 
-      /* "libpetsc4py.pyx":274
+      /* "libpetsc4py.pyx":276
  *         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_ERR(0, 274, __pyx_L4_error)
+      __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_module, __pyx_n_s_dict); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 276, __pyx_L4_error)
       __Pyx_GOTREF(__pyx_t_7);
       __pyx_v_namespace = __pyx_t_7;
       __pyx_t_7 = 0;
 
-      /* "libpetsc4py.pyx":275
+      /* "libpetsc4py.pyx":277
  *             source.close()
  *         namespace = module.__dict__
  *         exec code in namespace             # <<<<<<<<<<<<<<
@@ -4178,11 +4490,11 @@ 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_ERR(0, 275, __pyx_L4_error)
+      if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 277, __pyx_L4_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-      /* "libpetsc4py.pyx":268
+      /* "libpetsc4py.pyx":270
  *     module.__package__ = None
  *     module_cache[path] = module
  *     try:             # <<<<<<<<<<<<<<
@@ -4193,14 +4505,13 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
     __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;
+    goto __pyx_L9_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":276
+    /* "libpetsc4py.pyx":278
  *         namespace = module.__dict__
  *         exec code in namespace
  *     except:             # <<<<<<<<<<<<<<
@@ -4209,12 +4520,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_ERR(0, 276, __pyx_L6_except_error)
+      if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_3, &__pyx_t_8) < 0) __PYX_ERR(0, 278, __pyx_L6_except_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_GOTREF(__pyx_t_8);
 
-      /* "libpetsc4py.pyx":277
+      /* "libpetsc4py.pyx":279
  *         exec code in namespace
  *     except:
  *         del module_cache[path]             # <<<<<<<<<<<<<<
@@ -4223,11 +4534,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_ERR(0, 277, __pyx_L6_except_error)
+        __PYX_ERR(0, 279, __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)
+      if (unlikely(PyDict_DelItem(__pyx_v_11libpetsc4py_module_cache, __pyx_v_path) < 0)) __PYX_ERR(0, 279, __pyx_L6_except_error)
 
-      /* "libpetsc4py.pyx":278
+      /* "libpetsc4py.pyx":280
  *     except:
  *         del module_cache[path]
  *         raise             # <<<<<<<<<<<<<<
@@ -4239,27 +4550,26 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
       __Pyx_XGIVEREF(__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_ERR(0, 278, __pyx_L6_except_error)
+      __PYX_ERR(0, 280, __pyx_L6_except_error)
     }
     __pyx_L6_except_error:;
 
-    /* "libpetsc4py.pyx":268
+    /* "libpetsc4py.pyx":270
  *     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);
     __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
     goto __pyx_L1_error;
-    __pyx_L11_try_end:;
+    __pyx_L9_try_end:;
   }
 
-  /* "libpetsc4py.pyx":279
+  /* "libpetsc4py.pyx":281
  *         del module_cache[path]
  *         raise
  *     return module             # <<<<<<<<<<<<<<
@@ -4271,7 +4581,7 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
   __pyx_r = __pyx_v_module;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":261
+  /* "libpetsc4py.pyx":263
  * cdef dict module_cache = {}
  * 
  * cdef object load_module(object path):             # <<<<<<<<<<<<<<
@@ -4296,7 +4606,7 @@ static PyObject *__pyx_f_11libpetsc4py_load_module(PyObject *__pyx_v_path) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":289
+/* "libpetsc4py.pyx":291
  *     cdef bytes  name
  * 
  *     def __getattr__(self, attr):             # <<<<<<<<<<<<<<
@@ -4324,7 +4634,7 @@ static PyObject *__pyx_pf_11libpetsc4py_6_PyObj___getattr__(struct __pyx_obj_11l
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("__getattr__", 0);
 
-  /* "libpetsc4py.pyx":290
+  /* "libpetsc4py.pyx":292
  * 
  *     def __getattr__(self, attr):
  *         return getattr(self.self, attr, None)             # <<<<<<<<<<<<<<
@@ -4334,14 +4644,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_ERR(0, 290, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_GetAttr3(__pyx_t_1, __pyx_v_attr, Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 292, __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":289
+  /* "libpetsc4py.pyx":291
  *     cdef bytes  name
  * 
  *     def __getattr__(self, attr):             # <<<<<<<<<<<<<<
@@ -4361,7 +4671,7 @@ static PyObject *__pyx_pf_11libpetsc4py_6_PyObj___getattr__(struct __pyx_obj_11l
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":292
+/* "libpetsc4py.pyx":294
  *         return getattr(self.self, attr, None)
  * 
  *     cdef int setcontext(self, void *ctx, Object base) except -1:             # <<<<<<<<<<<<<<
@@ -4382,7 +4692,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setcontext(struct __pyx_obj_11libpetsc4
   PyObject *__pyx_t_6 = NULL;
   __Pyx_RefNannySetupContext("setcontext", 0);
 
-  /* "libpetsc4py.pyx":294
+  /* "libpetsc4py.pyx":296
  *     cdef int setcontext(self, void *ctx, Object base) except -1:
  *         #
  *         if ctx == <void*>self.self:             # <<<<<<<<<<<<<<
@@ -4392,7 +4702,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":295
+    /* "libpetsc4py.pyx":297
  *         #
  *         if ctx == <void*>self.self:
  *             return 0             # <<<<<<<<<<<<<<
@@ -4402,7 +4712,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setcontext(struct __pyx_obj_11libpetsc4
     __pyx_r = 0;
     goto __pyx_L0;
 
-    /* "libpetsc4py.pyx":294
+    /* "libpetsc4py.pyx":296
  *     cdef int setcontext(self, void *ctx, Object base) except -1:
  *         #
  *         if ctx == <void*>self.self:             # <<<<<<<<<<<<<<
@@ -4411,19 +4721,19 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setcontext(struct __pyx_obj_11libpetsc4
  */
   }
 
-  /* "libpetsc4py.pyx":297
+  /* "libpetsc4py.pyx":299
  *             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_ERR(0, 297, __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, 299, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_destroy = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":298
+  /* "libpetsc4py.pyx":300
  *         #
  *         cdef object destroy = self.destroy
  *         if destroy is not None:             # <<<<<<<<<<<<<<
@@ -4434,7 +4744,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":299
+    /* "libpetsc4py.pyx":301
  *         cdef object destroy = self.destroy
  *         if destroy is not None:
  *             destroy(base)             # <<<<<<<<<<<<<<
@@ -4443,7 +4753,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setcontext(struct __pyx_obj_11libpetsc4
  */
     __Pyx_INCREF(__pyx_v_destroy);
     __pyx_t_4 = __pyx_v_destroy; __pyx_t_5 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && 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);
@@ -4453,23 +4763,41 @@ 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_ERR(0, 299, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_4, ((PyObject *)__pyx_v_base)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 301, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
     } else {
-      __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_ERR(0, 299, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_5, ((PyObject *)__pyx_v_base)};
+        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 301, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_5, ((PyObject *)__pyx_v_base)};
+        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 301, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+      } else
+      #endif
+      {
+        __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 301, __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_ERR(0, 301, __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":300
+    /* "libpetsc4py.pyx":302
  *         if destroy is not None:
  *             destroy(base)
  *             destroy = None             # <<<<<<<<<<<<<<
@@ -4479,7 +4807,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setcontext(struct __pyx_obj_11libpetsc4
     __Pyx_INCREF(Py_None);
     __Pyx_DECREF_SET(__pyx_v_destroy, Py_None);
 
-    /* "libpetsc4py.pyx":298
+    /* "libpetsc4py.pyx":300
  *         #
  *         cdef object destroy = self.destroy
  *         if destroy is not None:             # <<<<<<<<<<<<<<
@@ -4488,7 +4816,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setcontext(struct __pyx_obj_11libpetsc4
  */
   }
 
-  /* "libpetsc4py.pyx":302
+  /* "libpetsc4py.pyx":304
  *             destroy = None
  *         #
  *         if ctx == NULL:             # <<<<<<<<<<<<<<
@@ -4498,7 +4826,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":303
+    /* "libpetsc4py.pyx":305
  *         #
  *         if ctx == NULL:
  *             self.self = None             # <<<<<<<<<<<<<<
@@ -4511,7 +4839,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":304
+    /* "libpetsc4py.pyx":306
  *         if ctx == NULL:
  *             self.self = None
  *             self.name = None             # <<<<<<<<<<<<<<
@@ -4524,7 +4852,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":305
+    /* "libpetsc4py.pyx":307
  *             self.self = None
  *             self.name = None
  *             return 0             # <<<<<<<<<<<<<<
@@ -4534,7 +4862,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setcontext(struct __pyx_obj_11libpetsc4
     __pyx_r = 0;
     goto __pyx_L0;
 
-    /* "libpetsc4py.pyx":302
+    /* "libpetsc4py.pyx":304
  *             destroy = None
  *         #
  *         if ctx == NULL:             # <<<<<<<<<<<<<<
@@ -4543,7 +4871,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setcontext(struct __pyx_obj_11libpetsc4
  */
   }
 
-  /* "libpetsc4py.pyx":307
+  /* "libpetsc4py.pyx":309
  *             return 0
  *         #
  *         self.self = <object>ctx             # <<<<<<<<<<<<<<
@@ -4558,7 +4886,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":308
+  /* "libpetsc4py.pyx":310
  *         #
  *         self.self = <object>ctx
  *         self.name = None             # <<<<<<<<<<<<<<
@@ -4571,19 +4899,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":309
+  /* "libpetsc4py.pyx":311
  *         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_ERR(0, 309, __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, 311, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_create = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":310
+  /* "libpetsc4py.pyx":312
  *         self.name = None
  *         cdef object create = self.create
  *         if create is not None:             # <<<<<<<<<<<<<<
@@ -4594,7 +4922,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":311
+    /* "libpetsc4py.pyx":313
  *         cdef object create = self.create
  *         if create is not None:
  *             create(base)             # <<<<<<<<<<<<<<
@@ -4603,7 +4931,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setcontext(struct __pyx_obj_11libpetsc4
  */
     __Pyx_INCREF(__pyx_v_create);
     __pyx_t_4 = __pyx_v_create; __pyx_t_6 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
       __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
       if (likely(__pyx_t_6)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -4613,23 +4941,41 @@ 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_ERR(0, 311, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_4, ((PyObject *)__pyx_v_base)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 313, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
     } else {
-      __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_ERR(0, 311, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_6, ((PyObject *)__pyx_v_base)};
+        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 313, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_6, ((PyObject *)__pyx_v_base)};
+        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 313, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+      } else
+      #endif
+      {
+        __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 313, __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_ERR(0, 313, __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":312
+    /* "libpetsc4py.pyx":314
  *         if create is not None:
  *             create(base)
  *             create = None             # <<<<<<<<<<<<<<
@@ -4639,7 +4985,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setcontext(struct __pyx_obj_11libpetsc4
     __Pyx_INCREF(Py_None);
     __Pyx_DECREF_SET(__pyx_v_create, Py_None);
 
-    /* "libpetsc4py.pyx":310
+    /* "libpetsc4py.pyx":312
  *         self.name = None
  *         cdef object create = self.create
  *         if create is not None:             # <<<<<<<<<<<<<<
@@ -4648,7 +4994,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setcontext(struct __pyx_obj_11libpetsc4
  */
   }
 
-  /* "libpetsc4py.pyx":313
+  /* "libpetsc4py.pyx":315
  *             create(base)
  *             create = None
  *         return 0             # <<<<<<<<<<<<<<
@@ -4658,7 +5004,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setcontext(struct __pyx_obj_11libpetsc4
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":292
+  /* "libpetsc4py.pyx":294
  *         return getattr(self.self, attr, None)
  * 
  *     cdef int setcontext(self, void *ctx, Object base) except -1:             # <<<<<<<<<<<<<<
@@ -4681,7 +5027,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setcontext(struct __pyx_obj_11libpetsc4
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":315
+/* "libpetsc4py.pyx":317
  *         return 0
  * 
  *     cdef int getcontext(self, void **ctx) except -1:             # <<<<<<<<<<<<<<
@@ -4696,7 +5042,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_getcontext(struct __pyx_obj_11libpetsc4
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getcontext", 0);
 
-  /* "libpetsc4py.pyx":316
+  /* "libpetsc4py.pyx":318
  * 
  *     cdef int getcontext(self, void **ctx) except -1:
  *         if ctx == NULL: return 0             # <<<<<<<<<<<<<<
@@ -4709,7 +5055,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_getcontext(struct __pyx_obj_11libpetsc4
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":317
+  /* "libpetsc4py.pyx":319
  *     cdef int getcontext(self, void **ctx) except -1:
  *         if ctx == NULL: return 0
  *         if self.self is not None:             # <<<<<<<<<<<<<<
@@ -4720,7 +5066,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":318
+    /* "libpetsc4py.pyx":320
  *         if ctx == NULL: return 0
  *         if self.self is not None:
  *             ctx[0] = <void*> self.self             # <<<<<<<<<<<<<<
@@ -4729,7 +5075,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_getcontext(struct __pyx_obj_11libpetsc4
  */
     (__pyx_v_ctx[0]) = ((void *)__pyx_v_self->self);
 
-    /* "libpetsc4py.pyx":317
+    /* "libpetsc4py.pyx":319
  *     cdef int getcontext(self, void **ctx) except -1:
  *         if ctx == NULL: return 0
  *         if self.self is not None:             # <<<<<<<<<<<<<<
@@ -4739,7 +5085,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_getcontext(struct __pyx_obj_11libpetsc4
     goto __pyx_L4;
   }
 
-  /* "libpetsc4py.pyx":320
+  /* "libpetsc4py.pyx":322
  *             ctx[0] = <void*> self.self
  *         else:
  *             ctx[0] = NULL             # <<<<<<<<<<<<<<
@@ -4751,7 +5097,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_getcontext(struct __pyx_obj_11libpetsc4
   }
   __pyx_L4:;
 
-  /* "libpetsc4py.pyx":321
+  /* "libpetsc4py.pyx":323
  *         else:
  *             ctx[0] = NULL
  *         return 0             # <<<<<<<<<<<<<<
@@ -4761,7 +5107,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_getcontext(struct __pyx_obj_11libpetsc4
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":315
+  /* "libpetsc4py.pyx":317
  *         return 0
  * 
  *     cdef int getcontext(self, void **ctx) except -1:             # <<<<<<<<<<<<<<
@@ -4775,7 +5121,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_getcontext(struct __pyx_obj_11libpetsc4
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":323
+/* "libpetsc4py.pyx":325
  *         return 0
  * 
  *     cdef int setname(self, char name[]) except -1:             # <<<<<<<<<<<<<<
@@ -4791,7 +5137,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setname(struct __pyx_obj_11libpetsc4py_
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("setname", 0);
 
-  /* "libpetsc4py.pyx":324
+  /* "libpetsc4py.pyx":326
  * 
  *     cdef int setname(self, char name[]) except -1:
  *         if name != NULL and name[0] != 0:             # <<<<<<<<<<<<<<
@@ -4809,14 +5155,14 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setname(struct __pyx_obj_11libpetsc4py_
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "libpetsc4py.pyx":325
+    /* "libpetsc4py.pyx":327
  *     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_ERR(0, 325, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 327, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_3);
     __Pyx_GOTREF(__pyx_v_self->name);
@@ -4824,7 +5170,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setname(struct __pyx_obj_11libpetsc4py_
     __pyx_v_self->name = ((PyObject*)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "libpetsc4py.pyx":324
+    /* "libpetsc4py.pyx":326
  * 
  *     cdef int setname(self, char name[]) except -1:
  *         if name != NULL and name[0] != 0:             # <<<<<<<<<<<<<<
@@ -4834,7 +5180,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setname(struct __pyx_obj_11libpetsc4py_
     goto __pyx_L3;
   }
 
-  /* "libpetsc4py.pyx":327
+  /* "libpetsc4py.pyx":329
  *             self.name = name
  *         else:
  *             self.name = None             # <<<<<<<<<<<<<<
@@ -4850,7 +5196,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setname(struct __pyx_obj_11libpetsc4py_
   }
   __pyx_L3:;
 
-  /* "libpetsc4py.pyx":328
+  /* "libpetsc4py.pyx":330
  *         else:
  *             self.name = None
  *         return 0             # <<<<<<<<<<<<<<
@@ -4860,7 +5206,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setname(struct __pyx_obj_11libpetsc4py_
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":323
+  /* "libpetsc4py.pyx":325
  *         return 0
  * 
  *     cdef int setname(self, char name[]) except -1:             # <<<<<<<<<<<<<<
@@ -4878,7 +5224,7 @@ static int __pyx_f_11libpetsc4py_6_PyObj_setname(struct __pyx_obj_11libpetsc4py_
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":330
+/* "libpetsc4py.pyx":332
  *         return 0
  * 
  *     cdef char* getname(self) except? NULL:             # <<<<<<<<<<<<<<
@@ -4902,7 +5248,7 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
   PyObject *__pyx_t_6 = NULL;
   __Pyx_RefNannySetupContext("getname", 0);
 
-  /* "libpetsc4py.pyx":331
+  /* "libpetsc4py.pyx":333
  * 
  *     cdef char* getname(self) except? NULL:
  *         if self.self is None:             # <<<<<<<<<<<<<<
@@ -4913,7 +5259,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":332
+    /* "libpetsc4py.pyx":334
  *     cdef char* getname(self) except? NULL:
  *         if self.self is None:
  *             return NULL             # <<<<<<<<<<<<<<
@@ -4923,7 +5269,7 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
     __pyx_r = NULL;
     goto __pyx_L0;
 
-    /* "libpetsc4py.pyx":331
+    /* "libpetsc4py.pyx":333
  * 
  *     cdef char* getname(self) except? NULL:
  *         if self.self is None:             # <<<<<<<<<<<<<<
@@ -4932,7 +5278,7 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
  */
   }
 
-  /* "libpetsc4py.pyx":333
+  /* "libpetsc4py.pyx":335
  *         if self.self is None:
  *             return NULL
  *         if self.name is not None:             # <<<<<<<<<<<<<<
@@ -4943,18 +5289,22 @@ 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":334
+    /* "libpetsc4py.pyx":336
  *             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_ERR(0, 334, __pyx_L1_error)
+    if (unlikely(__pyx_v_self->name == Py_None)) {
+      PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
+      __PYX_ERR(0, 336, __pyx_L1_error)
+    }
+    __pyx_t_3 = __Pyx_PyBytes_AsWritableString(__pyx_v_self->name); if (unlikely((!__pyx_t_3) && PyErr_Occurred())) __PYX_ERR(0, 336, __pyx_L1_error)
     __pyx_r = __pyx_t_3;
     goto __pyx_L0;
 
-    /* "libpetsc4py.pyx":333
+    /* "libpetsc4py.pyx":335
  *         if self.self is None:
  *             return NULL
  *         if self.name is not None:             # <<<<<<<<<<<<<<
@@ -4963,7 +5313,7 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
  */
   }
 
-  /* "libpetsc4py.pyx":335
+  /* "libpetsc4py.pyx":337
  *         if self.name is not None:
  *             return self.name
  *         cdef ctx = self.self             # <<<<<<<<<<<<<<
@@ -4975,7 +5325,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":336
+  /* "libpetsc4py.pyx":338
  *             return self.name
  *         cdef ctx = self.self
  *         cdef name = None             # <<<<<<<<<<<<<<
@@ -4985,7 +5335,7 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
   __Pyx_INCREF(Py_None);
   __pyx_v_name = Py_None;
 
-  /* "libpetsc4py.pyx":337
+  /* "libpetsc4py.pyx":339
  *         cdef ctx = self.self
  *         cdef name = None
  *         if PyModule_Check(ctx):             # <<<<<<<<<<<<<<
@@ -4995,19 +5345,19 @@ 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":338
+    /* "libpetsc4py.pyx":340
  *         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_ERR(0, 338, __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, 340, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "libpetsc4py.pyx":337
+    /* "libpetsc4py.pyx":339
  *         cdef ctx = self.self
  *         cdef name = None
  *         if PyModule_Check(ctx):             # <<<<<<<<<<<<<<
@@ -5017,7 +5367,7 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
     goto __pyx_L5;
   }
 
-  /* "libpetsc4py.pyx":340
+  /* "libpetsc4py.pyx":342
  *             name = getattr(ctx, '__name__', None)
  *         else:
  *             modname = getattr(ctx, '__module__', None)             # <<<<<<<<<<<<<<
@@ -5025,12 +5375,12 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
  *             cls = getattr(ctx, '__class__', None)
  */
   /*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_t_4 = __Pyx_GetAttr3(__pyx_v_ctx, __pyx_n_s_module, Py_None); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 342, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_v_modname = __pyx_t_4;
     __pyx_t_4 = 0;
 
-    /* "libpetsc4py.pyx":341
+    /* "libpetsc4py.pyx":343
  *         else:
  *             modname = getattr(ctx, '__module__', None)
  *             clsname = None             # <<<<<<<<<<<<<<
@@ -5040,64 +5390,64 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
     __Pyx_INCREF(Py_None);
     __pyx_v_clsname = Py_None;
 
-    /* "libpetsc4py.pyx":342
+    /* "libpetsc4py.pyx":344
  *             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_ERR(0, 342, __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, 344, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_v_cls = __pyx_t_4;
     __pyx_t_4 = 0;
 
-    /* "libpetsc4py.pyx":343
+    /* "libpetsc4py.pyx":345
  *             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_ERR(0, 343, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_cls); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 345, __pyx_L1_error)
     if (__pyx_t_1) {
 
-      /* "libpetsc4py.pyx":344
+      /* "libpetsc4py.pyx":346
  *             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_ERR(0, 344, __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, 346, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF_SET(__pyx_v_clsname, __pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "libpetsc4py.pyx":345
+      /* "libpetsc4py.pyx":347
  *             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_ERR(0, 345, __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)
       __pyx_t_2 = ((!__pyx_t_1) != 0);
       if (__pyx_t_2) {
 
-        /* "libpetsc4py.pyx":346
+        /* "libpetsc4py.pyx":348
  *                 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_ERR(0, 346, __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, 348, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_DECREF_SET(__pyx_v_modname, __pyx_t_4);
         __pyx_t_4 = 0;
 
-        /* "libpetsc4py.pyx":345
+        /* "libpetsc4py.pyx":347
  *             if cls:
  *                 clsname = getattr(cls, '__name__', None)
  *                 if not modname:             # <<<<<<<<<<<<<<
@@ -5106,7 +5456,7 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
  */
       }
 
-      /* "libpetsc4py.pyx":343
+      /* "libpetsc4py.pyx":345
  *             clsname = None
  *             cls = getattr(ctx, '__class__', None)
  *             if cls:             # <<<<<<<<<<<<<<
@@ -5115,40 +5465,40 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
  */
     }
 
-    /* "libpetsc4py.pyx":347
+    /* "libpetsc4py.pyx":349
  *                 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_ERR(0, 347, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_modname); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 349, __pyx_L1_error)
     if (__pyx_t_1) {
     } else {
       __pyx_t_2 = __pyx_t_1;
       goto __pyx_L9_bool_binop_done;
     }
-    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_clsname); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 347, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_clsname); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 349, __pyx_L1_error)
     __pyx_t_2 = __pyx_t_1;
     __pyx_L9_bool_binop_done:;
     if (__pyx_t_2) {
 
-      /* "libpetsc4py.pyx":348
+      /* "libpetsc4py.pyx":350
  *                     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__3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 348, __pyx_L1_error)
+      __pyx_t_4 = PyNumber_Add(__pyx_v_modname, __pyx_kp_s__3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 350, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_5 = PyNumber_Add(__pyx_t_4, __pyx_v_clsname); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 348, __pyx_L1_error)
+      __pyx_t_5 = PyNumber_Add(__pyx_t_4, __pyx_v_clsname); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 350, __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
+      /* "libpetsc4py.pyx":349
  *                 if not modname:
  *                     modname = getattr(cls, '__module__', None)
  *             if modname and clsname:             # <<<<<<<<<<<<<<
@@ -5158,17 +5508,17 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
       goto __pyx_L8;
     }
 
-    /* "libpetsc4py.pyx":349
+    /* "libpetsc4py.pyx":351
  *             if modname and clsname:
  *                 name = modname + '.' + clsname
  *             elif clsname:             # <<<<<<<<<<<<<<
  *                 name = clsname
  *             elif modname:
  */
-    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_clsname); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 349, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_clsname); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 351, __pyx_L1_error)
     if (__pyx_t_2) {
 
-      /* "libpetsc4py.pyx":350
+      /* "libpetsc4py.pyx":352
  *                 name = modname + '.' + clsname
  *             elif clsname:
  *                 name = clsname             # <<<<<<<<<<<<<<
@@ -5178,7 +5528,7 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
       __Pyx_INCREF(__pyx_v_clsname);
       __Pyx_DECREF_SET(__pyx_v_name, __pyx_v_clsname);
 
-      /* "libpetsc4py.pyx":349
+      /* "libpetsc4py.pyx":351
  *             if modname and clsname:
  *                 name = modname + '.' + clsname
  *             elif clsname:             # <<<<<<<<<<<<<<
@@ -5188,17 +5538,17 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
       goto __pyx_L8;
     }
 
-    /* "libpetsc4py.pyx":351
+    /* "libpetsc4py.pyx":353
  *             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_ERR(0, 351, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_modname); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(0, 353, __pyx_L1_error)
     if (__pyx_t_2) {
 
-      /* "libpetsc4py.pyx":352
+      /* "libpetsc4py.pyx":354
  *                 name = clsname
  *             elif modname:
  *                 name = modname             # <<<<<<<<<<<<<<
@@ -5208,7 +5558,7 @@ 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);
 
-      /* "libpetsc4py.pyx":351
+      /* "libpetsc4py.pyx":353
  *             elif clsname:
  *                 name = clsname
  *             elif modname:             # <<<<<<<<<<<<<<
@@ -5220,7 +5570,7 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
   }
   __pyx_L5:;
 
-  /* "libpetsc4py.pyx":353
+  /* "libpetsc4py.pyx":355
  *             elif modname:
  *                 name = modname
  *         if name is not None:             # <<<<<<<<<<<<<<
@@ -5231,17 +5581,17 @@ 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":354
+    /* "libpetsc4py.pyx":356
  *                 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_ERR(0, 354, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_encode); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 356, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_6 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
       __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
       if (likely(__pyx_t_6)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -5251,21 +5601,21 @@ 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_ERR(0, 354, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 356, __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_ERR(0, 354, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 356, __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_ERR(0, 354, __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, 356, __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;
 
-    /* "libpetsc4py.pyx":353
+    /* "libpetsc4py.pyx":355
  *             elif modname:
  *                 name = modname
  *         if name is not None:             # <<<<<<<<<<<<<<
@@ -5274,7 +5624,7 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
  */
   }
 
-  /* "libpetsc4py.pyx":355
+  /* "libpetsc4py.pyx":357
  *         if name is not None:
  *             self.name = name.encode()
  *         if self.name is not None:             # <<<<<<<<<<<<<<
@@ -5285,18 +5635,22 @@ 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":356
+    /* "libpetsc4py.pyx":358
  *             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_ERR(0, 356, __pyx_L1_error)
+    if (unlikely(__pyx_v_self->name == Py_None)) {
+      PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
+      __PYX_ERR(0, 358, __pyx_L1_error)
+    }
+    __pyx_t_3 = __Pyx_PyBytes_AsWritableString(__pyx_v_self->name); if (unlikely((!__pyx_t_3) && PyErr_Occurred())) __PYX_ERR(0, 358, __pyx_L1_error)
     __pyx_r = __pyx_t_3;
     goto __pyx_L0;
 
-    /* "libpetsc4py.pyx":355
+    /* "libpetsc4py.pyx":357
  *         if name is not None:
  *             self.name = name.encode()
  *         if self.name is not None:             # <<<<<<<<<<<<<<
@@ -5305,7 +5659,7 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
  */
   }
 
-  /* "libpetsc4py.pyx":357
+  /* "libpetsc4py.pyx":359
  *         if self.name is not None:
  *             return self.name
  *         return NULL             # <<<<<<<<<<<<<<
@@ -5315,7 +5669,7 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
   __pyx_r = NULL;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":330
+  /* "libpetsc4py.pyx":332
  *         return 0
  * 
  *     cdef char* getname(self) except? NULL:             # <<<<<<<<<<<<<<
@@ -5340,7 +5694,7 @@ static char *__pyx_f_11libpetsc4py_6_PyObj_getname(struct __pyx_obj_11libpetsc4p
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":359
+/* "libpetsc4py.pyx":361
  *         return NULL
  * 
  * cdef createcontext(char name_p[]):             # <<<<<<<<<<<<<<
@@ -5367,7 +5721,7 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
   PyObject *(*__pyx_t_7)(PyObject *);
   __Pyx_RefNannySetupContext("createcontext", 0);
 
-  /* "libpetsc4py.pyx":360
+  /* "libpetsc4py.pyx":362
  * 
  * cdef createcontext(char name_p[]):
  *     if name_p == NULL: return None             # <<<<<<<<<<<<<<
@@ -5382,19 +5736,19 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":361
+  /* "libpetsc4py.pyx":363
  * 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_ERR(0, 361, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_11libpetsc4py_bytes2str(__pyx_v_name_p); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 363, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_name = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":362
+  /* "libpetsc4py.pyx":364
  *     if name_p == NULL: return None
  *     cdef name = bytes2str(name_p)
  *     cdef mod, path, modname=None             # <<<<<<<<<<<<<<
@@ -5404,7 +5758,7 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
   __Pyx_INCREF(Py_None);
   __pyx_v_modname = Py_None;
 
-  /* "libpetsc4py.pyx":363
+  /* "libpetsc4py.pyx":365
  *     cdef name = bytes2str(name_p)
  *     cdef mod, path, modname=None
  *     cdef cls, attr, clsname=None             # <<<<<<<<<<<<<<
@@ -5414,29 +5768,29 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
   __Pyx_INCREF(Py_None);
   __pyx_v_clsname = Py_None;
 
-  /* "libpetsc4py.pyx":365
+  /* "libpetsc4py.pyx":367
  *     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_ContainsTF(__pyx_kp_s_, __pyx_v_name, Py_EQ)); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(0, 365, __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, 367, __pyx_L1_error)
   __pyx_t_3 = (__pyx_t_1 != 0);
   if (__pyx_t_3) {
 
-    /* "libpetsc4py.pyx":366
+    /* "libpetsc4py.pyx":368
  *     # 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_ERR(0, 366, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_11libpetsc4py_parse_url(__pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 368, __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;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -5444,9 +5798,9 @@ 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_ERR(0, 366, __pyx_L1_error)
+        __PYX_ERR(0, 368, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
@@ -5457,15 +5811,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_ERR(0, 366, __pyx_L1_error)
+      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 368, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 366, __pyx_L1_error)
+      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 368, __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_ERR(0, 366, __pyx_L1_error)
+      __pyx_t_6 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 368, __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;
@@ -5473,7 +5827,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_ERR(0, 366, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(0, 368, __pyx_L1_error)
       __pyx_t_7 = NULL;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       goto __pyx_L6_unpacking_done;
@@ -5481,7 +5835,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_ERR(0, 366, __pyx_L1_error)
+      __PYX_ERR(0, 368, __pyx_L1_error)
       __pyx_L6_unpacking_done:;
     }
     __pyx_v_path = __pyx_t_4;
@@ -5489,41 +5843,41 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
     __pyx_v_attr = __pyx_t_5;
     __pyx_t_5 = 0;
 
-    /* "libpetsc4py.pyx":367
+    /* "libpetsc4py.pyx":369
  *     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_ERR(0, 367, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_11libpetsc4py_load_module(__pyx_v_path); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 369, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_v_mod = __pyx_t_2;
     __pyx_t_2 = 0;
 
-    /* "libpetsc4py.pyx":368
+    /* "libpetsc4py.pyx":370
  *         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_ERR(0, 368, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_attr); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 370, __pyx_L1_error)
     if (__pyx_t_3) {
 
-      /* "libpetsc4py.pyx":369
+      /* "libpetsc4py.pyx":371
  *         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_ERR(0, 369, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_GetAttr(__pyx_v_mod, __pyx_v_attr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 371, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __pyx_v_cls = __pyx_t_2;
       __pyx_t_2 = 0;
 
-      /* "libpetsc4py.pyx":370
+      /* "libpetsc4py.pyx":372
  *         if attr:
  *             cls = getattr(mod, attr)
  *             return cls()             # <<<<<<<<<<<<<<
@@ -5533,7 +5887,7 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
       __Pyx_XDECREF(__pyx_r);
       __Pyx_INCREF(__pyx_v_cls);
       __pyx_t_5 = __pyx_v_cls; __pyx_t_4 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_5))) {
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
         __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
         if (likely(__pyx_t_4)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -5543,10 +5897,10 @@ 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_ERR(0, 370, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_4); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 372, __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_ERR(0, 370, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 372, __pyx_L1_error)
       }
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
@@ -5554,7 +5908,7 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
       __pyx_t_2 = 0;
       goto __pyx_L0;
 
-      /* "libpetsc4py.pyx":368
+      /* "libpetsc4py.pyx":370
  *         path, attr = parse_url(name)
  *         mod = load_module(path)
  *         if attr:             # <<<<<<<<<<<<<<
@@ -5563,7 +5917,7 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
  */
     }
 
-    /* "libpetsc4py.pyx":372
+    /* "libpetsc4py.pyx":374
  *             return cls()
  *         else:
  *             return mod             # <<<<<<<<<<<<<<
@@ -5577,7 +5931,7 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
       goto __pyx_L0;
     }
 
-    /* "libpetsc4py.pyx":365
+    /* "libpetsc4py.pyx":367
  *     cdef cls, attr, clsname=None
  *     # path/to/filename.py:{function|class}
  *     if ':' in name:             # <<<<<<<<<<<<<<
@@ -5586,32 +5940,32 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
  */
   }
 
-  /* "libpetsc4py.pyx":374
+  /* "libpetsc4py.pyx":376
  *             return mod
  *     # package.module[.{function|class}]
  *     if '.' in name:             # <<<<<<<<<<<<<<
  *         modname, clsname = name.rsplit('.', 1)
  *         mod = PyImport_Import(modname)
  */
-  __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_3 = (__Pyx_PySequence_ContainsTF(__pyx_kp_s__3, __pyx_v_name, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 376, __pyx_L1_error)
   __pyx_t_1 = (__pyx_t_3 != 0);
   if (__pyx_t_1) {
 
-    /* "libpetsc4py.pyx":375
+    /* "libpetsc4py.pyx":377
  *     # 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_ERR(0, 375, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_name, __pyx_n_s_rsplit); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 377, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __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_t_5 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 377, __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))) {
       PyObject* sequence = __pyx_t_5;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -5619,9 +5973,9 @@ 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_ERR(0, 375, __pyx_L1_error)
+        __PYX_ERR(0, 377, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
@@ -5632,15 +5986,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_ERR(0, 375, __pyx_L1_error)
+      __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 377, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 375, __pyx_L1_error)
+      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 377, __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_ERR(0, 375, __pyx_L1_error)
+      __pyx_t_6 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 377, __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;
@@ -5648,7 +6002,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_ERR(0, 375, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(0, 377, __pyx_L1_error)
       __pyx_t_7 = NULL;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       goto __pyx_L10_unpacking_done;
@@ -5656,7 +6010,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_ERR(0, 375, __pyx_L1_error)
+      __PYX_ERR(0, 377, __pyx_L1_error)
       __pyx_L10_unpacking_done:;
     }
     __Pyx_DECREF_SET(__pyx_v_modname, __pyx_t_2);
@@ -5664,42 +6018,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":376
+    /* "libpetsc4py.pyx":378
  *     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_ERR(0, 376, __pyx_L1_error)
+    __pyx_t_5 = PyImport_Import(__pyx_v_modname); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 378, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_v_mod = __pyx_t_5;
     __pyx_t_5 = 0;
 
-    /* "libpetsc4py.pyx":377
+    /* "libpetsc4py.pyx":379
  *         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_ERR(0, 377, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_HasAttr(__pyx_v_mod, __pyx_v_clsname); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 379, __pyx_L1_error)
     __pyx_t_3 = (__pyx_t_1 != 0);
     if (__pyx_t_3) {
 
-      /* "libpetsc4py.pyx":378
+      /* "libpetsc4py.pyx":380
  *         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_ERR(0, 378, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_GetAttr(__pyx_v_mod, __pyx_v_clsname); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 380, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
       __pyx_v_cls = __pyx_t_5;
       __pyx_t_5 = 0;
 
-      /* "libpetsc4py.pyx":379
+      /* "libpetsc4py.pyx":381
  *         if hasattr(mod, clsname):
  *             cls = getattr(mod, clsname)
  *             if not PyModule_Check(cls):             # <<<<<<<<<<<<<<
@@ -5709,7 +6063,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":380
+        /* "libpetsc4py.pyx":382
  *             cls = getattr(mod, clsname)
  *             if not PyModule_Check(cls):
  *                 return cls()             # <<<<<<<<<<<<<<
@@ -5719,7 +6073,7 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
         __Pyx_XDECREF(__pyx_r);
         __Pyx_INCREF(__pyx_v_cls);
         __pyx_t_4 = __pyx_v_cls; __pyx_t_2 = NULL;
-        if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_4))) {
+        if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
           __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
           if (likely(__pyx_t_2)) {
             PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -5729,10 +6083,10 @@ 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_ERR(0, 380, __pyx_L1_error)
+          __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_2); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 382, __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_ERR(0, 380, __pyx_L1_error)
+          __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 382, __pyx_L1_error)
         }
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -5740,7 +6094,7 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
         __pyx_t_5 = 0;
         goto __pyx_L0;
 
-        /* "libpetsc4py.pyx":379
+        /* "libpetsc4py.pyx":381
  *         if hasattr(mod, clsname):
  *             cls = getattr(mod, clsname)
  *             if not PyModule_Check(cls):             # <<<<<<<<<<<<<<
@@ -5749,7 +6103,7 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
  */
       }
 
-      /* "libpetsc4py.pyx":377
+      /* "libpetsc4py.pyx":379
  *         modname, clsname = name.rsplit('.', 1)
  *         mod = PyImport_Import(modname)
  *         if hasattr(mod, clsname):             # <<<<<<<<<<<<<<
@@ -5758,7 +6112,7 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
  */
     }
 
-    /* "libpetsc4py.pyx":374
+    /* "libpetsc4py.pyx":376
  *             return mod
  *     # package.module[.{function|class}]
  *     if '.' in name:             # <<<<<<<<<<<<<<
@@ -5767,19 +6121,19 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
  */
   }
 
-  /* "libpetsc4py.pyx":382
+  /* "libpetsc4py.pyx":384
  *                 return cls()
  *     # package[.module]
  *     mod = PyImport_Import(name)             # <<<<<<<<<<<<<<
  *     return mod
  * 
  */
-  __pyx_t_5 = PyImport_Import(__pyx_v_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 382, __pyx_L1_error)
+  __pyx_t_5 = PyImport_Import(__pyx_v_name); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 384, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_XDECREF_SET(__pyx_v_mod, __pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "libpetsc4py.pyx":383
+  /* "libpetsc4py.pyx":385
  *     # package[.module]
  *     mod = PyImport_Import(name)
  *     return mod             # <<<<<<<<<<<<<<
@@ -5791,7 +6145,7 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
   __pyx_r = __pyx_v_mod;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":359
+  /* "libpetsc4py.pyx":361
  *         return NULL
  * 
  * cdef createcontext(char name_p[]):             # <<<<<<<<<<<<<<
@@ -5820,7 +6174,7 @@ static PyObject *__pyx_f_11libpetsc4py_createcontext(char *__pyx_v_name_p) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":385
+/* "libpetsc4py.pyx":387
  *     return mod
  * 
  * cdef int viewcontext(_PyObj ctx, PetscViewer viewer) except -1:             # <<<<<<<<<<<<<<
@@ -5839,7 +6193,7 @@ static int __pyx_f_11libpetsc4py_viewcontext(struct __pyx_obj_11libpetsc4py__PyO
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("viewcontext", 0);
 
-  /* "libpetsc4py.pyx":386
+  /* "libpetsc4py.pyx":388
  * 
  * cdef int viewcontext(_PyObj ctx, PetscViewer viewer) except -1:
  *     cdef PetscBool isascii = PETSC_FALSE, isstring = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -5849,35 +6203,35 @@ static int __pyx_f_11libpetsc4py_viewcontext(struct __pyx_obj_11libpetsc4py__PyO
   __pyx_v_isascii = PETSC_FALSE;
   __pyx_v_isstring = PETSC_FALSE;
 
-  /* "libpetsc4py.pyx":387
+  /* "libpetsc4py.pyx":389
  * 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_ERR(0, 387, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectTypeCompare(((PetscObject)__pyx_v_viewer), PETSCVIEWERASCII, (&__pyx_v_isascii))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 389, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":388
+  /* "libpetsc4py.pyx":390
  *     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_ERR(0, 388, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectTypeCompare(((PetscObject)__pyx_v_viewer), PETSCVIEWERSTRING, (&__pyx_v_isstring))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 390, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":389
+  /* "libpetsc4py.pyx":391
  *     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_ERR(0, 389, __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 == ((char *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 391, __pyx_L1_error)
   __pyx_v_name = __pyx_t_2;
 
-  /* "libpetsc4py.pyx":390
+  /* "libpetsc4py.pyx":392
  *     CHKERR( PetscObjectTypeCompare(<PetscObject>viewer, PETSCVIEWERSTRING, &isstring) )
  *     cdef char *name = ctx.getname()
  *     if isascii:             # <<<<<<<<<<<<<<
@@ -5886,7 +6240,7 @@ static int __pyx_f_11libpetsc4py_viewcontext(struct __pyx_obj_11libpetsc4py__PyO
  */
   if (__pyx_v_isascii) {
 
-    /* "libpetsc4py.pyx":391
+    /* "libpetsc4py.pyx":393
  *     cdef char *name = ctx.getname()
  *     if isascii:
  *         if name == NULL: name = b"unknown/no yet set"             # <<<<<<<<<<<<<<
@@ -5898,16 +6252,16 @@ static int __pyx_f_11libpetsc4py_viewcontext(struct __pyx_obj_11libpetsc4py__PyO
       __pyx_v_name = ((char *)"unknown/no yet set");
     }
 
-    /* "libpetsc4py.pyx":392
+    /* "libpetsc4py.pyx":394
  *     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, ((char *)"  Python: %s\n"), __pyx_v_name)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 392, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscViewerASCIIPrintf(__pyx_v_viewer, ((char *)"  Python: %s\n"), __pyx_v_name)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 394, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":390
+    /* "libpetsc4py.pyx":392
  *     CHKERR( PetscObjectTypeCompare(<PetscObject>viewer, PETSCVIEWERSTRING, &isstring) )
  *     cdef char *name = ctx.getname()
  *     if isascii:             # <<<<<<<<<<<<<<
@@ -5916,7 +6270,7 @@ static int __pyx_f_11libpetsc4py_viewcontext(struct __pyx_obj_11libpetsc4py__PyO
  */
   }
 
-  /* "libpetsc4py.pyx":393
+  /* "libpetsc4py.pyx":395
  *         if name == NULL: name = b"unknown/no yet set"
  *         CHKERR( PetscViewerASCIIPrintf(viewer, b"  Python: %s\n", name) )
  *     if isstring:             # <<<<<<<<<<<<<<
@@ -5925,7 +6279,7 @@ static int __pyx_f_11libpetsc4py_viewcontext(struct __pyx_obj_11libpetsc4py__PyO
  */
   if (__pyx_v_isstring) {
 
-    /* "libpetsc4py.pyx":394
+    /* "libpetsc4py.pyx":396
  *         CHKERR( PetscViewerASCIIPrintf(viewer, b"  Python: %s\n", name) )
  *     if isstring:
  *         if name == NULL: name = b"<unknown>"             # <<<<<<<<<<<<<<
@@ -5937,16 +6291,16 @@ static int __pyx_f_11libpetsc4py_viewcontext(struct __pyx_obj_11libpetsc4py__PyO
       __pyx_v_name = ((char *)"<unknown>");
     }
 
-    /* "libpetsc4py.pyx":395
+    /* "libpetsc4py.pyx":397
  *     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, ((char *)"%s"), __pyx_v_name)); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 395, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscViewerStringSPrintf(__pyx_v_viewer, ((char *)"%s"), __pyx_v_name)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 397, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":393
+    /* "libpetsc4py.pyx":395
  *         if name == NULL: name = b"unknown/no yet set"
  *         CHKERR( PetscViewerASCIIPrintf(viewer, b"  Python: %s\n", name) )
  *     if isstring:             # <<<<<<<<<<<<<<
@@ -5955,7 +6309,7 @@ static int __pyx_f_11libpetsc4py_viewcontext(struct __pyx_obj_11libpetsc4py__PyO
  */
   }
 
-  /* "libpetsc4py.pyx":396
+  /* "libpetsc4py.pyx":398
  *         if name == NULL: name = b"<unknown>"
  *         CHKERR( PetscViewerStringSPrintf(viewer,"%s", name) )
  *     return 0             # <<<<<<<<<<<<<<
@@ -5965,7 +6319,7 @@ static int __pyx_f_11libpetsc4py_viewcontext(struct __pyx_obj_11libpetsc4py__PyO
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":385
+  /* "libpetsc4py.pyx":387
  *     return mod
  * 
  * cdef int viewcontext(_PyObj ctx, PetscViewer viewer) except -1:             # <<<<<<<<<<<<<<
@@ -5982,7 +6336,7 @@ static int __pyx_f_11libpetsc4py_viewcontext(struct __pyx_obj_11libpetsc4py__PyO
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":513
+/* "libpetsc4py.pyx":515
  * @cython.internal
  * cdef class _PyMat(_PyObj): pass
  * cdef inline _PyMat PyMat(PetscMat mat):             # <<<<<<<<<<<<<<
@@ -5998,7 +6352,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyMat *__pyx_f_11libpetsc4p
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("PyMat", 0);
 
-  /* "libpetsc4py.pyx":514
+  /* "libpetsc4py.pyx":516
  * cdef class _PyMat(_PyObj): pass
  * cdef inline _PyMat PyMat(PetscMat mat):
  *     if mat != NULL and mat.data != NULL:             # <<<<<<<<<<<<<<
@@ -6016,7 +6370,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyMat *__pyx_f_11libpetsc4p
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "libpetsc4py.pyx":515
+    /* "libpetsc4py.pyx":517
  * cdef inline _PyMat PyMat(PetscMat mat):
  *     if mat != NULL and mat.data != NULL:
  *         return <_PyMat>mat.data             # <<<<<<<<<<<<<<
@@ -6028,7 +6382,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyMat *__pyx_f_11libpetsc4p
     __pyx_r = ((struct __pyx_obj_11libpetsc4py__PyMat *)__pyx_v_mat->data);
     goto __pyx_L0;
 
-    /* "libpetsc4py.pyx":514
+    /* "libpetsc4py.pyx":516
  * cdef class _PyMat(_PyObj): pass
  * cdef inline _PyMat PyMat(PetscMat mat):
  *     if mat != NULL and mat.data != NULL:             # <<<<<<<<<<<<<<
@@ -6037,7 +6391,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyMat *__pyx_f_11libpetsc4p
  */
   }
 
-  /* "libpetsc4py.pyx":517
+  /* "libpetsc4py.pyx":519
  *         return <_PyMat>mat.data
  *     else:
  *         return _PyMat.__new__(_PyMat)             # <<<<<<<<<<<<<<
@@ -6046,15 +6400,15 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyMat *__pyx_f_11libpetsc4p
  */
   /*else*/ {
     __Pyx_XDECREF(((PyObject *)__pyx_r));
-    __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_t_3 = __pyx_tp_new_11libpetsc4py__PyMat(((PyTypeObject *)__pyx_ptype_11libpetsc4py__PyMat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 519, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11libpetsc4py__PyMat)))) __PYX_ERR(0, 517, __pyx_L1_error)
+    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11libpetsc4py__PyMat)))) __PYX_ERR(0, 519, __pyx_L1_error)
     __pyx_r = ((struct __pyx_obj_11libpetsc4py__PyMat *)__pyx_t_3);
     __pyx_t_3 = 0;
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":513
+  /* "libpetsc4py.pyx":515
  * @cython.internal
  * cdef class _PyMat(_PyObj): pass
  * cdef inline _PyMat PyMat(PetscMat mat):             # <<<<<<<<<<<<<<
@@ -6073,7 +6427,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyMat *__pyx_f_11libpetsc4p
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":519
+/* "libpetsc4py.pyx":521
  *         return _PyMat.__new__(_PyMat)
  * 
  * cdef public PetscErrorCode MatPythonGetContext(PetscMat mat, void **ctx) \             # <<<<<<<<<<<<<<
@@ -6088,7 +6442,7 @@ PetscErrorCode MatPythonGetContext(Mat __pyx_v_mat, void **__pyx_v_ctx) {
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("MatPythonGetContext", 0);
 
-  /* "libpetsc4py.pyx":521
+  /* "libpetsc4py.pyx":523
  * cdef public PetscErrorCode MatPythonGetContext(PetscMat mat, void **ctx) \
  *     except IERR:
  *     FunctionBegin(b"MatPythonGetContext")             # <<<<<<<<<<<<<<
@@ -6097,19 +6451,19 @@ PetscErrorCode MatPythonGetContext(Mat __pyx_v_mat, void **__pyx_v_ctx) {
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatPythonGetContext"));
 
-  /* "libpetsc4py.pyx":522
+  /* "libpetsc4py.pyx":524
  *     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_ERR(0, 522, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 524, __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_ERR(0, 522, __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 == ((int)-1))) __PYX_ERR(0, 524, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":523
+  /* "libpetsc4py.pyx":525
  *     FunctionBegin(b"MatPythonGetContext")
  *     PyMat(mat).getcontext(ctx)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -6119,7 +6473,7 @@ PetscErrorCode MatPythonGetContext(Mat __pyx_v_mat, void **__pyx_v_ctx) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":519
+  /* "libpetsc4py.pyx":521
  *         return _PyMat.__new__(_PyMat)
  * 
  * cdef public PetscErrorCode MatPythonGetContext(PetscMat mat, void **ctx) \             # <<<<<<<<<<<<<<
@@ -6137,7 +6491,7 @@ PetscErrorCode MatPythonGetContext(Mat __pyx_v_mat, void **__pyx_v_ctx) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":525
+/* "libpetsc4py.pyx":527
  *     return FunctionEnd()
  * 
  * cdef public PetscErrorCode MatPythonSetContext(PetscMat mat, void *ctx) \             # <<<<<<<<<<<<<<
@@ -6153,7 +6507,7 @@ PetscErrorCode MatPythonSetContext(Mat __pyx_v_mat, void *__pyx_v_ctx) {
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("MatPythonSetContext", 0);
 
-  /* "libpetsc4py.pyx":527
+  /* "libpetsc4py.pyx":529
  * cdef public PetscErrorCode MatPythonSetContext(PetscMat mat, void *ctx) \
  *     except IERR:
  *     FunctionBegin(b"MatPythonSetContext")             # <<<<<<<<<<<<<<
@@ -6162,22 +6516,22 @@ PetscErrorCode MatPythonSetContext(Mat __pyx_v_mat, void *__pyx_v_ctx) {
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatPythonSetContext"));
 
-  /* "libpetsc4py.pyx":528
+  /* "libpetsc4py.pyx":530
  *     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_ERR(0, 528, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 530, __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_ERR(0, 528, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 530, __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_ERR(0, 528, __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 == ((int)-1))) __PYX_ERR(0, 530, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":529
+  /* "libpetsc4py.pyx":531
  *     FunctionBegin(b"MatPythonSetContext")
  *     PyMat(mat).setcontext(ctx, Mat_(mat))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -6187,7 +6541,7 @@ PetscErrorCode MatPythonSetContext(Mat __pyx_v_mat, void *__pyx_v_ctx) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":525
+  /* "libpetsc4py.pyx":527
  *     return FunctionEnd()
  * 
  * cdef public PetscErrorCode MatPythonSetContext(PetscMat mat, void *ctx) \             # <<<<<<<<<<<<<<
@@ -6206,7 +6560,7 @@ PetscErrorCode MatPythonSetContext(Mat __pyx_v_mat, void *__pyx_v_ctx) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":531
+/* "libpetsc4py.pyx":533
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatPythonSetType_PYTHON(PetscMat mat, char name[]) \             # <<<<<<<<<<<<<<
@@ -6223,11 +6577,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatPythonSetType_PYTHON(Mat __pyx_v_
   PetscErrorCode __pyx_t_3;
   int __pyx_t_4;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatPythonSetType_PYTHON", 0);
 
-  /* "libpetsc4py.pyx":533
+  /* "libpetsc4py.pyx":535
  * cdef PetscErrorCode MatPythonSetType_PYTHON(PetscMat mat, char name[]) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatPythonSetType_PYTHON")             # <<<<<<<<<<<<<<
@@ -6236,7 +6590,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatPythonSetType_PYTHON(Mat __pyx_v_
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatPythonSetType_PYTHON"));
 
-  /* "libpetsc4py.pyx":534
+  /* "libpetsc4py.pyx":536
  *     except IERR with gil:
  *     FunctionBegin(b"MatPythonSetType_PYTHON")
  *     if name == NULL: return FunctionEnd() # XXX             # <<<<<<<<<<<<<<
@@ -6249,40 +6603,40 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatPythonSetType_PYTHON(Mat __pyx_v_
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":535
+  /* "libpetsc4py.pyx":537
  *     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_ERR(0, 535, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_11libpetsc4py_createcontext(__pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 537, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_ctx = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":536
+  /* "libpetsc4py.pyx":538
  *     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_ERR(0, 536, __pyx_L1_error)
+  __pyx_t_3 = MatPythonSetContext(__pyx_v_mat, ((void *)__pyx_v_ctx)); if (unlikely(__pyx_t_3 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 538, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":537
+  /* "libpetsc4py.pyx":539
  *     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_ERR(0, 537, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 539, __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_ERR(0, 537, __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 == ((int)-1))) __PYX_ERR(0, 539, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":538
+  /* "libpetsc4py.pyx":540
  *     MatPythonSetContext(mat, <void*>ctx)
  *     PyMat(mat).setname(name)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -6292,7 +6646,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatPythonSetType_PYTHON(Mat __pyx_v_
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":531
+  /* "libpetsc4py.pyx":533
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatPythonSetType_PYTHON(PetscMat mat, char name[]) \             # <<<<<<<<<<<<<<
@@ -6309,12 +6663,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatPythonSetType_PYTHON(Mat __pyx_v_
   __Pyx_XDECREF(__pyx_v_ctx);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":540
+/* "libpetsc4py.pyx":542
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatCreate_Python(             # <<<<<<<<<<<<<<
@@ -6331,11 +6685,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatCreate_Python", 0);
 
-  /* "libpetsc4py.pyx":544
+  /* "libpetsc4py.pyx":546
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatCreate_Python")             # <<<<<<<<<<<<<<
@@ -6344,7 +6698,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatCreate_Python"));
 
-  /* "libpetsc4py.pyx":546
+  /* "libpetsc4py.pyx":548
  *     FunctionBegin(b"MatCreate_Python")
  *     #
  *     cdef MatOps ops       = mat.ops             # <<<<<<<<<<<<<<
@@ -6354,7 +6708,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":547
+  /* "libpetsc4py.pyx":549
  *     #
  *     cdef MatOps ops       = mat.ops
  *     ops.destroy           = MatDestroy_Python             # <<<<<<<<<<<<<<
@@ -6363,7 +6717,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->destroy = __pyx_f_11libpetsc4py_MatDestroy_Python;
 
-  /* "libpetsc4py.pyx":548
+  /* "libpetsc4py.pyx":550
  *     cdef MatOps ops       = mat.ops
  *     ops.destroy           = MatDestroy_Python
  *     ops.setfromoptions    = MatSetFromOptions_Python             # <<<<<<<<<<<<<<
@@ -6372,7 +6726,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->setfromoptions = __pyx_f_11libpetsc4py_MatSetFromOptions_Python;
 
-  /* "libpetsc4py.pyx":549
+  /* "libpetsc4py.pyx":551
  *     ops.destroy           = MatDestroy_Python
  *     ops.setfromoptions    = MatSetFromOptions_Python
  *     ops.view              = MatView_Python             # <<<<<<<<<<<<<<
@@ -6381,44 +6735,44 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->view = __pyx_f_11libpetsc4py_MatView_Python;
 
-  /* "libpetsc4py.pyx":550
+  /* "libpetsc4py.pyx":552
  *     ops.setfromoptions    = MatSetFromOptions_Python
  *     ops.view              = MatView_Python
  *     ops.duplicate         = MatDuplicate_Python             # <<<<<<<<<<<<<<
  *     ops.copy              = MatCopy_Python
- *     ops.getsubmatrix      = MatGetSubMatrix_Python
+ *     ops.createsubmatrix   = MatCreateSubMatrix_Python
  */
   __pyx_v_ops->duplicate = __pyx_f_11libpetsc4py_MatDuplicate_Python;
 
-  /* "libpetsc4py.pyx":551
+  /* "libpetsc4py.pyx":553
  *     ops.view              = MatView_Python
  *     ops.duplicate         = MatDuplicate_Python
  *     ops.copy              = MatCopy_Python             # <<<<<<<<<<<<<<
- *     ops.getsubmatrix      = MatGetSubMatrix_Python
+ *     ops.createsubmatrix   = MatCreateSubMatrix_Python
  *     ops.setoption         = MatSetOption_Python
  */
   __pyx_v_ops->copy = __pyx_f_11libpetsc4py_MatCopy_Python;
 
-  /* "libpetsc4py.pyx":552
+  /* "libpetsc4py.pyx":554
  *     ops.duplicate         = MatDuplicate_Python
  *     ops.copy              = MatCopy_Python
- *     ops.getsubmatrix      = MatGetSubMatrix_Python             # <<<<<<<<<<<<<<
+ *     ops.createsubmatrix   = MatCreateSubMatrix_Python             # <<<<<<<<<<<<<<
  *     ops.setoption         = MatSetOption_Python
  *     ops.setup             = MatSetUp_Python
  */
-  __pyx_v_ops->getsubmatrix = __pyx_f_11libpetsc4py_MatGetSubMatrix_Python;
+  __pyx_v_ops->createsubmatrix = __pyx_f_11libpetsc4py_MatCreateSubMatrix_Python;
 
-  /* "libpetsc4py.pyx":553
+  /* "libpetsc4py.pyx":555
  *     ops.copy              = MatCopy_Python
- *     ops.getsubmatrix      = MatGetSubMatrix_Python
+ *     ops.createsubmatrix   = MatCreateSubMatrix_Python
  *     ops.setoption         = MatSetOption_Python             # <<<<<<<<<<<<<<
  *     ops.setup             = MatSetUp_Python
  *     ops.assemblybegin     = MatAssemblyBegin_Python
  */
   __pyx_v_ops->setoption = __pyx_f_11libpetsc4py_MatSetOption_Python;
 
-  /* "libpetsc4py.pyx":554
- *     ops.getsubmatrix      = MatGetSubMatrix_Python
+  /* "libpetsc4py.pyx":556
+ *     ops.createsubmatrix   = MatCreateSubMatrix_Python
  *     ops.setoption         = MatSetOption_Python
  *     ops.setup             = MatSetUp_Python             # <<<<<<<<<<<<<<
  *     ops.assemblybegin     = MatAssemblyBegin_Python
@@ -6426,7 +6780,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->setup = __pyx_f_11libpetsc4py_MatSetUp_Python;
 
-  /* "libpetsc4py.pyx":555
+  /* "libpetsc4py.pyx":557
  *     ops.setoption         = MatSetOption_Python
  *     ops.setup             = MatSetUp_Python
  *     ops.assemblybegin     = MatAssemblyBegin_Python             # <<<<<<<<<<<<<<
@@ -6435,7 +6789,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->assemblybegin = __pyx_f_11libpetsc4py_MatAssemblyBegin_Python;
 
-  /* "libpetsc4py.pyx":556
+  /* "libpetsc4py.pyx":558
  *     ops.setup             = MatSetUp_Python
  *     ops.assemblybegin     = MatAssemblyBegin_Python
  *     ops.assemblyend       = MatAssemblyEnd_Python             # <<<<<<<<<<<<<<
@@ -6444,7 +6798,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->assemblyend = __pyx_f_11libpetsc4py_MatAssemblyEnd_Python;
 
-  /* "libpetsc4py.pyx":557
+  /* "libpetsc4py.pyx":559
  *     ops.assemblybegin     = MatAssemblyBegin_Python
  *     ops.assemblyend       = MatAssemblyEnd_Python
  *     ops.zeroentries       = MatZeroEntries_Python             # <<<<<<<<<<<<<<
@@ -6453,7 +6807,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->zeroentries = __pyx_f_11libpetsc4py_MatZeroEntries_Python;
 
-  /* "libpetsc4py.pyx":558
+  /* "libpetsc4py.pyx":560
  *     ops.assemblyend       = MatAssemblyEnd_Python
  *     ops.zeroentries       = MatZeroEntries_Python
  *     ops.scale             = MatScale_Python             # <<<<<<<<<<<<<<
@@ -6462,7 +6816,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->scale = __pyx_f_11libpetsc4py_MatScale_Python;
 
-  /* "libpetsc4py.pyx":559
+  /* "libpetsc4py.pyx":561
  *     ops.zeroentries       = MatZeroEntries_Python
  *     ops.scale             = MatScale_Python
  *     ops.shift             = MatShift_Python             # <<<<<<<<<<<<<<
@@ -6471,7 +6825,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->shift = __pyx_f_11libpetsc4py_MatShift_Python;
 
-  /* "libpetsc4py.pyx":560
+  /* "libpetsc4py.pyx":562
  *     ops.scale             = MatScale_Python
  *     ops.shift             = MatShift_Python
  *     ops.getvecs           = MatCreateVecs_Python             # <<<<<<<<<<<<<<
@@ -6480,7 +6834,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->getvecs = __pyx_f_11libpetsc4py_MatCreateVecs_Python;
 
-  /* "libpetsc4py.pyx":561
+  /* "libpetsc4py.pyx":563
  *     ops.shift             = MatShift_Python
  *     ops.getvecs           = MatCreateVecs_Python
  *     ops.mult              = MatMult_Python             # <<<<<<<<<<<<<<
@@ -6489,7 +6843,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->mult = __pyx_f_11libpetsc4py_MatMult_Python;
 
-  /* "libpetsc4py.pyx":562
+  /* "libpetsc4py.pyx":564
  *     ops.getvecs           = MatCreateVecs_Python
  *     ops.mult              = MatMult_Python
  *     ops.sor               = MatSOR_Python             # <<<<<<<<<<<<<<
@@ -6498,7 +6852,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->sor = __pyx_f_11libpetsc4py_MatSOR_Python;
 
-  /* "libpetsc4py.pyx":563
+  /* "libpetsc4py.pyx":565
  *     ops.mult              = MatMult_Python
  *     ops.sor               = MatSOR_Python
  *     ops.multtranspose     = MatMultTranspose_Python             # <<<<<<<<<<<<<<
@@ -6507,7 +6861,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->multtranspose = __pyx_f_11libpetsc4py_MatMultTranspose_Python;
 
-  /* "libpetsc4py.pyx":564
+  /* "libpetsc4py.pyx":566
  *     ops.sor               = MatSOR_Python
  *     ops.multtranspose     = MatMultTranspose_Python
  *     ops.multhermitian     = MatMultHermitian_Python             # <<<<<<<<<<<<<<
@@ -6516,7 +6870,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->multhermitiantranspose = __pyx_f_11libpetsc4py_MatMultHermitian_Python;
 
-  /* "libpetsc4py.pyx":565
+  /* "libpetsc4py.pyx":567
  *     ops.multtranspose     = MatMultTranspose_Python
  *     ops.multhermitian     = MatMultHermitian_Python
  *     ops.multadd           = MatMultAdd_Python             # <<<<<<<<<<<<<<
@@ -6525,7 +6879,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->multadd = __pyx_f_11libpetsc4py_MatMultAdd_Python;
 
-  /* "libpetsc4py.pyx":566
+  /* "libpetsc4py.pyx":568
  *     ops.multhermitian     = MatMultHermitian_Python
  *     ops.multadd           = MatMultAdd_Python
  *     ops.multtransposeadd  = MatMultTransposeAdd_Python             # <<<<<<<<<<<<<<
@@ -6534,7 +6888,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->multtransposeadd = __pyx_f_11libpetsc4py_MatMultTransposeAdd_Python;
 
-  /* "libpetsc4py.pyx":567
+  /* "libpetsc4py.pyx":569
  *     ops.multadd           = MatMultAdd_Python
  *     ops.multtransposeadd  = MatMultTransposeAdd_Python
  *     ops.multhermitianadd  = MatMultHermitianAdd_Python             # <<<<<<<<<<<<<<
@@ -6543,7 +6897,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->multhermitiantransposeadd = __pyx_f_11libpetsc4py_MatMultHermitianAdd_Python;
 
-  /* "libpetsc4py.pyx":568
+  /* "libpetsc4py.pyx":570
  *     ops.multtransposeadd  = MatMultTransposeAdd_Python
  *     ops.multhermitianadd  = MatMultHermitianAdd_Python
  *     ops.multdiagonalblock = MatMultDiagonalBlock_Python             # <<<<<<<<<<<<<<
@@ -6552,7 +6906,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->multdiagonalblock = __pyx_f_11libpetsc4py_MatMultDiagonalBlock_Python;
 
-  /* "libpetsc4py.pyx":569
+  /* "libpetsc4py.pyx":571
  *     ops.multhermitianadd  = MatMultHermitianAdd_Python
  *     ops.multdiagonalblock = MatMultDiagonalBlock_Python
  *     ops.solve             = MatSolve_Python             # <<<<<<<<<<<<<<
@@ -6561,7 +6915,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->solve = __pyx_f_11libpetsc4py_MatSolve_Python;
 
-  /* "libpetsc4py.pyx":570
+  /* "libpetsc4py.pyx":572
  *     ops.multdiagonalblock = MatMultDiagonalBlock_Python
  *     ops.solve             = MatSolve_Python
  *     ops.solvetranspose    = MatSolveTranspose_Python             # <<<<<<<<<<<<<<
@@ -6570,7 +6924,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->solvetranspose = __pyx_f_11libpetsc4py_MatSolveTranspose_Python;
 
-  /* "libpetsc4py.pyx":571
+  /* "libpetsc4py.pyx":573
  *     ops.solve             = MatSolve_Python
  *     ops.solvetranspose    = MatSolveTranspose_Python
  *     ops.solveadd          = MatSolveAdd_Python             # <<<<<<<<<<<<<<
@@ -6579,7 +6933,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->solveadd = __pyx_f_11libpetsc4py_MatSolveAdd_Python;
 
-  /* "libpetsc4py.pyx":572
+  /* "libpetsc4py.pyx":574
  *     ops.solvetranspose    = MatSolveTranspose_Python
  *     ops.solveadd          = MatSolveAdd_Python
  *     ops.solvetransposeadd = MatSolveTransposeAdd_Python             # <<<<<<<<<<<<<<
@@ -6588,7 +6942,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->solvetransposeadd = __pyx_f_11libpetsc4py_MatSolveTransposeAdd_Python;
 
-  /* "libpetsc4py.pyx":573
+  /* "libpetsc4py.pyx":575
  *     ops.solveadd          = MatSolveAdd_Python
  *     ops.solvetransposeadd = MatSolveTransposeAdd_Python
  *     ops.getdiagonal       = MatGetDiagonal_Python             # <<<<<<<<<<<<<<
@@ -6597,7 +6951,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->getdiagonal = __pyx_f_11libpetsc4py_MatGetDiagonal_Python;
 
-  /* "libpetsc4py.pyx":574
+  /* "libpetsc4py.pyx":576
  *     ops.solvetransposeadd = MatSolveTransposeAdd_Python
  *     ops.getdiagonal       = MatGetDiagonal_Python
  *     ops.setdiagonal       = MatSetDiagonal_Python             # <<<<<<<<<<<<<<
@@ -6606,7 +6960,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->diagonalset = __pyx_f_11libpetsc4py_MatSetDiagonal_Python;
 
-  /* "libpetsc4py.pyx":575
+  /* "libpetsc4py.pyx":577
  *     ops.getdiagonal       = MatGetDiagonal_Python
  *     ops.setdiagonal       = MatSetDiagonal_Python
  *     ops.diagonalscale     = MatDiagonalScale_Python             # <<<<<<<<<<<<<<
@@ -6615,7 +6969,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->diagonalscale = __pyx_f_11libpetsc4py_MatDiagonalScale_Python;
 
-  /* "libpetsc4py.pyx":576
+  /* "libpetsc4py.pyx":578
  *     ops.setdiagonal       = MatSetDiagonal_Python
  *     ops.diagonalscale     = MatDiagonalScale_Python
  *     ops.norm              = MatNorm_Python             # <<<<<<<<<<<<<<
@@ -6624,7 +6978,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->norm = __pyx_f_11libpetsc4py_MatNorm_Python;
 
-  /* "libpetsc4py.pyx":577
+  /* "libpetsc4py.pyx":579
  *     ops.diagonalscale     = MatDiagonalScale_Python
  *     ops.norm              = MatNorm_Python
  *     ops.realpart          = MatRealPart_Python             # <<<<<<<<<<<<<<
@@ -6633,7 +6987,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->realpart = __pyx_f_11libpetsc4py_MatRealPart_Python;
 
-  /* "libpetsc4py.pyx":578
+  /* "libpetsc4py.pyx":580
  *     ops.norm              = MatNorm_Python
  *     ops.realpart          = MatRealPart_Python
  *     ops.imagpart          = MatImagPart_Python             # <<<<<<<<<<<<<<
@@ -6642,7 +6996,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->imaginarypart = __pyx_f_11libpetsc4py_MatImagPart_Python;
 
-  /* "libpetsc4py.pyx":579
+  /* "libpetsc4py.pyx":581
  *     ops.realpart          = MatRealPart_Python
  *     ops.imagpart          = MatImagPart_Python
  *     ops.conjugate         = MatConjugate_Python             # <<<<<<<<<<<<<<
@@ -6651,7 +7005,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_ops->conjugate = __pyx_f_11libpetsc4py_MatConjugate_Python;
 
-  /* "libpetsc4py.pyx":581
+  /* "libpetsc4py.pyx":583
  *     ops.conjugate         = MatConjugate_Python
  *     #
  *     mat.assembled    = PETSC_TRUE  # XXX             # <<<<<<<<<<<<<<
@@ -6660,7 +7014,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_mat->assembled = PETSC_TRUE;
 
-  /* "libpetsc4py.pyx":582
+  /* "libpetsc4py.pyx":584
  *     #
  *     mat.assembled    = PETSC_TRUE  # XXX
  *     mat.preallocated = PETSC_FALSE # XXX             # <<<<<<<<<<<<<<
@@ -6669,46 +7023,46 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_mat->preallocated = PETSC_FALSE;
 
-  /* "libpetsc4py.pyx":584
+  /* "libpetsc4py.pyx":586
  *     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), ((char *)"MatGetDiagonalBlock_C"), ((PetscVoidFunction)__pyx_f_11libpetsc4py_MatGetDiagonalBlock_Python))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 584, __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 == ((int)-1))) __PYX_ERR(0, 586, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":587
+  /* "libpetsc4py.pyx":589
  *             <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), ((char *)"MatPythonSetType_C"), ((PetscVoidFunction)__pyx_f_11libpetsc4py_MatPythonSetType_PYTHON))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 587, __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 == ((int)-1))) __PYX_ERR(0, 589, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":590
+  /* "libpetsc4py.pyx":592
  *             <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_ERR(0, 590, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectChangeTypeName(((PetscObject)__pyx_v_mat), "python")); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(0, 592, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":593
+  /* "libpetsc4py.pyx":595
  *             <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_ERR(0, 593, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 595, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_ctx = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "libpetsc4py.pyx":594
+  /* "libpetsc4py.pyx":596
  *     #
  *     cdef ctx = PyMat(NULL)
  *     mat.data = <void*> ctx             # <<<<<<<<<<<<<<
@@ -6717,7 +7071,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_mat->data = ((void *)__pyx_v_ctx);
 
-  /* "libpetsc4py.pyx":595
+  /* "libpetsc4py.pyx":597
  *     cdef ctx = PyMat(NULL)
  *     mat.data = <void*> ctx
  *     Py_INCREF(<PyObject*>mat.data)             # <<<<<<<<<<<<<<
@@ -6726,7 +7080,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
  */
   Py_INCREF(((PyObject *)__pyx_v_mat->data));
 
-  /* "libpetsc4py.pyx":596
+  /* "libpetsc4py.pyx":598
  *     mat.data = <void*> ctx
  *     Py_INCREF(<PyObject*>mat.data)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -6736,7 +7090,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":540
+  /* "libpetsc4py.pyx":542
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatCreate_Python(             # <<<<<<<<<<<<<<
@@ -6753,12 +7107,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreate_Python(Mat __pyx_v_mat) {
   __Pyx_XDECREF(__pyx_v_ctx);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":598
+/* "libpetsc4py.pyx":600
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatDestroy_Python(             # <<<<<<<<<<<<<<
@@ -6781,11 +7135,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDestroy_Python(Mat __pyx_v_mat) {
   PyObject *__pyx_t_10 = NULL;
   PyObject *__pyx_t_11 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatDestroy_Python", 0);
 
-  /* "libpetsc4py.pyx":602
+  /* "libpetsc4py.pyx":604
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatDestroy_Python")             # <<<<<<<<<<<<<<
@@ -6794,34 +7148,34 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDestroy_Python(Mat __pyx_v_mat) {
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatDestroy_Python"));
 
-  /* "libpetsc4py.pyx":603
+  /* "libpetsc4py.pyx":605
  *     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), ((char *)"MatGetDiagonalBlock_C"), ((PetscVoidFunction)NULL))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 603, __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 == ((int)-1))) __PYX_ERR(0, 605, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":606
+  /* "libpetsc4py.pyx":608
  *             <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), ((char *)"MatPythonSetType_C"), ((PetscVoidFunction)NULL))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 606, __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 == ((int)-1))) __PYX_ERR(0, 608, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":609
+  /* "libpetsc4py.pyx":611
  *             <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_ERR(0, 609, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectChangeTypeName(((PetscObject)__pyx_v_mat), NULL)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 611, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":612
+  /* "libpetsc4py.pyx":614
  *             <PetscObject>mat,NULL) )
  *     #
  *     if not Py_IsInitialized(): return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -6834,7 +7188,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDestroy_Python(Mat __pyx_v_mat) {
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":613
+  /* "libpetsc4py.pyx":615
  *     #
  *     if not Py_IsInitialized(): return FunctionEnd()
  *     try:             # <<<<<<<<<<<<<<
@@ -6843,7 +7197,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDestroy_Python(Mat __pyx_v_mat) {
  */
   /*try:*/ {
 
-    /* "libpetsc4py.pyx":614
+    /* "libpetsc4py.pyx":616
  *     if not Py_IsInitialized(): return FunctionEnd()
  *     try:
  *         addRef(mat)             # <<<<<<<<<<<<<<
@@ -6852,17 +7206,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDestroy_Python(Mat __pyx_v_mat) {
  */
     __pyx_f_11libpetsc4py_addRef(__pyx_v_mat);
 
-    /* "libpetsc4py.pyx":615
+    /* "libpetsc4py.pyx":617
  *     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_ERR(0, 615, __pyx_L5_error)
+    __pyx_t_3 = MatPythonSetContext(__pyx_v_mat, NULL); if (unlikely(__pyx_t_3 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 617, __pyx_L5_error)
   }
 
-  /* "libpetsc4py.pyx":617
+  /* "libpetsc4py.pyx":619
  *         MatPythonSetContext(mat, NULL)
  *     finally:
  *         delRef(mat)             # <<<<<<<<<<<<<<
@@ -6873,7 +7227,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDestroy_Python(Mat __pyx_v_mat) {
     /*normal exit:*/{
       __pyx_f_11libpetsc4py_delRef(__pyx_v_mat);
 
-      /* "libpetsc4py.pyx":618
+      /* "libpetsc4py.pyx":620
  *     finally:
  *         delRef(mat)
  *         Py_DECREF(<PyObject*>mat.data)             # <<<<<<<<<<<<<<
@@ -6882,7 +7236,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDestroy_Python(Mat __pyx_v_mat) {
  */
       Py_DECREF(((PyObject *)__pyx_v_mat->data));
 
-      /* "libpetsc4py.pyx":619
+      /* "libpetsc4py.pyx":621
  *         delRef(mat)
  *         Py_DECREF(<PyObject*>mat.data)
  *         mat.data = NULL             # <<<<<<<<<<<<<<
@@ -6908,7 +7262,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":617
+        /* "libpetsc4py.pyx":619
  *         MatPythonSetContext(mat, NULL)
  *     finally:
  *         delRef(mat)             # <<<<<<<<<<<<<<
@@ -6917,7 +7271,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDestroy_Python(Mat __pyx_v_mat) {
  */
         __pyx_f_11libpetsc4py_delRef(__pyx_v_mat);
 
-        /* "libpetsc4py.pyx":618
+        /* "libpetsc4py.pyx":620
  *     finally:
  *         delRef(mat)
  *         Py_DECREF(<PyObject*>mat.data)             # <<<<<<<<<<<<<<
@@ -6926,7 +7280,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDestroy_Python(Mat __pyx_v_mat) {
  */
         Py_DECREF(((PyObject *)__pyx_v_mat->data));
 
-        /* "libpetsc4py.pyx":619
+        /* "libpetsc4py.pyx":621
  *         delRef(mat)
  *         Py_DECREF(<PyObject*>mat.data)
  *         mat.data = NULL             # <<<<<<<<<<<<<<
@@ -6935,7 +7289,6 @@ 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);
@@ -6953,7 +7306,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDestroy_Python(Mat __pyx_v_mat) {
     __pyx_L6:;
   }
 
-  /* "libpetsc4py.pyx":620
+  /* "libpetsc4py.pyx":622
  *         Py_DECREF(<PyObject*>mat.data)
  *         mat.data = NULL
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -6963,7 +7316,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDestroy_Python(Mat __pyx_v_mat) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":598
+  /* "libpetsc4py.pyx":600
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatDestroy_Python(             # <<<<<<<<<<<<<<
@@ -6978,12 +7331,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDestroy_Python(Mat __pyx_v_mat) {
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":622
+/* "libpetsc4py.pyx":624
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSetFromOptions_Python(             # <<<<<<<<<<<<<<
@@ -7010,11 +7363,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetFromOptions_Python(PetscOption
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatSetFromOptions_Python", 0);
 
-  /* "libpetsc4py.pyx":627
+  /* "libpetsc4py.pyx":629
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatSetFromOptions_Python")             # <<<<<<<<<<<<<<
@@ -7023,20 +7376,20 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetFromOptions_Python(PetscOption
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatSetFromOptions_Python"));
 
-  /* "libpetsc4py.pyx":629
+  /* "libpetsc4py.pyx":631
  *     FunctionBegin(b"MatSetFromOptions_Python")
  *     #
  *     cdef char name[2048], *defval = PyMat(mat).getname()             # <<<<<<<<<<<<<<
  *     cdef PetscBool found = PETSC_FALSE
  *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 629, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 631, __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_ERR(0, 629, __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 == ((char *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 631, __pyx_L1_error)
   __pyx_v_defval = __pyx_t_2;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":630
+  /* "libpetsc4py.pyx":632
  *     #
  *     cdef char name[2048], *defval = PyMat(mat).getname()
  *     cdef PetscBool found = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -7045,7 +7398,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetFromOptions_Python(PetscOption
  */
   __pyx_v_found = PETSC_FALSE;
 
-  /* "libpetsc4py.pyx":631
+  /* "libpetsc4py.pyx":633
  *     cdef char name[2048], *defval = PyMat(mat).getname()
  *     cdef PetscBool found = PETSC_FALSE
  *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject             # <<<<<<<<<<<<<<
@@ -7054,16 +7407,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetFromOptions_Python(PetscOption
  */
   PetscOptionsObject = __pyx_v_PetscOptionsObject;
 
-  /* "libpetsc4py.pyx":632
+  /* "libpetsc4py.pyx":634
  *     cdef PetscBool found = PETSC_FALSE
  *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject
  *     CHKERR( PetscOptionsString(             # <<<<<<<<<<<<<<
  *             b"-mat_python_type",b"Python [package.]module[.{class|function}]",
  *             b"MatPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(0, 634, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":634
+  /* "libpetsc4py.pyx":636
  *     CHKERR( PetscOptionsString(
  *             b"-mat_python_type",b"Python [package.]module[.{class|function}]",
  *             b"MatPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;             # <<<<<<<<<<<<<<
@@ -7072,7 +7425,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetFromOptions_Python(PetscOption
  */
   ((void)PetscOptionsObject);
 
-  /* "libpetsc4py.pyx":635
+  /* "libpetsc4py.pyx":637
  *             b"-mat_python_type",b"Python [package.]module[.{class|function}]",
  *             b"MatPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
  *     if found and name[0]:             # <<<<<<<<<<<<<<
@@ -7089,17 +7442,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetFromOptions_Python(PetscOption
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":636
+    /* "libpetsc4py.pyx":638
  *             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_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)
+    __pyx_t_6 = __pyx_f_11libpetsc4py_MatPythonSetType_PYTHON(__pyx_v_mat, __pyx_v_name); if (unlikely(__pyx_t_6 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 638, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_11libpetsc4py_CHKERR(__pyx_t_6); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 638, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":635
+    /* "libpetsc4py.pyx":637
  *             b"-mat_python_type",b"Python [package.]module[.{class|function}]",
  *             b"MatPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
  *     if found and name[0]:             # <<<<<<<<<<<<<<
@@ -7108,22 +7461,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetFromOptions_Python(PetscOption
  */
   }
 
-  /* "libpetsc4py.pyx":638
+  /* "libpetsc4py.pyx":640
  *         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_ERR(0, 638, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 640, __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_ERR(0, 638, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_setFromOptions); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 640, __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":639
+  /* "libpetsc4py.pyx":641
  *     #
  *     cdef setFromOptions = PyMat(mat).setFromOptions
  *     if setFromOptions is not None:             # <<<<<<<<<<<<<<
@@ -7134,18 +7487,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetFromOptions_Python(PetscOption
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (__pyx_t_5) {
 
-    /* "libpetsc4py.pyx":640
+    /* "libpetsc4py.pyx":642
  *     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_ERR(0, 640, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 642, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_v_setFromOptions);
     __pyx_t_8 = __pyx_v_setFromOptions; __pyx_t_9 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_8))) {
+    if (CYTHON_UNPACK_METHODS && 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);
@@ -7155,24 +7508,44 @@ 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_ERR(0, 640, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 642, __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_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_ERR(0, 640, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_7);
-      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_8)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_t_1};
+        __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 642, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+        __Pyx_GOTREF(__pyx_t_7);
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_t_1};
+        __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 642, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+        __Pyx_GOTREF(__pyx_t_7);
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 642, __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_ERR(0, 642, __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;
 
-    /* "libpetsc4py.pyx":639
+    /* "libpetsc4py.pyx":641
  *     #
  *     cdef setFromOptions = PyMat(mat).setFromOptions
  *     if setFromOptions is not None:             # <<<<<<<<<<<<<<
@@ -7181,7 +7554,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetFromOptions_Python(PetscOption
  */
   }
 
-  /* "libpetsc4py.pyx":641
+  /* "libpetsc4py.pyx":643
  *     if setFromOptions is not None:
  *         setFromOptions(Mat_(mat))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -7191,7 +7564,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetFromOptions_Python(PetscOption
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":622
+  /* "libpetsc4py.pyx":624
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSetFromOptions_Python(             # <<<<<<<<<<<<<<
@@ -7212,12 +7585,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetFromOptions_Python(PetscOption
   __Pyx_XDECREF(__pyx_v_setFromOptions);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":643
+/* "libpetsc4py.pyx":645
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatView_Python(             # <<<<<<<<<<<<<<
@@ -7237,14 +7610,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatView_Python(Mat __pyx_v_mat, Pets
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
-  Py_ssize_t __pyx_t_9;
-  PyObject *__pyx_t_10 = NULL;
+  PyObject *__pyx_t_9 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatView_Python", 0);
 
-  /* "libpetsc4py.pyx":648
+  /* "libpetsc4py.pyx":650
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatView_Python")             # <<<<<<<<<<<<<<
@@ -7253,34 +7625,34 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatView_Python(Mat __pyx_v_mat, Pets
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatView_Python"));
 
-  /* "libpetsc4py.pyx":649
+  /* "libpetsc4py.pyx":651
  *     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_ERR(0, 649, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 651, __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_ERR(0, 649, __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 == ((int)-1))) __PYX_ERR(0, 651, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":650
+  /* "libpetsc4py.pyx":652
  *     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_ERR(0, 650, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 652, __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_ERR(0, 650, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_view); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 652, __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":651
+  /* "libpetsc4py.pyx":653
  *     viewcontext(PyMat(mat), vwr)
  *     cdef view = PyMat(mat).view
  *     if view is not None:             # <<<<<<<<<<<<<<
@@ -7291,48 +7663,70 @@ 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":652
+    /* "libpetsc4py.pyx":654
  *     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_ERR(0, 652, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 654, __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_ERR(0, 652, __pyx_L1_error)
+    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Viewer_(__pyx_v_vwr)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 654, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_INCREF(__pyx_v_view);
     __pyx_t_7 = __pyx_v_view; __pyx_t_8 = NULL;
-    __pyx_t_9 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+    __pyx_t_2 = 0;
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
         __Pyx_INCREF(__pyx_t_8);
         __Pyx_INCREF(function);
         __Pyx_DECREF_SET(__pyx_t_7, function);
-        __pyx_t_9 = 1;
+        __pyx_t_2 = 1;
       }
     }
-    __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;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_7)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_t_1, __pyx_t_6};
+      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_2, 2+__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 654, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_t_1, __pyx_t_6};
+      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_2, 2+__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 654, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_9 = PyTuple_New(2+__pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 654, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_9);
+      if (__pyx_t_8) {
+        __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+__pyx_t_2, __pyx_t_1);
+      __Pyx_GIVEREF(__pyx_t_6);
+      PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_2, __pyx_t_6);
+      __pyx_t_1 = 0;
+      __pyx_t_6 = 0;
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_9, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 654, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     }
-    __Pyx_GIVEREF(__pyx_t_1);
-    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_1);
-    __Pyx_GIVEREF(__pyx_t_6);
-    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_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;
 
-    /* "libpetsc4py.pyx":651
+    /* "libpetsc4py.pyx":653
  *     viewcontext(PyMat(mat), vwr)
  *     cdef view = PyMat(mat).view
  *     if view is not None:             # <<<<<<<<<<<<<<
@@ -7341,7 +7735,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatView_Python(Mat __pyx_v_mat, Pets
  */
   }
 
-  /* "libpetsc4py.pyx":653
+  /* "libpetsc4py.pyx":655
  *     if view is not None:
  *         view(Mat_(mat), Viewer_(vwr))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -7351,7 +7745,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatView_Python(Mat __pyx_v_mat, Pets
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":643
+  /* "libpetsc4py.pyx":645
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatView_Python(             # <<<<<<<<<<<<<<
@@ -7366,19 +7760,19 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatView_Python(Mat __pyx_v_mat, Pets
   __Pyx_XDECREF(__pyx_t_6);
   __Pyx_XDECREF(__pyx_t_7);
   __Pyx_XDECREF(__pyx_t_8);
-  __Pyx_XDECREF(__pyx_t_10);
+  __Pyx_XDECREF(__pyx_t_9);
   __Pyx_AddTraceback("libpetsc4py.MatView_Python", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = PETSC_ERR_PYTHON;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_view);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":655
+/* "libpetsc4py.pyx":657
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatDuplicate_Python(             # <<<<<<<<<<<<<<
@@ -7398,15 +7792,15 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDuplicate_Python(Mat __pyx_v_mat,
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
-  Py_ssize_t __pyx_t_8;
+  int __pyx_t_8;
   PyObject *__pyx_t_9 = NULL;
   Mat __pyx_t_10;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatDuplicate_Python", 0);
 
-  /* "libpetsc4py.pyx":661
+  /* "libpetsc4py.pyx":663
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatDuplicate_Python")             # <<<<<<<<<<<<<<
@@ -7415,22 +7809,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDuplicate_Python(Mat __pyx_v_mat,
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatDuplicate_Python"));
 
-  /* "libpetsc4py.pyx":662
+  /* "libpetsc4py.pyx":664
  *     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_ERR(0, 662, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 664, __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_ERR(0, 662, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_duplicate); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 664, __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":663
+  /* "libpetsc4py.pyx":665
  *     FunctionBegin(b"MatDuplicate_Python")
  *     cdef duplicate = PyMat(mat).duplicate
  *     if duplicate is None: return UNSUPPORTED(b"duplicate")             # <<<<<<<<<<<<<<
@@ -7444,21 +7838,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDuplicate_Python(Mat __pyx_v_mat,
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":664
+  /* "libpetsc4py.pyx":666
  *     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_ERR(0, 664, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 666, __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_ERR(0, 664, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyInt_From_long(((long)__pyx_v_op)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 666, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(__pyx_v_duplicate);
   __pyx_t_6 = __pyx_v_duplicate; __pyx_t_7 = NULL;
   __pyx_t_8 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_6))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
     __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
     if (likely(__pyx_t_7)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
@@ -7468,26 +7862,48 @@ 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_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;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_6)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_1, __pyx_t_5};
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 666, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_1, __pyx_t_5};
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 666, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  } else
+  #endif
+  {
+    __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 666, __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;
+    }
+    __Pyx_GIVEREF(__pyx_t_1);
+    PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_1);
+    __Pyx_GIVEREF(__pyx_t_5);
+    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_ERR(0, 666, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   }
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_5);
-  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_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_ERR(0, 664, __pyx_L1_error)
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(0, 666, __pyx_L1_error)
   __pyx_v_m = ((struct PyPetscMatObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":665
+  /* "libpetsc4py.pyx":667
  *     if duplicate is None: return UNSUPPORTED(b"duplicate")
  *     cdef Mat m = duplicate(Mat_(mat), <long>op)
  *     out[0] = m.mat; m.mat = NULL             # <<<<<<<<<<<<<<
@@ -7498,7 +7914,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":666
+  /* "libpetsc4py.pyx":668
  *     cdef Mat m = duplicate(Mat_(mat), <long>op)
  *     out[0] = m.mat; m.mat = NULL
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -7508,7 +7924,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDuplicate_Python(Mat __pyx_v_mat,
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":655
+  /* "libpetsc4py.pyx":657
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatDuplicate_Python(             # <<<<<<<<<<<<<<
@@ -7531,12 +7947,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDuplicate_Python(Mat __pyx_v_mat,
   __Pyx_XDECREF((PyObject *)__pyx_v_m);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":668
+/* "libpetsc4py.pyx":670
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatCopy_Python(             # <<<<<<<<<<<<<<
@@ -7556,14 +7972,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCopy_Python(Mat __pyx_v_mat, Mat
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
-  Py_ssize_t __pyx_t_9;
+  int __pyx_t_9;
   PyObject *__pyx_t_10 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatCopy_Python", 0);
 
-  /* "libpetsc4py.pyx":674
+  /* "libpetsc4py.pyx":676
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatCopy_Python")             # <<<<<<<<<<<<<<
@@ -7572,22 +7988,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCopy_Python(Mat __pyx_v_mat, Mat
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatCopy_Python"));
 
-  /* "libpetsc4py.pyx":675
+  /* "libpetsc4py.pyx":677
  *     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_ERR(0, 675, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 677, __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_ERR(0, 675, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_copy); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 677, __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":676
+  /* "libpetsc4py.pyx":678
  *     FunctionBegin(b"MatCopy_Python")
  *     cdef copy = PyMat(mat).copy
  *     if copy is None: return UNSUPPORTED(b"copy")             # <<<<<<<<<<<<<<
@@ -7601,23 +8017,23 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCopy_Python(Mat __pyx_v_mat, Mat
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":677
+  /* "libpetsc4py.pyx":679
  *     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_ERR(0, 677, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 679, __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_ERR(0, 677, __pyx_L1_error)
+  __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_out)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 679, __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_ERR(0, 677, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyInt_From_long(((long)__pyx_v_op)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 679, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(__pyx_v_copy);
   __pyx_t_7 = __pyx_v_copy; __pyx_t_8 = NULL;
   __pyx_t_9 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
     __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
     if (likely(__pyx_t_8)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -7627,27 +8043,51 @@ 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_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;
-  }
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_5);
-  PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_5);
-  __Pyx_GIVEREF(__pyx_t_6);
-  PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_t_6);
-  __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_ERR(0, 677, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_7)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_1, __pyx_t_5, __pyx_t_6};
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 679, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_1, __pyx_t_5, __pyx_t_6};
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 679, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+  } else
+  #endif
+  {
+    __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 679, __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;
+    }
+    __Pyx_GIVEREF(__pyx_t_1);
+    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_1);
+    __Pyx_GIVEREF(__pyx_t_5);
+    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_5);
+    __Pyx_GIVEREF(__pyx_t_6);
+    PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_t_6);
+    __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_ERR(0, 679, __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":678
+  /* "libpetsc4py.pyx":680
  *     if copy is None: return UNSUPPORTED(b"copy")
  *     copy(Mat_(mat), Mat_(out), <long>op)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -7657,7 +8097,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCopy_Python(Mat __pyx_v_mat, Mat
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":668
+  /* "libpetsc4py.pyx":670
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatCopy_Python(             # <<<<<<<<<<<<<<
@@ -7680,12 +8120,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCopy_Python(Mat __pyx_v_mat, Mat
   __Pyx_XDECREF(__pyx_v_copy);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":680
+/* "libpetsc4py.pyx":682
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatGetDiagonalBlock_Python(             # <<<<<<<<<<<<<<
@@ -7707,11 +8147,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetDiagonalBlock_Python(Mat __pyx
   PyObject *__pyx_t_7 = NULL;
   Mat __pyx_t_8;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatGetDiagonalBlock_Python", 0);
 
-  /* "libpetsc4py.pyx":685
+  /* "libpetsc4py.pyx":687
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatGetDiagonalBlock_Python")             # <<<<<<<<<<<<<<
@@ -7720,22 +8160,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetDiagonalBlock_Python(Mat __pyx
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatGetDiagonalBlock_Python"));
 
-  /* "libpetsc4py.pyx":686
+  /* "libpetsc4py.pyx":688
  *     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_ERR(0, 686, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 688, __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_ERR(0, 686, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_getDiagonalBlock); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 688, __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":687
+  /* "libpetsc4py.pyx":689
  *     FunctionBegin(b"MatGetDiagonalBlock_Python")
  *     cdef getDiagonalBlock = PyMat(mat).getDiagonalBlock
  *     if getDiagonalBlock is None:             # <<<<<<<<<<<<<<
@@ -7746,7 +8186,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetDiagonalBlock_Python(Mat __pyx
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":688
+    /* "libpetsc4py.pyx":690
  *     cdef getDiagonalBlock = PyMat(mat).getDiagonalBlock
  *     if getDiagonalBlock is None:
  *         if getCommSize(mat) == 1:             # <<<<<<<<<<<<<<
@@ -7756,7 +8196,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":689
+      /* "libpetsc4py.pyx":691
  *     if getDiagonalBlock is None:
  *         if getCommSize(mat) == 1:
  *             out[0] = mat             # <<<<<<<<<<<<<<
@@ -7765,7 +8205,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetDiagonalBlock_Python(Mat __pyx
  */
       (__pyx_v_out[0]) = __pyx_v_mat;
 
-      /* "libpetsc4py.pyx":690
+      /* "libpetsc4py.pyx":692
  *         if getCommSize(mat) == 1:
  *             out[0] = mat
  *             return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -7775,7 +8215,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetDiagonalBlock_Python(Mat __pyx
       __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
       goto __pyx_L0;
 
-      /* "libpetsc4py.pyx":688
+      /* "libpetsc4py.pyx":690
  *     cdef getDiagonalBlock = PyMat(mat).getDiagonalBlock
  *     if getDiagonalBlock is None:
  *         if getCommSize(mat) == 1:             # <<<<<<<<<<<<<<
@@ -7784,7 +8224,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetDiagonalBlock_Python(Mat __pyx
  */
     }
 
-    /* "libpetsc4py.pyx":687
+    /* "libpetsc4py.pyx":689
  *     FunctionBegin(b"MatGetDiagonalBlock_Python")
  *     cdef getDiagonalBlock = PyMat(mat).getDiagonalBlock
  *     if getDiagonalBlock is None:             # <<<<<<<<<<<<<<
@@ -7793,7 +8233,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetDiagonalBlock_Python(Mat __pyx
  */
   }
 
-  /* "libpetsc4py.pyx":691
+  /* "libpetsc4py.pyx":693
  *             out[0] = mat
  *             return FunctionEnd()
  *     if getDiagonalBlock is None: return UNSUPPORTED(b"getDiagonalBlock")             # <<<<<<<<<<<<<<
@@ -7807,18 +8247,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetDiagonalBlock_Python(Mat __pyx
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":692
+  /* "libpetsc4py.pyx":694
  *             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_ERR(0, 692, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 694, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_getDiagonalBlock);
   __pyx_t_5 = __pyx_v_getDiagonalBlock; __pyx_t_6 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
     __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
     if (likely(__pyx_t_6)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -7828,26 +8268,46 @@ 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_ERR(0, 692, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 694, __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_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_ERR(0, 692, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_5)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_1};
+      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 694, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_1};
+      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 694, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 694, __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_ERR(0, 694, __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_ERR(0, 692, __pyx_L1_error)
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(0, 694, __pyx_L1_error)
   __pyx_v_sub = ((struct PyPetscMatObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":693
+  /* "libpetsc4py.pyx":695
  *     if getDiagonalBlock is None: return UNSUPPORTED(b"getDiagonalBlock")
  *     cdef Mat sub = getDiagonalBlock(Mat_(mat))
  *     if sub is not None: out[0] = sub.mat             # <<<<<<<<<<<<<<
@@ -7861,17 +8321,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetDiagonalBlock_Python(Mat __pyx
     (__pyx_v_out[0]) = __pyx_t_8;
   }
 
-  /* "libpetsc4py.pyx":694
+  /* "libpetsc4py.pyx":696
  *     cdef Mat sub = getDiagonalBlock(Mat_(mat))
  *     if sub is not None: out[0] = sub.mat
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
  * 
- * cdef PetscErrorCode MatGetSubMatrix_Python(
+ * cdef PetscErrorCode MatCreateSubMatrix_Python(
  */
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":680
+  /* "libpetsc4py.pyx":682
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatGetDiagonalBlock_Python(             # <<<<<<<<<<<<<<
@@ -7893,21 +8353,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetDiagonalBlock_Python(Mat __pyx
   __Pyx_XDECREF((PyObject *)__pyx_v_sub);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":696
+/* "libpetsc4py.pyx":698
  *     return FunctionEnd()
  * 
- * cdef PetscErrorCode MatGetSubMatrix_Python(             # <<<<<<<<<<<<<<
+ * cdef PetscErrorCode MatCreateSubMatrix_Python(             # <<<<<<<<<<<<<<
  *     PetscMat mat,
  *     PetscIS  row,
  */
 
-static PetscErrorCode __pyx_f_11libpetsc4py_MatGetSubMatrix_Python(Mat __pyx_v_mat, IS __pyx_v_row, IS __pyx_v_col, MatReuse __pyx_v_op, Mat *__pyx_v_out) {
-  PyObject *__pyx_v_getSubMatrix = 0;
+static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateSubMatrix_Python(Mat __pyx_v_mat, IS __pyx_v_row, IS __pyx_v_col, MatReuse __pyx_v_op, Mat *__pyx_v_out) {
+  PyObject *__pyx_v_createSubMatrix = 0;
   struct PyPetscMatObject *__pyx_v_sub = 0;
   PetscErrorCode __pyx_r;
   __Pyx_RefNannyDeclarations
@@ -7919,56 +8379,56 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetSubMatrix_Python(Mat __pyx_v_m
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
-  Py_ssize_t __pyx_t_9;
+  int __pyx_t_9;
   PyObject *__pyx_t_10 = NULL;
   PyObject *__pyx_t_11 = NULL;
   Mat __pyx_t_12;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
-  __Pyx_RefNannySetupContext("MatGetSubMatrix_Python", 0);
+  __Pyx_RefNannySetupContext("MatCreateSubMatrix_Python", 0);
 
-  /* "libpetsc4py.pyx":704
+  /* "libpetsc4py.pyx":706
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatCopy_Python")             # <<<<<<<<<<<<<<
- *     cdef getSubMatrix = PyMat(mat).getSubMatrix
- *     if getSubMatrix is None: return UNSUPPORTED(b"getSubMatrix")
+ *     cdef createSubMatrix = PyMat(mat).createSubMatrix
+ *     if createSubMatrix is None: return UNSUPPORTED(b"createSubMatrix")
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatCopy_Python"));
 
-  /* "libpetsc4py.pyx":705
+  /* "libpetsc4py.pyx":707
  *     except IERR with gil:
  *     FunctionBegin(b"MatCopy_Python")
- *     cdef getSubMatrix = PyMat(mat).getSubMatrix             # <<<<<<<<<<<<<<
- *     if getSubMatrix is None: return UNSUPPORTED(b"getSubMatrix")
+ *     cdef createSubMatrix = PyMat(mat).createSubMatrix             # <<<<<<<<<<<<<<
+ *     if createSubMatrix is None: return UNSUPPORTED(b"createSubMatrix")
  *     cdef Mat sub = None
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 705, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 707, __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_ERR(0, 705, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_createSubMatrix); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 707, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-  __pyx_v_getSubMatrix = __pyx_t_2;
+  __pyx_v_createSubMatrix = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":706
+  /* "libpetsc4py.pyx":708
  *     FunctionBegin(b"MatCopy_Python")
- *     cdef getSubMatrix = PyMat(mat).getSubMatrix
- *     if getSubMatrix is None: return UNSUPPORTED(b"getSubMatrix")             # <<<<<<<<<<<<<<
+ *     cdef createSubMatrix = PyMat(mat).createSubMatrix
+ *     if createSubMatrix is None: return UNSUPPORTED(b"createSubMatrix")             # <<<<<<<<<<<<<<
  *     cdef Mat sub = None
  *     if op == MAT_IGNORE_MATRIX:
  */
-  __pyx_t_3 = (__pyx_v_getSubMatrix == Py_None);
+  __pyx_t_3 = (__pyx_v_createSubMatrix == Py_None);
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
-    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"getSubMatrix"));
+    __pyx_r = __pyx_f_11libpetsc4py_UNSUPPORTED(((char *)"createSubMatrix"));
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":707
- *     cdef getSubMatrix = PyMat(mat).getSubMatrix
- *     if getSubMatrix is None: return UNSUPPORTED(b"getSubMatrix")
+  /* "libpetsc4py.pyx":709
+ *     cdef createSubMatrix = PyMat(mat).createSubMatrix
+ *     if createSubMatrix is None: return UNSUPPORTED(b"createSubMatrix")
  *     cdef Mat sub = None             # <<<<<<<<<<<<<<
  *     if op == MAT_IGNORE_MATRIX:
  *         sub = None
@@ -7976,8 +8436,8 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetSubMatrix_Python(Mat __pyx_v_m
   __Pyx_INCREF(Py_None);
   __pyx_v_sub = ((struct PyPetscMatObject *)Py_None);
 
-  /* "libpetsc4py.pyx":708
- *     if getSubMatrix is None: return UNSUPPORTED(b"getSubMatrix")
+  /* "libpetsc4py.pyx":710
+ *     if createSubMatrix is None: return UNSUPPORTED(b"createSubMatrix")
  *     cdef Mat sub = None
  *     if op == MAT_IGNORE_MATRIX:             # <<<<<<<<<<<<<<
  *         sub = None
@@ -7986,18 +8446,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetSubMatrix_Python(Mat __pyx_v_m
   switch (__pyx_v_op) {
     case MAT_IGNORE_MATRIX:
 
-    /* "libpetsc4py.pyx":709
+    /* "libpetsc4py.pyx":711
  *     cdef Mat sub = None
  *     if op == MAT_IGNORE_MATRIX:
  *         sub = None             # <<<<<<<<<<<<<<
  *     elif op == MAT_INITIAL_MATRIX:
- *         sub = getSubMatrix(Mat_(mat), IS_(row), IS_(col), None)
+ *         sub = createSubMatrix(Mat_(mat), IS_(row), IS_(col), None)
  */
     __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")
+    /* "libpetsc4py.pyx":710
+ *     if createSubMatrix is None: return UNSUPPORTED(b"createSubMatrix")
  *     cdef Mat sub = None
  *     if op == MAT_IGNORE_MATRIX:             # <<<<<<<<<<<<<<
  *         sub = None
@@ -8005,32 +8465,32 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetSubMatrix_Python(Mat __pyx_v_m
  */
     break;
 
-    /* "libpetsc4py.pyx":710
+    /* "libpetsc4py.pyx":712
  *     if op == MAT_IGNORE_MATRIX:
  *         sub = None
  *     elif op == MAT_INITIAL_MATRIX:             # <<<<<<<<<<<<<<
- *         sub = getSubMatrix(Mat_(mat), IS_(row), IS_(col), None)
+ *         sub = createSubMatrix(Mat_(mat), IS_(row), IS_(col), None)
  *     elif op == MAT_REUSE_MATRIX:
  */
     case MAT_INITIAL_MATRIX:
 
-    /* "libpetsc4py.pyx":711
+    /* "libpetsc4py.pyx":713
  *         sub = None
  *     elif op == MAT_INITIAL_MATRIX:
- *         sub = getSubMatrix(Mat_(mat), IS_(row), IS_(col), None)             # <<<<<<<<<<<<<<
+ *         sub = createSubMatrix(Mat_(mat), IS_(row), IS_(col), None)             # <<<<<<<<<<<<<<
  *     elif op == MAT_REUSE_MATRIX:
- *         sub = getSubMatrix(Mat_(mat), IS_(row), IS_(col), Mat_(out[0]))
+ *         sub = createSubMatrix(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_ERR(0, 711, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 713, __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_ERR(0, 711, __pyx_L1_error)
+    __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_IS_(__pyx_v_row)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 713, __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_ERR(0, 711, __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_INCREF(__pyx_v_getSubMatrix);
-    __pyx_t_7 = __pyx_v_getSubMatrix; __pyx_t_8 = NULL;
+    __Pyx_INCREF(__pyx_v_createSubMatrix);
+    __pyx_t_7 = __pyx_v_createSubMatrix; __pyx_t_8 = NULL;
     __pyx_t_9 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -8040,68 +8500,92 @@ 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_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;
-    }
-    __Pyx_GIVEREF(__pyx_t_1);
-    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_1);
-    __Pyx_GIVEREF(__pyx_t_5);
-    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_5);
-    __Pyx_GIVEREF(__pyx_t_6);
-    PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_t_6);
-    __Pyx_INCREF(Py_None);
-    __Pyx_GIVEREF(Py_None);
-    PyTuple_SET_ITEM(__pyx_t_10, 3+__pyx_t_9, Py_None);
-    __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_ERR(0, 711, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_7)) {
+      PyObject *__pyx_temp[5] = {__pyx_t_8, __pyx_t_1, __pyx_t_5, __pyx_t_6, Py_None};
+      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 4+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 713, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __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;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+      PyObject *__pyx_temp[5] = {__pyx_t_8, __pyx_t_1, __pyx_t_5, __pyx_t_6, Py_None};
+      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 4+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 713, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __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;
+    } else
+    #endif
+    {
+      __pyx_t_10 = PyTuple_New(4+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 713, __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;
+      }
+      __Pyx_GIVEREF(__pyx_t_1);
+      PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_1);
+      __Pyx_GIVEREF(__pyx_t_5);
+      PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_5);
+      __Pyx_GIVEREF(__pyx_t_6);
+      PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_t_6);
+      __Pyx_INCREF(Py_None);
+      __Pyx_GIVEREF(Py_None);
+      PyTuple_SET_ITEM(__pyx_t_10, 3+__pyx_t_9, Py_None);
+      __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_ERR(0, 713, __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_ERR(0, 711, __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":710
+    /* "libpetsc4py.pyx":712
  *     if op == MAT_IGNORE_MATRIX:
  *         sub = None
  *     elif op == MAT_INITIAL_MATRIX:             # <<<<<<<<<<<<<<
- *         sub = getSubMatrix(Mat_(mat), IS_(row), IS_(col), None)
+ *         sub = createSubMatrix(Mat_(mat), IS_(row), IS_(col), None)
  *     elif op == MAT_REUSE_MATRIX:
  */
     break;
 
-    /* "libpetsc4py.pyx":712
+    /* "libpetsc4py.pyx":714
  *     elif op == MAT_INITIAL_MATRIX:
- *         sub = getSubMatrix(Mat_(mat), IS_(row), IS_(col), None)
+ *         sub = createSubMatrix(Mat_(mat), IS_(row), IS_(col), None)
  *     elif op == MAT_REUSE_MATRIX:             # <<<<<<<<<<<<<<
- *         sub = getSubMatrix(Mat_(mat), IS_(row), IS_(col), Mat_(out[0]))
+ *         sub = createSubMatrix(Mat_(mat), IS_(row), IS_(col), Mat_(out[0]))
  *     if sub is not None:
  */
     case MAT_REUSE_MATRIX:
 
-    /* "libpetsc4py.pyx":713
- *         sub = getSubMatrix(Mat_(mat), IS_(row), IS_(col), None)
+    /* "libpetsc4py.pyx":715
+ *         sub = createSubMatrix(Mat_(mat), IS_(row), IS_(col), None)
  *     elif op == MAT_REUSE_MATRIX:
- *         sub = getSubMatrix(Mat_(mat), IS_(row), IS_(col), Mat_(out[0]))             # <<<<<<<<<<<<<<
+ *         sub = createSubMatrix(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_ERR(0, 713, __pyx_L1_error)
+    __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 715, __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_ERR(0, 713, __pyx_L1_error)
+    __pyx_t_10 = ((PyObject *)__pyx_f_11libpetsc4py_IS_(__pyx_v_row)); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 715, __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_ERR(0, 713, __pyx_L1_error)
+    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_IS_(__pyx_v_col)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 715, __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_ERR(0, 713, __pyx_L1_error)
+    __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_((__pyx_v_out[0]))); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 715, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_INCREF(__pyx_v_getSubMatrix);
-    __pyx_t_1 = __pyx_v_getSubMatrix; __pyx_t_8 = NULL;
+    __Pyx_INCREF(__pyx_v_createSubMatrix);
+    __pyx_t_1 = __pyx_v_createSubMatrix; __pyx_t_8 = NULL;
     __pyx_t_9 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
@@ -8111,45 +8595,71 @@ 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_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;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_1)) {
+      PyObject *__pyx_temp[5] = {__pyx_t_8, __pyx_t_7, __pyx_t_10, __pyx_t_6, __pyx_t_5};
+      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_9, 4+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 715, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
+      PyObject *__pyx_temp[5] = {__pyx_t_8, __pyx_t_7, __pyx_t_10, __pyx_t_6, __pyx_t_5};
+      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-__pyx_t_9, 4+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 715, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_11 = PyTuple_New(4+__pyx_t_9); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 715, __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;
+      }
+      __Pyx_GIVEREF(__pyx_t_7);
+      PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_9, __pyx_t_7);
+      __Pyx_GIVEREF(__pyx_t_10);
+      PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_9, __pyx_t_10);
+      __Pyx_GIVEREF(__pyx_t_6);
+      PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_9, __pyx_t_6);
+      __Pyx_GIVEREF(__pyx_t_5);
+      PyTuple_SET_ITEM(__pyx_t_11, 3+__pyx_t_9, __pyx_t_5);
+      __pyx_t_7 = 0;
+      __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_ERR(0, 715, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
     }
-    __Pyx_GIVEREF(__pyx_t_7);
-    PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_9, __pyx_t_7);
-    __Pyx_GIVEREF(__pyx_t_10);
-    PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_9, __pyx_t_10);
-    __Pyx_GIVEREF(__pyx_t_6);
-    PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_9, __pyx_t_6);
-    __Pyx_GIVEREF(__pyx_t_5);
-    PyTuple_SET_ITEM(__pyx_t_11, 3+__pyx_t_9, __pyx_t_5);
-    __pyx_t_7 = 0;
-    __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_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_ERR(0, 713, __pyx_L1_error)
+    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(0, 715, __pyx_L1_error)
     __Pyx_DECREF_SET(__pyx_v_sub, ((struct PyPetscMatObject *)__pyx_t_2));
     __pyx_t_2 = 0;
 
-    /* "libpetsc4py.pyx":712
+    /* "libpetsc4py.pyx":714
  *     elif op == MAT_INITIAL_MATRIX:
- *         sub = getSubMatrix(Mat_(mat), IS_(row), IS_(col), None)
+ *         sub = createSubMatrix(Mat_(mat), IS_(row), IS_(col), None)
  *     elif op == MAT_REUSE_MATRIX:             # <<<<<<<<<<<<<<
- *         sub = getSubMatrix(Mat_(mat), IS_(row), IS_(col), Mat_(out[0]))
+ *         sub = createSubMatrix(Mat_(mat), IS_(row), IS_(col), Mat_(out[0]))
  *     if sub is not None:
  */
     break;
     default: break;
   }
 
-  /* "libpetsc4py.pyx":714
+  /* "libpetsc4py.pyx":716
  *     elif op == MAT_REUSE_MATRIX:
- *         sub = getSubMatrix(Mat_(mat), IS_(row), IS_(col), Mat_(out[0]))
+ *         sub = createSubMatrix(Mat_(mat), IS_(row), IS_(col), Mat_(out[0]))
  *     if sub is not None:             # <<<<<<<<<<<<<<
  *         addRef(sub.mat)
  *         out[0] = sub.mat
@@ -8158,8 +8668,8 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetSubMatrix_Python(Mat __pyx_v_m
   __pyx_t_3 = (__pyx_t_4 != 0);
   if (__pyx_t_3) {
 
-    /* "libpetsc4py.pyx":715
- *         sub = getSubMatrix(Mat_(mat), IS_(row), IS_(col), Mat_(out[0]))
+    /* "libpetsc4py.pyx":717
+ *         sub = createSubMatrix(Mat_(mat), IS_(row), IS_(col), Mat_(out[0]))
  *     if sub is not None:
  *         addRef(sub.mat)             # <<<<<<<<<<<<<<
  *         out[0] = sub.mat
@@ -8167,7 +8677,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetSubMatrix_Python(Mat __pyx_v_m
  */
     __pyx_f_11libpetsc4py_addRef(__pyx_v_sub->mat);
 
-    /* "libpetsc4py.pyx":716
+    /* "libpetsc4py.pyx":718
  *     if sub is not None:
  *         addRef(sub.mat)
  *         out[0] = sub.mat             # <<<<<<<<<<<<<<
@@ -8177,16 +8687,16 @@ 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;
 
-    /* "libpetsc4py.pyx":714
+    /* "libpetsc4py.pyx":716
  *     elif op == MAT_REUSE_MATRIX:
- *         sub = getSubMatrix(Mat_(mat), IS_(row), IS_(col), Mat_(out[0]))
+ *         sub = createSubMatrix(Mat_(mat), IS_(row), IS_(col), Mat_(out[0]))
  *     if sub is not None:             # <<<<<<<<<<<<<<
  *         addRef(sub.mat)
  *         out[0] = sub.mat
  */
   }
 
-  /* "libpetsc4py.pyx":717
+  /* "libpetsc4py.pyx":719
  *         addRef(sub.mat)
  *         out[0] = sub.mat
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -8196,10 +8706,10 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetSubMatrix_Python(Mat __pyx_v_m
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":696
+  /* "libpetsc4py.pyx":698
  *     return FunctionEnd()
  * 
- * cdef PetscErrorCode MatGetSubMatrix_Python(             # <<<<<<<<<<<<<<
+ * cdef PetscErrorCode MatCreateSubMatrix_Python(             # <<<<<<<<<<<<<<
  *     PetscMat mat,
  *     PetscIS  row,
  */
@@ -8214,19 +8724,19 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetSubMatrix_Python(Mat __pyx_v_m
   __Pyx_XDECREF(__pyx_t_8);
   __Pyx_XDECREF(__pyx_t_10);
   __Pyx_XDECREF(__pyx_t_11);
-  __Pyx_AddTraceback("libpetsc4py.MatGetSubMatrix_Python", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("libpetsc4py.MatCreateSubMatrix_Python", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = PETSC_ERR_PYTHON;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_getSubMatrix);
+  __Pyx_XDECREF(__pyx_v_createSubMatrix);
   __Pyx_XDECREF((PyObject *)__pyx_v_sub);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":719
+/* "libpetsc4py.pyx":721
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSetOption_Python(             # <<<<<<<<<<<<<<
@@ -8246,14 +8756,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetOption_Python(Mat __pyx_v_mat,
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
-  Py_ssize_t __pyx_t_9;
+  int __pyx_t_9;
   PyObject *__pyx_t_10 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatSetOption_Python", 0);
 
-  /* "libpetsc4py.pyx":725
+  /* "libpetsc4py.pyx":727
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatSetOption_Python")             # <<<<<<<<<<<<<<
@@ -8262,49 +8772,49 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetOption_Python(Mat __pyx_v_mat,
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatSetOption_Python"));
 
-  /* "libpetsc4py.pyx":726
+  /* "libpetsc4py.pyx":728
  *     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)
+ *         setOption(Mat_(mat), <long>op, <bint>(<int>flag))
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 726, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 728, __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_ERR(0, 726, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_setOption); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 728, __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":727
+  /* "libpetsc4py.pyx":729
  *     FunctionBegin(b"MatSetOption_Python")
  *     cdef setOption = PyMat(mat).setOption
  *     if setOption is not None:             # <<<<<<<<<<<<<<
- *         setOption(Mat_(mat), <long>op, <bint>flag)
+ *         setOption(Mat_(mat), <long>op, <bint>(<int>flag))
  *     return FunctionEnd()
  */
   __pyx_t_3 = (__pyx_v_setOption != Py_None);
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":728
+    /* "libpetsc4py.pyx":730
  *     cdef setOption = PyMat(mat).setOption
  *     if setOption is not None:
- *         setOption(Mat_(mat), <long>op, <bint>flag)             # <<<<<<<<<<<<<<
+ *         setOption(Mat_(mat), <long>op, <bint>(<int>flag))             # <<<<<<<<<<<<<<
  *     return FunctionEnd()
  * 
  */
-    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 728, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 730, __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_ERR(0, 728, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyInt_From_long(((long)__pyx_v_op)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 730, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = __Pyx_PyInt_From_PetscBool(__pyx_v_flag); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 728, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyBool_FromLong((((int)__pyx_v_flag) != 0)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 730, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_INCREF(__pyx_v_setOption);
     __pyx_t_7 = __pyx_v_setOption; __pyx_t_8 = NULL;
     __pyx_t_9 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -8314,38 +8824,62 @@ 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_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;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_7)) {
+      PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_1, __pyx_t_5, __pyx_t_6};
+      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 730, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __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;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+      PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_1, __pyx_t_5, __pyx_t_6};
+      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 730, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __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;
+    } else
+    #endif
+    {
+      __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 730, __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;
+      }
+      __Pyx_GIVEREF(__pyx_t_1);
+      PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_1);
+      __Pyx_GIVEREF(__pyx_t_5);
+      PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_5);
+      __Pyx_GIVEREF(__pyx_t_6);
+      PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_t_6);
+      __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_ERR(0, 730, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     }
-    __Pyx_GIVEREF(__pyx_t_1);
-    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_1);
-    __Pyx_GIVEREF(__pyx_t_5);
-    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_5);
-    __Pyx_GIVEREF(__pyx_t_6);
-    PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_t_6);
-    __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_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;
 
-    /* "libpetsc4py.pyx":727
+    /* "libpetsc4py.pyx":729
  *     FunctionBegin(b"MatSetOption_Python")
  *     cdef setOption = PyMat(mat).setOption
  *     if setOption is not None:             # <<<<<<<<<<<<<<
- *         setOption(Mat_(mat), <long>op, <bint>flag)
+ *         setOption(Mat_(mat), <long>op, <bint>(<int>flag))
  *     return FunctionEnd()
  */
   }
 
-  /* "libpetsc4py.pyx":729
+  /* "libpetsc4py.pyx":731
  *     if setOption is not None:
- *         setOption(Mat_(mat), <long>op, <bint>flag)
+ *         setOption(Mat_(mat), <long>op, <bint>(<int>flag))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
  * 
  * cdef PetscErrorCode MatSetUp_Python(
@@ -8353,7 +8887,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetOption_Python(Mat __pyx_v_mat,
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":719
+  /* "libpetsc4py.pyx":721
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSetOption_Python(             # <<<<<<<<<<<<<<
@@ -8376,12 +8910,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetOption_Python(Mat __pyx_v_mat,
   __Pyx_XDECREF(__pyx_v_setOption);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":731
+/* "libpetsc4py.pyx":733
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSetUp_Python(             # <<<<<<<<<<<<<<
@@ -8407,11 +8941,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetUp_Python(Mat __pyx_v_mat) {
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatSetUp_Python", 0);
 
-  /* "libpetsc4py.pyx":735
+  /* "libpetsc4py.pyx":737
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatSetUp_Python")             # <<<<<<<<<<<<<<
@@ -8420,7 +8954,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetUp_Python(Mat __pyx_v_mat) {
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatSetUp_Python"));
 
-  /* "libpetsc4py.pyx":736
+  /* "libpetsc4py.pyx":738
  *     except IERR with gil:
  *     FunctionBegin(b"MatSetUp_Python")
  *     cdef PetscInt rbs = -1, cbs = -1             # <<<<<<<<<<<<<<
@@ -8430,25 +8964,25 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetUp_Python(Mat __pyx_v_mat) {
   __pyx_v_rbs = -1L;
   __pyx_v_cbs = -1L;
 
-  /* "libpetsc4py.pyx":737
+  /* "libpetsc4py.pyx":739
  *     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_ERR(0, 737, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscLayoutGetBlockSize(__pyx_v_mat->rmap, (&__pyx_v_rbs))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 739, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":738
+  /* "libpetsc4py.pyx":740
  *     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_ERR(0, 738, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscLayoutGetBlockSize(__pyx_v_mat->cmap, (&__pyx_v_cbs))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 740, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":739
+  /* "libpetsc4py.pyx":741
  *     CHKERR( PetscLayoutGetBlockSize(mat.rmap,&rbs) )
  *     CHKERR( PetscLayoutGetBlockSize(mat.cmap,&cbs) )
  *     if rbs == -1: rbs = 1             # <<<<<<<<<<<<<<
@@ -8460,7 +8994,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetUp_Python(Mat __pyx_v_mat) {
     __pyx_v_rbs = 1;
   }
 
-  /* "libpetsc4py.pyx":740
+  /* "libpetsc4py.pyx":742
  *     CHKERR( PetscLayoutGetBlockSize(mat.cmap,&cbs) )
  *     if rbs == -1: rbs = 1
  *     if cbs == -1: cbs = rbs             # <<<<<<<<<<<<<<
@@ -8472,43 +9006,43 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetUp_Python(Mat __pyx_v_mat) {
     __pyx_v_cbs = __pyx_v_rbs;
   }
 
-  /* "libpetsc4py.pyx":741
+  /* "libpetsc4py.pyx":743
  *     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_ERR(0, 741, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscLayoutSetBlockSize(__pyx_v_mat->rmap, __pyx_v_rbs)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 743, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":742
+  /* "libpetsc4py.pyx":744
  *     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_ERR(0, 742, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscLayoutSetBlockSize(__pyx_v_mat->cmap, __pyx_v_cbs)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 744, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":743
+  /* "libpetsc4py.pyx":745
  *     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_ERR(0, 743, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscLayoutSetUp(__pyx_v_mat->rmap)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 745, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":744
+  /* "libpetsc4py.pyx":746
  *     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_ERR(0, 744, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscLayoutSetUp(__pyx_v_mat->cmap)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 746, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":745
+  /* "libpetsc4py.pyx":747
  *     CHKERR( PetscLayoutSetUp(mat.rmap)             )
  *     CHKERR( PetscLayoutSetUp(mat.cmap)             )
  *     mat.preallocated = PETSC_TRUE             # <<<<<<<<<<<<<<
@@ -8517,7 +9051,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetUp_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_mat->preallocated = PETSC_TRUE;
 
-  /* "libpetsc4py.pyx":748
+  /* "libpetsc4py.pyx":750
  *     #
  *     cdef char name[2048]
  *     cdef PetscBool found = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -8526,30 +9060,30 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetUp_Python(Mat __pyx_v_mat) {
  */
   __pyx_v_found = PETSC_FALSE;
 
-  /* "libpetsc4py.pyx":749
+  /* "libpetsc4py.pyx":751
  *     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_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 749, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 751, __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":750
+    /* "libpetsc4py.pyx":752
  *     cdef PetscBool found = PETSC_FALSE
  *     if PyMat(mat).self is None:
  *         CHKERR( PetscOptionsGetString(NULL,             # <<<<<<<<<<<<<<
  *                 getPrefix(mat), b"-mat_python_type",
  *                 name,sizeof(name),&found) )
  */
-    __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)
+    __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 == ((int)-1))) __PYX_ERR(0, 752, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":753
+    /* "libpetsc4py.pyx":755
  *                 getPrefix(mat), b"-mat_python_type",
  *                 name,sizeof(name),&found) )
  *         if found and name[0]:             # <<<<<<<<<<<<<<
@@ -8566,17 +9100,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetUp_Python(Mat __pyx_v_mat) {
     __pyx_L7_bool_binop_done:;
     if (__pyx_t_4) {
 
-      /* "libpetsc4py.pyx":754
+      /* "libpetsc4py.pyx":756
  *                 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_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)
+      __pyx_t_5 = __pyx_f_11libpetsc4py_MatPythonSetType_PYTHON(__pyx_v_mat, __pyx_v_name); if (unlikely(__pyx_t_5 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 756, __pyx_L1_error)
+      __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(__pyx_t_5); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 756, __pyx_L1_error)
 
-      /* "libpetsc4py.pyx":753
+      /* "libpetsc4py.pyx":755
  *                 getPrefix(mat), b"-mat_python_type",
  *                 name,sizeof(name),&found) )
  *         if found and name[0]:             # <<<<<<<<<<<<<<
@@ -8585,7 +9119,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetUp_Python(Mat __pyx_v_mat) {
  */
     }
 
-    /* "libpetsc4py.pyx":749
+    /* "libpetsc4py.pyx":751
  *     cdef char name[2048]
  *     cdef PetscBool found = PETSC_FALSE
  *     if PyMat(mat).self is None:             # <<<<<<<<<<<<<<
@@ -8594,21 +9128,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetUp_Python(Mat __pyx_v_mat) {
  */
   }
 
-  /* "libpetsc4py.pyx":755
+  /* "libpetsc4py.pyx":757
  *         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_ERR(0, 755, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 757, __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":756
+    /* "libpetsc4py.pyx":758
  *             CHKERR( MatPythonSetType_PYTHON(mat,name) )
  *     if PyMat(mat).self is None:
  *         return PetscSETERR(PETSC_ERR_USER,             # <<<<<<<<<<<<<<
@@ -8618,7 +9152,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetUp_Python(Mat __pyx_v_mat) {
     __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
+    /* "libpetsc4py.pyx":757
  *         if found and name[0]:
  *             CHKERR( MatPythonSetType_PYTHON(mat,name) )
  *     if PyMat(mat).self is None:             # <<<<<<<<<<<<<<
@@ -8627,22 +9161,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetUp_Python(Mat __pyx_v_mat) {
  */
   }
 
-  /* "libpetsc4py.pyx":762
+  /* "libpetsc4py.pyx":764
  *             "-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_ERR(0, 762, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 764, __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_ERR(0, 762, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_setUp); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 764, __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":763
+  /* "libpetsc4py.pyx":765
  *     #
  *     cdef setUp = PyMat(mat).setUp
  *     if setUp is not None:             # <<<<<<<<<<<<<<
@@ -8653,18 +9187,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetUp_Python(Mat __pyx_v_mat) {
   __pyx_t_4 = (__pyx_t_2 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":764
+    /* "libpetsc4py.pyx":766
  *     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_ERR(0, 764, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 766, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_setUp);
     __pyx_t_7 = __pyx_v_setUp; __pyx_t_8 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -8674,24 +9208,44 @@ 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_ERR(0, 764, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 766, __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_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_ERR(0, 764, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_6);
-      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_7)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_3};
+        __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 766, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+        __Pyx_GOTREF(__pyx_t_6);
+        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_3};
+        __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 766, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+        __Pyx_GOTREF(__pyx_t_6);
+        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 766, __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_ERR(0, 766, __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;
 
-    /* "libpetsc4py.pyx":763
+    /* "libpetsc4py.pyx":765
  *     #
  *     cdef setUp = PyMat(mat).setUp
  *     if setUp is not None:             # <<<<<<<<<<<<<<
@@ -8700,7 +9254,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetUp_Python(Mat __pyx_v_mat) {
  */
   }
 
-  /* "libpetsc4py.pyx":765
+  /* "libpetsc4py.pyx":767
  *     if setUp is not None:
  *         setUp(Mat_(mat))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -8710,7 +9264,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetUp_Python(Mat __pyx_v_mat) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":731
+  /* "libpetsc4py.pyx":733
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSetUp_Python(             # <<<<<<<<<<<<<<
@@ -8731,12 +9285,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetUp_Python(Mat __pyx_v_mat) {
   __Pyx_XDECREF(__pyx_v_setUp);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":767
+/* "libpetsc4py.pyx":769
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatAssemblyBegin_Python(             # <<<<<<<<<<<<<<
@@ -8755,14 +9309,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatAssemblyBegin_Python(Mat __pyx_v_
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
-  Py_ssize_t __pyx_t_8;
+  int __pyx_t_8;
   PyObject *__pyx_t_9 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatAssemblyBegin_Python", 0);
 
-  /* "libpetsc4py.pyx":772
+  /* "libpetsc4py.pyx":774
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatAssemblyBegin_Python")             # <<<<<<<<<<<<<<
@@ -8771,22 +9325,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatAssemblyBegin_Python(Mat __pyx_v_
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatAssemblyBegin_Python"));
 
-  /* "libpetsc4py.pyx":773
+  /* "libpetsc4py.pyx":775
  *     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_ERR(0, 773, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 775, __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_ERR(0, 773, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_assemblyBegin); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 775, __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":774
+  /* "libpetsc4py.pyx":776
  *     FunctionBegin(b"MatAssemblyBegin_Python")
  *     cdef assembly = PyMat(mat).assemblyBegin
  *     if assembly is not None:             # <<<<<<<<<<<<<<
@@ -8797,21 +9351,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatAssemblyBegin_Python(Mat __pyx_v_
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":775
+    /* "libpetsc4py.pyx":777
  *     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_ERR(0, 775, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 777, __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_ERR(0, 775, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyInt_From_long(((long)__pyx_v_at)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 777, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_INCREF(__pyx_v_assembly);
     __pyx_t_6 = __pyx_v_assembly; __pyx_t_7 = NULL;
     __pyx_t_8 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_6))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
       __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
       if (likely(__pyx_t_7)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
@@ -8821,24 +9375,46 @@ 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_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;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_6)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_1, __pyx_t_5};
+      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 777, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_1, __pyx_t_5};
+      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 777, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 777, __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;
+      }
+      __Pyx_GIVEREF(__pyx_t_1);
+      PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_1);
+      __Pyx_GIVEREF(__pyx_t_5);
+      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_ERR(0, 777, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     }
-    __Pyx_GIVEREF(__pyx_t_1);
-    PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_1);
-    __Pyx_GIVEREF(__pyx_t_5);
-    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_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;
 
-    /* "libpetsc4py.pyx":774
+    /* "libpetsc4py.pyx":776
  *     FunctionBegin(b"MatAssemblyBegin_Python")
  *     cdef assembly = PyMat(mat).assemblyBegin
  *     if assembly is not None:             # <<<<<<<<<<<<<<
@@ -8847,7 +9423,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatAssemblyBegin_Python(Mat __pyx_v_
  */
   }
 
-  /* "libpetsc4py.pyx":776
+  /* "libpetsc4py.pyx":778
  *     if assembly is not None:
  *         assembly(Mat_(mat), <long>at)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -8857,7 +9433,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatAssemblyBegin_Python(Mat __pyx_v_
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":767
+  /* "libpetsc4py.pyx":769
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatAssemblyBegin_Python(             # <<<<<<<<<<<<<<
@@ -8879,12 +9455,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatAssemblyBegin_Python(Mat __pyx_v_
   __Pyx_XDECREF(__pyx_v_assembly);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":778
+/* "libpetsc4py.pyx":780
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatAssemblyEnd_Python(             # <<<<<<<<<<<<<<
@@ -8903,14 +9479,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatAssemblyEnd_Python(Mat __pyx_v_ma
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
-  Py_ssize_t __pyx_t_8;
+  int __pyx_t_8;
   PyObject *__pyx_t_9 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatAssemblyEnd_Python", 0);
 
-  /* "libpetsc4py.pyx":783
+  /* "libpetsc4py.pyx":785
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatAssemblyEnd_Python")             # <<<<<<<<<<<<<<
@@ -8919,22 +9495,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatAssemblyEnd_Python(Mat __pyx_v_ma
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatAssemblyEnd_Python"));
 
-  /* "libpetsc4py.pyx":784
+  /* "libpetsc4py.pyx":786
  *     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_ERR(0, 784, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 786, __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_ERR(0, 784, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_assemblyEnd); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 786, __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":785
+  /* "libpetsc4py.pyx":787
  *     FunctionBegin(b"MatAssemblyEnd_Python")
  *     cdef assembly = PyMat(mat).assemblyEnd
  *     if assembly is None:             # <<<<<<<<<<<<<<
@@ -8945,22 +9521,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatAssemblyEnd_Python(Mat __pyx_v_ma
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":786
+    /* "libpetsc4py.pyx":788
  *     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_ERR(0, 786, __pyx_L1_error)
+    __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 788, __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_ERR(0, 786, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_assembly); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 788, __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;
 
-    /* "libpetsc4py.pyx":785
+    /* "libpetsc4py.pyx":787
  *     FunctionBegin(b"MatAssemblyEnd_Python")
  *     cdef assembly = PyMat(mat).assemblyEnd
  *     if assembly is None:             # <<<<<<<<<<<<<<
@@ -8969,7 +9545,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatAssemblyEnd_Python(Mat __pyx_v_ma
  */
   }
 
-  /* "libpetsc4py.pyx":787
+  /* "libpetsc4py.pyx":789
  *     if assembly is None:
  *         assembly = PyMat(mat).assembly
  *     if assembly is not None:             # <<<<<<<<<<<<<<
@@ -8980,21 +9556,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatAssemblyEnd_Python(Mat __pyx_v_ma
   __pyx_t_3 = (__pyx_t_4 != 0);
   if (__pyx_t_3) {
 
-    /* "libpetsc4py.pyx":788
+    /* "libpetsc4py.pyx":790
  *         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_ERR(0, 788, __pyx_L1_error)
+    __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 790, __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_ERR(0, 788, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyInt_From_int(((int)__pyx_v_at)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 790, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_INCREF(__pyx_v_assembly);
     __pyx_t_6 = __pyx_v_assembly; __pyx_t_7 = NULL;
     __pyx_t_8 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_6))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
       __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
       if (likely(__pyx_t_7)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
@@ -9004,24 +9580,46 @@ 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_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;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_6)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_2, __pyx_t_5};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 790, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_2, __pyx_t_5};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 790, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 790, __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;
+      }
+      __Pyx_GIVEREF(__pyx_t_2);
+      PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_2);
+      __Pyx_GIVEREF(__pyx_t_5);
+      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_ERR(0, 790, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     }
-    __Pyx_GIVEREF(__pyx_t_2);
-    PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_2);
-    __Pyx_GIVEREF(__pyx_t_5);
-    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_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;
 
-    /* "libpetsc4py.pyx":787
+    /* "libpetsc4py.pyx":789
  *     if assembly is None:
  *         assembly = PyMat(mat).assembly
  *     if assembly is not None:             # <<<<<<<<<<<<<<
@@ -9030,7 +9628,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatAssemblyEnd_Python(Mat __pyx_v_ma
  */
   }
 
-  /* "libpetsc4py.pyx":789
+  /* "libpetsc4py.pyx":791
  *     if assembly is not None:
  *         assembly(Mat_(mat), <int>at)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -9040,7 +9638,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatAssemblyEnd_Python(Mat __pyx_v_ma
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":778
+  /* "libpetsc4py.pyx":780
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatAssemblyEnd_Python(             # <<<<<<<<<<<<<<
@@ -9062,12 +9660,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatAssemblyEnd_Python(Mat __pyx_v_ma
   __Pyx_XDECREF(__pyx_v_assembly);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":791
+/* "libpetsc4py.pyx":793
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatZeroEntries_Python(             # <<<<<<<<<<<<<<
@@ -9087,11 +9685,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatZeroEntries_Python(Mat __pyx_v_ma
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatZeroEntries_Python", 0);
 
-  /* "libpetsc4py.pyx":795
+  /* "libpetsc4py.pyx":797
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatZeroEntries_Python")             # <<<<<<<<<<<<<<
@@ -9100,22 +9698,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatZeroEntries_Python(Mat __pyx_v_ma
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatZeroEntries_Python"));
 
-  /* "libpetsc4py.pyx":796
+  /* "libpetsc4py.pyx":798
  *     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_ERR(0, 796, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 798, __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_ERR(0, 796, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_zeroEntries); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 798, __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":797
+  /* "libpetsc4py.pyx":799
  *     FunctionBegin(b"MatZeroEntries_Python")
  *     cdef zeroEntries = PyMat(mat).zeroEntries
  *     if zeroEntries is None: return UNSUPPORTED(b"zeroEntries")             # <<<<<<<<<<<<<<
@@ -9129,18 +9727,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatZeroEntries_Python(Mat __pyx_v_ma
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":798
+  /* "libpetsc4py.pyx":800
  *     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_ERR(0, 798, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 800, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_zeroEntries);
   __pyx_t_5 = __pyx_v_zeroEntries; __pyx_t_6 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
     __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
     if (likely(__pyx_t_6)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -9150,34 +9748,54 @@ 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_ERR(0, 798, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 800, __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_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_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":799
- *     if zeroEntries is None: return UNSUPPORTED(b"zeroEntries")
- *     zeroEntries(Mat_(mat))
- *     return FunctionEnd()             # <<<<<<<<<<<<<<
- * 
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_5)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_1};
+      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 800, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_1};
+      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 800, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 800, __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_ERR(0, 800, __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":801
+ *     if zeroEntries is None: return UNSUPPORTED(b"zeroEntries")
+ *     zeroEntries(Mat_(mat))
+ *     return FunctionEnd()             # <<<<<<<<<<<<<<
+ * 
  * cdef PetscErrorCode MatScale_Python(
  */
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":791
+  /* "libpetsc4py.pyx":793
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatZeroEntries_Python(             # <<<<<<<<<<<<<<
@@ -9198,12 +9816,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatZeroEntries_Python(Mat __pyx_v_ma
   __Pyx_XDECREF(__pyx_v_zeroEntries);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":801
+/* "libpetsc4py.pyx":803
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatScale_Python(             # <<<<<<<<<<<<<<
@@ -9222,14 +9840,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatScale_Python(Mat __pyx_v_mat, Pet
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
-  Py_ssize_t __pyx_t_8;
+  int __pyx_t_8;
   PyObject *__pyx_t_9 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatScale_Python", 0);
 
-  /* "libpetsc4py.pyx":806
+  /* "libpetsc4py.pyx":808
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatScale_Python")             # <<<<<<<<<<<<<<
@@ -9238,22 +9856,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatScale_Python(Mat __pyx_v_mat, Pet
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatScale_Python"));
 
-  /* "libpetsc4py.pyx":807
+  /* "libpetsc4py.pyx":809
  *     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_ERR(0, 807, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 809, __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_ERR(0, 807, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_scale); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 809, __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":808
+  /* "libpetsc4py.pyx":810
  *     FunctionBegin(b"MatScale_Python")
  *     cdef scale = PyMat(mat).scale
  *     if scale is None: return UNSUPPORTED(b"scale")             # <<<<<<<<<<<<<<
@@ -9267,21 +9885,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatScale_Python(Mat __pyx_v_mat, Pet
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":809
+  /* "libpetsc4py.pyx":811
  *     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_ERR(0, 809, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 811, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = PyPetscScalar_FromPetscScalar(__pyx_v_s); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 809, __pyx_L1_error)
+  __pyx_t_5 = PyPetscScalar_FromPetscScalar(__pyx_v_s); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 811, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(__pyx_v_scale);
   __pyx_t_6 = __pyx_v_scale; __pyx_t_7 = NULL;
   __pyx_t_8 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_6))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
     __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
     if (likely(__pyx_t_7)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
@@ -9291,24 +9909,46 @@ 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_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;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_6)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_1, __pyx_t_5};
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 811, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_1, __pyx_t_5};
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 811, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  } else
+  #endif
+  {
+    __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 811, __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;
+    }
+    __Pyx_GIVEREF(__pyx_t_1);
+    PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_1);
+    __Pyx_GIVEREF(__pyx_t_5);
+    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_ERR(0, 811, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   }
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_5);
-  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_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":810
+  /* "libpetsc4py.pyx":812
  *     if scale is None: return UNSUPPORTED(b"scale")
  *     scale(Mat_(mat), toScalar(s))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -9318,7 +9958,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatScale_Python(Mat __pyx_v_mat, Pet
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":801
+  /* "libpetsc4py.pyx":803
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatScale_Python(             # <<<<<<<<<<<<<<
@@ -9340,12 +9980,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatScale_Python(Mat __pyx_v_mat, Pet
   __Pyx_XDECREF(__pyx_v_scale);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":812
+/* "libpetsc4py.pyx":814
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatShift_Python(             # <<<<<<<<<<<<<<
@@ -9364,14 +10004,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatShift_Python(Mat __pyx_v_mat, Pet
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
-  Py_ssize_t __pyx_t_8;
+  int __pyx_t_8;
   PyObject *__pyx_t_9 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatShift_Python", 0);
 
-  /* "libpetsc4py.pyx":817
+  /* "libpetsc4py.pyx":819
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatShift_Python")             # <<<<<<<<<<<<<<
@@ -9380,22 +10020,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatShift_Python(Mat __pyx_v_mat, Pet
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatShift_Python"));
 
-  /* "libpetsc4py.pyx":818
+  /* "libpetsc4py.pyx":820
  *     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_ERR(0, 818, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 820, __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_ERR(0, 818, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_shift); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 820, __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":819
+  /* "libpetsc4py.pyx":821
  *     FunctionBegin(b"MatShift_Python")
  *     cdef shift = PyMat(mat).shift
  *     if shift is None: return UNSUPPORTED(b"shift")             # <<<<<<<<<<<<<<
@@ -9409,21 +10049,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatShift_Python(Mat __pyx_v_mat, Pet
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":820
+  /* "libpetsc4py.pyx":822
  *     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_ERR(0, 820, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 822, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = PyPetscScalar_FromPetscScalar(__pyx_v_s); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 820, __pyx_L1_error)
+  __pyx_t_5 = PyPetscScalar_FromPetscScalar(__pyx_v_s); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 822, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(__pyx_v_shift);
   __pyx_t_6 = __pyx_v_shift; __pyx_t_7 = NULL;
   __pyx_t_8 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_6))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
     __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
     if (likely(__pyx_t_7)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
@@ -9433,24 +10073,46 @@ 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_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;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_6)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_1, __pyx_t_5};
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 822, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_1, __pyx_t_5};
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 822, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  } else
+  #endif
+  {
+    __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 822, __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;
+    }
+    __Pyx_GIVEREF(__pyx_t_1);
+    PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_1);
+    __Pyx_GIVEREF(__pyx_t_5);
+    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_ERR(0, 822, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   }
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_5);
-  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_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":821
+  /* "libpetsc4py.pyx":823
  *     if shift is None: return UNSUPPORTED(b"shift")
  *     shift(Mat_(mat), toScalar(s))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -9460,7 +10122,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatShift_Python(Mat __pyx_v_mat, Pet
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":812
+  /* "libpetsc4py.pyx":814
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatShift_Python(             # <<<<<<<<<<<<<<
@@ -9482,12 +10144,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatShift_Python(Mat __pyx_v_mat, Pet
   __Pyx_XDECREF(__pyx_v_shift);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":823
+/* "libpetsc4py.pyx":825
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatCreateVecs_Python(             # <<<<<<<<<<<<<<
@@ -9520,11 +10182,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
   PyObject *(*__pyx_t_17)(PyObject *);
   Vec __pyx_t_18;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatCreateVecs_Python", 0);
 
-  /* "libpetsc4py.pyx":829
+  /* "libpetsc4py.pyx":831
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatCreateVecs_Python")             # <<<<<<<<<<<<<<
@@ -9533,22 +10195,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatCreateVecs_Python"));
 
-  /* "libpetsc4py.pyx":830
+  /* "libpetsc4py.pyx":832
  *     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_ERR(0, 830, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 832, __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_ERR(0, 830, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_createVecs); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 832, __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":831
+  /* "libpetsc4py.pyx":833
  *     FunctionBegin(b"MatCreateVecs_Python")
  *     cdef createVecs = PyMat(mat).createVecs
  *     if createVecs is None:             # <<<<<<<<<<<<<<
@@ -9559,7 +10221,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":832
+    /* "libpetsc4py.pyx":834
  *     cdef createVecs = PyMat(mat).createVecs
  *     if createVecs is None:
  *         try:             # <<<<<<<<<<<<<<
@@ -9568,7 +10230,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
  */
     /*try:*/ {
 
-      /* "libpetsc4py.pyx":833
+      /* "libpetsc4py.pyx":835
  *     if createVecs is None:
  *         try:
  *             mat.ops.getvecs = NULL             # <<<<<<<<<<<<<<
@@ -9577,17 +10239,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
  */
       __pyx_v_mat->ops->getvecs = NULL;
 
-      /* "libpetsc4py.pyx":834
+      /* "libpetsc4py.pyx":836
  *         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_ERR(0, 834, __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 == ((int)-1))) __PYX_ERR(0, 836, __pyx_L5_error)
     }
 
-    /* "libpetsc4py.pyx":836
+    /* "libpetsc4py.pyx":838
  *             CHKERR( MatCreateVecs(mat,x,y) )
  *         finally:
  *             mat.ops.getvecs = MatCreateVecs_Python             # <<<<<<<<<<<<<<
@@ -9618,7 +10280,6 @@ 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);
@@ -9636,7 +10297,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
       __pyx_L6:;
     }
 
-    /* "libpetsc4py.pyx":837
+    /* "libpetsc4py.pyx":839
  *         finally:
  *             mat.ops.getvecs = MatCreateVecs_Python
  *         return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -9646,7 +10307,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
     __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
     goto __pyx_L0;
 
-    /* "libpetsc4py.pyx":831
+    /* "libpetsc4py.pyx":833
  *     FunctionBegin(b"MatCreateVecs_Python")
  *     cdef createVecs = PyMat(mat).createVecs
  *     if createVecs is None:             # <<<<<<<<<<<<<<
@@ -9655,7 +10316,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
  */
   }
 
-  /* "libpetsc4py.pyx":838
+  /* "libpetsc4py.pyx":840
  *             mat.ops.getvecs = MatCreateVecs_Python
  *         return FunctionEnd()
  *     if createVecs is None: return UNSUPPORTED(b"createVecs")             # <<<<<<<<<<<<<<
@@ -9669,18 +10330,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":840
+  /* "libpetsc4py.pyx":842
  *     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_ERR(0, 840, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 842, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_createVecs);
   __pyx_t_14 = __pyx_v_createVecs; __pyx_t_15 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_14))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_14))) {
     __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_14);
     if (likely(__pyx_t_15)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
@@ -9690,24 +10351,44 @@ 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_ERR(0, 840, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_14, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 842, __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_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_ERR(0, 840, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_14)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_15, __pyx_t_1};
+      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_14, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 842, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_14)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_15, __pyx_t_1};
+      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_14, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 842, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_16 = PyTuple_New(1+1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 842, __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_ERR(0, 842, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_16); __pyx_t_16 = 0;
+    }
   }
   __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
   if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
     PyObject* sequence = __pyx_t_2;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -9715,9 +10396,9 @@ 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_ERR(0, 840, __pyx_L1_error)
+      __PYX_ERR(0, 842, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_14 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_16 = PyTuple_GET_ITEM(sequence, 1); 
@@ -9728,15 +10409,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_ERR(0, 840, __pyx_L1_error)
+    __pyx_t_14 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_14)) __PYX_ERR(0, 842, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_14);
-    __pyx_t_16 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 840, __pyx_L1_error)
+    __pyx_t_16 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_16)) __PYX_ERR(0, 842, __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_ERR(0, 840, __pyx_L1_error)
+    __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 842, __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;
@@ -9744,7 +10425,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_ERR(0, 840, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_17(__pyx_t_1), 2) < 0) __PYX_ERR(0, 842, __pyx_L1_error)
     __pyx_t_17 = NULL;
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     goto __pyx_L11_unpacking_done;
@@ -9752,17 +10433,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_ERR(0, 840, __pyx_L1_error)
+    __PYX_ERR(0, 842, __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_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)
+  if (!(likely(((__pyx_t_14) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_14, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(0, 842, __pyx_L1_error)
+  if (!(likely(((__pyx_t_16) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_16, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(0, 842, __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":841
+  /* "libpetsc4py.pyx":843
  *     cdef Vec u, v
  *     u, v = createVecs(Mat_(mat))
  *     if x != NULL:             # <<<<<<<<<<<<<<
@@ -9772,7 +10453,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":842
+    /* "libpetsc4py.pyx":844
  *     u, v = createVecs(Mat_(mat))
  *     if x != NULL:
  *         x[0] = u.vec             # <<<<<<<<<<<<<<
@@ -9782,7 +10463,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":843
+    /* "libpetsc4py.pyx":845
  *     if x != NULL:
  *         x[0] = u.vec
  *         u.vec = NULL             # <<<<<<<<<<<<<<
@@ -9791,7 +10472,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
  */
     __pyx_v_u->vec = NULL;
 
-    /* "libpetsc4py.pyx":841
+    /* "libpetsc4py.pyx":843
  *     cdef Vec u, v
  *     u, v = createVecs(Mat_(mat))
  *     if x != NULL:             # <<<<<<<<<<<<<<
@@ -9800,7 +10481,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
  */
   }
 
-  /* "libpetsc4py.pyx":844
+  /* "libpetsc4py.pyx":846
  *         x[0] = u.vec
  *         u.vec = NULL
  *     if y != NULL:             # <<<<<<<<<<<<<<
@@ -9810,7 +10491,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":845
+    /* "libpetsc4py.pyx":847
  *         u.vec = NULL
  *     if y != NULL:
  *         y[0] = v.vec             # <<<<<<<<<<<<<<
@@ -9820,7 +10501,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":846
+    /* "libpetsc4py.pyx":848
  *     if y != NULL:
  *         y[0] = v.vec
  *         v.vec = NULL             # <<<<<<<<<<<<<<
@@ -9829,7 +10510,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
  */
     __pyx_v_v->vec = NULL;
 
-    /* "libpetsc4py.pyx":844
+    /* "libpetsc4py.pyx":846
  *         x[0] = u.vec
  *         u.vec = NULL
  *     if y != NULL:             # <<<<<<<<<<<<<<
@@ -9838,7 +10519,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
  */
   }
 
-  /* "libpetsc4py.pyx":847
+  /* "libpetsc4py.pyx":849
  *         y[0] = v.vec
  *         v.vec = NULL
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -9848,7 +10529,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":823
+  /* "libpetsc4py.pyx":825
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatCreateVecs_Python(             # <<<<<<<<<<<<<<
@@ -9871,12 +10552,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatCreateVecs_Python(Mat __pyx_v_mat
   __Pyx_XDECREF((PyObject *)__pyx_v_v);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":849
+/* "libpetsc4py.pyx":851
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatMult_Python(             # <<<<<<<<<<<<<<
@@ -9896,14 +10577,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMult_Python(Mat __pyx_v_mat, Vec
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
-  Py_ssize_t __pyx_t_9;
+  int __pyx_t_9;
   PyObject *__pyx_t_10 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatMult_Python", 0);
 
-  /* "libpetsc4py.pyx":855
+  /* "libpetsc4py.pyx":857
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatMult_Python")             # <<<<<<<<<<<<<<
@@ -9912,22 +10593,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMult_Python(Mat __pyx_v_mat, Vec
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatMult_Python"));
 
-  /* "libpetsc4py.pyx":856
+  /* "libpetsc4py.pyx":858
  *     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_ERR(0, 856, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 858, __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_ERR(0, 856, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_mult); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 858, __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":857
+  /* "libpetsc4py.pyx":859
  *     FunctionBegin(b"MatMult_Python")
  *     cdef mult = PyMat(mat).mult
  *     if mult is None: return UNSUPPORTED(b"mult")             # <<<<<<<<<<<<<<
@@ -9941,23 +10622,23 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMult_Python(Mat __pyx_v_mat, Vec
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":858
+  /* "libpetsc4py.pyx":860
  *     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_ERR(0, 858, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 860, __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_ERR(0, 858, __pyx_L1_error)
+  __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 860, __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_ERR(0, 858, __pyx_L1_error)
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 860, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(__pyx_v_mult);
   __pyx_t_7 = __pyx_v_mult; __pyx_t_8 = NULL;
   __pyx_t_9 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
     __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
     if (likely(__pyx_t_8)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -9967,27 +10648,51 @@ 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_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;
-  }
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_5);
-  PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_5);
-  __Pyx_GIVEREF(__pyx_t_6);
-  PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_t_6);
-  __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_ERR(0, 858, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_7)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_1, __pyx_t_5, __pyx_t_6};
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 860, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_1, __pyx_t_5, __pyx_t_6};
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 860, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+  } else
+  #endif
+  {
+    __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 860, __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;
+    }
+    __Pyx_GIVEREF(__pyx_t_1);
+    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_1);
+    __Pyx_GIVEREF(__pyx_t_5);
+    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_5);
+    __Pyx_GIVEREF(__pyx_t_6);
+    PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_t_6);
+    __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_ERR(0, 860, __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":859
+  /* "libpetsc4py.pyx":861
  *     if mult is None: return UNSUPPORTED(b"mult")
  *     mult(Mat_(mat), Vec_(x), Vec_(y))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -9997,7 +10702,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMult_Python(Mat __pyx_v_mat, Vec
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":849
+  /* "libpetsc4py.pyx":851
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatMult_Python(             # <<<<<<<<<<<<<<
@@ -10020,12 +10725,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMult_Python(Mat __pyx_v_mat, Vec
   __Pyx_XDECREF(__pyx_v_mult);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":861
+/* "libpetsc4py.pyx":863
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatMultTranspose_Python(             # <<<<<<<<<<<<<<
@@ -10048,14 +10753,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTranspose_Python(Mat __pyx_v_
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = NULL;
-  Py_ssize_t __pyx_t_10;
-  PyObject *__pyx_t_11 = NULL;
+  PyObject *__pyx_t_10 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatMultTranspose_Python", 0);
 
-  /* "libpetsc4py.pyx":867
+  /* "libpetsc4py.pyx":869
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatMultTranspose_Python")             # <<<<<<<<<<<<<<
@@ -10064,22 +10768,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTranspose_Python(Mat __pyx_v_
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatMultTranspose_Python"));
 
-  /* "libpetsc4py.pyx":868
+  /* "libpetsc4py.pyx":870
  *     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_ERR(0, 868, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 870, __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_ERR(0, 868, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_multTranspose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 870, __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":870
+  /* "libpetsc4py.pyx":872
  *     cdef multTranspose = PyMat(mat).multTranspose
  *     cdef PetscBool symmset, symmknown
  *     if multTranspose is None:             # <<<<<<<<<<<<<<
@@ -10090,7 +10794,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTranspose_Python(Mat __pyx_v_
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":871
+    /* "libpetsc4py.pyx":873
  *     cdef PetscBool symmset, symmknown
  *     if multTranspose is None:
  *         symmset = symmknown = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -10100,16 +10804,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTranspose_Python(Mat __pyx_v_
     __pyx_v_symmset = PETSC_FALSE;
     __pyx_v_symmknown = PETSC_FALSE;
 
-    /* "libpetsc4py.pyx":872
+    /* "libpetsc4py.pyx":874
  *     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_ERR(0, 872, __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 == ((int)-1))) __PYX_ERR(0, 874, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":873
+    /* "libpetsc4py.pyx":875
  *         symmset = symmknown = PETSC_FALSE
  *         CHKERR( MatIsSymmetricKnown(mat,&symmset,&symmknown) )
  *         if symmset and symmknown:             # <<<<<<<<<<<<<<
@@ -10125,16 +10829,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTranspose_Python(Mat __pyx_v_
     __pyx_L5_bool_binop_done:;
     if (__pyx_t_4) {
 
-      /* "libpetsc4py.pyx":874
+      /* "libpetsc4py.pyx":876
  *         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_ERR(0, 874, __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 == ((int)-1))) __PYX_ERR(0, 876, __pyx_L1_error)
 
-      /* "libpetsc4py.pyx":875
+      /* "libpetsc4py.pyx":877
  *         if symmset and symmknown:
  *             CHKERR( MatMult(mat,x,y) )
  *             return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -10144,7 +10848,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTranspose_Python(Mat __pyx_v_
       __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
       goto __pyx_L0;
 
-      /* "libpetsc4py.pyx":873
+      /* "libpetsc4py.pyx":875
  *         symmset = symmknown = PETSC_FALSE
  *         CHKERR( MatIsSymmetricKnown(mat,&symmset,&symmknown) )
  *         if symmset and symmknown:             # <<<<<<<<<<<<<<
@@ -10153,7 +10857,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTranspose_Python(Mat __pyx_v_
  */
     }
 
-    /* "libpetsc4py.pyx":870
+    /* "libpetsc4py.pyx":872
  *     cdef multTranspose = PyMat(mat).multTranspose
  *     cdef PetscBool symmset, symmknown
  *     if multTranspose is None:             # <<<<<<<<<<<<<<
@@ -10162,7 +10866,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTranspose_Python(Mat __pyx_v_
  */
   }
 
-  /* "libpetsc4py.pyx":876
+  /* "libpetsc4py.pyx":878
  *             CHKERR( MatMult(mat,x,y) )
  *             return FunctionEnd()
  *     if multTranspose is None: return UNSUPPORTED(b"multTranspose")             # <<<<<<<<<<<<<<
@@ -10176,53 +10880,77 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTranspose_Python(Mat __pyx_v_
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":877
+  /* "libpetsc4py.pyx":879
  *             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_ERR(0, 877, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 879, __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_ERR(0, 877, __pyx_L1_error)
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 879, __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_ERR(0, 877, __pyx_L1_error)
+  __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 879, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_INCREF(__pyx_v_multTranspose);
   __pyx_t_8 = __pyx_v_multTranspose; __pyx_t_9 = NULL;
-  __pyx_t_10 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_8))) {
+  __pyx_t_5 = 0;
+  if (CYTHON_UNPACK_METHODS && 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_8, function);
-      __pyx_t_10 = 1;
+      __pyx_t_5 = 1;
     }
   }
-  __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;
-  }
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_t_1);
-  __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_11, 2+__pyx_t_10, __pyx_t_7);
-  __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_ERR(0, 877, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_8)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_t_1, __pyx_t_6, __pyx_t_7};
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 879, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_t_1, __pyx_t_6, __pyx_t_7};
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 879, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+  } else
+  #endif
+  {
+    __pyx_t_10 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 879, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_10);
+    if (__pyx_t_9) {
+      __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+__pyx_t_5, __pyx_t_1);
+    __Pyx_GIVEREF(__pyx_t_6);
+    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_5, __pyx_t_6);
+    __Pyx_GIVEREF(__pyx_t_7);
+    PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_5, __pyx_t_7);
+    __pyx_t_1 = 0;
+    __pyx_t_6 = 0;
+    __pyx_t_7 = 0;
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 879, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+  }
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":878
+  /* "libpetsc4py.pyx":880
  *     if multTranspose is None: return UNSUPPORTED(b"multTranspose")
  *     multTranspose(Mat_(mat), Vec_(x), Vec_(y))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -10232,7 +10960,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTranspose_Python(Mat __pyx_v_
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":861
+  /* "libpetsc4py.pyx":863
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatMultTranspose_Python(             # <<<<<<<<<<<<<<
@@ -10248,19 +10976,19 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTranspose_Python(Mat __pyx_v_
   __Pyx_XDECREF(__pyx_t_7);
   __Pyx_XDECREF(__pyx_t_8);
   __Pyx_XDECREF(__pyx_t_9);
-  __Pyx_XDECREF(__pyx_t_11);
+  __Pyx_XDECREF(__pyx_t_10);
   __Pyx_AddTraceback("libpetsc4py.MatMultTranspose_Python", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = PETSC_ERR_PYTHON;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_multTranspose);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":880
+/* "libpetsc4py.pyx":882
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatMultHermitian_Python(             # <<<<<<<<<<<<<<
@@ -10283,14 +11011,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitian_Python(Mat __pyx_v_
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = NULL;
-  Py_ssize_t __pyx_t_10;
-  PyObject *__pyx_t_11 = NULL;
+  PyObject *__pyx_t_10 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatMultHermitian_Python", 0);
 
-  /* "libpetsc4py.pyx":886
+  /* "libpetsc4py.pyx":888
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatMultHermitian_Python")             # <<<<<<<<<<<<<<
@@ -10299,22 +11026,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitian_Python(Mat __pyx_v_
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatMultHermitian_Python"));
 
-  /* "libpetsc4py.pyx":887
+  /* "libpetsc4py.pyx":889
  *     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_ERR(0, 887, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 889, __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_ERR(0, 887, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_multHermitian); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 889, __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":889
+  /* "libpetsc4py.pyx":891
  *     cdef multHermitian = PyMat(mat).multHermitian
  *     cdef PetscBool hermset, hermknown
  *     if multHermitian is None:             # <<<<<<<<<<<<<<
@@ -10325,7 +11052,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitian_Python(Mat __pyx_v_
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":890
+    /* "libpetsc4py.pyx":892
  *     cdef PetscBool hermset, hermknown
  *     if multHermitian is None:
  *         hermset = hermknown = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -10335,16 +11062,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitian_Python(Mat __pyx_v_
     __pyx_v_hermset = PETSC_FALSE;
     __pyx_v_hermknown = PETSC_FALSE;
 
-    /* "libpetsc4py.pyx":891
+    /* "libpetsc4py.pyx":893
  *     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_ERR(0, 891, __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 == ((int)-1))) __PYX_ERR(0, 893, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":892
+    /* "libpetsc4py.pyx":894
  *         hermset = hermknown = PETSC_FALSE
  *         CHKERR( MatIsHermitianKnown(mat,&hermset,&hermknown) )
  *         if hermset and hermknown:             # <<<<<<<<<<<<<<
@@ -10360,16 +11087,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitian_Python(Mat __pyx_v_
     __pyx_L5_bool_binop_done:;
     if (__pyx_t_4) {
 
-      /* "libpetsc4py.pyx":893
+      /* "libpetsc4py.pyx":895
  *         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_ERR(0, 893, __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 == ((int)-1))) __PYX_ERR(0, 895, __pyx_L1_error)
 
-      /* "libpetsc4py.pyx":894
+      /* "libpetsc4py.pyx":896
  *         if hermset and hermknown:
  *             CHKERR( MatMult(mat,x,y) )
  *             return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -10379,7 +11106,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitian_Python(Mat __pyx_v_
       __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
       goto __pyx_L0;
 
-      /* "libpetsc4py.pyx":892
+      /* "libpetsc4py.pyx":894
  *         hermset = hermknown = PETSC_FALSE
  *         CHKERR( MatIsHermitianKnown(mat,&hermset,&hermknown) )
  *         if hermset and hermknown:             # <<<<<<<<<<<<<<
@@ -10388,7 +11115,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitian_Python(Mat __pyx_v_
  */
     }
 
-    /* "libpetsc4py.pyx":889
+    /* "libpetsc4py.pyx":891
  *     cdef multHermitian = PyMat(mat).multHermitian
  *     cdef PetscBool hermset, hermknown
  *     if multHermitian is None:             # <<<<<<<<<<<<<<
@@ -10397,7 +11124,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitian_Python(Mat __pyx_v_
  */
   }
 
-  /* "libpetsc4py.pyx":895
+  /* "libpetsc4py.pyx":897
  *             CHKERR( MatMult(mat,x,y) )
  *             return FunctionEnd()
  *     if multHermitian is None: return UNSUPPORTED(b"multHermitian")             # <<<<<<<<<<<<<<
@@ -10411,63 +11138,87 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitian_Python(Mat __pyx_v_
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":896
+  /* "libpetsc4py.pyx":898
  *             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_ERR(0, 896, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 898, __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_ERR(0, 896, __pyx_L1_error)
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 898, __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_ERR(0, 896, __pyx_L1_error)
+  __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 898, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_INCREF(__pyx_v_multHermitian);
   __pyx_t_8 = __pyx_v_multHermitian; __pyx_t_9 = NULL;
-  __pyx_t_10 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_8))) {
+  __pyx_t_5 = 0;
+  if (CYTHON_UNPACK_METHODS && 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_8, function);
-      __pyx_t_10 = 1;
+      __pyx_t_5 = 1;
     }
   }
-  __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;
-  }
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_t_1);
-  __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_11, 2+__pyx_t_10, __pyx_t_7);
-  __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_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":897
- *     if multHermitian is None: return UNSUPPORTED(b"multHermitian")
- *     multHermitian(Mat_(mat), Vec_(x), Vec_(y))
- *     return FunctionEnd()             # <<<<<<<<<<<<<<
- * 
- * cdef PetscErrorCode MatMultAdd_Python(
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_8)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_t_1, __pyx_t_6, __pyx_t_7};
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 898, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_t_1, __pyx_t_6, __pyx_t_7};
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 898, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+  } else
+  #endif
+  {
+    __pyx_t_10 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 898, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_10);
+    if (__pyx_t_9) {
+      __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+__pyx_t_5, __pyx_t_1);
+    __Pyx_GIVEREF(__pyx_t_6);
+    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_5, __pyx_t_6);
+    __Pyx_GIVEREF(__pyx_t_7);
+    PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_5, __pyx_t_7);
+    __pyx_t_1 = 0;
+    __pyx_t_6 = 0;
+    __pyx_t_7 = 0;
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 898, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+  }
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+  /* "libpetsc4py.pyx":899
+ *     if multHermitian is None: return UNSUPPORTED(b"multHermitian")
+ *     multHermitian(Mat_(mat), Vec_(x), Vec_(y))
+ *     return FunctionEnd()             # <<<<<<<<<<<<<<
+ * 
+ * cdef PetscErrorCode MatMultAdd_Python(
  */
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":880
+  /* "libpetsc4py.pyx":882
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatMultHermitian_Python(             # <<<<<<<<<<<<<<
@@ -10483,19 +11234,19 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitian_Python(Mat __pyx_v_
   __Pyx_XDECREF(__pyx_t_7);
   __Pyx_XDECREF(__pyx_t_8);
   __Pyx_XDECREF(__pyx_t_9);
-  __Pyx_XDECREF(__pyx_t_11);
+  __Pyx_XDECREF(__pyx_t_10);
   __Pyx_AddTraceback("libpetsc4py.MatMultHermitian_Python", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = PETSC_ERR_PYTHON;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_multHermitian);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":899
+/* "libpetsc4py.pyx":901
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatMultAdd_Python(             # <<<<<<<<<<<<<<
@@ -10518,14 +11269,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultAdd_Python(Mat __pyx_v_mat, V
   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;
+  PyObject *__pyx_t_11 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatMultAdd_Python", 0);
 
-  /* "libpetsc4py.pyx":906
+  /* "libpetsc4py.pyx":908
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatMultAdd_Python")             # <<<<<<<<<<<<<<
@@ -10534,22 +11284,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultAdd_Python(Mat __pyx_v_mat, V
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatMultAdd_Python"));
 
-  /* "libpetsc4py.pyx":907
+  /* "libpetsc4py.pyx":909
  *     except IERR with gil:
  *     FunctionBegin(b"MatMultAdd_Python")
  *     cdef multAdd = PyMat(mat).multAdd             # <<<<<<<<<<<<<<
  *     cdef PetscVec t = NULL
  * 
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 907, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 909, __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_ERR(0, 907, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_multAdd); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 909, __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":908
+  /* "libpetsc4py.pyx":910
  *     FunctionBegin(b"MatMultAdd_Python")
  *     cdef multAdd = PyMat(mat).multAdd
  *     cdef PetscVec t = NULL             # <<<<<<<<<<<<<<
@@ -10558,7 +11308,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultAdd_Python(Mat __pyx_v_mat, V
  */
   __pyx_v_t = NULL;
 
-  /* "libpetsc4py.pyx":910
+  /* "libpetsc4py.pyx":912
  *     cdef PetscVec t = NULL
  * 
  *     if multAdd is None:             # <<<<<<<<<<<<<<
@@ -10569,7 +11319,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultAdd_Python(Mat __pyx_v_mat, V
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":911
+    /* "libpetsc4py.pyx":913
  * 
  *     if multAdd is None:
  *         if v == y:             # <<<<<<<<<<<<<<
@@ -10579,43 +11329,43 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultAdd_Python(Mat __pyx_v_mat, V
     __pyx_t_4 = ((__pyx_v_v == __pyx_v_y) != 0);
     if (__pyx_t_4) {
 
-      /* "libpetsc4py.pyx":912
+      /* "libpetsc4py.pyx":914
  *     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)
+      __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(VecDuplicate(__pyx_v_y, (&__pyx_v_t))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 914, __pyx_L1_error)
 
-      /* "libpetsc4py.pyx":913
+      /* "libpetsc4py.pyx":915
  *         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)
+      __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(MatMult(__pyx_v_mat, __pyx_v_x, __pyx_v_t)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 915, __pyx_L1_error)
 
-      /* "libpetsc4py.pyx":914
+      /* "libpetsc4py.pyx":916
  *             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)
+      __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(VecAXPY(__pyx_v_y, 1.0, __pyx_v_t)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 916, __pyx_L1_error)
 
-      /* "libpetsc4py.pyx":915
+      /* "libpetsc4py.pyx":917
  *             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(VecDestroy((&__pyx_v_t))); if (unlikely(__pyx_t_5 == -1)) __PYX_ERR(0, 915, __pyx_L1_error)
+      __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(VecDestroy((&__pyx_v_t))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 917, __pyx_L1_error)
 
-      /* "libpetsc4py.pyx":911
+      /* "libpetsc4py.pyx":913
  * 
  *     if multAdd is None:
  *         if v == y:             # <<<<<<<<<<<<<<
@@ -10625,7 +11375,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultAdd_Python(Mat __pyx_v_mat, V
       goto __pyx_L4;
     }
 
-    /* "libpetsc4py.pyx":917
+    /* "libpetsc4py.pyx":919
  *             CHKERR( VecDestroy(&t) )
  *         else:
  *             CHKERR( MatMult(mat,x,y) )             # <<<<<<<<<<<<<<
@@ -10633,20 +11383,20 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultAdd_Python(Mat __pyx_v_mat, 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)
+      __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(MatMult(__pyx_v_mat, __pyx_v_x, __pyx_v_y)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 919, __pyx_L1_error)
 
-      /* "libpetsc4py.pyx":918
+      /* "libpetsc4py.pyx":920
  *         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_ERR(0, 918, __pyx_L1_error)
+      __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(VecAXPY(__pyx_v_y, 1.0, __pyx_v_v)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 920, __pyx_L1_error)
     }
     __pyx_L4:;
 
-    /* "libpetsc4py.pyx":919
+    /* "libpetsc4py.pyx":921
  *             CHKERR( MatMult(mat,x,y) )
  *             CHKERR( VecAXPY(y,1.0,v) )
  *         return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -10656,7 +11406,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultAdd_Python(Mat __pyx_v_mat, V
     __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
     goto __pyx_L0;
 
-    /* "libpetsc4py.pyx":910
+    /* "libpetsc4py.pyx":912
  *     cdef PetscVec t = NULL
  * 
  *     if multAdd is None:             # <<<<<<<<<<<<<<
@@ -10665,7 +11415,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultAdd_Python(Mat __pyx_v_mat, V
  */
   }
 
-  /* "libpetsc4py.pyx":920
+  /* "libpetsc4py.pyx":922
  *             CHKERR( VecAXPY(y,1.0,v) )
  *         return FunctionEnd()
  *     if multAdd is None: return UNSUPPORTED(b"multAdd")             # <<<<<<<<<<<<<<
@@ -10679,58 +11429,84 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultAdd_Python(Mat __pyx_v_mat, V
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":921
+  /* "libpetsc4py.pyx":923
  *         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_ERR(0, 921, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 923, __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_ERR(0, 921, __pyx_L1_error)
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 923, __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_ERR(0, 921, __pyx_L1_error)
+  __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_v)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 923, __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_ERR(0, 921, __pyx_L1_error)
+  __pyx_t_8 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 923, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_INCREF(__pyx_v_multAdd);
   __pyx_t_9 = __pyx_v_multAdd; __pyx_t_10 = NULL;
-  __pyx_t_11 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_9))) {
+  __pyx_t_5 = 0;
+  if (CYTHON_UNPACK_METHODS && 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_INCREF(function);
       __Pyx_DECREF_SET(__pyx_t_9, function);
-      __pyx_t_11 = 1;
+      __pyx_t_5 = 1;
     }
   }
-  __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;
-  }
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_11, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_6);
-  PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_11, __pyx_t_6);
-  __Pyx_GIVEREF(__pyx_t_7);
-  PyTuple_SET_ITEM(__pyx_t_12, 2+__pyx_t_11, __pyx_t_7);
-  __Pyx_GIVEREF(__pyx_t_8);
-  PyTuple_SET_ITEM(__pyx_t_12, 3+__pyx_t_11, __pyx_t_8);
-  __pyx_t_1 = 0;
-  __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_ERR(0, 921, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_9)) {
+    PyObject *__pyx_temp[5] = {__pyx_t_10, __pyx_t_1, __pyx_t_6, __pyx_t_7, __pyx_t_8};
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_5, 4+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 923, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) {
+    PyObject *__pyx_temp[5] = {__pyx_t_10, __pyx_t_1, __pyx_t_6, __pyx_t_7, __pyx_t_8};
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_5, 4+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 923, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  } else
+  #endif
+  {
+    __pyx_t_11 = PyTuple_New(4+__pyx_t_5); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 923, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_11);
+    if (__pyx_t_10) {
+      __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_10); __pyx_t_10 = NULL;
+    }
+    __Pyx_GIVEREF(__pyx_t_1);
+    PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_5, __pyx_t_1);
+    __Pyx_GIVEREF(__pyx_t_6);
+    PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_5, __pyx_t_6);
+    __Pyx_GIVEREF(__pyx_t_7);
+    PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_5, __pyx_t_7);
+    __Pyx_GIVEREF(__pyx_t_8);
+    PyTuple_SET_ITEM(__pyx_t_11, 3+__pyx_t_5, __pyx_t_8);
+    __pyx_t_1 = 0;
+    __pyx_t_6 = 0;
+    __pyx_t_7 = 0;
+    __pyx_t_8 = 0;
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 923, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+  }
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":922
+  /* "libpetsc4py.pyx":924
  *     if multAdd is None: return UNSUPPORTED(b"multAdd")
  *     multAdd(Mat_(mat), Vec_(x), Vec_(v), Vec_(y))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -10740,7 +11516,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultAdd_Python(Mat __pyx_v_mat, V
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":899
+  /* "libpetsc4py.pyx":901
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatMultAdd_Python(             # <<<<<<<<<<<<<<
@@ -10757,19 +11533,19 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultAdd_Python(Mat __pyx_v_mat, V
   __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.MatMultAdd_Python", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = PETSC_ERR_PYTHON;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_multAdd);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":924
+/* "libpetsc4py.pyx":926
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatMultTransposeAdd_Python(             # <<<<<<<<<<<<<<
@@ -10791,67 +11567,66 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTransposeAdd_Python(Mat __pyx
   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;
+  PyObject *__pyx_t_11 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatMultTransposeAdd_Python", 0);
 
-  /* "libpetsc4py.pyx":931
+  /* "libpetsc4py.pyx":933
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatMultTransposeAdd_Python")             # <<<<<<<<<<<<<<
  *     cdef multTransposeAdd = PyMat(mat).multTransposeAdd
- *     if multTransposeAdd is not None:
+ *     if multTransposeAdd is None:
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatMultTransposeAdd_Python"));
 
-  /* "libpetsc4py.pyx":932
+  /* "libpetsc4py.pyx":934
  *     except IERR with gil:
  *     FunctionBegin(b"MatMultTransposeAdd_Python")
  *     cdef multTransposeAdd = PyMat(mat).multTransposeAdd             # <<<<<<<<<<<<<<
- *     if multTransposeAdd is not None:
+ *     if multTransposeAdd is None:
  *         CHKERR( MatMultTranspose(mat,x,y) )
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 932, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 934, __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_ERR(0, 932, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_multTransposeAdd); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 934, __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":933
+  /* "libpetsc4py.pyx":935
  *     FunctionBegin(b"MatMultTransposeAdd_Python")
  *     cdef multTransposeAdd = PyMat(mat).multTransposeAdd
- *     if multTransposeAdd is not None:             # <<<<<<<<<<<<<<
+ *     if multTransposeAdd is None:             # <<<<<<<<<<<<<<
  *         CHKERR( MatMultTranspose(mat,x,y) )
  *         CHKERR( VecAXPY(y,1.0,v)          )
  */
-  __pyx_t_3 = (__pyx_v_multTransposeAdd != Py_None);
+  __pyx_t_3 = (__pyx_v_multTransposeAdd == Py_None);
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":934
+    /* "libpetsc4py.pyx":936
  *     cdef multTransposeAdd = PyMat(mat).multTransposeAdd
- *     if multTransposeAdd is not None:
+ *     if multTransposeAdd is 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_ERR(0, 934, __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 == ((int)-1))) __PYX_ERR(0, 936, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":935
- *     if multTransposeAdd is not None:
+    /* "libpetsc4py.pyx":937
+ *     if multTransposeAdd is 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_ERR(0, 935, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(VecAXPY(__pyx_v_y, 1.0, __pyx_v_v)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 937, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":936
+    /* "libpetsc4py.pyx":938
  *         CHKERR( MatMultTranspose(mat,x,y) )
  *         CHKERR( VecAXPY(y,1.0,v)          )
  *         return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -10861,16 +11636,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTransposeAdd_Python(Mat __pyx
     __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
     goto __pyx_L0;
 
-    /* "libpetsc4py.pyx":933
+    /* "libpetsc4py.pyx":935
  *     FunctionBegin(b"MatMultTransposeAdd_Python")
  *     cdef multTransposeAdd = PyMat(mat).multTransposeAdd
- *     if multTransposeAdd is not None:             # <<<<<<<<<<<<<<
+ *     if multTransposeAdd is None:             # <<<<<<<<<<<<<<
  *         CHKERR( MatMultTranspose(mat,x,y) )
  *         CHKERR( VecAXPY(y,1.0,v)          )
  */
   }
 
-  /* "libpetsc4py.pyx":937
+  /* "libpetsc4py.pyx":939
  *         CHKERR( VecAXPY(y,1.0,v)          )
  *         return FunctionEnd()
  *     if multTransposeAdd is None: return UNSUPPORTED(b"multTransposeAdd")             # <<<<<<<<<<<<<<
@@ -10884,58 +11659,84 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTransposeAdd_Python(Mat __pyx
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":938
+  /* "libpetsc4py.pyx":940
  *         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_ERR(0, 938, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 940, __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_ERR(0, 938, __pyx_L1_error)
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 940, __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_ERR(0, 938, __pyx_L1_error)
+  __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_v)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 940, __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_ERR(0, 938, __pyx_L1_error)
+  __pyx_t_8 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 940, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_INCREF(__pyx_v_multTransposeAdd);
   __pyx_t_9 = __pyx_v_multTransposeAdd; __pyx_t_10 = NULL;
-  __pyx_t_11 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_9))) {
+  __pyx_t_5 = 0;
+  if (CYTHON_UNPACK_METHODS && 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_INCREF(function);
       __Pyx_DECREF_SET(__pyx_t_9, function);
-      __pyx_t_11 = 1;
+      __pyx_t_5 = 1;
     }
   }
-  __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;
-  }
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_11, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_6);
-  PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_11, __pyx_t_6);
-  __Pyx_GIVEREF(__pyx_t_7);
-  PyTuple_SET_ITEM(__pyx_t_12, 2+__pyx_t_11, __pyx_t_7);
-  __Pyx_GIVEREF(__pyx_t_8);
-  PyTuple_SET_ITEM(__pyx_t_12, 3+__pyx_t_11, __pyx_t_8);
-  __pyx_t_1 = 0;
-  __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_ERR(0, 938, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_9)) {
+    PyObject *__pyx_temp[5] = {__pyx_t_10, __pyx_t_1, __pyx_t_6, __pyx_t_7, __pyx_t_8};
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_5, 4+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 940, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) {
+    PyObject *__pyx_temp[5] = {__pyx_t_10, __pyx_t_1, __pyx_t_6, __pyx_t_7, __pyx_t_8};
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_5, 4+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 940, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  } else
+  #endif
+  {
+    __pyx_t_11 = PyTuple_New(4+__pyx_t_5); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 940, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_11);
+    if (__pyx_t_10) {
+      __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_10); __pyx_t_10 = NULL;
+    }
+    __Pyx_GIVEREF(__pyx_t_1);
+    PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_5, __pyx_t_1);
+    __Pyx_GIVEREF(__pyx_t_6);
+    PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_5, __pyx_t_6);
+    __Pyx_GIVEREF(__pyx_t_7);
+    PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_5, __pyx_t_7);
+    __Pyx_GIVEREF(__pyx_t_8);
+    PyTuple_SET_ITEM(__pyx_t_11, 3+__pyx_t_5, __pyx_t_8);
+    __pyx_t_1 = 0;
+    __pyx_t_6 = 0;
+    __pyx_t_7 = 0;
+    __pyx_t_8 = 0;
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 940, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+  }
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":939
+  /* "libpetsc4py.pyx":941
  *     if multTransposeAdd is None: return UNSUPPORTED(b"multTransposeAdd")
  *     multTransposeAdd(Mat_(mat), Vec_(x), Vec_(v), Vec_(y))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -10945,7 +11746,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTransposeAdd_Python(Mat __pyx
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":924
+  /* "libpetsc4py.pyx":926
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatMultTransposeAdd_Python(             # <<<<<<<<<<<<<<
@@ -10962,19 +11763,19 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultTransposeAdd_Python(Mat __pyx
   __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.MatMultTransposeAdd_Python", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = PETSC_ERR_PYTHON;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_multTransposeAdd);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":941
+/* "libpetsc4py.pyx":943
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatMultHermitianAdd_Python(             # <<<<<<<<<<<<<<
@@ -10996,67 +11797,66 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitianAdd_Python(Mat __pyx
   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;
+  PyObject *__pyx_t_11 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatMultHermitianAdd_Python", 0);
 
-  /* "libpetsc4py.pyx":948
+  /* "libpetsc4py.pyx":950
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatMultHermitianAdd_Python")             # <<<<<<<<<<<<<<
  *     cdef multHermitianAdd = PyMat(mat).multHermitianAdd
- *     if multHermitianAdd is not None:
+ *     if multHermitianAdd is None:
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatMultHermitianAdd_Python"));
 
-  /* "libpetsc4py.pyx":949
+  /* "libpetsc4py.pyx":951
  *     except IERR with gil:
  *     FunctionBegin(b"MatMultHermitianAdd_Python")
  *     cdef multHermitianAdd = PyMat(mat).multHermitianAdd             # <<<<<<<<<<<<<<
- *     if multHermitianAdd is not None:
+ *     if multHermitianAdd is None:
  *         CHKERR( MatMultHermitian(mat,x,y) )
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 949, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 951, __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_ERR(0, 949, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_multHermitianAdd); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 951, __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":950
+  /* "libpetsc4py.pyx":952
  *     FunctionBegin(b"MatMultHermitianAdd_Python")
  *     cdef multHermitianAdd = PyMat(mat).multHermitianAdd
- *     if multHermitianAdd is not None:             # <<<<<<<<<<<<<<
+ *     if multHermitianAdd is None:             # <<<<<<<<<<<<<<
  *         CHKERR( MatMultHermitian(mat,x,y) )
  *         CHKERR( VecAXPY(y,1.0,v)          )
  */
-  __pyx_t_3 = (__pyx_v_multHermitianAdd != Py_None);
+  __pyx_t_3 = (__pyx_v_multHermitianAdd == Py_None);
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":951
+    /* "libpetsc4py.pyx":953
  *     cdef multHermitianAdd = PyMat(mat).multHermitianAdd
- *     if multHermitianAdd is not None:
+ *     if multHermitianAdd is 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_ERR(0, 951, __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 == ((int)-1))) __PYX_ERR(0, 953, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":952
- *     if multHermitianAdd is not None:
+    /* "libpetsc4py.pyx":954
+ *     if multHermitianAdd is 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_ERR(0, 952, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(VecAXPY(__pyx_v_y, 1.0, __pyx_v_v)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 954, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":953
+    /* "libpetsc4py.pyx":955
  *         CHKERR( MatMultHermitian(mat,x,y) )
  *         CHKERR( VecAXPY(y,1.0,v)          )
  *         return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -11066,16 +11866,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitianAdd_Python(Mat __pyx
     __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
     goto __pyx_L0;
 
-    /* "libpetsc4py.pyx":950
+    /* "libpetsc4py.pyx":952
  *     FunctionBegin(b"MatMultHermitianAdd_Python")
  *     cdef multHermitianAdd = PyMat(mat).multHermitianAdd
- *     if multHermitianAdd is not None:             # <<<<<<<<<<<<<<
+ *     if multHermitianAdd is None:             # <<<<<<<<<<<<<<
  *         CHKERR( MatMultHermitian(mat,x,y) )
  *         CHKERR( VecAXPY(y,1.0,v)          )
  */
   }
 
-  /* "libpetsc4py.pyx":954
+  /* "libpetsc4py.pyx":956
  *         CHKERR( VecAXPY(y,1.0,v)          )
  *         return FunctionEnd()
  *     if multHermitianAdd is None: return UNSUPPORTED(b"multHermitianAdd")             # <<<<<<<<<<<<<<
@@ -11089,58 +11889,84 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitianAdd_Python(Mat __pyx
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":955
+  /* "libpetsc4py.pyx":957
  *         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_ERR(0, 955, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 957, __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_ERR(0, 955, __pyx_L1_error)
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 957, __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_ERR(0, 955, __pyx_L1_error)
+  __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_v)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 957, __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_ERR(0, 955, __pyx_L1_error)
+  __pyx_t_8 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 957, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_INCREF(__pyx_v_multHermitianAdd);
   __pyx_t_9 = __pyx_v_multHermitianAdd; __pyx_t_10 = NULL;
-  __pyx_t_11 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_9))) {
+  __pyx_t_5 = 0;
+  if (CYTHON_UNPACK_METHODS && 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_INCREF(function);
       __Pyx_DECREF_SET(__pyx_t_9, function);
-      __pyx_t_11 = 1;
+      __pyx_t_5 = 1;
     }
   }
-  __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;
-  }
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_11, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_6);
-  PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_11, __pyx_t_6);
-  __Pyx_GIVEREF(__pyx_t_7);
-  PyTuple_SET_ITEM(__pyx_t_12, 2+__pyx_t_11, __pyx_t_7);
-  __Pyx_GIVEREF(__pyx_t_8);
-  PyTuple_SET_ITEM(__pyx_t_12, 3+__pyx_t_11, __pyx_t_8);
-  __pyx_t_1 = 0;
-  __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_ERR(0, 955, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_9)) {
+    PyObject *__pyx_temp[5] = {__pyx_t_10, __pyx_t_1, __pyx_t_6, __pyx_t_7, __pyx_t_8};
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_5, 4+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 957, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) {
+    PyObject *__pyx_temp[5] = {__pyx_t_10, __pyx_t_1, __pyx_t_6, __pyx_t_7, __pyx_t_8};
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_5, 4+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 957, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  } else
+  #endif
+  {
+    __pyx_t_11 = PyTuple_New(4+__pyx_t_5); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 957, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_11);
+    if (__pyx_t_10) {
+      __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_10); __pyx_t_10 = NULL;
+    }
+    __Pyx_GIVEREF(__pyx_t_1);
+    PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_5, __pyx_t_1);
+    __Pyx_GIVEREF(__pyx_t_6);
+    PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_5, __pyx_t_6);
+    __Pyx_GIVEREF(__pyx_t_7);
+    PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_5, __pyx_t_7);
+    __Pyx_GIVEREF(__pyx_t_8);
+    PyTuple_SET_ITEM(__pyx_t_11, 3+__pyx_t_5, __pyx_t_8);
+    __pyx_t_1 = 0;
+    __pyx_t_6 = 0;
+    __pyx_t_7 = 0;
+    __pyx_t_8 = 0;
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 957, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+  }
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":956
+  /* "libpetsc4py.pyx":958
  *     if multHermitianAdd is None: return UNSUPPORTED(b"multHermitianAdd")
  *     multHermitianAdd(Mat_(mat), Vec_(x), Vec_(v), Vec_(y))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -11150,7 +11976,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitianAdd_Python(Mat __pyx
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":941
+  /* "libpetsc4py.pyx":943
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatMultHermitianAdd_Python(             # <<<<<<<<<<<<<<
@@ -11167,19 +11993,19 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultHermitianAdd_Python(Mat __pyx
   __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.MatMultHermitianAdd_Python", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = PETSC_ERR_PYTHON;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_multHermitianAdd);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":958
+/* "libpetsc4py.pyx":960
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatMultDiagonalBlock_Python(             # <<<<<<<<<<<<<<
@@ -11199,14 +12025,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultDiagonalBlock_Python(Mat __py
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
-  Py_ssize_t __pyx_t_9;
+  int __pyx_t_9;
   PyObject *__pyx_t_10 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatMultDiagonalBlock_Python", 0);
 
-  /* "libpetsc4py.pyx":964
+  /* "libpetsc4py.pyx":966
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatMultDiagonalBlock_Python")             # <<<<<<<<<<<<<<
@@ -11215,22 +12041,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultDiagonalBlock_Python(Mat __py
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatMultDiagonalBlock_Python"));
 
-  /* "libpetsc4py.pyx":965
+  /* "libpetsc4py.pyx":967
  *     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_ERR(0, 965, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 967, __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_ERR(0, 965, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_multDiagonalBlock); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 967, __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":966
+  /* "libpetsc4py.pyx":968
  *     FunctionBegin(b"MatMultDiagonalBlock_Python")
  *     cdef multDiagonalBlock = PyMat(mat).multDiagonalBlock
  *     if multDiagonalBlock is None: return UNSUPPORTED(b"multDiagonalBlock")             # <<<<<<<<<<<<<<
@@ -11244,23 +12070,23 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultDiagonalBlock_Python(Mat __py
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":967
+  /* "libpetsc4py.pyx":969
  *     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_ERR(0, 967, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 969, __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_ERR(0, 967, __pyx_L1_error)
+  __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 969, __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_ERR(0, 967, __pyx_L1_error)
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 969, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(__pyx_v_multDiagonalBlock);
   __pyx_t_7 = __pyx_v_multDiagonalBlock; __pyx_t_8 = NULL;
   __pyx_t_9 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
     __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
     if (likely(__pyx_t_8)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -11270,27 +12096,51 @@ 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_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;
-  }
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_5);
-  PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_5);
-  __Pyx_GIVEREF(__pyx_t_6);
-  PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_t_6);
-  __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_ERR(0, 967, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_7)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_1, __pyx_t_5, __pyx_t_6};
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 969, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_1, __pyx_t_5, __pyx_t_6};
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 969, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+  } else
+  #endif
+  {
+    __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 969, __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;
+    }
+    __Pyx_GIVEREF(__pyx_t_1);
+    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_1);
+    __Pyx_GIVEREF(__pyx_t_5);
+    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_5);
+    __Pyx_GIVEREF(__pyx_t_6);
+    PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_t_6);
+    __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_ERR(0, 969, __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":968
+  /* "libpetsc4py.pyx":970
  *     if multDiagonalBlock is None: return UNSUPPORTED(b"multDiagonalBlock")
  *     multDiagonalBlock(Mat_(mat), Vec_(x), Vec_(y))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -11300,7 +12150,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultDiagonalBlock_Python(Mat __py
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":958
+  /* "libpetsc4py.pyx":960
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatMultDiagonalBlock_Python(             # <<<<<<<<<<<<<<
@@ -11323,12 +12173,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatMultDiagonalBlock_Python(Mat __py
   __Pyx_XDECREF(__pyx_v_multDiagonalBlock);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":970
+/* "libpetsc4py.pyx":972
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSolve_Python(             # <<<<<<<<<<<<<<
@@ -11348,14 +12198,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolve_Python(Mat __pyx_v_mat, Vec
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
-  Py_ssize_t __pyx_t_9;
+  int __pyx_t_9;
   PyObject *__pyx_t_10 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatSolve_Python", 0);
 
-  /* "libpetsc4py.pyx":976
+  /* "libpetsc4py.pyx":978
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatSolve_Python")             # <<<<<<<<<<<<<<
@@ -11364,22 +12214,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolve_Python(Mat __pyx_v_mat, Vec
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatSolve_Python"));
 
-  /* "libpetsc4py.pyx":977
+  /* "libpetsc4py.pyx":979
  *     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_ERR(0, 977, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 979, __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_ERR(0, 977, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_solve); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 979, __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":978
+  /* "libpetsc4py.pyx":980
  *     FunctionBegin(b"MatSolve_Python")
  *     cdef solve = PyMat(mat).solve
  *     if solve is None: return UNSUPPORTED(b"solve")             # <<<<<<<<<<<<<<
@@ -11393,23 +12243,23 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolve_Python(Mat __pyx_v_mat, Vec
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":979
+  /* "libpetsc4py.pyx":981
  *     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_ERR(0, 979, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 981, __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_ERR(0, 979, __pyx_L1_error)
+  __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_b)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 981, __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_ERR(0, 979, __pyx_L1_error)
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 981, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(__pyx_v_solve);
   __pyx_t_7 = __pyx_v_solve; __pyx_t_8 = NULL;
   __pyx_t_9 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
     __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
     if (likely(__pyx_t_8)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -11419,38 +12269,62 @@ 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_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;
-  }
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_5);
-  PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_5);
-  __Pyx_GIVEREF(__pyx_t_6);
-  PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_t_6);
-  __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_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":980
- *     if solve is None: return UNSUPPORTED(b"solve")
- *     solve(Mat_(mat), Vec_(b), Vec_(x))
- *     return FunctionEnd()             # <<<<<<<<<<<<<<
- * 
- * cdef PetscErrorCode MatSolveTranspose_Python(
- */
-  __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
-  goto __pyx_L0;
-
-  /* "libpetsc4py.pyx":970
- *     return FunctionEnd()
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_7)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_1, __pyx_t_5, __pyx_t_6};
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 981, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_1, __pyx_t_5, __pyx_t_6};
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 981, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+  } else
+  #endif
+  {
+    __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 981, __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;
+    }
+    __Pyx_GIVEREF(__pyx_t_1);
+    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_1);
+    __Pyx_GIVEREF(__pyx_t_5);
+    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_5);
+    __Pyx_GIVEREF(__pyx_t_6);
+    PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_t_6);
+    __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_ERR(0, 981, __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":982
+ *     if solve is None: return UNSUPPORTED(b"solve")
+ *     solve(Mat_(mat), Vec_(b), Vec_(x))
+ *     return FunctionEnd()             # <<<<<<<<<<<<<<
+ * 
+ * cdef PetscErrorCode MatSolveTranspose_Python(
+ */
+  __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
+  goto __pyx_L0;
+
+  /* "libpetsc4py.pyx":972
+ *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSolve_Python(             # <<<<<<<<<<<<<<
  *     PetscMat mat,
@@ -11472,12 +12346,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolve_Python(Mat __pyx_v_mat, Vec
   __Pyx_XDECREF(__pyx_v_solve);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":982
+/* "libpetsc4py.pyx":984
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSolveTranspose_Python(             # <<<<<<<<<<<<<<
@@ -11500,14 +12374,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTranspose_Python(Mat __pyx_v
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = NULL;
-  Py_ssize_t __pyx_t_10;
-  PyObject *__pyx_t_11 = NULL;
+  PyObject *__pyx_t_10 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatSolveTranspose_Python", 0);
 
-  /* "libpetsc4py.pyx":988
+  /* "libpetsc4py.pyx":990
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatSolveTranspose_Python")             # <<<<<<<<<<<<<<
@@ -11516,22 +12389,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTranspose_Python(Mat __pyx_v
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatSolveTranspose_Python"));
 
-  /* "libpetsc4py.pyx":989
+  /* "libpetsc4py.pyx":991
  *     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_ERR(0, 989, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 991, __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_ERR(0, 989, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_solveTranspose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 991, __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":991
+  /* "libpetsc4py.pyx":993
  *     cdef solveTranspose = PyMat(mat).solveTranspose
  *     cdef PetscBool symmset, symmknown
  *     if solveTranspose is None:             # <<<<<<<<<<<<<<
@@ -11542,7 +12415,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTranspose_Python(Mat __pyx_v
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":992
+    /* "libpetsc4py.pyx":994
  *     cdef PetscBool symmset, symmknown
  *     if solveTranspose is None:
  *         symmset = symmknown = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -11552,16 +12425,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTranspose_Python(Mat __pyx_v
     __pyx_v_symmset = PETSC_FALSE;
     __pyx_v_symmknown = PETSC_FALSE;
 
-    /* "libpetsc4py.pyx":993
+    /* "libpetsc4py.pyx":995
  *     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_ERR(0, 993, __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 == ((int)-1))) __PYX_ERR(0, 995, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":994
+    /* "libpetsc4py.pyx":996
  *         symmset = symmknown = PETSC_FALSE
  *         CHKERR( MatIsSymmetricKnown(mat,&symmset,&symmknown) )
  *         if symmset and symmknown:             # <<<<<<<<<<<<<<
@@ -11577,16 +12450,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTranspose_Python(Mat __pyx_v
     __pyx_L5_bool_binop_done:;
     if (__pyx_t_4) {
 
-      /* "libpetsc4py.pyx":995
+      /* "libpetsc4py.pyx":997
  *         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_ERR(0, 995, __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 == ((int)-1))) __PYX_ERR(0, 997, __pyx_L1_error)
 
-      /* "libpetsc4py.pyx":996
+      /* "libpetsc4py.pyx":998
  *         if symmset and symmknown:
  *             CHKERR( MatSolve(mat,b,x) )
  *             return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -11596,7 +12469,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTranspose_Python(Mat __pyx_v
       __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
       goto __pyx_L0;
 
-      /* "libpetsc4py.pyx":994
+      /* "libpetsc4py.pyx":996
  *         symmset = symmknown = PETSC_FALSE
  *         CHKERR( MatIsSymmetricKnown(mat,&symmset,&symmknown) )
  *         if symmset and symmknown:             # <<<<<<<<<<<<<<
@@ -11605,7 +12478,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTranspose_Python(Mat __pyx_v
  */
     }
 
-    /* "libpetsc4py.pyx":991
+    /* "libpetsc4py.pyx":993
  *     cdef solveTranspose = PyMat(mat).solveTranspose
  *     cdef PetscBool symmset, symmknown
  *     if solveTranspose is None:             # <<<<<<<<<<<<<<
@@ -11614,7 +12487,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTranspose_Python(Mat __pyx_v
  */
   }
 
-  /* "libpetsc4py.pyx":997
+  /* "libpetsc4py.pyx":999
  *             CHKERR( MatSolve(mat,b,x) )
  *             return FunctionEnd()
  *     if solveTranspose is None: return UNSUPPORTED(b"solveTranspose")             # <<<<<<<<<<<<<<
@@ -11628,53 +12501,77 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTranspose_Python(Mat __pyx_v
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":998
+  /* "libpetsc4py.pyx":1000
  *             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_ERR(0, 998, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1000, __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_ERR(0, 998, __pyx_L1_error)
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_b)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1000, __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, 998, __pyx_L1_error)
+  __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1000, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_INCREF(__pyx_v_solveTranspose);
   __pyx_t_8 = __pyx_v_solveTranspose; __pyx_t_9 = NULL;
-  __pyx_t_10 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_8))) {
+  __pyx_t_5 = 0;
+  if (CYTHON_UNPACK_METHODS && 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_8, function);
-      __pyx_t_10 = 1;
+      __pyx_t_5 = 1;
     }
   }
-  __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;
-  }
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_t_1);
-  __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_11, 2+__pyx_t_10, __pyx_t_7);
-  __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_ERR(0, 998, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_8)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_t_1, __pyx_t_6, __pyx_t_7};
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1000, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_t_1, __pyx_t_6, __pyx_t_7};
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_5, 3+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1000, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+  } else
+  #endif
+  {
+    __pyx_t_10 = PyTuple_New(3+__pyx_t_5); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1000, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_10);
+    if (__pyx_t_9) {
+      __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+__pyx_t_5, __pyx_t_1);
+    __Pyx_GIVEREF(__pyx_t_6);
+    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_5, __pyx_t_6);
+    __Pyx_GIVEREF(__pyx_t_7);
+    PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_5, __pyx_t_7);
+    __pyx_t_1 = 0;
+    __pyx_t_6 = 0;
+    __pyx_t_7 = 0;
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1000, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+  }
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":999
+  /* "libpetsc4py.pyx":1001
  *     if solveTranspose is None: return UNSUPPORTED(b"solveTranspose")
  *     solveTranspose(Mat_(mat), Vec_(b), Vec_(x))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -11684,7 +12581,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTranspose_Python(Mat __pyx_v
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":982
+  /* "libpetsc4py.pyx":984
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSolveTranspose_Python(             # <<<<<<<<<<<<<<
@@ -11700,19 +12597,19 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTranspose_Python(Mat __pyx_v
   __Pyx_XDECREF(__pyx_t_7);
   __Pyx_XDECREF(__pyx_t_8);
   __Pyx_XDECREF(__pyx_t_9);
-  __Pyx_XDECREF(__pyx_t_11);
+  __Pyx_XDECREF(__pyx_t_10);
   __Pyx_AddTraceback("libpetsc4py.MatSolveTranspose_Python", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = PETSC_ERR_PYTHON;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_solveTranspose);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1001
+/* "libpetsc4py.pyx":1003
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSolveAdd_Python(             # <<<<<<<<<<<<<<
@@ -11734,14 +12631,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveAdd_Python(Mat __pyx_v_mat,
   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;
+  PyObject *__pyx_t_11 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatSolveAdd_Python", 0);
 
-  /* "libpetsc4py.pyx":1008
+  /* "libpetsc4py.pyx":1010
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatSolveAdd_Python")             # <<<<<<<<<<<<<<
@@ -11750,22 +12646,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveAdd_Python(Mat __pyx_v_mat,
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatSolveAdd_Python"));
 
-  /* "libpetsc4py.pyx":1009
+  /* "libpetsc4py.pyx":1011
  *     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_ERR(0, 1009, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1011, __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_ERR(0, 1009, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_solveAdd); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1011, __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":1010
+  /* "libpetsc4py.pyx":1012
  *     FunctionBegin(b"MatSolveAdd_Python")
  *     cdef solveAdd = PyMat(mat).solveAdd
  *     if solveAdd is None:             # <<<<<<<<<<<<<<
@@ -11776,25 +12672,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":1011
+    /* "libpetsc4py.pyx":1013
  *     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_ERR(0, 1011, __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 == ((int)-1))) __PYX_ERR(0, 1013, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1012
+    /* "libpetsc4py.pyx":1014
  *     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_ERR(0, 1012, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(VecAXPY(__pyx_v_x, 1.0, __pyx_v_y)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 1014, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1013
+    /* "libpetsc4py.pyx":1015
  *         CHKERR( MatSolve(mat,b,x) )
  *         CHKERR( VecAXPY(x,1.0,y)  )
  *         return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -11804,7 +12700,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveAdd_Python(Mat __pyx_v_mat,
     __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
     goto __pyx_L0;
 
-    /* "libpetsc4py.pyx":1010
+    /* "libpetsc4py.pyx":1012
  *     FunctionBegin(b"MatSolveAdd_Python")
  *     cdef solveAdd = PyMat(mat).solveAdd
  *     if solveAdd is None:             # <<<<<<<<<<<<<<
@@ -11813,7 +12709,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveAdd_Python(Mat __pyx_v_mat,
  */
   }
 
-  /* "libpetsc4py.pyx":1014
+  /* "libpetsc4py.pyx":1016
  *         CHKERR( VecAXPY(x,1.0,y)  )
  *         return FunctionEnd()
  *     if solveAdd is None: return UNSUPPORTED(b"solveAdd")             # <<<<<<<<<<<<<<
@@ -11827,58 +12723,84 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveAdd_Python(Mat __pyx_v_mat,
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1015
+  /* "libpetsc4py.pyx":1017
  *         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_ERR(0, 1015, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1017, __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_ERR(0, 1015, __pyx_L1_error)
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_b)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1017, __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_ERR(0, 1015, __pyx_L1_error)
+  __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1017, __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_ERR(0, 1015, __pyx_L1_error)
+  __pyx_t_8 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1017, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_INCREF(__pyx_v_solveAdd);
   __pyx_t_9 = __pyx_v_solveAdd; __pyx_t_10 = NULL;
-  __pyx_t_11 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_9))) {
+  __pyx_t_5 = 0;
+  if (CYTHON_UNPACK_METHODS && 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_INCREF(function);
       __Pyx_DECREF_SET(__pyx_t_9, function);
-      __pyx_t_11 = 1;
+      __pyx_t_5 = 1;
     }
   }
-  __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;
-  }
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_11, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_6);
-  PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_11, __pyx_t_6);
-  __Pyx_GIVEREF(__pyx_t_7);
-  PyTuple_SET_ITEM(__pyx_t_12, 2+__pyx_t_11, __pyx_t_7);
-  __Pyx_GIVEREF(__pyx_t_8);
-  PyTuple_SET_ITEM(__pyx_t_12, 3+__pyx_t_11, __pyx_t_8);
-  __pyx_t_1 = 0;
-  __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_ERR(0, 1015, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_9)) {
+    PyObject *__pyx_temp[5] = {__pyx_t_10, __pyx_t_1, __pyx_t_6, __pyx_t_7, __pyx_t_8};
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_5, 4+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1017, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) {
+    PyObject *__pyx_temp[5] = {__pyx_t_10, __pyx_t_1, __pyx_t_6, __pyx_t_7, __pyx_t_8};
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_5, 4+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1017, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  } else
+  #endif
+  {
+    __pyx_t_11 = PyTuple_New(4+__pyx_t_5); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1017, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_11);
+    if (__pyx_t_10) {
+      __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_10); __pyx_t_10 = NULL;
+    }
+    __Pyx_GIVEREF(__pyx_t_1);
+    PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_5, __pyx_t_1);
+    __Pyx_GIVEREF(__pyx_t_6);
+    PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_5, __pyx_t_6);
+    __Pyx_GIVEREF(__pyx_t_7);
+    PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_5, __pyx_t_7);
+    __Pyx_GIVEREF(__pyx_t_8);
+    PyTuple_SET_ITEM(__pyx_t_11, 3+__pyx_t_5, __pyx_t_8);
+    __pyx_t_1 = 0;
+    __pyx_t_6 = 0;
+    __pyx_t_7 = 0;
+    __pyx_t_8 = 0;
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1017, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+  }
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1016
+  /* "libpetsc4py.pyx":1018
  *     if solveAdd is None: return UNSUPPORTED(b"solveAdd")
  *     solveAdd(Mat_(mat), Vec_(b), Vec_(y), Vec_(x))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -11888,7 +12810,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveAdd_Python(Mat __pyx_v_mat,
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1001
+  /* "libpetsc4py.pyx":1003
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSolveAdd_Python(             # <<<<<<<<<<<<<<
@@ -11905,19 +12827,19 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveAdd_Python(Mat __pyx_v_mat,
   __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.MatSolveAdd_Python", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = PETSC_ERR_PYTHON;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_solveAdd);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1018
+/* "libpetsc4py.pyx":1020
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSolveTransposeAdd_Python(             # <<<<<<<<<<<<<<
@@ -11939,67 +12861,66 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTransposeAdd_Python(Mat __py
   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;
+  PyObject *__pyx_t_11 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatSolveTransposeAdd_Python", 0);
 
-  /* "libpetsc4py.pyx":1025
+  /* "libpetsc4py.pyx":1027
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatSolveTransposeAdd_Python")             # <<<<<<<<<<<<<<
  *     cdef solveTransposeAdd = PyMat(mat).solveTransposeAdd
- *     if solveTransposeAdd is not None:
+ *     if solveTransposeAdd is None:
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatSolveTransposeAdd_Python"));
 
-  /* "libpetsc4py.pyx":1026
+  /* "libpetsc4py.pyx":1028
  *     except IERR with gil:
  *     FunctionBegin(b"MatSolveTransposeAdd_Python")
  *     cdef solveTransposeAdd = PyMat(mat).solveTransposeAdd             # <<<<<<<<<<<<<<
- *     if solveTransposeAdd is not None:
+ *     if solveTransposeAdd is None:
  *         CHKERR( MatSolveTranspose(mat,b,x) )
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1026, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1028, __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_ERR(0, 1026, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_solveTransposeAdd); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1028, __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":1027
+  /* "libpetsc4py.pyx":1029
  *     FunctionBegin(b"MatSolveTransposeAdd_Python")
  *     cdef solveTransposeAdd = PyMat(mat).solveTransposeAdd
- *     if solveTransposeAdd is not None:             # <<<<<<<<<<<<<<
+ *     if solveTransposeAdd is None:             # <<<<<<<<<<<<<<
  *         CHKERR( MatSolveTranspose(mat,b,x) )
  *         CHKERR( VecAXPY(x,1.0,y)           )
  */
-  __pyx_t_3 = (__pyx_v_solveTransposeAdd != Py_None);
+  __pyx_t_3 = (__pyx_v_solveTransposeAdd == Py_None);
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":1028
+    /* "libpetsc4py.pyx":1030
  *     cdef solveTransposeAdd = PyMat(mat).solveTransposeAdd
- *     if solveTransposeAdd is not None:
+ *     if solveTransposeAdd is 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_ERR(0, 1028, __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 == ((int)-1))) __PYX_ERR(0, 1030, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1029
- *     if solveTransposeAdd is not None:
+    /* "libpetsc4py.pyx":1031
+ *     if solveTransposeAdd is 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_ERR(0, 1029, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_11libpetsc4py_CHKERR(VecAXPY(__pyx_v_x, 1.0, __pyx_v_y)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 1031, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1030
+    /* "libpetsc4py.pyx":1032
  *         CHKERR( MatSolveTranspose(mat,b,x) )
  *         CHKERR( VecAXPY(x,1.0,y)           )
  *         return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -12009,16 +12930,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTransposeAdd_Python(Mat __py
     __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
     goto __pyx_L0;
 
-    /* "libpetsc4py.pyx":1027
+    /* "libpetsc4py.pyx":1029
  *     FunctionBegin(b"MatSolveTransposeAdd_Python")
  *     cdef solveTransposeAdd = PyMat(mat).solveTransposeAdd
- *     if solveTransposeAdd is not None:             # <<<<<<<<<<<<<<
+ *     if solveTransposeAdd is None:             # <<<<<<<<<<<<<<
  *         CHKERR( MatSolveTranspose(mat,b,x) )
  *         CHKERR( VecAXPY(x,1.0,y)           )
  */
   }
 
-  /* "libpetsc4py.pyx":1031
+  /* "libpetsc4py.pyx":1033
  *         CHKERR( VecAXPY(x,1.0,y)           )
  *         return FunctionEnd()
  *     if solveTransposeAdd is None: return UNSUPPORTED(b"solveTransposeAdd")             # <<<<<<<<<<<<<<
@@ -12032,58 +12953,84 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTransposeAdd_Python(Mat __py
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1032
+  /* "libpetsc4py.pyx":1034
  *         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_ERR(0, 1032, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1034, __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_ERR(0, 1032, __pyx_L1_error)
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_b)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1034, __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_ERR(0, 1032, __pyx_L1_error)
+  __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1034, __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_ERR(0, 1032, __pyx_L1_error)
+  __pyx_t_8 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1034, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_INCREF(__pyx_v_solveTransposeAdd);
   __pyx_t_9 = __pyx_v_solveTransposeAdd; __pyx_t_10 = NULL;
-  __pyx_t_11 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_9))) {
+  __pyx_t_5 = 0;
+  if (CYTHON_UNPACK_METHODS && 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_INCREF(function);
       __Pyx_DECREF_SET(__pyx_t_9, function);
-      __pyx_t_11 = 1;
+      __pyx_t_5 = 1;
     }
   }
-  __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;
-  }
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_12, 0+__pyx_t_11, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_6);
-  PyTuple_SET_ITEM(__pyx_t_12, 1+__pyx_t_11, __pyx_t_6);
-  __Pyx_GIVEREF(__pyx_t_7);
-  PyTuple_SET_ITEM(__pyx_t_12, 2+__pyx_t_11, __pyx_t_7);
-  __Pyx_GIVEREF(__pyx_t_8);
-  PyTuple_SET_ITEM(__pyx_t_12, 3+__pyx_t_11, __pyx_t_8);
-  __pyx_t_1 = 0;
-  __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_ERR(0, 1032, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_9)) {
+    PyObject *__pyx_temp[5] = {__pyx_t_10, __pyx_t_1, __pyx_t_6, __pyx_t_7, __pyx_t_8};
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_5, 4+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1034, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_9)) {
+    PyObject *__pyx_temp[5] = {__pyx_t_10, __pyx_t_1, __pyx_t_6, __pyx_t_7, __pyx_t_8};
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_9, __pyx_temp+1-__pyx_t_5, 4+__pyx_t_5); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1034, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  } else
+  #endif
+  {
+    __pyx_t_11 = PyTuple_New(4+__pyx_t_5); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1034, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_11);
+    if (__pyx_t_10) {
+      __Pyx_GIVEREF(__pyx_t_10); PyTuple_SET_ITEM(__pyx_t_11, 0, __pyx_t_10); __pyx_t_10 = NULL;
+    }
+    __Pyx_GIVEREF(__pyx_t_1);
+    PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_5, __pyx_t_1);
+    __Pyx_GIVEREF(__pyx_t_6);
+    PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_5, __pyx_t_6);
+    __Pyx_GIVEREF(__pyx_t_7);
+    PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_5, __pyx_t_7);
+    __Pyx_GIVEREF(__pyx_t_8);
+    PyTuple_SET_ITEM(__pyx_t_11, 3+__pyx_t_5, __pyx_t_8);
+    __pyx_t_1 = 0;
+    __pyx_t_6 = 0;
+    __pyx_t_7 = 0;
+    __pyx_t_8 = 0;
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_9, __pyx_t_11, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1034, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+  }
   __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1033
+  /* "libpetsc4py.pyx":1035
  *     if solveTransposeAdd is None: return UNSUPPORTED(b"solveTransposeAdd")
  *     solveTransposeAdd(Mat_(mat), Vec_(b), Vec_(y), Vec_(x))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -12093,7 +13040,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTransposeAdd_Python(Mat __py
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1018
+  /* "libpetsc4py.pyx":1020
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSolveTransposeAdd_Python(             # <<<<<<<<<<<<<<
@@ -12110,19 +13057,19 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSolveTransposeAdd_Python(Mat __py
   __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.MatSolveTransposeAdd_Python", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = PETSC_ERR_PYTHON;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_solveTransposeAdd);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1035
+/* "libpetsc4py.pyx":1037
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSOR_Python(             # <<<<<<<<<<<<<<
@@ -12149,14 +13096,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSOR_Python(Mat __pyx_v_mat, Vec _
   PyObject *__pyx_t_13 = NULL;
   PyObject *__pyx_t_14 = NULL;
   PyObject *__pyx_t_15 = NULL;
-  Py_ssize_t __pyx_t_16;
+  int __pyx_t_16;
   PyObject *__pyx_t_17 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatSOR_Python", 0);
 
-  /* "libpetsc4py.pyx":1046
+  /* "libpetsc4py.pyx":1048
  *     )\
  *     except IERR with gil:
  *     FunctionBegin(b"MatSOR_Python")             # <<<<<<<<<<<<<<
@@ -12165,22 +13112,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSOR_Python(Mat __pyx_v_mat, Vec _
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatSOR_Python"));
 
-  /* "libpetsc4py.pyx":1047
+  /* "libpetsc4py.pyx":1049
  *     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_ERR(0, 1047, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1049, __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_ERR(0, 1047, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_SOR); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1049, __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":1048
+  /* "libpetsc4py.pyx":1050
  *     FunctionBegin(b"MatSOR_Python")
  *     cdef SOR = PyMat(mat).SOR
  *     if SOR is None: return UNSUPPORTED(b"SOR")             # <<<<<<<<<<<<<<
@@ -12194,53 +13141,53 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSOR_Python(Mat __pyx_v_mat, Vec _
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1049
+  /* "libpetsc4py.pyx":1051
  *     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_ERR(0, 1049, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1051, __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_ERR(0, 1049, __pyx_L1_error)
+  __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_b)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1051, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyFloat_FromDouble(__pyx_v_omega); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1049, __pyx_L1_error)
+  __pyx_t_6 = PyFloat_FromDouble(__pyx_v_omega); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1051, __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_ERR(0, 1049, __pyx_L1_error)
+  __pyx_t_7 = __pyx_f_11libpetsc4py_asReal(__pyx_t_6); if (unlikely(__pyx_t_7 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(0, 1051, __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_ERR(0, 1049, __pyx_L1_error)
+  __pyx_t_6 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1051, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_8 = __Pyx_PyInt_From_MatSORType(__pyx_v_sortype); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1049, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyInt_From_MatSORType(__pyx_v_sortype); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1051, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  __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_t_9 = __pyx_f_11libpetsc4py_asInt(__pyx_t_8); if (unlikely(__pyx_t_9 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(0, 1051, __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_ERR(0, 1049, __pyx_L1_error)
+  __pyx_t_8 = __Pyx_PyInt_From_PetscInt(__pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1051, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
-  __pyx_t_10 = PyFloat_FromDouble(__pyx_v_shift); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1049, __pyx_L1_error)
+  __pyx_t_10 = PyFloat_FromDouble(__pyx_v_shift); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1051, __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_ERR(0, 1049, __pyx_L1_error)
+  __pyx_t_7 = __pyx_f_11libpetsc4py_asReal(__pyx_t_10); if (unlikely(__pyx_t_7 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(0, 1051, __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_ERR(0, 1049, __pyx_L1_error)
+  __pyx_t_10 = PyFloat_FromDouble(__pyx_t_7); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1051, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_10);
-  __pyx_t_11 = __Pyx_PyInt_From_PetscInt(__pyx_v_its); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1049, __pyx_L1_error)
+  __pyx_t_11 = __Pyx_PyInt_From_PetscInt(__pyx_v_its); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1051, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_11);
-  __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_t_9 = __pyx_f_11libpetsc4py_asInt(__pyx_t_11); if (unlikely(__pyx_t_9 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(0, 1051, __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_ERR(0, 1049, __pyx_L1_error)
+  __pyx_t_11 = __Pyx_PyInt_From_PetscInt(__pyx_t_9); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1051, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_11);
-  __pyx_t_12 = __Pyx_PyInt_From_PetscInt(__pyx_v_lits); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1049, __pyx_L1_error)
+  __pyx_t_12 = __Pyx_PyInt_From_PetscInt(__pyx_v_lits); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1051, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_12);
-  __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_t_9 = __pyx_f_11libpetsc4py_asInt(__pyx_t_12); if (unlikely(__pyx_t_9 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(0, 1051, __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_ERR(0, 1049, __pyx_L1_error)
+  __pyx_t_12 = __Pyx_PyInt_From_PetscInt(__pyx_t_9); if (unlikely(!__pyx_t_12)) __PYX_ERR(0, 1051, __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_ERR(0, 1049, __pyx_L1_error)
+  __pyx_t_13 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_13)) __PYX_ERR(0, 1051, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_13);
   __Pyx_INCREF(__pyx_v_SOR);
   __pyx_t_14 = __pyx_v_SOR; __pyx_t_15 = NULL;
   __pyx_t_16 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_14))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_14))) {
     __pyx_t_15 = PyMethod_GET_SELF(__pyx_t_14);
     if (likely(__pyx_t_15)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_14);
@@ -12250,42 +13197,76 @@ 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_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;
-  }
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_17, 0+__pyx_t_16, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_5);
-  PyTuple_SET_ITEM(__pyx_t_17, 1+__pyx_t_16, __pyx_t_5);
-  __Pyx_GIVEREF(__pyx_t_6);
-  PyTuple_SET_ITEM(__pyx_t_17, 2+__pyx_t_16, __pyx_t_6);
-  __Pyx_GIVEREF(__pyx_t_8);
-  PyTuple_SET_ITEM(__pyx_t_17, 3+__pyx_t_16, __pyx_t_8);
-  __Pyx_GIVEREF(__pyx_t_10);
-  PyTuple_SET_ITEM(__pyx_t_17, 4+__pyx_t_16, __pyx_t_10);
-  __Pyx_GIVEREF(__pyx_t_11);
-  PyTuple_SET_ITEM(__pyx_t_17, 5+__pyx_t_16, __pyx_t_11);
-  __Pyx_GIVEREF(__pyx_t_12);
-  PyTuple_SET_ITEM(__pyx_t_17, 6+__pyx_t_16, __pyx_t_12);
-  __Pyx_GIVEREF(__pyx_t_13);
-  PyTuple_SET_ITEM(__pyx_t_17, 7+__pyx_t_16, __pyx_t_13);
-  __pyx_t_1 = 0;
-  __pyx_t_5 = 0;
-  __pyx_t_6 = 0;
-  __pyx_t_8 = 0;
-  __pyx_t_10 = 0;
-  __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_ERR(0, 1049, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_17); __pyx_t_17 = 0;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_14)) {
+    PyObject *__pyx_temp[9] = {__pyx_t_15, __pyx_t_1, __pyx_t_5, __pyx_t_6, __pyx_t_8, __pyx_t_10, __pyx_t_11, __pyx_t_12, __pyx_t_13};
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_14, __pyx_temp+1-__pyx_t_16, 8+__pyx_t_16); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1051, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_14)) {
+    PyObject *__pyx_temp[9] = {__pyx_t_15, __pyx_t_1, __pyx_t_5, __pyx_t_6, __pyx_t_8, __pyx_t_10, __pyx_t_11, __pyx_t_12, __pyx_t_13};
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_14, __pyx_temp+1-__pyx_t_16, 8+__pyx_t_16); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1051, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_15); __pyx_t_15 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+    __Pyx_DECREF(__pyx_t_12); __pyx_t_12 = 0;
+    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+  } else
+  #endif
+  {
+    __pyx_t_17 = PyTuple_New(8+__pyx_t_16); if (unlikely(!__pyx_t_17)) __PYX_ERR(0, 1051, __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;
+    }
+    __Pyx_GIVEREF(__pyx_t_1);
+    PyTuple_SET_ITEM(__pyx_t_17, 0+__pyx_t_16, __pyx_t_1);
+    __Pyx_GIVEREF(__pyx_t_5);
+    PyTuple_SET_ITEM(__pyx_t_17, 1+__pyx_t_16, __pyx_t_5);
+    __Pyx_GIVEREF(__pyx_t_6);
+    PyTuple_SET_ITEM(__pyx_t_17, 2+__pyx_t_16, __pyx_t_6);
+    __Pyx_GIVEREF(__pyx_t_8);
+    PyTuple_SET_ITEM(__pyx_t_17, 3+__pyx_t_16, __pyx_t_8);
+    __Pyx_GIVEREF(__pyx_t_10);
+    PyTuple_SET_ITEM(__pyx_t_17, 4+__pyx_t_16, __pyx_t_10);
+    __Pyx_GIVEREF(__pyx_t_11);
+    PyTuple_SET_ITEM(__pyx_t_17, 5+__pyx_t_16, __pyx_t_11);
+    __Pyx_GIVEREF(__pyx_t_12);
+    PyTuple_SET_ITEM(__pyx_t_17, 6+__pyx_t_16, __pyx_t_12);
+    __Pyx_GIVEREF(__pyx_t_13);
+    PyTuple_SET_ITEM(__pyx_t_17, 7+__pyx_t_16, __pyx_t_13);
+    __pyx_t_1 = 0;
+    __pyx_t_5 = 0;
+    __pyx_t_6 = 0;
+    __pyx_t_8 = 0;
+    __pyx_t_10 = 0;
+    __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_ERR(0, 1051, __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":1050
+  /* "libpetsc4py.pyx":1052
  *     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()             # <<<<<<<<<<<<<<
@@ -12295,7 +13276,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSOR_Python(Mat __pyx_v_mat, Vec _
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1035
+  /* "libpetsc4py.pyx":1037
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSOR_Python(             # <<<<<<<<<<<<<<
@@ -12323,12 +13304,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSOR_Python(Mat __pyx_v_mat, Vec _
   __Pyx_XDECREF(__pyx_v_SOR);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1052
+/* "libpetsc4py.pyx":1054
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatGetDiagonal_Python(             # <<<<<<<<<<<<<<
@@ -12347,14 +13328,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetDiagonal_Python(Mat __pyx_v_ma
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
-  Py_ssize_t __pyx_t_8;
+  int __pyx_t_8;
   PyObject *__pyx_t_9 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatGetDiagonal_Python", 0);
 
-  /* "libpetsc4py.pyx":1057
+  /* "libpetsc4py.pyx":1059
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatGetDiagonal_Python")             # <<<<<<<<<<<<<<
@@ -12363,22 +13344,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetDiagonal_Python(Mat __pyx_v_ma
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatGetDiagonal_Python"));
 
-  /* "libpetsc4py.pyx":1058
+  /* "libpetsc4py.pyx":1060
  *     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_ERR(0, 1058, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1060, __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_ERR(0, 1058, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_getDiagonal); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1060, __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":1059
+  /* "libpetsc4py.pyx":1061
  *     FunctionBegin(b"MatGetDiagonal_Python")
  *     cdef getDiagonal = PyMat(mat).getDiagonal
  *     if getDiagonal is None: return UNSUPPORTED(b"getDiagonal")             # <<<<<<<<<<<<<<
@@ -12392,21 +13373,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetDiagonal_Python(Mat __pyx_v_ma
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1060
+  /* "libpetsc4py.pyx":1062
  *     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_ERR(0, 1060, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1062, __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_ERR(0, 1060, __pyx_L1_error)
+  __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_v)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1062, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(__pyx_v_getDiagonal);
   __pyx_t_6 = __pyx_v_getDiagonal; __pyx_t_7 = NULL;
   __pyx_t_8 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_6))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
     __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
     if (likely(__pyx_t_7)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
@@ -12416,36 +13397,58 @@ 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_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;
-  }
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_5);
-  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_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":1061
- *     if getDiagonal is None: return UNSUPPORTED(b"getDiagonal")
- *     getDiagonal(Mat_(mat), Vec_(v))
- *     return FunctionEnd()             # <<<<<<<<<<<<<<
- * 
- * cdef PetscErrorCode MatSetDiagonal_Python(
- */
-  __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
-  goto __pyx_L0;
-
-  /* "libpetsc4py.pyx":1052
- *     return FunctionEnd()
- * 
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_6)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_1, __pyx_t_5};
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1062, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_1, __pyx_t_5};
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1062, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  } else
+  #endif
+  {
+    __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1062, __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;
+    }
+    __Pyx_GIVEREF(__pyx_t_1);
+    PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_1);
+    __Pyx_GIVEREF(__pyx_t_5);
+    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_ERR(0, 1062, __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":1063
+ *     if getDiagonal is None: return UNSUPPORTED(b"getDiagonal")
+ *     getDiagonal(Mat_(mat), Vec_(v))
+ *     return FunctionEnd()             # <<<<<<<<<<<<<<
+ * 
+ * cdef PetscErrorCode MatSetDiagonal_Python(
+ */
+  __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
+  goto __pyx_L0;
+
+  /* "libpetsc4py.pyx":1054
+ *     return FunctionEnd()
+ * 
  * cdef PetscErrorCode MatGetDiagonal_Python(             # <<<<<<<<<<<<<<
  *     PetscMat mat,
  *     PetscVec v,
@@ -12465,12 +13468,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatGetDiagonal_Python(Mat __pyx_v_ma
   __Pyx_XDECREF(__pyx_v_getDiagonal);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1063
+/* "libpetsc4py.pyx":1065
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSetDiagonal_Python(             # <<<<<<<<<<<<<<
@@ -12491,14 +13494,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetDiagonal_Python(Mat __pyx_v_ma
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
-  Py_ssize_t __pyx_t_9;
+  int __pyx_t_9;
   PyObject *__pyx_t_10 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatSetDiagonal_Python", 0);
 
-  /* "libpetsc4py.pyx":1069
+  /* "libpetsc4py.pyx":1071
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatSetDiagonal_Python")             # <<<<<<<<<<<<<<
@@ -12507,22 +13510,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetDiagonal_Python(Mat __pyx_v_ma
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatSetDiagonal_Python"));
 
-  /* "libpetsc4py.pyx":1070
+  /* "libpetsc4py.pyx":1072
  *     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_ERR(0, 1070, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1072, __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_ERR(0, 1070, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_setDiagonal); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1072, __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":1071
+  /* "libpetsc4py.pyx":1073
  *     FunctionBegin(b"MatSetDiagonal_Python")
  *     cdef setDiagonal = PyMat(mat).setDiagonal
  *     cdef bint addv = True if im == ADD_VALUES else False             # <<<<<<<<<<<<<<
@@ -12536,7 +13539,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetDiagonal_Python(Mat __pyx_v_ma
   }
   __pyx_v_addv = __pyx_t_3;
 
-  /* "libpetsc4py.pyx":1072
+  /* "libpetsc4py.pyx":1074
  *     cdef setDiagonal = PyMat(mat).setDiagonal
  *     cdef bint addv = True if im == ADD_VALUES else False
  *     if setDiagonal is None: return UNSUPPORTED(b"setDiagonal")             # <<<<<<<<<<<<<<
@@ -12550,23 +13553,23 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetDiagonal_Python(Mat __pyx_v_ma
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1073
+  /* "libpetsc4py.pyx":1075
  *     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_ERR(0, 1073, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1075, __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_ERR(0, 1073, __pyx_L1_error)
+  __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_v)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1075, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_v_addv); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1073, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyBool_FromLong(__pyx_v_addv); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1075, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(__pyx_v_setDiagonal);
   __pyx_t_7 = __pyx_v_setDiagonal; __pyx_t_8 = NULL;
   __pyx_t_9 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
     __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
     if (likely(__pyx_t_8)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -12576,27 +13579,51 @@ 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_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;
-  }
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_5);
-  PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_5);
-  __Pyx_GIVEREF(__pyx_t_6);
-  PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_t_6);
-  __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_ERR(0, 1073, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_7)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_1, __pyx_t_5, __pyx_t_6};
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1075, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_1, __pyx_t_5, __pyx_t_6};
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1075, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+  } else
+  #endif
+  {
+    __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1075, __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;
+    }
+    __Pyx_GIVEREF(__pyx_t_1);
+    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_1);
+    __Pyx_GIVEREF(__pyx_t_5);
+    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_5);
+    __Pyx_GIVEREF(__pyx_t_6);
+    PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_t_6);
+    __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_ERR(0, 1075, __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":1074
+  /* "libpetsc4py.pyx":1076
  *     if setDiagonal is None: return UNSUPPORTED(b"setDiagonal")
  *     setDiagonal(Mat_(mat), Vec_(v), addv)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -12606,7 +13633,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetDiagonal_Python(Mat __pyx_v_ma
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1063
+  /* "libpetsc4py.pyx":1065
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatSetDiagonal_Python(             # <<<<<<<<<<<<<<
@@ -12629,12 +13656,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatSetDiagonal_Python(Mat __pyx_v_ma
   __Pyx_XDECREF(__pyx_v_setDiagonal);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1076
+/* "libpetsc4py.pyx":1078
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatDiagonalScale_Python(             # <<<<<<<<<<<<<<
@@ -12654,14 +13681,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDiagonalScale_Python(Mat __pyx_v_
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
-  Py_ssize_t __pyx_t_9;
+  int __pyx_t_9;
   PyObject *__pyx_t_10 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatDiagonalScale_Python", 0);
 
-  /* "libpetsc4py.pyx":1082
+  /* "libpetsc4py.pyx":1084
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatDiagonalScale_Python")             # <<<<<<<<<<<<<<
@@ -12670,22 +13697,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDiagonalScale_Python(Mat __pyx_v_
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatDiagonalScale_Python"));
 
-  /* "libpetsc4py.pyx":1083
+  /* "libpetsc4py.pyx":1085
  *     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_ERR(0, 1083, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1085, __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_ERR(0, 1083, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_diagonalScale); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1085, __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":1084
+  /* "libpetsc4py.pyx":1086
  *     FunctionBegin(b"MatDiagonalScale_Python")
  *     cdef diagonalScale = PyMat(mat).diagonalScale
  *     if diagonalScale is None: return UNSUPPORTED(b"diagonalScale")             # <<<<<<<<<<<<<<
@@ -12699,23 +13726,23 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDiagonalScale_Python(Mat __pyx_v_
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1085
+  /* "libpetsc4py.pyx":1087
  *     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_ERR(0, 1085, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1087, __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_ERR(0, 1085, __pyx_L1_error)
+  __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_l)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1087, __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_ERR(0, 1085, __pyx_L1_error)
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_r)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1087, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(__pyx_v_diagonalScale);
   __pyx_t_7 = __pyx_v_diagonalScale; __pyx_t_8 = NULL;
   __pyx_t_9 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
     __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
     if (likely(__pyx_t_8)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -12725,27 +13752,51 @@ 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_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;
-  }
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_5);
-  PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_5);
-  __Pyx_GIVEREF(__pyx_t_6);
-  PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_t_6);
-  __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_ERR(0, 1085, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_7)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_1, __pyx_t_5, __pyx_t_6};
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1087, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_1, __pyx_t_5, __pyx_t_6};
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1087, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+  } else
+  #endif
+  {
+    __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1087, __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;
+    }
+    __Pyx_GIVEREF(__pyx_t_1);
+    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_1);
+    __Pyx_GIVEREF(__pyx_t_5);
+    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_5);
+    __Pyx_GIVEREF(__pyx_t_6);
+    PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_t_6);
+    __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_ERR(0, 1087, __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":1086
+  /* "libpetsc4py.pyx":1088
  *     if diagonalScale is None: return UNSUPPORTED(b"diagonalScale")
  *     diagonalScale(Mat_(mat), Vec_(l), Vec_(r))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -12755,7 +13806,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDiagonalScale_Python(Mat __pyx_v_
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1076
+  /* "libpetsc4py.pyx":1078
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatDiagonalScale_Python(             # <<<<<<<<<<<<<<
@@ -12778,12 +13829,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatDiagonalScale_Python(Mat __pyx_v_
   __Pyx_XDECREF(__pyx_v_diagonalScale);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1088
+/* "libpetsc4py.pyx":1090
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatNorm_Python(             # <<<<<<<<<<<<<<
@@ -12803,15 +13854,15 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatNorm_Python(Mat __pyx_v_mat, Norm
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
-  Py_ssize_t __pyx_t_8;
+  int __pyx_t_8;
   PyObject *__pyx_t_9 = NULL;
   PetscReal __pyx_t_10;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatNorm_Python", 0);
 
-  /* "libpetsc4py.pyx":1094
+  /* "libpetsc4py.pyx":1096
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatNorm_Python")             # <<<<<<<<<<<<<<
@@ -12820,22 +13871,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatNorm_Python(Mat __pyx_v_mat, Norm
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatNorm_Python"));
 
-  /* "libpetsc4py.pyx":1095
+  /* "libpetsc4py.pyx":1097
  *     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_ERR(0, 1095, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1097, __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_ERR(0, 1095, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_norm); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1097, __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":1096
+  /* "libpetsc4py.pyx":1098
  *     FunctionBegin(b"MatNorm_Python")
  *     cdef norm = PyMat(mat).norm
  *     if norm is None: return UNSUPPORTED(b"norm")             # <<<<<<<<<<<<<<
@@ -12849,21 +13900,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatNorm_Python(Mat __pyx_v_mat, Norm
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1097
+  /* "libpetsc4py.pyx":1099
  *     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_ERR(0, 1097, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1099, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = __Pyx_PyInt_From_NormType(__pyx_v_ntype); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1097, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyInt_From_NormType(__pyx_v_ntype); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1099, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(__pyx_v_norm);
   __pyx_t_6 = __pyx_v_norm; __pyx_t_7 = NULL;
   __pyx_t_8 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_6))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
     __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
     if (likely(__pyx_t_7)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
@@ -12873,35 +13924,57 @@ 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_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;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_6)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_1, __pyx_t_5};
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1099, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_1, __pyx_t_5};
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1099, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  } else
+  #endif
+  {
+    __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1099, __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;
+    }
+    __Pyx_GIVEREF(__pyx_t_1);
+    PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_1);
+    __Pyx_GIVEREF(__pyx_t_5);
+    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_ERR(0, 1099, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
   }
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_5);
-  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_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":1098
+  /* "libpetsc4py.pyx":1100
  *     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_ERR(0, 1098, __pyx_L1_error)
+  __pyx_t_10 = __pyx_PyFloat_AsDouble(__pyx_v_retval); if (unlikely((__pyx_t_10 == ((PetscReal)-1)) && PyErr_Occurred())) __PYX_ERR(0, 1100, __pyx_L1_error)
   (__pyx_v_nrm[0]) = ((PetscReal)__pyx_t_10);
 
-  /* "libpetsc4py.pyx":1099
+  /* "libpetsc4py.pyx":1101
  *     retval = norm(Mat_(mat), ntype)
  *     nrm[0] = <PetscReal>retval
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -12911,7 +13984,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatNorm_Python(Mat __pyx_v_mat, Norm
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1088
+  /* "libpetsc4py.pyx":1090
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatNorm_Python(             # <<<<<<<<<<<<<<
@@ -12934,12 +14007,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatNorm_Python(Mat __pyx_v_mat, Norm
   __Pyx_XDECREF(__pyx_v_retval);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1101
+/* "libpetsc4py.pyx":1103
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatRealPart_Python(             # <<<<<<<<<<<<<<
@@ -12959,11 +14032,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatRealPart_Python(Mat __pyx_v_mat)
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatRealPart_Python", 0);
 
-  /* "libpetsc4py.pyx":1105
+  /* "libpetsc4py.pyx":1107
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatRealPart_Python")             # <<<<<<<<<<<<<<
@@ -12972,22 +14045,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatRealPart_Python(Mat __pyx_v_mat)
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatRealPart_Python"));
 
-  /* "libpetsc4py.pyx":1106
+  /* "libpetsc4py.pyx":1108
  *     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_ERR(0, 1106, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1108, __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_ERR(0, 1106, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_realPart); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1108, __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":1107
+  /* "libpetsc4py.pyx":1109
  *     FunctionBegin(b"MatRealPart_Python")
  *     cdef realPart = PyMat(mat).realPart
  *     if realPart is None: return UNSUPPORTED(b"realPart")             # <<<<<<<<<<<<<<
@@ -13001,18 +14074,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatRealPart_Python(Mat __pyx_v_mat)
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1108
+  /* "libpetsc4py.pyx":1110
  *     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_ERR(0, 1108, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1110, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_realPart);
   __pyx_t_5 = __pyx_v_realPart; __pyx_t_6 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
     __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
     if (likely(__pyx_t_6)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -13022,24 +14095,44 @@ 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_ERR(0, 1108, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1110, __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_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_ERR(0, 1108, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_5)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_1};
+      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1110, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_1};
+      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1110, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1110, __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_ERR(0, 1110, __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":1109
+  /* "libpetsc4py.pyx":1111
  *     if realPart is None: return UNSUPPORTED(b"realPart")
  *     realPart(Mat_(mat))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -13049,7 +14142,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatRealPart_Python(Mat __pyx_v_mat)
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1101
+  /* "libpetsc4py.pyx":1103
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatRealPart_Python(             # <<<<<<<<<<<<<<
@@ -13070,12 +14163,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatRealPart_Python(Mat __pyx_v_mat)
   __Pyx_XDECREF(__pyx_v_realPart);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1111
+/* "libpetsc4py.pyx":1113
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatImagPart_Python(             # <<<<<<<<<<<<<<
@@ -13095,11 +14188,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatImagPart_Python(Mat __pyx_v_mat)
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatImagPart_Python", 0);
 
-  /* "libpetsc4py.pyx":1115
+  /* "libpetsc4py.pyx":1117
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatImagPart_Python")             # <<<<<<<<<<<<<<
@@ -13108,22 +14201,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatImagPart_Python(Mat __pyx_v_mat)
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatImagPart_Python"));
 
-  /* "libpetsc4py.pyx":1116
+  /* "libpetsc4py.pyx":1118
  *     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_ERR(0, 1116, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1118, __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_ERR(0, 1116, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_imagPart); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1118, __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":1117
+  /* "libpetsc4py.pyx":1119
  *     FunctionBegin(b"MatImagPart_Python")
  *     cdef imagPart = PyMat(mat).imagPart
  *     if imagPart is None: return UNSUPPORTED(b"imagPart")             # <<<<<<<<<<<<<<
@@ -13137,18 +14230,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatImagPart_Python(Mat __pyx_v_mat)
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1118
+  /* "libpetsc4py.pyx":1120
  *     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_ERR(0, 1118, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1120, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_imagPart);
   __pyx_t_5 = __pyx_v_imagPart; __pyx_t_6 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
     __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
     if (likely(__pyx_t_6)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -13158,24 +14251,44 @@ 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_ERR(0, 1118, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1120, __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_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_ERR(0, 1118, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_5)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_1};
+      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1120, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_1};
+      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1120, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1120, __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_ERR(0, 1120, __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":1119
+  /* "libpetsc4py.pyx":1121
  *     if imagPart is None: return UNSUPPORTED(b"imagPart")
  *     imagPart(Mat_(mat))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -13185,7 +14298,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatImagPart_Python(Mat __pyx_v_mat)
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1111
+  /* "libpetsc4py.pyx":1113
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatImagPart_Python(             # <<<<<<<<<<<<<<
@@ -13206,12 +14319,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatImagPart_Python(Mat __pyx_v_mat)
   __Pyx_XDECREF(__pyx_v_imagPart);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1121
+/* "libpetsc4py.pyx":1123
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatConjugate_Python(             # <<<<<<<<<<<<<<
@@ -13231,11 +14344,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatConjugate_Python(Mat __pyx_v_mat)
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("MatConjugate_Python", 0);
 
-  /* "libpetsc4py.pyx":1125
+  /* "libpetsc4py.pyx":1127
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"MatConjugate_Python")             # <<<<<<<<<<<<<<
@@ -13244,22 +14357,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatConjugate_Python(Mat __pyx_v_mat)
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"MatConjugate_Python"));
 
-  /* "libpetsc4py.pyx":1126
+  /* "libpetsc4py.pyx":1128
  *     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_ERR(0, 1126, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyMat(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1128, __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_ERR(0, 1126, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_conjugate); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1128, __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":1127
+  /* "libpetsc4py.pyx":1129
  *     FunctionBegin(b"MatConjugate_Python")
  *     cdef conjugate = PyMat(mat).conjugate
  *     if conjugate is None: return UNSUPPORTED(b"conjugate")             # <<<<<<<<<<<<<<
@@ -13273,18 +14386,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatConjugate_Python(Mat __pyx_v_mat)
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1128
+  /* "libpetsc4py.pyx":1130
  *     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_ERR(0, 1128, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_mat)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1130, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_conjugate);
   __pyx_t_5 = __pyx_v_conjugate; __pyx_t_6 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
     __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
     if (likely(__pyx_t_6)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -13294,24 +14407,44 @@ 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_ERR(0, 1128, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1130, __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_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_ERR(0, 1128, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_5)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_1};
+      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1130, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_1};
+      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1130, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1130, __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_ERR(0, 1130, __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":1129
+  /* "libpetsc4py.pyx":1131
  *     if conjugate is None: return UNSUPPORTED(b"conjugate")
  *     conjugate(Mat_(mat))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -13321,7 +14454,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatConjugate_Python(Mat __pyx_v_mat)
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1121
+  /* "libpetsc4py.pyx":1123
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode MatConjugate_Python(             # <<<<<<<<<<<<<<
@@ -13342,12 +14475,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_MatConjugate_Python(Mat __pyx_v_mat)
   __Pyx_XDECREF(__pyx_v_conjugate);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1153
+/* "libpetsc4py.pyx":1155
  * @cython.internal
  * cdef class _PyPC(_PyObj): pass
  * cdef inline _PyPC PyPC(PetscPC pc):             # <<<<<<<<<<<<<<
@@ -13363,7 +14496,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyPC *__pyx_f_11libpetsc4py
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("PyPC", 0);
 
-  /* "libpetsc4py.pyx":1154
+  /* "libpetsc4py.pyx":1156
  * cdef class _PyPC(_PyObj): pass
  * cdef inline _PyPC PyPC(PetscPC pc):
  *     if pc != NULL and pc.data != NULL:             # <<<<<<<<<<<<<<
@@ -13381,7 +14514,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyPC *__pyx_f_11libpetsc4py
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "libpetsc4py.pyx":1155
+    /* "libpetsc4py.pyx":1157
  * cdef inline _PyPC PyPC(PetscPC pc):
  *     if pc != NULL and pc.data != NULL:
  *         return <_PyPC>pc.data             # <<<<<<<<<<<<<<
@@ -13393,7 +14526,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyPC *__pyx_f_11libpetsc4py
     __pyx_r = ((struct __pyx_obj_11libpetsc4py__PyPC *)__pyx_v_pc->data);
     goto __pyx_L0;
 
-    /* "libpetsc4py.pyx":1154
+    /* "libpetsc4py.pyx":1156
  * cdef class _PyPC(_PyObj): pass
  * cdef inline _PyPC PyPC(PetscPC pc):
  *     if pc != NULL and pc.data != NULL:             # <<<<<<<<<<<<<<
@@ -13402,7 +14535,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyPC *__pyx_f_11libpetsc4py
  */
   }
 
-  /* "libpetsc4py.pyx":1157
+  /* "libpetsc4py.pyx":1159
  *         return <_PyPC>pc.data
  *     else:
  *         return _PyPC.__new__(_PyPC)             # <<<<<<<<<<<<<<
@@ -13411,15 +14544,15 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyPC *__pyx_f_11libpetsc4py
  */
   /*else*/ {
     __Pyx_XDECREF(((PyObject *)__pyx_r));
-    __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_t_3 = __pyx_tp_new_11libpetsc4py__PyPC(((PyTypeObject *)__pyx_ptype_11libpetsc4py__PyPC), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1159, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11libpetsc4py__PyPC)))) __PYX_ERR(0, 1157, __pyx_L1_error)
+    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11libpetsc4py__PyPC)))) __PYX_ERR(0, 1159, __pyx_L1_error)
     __pyx_r = ((struct __pyx_obj_11libpetsc4py__PyPC *)__pyx_t_3);
     __pyx_t_3 = 0;
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1153
+  /* "libpetsc4py.pyx":1155
  * @cython.internal
  * cdef class _PyPC(_PyObj): pass
  * cdef inline _PyPC PyPC(PetscPC pc):             # <<<<<<<<<<<<<<
@@ -13438,7 +14571,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyPC *__pyx_f_11libpetsc4py
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1159
+/* "libpetsc4py.pyx":1161
  *         return _PyPC.__new__(_PyPC)
  * 
  * cdef public PetscErrorCode PCPythonGetContext(PetscPC pc, void **ctx) \             # <<<<<<<<<<<<<<
@@ -13453,7 +14586,7 @@ PetscErrorCode PCPythonGetContext(PC __pyx_v_pc, void **__pyx_v_ctx) {
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("PCPythonGetContext", 0);
 
-  /* "libpetsc4py.pyx":1161
+  /* "libpetsc4py.pyx":1163
  * cdef public PetscErrorCode PCPythonGetContext(PetscPC pc, void **ctx) \
  *     except IERR:
  *     FunctionBegin(b"PCPythonGetContext")             # <<<<<<<<<<<<<<
@@ -13462,19 +14595,19 @@ PetscErrorCode PCPythonGetContext(PC __pyx_v_pc, void **__pyx_v_ctx) {
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PCPythonGetContext"));
 
-  /* "libpetsc4py.pyx":1162
+  /* "libpetsc4py.pyx":1164
  *     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_ERR(0, 1162, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1164, __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_ERR(0, 1162, __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 == ((int)-1))) __PYX_ERR(0, 1164, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":1163
+  /* "libpetsc4py.pyx":1165
  *     FunctionBegin(b"PCPythonGetContext")
  *     PyPC(pc).getcontext(ctx)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -13484,7 +14617,7 @@ PetscErrorCode PCPythonGetContext(PC __pyx_v_pc, void **__pyx_v_ctx) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1159
+  /* "libpetsc4py.pyx":1161
  *         return _PyPC.__new__(_PyPC)
  * 
  * cdef public PetscErrorCode PCPythonGetContext(PetscPC pc, void **ctx) \             # <<<<<<<<<<<<<<
@@ -13502,7 +14635,7 @@ PetscErrorCode PCPythonGetContext(PC __pyx_v_pc, void **__pyx_v_ctx) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1165
+/* "libpetsc4py.pyx":1167
  *     return FunctionEnd()
  * 
  * cdef public PetscErrorCode PCPythonSetContext(PetscPC pc, void *ctx) \             # <<<<<<<<<<<<<<
@@ -13518,7 +14651,7 @@ PetscErrorCode PCPythonSetContext(PC __pyx_v_pc, void *__pyx_v_ctx) {
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("PCPythonSetContext", 0);
 
-  /* "libpetsc4py.pyx":1167
+  /* "libpetsc4py.pyx":1169
  * cdef public PetscErrorCode PCPythonSetContext(PetscPC pc, void *ctx) \
  *     except IERR:
  *     FunctionBegin(b"PCPythonSetContext")             # <<<<<<<<<<<<<<
@@ -13527,22 +14660,22 @@ PetscErrorCode PCPythonSetContext(PC __pyx_v_pc, void *__pyx_v_ctx) {
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PCPythonSetContext"));
 
-  /* "libpetsc4py.pyx":1168
+  /* "libpetsc4py.pyx":1170
  *     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_ERR(0, 1168, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1170, __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_ERR(0, 1168, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1170, __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_ERR(0, 1168, __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 == ((int)-1))) __PYX_ERR(0, 1170, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1169
+  /* "libpetsc4py.pyx":1171
  *     FunctionBegin(b"PCPythonSetContext")
  *     PyPC(pc).setcontext(ctx, PC_(pc))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -13552,7 +14685,7 @@ PetscErrorCode PCPythonSetContext(PC __pyx_v_pc, void *__pyx_v_ctx) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1165
+  /* "libpetsc4py.pyx":1167
  *     return FunctionEnd()
  * 
  * cdef public PetscErrorCode PCPythonSetContext(PetscPC pc, void *ctx) \             # <<<<<<<<<<<<<<
@@ -13571,7 +14704,7 @@ PetscErrorCode PCPythonSetContext(PC __pyx_v_pc, void *__pyx_v_ctx) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1171
+/* "libpetsc4py.pyx":1173
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCPythonSetType_PYTHON(PetscPC pc, char name[]) \             # <<<<<<<<<<<<<<
@@ -13588,11 +14721,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCPythonSetType_PYTHON(PC __pyx_v_pc
   PetscErrorCode __pyx_t_3;
   int __pyx_t_4;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("PCPythonSetType_PYTHON", 0);
 
-  /* "libpetsc4py.pyx":1173
+  /* "libpetsc4py.pyx":1175
  * cdef PetscErrorCode PCPythonSetType_PYTHON(PetscPC pc, char name[]) \
  *     except IERR with gil:
  *     FunctionBegin(b"PCPythonSetType_PYTHON")             # <<<<<<<<<<<<<<
@@ -13601,7 +14734,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCPythonSetType_PYTHON(PC __pyx_v_pc
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PCPythonSetType_PYTHON"));
 
-  /* "libpetsc4py.pyx":1174
+  /* "libpetsc4py.pyx":1176
  *     except IERR with gil:
  *     FunctionBegin(b"PCPythonSetType_PYTHON")
  *     if name == NULL: return FunctionEnd() # XXX             # <<<<<<<<<<<<<<
@@ -13614,40 +14747,40 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCPythonSetType_PYTHON(PC __pyx_v_pc
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1175
+  /* "libpetsc4py.pyx":1177
  *     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_ERR(0, 1175, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_11libpetsc4py_createcontext(__pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1177, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_ctx = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1176
+  /* "libpetsc4py.pyx":1178
  *     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_ERR(0, 1176, __pyx_L1_error)
+  __pyx_t_3 = PCPythonSetContext(__pyx_v_pc, ((void *)__pyx_v_ctx)); if (unlikely(__pyx_t_3 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 1178, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1177
+  /* "libpetsc4py.pyx":1179
  *     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_ERR(0, 1177, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1179, __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_ERR(0, 1177, __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 == ((int)-1))) __PYX_ERR(0, 1179, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1178
+  /* "libpetsc4py.pyx":1180
  *     PCPythonSetContext(pc, <void*>ctx)
  *     PyPC(pc).setname(name)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -13657,7 +14790,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCPythonSetType_PYTHON(PC __pyx_v_pc
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1171
+  /* "libpetsc4py.pyx":1173
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCPythonSetType_PYTHON(PetscPC pc, char name[]) \             # <<<<<<<<<<<<<<
@@ -13674,12 +14807,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCPythonSetType_PYTHON(PC __pyx_v_pc
   __Pyx_XDECREF(__pyx_v_ctx);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1180
+/* "libpetsc4py.pyx":1182
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCCreate_Python(             # <<<<<<<<<<<<<<
@@ -13696,11 +14829,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("PCCreate_Python", 0);
 
-  /* "libpetsc4py.pyx":1184
+  /* "libpetsc4py.pyx":1186
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"PCCreate_Python")             # <<<<<<<<<<<<<<
@@ -13709,7 +14842,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PCCreate_Python"));
 
-  /* "libpetsc4py.pyx":1186
+  /* "libpetsc4py.pyx":1188
  *     FunctionBegin(b"PCCreate_Python")
  *     #
  *     cdef PCOps ops          = pc.ops             # <<<<<<<<<<<<<<
@@ -13719,7 +14852,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":1187
+  /* "libpetsc4py.pyx":1189
  *     #
  *     cdef PCOps ops          = pc.ops
  *     ops.reset               = PCReset_Python             # <<<<<<<<<<<<<<
@@ -13728,7 +14861,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
  */
   __pyx_v_ops->reset = __pyx_f_11libpetsc4py_PCReset_Python;
 
-  /* "libpetsc4py.pyx":1188
+  /* "libpetsc4py.pyx":1190
  *     cdef PCOps ops          = pc.ops
  *     ops.reset               = PCReset_Python
  *     ops.destroy             = PCDestroy_Python             # <<<<<<<<<<<<<<
@@ -13737,7 +14870,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
  */
   __pyx_v_ops->destroy = __pyx_f_11libpetsc4py_PCDestroy_Python;
 
-  /* "libpetsc4py.pyx":1189
+  /* "libpetsc4py.pyx":1191
  *     ops.reset               = PCReset_Python
  *     ops.destroy             = PCDestroy_Python
  *     ops.setup               = PCSetUp_Python             # <<<<<<<<<<<<<<
@@ -13746,7 +14879,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
  */
   __pyx_v_ops->setup = __pyx_f_11libpetsc4py_PCSetUp_Python;
 
-  /* "libpetsc4py.pyx":1190
+  /* "libpetsc4py.pyx":1192
  *     ops.destroy             = PCDestroy_Python
  *     ops.setup               = PCSetUp_Python
  *     ops.setfromoptions      = PCSetFromOptions_Python             # <<<<<<<<<<<<<<
@@ -13755,7 +14888,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
  */
   __pyx_v_ops->setfromoptions = __pyx_f_11libpetsc4py_PCSetFromOptions_Python;
 
-  /* "libpetsc4py.pyx":1191
+  /* "libpetsc4py.pyx":1193
  *     ops.setup               = PCSetUp_Python
  *     ops.setfromoptions      = PCSetFromOptions_Python
  *     ops.view                = PCView_Python             # <<<<<<<<<<<<<<
@@ -13764,7 +14897,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
  */
   __pyx_v_ops->view = __pyx_f_11libpetsc4py_PCView_Python;
 
-  /* "libpetsc4py.pyx":1192
+  /* "libpetsc4py.pyx":1194
  *     ops.setfromoptions      = PCSetFromOptions_Python
  *     ops.view                = PCView_Python
  *     ops.presolve            = PCPreSolve_Python             # <<<<<<<<<<<<<<
@@ -13773,7 +14906,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
  */
   __pyx_v_ops->presolve = __pyx_f_11libpetsc4py_PCPreSolve_Python;
 
-  /* "libpetsc4py.pyx":1193
+  /* "libpetsc4py.pyx":1195
  *     ops.view                = PCView_Python
  *     ops.presolve            = PCPreSolve_Python
  *     ops.postsolve           = PCPostSolve_Python             # <<<<<<<<<<<<<<
@@ -13782,7 +14915,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
  */
   __pyx_v_ops->postsolve = __pyx_f_11libpetsc4py_PCPostSolve_Python;
 
-  /* "libpetsc4py.pyx":1194
+  /* "libpetsc4py.pyx":1196
  *     ops.presolve            = PCPreSolve_Python
  *     ops.postsolve           = PCPostSolve_Python
  *     ops.apply               = PCApply_Python             # <<<<<<<<<<<<<<
@@ -13791,7 +14924,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
  */
   __pyx_v_ops->apply = __pyx_f_11libpetsc4py_PCApply_Python;
 
-  /* "libpetsc4py.pyx":1195
+  /* "libpetsc4py.pyx":1197
  *     ops.postsolve           = PCPostSolve_Python
  *     ops.apply               = PCApply_Python
  *     ops.applytranspose      = PCApplyTranspose_Python             # <<<<<<<<<<<<<<
@@ -13800,7 +14933,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
  */
   __pyx_v_ops->applytranspose = __pyx_f_11libpetsc4py_PCApplyTranspose_Python;
 
-  /* "libpetsc4py.pyx":1196
+  /* "libpetsc4py.pyx":1198
  *     ops.apply               = PCApply_Python
  *     ops.applytranspose      = PCApplyTranspose_Python
  *     ops.applysymmetricleft  = PCApplySymmetricLeft_Python             # <<<<<<<<<<<<<<
@@ -13809,7 +14942,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
  */
   __pyx_v_ops->applysymmetricleft = __pyx_f_11libpetsc4py_PCApplySymmetricLeft_Python;
 
-  /* "libpetsc4py.pyx":1197
+  /* "libpetsc4py.pyx":1199
  *     ops.applytranspose      = PCApplyTranspose_Python
  *     ops.applysymmetricleft  = PCApplySymmetricLeft_Python
  *     ops.applysymmetricright = PCApplySymmetricRight_Python             # <<<<<<<<<<<<<<
@@ -13818,28 +14951,28 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
  */
   __pyx_v_ops->applysymmetricright = __pyx_f_11libpetsc4py_PCApplySymmetricRight_Python;
 
-  /* "libpetsc4py.pyx":1199
+  /* "libpetsc4py.pyx":1201
  *     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), ((char *)"PCPythonSetType_C"), ((PetscVoidFunction)__pyx_f_11libpetsc4py_PCPythonSetType_PYTHON))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 1199, __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 == ((int)-1))) __PYX_ERR(0, 1201, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1203
+  /* "libpetsc4py.pyx":1205
  *             <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_ERR(0, 1203, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1205, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_ctx = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "libpetsc4py.pyx":1204
+  /* "libpetsc4py.pyx":1206
  *     #
  *     cdef ctx = PyPC(NULL)
  *     pc.data = <void*> ctx             # <<<<<<<<<<<<<<
@@ -13848,7 +14981,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
  */
   __pyx_v_pc->data = ((void *)__pyx_v_ctx);
 
-  /* "libpetsc4py.pyx":1205
+  /* "libpetsc4py.pyx":1207
  *     cdef ctx = PyPC(NULL)
  *     pc.data = <void*> ctx
  *     Py_INCREF(<PyObject*>pc.data)             # <<<<<<<<<<<<<<
@@ -13857,7 +14990,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
  */
   Py_INCREF(((PyObject *)__pyx_v_pc->data));
 
-  /* "libpetsc4py.pyx":1206
+  /* "libpetsc4py.pyx":1208
  *     pc.data = <void*> ctx
  *     Py_INCREF(<PyObject*>pc.data)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -13867,7 +15000,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1180
+  /* "libpetsc4py.pyx":1182
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCCreate_Python(             # <<<<<<<<<<<<<<
@@ -13884,12 +15017,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCCreate_Python(PC __pyx_v_pc) {
   __Pyx_XDECREF(__pyx_v_ctx);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1208
+/* "libpetsc4py.pyx":1210
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCDestroy_Python(             # <<<<<<<<<<<<<<
@@ -13912,11 +15045,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCDestroy_Python(PC __pyx_v_pc) {
   PyObject *__pyx_t_10 = NULL;
   PyObject *__pyx_t_11 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("PCDestroy_Python", 0);
 
-  /* "libpetsc4py.pyx":1212
+  /* "libpetsc4py.pyx":1214
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"PCDestroy_Python")             # <<<<<<<<<<<<<<
@@ -13925,16 +15058,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCDestroy_Python(PC __pyx_v_pc) {
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PCDestroy_Python"));
 
-  /* "libpetsc4py.pyx":1213
+  /* "libpetsc4py.pyx":1215
  *     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), ((char *)"PCPythonSetType_C"), ((PetscVoidFunction)NULL))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1213, __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 == ((int)-1))) __PYX_ERR(0, 1215, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1217
+  /* "libpetsc4py.pyx":1219
  *             <PetscVoidFunction>NULL) )
  *     #
  *     if not Py_IsInitialized(): return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -13947,7 +15080,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCDestroy_Python(PC __pyx_v_pc) {
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1218
+  /* "libpetsc4py.pyx":1220
  *     #
  *     if not Py_IsInitialized(): return FunctionEnd()
  *     try:             # <<<<<<<<<<<<<<
@@ -13956,7 +15089,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCDestroy_Python(PC __pyx_v_pc) {
  */
   /*try:*/ {
 
-    /* "libpetsc4py.pyx":1219
+    /* "libpetsc4py.pyx":1221
  *     if not Py_IsInitialized(): return FunctionEnd()
  *     try:
  *         addRef(pc)             # <<<<<<<<<<<<<<
@@ -13965,17 +15098,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCDestroy_Python(PC __pyx_v_pc) {
  */
     __pyx_f_11libpetsc4py_addRef(__pyx_v_pc);
 
-    /* "libpetsc4py.pyx":1220
+    /* "libpetsc4py.pyx":1222
  *     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_ERR(0, 1220, __pyx_L5_error)
+    __pyx_t_3 = PCPythonSetContext(__pyx_v_pc, NULL); if (unlikely(__pyx_t_3 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 1222, __pyx_L5_error)
   }
 
-  /* "libpetsc4py.pyx":1222
+  /* "libpetsc4py.pyx":1224
  *         PCPythonSetContext(pc, NULL)
  *     finally:
  *         delRef(pc)             # <<<<<<<<<<<<<<
@@ -13986,7 +15119,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCDestroy_Python(PC __pyx_v_pc) {
     /*normal exit:*/{
       __pyx_f_11libpetsc4py_delRef(__pyx_v_pc);
 
-      /* "libpetsc4py.pyx":1223
+      /* "libpetsc4py.pyx":1225
  *     finally:
  *         delRef(pc)
  *         Py_DECREF(<PyObject*>pc.data)             # <<<<<<<<<<<<<<
@@ -13995,7 +15128,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCDestroy_Python(PC __pyx_v_pc) {
  */
       Py_DECREF(((PyObject *)__pyx_v_pc->data));
 
-      /* "libpetsc4py.pyx":1224
+      /* "libpetsc4py.pyx":1226
  *         delRef(pc)
  *         Py_DECREF(<PyObject*>pc.data)
  *         pc.data = NULL             # <<<<<<<<<<<<<<
@@ -14021,7 +15154,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":1222
+        /* "libpetsc4py.pyx":1224
  *         PCPythonSetContext(pc, NULL)
  *     finally:
  *         delRef(pc)             # <<<<<<<<<<<<<<
@@ -14030,7 +15163,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCDestroy_Python(PC __pyx_v_pc) {
  */
         __pyx_f_11libpetsc4py_delRef(__pyx_v_pc);
 
-        /* "libpetsc4py.pyx":1223
+        /* "libpetsc4py.pyx":1225
  *     finally:
  *         delRef(pc)
  *         Py_DECREF(<PyObject*>pc.data)             # <<<<<<<<<<<<<<
@@ -14039,7 +15172,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCDestroy_Python(PC __pyx_v_pc) {
  */
         Py_DECREF(((PyObject *)__pyx_v_pc->data));
 
-        /* "libpetsc4py.pyx":1224
+        /* "libpetsc4py.pyx":1226
  *         delRef(pc)
  *         Py_DECREF(<PyObject*>pc.data)
  *         pc.data = NULL             # <<<<<<<<<<<<<<
@@ -14048,7 +15181,6 @@ 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);
@@ -14066,7 +15198,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCDestroy_Python(PC __pyx_v_pc) {
     __pyx_L6:;
   }
 
-  /* "libpetsc4py.pyx":1225
+  /* "libpetsc4py.pyx":1227
  *         Py_DECREF(<PyObject*>pc.data)
  *         pc.data = NULL
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -14076,7 +15208,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCDestroy_Python(PC __pyx_v_pc) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1208
+  /* "libpetsc4py.pyx":1210
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCDestroy_Python(             # <<<<<<<<<<<<<<
@@ -14091,12 +15223,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCDestroy_Python(PC __pyx_v_pc) {
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1227
+/* "libpetsc4py.pyx":1229
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCSetUp_Python(             # <<<<<<<<<<<<<<
@@ -14123,11 +15255,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetUp_Python(PC __pyx_v_pc) {
   PyObject *__pyx_t_9 = NULL;
   PCOps __pyx_t_10;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("PCSetUp_Python", 0);
 
-  /* "libpetsc4py.pyx":1231
+  /* "libpetsc4py.pyx":1233
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"PCSetUp_Python")             # <<<<<<<<<<<<<<
@@ -14136,7 +15268,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetUp_Python(PC __pyx_v_pc) {
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PCSetUp_Python"));
 
-  /* "libpetsc4py.pyx":1234
+  /* "libpetsc4py.pyx":1236
  *     #
  *     cdef char name[2048]
  *     cdef PetscBool found = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -14145,30 +15277,30 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetUp_Python(PC __pyx_v_pc) {
  */
   __pyx_v_found = PETSC_FALSE;
 
-  /* "libpetsc4py.pyx":1235
+  /* "libpetsc4py.pyx":1237
  *     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_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1235, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1237, __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":1236
+    /* "libpetsc4py.pyx":1238
  *     cdef PetscBool found = PETSC_FALSE
  *     if PyPC(pc).self is None:
  *         CHKERR( PetscOptionsGetString(NULL,             # <<<<<<<<<<<<<<
  *                 getPrefix(pc), b"-pc_python_type",
  *                 name,sizeof(name),&found) )
  */
-    __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)
+    __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 == ((int)-1))) __PYX_ERR(0, 1238, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1239
+    /* "libpetsc4py.pyx":1241
  *                 getPrefix(pc), b"-pc_python_type",
  *                 name,sizeof(name),&found) )
  *         if found and name[0]:             # <<<<<<<<<<<<<<
@@ -14185,17 +15317,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetUp_Python(PC __pyx_v_pc) {
     __pyx_L5_bool_binop_done:;
     if (__pyx_t_3) {
 
-      /* "libpetsc4py.pyx":1240
+      /* "libpetsc4py.pyx":1242
  *                 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_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)
+      __pyx_t_5 = __pyx_f_11libpetsc4py_PCPythonSetType_PYTHON(__pyx_v_pc, __pyx_v_name); if (unlikely(__pyx_t_5 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 1242, __pyx_L1_error)
+      __pyx_t_4 = __pyx_f_11libpetsc4py_CHKERR(__pyx_t_5); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 1242, __pyx_L1_error)
 
-      /* "libpetsc4py.pyx":1239
+      /* "libpetsc4py.pyx":1241
  *                 getPrefix(pc), b"-pc_python_type",
  *                 name,sizeof(name),&found) )
  *         if found and name[0]:             # <<<<<<<<<<<<<<
@@ -14204,7 +15336,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetUp_Python(PC __pyx_v_pc) {
  */
     }
 
-    /* "libpetsc4py.pyx":1235
+    /* "libpetsc4py.pyx":1237
  *     cdef char name[2048]
  *     cdef PetscBool found = PETSC_FALSE
  *     if PyPC(pc).self is None:             # <<<<<<<<<<<<<<
@@ -14213,21 +15345,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetUp_Python(PC __pyx_v_pc) {
  */
   }
 
-  /* "libpetsc4py.pyx":1241
+  /* "libpetsc4py.pyx":1243
  *         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_ERR(0, 1241, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1243, __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":1242
+    /* "libpetsc4py.pyx":1244
  *             CHKERR( PCPythonSetType_PYTHON(pc,name) )
  *     if PyPC(pc).self is None:
  *         return PetscSETERR(PETSC_ERR_USER,             # <<<<<<<<<<<<<<
@@ -14237,7 +15369,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetUp_Python(PC __pyx_v_pc) {
     __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
+    /* "libpetsc4py.pyx":1243
  *         if found and name[0]:
  *             CHKERR( PCPythonSetType_PYTHON(pc,name) )
  *     if PyPC(pc).self is None:             # <<<<<<<<<<<<<<
@@ -14246,22 +15378,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetUp_Python(PC __pyx_v_pc) {
  */
   }
 
-  /* "libpetsc4py.pyx":1248
+  /* "libpetsc4py.pyx":1250
  *             "-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_ERR(0, 1248, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1250, __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_ERR(0, 1248, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_setUp); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1250, __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":1249
+  /* "libpetsc4py.pyx":1251
  *     #
  *     cdef setUp = PyPC(pc).setUp
  *     if setUp is not None:             # <<<<<<<<<<<<<<
@@ -14272,18 +15404,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetUp_Python(PC __pyx_v_pc) {
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "libpetsc4py.pyx":1250
+    /* "libpetsc4py.pyx":1252
  *     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_ERR(0, 1250, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1252, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_v_setUp);
     __pyx_t_7 = __pyx_v_setUp; __pyx_t_8 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -14293,24 +15425,44 @@ 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_ERR(0, 1250, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1252, __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_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_ERR(0, 1250, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_6);
-      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_7)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_1};
+        __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1252, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+        __Pyx_GOTREF(__pyx_t_6);
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_1};
+        __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1252, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+        __Pyx_GOTREF(__pyx_t_6);
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1252, __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_ERR(0, 1252, __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;
 
-    /* "libpetsc4py.pyx":1249
+    /* "libpetsc4py.pyx":1251
  *     #
  *     cdef setUp = PyPC(pc).setUp
  *     if setUp is not None:             # <<<<<<<<<<<<<<
@@ -14319,19 +15471,19 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetUp_Python(PC __pyx_v_pc) {
  */
   }
 
-  /* "libpetsc4py.pyx":1252
+  /* "libpetsc4py.pyx":1254
  *         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_ERR(0, 1252, __pyx_L1_error)
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1254, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __pyx_v_o = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "libpetsc4py.pyx":1253
+  /* "libpetsc4py.pyx":1255
  *     #
  *     cdef o = PyPC(pc)
  *     cdef PCOps ops = pc.ops             # <<<<<<<<<<<<<<
@@ -14341,21 +15493,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":1254
+  /* "libpetsc4py.pyx":1256
  *     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_ERR(0, 1254, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_o, __pyx_n_s_applyTranspose); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1256, __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":1255
+    /* "libpetsc4py.pyx":1257
  *     cdef PCOps ops = pc.ops
  *     if o.applyTranspose is None:
  *         ops.applytranspose = NULL             # <<<<<<<<<<<<<<
@@ -14364,7 +15516,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetUp_Python(PC __pyx_v_pc) {
  */
     __pyx_v_ops->applytranspose = NULL;
 
-    /* "libpetsc4py.pyx":1254
+    /* "libpetsc4py.pyx":1256
  *     cdef o = PyPC(pc)
  *     cdef PCOps ops = pc.ops
  *     if o.applyTranspose is None:             # <<<<<<<<<<<<<<
@@ -14373,21 +15525,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetUp_Python(PC __pyx_v_pc) {
  */
   }
 
-  /* "libpetsc4py.pyx":1256
+  /* "libpetsc4py.pyx":1258
  *     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_ERR(0, 1256, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_o, __pyx_n_s_applySymmetricLeft); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1258, __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":1257
+    /* "libpetsc4py.pyx":1259
  *         ops.applytranspose = NULL
  *     if o.applySymmetricLeft is None:
  *         ops.applysymmetricleft = NULL             # <<<<<<<<<<<<<<
@@ -14396,7 +15548,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetUp_Python(PC __pyx_v_pc) {
  */
     __pyx_v_ops->applysymmetricleft = NULL;
 
-    /* "libpetsc4py.pyx":1256
+    /* "libpetsc4py.pyx":1258
  *     if o.applyTranspose is None:
  *         ops.applytranspose = NULL
  *     if o.applySymmetricLeft is None:             # <<<<<<<<<<<<<<
@@ -14405,21 +15557,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetUp_Python(PC __pyx_v_pc) {
  */
   }
 
-  /* "libpetsc4py.pyx":1258
+  /* "libpetsc4py.pyx":1260
  *     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_ERR(0, 1258, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_o, __pyx_n_s_applySymmetricRight); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1260, __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":1259
+    /* "libpetsc4py.pyx":1261
  *         ops.applysymmetricleft = NULL
  *     if o.applySymmetricRight is None:
  *         ops.applysymmetricright = NULL             # <<<<<<<<<<<<<<
@@ -14428,7 +15580,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetUp_Python(PC __pyx_v_pc) {
  */
     __pyx_v_ops->applysymmetricright = NULL;
 
-    /* "libpetsc4py.pyx":1258
+    /* "libpetsc4py.pyx":1260
  *     if o.applySymmetricLeft is None:
  *         ops.applysymmetricleft = NULL
  *     if o.applySymmetricRight is None:             # <<<<<<<<<<<<<<
@@ -14437,7 +15589,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetUp_Python(PC __pyx_v_pc) {
  */
   }
 
-  /* "libpetsc4py.pyx":1261
+  /* "libpetsc4py.pyx":1263
  *         ops.applysymmetricright = NULL
  *     #
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -14447,7 +15599,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetUp_Python(PC __pyx_v_pc) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1227
+  /* "libpetsc4py.pyx":1229
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCSetUp_Python(             # <<<<<<<<<<<<<<
@@ -14469,12 +15621,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetUp_Python(PC __pyx_v_pc) {
   __Pyx_XDECREF(__pyx_v_o);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1263
+/* "libpetsc4py.pyx":1265
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCReset_Python(             # <<<<<<<<<<<<<<
@@ -14494,11 +15646,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCReset_Python(PC __pyx_v_pc) {
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("PCReset_Python", 0);
 
-  /* "libpetsc4py.pyx":1267
+  /* "libpetsc4py.pyx":1269
  *     ) \
  *     except IERR with gil:
  *     if getRef(pc) == 0: return 0             # <<<<<<<<<<<<<<
@@ -14511,7 +15663,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCReset_Python(PC __pyx_v_pc) {
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1268
+  /* "libpetsc4py.pyx":1270
  *     except IERR with gil:
  *     if getRef(pc) == 0: return 0
  *     FunctionBegin(b"PCReset_Python")             # <<<<<<<<<<<<<<
@@ -14520,22 +15672,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCReset_Python(PC __pyx_v_pc) {
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PCReset_Python"));
 
-  /* "libpetsc4py.pyx":1269
+  /* "libpetsc4py.pyx":1271
  *     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_ERR(0, 1269, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1271, __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_ERR(0, 1269, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_reset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1271, __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":1270
+  /* "libpetsc4py.pyx":1272
  *     FunctionBegin(b"PCReset_Python")
  *     cdef reset = PyPC(pc).reset
  *     if reset is not None:             # <<<<<<<<<<<<<<
@@ -14546,18 +15698,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCReset_Python(PC __pyx_v_pc) {
   __pyx_t_4 = (__pyx_t_1 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":1271
+    /* "libpetsc4py.pyx":1273
  *     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_ERR(0, 1271, __pyx_L1_error)
+    __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1273, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_INCREF(__pyx_v_reset);
     __pyx_t_5 = __pyx_v_reset; __pyx_t_6 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
       __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
       if (likely(__pyx_t_6)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -14567,24 +15719,44 @@ 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_ERR(0, 1271, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1273, __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_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_ERR(0, 1271, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_2};
+        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1273, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_2};
+        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1273, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1273, __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_ERR(0, 1273, __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;
 
-    /* "libpetsc4py.pyx":1270
+    /* "libpetsc4py.pyx":1272
  *     FunctionBegin(b"PCReset_Python")
  *     cdef reset = PyPC(pc).reset
  *     if reset is not None:             # <<<<<<<<<<<<<<
@@ -14593,7 +15765,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCReset_Python(PC __pyx_v_pc) {
  */
   }
 
-  /* "libpetsc4py.pyx":1272
+  /* "libpetsc4py.pyx":1274
  *     if reset is not None:
  *         reset(PC_(pc))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -14603,7 +15775,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCReset_Python(PC __pyx_v_pc) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1263
+  /* "libpetsc4py.pyx":1265
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCReset_Python(             # <<<<<<<<<<<<<<
@@ -14624,12 +15796,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCReset_Python(PC __pyx_v_pc) {
   __Pyx_XDECREF(__pyx_v_reset);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1274
+/* "libpetsc4py.pyx":1276
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCSetFromOptions_Python(             # <<<<<<<<<<<<<<
@@ -14656,11 +15828,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetFromOptions_Python(PetscOptionI
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("PCSetFromOptions_Python", 0);
 
-  /* "libpetsc4py.pyx":1279
+  /* "libpetsc4py.pyx":1281
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"PCSetFromOptions_Python")             # <<<<<<<<<<<<<<
@@ -14669,20 +15841,20 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetFromOptions_Python(PetscOptionI
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PCSetFromOptions_Python"));
 
-  /* "libpetsc4py.pyx":1281
+  /* "libpetsc4py.pyx":1283
  *     FunctionBegin(b"PCSetFromOptions_Python")
  *     #
  *     cdef char name[2048], *defval = PyPC(pc).getname()             # <<<<<<<<<<<<<<
  *     cdef PetscBool found = PETSC_FALSE
  *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1281, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1283, __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_ERR(0, 1281, __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 == ((char *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 1283, __pyx_L1_error)
   __pyx_v_defval = __pyx_t_2;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":1282
+  /* "libpetsc4py.pyx":1284
  *     #
  *     cdef char name[2048], *defval = PyPC(pc).getname()
  *     cdef PetscBool found = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -14691,7 +15863,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetFromOptions_Python(PetscOptionI
  */
   __pyx_v_found = PETSC_FALSE;
 
-  /* "libpetsc4py.pyx":1283
+  /* "libpetsc4py.pyx":1285
  *     cdef char name[2048], *defval = PyPC(pc).getname()
  *     cdef PetscBool found = PETSC_FALSE
  *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject             # <<<<<<<<<<<<<<
@@ -14700,16 +15872,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetFromOptions_Python(PetscOptionI
  */
   PetscOptionsObject = __pyx_v_PetscOptionsObject;
 
-  /* "libpetsc4py.pyx":1284
+  /* "libpetsc4py.pyx":1286
  *     cdef PetscBool found = PETSC_FALSE
  *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject
  *     CHKERR( PetscOptionsString(             # <<<<<<<<<<<<<<
  *             b"-pc_python_type",b"Python [package.]module[.{class|function}]",
  *             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)
+  __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 == ((int)-1))) __PYX_ERR(0, 1286, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1286
+  /* "libpetsc4py.pyx":1288
  *     CHKERR( PetscOptionsString(
  *             b"-pc_python_type",b"Python [package.]module[.{class|function}]",
  *             b"PCPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;             # <<<<<<<<<<<<<<
@@ -14718,7 +15890,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetFromOptions_Python(PetscOptionI
  */
   ((void)PetscOptionsObject);
 
-  /* "libpetsc4py.pyx":1287
+  /* "libpetsc4py.pyx":1289
  *             b"-pc_python_type",b"Python [package.]module[.{class|function}]",
  *             b"PCPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
  *     if found and name[0]:             # <<<<<<<<<<<<<<
@@ -14735,17 +15907,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetFromOptions_Python(PetscOptionI
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":1288
+    /* "libpetsc4py.pyx":1290
  *             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_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)
+    __pyx_t_6 = __pyx_f_11libpetsc4py_PCPythonSetType_PYTHON(__pyx_v_pc, __pyx_v_name); if (unlikely(__pyx_t_6 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 1290, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_11libpetsc4py_CHKERR(__pyx_t_6); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 1290, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1287
+    /* "libpetsc4py.pyx":1289
  *             b"-pc_python_type",b"Python [package.]module[.{class|function}]",
  *             b"PCPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
  *     if found and name[0]:             # <<<<<<<<<<<<<<
@@ -14754,22 +15926,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetFromOptions_Python(PetscOptionI
  */
   }
 
-  /* "libpetsc4py.pyx":1290
+  /* "libpetsc4py.pyx":1292
  *         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_ERR(0, 1290, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1292, __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_ERR(0, 1290, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_setFromOptions); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1292, __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":1291
+  /* "libpetsc4py.pyx":1293
  *     #
  *     cdef setFromOptions = PyPC(pc).setFromOptions
  *     if setFromOptions is not None:             # <<<<<<<<<<<<<<
@@ -14780,18 +15952,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetFromOptions_Python(PetscOptionI
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (__pyx_t_5) {
 
-    /* "libpetsc4py.pyx":1292
+    /* "libpetsc4py.pyx":1294
  *     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_ERR(0, 1292, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1294, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_v_setFromOptions);
     __pyx_t_8 = __pyx_v_setFromOptions; __pyx_t_9 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_8))) {
+    if (CYTHON_UNPACK_METHODS && 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);
@@ -14801,24 +15973,44 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetFromOptions_Python(PetscOptionI
       }
     }
     if (!__pyx_t_9) {
-      __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_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1294, __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_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_ERR(0, 1292, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_7);
-      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_8)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_t_1};
+        __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1294, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+        __Pyx_GOTREF(__pyx_t_7);
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_t_1};
+        __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1294, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+        __Pyx_GOTREF(__pyx_t_7);
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1294, __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_ERR(0, 1294, __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;
 
-    /* "libpetsc4py.pyx":1291
+    /* "libpetsc4py.pyx":1293
  *     #
  *     cdef setFromOptions = PyPC(pc).setFromOptions
  *     if setFromOptions is not None:             # <<<<<<<<<<<<<<
@@ -14827,7 +16019,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetFromOptions_Python(PetscOptionI
  */
   }
 
-  /* "libpetsc4py.pyx":1293
+  /* "libpetsc4py.pyx":1295
  *     if setFromOptions is not None:
  *         setFromOptions(PC_(pc))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -14837,7 +16029,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetFromOptions_Python(PetscOptionI
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1274
+  /* "libpetsc4py.pyx":1276
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCSetFromOptions_Python(             # <<<<<<<<<<<<<<
@@ -14858,12 +16050,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCSetFromOptions_Python(PetscOptionI
   __Pyx_XDECREF(__pyx_v_setFromOptions);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1295
+/* "libpetsc4py.pyx":1297
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCView_Python(             # <<<<<<<<<<<<<<
@@ -14883,14 +16075,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCView_Python(PC __pyx_v_pc, PetscVi
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
-  Py_ssize_t __pyx_t_9;
-  PyObject *__pyx_t_10 = NULL;
+  PyObject *__pyx_t_9 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("PCView_Python", 0);
 
-  /* "libpetsc4py.pyx":1300
+  /* "libpetsc4py.pyx":1302
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"PCView_Python")             # <<<<<<<<<<<<<<
@@ -14899,34 +16090,34 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCView_Python(PC __pyx_v_pc, PetscVi
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PCView_Python"));
 
-  /* "libpetsc4py.pyx":1301
+  /* "libpetsc4py.pyx":1303
  *     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_ERR(0, 1301, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1303, __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_ERR(0, 1301, __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 == ((int)-1))) __PYX_ERR(0, 1303, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":1302
+  /* "libpetsc4py.pyx":1304
  *     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_ERR(0, 1302, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1304, __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_ERR(0, 1302, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_view); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1304, __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":1303
+  /* "libpetsc4py.pyx":1305
  *     viewcontext(PyPC(pc), vwr)
  *     cdef view = PyPC(pc).view
  *     if view is not None:             # <<<<<<<<<<<<<<
@@ -14937,48 +16128,70 @@ 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":1304
+    /* "libpetsc4py.pyx":1306
  *     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_ERR(0, 1304, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1306, __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_ERR(0, 1304, __pyx_L1_error)
+    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Viewer_(__pyx_v_vwr)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1306, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_INCREF(__pyx_v_view);
     __pyx_t_7 = __pyx_v_view; __pyx_t_8 = NULL;
-    __pyx_t_9 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+    __pyx_t_2 = 0;
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
         __Pyx_INCREF(__pyx_t_8);
         __Pyx_INCREF(function);
         __Pyx_DECREF_SET(__pyx_t_7, function);
-        __pyx_t_9 = 1;
+        __pyx_t_2 = 1;
       }
     }
-    __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;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_7)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_t_1, __pyx_t_6};
+      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_2, 2+__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1306, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_t_1, __pyx_t_6};
+      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_2, 2+__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1306, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_9 = PyTuple_New(2+__pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1306, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_9);
+      if (__pyx_t_8) {
+        __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+__pyx_t_2, __pyx_t_1);
+      __Pyx_GIVEREF(__pyx_t_6);
+      PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_2, __pyx_t_6);
+      __pyx_t_1 = 0;
+      __pyx_t_6 = 0;
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_9, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1306, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     }
-    __Pyx_GIVEREF(__pyx_t_1);
-    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_1);
-    __Pyx_GIVEREF(__pyx_t_6);
-    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_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;
 
-    /* "libpetsc4py.pyx":1303
+    /* "libpetsc4py.pyx":1305
  *     viewcontext(PyPC(pc), vwr)
  *     cdef view = PyPC(pc).view
  *     if view is not None:             # <<<<<<<<<<<<<<
@@ -14987,7 +16200,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCView_Python(PC __pyx_v_pc, PetscVi
  */
   }
 
-  /* "libpetsc4py.pyx":1305
+  /* "libpetsc4py.pyx":1307
  *     if view is not None:
  *         view(PC_(pc), Viewer_(vwr))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -14997,7 +16210,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCView_Python(PC __pyx_v_pc, PetscVi
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1295
+  /* "libpetsc4py.pyx":1297
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCView_Python(             # <<<<<<<<<<<<<<
@@ -15012,19 +16225,19 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCView_Python(PC __pyx_v_pc, PetscVi
   __Pyx_XDECREF(__pyx_t_6);
   __Pyx_XDECREF(__pyx_t_7);
   __Pyx_XDECREF(__pyx_t_8);
-  __Pyx_XDECREF(__pyx_t_10);
+  __Pyx_XDECREF(__pyx_t_9);
   __Pyx_AddTraceback("libpetsc4py.PCView_Python", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = PETSC_ERR_PYTHON;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_view);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1307
+/* "libpetsc4py.pyx":1309
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCPreSolve_Python(             # <<<<<<<<<<<<<<
@@ -15045,14 +16258,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCPreSolve_Python(PC __pyx_v_pc, KSP
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = NULL;
-  Py_ssize_t __pyx_t_10;
+  int __pyx_t_10;
   PyObject *__pyx_t_11 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("PCPreSolve_Python", 0);
 
-  /* "libpetsc4py.pyx":1314
+  /* "libpetsc4py.pyx":1316
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"PCPreSolve_Python")             # <<<<<<<<<<<<<<
@@ -15061,22 +16274,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCPreSolve_Python(PC __pyx_v_pc, KSP
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PCPreSolve_Python"));
 
-  /* "libpetsc4py.pyx":1315
+  /* "libpetsc4py.pyx":1317
  *     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_ERR(0, 1315, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1317, __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_ERR(0, 1315, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_preSolve); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1317, __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":1316
+  /* "libpetsc4py.pyx":1318
  *     FunctionBegin(b"PCPreSolve_Python")
  *     cdef preSolve = PyPC(pc).preSolve
  *     if preSolve is not None:             # <<<<<<<<<<<<<<
@@ -15087,25 +16300,25 @@ 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":1317
+    /* "libpetsc4py.pyx":1319
  *     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_ERR(0, 1317, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1319, __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_ERR(0, 1317, __pyx_L1_error)
+    __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1319, __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_ERR(0, 1317, __pyx_L1_error)
+    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_b)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1319, __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, 1317, __pyx_L1_error)
+    __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1319, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_INCREF(__pyx_v_preSolve);
     __pyx_t_8 = __pyx_v_preSolve; __pyx_t_9 = NULL;
     __pyx_t_10 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_8))) {
+    if (CYTHON_UNPACK_METHODS && 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);
@@ -15115,30 +16328,56 @@ 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_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;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_8)) {
+      PyObject *__pyx_temp[5] = {__pyx_t_9, __pyx_t_1, __pyx_t_5, __pyx_t_6, __pyx_t_7};
+      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_10, 4+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1319, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __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;
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
+      PyObject *__pyx_temp[5] = {__pyx_t_9, __pyx_t_1, __pyx_t_5, __pyx_t_6, __pyx_t_7};
+      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_10, 4+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1319, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __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;
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_11 = PyTuple_New(4+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1319, __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_1);
+      PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_t_1);
+      __Pyx_GIVEREF(__pyx_t_5);
+      PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_t_5);
+      __Pyx_GIVEREF(__pyx_t_6);
+      PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_10, __pyx_t_6);
+      __Pyx_GIVEREF(__pyx_t_7);
+      PyTuple_SET_ITEM(__pyx_t_11, 3+__pyx_t_10, __pyx_t_7);
+      __pyx_t_1 = 0;
+      __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_ERR(0, 1319, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
     }
-    __Pyx_GIVEREF(__pyx_t_1);
-    PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_t_1);
-    __Pyx_GIVEREF(__pyx_t_5);
-    PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_t_5);
-    __Pyx_GIVEREF(__pyx_t_6);
-    PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_10, __pyx_t_6);
-    __Pyx_GIVEREF(__pyx_t_7);
-    PyTuple_SET_ITEM(__pyx_t_11, 3+__pyx_t_10, __pyx_t_7);
-    __pyx_t_1 = 0;
-    __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_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;
 
-    /* "libpetsc4py.pyx":1316
+    /* "libpetsc4py.pyx":1318
  *     FunctionBegin(b"PCPreSolve_Python")
  *     cdef preSolve = PyPC(pc).preSolve
  *     if preSolve is not None:             # <<<<<<<<<<<<<<
@@ -15147,7 +16386,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCPreSolve_Python(PC __pyx_v_pc, KSP
  */
   }
 
-  /* "libpetsc4py.pyx":1318
+  /* "libpetsc4py.pyx":1320
  *     if preSolve is not None:
  *         preSolve(PC_(pc), KSP_(ksp), Vec_(b), Vec_(x))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -15157,7 +16396,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCPreSolve_Python(PC __pyx_v_pc, KSP
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1307
+  /* "libpetsc4py.pyx":1309
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCPreSolve_Python(             # <<<<<<<<<<<<<<
@@ -15181,12 +16420,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCPreSolve_Python(PC __pyx_v_pc, KSP
   __Pyx_XDECREF(__pyx_v_preSolve);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1320
+/* "libpetsc4py.pyx":1322
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCPostSolve_Python(             # <<<<<<<<<<<<<<
@@ -15207,14 +16446,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCPostSolve_Python(PC __pyx_v_pc, KS
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = NULL;
-  Py_ssize_t __pyx_t_10;
+  int __pyx_t_10;
   PyObject *__pyx_t_11 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("PCPostSolve_Python", 0);
 
-  /* "libpetsc4py.pyx":1327
+  /* "libpetsc4py.pyx":1329
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"PCPostSolve_Python")             # <<<<<<<<<<<<<<
@@ -15223,22 +16462,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCPostSolve_Python(PC __pyx_v_pc, KS
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PCPostSolve_Python"));
 
-  /* "libpetsc4py.pyx":1328
+  /* "libpetsc4py.pyx":1330
  *     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_ERR(0, 1328, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1330, __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_ERR(0, 1328, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_postSolve); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1330, __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":1329
+  /* "libpetsc4py.pyx":1331
  *     FunctionBegin(b"PCPostSolve_Python")
  *     cdef postSolve = PyPC(pc).postSolve
  *     if postSolve is not None:             # <<<<<<<<<<<<<<
@@ -15249,25 +16488,25 @@ 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":1330
+    /* "libpetsc4py.pyx":1332
  *     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_ERR(0, 1330, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1332, __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_ERR(0, 1330, __pyx_L1_error)
+    __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1332, __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_ERR(0, 1330, __pyx_L1_error)
+    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_b)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1332, __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, 1330, __pyx_L1_error)
+    __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1332, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_INCREF(__pyx_v_postSolve);
     __pyx_t_8 = __pyx_v_postSolve; __pyx_t_9 = NULL;
     __pyx_t_10 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_8))) {
+    if (CYTHON_UNPACK_METHODS && 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);
@@ -15277,30 +16516,56 @@ 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_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;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_8)) {
+      PyObject *__pyx_temp[5] = {__pyx_t_9, __pyx_t_1, __pyx_t_5, __pyx_t_6, __pyx_t_7};
+      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_10, 4+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1332, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __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;
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
+      PyObject *__pyx_temp[5] = {__pyx_t_9, __pyx_t_1, __pyx_t_5, __pyx_t_6, __pyx_t_7};
+      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_10, 4+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1332, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __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;
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_11 = PyTuple_New(4+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 1332, __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_1);
+      PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_t_1);
+      __Pyx_GIVEREF(__pyx_t_5);
+      PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_t_5);
+      __Pyx_GIVEREF(__pyx_t_6);
+      PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_10, __pyx_t_6);
+      __Pyx_GIVEREF(__pyx_t_7);
+      PyTuple_SET_ITEM(__pyx_t_11, 3+__pyx_t_10, __pyx_t_7);
+      __pyx_t_1 = 0;
+      __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_ERR(0, 1332, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
     }
-    __Pyx_GIVEREF(__pyx_t_1);
-    PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_t_1);
-    __Pyx_GIVEREF(__pyx_t_5);
-    PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_t_5);
-    __Pyx_GIVEREF(__pyx_t_6);
-    PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_10, __pyx_t_6);
-    __Pyx_GIVEREF(__pyx_t_7);
-    PyTuple_SET_ITEM(__pyx_t_11, 3+__pyx_t_10, __pyx_t_7);
-    __pyx_t_1 = 0;
-    __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_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;
 
-    /* "libpetsc4py.pyx":1329
+    /* "libpetsc4py.pyx":1331
  *     FunctionBegin(b"PCPostSolve_Python")
  *     cdef postSolve = PyPC(pc).postSolve
  *     if postSolve is not None:             # <<<<<<<<<<<<<<
@@ -15309,7 +16574,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCPostSolve_Python(PC __pyx_v_pc, KS
  */
   }
 
-  /* "libpetsc4py.pyx":1331
+  /* "libpetsc4py.pyx":1333
  *     if postSolve is not None:
  *         postSolve(PC_(pc), KSP_(ksp), Vec_(b), Vec_(x))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -15319,7 +16584,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCPostSolve_Python(PC __pyx_v_pc, KS
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1320
+  /* "libpetsc4py.pyx":1322
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCPostSolve_Python(             # <<<<<<<<<<<<<<
@@ -15343,12 +16608,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCPostSolve_Python(PC __pyx_v_pc, KS
   __Pyx_XDECREF(__pyx_v_postSolve);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1333
+/* "libpetsc4py.pyx":1335
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCApply_Python(             # <<<<<<<<<<<<<<
@@ -15366,14 +16631,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApply_Python(PC __pyx_v_pc, Vec __
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
-  Py_ssize_t __pyx_t_7;
+  int __pyx_t_7;
   PyObject *__pyx_t_8 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("PCApply_Python", 0);
 
-  /* "libpetsc4py.pyx":1339
+  /* "libpetsc4py.pyx":1341
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"PCApply_Python")             # <<<<<<<<<<<<<<
@@ -15382,38 +16647,38 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApply_Python(PC __pyx_v_pc, Vec __
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PCApply_Python"));
 
-  /* "libpetsc4py.pyx":1340
+  /* "libpetsc4py.pyx":1342
  *     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_ERR(0, 1340, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1342, __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_ERR(0, 1340, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_apply); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1342, __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":1341
+  /* "libpetsc4py.pyx":1343
  *     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_ERR(0, 1341, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1343, __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_ERR(0, 1341, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1343, __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_ERR(0, 1341, __pyx_L1_error)
+  __pyx_t_4 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1343, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(__pyx_v_apply);
   __pyx_t_5 = __pyx_v_apply; __pyx_t_6 = NULL;
   __pyx_t_7 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
     __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
     if (likely(__pyx_t_6)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -15423,27 +16688,51 @@ 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_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;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_5)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_t_1, __pyx_t_3, __pyx_t_4};
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1343, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_t_1, __pyx_t_3, __pyx_t_4};
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1343, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  } else
+  #endif
+  {
+    __pyx_t_8 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1343, __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;
+    }
+    __Pyx_GIVEREF(__pyx_t_1);
+    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_1);
+    __Pyx_GIVEREF(__pyx_t_3);
+    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_t_3);
+    __Pyx_GIVEREF(__pyx_t_4);
+    PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_7, __pyx_t_4);
+    __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_ERR(0, 1343, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   }
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_3);
-  PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_t_3);
-  __Pyx_GIVEREF(__pyx_t_4);
-  PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_7, __pyx_t_4);
-  __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_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":1342
+  /* "libpetsc4py.pyx":1344
  *     cdef apply = PyPC(pc).apply
  *     apply(PC_(pc), Vec_(x), Vec_(y))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -15453,7 +16742,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApply_Python(PC __pyx_v_pc, Vec __
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1333
+  /* "libpetsc4py.pyx":1335
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCApply_Python(             # <<<<<<<<<<<<<<
@@ -15476,12 +16765,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApply_Python(PC __pyx_v_pc, Vec __
   __Pyx_XDECREF(__pyx_v_apply);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1344
+/* "libpetsc4py.pyx":1346
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCApplyTranspose_Python(             # <<<<<<<<<<<<<<
@@ -15499,14 +16788,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApplyTranspose_Python(PC __pyx_v_p
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
-  Py_ssize_t __pyx_t_7;
+  int __pyx_t_7;
   PyObject *__pyx_t_8 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("PCApplyTranspose_Python", 0);
 
-  /* "libpetsc4py.pyx":1350
+  /* "libpetsc4py.pyx":1352
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"PCApplyTranspose_Python")             # <<<<<<<<<<<<<<
@@ -15515,38 +16804,38 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApplyTranspose_Python(PC __pyx_v_p
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PCApplyTranspose_Python"));
 
-  /* "libpetsc4py.pyx":1351
+  /* "libpetsc4py.pyx":1353
  *     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_ERR(0, 1351, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1353, __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_ERR(0, 1351, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_applyTranspose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1353, __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":1352
+  /* "libpetsc4py.pyx":1354
  *     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_ERR(0, 1352, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1354, __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_ERR(0, 1352, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1354, __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_ERR(0, 1352, __pyx_L1_error)
+  __pyx_t_4 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1354, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(__pyx_v_applyTranspose);
   __pyx_t_5 = __pyx_v_applyTranspose; __pyx_t_6 = NULL;
   __pyx_t_7 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
     __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
     if (likely(__pyx_t_6)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -15556,27 +16845,51 @@ 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_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;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_5)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_t_1, __pyx_t_3, __pyx_t_4};
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1354, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_t_1, __pyx_t_3, __pyx_t_4};
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1354, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  } else
+  #endif
+  {
+    __pyx_t_8 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1354, __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;
+    }
+    __Pyx_GIVEREF(__pyx_t_1);
+    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_1);
+    __Pyx_GIVEREF(__pyx_t_3);
+    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_t_3);
+    __Pyx_GIVEREF(__pyx_t_4);
+    PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_7, __pyx_t_4);
+    __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_ERR(0, 1354, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   }
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_3);
-  PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_t_3);
-  __Pyx_GIVEREF(__pyx_t_4);
-  PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_7, __pyx_t_4);
-  __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_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":1353
+  /* "libpetsc4py.pyx":1355
  *     cdef applyTranspose = PyPC(pc).applyTranspose
  *     applyTranspose(PC_(pc), Vec_(x), Vec_(y))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -15586,7 +16899,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApplyTranspose_Python(PC __pyx_v_p
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1344
+  /* "libpetsc4py.pyx":1346
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCApplyTranspose_Python(             # <<<<<<<<<<<<<<
@@ -15609,12 +16922,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApplyTranspose_Python(PC __pyx_v_p
   __Pyx_XDECREF(__pyx_v_applyTranspose);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1355
+/* "libpetsc4py.pyx":1357
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCApplySymmetricLeft_Python(             # <<<<<<<<<<<<<<
@@ -15632,14 +16945,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApplySymmetricLeft_Python(PC __pyx
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
-  Py_ssize_t __pyx_t_7;
+  int __pyx_t_7;
   PyObject *__pyx_t_8 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("PCApplySymmetricLeft_Python", 0);
 
-  /* "libpetsc4py.pyx":1361
+  /* "libpetsc4py.pyx":1363
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"PCApplySymmetricLeft_Python")             # <<<<<<<<<<<<<<
@@ -15648,38 +16961,38 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApplySymmetricLeft_Python(PC __pyx
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PCApplySymmetricLeft_Python"));
 
-  /* "libpetsc4py.pyx":1362
+  /* "libpetsc4py.pyx":1364
  *     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_ERR(0, 1362, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1364, __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_ERR(0, 1362, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_applySymmetricLeft); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1364, __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":1363
+  /* "libpetsc4py.pyx":1365
  *     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_ERR(0, 1363, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1365, __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_ERR(0, 1363, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1365, __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_ERR(0, 1363, __pyx_L1_error)
+  __pyx_t_4 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1365, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(__pyx_v_applySymmetricLeft);
   __pyx_t_5 = __pyx_v_applySymmetricLeft; __pyx_t_6 = NULL;
   __pyx_t_7 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
     __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
     if (likely(__pyx_t_6)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -15689,27 +17002,51 @@ 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_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;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_5)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_t_1, __pyx_t_3, __pyx_t_4};
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1365, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_t_1, __pyx_t_3, __pyx_t_4};
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1365, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  } else
+  #endif
+  {
+    __pyx_t_8 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1365, __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;
+    }
+    __Pyx_GIVEREF(__pyx_t_1);
+    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_1);
+    __Pyx_GIVEREF(__pyx_t_3);
+    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_t_3);
+    __Pyx_GIVEREF(__pyx_t_4);
+    PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_7, __pyx_t_4);
+    __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_ERR(0, 1365, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   }
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_3);
-  PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_t_3);
-  __Pyx_GIVEREF(__pyx_t_4);
-  PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_7, __pyx_t_4);
-  __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_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":1364
+  /* "libpetsc4py.pyx":1366
  *     cdef applySymmetricLeft = PyPC(pc).applySymmetricLeft
  *     applySymmetricLeft(PC_(pc), Vec_(x), Vec_(y))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -15719,7 +17056,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApplySymmetricLeft_Python(PC __pyx
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1355
+  /* "libpetsc4py.pyx":1357
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCApplySymmetricLeft_Python(             # <<<<<<<<<<<<<<
@@ -15742,12 +17079,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApplySymmetricLeft_Python(PC __pyx
   __Pyx_XDECREF(__pyx_v_applySymmetricLeft);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1366
+/* "libpetsc4py.pyx":1368
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCApplySymmetricRight_Python(             # <<<<<<<<<<<<<<
@@ -15765,14 +17102,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApplySymmetricRight_Python(PC __py
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
-  Py_ssize_t __pyx_t_7;
+  int __pyx_t_7;
   PyObject *__pyx_t_8 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("PCApplySymmetricRight_Python", 0);
 
-  /* "libpetsc4py.pyx":1372
+  /* "libpetsc4py.pyx":1374
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"PCApplySymmetricRight_Python")             # <<<<<<<<<<<<<<
@@ -15781,38 +17118,38 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApplySymmetricRight_Python(PC __py
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PCApplySymmetricRight_Python"));
 
-  /* "libpetsc4py.pyx":1373
+  /* "libpetsc4py.pyx":1375
  *     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_ERR(0, 1373, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyPC(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1375, __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_ERR(0, 1373, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_applySymmetricRight); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1375, __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":1374
+  /* "libpetsc4py.pyx":1376
  *     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_ERR(0, 1374, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PC_(__pyx_v_pc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1376, __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_ERR(0, 1374, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1376, __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_ERR(0, 1374, __pyx_L1_error)
+  __pyx_t_4 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_y)); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1376, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(__pyx_v_applySymmetricRight);
   __pyx_t_5 = __pyx_v_applySymmetricRight; __pyx_t_6 = NULL;
   __pyx_t_7 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
     __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
     if (likely(__pyx_t_6)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -15822,27 +17159,51 @@ 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_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;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_5)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_t_1, __pyx_t_3, __pyx_t_4};
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1376, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_6, __pyx_t_1, __pyx_t_3, __pyx_t_4};
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1376, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  } else
+  #endif
+  {
+    __pyx_t_8 = PyTuple_New(3+__pyx_t_7); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1376, __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;
+    }
+    __Pyx_GIVEREF(__pyx_t_1);
+    PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_1);
+    __Pyx_GIVEREF(__pyx_t_3);
+    PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_t_3);
+    __Pyx_GIVEREF(__pyx_t_4);
+    PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_7, __pyx_t_4);
+    __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_ERR(0, 1376, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
   }
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_8, 0+__pyx_t_7, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_3);
-  PyTuple_SET_ITEM(__pyx_t_8, 1+__pyx_t_7, __pyx_t_3);
-  __Pyx_GIVEREF(__pyx_t_4);
-  PyTuple_SET_ITEM(__pyx_t_8, 2+__pyx_t_7, __pyx_t_4);
-  __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_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":1375
+  /* "libpetsc4py.pyx":1377
  *     cdef applySymmetricRight = PyPC(pc).applySymmetricRight
  *     applySymmetricRight(PC_(pc), Vec_(x), Vec_(y))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -15852,7 +17213,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApplySymmetricRight_Python(PC __py
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1366
+  /* "libpetsc4py.pyx":1368
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode PCApplySymmetricRight_Python(             # <<<<<<<<<<<<<<
@@ -15875,12 +17236,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PCApplySymmetricRight_Python(PC __py
   __Pyx_XDECREF(__pyx_v_applySymmetricRight);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1428
+/* "libpetsc4py.pyx":1431
  * @cython.internal
  * cdef class _PyKSP(_PyObj): pass
  * cdef inline _PyKSP PyKSP(PetscKSP ksp):             # <<<<<<<<<<<<<<
@@ -15896,7 +17257,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyKSP *__pyx_f_11libpetsc4p
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("PyKSP", 0);
 
-  /* "libpetsc4py.pyx":1429
+  /* "libpetsc4py.pyx":1432
  * cdef class _PyKSP(_PyObj): pass
  * cdef inline _PyKSP PyKSP(PetscKSP ksp):
  *     if ksp != NULL and ksp.data != NULL:             # <<<<<<<<<<<<<<
@@ -15914,7 +17275,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyKSP *__pyx_f_11libpetsc4p
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "libpetsc4py.pyx":1430
+    /* "libpetsc4py.pyx":1433
  * cdef inline _PyKSP PyKSP(PetscKSP ksp):
  *     if ksp != NULL and ksp.data != NULL:
  *         return <_PyKSP>ksp.data             # <<<<<<<<<<<<<<
@@ -15926,7 +17287,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyKSP *__pyx_f_11libpetsc4p
     __pyx_r = ((struct __pyx_obj_11libpetsc4py__PyKSP *)__pyx_v_ksp->data);
     goto __pyx_L0;
 
-    /* "libpetsc4py.pyx":1429
+    /* "libpetsc4py.pyx":1432
  * cdef class _PyKSP(_PyObj): pass
  * cdef inline _PyKSP PyKSP(PetscKSP ksp):
  *     if ksp != NULL and ksp.data != NULL:             # <<<<<<<<<<<<<<
@@ -15935,7 +17296,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyKSP *__pyx_f_11libpetsc4p
  */
   }
 
-  /* "libpetsc4py.pyx":1432
+  /* "libpetsc4py.pyx":1435
  *         return <_PyKSP>ksp.data
  *     else:
  *         return _PyKSP.__new__(_PyKSP)             # <<<<<<<<<<<<<<
@@ -15944,15 +17305,15 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyKSP *__pyx_f_11libpetsc4p
  */
   /*else*/ {
     __Pyx_XDECREF(((PyObject *)__pyx_r));
-    __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_t_3 = __pyx_tp_new_11libpetsc4py__PyKSP(((PyTypeObject *)__pyx_ptype_11libpetsc4py__PyKSP), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1435, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11libpetsc4py__PyKSP)))) __PYX_ERR(0, 1432, __pyx_L1_error)
+    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11libpetsc4py__PyKSP)))) __PYX_ERR(0, 1435, __pyx_L1_error)
     __pyx_r = ((struct __pyx_obj_11libpetsc4py__PyKSP *)__pyx_t_3);
     __pyx_t_3 = 0;
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1428
+  /* "libpetsc4py.pyx":1431
  * @cython.internal
  * cdef class _PyKSP(_PyObj): pass
  * cdef inline _PyKSP PyKSP(PetscKSP ksp):             # <<<<<<<<<<<<<<
@@ -15971,7 +17332,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyKSP *__pyx_f_11libpetsc4p
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1434
+/* "libpetsc4py.pyx":1437
  *         return _PyKSP.__new__(_PyKSP)
  * 
  * cdef public PetscErrorCode KSPPythonGetContext(PetscKSP ksp, void **ctx) \             # <<<<<<<<<<<<<<
@@ -15986,7 +17347,7 @@ PetscErrorCode KSPPythonGetContext(KSP __pyx_v_ksp, void **__pyx_v_ctx) {
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("KSPPythonGetContext", 0);
 
-  /* "libpetsc4py.pyx":1436
+  /* "libpetsc4py.pyx":1439
  * cdef public PetscErrorCode KSPPythonGetContext(PetscKSP ksp, void **ctx) \
  *     except IERR:
  *     FunctionBegin(b"KSPPythonGetContext")             # <<<<<<<<<<<<<<
@@ -15995,19 +17356,19 @@ PetscErrorCode KSPPythonGetContext(KSP __pyx_v_ksp, void **__pyx_v_ctx) {
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPPythonGetContext"));
 
-  /* "libpetsc4py.pyx":1437
+  /* "libpetsc4py.pyx":1440
  *     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_ERR(0, 1437, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1440, __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_ERR(0, 1437, __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 == ((int)-1))) __PYX_ERR(0, 1440, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":1438
+  /* "libpetsc4py.pyx":1441
  *     FunctionBegin(b"KSPPythonGetContext")
  *     PyKSP(ksp).getcontext(ctx)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -16017,7 +17378,7 @@ PetscErrorCode KSPPythonGetContext(KSP __pyx_v_ksp, void **__pyx_v_ctx) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1434
+  /* "libpetsc4py.pyx":1437
  *         return _PyKSP.__new__(_PyKSP)
  * 
  * cdef public PetscErrorCode KSPPythonGetContext(PetscKSP ksp, void **ctx) \             # <<<<<<<<<<<<<<
@@ -16035,7 +17396,7 @@ PetscErrorCode KSPPythonGetContext(KSP __pyx_v_ksp, void **__pyx_v_ctx) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1440
+/* "libpetsc4py.pyx":1443
  *     return FunctionEnd()
  * 
  * cdef public PetscErrorCode KSPPythonSetContext(PetscKSP ksp, void *ctx) \             # <<<<<<<<<<<<<<
@@ -16051,7 +17412,7 @@ PetscErrorCode KSPPythonSetContext(KSP __pyx_v_ksp, void *__pyx_v_ctx) {
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("KSPPythonSetContext", 0);
 
-  /* "libpetsc4py.pyx":1442
+  /* "libpetsc4py.pyx":1445
  * cdef public PetscErrorCode KSPPythonSetContext(PetscKSP ksp, void *ctx) \
  *     except IERR:
  *     FunctionBegin(b"KSPPythonSetContext")             # <<<<<<<<<<<<<<
@@ -16060,22 +17421,22 @@ PetscErrorCode KSPPythonSetContext(KSP __pyx_v_ksp, void *__pyx_v_ctx) {
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPPythonSetContext"));
 
-  /* "libpetsc4py.pyx":1443
+  /* "libpetsc4py.pyx":1446
  *     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_ERR(0, 1443, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1446, __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_ERR(0, 1443, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1446, __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_ERR(0, 1443, __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 == ((int)-1))) __PYX_ERR(0, 1446, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1444
+  /* "libpetsc4py.pyx":1447
  *     FunctionBegin(b"KSPPythonSetContext")
  *     PyKSP(ksp).setcontext(ctx, KSP_(ksp))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -16085,7 +17446,7 @@ PetscErrorCode KSPPythonSetContext(KSP __pyx_v_ksp, void *__pyx_v_ctx) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1440
+  /* "libpetsc4py.pyx":1443
  *     return FunctionEnd()
  * 
  * cdef public PetscErrorCode KSPPythonSetContext(PetscKSP ksp, void *ctx) \             # <<<<<<<<<<<<<<
@@ -16104,7 +17465,7 @@ PetscErrorCode KSPPythonSetContext(KSP __pyx_v_ksp, void *__pyx_v_ctx) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1446
+/* "libpetsc4py.pyx":1449
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPPythonSetType_PYTHON(PetscKSP ksp, char name[]) \             # <<<<<<<<<<<<<<
@@ -16121,11 +17482,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPythonSetType_PYTHON(KSP __pyx_v_
   PetscErrorCode __pyx_t_3;
   int __pyx_t_4;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("KSPPythonSetType_PYTHON", 0);
 
-  /* "libpetsc4py.pyx":1448
+  /* "libpetsc4py.pyx":1451
  * cdef PetscErrorCode KSPPythonSetType_PYTHON(PetscKSP ksp, char name[]) \
  *     except IERR with gil:
  *     FunctionBegin(b"KSPPythonSetType_PYTHON")             # <<<<<<<<<<<<<<
@@ -16134,7 +17495,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPythonSetType_PYTHON(KSP __pyx_v_
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPPythonSetType_PYTHON"));
 
-  /* "libpetsc4py.pyx":1449
+  /* "libpetsc4py.pyx":1452
  *     except IERR with gil:
  *     FunctionBegin(b"KSPPythonSetType_PYTHON")
  *     if name == NULL: return FunctionEnd() # XXX             # <<<<<<<<<<<<<<
@@ -16147,40 +17508,40 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPythonSetType_PYTHON(KSP __pyx_v_
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1450
+  /* "libpetsc4py.pyx":1453
  *     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_ERR(0, 1450, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_11libpetsc4py_createcontext(__pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1453, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_ctx = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1451
+  /* "libpetsc4py.pyx":1454
  *     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_ERR(0, 1451, __pyx_L1_error)
+  __pyx_t_3 = KSPPythonSetContext(__pyx_v_ksp, ((void *)__pyx_v_ctx)); if (unlikely(__pyx_t_3 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 1454, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1452
+  /* "libpetsc4py.pyx":1455
  *     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_ERR(0, 1452, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1455, __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_ERR(0, 1452, __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 == ((int)-1))) __PYX_ERR(0, 1455, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1453
+  /* "libpetsc4py.pyx":1456
  *     KSPPythonSetContext(ksp, <void*>ctx)
  *     PyKSP(ksp).setname(name)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -16190,7 +17551,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPythonSetType_PYTHON(KSP __pyx_v_
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1446
+  /* "libpetsc4py.pyx":1449
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPPythonSetType_PYTHON(PetscKSP ksp, char name[]) \             # <<<<<<<<<<<<<<
@@ -16207,12 +17568,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPythonSetType_PYTHON(KSP __pyx_v_
   __Pyx_XDECREF(__pyx_v_ctx);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1455
+/* "libpetsc4py.pyx":1458
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPCreate_Python(             # <<<<<<<<<<<<<<
@@ -16229,11 +17590,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPCreate_Python(KSP __pyx_v_ksp) {
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("KSPCreate_Python", 0);
 
-  /* "libpetsc4py.pyx":1459
+  /* "libpetsc4py.pyx":1462
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"KSPCreate_Python")             # <<<<<<<<<<<<<<
@@ -16242,7 +17603,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPCreate_Python(KSP __pyx_v_ksp) {
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPCreate_Python"));
 
-  /* "libpetsc4py.pyx":1461
+  /* "libpetsc4py.pyx":1464
  *     FunctionBegin(b"KSPCreate_Python")
  *     #
  *     cdef KSPOps ops    = ksp.ops             # <<<<<<<<<<<<<<
@@ -16252,7 +17613,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":1462
+  /* "libpetsc4py.pyx":1465
  *     #
  *     cdef KSPOps ops    = ksp.ops
  *     ops.reset          = KSPReset_Python             # <<<<<<<<<<<<<<
@@ -16261,7 +17622,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPCreate_Python(KSP __pyx_v_ksp) {
  */
   __pyx_v_ops->reset = __pyx_f_11libpetsc4py_KSPReset_Python;
 
-  /* "libpetsc4py.pyx":1463
+  /* "libpetsc4py.pyx":1466
  *     cdef KSPOps ops    = ksp.ops
  *     ops.reset          = KSPReset_Python
  *     ops.destroy        = KSPDestroy_Python             # <<<<<<<<<<<<<<
@@ -16270,7 +17631,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPCreate_Python(KSP __pyx_v_ksp) {
  */
   __pyx_v_ops->destroy = __pyx_f_11libpetsc4py_KSPDestroy_Python;
 
-  /* "libpetsc4py.pyx":1464
+  /* "libpetsc4py.pyx":1467
  *     ops.reset          = KSPReset_Python
  *     ops.destroy        = KSPDestroy_Python
  *     ops.setup          = KSPSetUp_Python             # <<<<<<<<<<<<<<
@@ -16279,7 +17640,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPCreate_Python(KSP __pyx_v_ksp) {
  */
   __pyx_v_ops->setup = __pyx_f_11libpetsc4py_KSPSetUp_Python;
 
-  /* "libpetsc4py.pyx":1465
+  /* "libpetsc4py.pyx":1468
  *     ops.destroy        = KSPDestroy_Python
  *     ops.setup          = KSPSetUp_Python
  *     ops.setfromoptions = KSPSetFromOptions_Python             # <<<<<<<<<<<<<<
@@ -16288,7 +17649,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPCreate_Python(KSP __pyx_v_ksp) {
  */
   __pyx_v_ops->setfromoptions = __pyx_f_11libpetsc4py_KSPSetFromOptions_Python;
 
-  /* "libpetsc4py.pyx":1466
+  /* "libpetsc4py.pyx":1469
  *     ops.setup          = KSPSetUp_Python
  *     ops.setfromoptions = KSPSetFromOptions_Python
  *     ops.view           = KSPView_Python             # <<<<<<<<<<<<<<
@@ -16297,7 +17658,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPCreate_Python(KSP __pyx_v_ksp) {
  */
   __pyx_v_ops->view = __pyx_f_11libpetsc4py_KSPView_Python;
 
-  /* "libpetsc4py.pyx":1467
+  /* "libpetsc4py.pyx":1470
  *     ops.setfromoptions = KSPSetFromOptions_Python
  *     ops.view           = KSPView_Python
  *     ops.solve          = KSPSolve_Python             # <<<<<<<<<<<<<<
@@ -16306,7 +17667,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPCreate_Python(KSP __pyx_v_ksp) {
  */
   __pyx_v_ops->solve = __pyx_f_11libpetsc4py_KSPSolve_Python;
 
-  /* "libpetsc4py.pyx":1468
+  /* "libpetsc4py.pyx":1471
  *     ops.view           = KSPView_Python
  *     ops.solve          = KSPSolve_Python
  *     ops.buildsolution  = KSPBuildSolution_Python             # <<<<<<<<<<<<<<
@@ -16315,7 +17676,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPCreate_Python(KSP __pyx_v_ksp) {
  */
   __pyx_v_ops->buildsolution = __pyx_f_11libpetsc4py_KSPBuildSolution_Python;
 
-  /* "libpetsc4py.pyx":1469
+  /* "libpetsc4py.pyx":1472
  *     ops.solve          = KSPSolve_Python
  *     ops.buildsolution  = KSPBuildSolution_Python
  *     ops.buildresidual  = KSPBuildResidual_Python             # <<<<<<<<<<<<<<
@@ -16324,28 +17685,28 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPCreate_Python(KSP __pyx_v_ksp) {
  */
   __pyx_v_ops->buildresidual = __pyx_f_11libpetsc4py_KSPBuildResidual_Python;
 
-  /* "libpetsc4py.pyx":1471
+  /* "libpetsc4py.pyx":1474
  *     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), ((char *)"KSPPythonSetType_C"), ((PetscVoidFunction)__pyx_f_11libpetsc4py_KSPPythonSetType_PYTHON))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 1471, __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 == ((int)-1))) __PYX_ERR(0, 1474, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1475
+  /* "libpetsc4py.pyx":1478
  *             <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_ERR(0, 1475, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1478, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_ctx = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "libpetsc4py.pyx":1476
+  /* "libpetsc4py.pyx":1479
  *     #
  *     cdef ctx = PyKSP(NULL)
  *     ksp.data = <void*> ctx             # <<<<<<<<<<<<<<
@@ -16354,7 +17715,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPCreate_Python(KSP __pyx_v_ksp) {
  */
   __pyx_v_ksp->data = ((void *)__pyx_v_ctx);
 
-  /* "libpetsc4py.pyx":1477
+  /* "libpetsc4py.pyx":1480
  *     cdef ctx = PyKSP(NULL)
  *     ksp.data = <void*> ctx
  *     Py_INCREF(<PyObject*>ksp.data)             # <<<<<<<<<<<<<<
@@ -16363,61 +17724,61 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPCreate_Python(KSP __pyx_v_ksp) {
  */
   Py_INCREF(((PyObject *)__pyx_v_ksp->data));
 
-  /* "libpetsc4py.pyx":1479
+  /* "libpetsc4py.pyx":1482
  *     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_ERR(0, 1479, __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 == ((int)-1))) __PYX_ERR(0, 1482, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1481
+  /* "libpetsc4py.pyx":1484
  *     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_ERR(0, 1481, __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 == ((int)-1))) __PYX_ERR(0, 1484, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1483
+  /* "libpetsc4py.pyx":1486
  *     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_ERR(0, 1483, __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 == ((int)-1))) __PYX_ERR(0, 1486, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1485
+  /* "libpetsc4py.pyx":1488
  *     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_ERR(0, 1485, __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 == ((int)-1))) __PYX_ERR(0, 1488, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1487
+  /* "libpetsc4py.pyx":1490
  *     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_ERR(0, 1487, __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 == ((int)-1))) __PYX_ERR(0, 1490, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1489
+  /* "libpetsc4py.pyx":1492
  *     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_ERR(0, 1489, __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 == ((int)-1))) __PYX_ERR(0, 1492, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1491
+  /* "libpetsc4py.pyx":1494
  *     CHKERR( KSPSetSupportedNorm(
  *             ksp, KSP_NORM_UNPRECONDITIONED, PC_SYMMETRIC, 1) )
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -16427,7 +17788,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPCreate_Python(KSP __pyx_v_ksp) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1455
+  /* "libpetsc4py.pyx":1458
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPCreate_Python(             # <<<<<<<<<<<<<<
@@ -16444,12 +17805,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPCreate_Python(KSP __pyx_v_ksp) {
   __Pyx_XDECREF(__pyx_v_ctx);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1493
+/* "libpetsc4py.pyx":1496
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPDestroy_Python(             # <<<<<<<<<<<<<<
@@ -16472,11 +17833,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPDestroy_Python(KSP __pyx_v_ksp) {
   PyObject *__pyx_t_10 = NULL;
   PyObject *__pyx_t_11 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("KSPDestroy_Python", 0);
 
-  /* "libpetsc4py.pyx":1497
+  /* "libpetsc4py.pyx":1500
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"KSPDestroy_Python")             # <<<<<<<<<<<<<<
@@ -16485,16 +17846,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPDestroy_Python(KSP __pyx_v_ksp) {
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPDestroy_Python"));
 
-  /* "libpetsc4py.pyx":1498
+  /* "libpetsc4py.pyx":1501
  *     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), ((char *)"KSPPythonSetType_C"), ((PetscVoidFunction)NULL))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1498, __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 == ((int)-1))) __PYX_ERR(0, 1501, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1502
+  /* "libpetsc4py.pyx":1505
  *             <PetscVoidFunction>NULL))
  *     #
  *     if not Py_IsInitialized(): return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -16507,7 +17868,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPDestroy_Python(KSP __pyx_v_ksp) {
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1503
+  /* "libpetsc4py.pyx":1506
  *     #
  *     if not Py_IsInitialized(): return FunctionEnd()
  *     try:             # <<<<<<<<<<<<<<
@@ -16516,7 +17877,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPDestroy_Python(KSP __pyx_v_ksp) {
  */
   /*try:*/ {
 
-    /* "libpetsc4py.pyx":1504
+    /* "libpetsc4py.pyx":1507
  *     if not Py_IsInitialized(): return FunctionEnd()
  *     try:
  *         addRef(ksp)             # <<<<<<<<<<<<<<
@@ -16525,17 +17886,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPDestroy_Python(KSP __pyx_v_ksp) {
  */
     __pyx_f_11libpetsc4py_addRef(__pyx_v_ksp);
 
-    /* "libpetsc4py.pyx":1505
+    /* "libpetsc4py.pyx":1508
  *     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_ERR(0, 1505, __pyx_L5_error)
+    __pyx_t_3 = KSPPythonSetContext(__pyx_v_ksp, NULL); if (unlikely(__pyx_t_3 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 1508, __pyx_L5_error)
   }
 
-  /* "libpetsc4py.pyx":1507
+  /* "libpetsc4py.pyx":1510
  *         KSPPythonSetContext(ksp, NULL)
  *     finally:
  *         delRef(ksp)             # <<<<<<<<<<<<<<
@@ -16546,7 +17907,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPDestroy_Python(KSP __pyx_v_ksp) {
     /*normal exit:*/{
       __pyx_f_11libpetsc4py_delRef(__pyx_v_ksp);
 
-      /* "libpetsc4py.pyx":1508
+      /* "libpetsc4py.pyx":1511
  *     finally:
  *         delRef(ksp)
  *         Py_DECREF(<PyObject*>ksp.data)             # <<<<<<<<<<<<<<
@@ -16555,7 +17916,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPDestroy_Python(KSP __pyx_v_ksp) {
  */
       Py_DECREF(((PyObject *)__pyx_v_ksp->data));
 
-      /* "libpetsc4py.pyx":1509
+      /* "libpetsc4py.pyx":1512
  *         delRef(ksp)
  *         Py_DECREF(<PyObject*>ksp.data)
  *         ksp.data = NULL             # <<<<<<<<<<<<<<
@@ -16581,7 +17942,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":1507
+        /* "libpetsc4py.pyx":1510
  *         KSPPythonSetContext(ksp, NULL)
  *     finally:
  *         delRef(ksp)             # <<<<<<<<<<<<<<
@@ -16590,7 +17951,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPDestroy_Python(KSP __pyx_v_ksp) {
  */
         __pyx_f_11libpetsc4py_delRef(__pyx_v_ksp);
 
-        /* "libpetsc4py.pyx":1508
+        /* "libpetsc4py.pyx":1511
  *     finally:
  *         delRef(ksp)
  *         Py_DECREF(<PyObject*>ksp.data)             # <<<<<<<<<<<<<<
@@ -16599,7 +17960,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPDestroy_Python(KSP __pyx_v_ksp) {
  */
         Py_DECREF(((PyObject *)__pyx_v_ksp->data));
 
-        /* "libpetsc4py.pyx":1509
+        /* "libpetsc4py.pyx":1512
  *         delRef(ksp)
  *         Py_DECREF(<PyObject*>ksp.data)
  *         ksp.data = NULL             # <<<<<<<<<<<<<<
@@ -16608,7 +17969,6 @@ 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);
@@ -16626,7 +17986,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPDestroy_Python(KSP __pyx_v_ksp) {
     __pyx_L6:;
   }
 
-  /* "libpetsc4py.pyx":1510
+  /* "libpetsc4py.pyx":1513
  *         Py_DECREF(<PyObject*>ksp.data)
  *         ksp.data = NULL
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -16636,7 +17996,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPDestroy_Python(KSP __pyx_v_ksp) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1493
+  /* "libpetsc4py.pyx":1496
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPDestroy_Python(             # <<<<<<<<<<<<<<
@@ -16651,12 +18011,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPDestroy_Python(KSP __pyx_v_ksp) {
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1512
+/* "libpetsc4py.pyx":1515
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPSetUp_Python(             # <<<<<<<<<<<<<<
@@ -16680,11 +18040,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetUp_Python(KSP __pyx_v_ksp) {
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("KSPSetUp_Python", 0);
 
-  /* "libpetsc4py.pyx":1516
+  /* "libpetsc4py.pyx":1519
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"KSPSetUp_Python")             # <<<<<<<<<<<<<<
@@ -16693,7 +18053,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetUp_Python(KSP __pyx_v_ksp) {
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPSetUp_Python"));
 
-  /* "libpetsc4py.pyx":1519
+  /* "libpetsc4py.pyx":1522
  *     #
  *     cdef char name[2048]
  *     cdef PetscBool found = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -16702,30 +18062,30 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetUp_Python(KSP __pyx_v_ksp) {
  */
   __pyx_v_found = PETSC_FALSE;
 
-  /* "libpetsc4py.pyx":1520
+  /* "libpetsc4py.pyx":1523
  *     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_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1520, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1523, __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":1521
+    /* "libpetsc4py.pyx":1524
  *     cdef PetscBool found = PETSC_FALSE
  *     if PyKSP(ksp).self is None:
  *         CHKERR( PetscOptionsGetString(NULL,             # <<<<<<<<<<<<<<
  *                 getPrefix(ksp), b"-ksp_python_type",
  *                 name,sizeof(name),&found) )
  */
-    __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)
+    __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 == ((int)-1))) __PYX_ERR(0, 1524, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1524
+    /* "libpetsc4py.pyx":1527
  *                 getPrefix(ksp), b"-ksp_python_type",
  *                 name,sizeof(name),&found) )
  *         if found and name[0]:             # <<<<<<<<<<<<<<
@@ -16742,17 +18102,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetUp_Python(KSP __pyx_v_ksp) {
     __pyx_L5_bool_binop_done:;
     if (__pyx_t_3) {
 
-      /* "libpetsc4py.pyx":1525
+      /* "libpetsc4py.pyx":1528
  *                 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_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)
+      __pyx_t_5 = __pyx_f_11libpetsc4py_KSPPythonSetType_PYTHON(__pyx_v_ksp, __pyx_v_name); if (unlikely(__pyx_t_5 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 1528, __pyx_L1_error)
+      __pyx_t_4 = __pyx_f_11libpetsc4py_CHKERR(__pyx_t_5); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 1528, __pyx_L1_error)
 
-      /* "libpetsc4py.pyx":1524
+      /* "libpetsc4py.pyx":1527
  *                 getPrefix(ksp), b"-ksp_python_type",
  *                 name,sizeof(name),&found) )
  *         if found and name[0]:             # <<<<<<<<<<<<<<
@@ -16761,7 +18121,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetUp_Python(KSP __pyx_v_ksp) {
  */
     }
 
-    /* "libpetsc4py.pyx":1520
+    /* "libpetsc4py.pyx":1523
  *     cdef char name[2048]
  *     cdef PetscBool found = PETSC_FALSE
  *     if PyKSP(ksp).self is None:             # <<<<<<<<<<<<<<
@@ -16770,21 +18130,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetUp_Python(KSP __pyx_v_ksp) {
  */
   }
 
-  /* "libpetsc4py.pyx":1526
+  /* "libpetsc4py.pyx":1529
  *         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_ERR(0, 1526, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1529, __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":1527
+    /* "libpetsc4py.pyx":1530
  *             CHKERR( KSPPythonSetType_PYTHON(ksp,name) )
  *     if PyKSP(ksp).self is None:
  *         return PetscSETERR(PETSC_ERR_USER,             # <<<<<<<<<<<<<<
@@ -16794,7 +18154,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetUp_Python(KSP __pyx_v_ksp) {
     __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
+    /* "libpetsc4py.pyx":1529
  *         if found and name[0]:
  *             CHKERR( KSPPythonSetType_PYTHON(ksp,name) )
  *     if PyKSP(ksp).self is None:             # <<<<<<<<<<<<<<
@@ -16803,22 +18163,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetUp_Python(KSP __pyx_v_ksp) {
  */
   }
 
-  /* "libpetsc4py.pyx":1533
+  /* "libpetsc4py.pyx":1536
  *             "-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_ERR(0, 1533, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1536, __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_ERR(0, 1533, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_setUp); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1536, __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":1534
+  /* "libpetsc4py.pyx":1537
  *     #
  *     cdef setUp = PyKSP(ksp).setUp
  *     if setUp is not None:             # <<<<<<<<<<<<<<
@@ -16829,18 +18189,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetUp_Python(KSP __pyx_v_ksp) {
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "libpetsc4py.pyx":1535
+    /* "libpetsc4py.pyx":1538
  *     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_ERR(0, 1535, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1538, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_v_setUp);
     __pyx_t_7 = __pyx_v_setUp; __pyx_t_8 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -16850,24 +18210,44 @@ 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_ERR(0, 1535, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1538, __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_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_ERR(0, 1535, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_6);
-      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_7)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_1};
+        __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1538, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+        __Pyx_GOTREF(__pyx_t_6);
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_1};
+        __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1538, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+        __Pyx_GOTREF(__pyx_t_6);
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1538, __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_ERR(0, 1538, __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;
 
-    /* "libpetsc4py.pyx":1534
+    /* "libpetsc4py.pyx":1537
  *     #
  *     cdef setUp = PyKSP(ksp).setUp
  *     if setUp is not None:             # <<<<<<<<<<<<<<
@@ -16876,7 +18256,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetUp_Python(KSP __pyx_v_ksp) {
  */
   }
 
-  /* "libpetsc4py.pyx":1536
+  /* "libpetsc4py.pyx":1539
  *     if setUp is not None:
  *         setUp(KSP_(ksp))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -16886,7 +18266,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetUp_Python(KSP __pyx_v_ksp) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1512
+  /* "libpetsc4py.pyx":1515
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPSetUp_Python(             # <<<<<<<<<<<<<<
@@ -16907,12 +18287,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetUp_Python(KSP __pyx_v_ksp) {
   __Pyx_XDECREF(__pyx_v_setUp);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1538
+/* "libpetsc4py.pyx":1541
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPReset_Python(             # <<<<<<<<<<<<<<
@@ -16933,11 +18313,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPReset_Python(KSP __pyx_v_ksp) {
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("KSPReset_Python", 0);
 
-  /* "libpetsc4py.pyx":1542
+  /* "libpetsc4py.pyx":1545
  *     ) \
  *     except IERR with gil:
  *     if getRef(ksp) == 0: return 0             # <<<<<<<<<<<<<<
@@ -16950,7 +18330,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPReset_Python(KSP __pyx_v_ksp) {
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1543
+  /* "libpetsc4py.pyx":1546
  *     except IERR with gil:
  *     if getRef(ksp) == 0: return 0
  *     FunctionBegin(b"KSPReset_Python")             # <<<<<<<<<<<<<<
@@ -16959,40 +18339,40 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPReset_Python(KSP __pyx_v_ksp) {
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPReset_Python"));
 
-  /* "libpetsc4py.pyx":1544
+  /* "libpetsc4py.pyx":1547
  *     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), ((char *)"@ksp.vec_work_sol"), NULL)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 1544, __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 == ((int)-1))) __PYX_ERR(0, 1547, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1545
+  /* "libpetsc4py.pyx":1548
  *     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), ((char *)"@ksp.vec_work_res"), NULL)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 1545, __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 == ((int)-1))) __PYX_ERR(0, 1548, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1546
+  /* "libpetsc4py.pyx":1549
  *     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_ERR(0, 1546, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1549, __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_ERR(0, 1546, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_reset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1549, __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":1547
+  /* "libpetsc4py.pyx":1550
  *     CHKERR( PetscObjectCompose(<PetscObject>ksp,b"@ksp.vec_work_res",NULL) )
  *     cdef reset = PyKSP(ksp).reset
  *     if reset is not None:             # <<<<<<<<<<<<<<
@@ -17003,18 +18383,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPReset_Python(KSP __pyx_v_ksp) {
   __pyx_t_5 = (__pyx_t_1 != 0);
   if (__pyx_t_5) {
 
-    /* "libpetsc4py.pyx":1548
+    /* "libpetsc4py.pyx":1551
  *     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_ERR(0, 1548, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1551, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_reset);
     __pyx_t_6 = __pyx_v_reset; __pyx_t_7 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_6))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
       __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
       if (likely(__pyx_t_7)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
@@ -17024,24 +18404,44 @@ 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_ERR(0, 1548, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1551, __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_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_ERR(0, 1548, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_4);
-      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_6)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_7, __pyx_t_3};
+        __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1551, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+        __Pyx_GOTREF(__pyx_t_4);
+        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_7, __pyx_t_3};
+        __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 1551, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+        __Pyx_GOTREF(__pyx_t_4);
+        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 1551, __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_ERR(0, 1551, __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;
 
-    /* "libpetsc4py.pyx":1547
+    /* "libpetsc4py.pyx":1550
  *     CHKERR( PetscObjectCompose(<PetscObject>ksp,b"@ksp.vec_work_res",NULL) )
  *     cdef reset = PyKSP(ksp).reset
  *     if reset is not None:             # <<<<<<<<<<<<<<
@@ -17050,7 +18450,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPReset_Python(KSP __pyx_v_ksp) {
  */
   }
 
-  /* "libpetsc4py.pyx":1549
+  /* "libpetsc4py.pyx":1552
  *     if reset is not None:
  *         reset(KSP_(ksp))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -17060,7 +18460,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPReset_Python(KSP __pyx_v_ksp) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1538
+  /* "libpetsc4py.pyx":1541
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPReset_Python(             # <<<<<<<<<<<<<<
@@ -17081,12 +18481,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPReset_Python(KSP __pyx_v_ksp) {
   __Pyx_XDECREF(__pyx_v_reset);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1551
+/* "libpetsc4py.pyx":1554
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPSetFromOptions_Python(             # <<<<<<<<<<<<<<
@@ -17113,11 +18513,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetFromOptions_Python(PetscOption
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("KSPSetFromOptions_Python", 0);
 
-  /* "libpetsc4py.pyx":1556
+  /* "libpetsc4py.pyx":1559
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"KSPSetFromOptions_Python")             # <<<<<<<<<<<<<<
@@ -17126,20 +18526,20 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetFromOptions_Python(PetscOption
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPSetFromOptions_Python"));
 
-  /* "libpetsc4py.pyx":1558
+  /* "libpetsc4py.pyx":1561
  *     FunctionBegin(b"KSPSetFromOptions_Python")
  *     #
  *     cdef char name[2048], *defval = PyKSP(ksp).getname()             # <<<<<<<<<<<<<<
  *     cdef PetscBool found = PETSC_FALSE
  *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1558, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1561, __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_ERR(0, 1558, __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 == ((char *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 1561, __pyx_L1_error)
   __pyx_v_defval = __pyx_t_2;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":1559
+  /* "libpetsc4py.pyx":1562
  *     #
  *     cdef char name[2048], *defval = PyKSP(ksp).getname()
  *     cdef PetscBool found = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -17148,7 +18548,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetFromOptions_Python(PetscOption
  */
   __pyx_v_found = PETSC_FALSE;
 
-  /* "libpetsc4py.pyx":1560
+  /* "libpetsc4py.pyx":1563
  *     cdef char name[2048], *defval = PyKSP(ksp).getname()
  *     cdef PetscBool found = PETSC_FALSE
  *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject             # <<<<<<<<<<<<<<
@@ -17157,16 +18557,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetFromOptions_Python(PetscOption
  */
   PetscOptionsObject = __pyx_v_PetscOptionsObject;
 
-  /* "libpetsc4py.pyx":1561
+  /* "libpetsc4py.pyx":1564
  *     cdef PetscBool found = PETSC_FALSE
  *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject
  *     CHKERR( PetscOptionsString(             # <<<<<<<<<<<<<<
  *             b"-ksp_python_type",b"Python [package.]module[.{class|function}]",
  *             b"KSPPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(0, 1564, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1563
+  /* "libpetsc4py.pyx":1566
  *     CHKERR( PetscOptionsString(
  *             b"-ksp_python_type",b"Python [package.]module[.{class|function}]",
  *             b"KSPPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;             # <<<<<<<<<<<<<<
@@ -17175,7 +18575,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetFromOptions_Python(PetscOption
  */
   ((void)PetscOptionsObject);
 
-  /* "libpetsc4py.pyx":1564
+  /* "libpetsc4py.pyx":1567
  *             b"-ksp_python_type",b"Python [package.]module[.{class|function}]",
  *             b"KSPPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
  *     if found and name[0]:             # <<<<<<<<<<<<<<
@@ -17192,17 +18592,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetFromOptions_Python(PetscOption
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":1565
+    /* "libpetsc4py.pyx":1568
  *             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_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)
+    __pyx_t_6 = __pyx_f_11libpetsc4py_KSPPythonSetType_PYTHON(__pyx_v_ksp, __pyx_v_name); if (unlikely(__pyx_t_6 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 1568, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_11libpetsc4py_CHKERR(__pyx_t_6); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 1568, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1564
+    /* "libpetsc4py.pyx":1567
  *             b"-ksp_python_type",b"Python [package.]module[.{class|function}]",
  *             b"KSPPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
  *     if found and name[0]:             # <<<<<<<<<<<<<<
@@ -17211,22 +18611,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetFromOptions_Python(PetscOption
  */
   }
 
-  /* "libpetsc4py.pyx":1567
+  /* "libpetsc4py.pyx":1570
  *         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_ERR(0, 1567, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1570, __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_ERR(0, 1567, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_setFromOptions); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1570, __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":1568
+  /* "libpetsc4py.pyx":1571
  *     #
  *     cdef setFromOptions = PyKSP(ksp).setFromOptions
  *     if setFromOptions is not None:             # <<<<<<<<<<<<<<
@@ -17237,18 +18637,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetFromOptions_Python(PetscOption
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (__pyx_t_5) {
 
-    /* "libpetsc4py.pyx":1569
+    /* "libpetsc4py.pyx":1572
  *     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_ERR(0, 1569, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1572, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_v_setFromOptions);
     __pyx_t_8 = __pyx_v_setFromOptions; __pyx_t_9 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_8))) {
+    if (CYTHON_UNPACK_METHODS && 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);
@@ -17258,24 +18658,44 @@ 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_ERR(0, 1569, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1572, __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_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_ERR(0, 1569, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_7);
-      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_8)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_t_1};
+        __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1572, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+        __Pyx_GOTREF(__pyx_t_7);
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_t_1};
+        __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1572, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+        __Pyx_GOTREF(__pyx_t_7);
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1572, __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_ERR(0, 1572, __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;
 
-    /* "libpetsc4py.pyx":1568
+    /* "libpetsc4py.pyx":1571
  *     #
  *     cdef setFromOptions = PyKSP(ksp).setFromOptions
  *     if setFromOptions is not None:             # <<<<<<<<<<<<<<
@@ -17284,7 +18704,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetFromOptions_Python(PetscOption
  */
   }
 
-  /* "libpetsc4py.pyx":1570
+  /* "libpetsc4py.pyx":1573
  *     if setFromOptions is not None:
  *         setFromOptions(KSP_(ksp))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -17294,7 +18714,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetFromOptions_Python(PetscOption
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1551
+  /* "libpetsc4py.pyx":1554
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPSetFromOptions_Python(             # <<<<<<<<<<<<<<
@@ -17315,12 +18735,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSetFromOptions_Python(PetscOption
   __Pyx_XDECREF(__pyx_v_setFromOptions);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1572
+/* "libpetsc4py.pyx":1575
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPView_Python(             # <<<<<<<<<<<<<<
@@ -17340,14 +18760,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPView_Python(KSP __pyx_v_ksp, Pets
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
-  Py_ssize_t __pyx_t_9;
-  PyObject *__pyx_t_10 = NULL;
+  PyObject *__pyx_t_9 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("KSPView_Python", 0);
 
-  /* "libpetsc4py.pyx":1577
+  /* "libpetsc4py.pyx":1580
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"KSPView_Python")             # <<<<<<<<<<<<<<
@@ -17356,34 +18775,34 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPView_Python(KSP __pyx_v_ksp, Pets
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPView_Python"));
 
-  /* "libpetsc4py.pyx":1578
+  /* "libpetsc4py.pyx":1581
  *     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_ERR(0, 1578, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1581, __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_ERR(0, 1578, __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 == ((int)-1))) __PYX_ERR(0, 1581, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":1579
+  /* "libpetsc4py.pyx":1582
  *     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_ERR(0, 1579, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1582, __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_ERR(0, 1579, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_view); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1582, __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":1580
+  /* "libpetsc4py.pyx":1583
  *     viewcontext(PyKSP(ksp), vwr)
  *     cdef view = PyKSP(ksp).view
  *     if view is not None:             # <<<<<<<<<<<<<<
@@ -17394,48 +18813,70 @@ 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":1581
+    /* "libpetsc4py.pyx":1584
  *     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_ERR(0, 1581, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1584, __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_ERR(0, 1581, __pyx_L1_error)
+    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Viewer_(__pyx_v_vwr)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1584, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_INCREF(__pyx_v_view);
     __pyx_t_7 = __pyx_v_view; __pyx_t_8 = NULL;
-    __pyx_t_9 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+    __pyx_t_2 = 0;
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
         __Pyx_INCREF(__pyx_t_8);
         __Pyx_INCREF(function);
         __Pyx_DECREF_SET(__pyx_t_7, function);
-        __pyx_t_9 = 1;
+        __pyx_t_2 = 1;
       }
     }
-    __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;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_7)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_t_1, __pyx_t_6};
+      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_2, 2+__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1584, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_t_1, __pyx_t_6};
+      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_2, 2+__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1584, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_9 = PyTuple_New(2+__pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1584, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_9);
+      if (__pyx_t_8) {
+        __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+__pyx_t_2, __pyx_t_1);
+      __Pyx_GIVEREF(__pyx_t_6);
+      PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_2, __pyx_t_6);
+      __pyx_t_1 = 0;
+      __pyx_t_6 = 0;
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_9, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1584, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     }
-    __Pyx_GIVEREF(__pyx_t_1);
-    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_1);
-    __Pyx_GIVEREF(__pyx_t_6);
-    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_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;
 
-    /* "libpetsc4py.pyx":1580
+    /* "libpetsc4py.pyx":1583
  *     viewcontext(PyKSP(ksp), vwr)
  *     cdef view = PyKSP(ksp).view
  *     if view is not None:             # <<<<<<<<<<<<<<
@@ -17444,7 +18885,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPView_Python(KSP __pyx_v_ksp, Pets
  */
   }
 
-  /* "libpetsc4py.pyx":1582
+  /* "libpetsc4py.pyx":1585
  *     if view is not None:
  *         view(KSP_(ksp), Viewer_(vwr))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -17454,7 +18895,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPView_Python(KSP __pyx_v_ksp, Pets
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1572
+  /* "libpetsc4py.pyx":1575
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPView_Python(             # <<<<<<<<<<<<<<
@@ -17469,19 +18910,19 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPView_Python(KSP __pyx_v_ksp, Pets
   __Pyx_XDECREF(__pyx_t_6);
   __Pyx_XDECREF(__pyx_t_7);
   __Pyx_XDECREF(__pyx_t_8);
-  __Pyx_XDECREF(__pyx_t_10);
+  __Pyx_XDECREF(__pyx_t_9);
   __Pyx_AddTraceback("libpetsc4py.KSPView_Python", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = PETSC_ERR_PYTHON;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_view);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1584
+/* "libpetsc4py.pyx":1587
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPBuildSolution_Python(             # <<<<<<<<<<<<<<
@@ -17501,15 +18942,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildSolution_Python(KSP __pyx_v_
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
-  Py_ssize_t __pyx_t_8;
+  int __pyx_t_8;
   PyObject *__pyx_t_9 = NULL;
-  int __pyx_t_10;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("KSPBuildSolution_Python", 0);
 
-  /* "libpetsc4py.pyx":1590
+  /* "libpetsc4py.pyx":1593
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"KSPBuildSolution_Python")             # <<<<<<<<<<<<<<
@@ -17518,7 +18958,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildSolution_Python(KSP __pyx_v_
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPBuildSolution_Python"));
 
-  /* "libpetsc4py.pyx":1591
+  /* "libpetsc4py.pyx":1594
  *     except IERR with gil:
  *     FunctionBegin(b"KSPBuildSolution_Python")
  *     cdef PetscVec x = v             # <<<<<<<<<<<<<<
@@ -17527,22 +18967,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildSolution_Python(KSP __pyx_v_
  */
   __pyx_v_x = __pyx_v_v;
 
-  /* "libpetsc4py.pyx":1592
+  /* "libpetsc4py.pyx":1595
  *     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_ERR(0, 1592, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1595, __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_ERR(0, 1592, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_buildSolution); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1595, __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":1593
+  /* "libpetsc4py.pyx":1596
  *     cdef PetscVec x = v
  *     cdef buildSolution = PyKSP(ksp).buildSolution
  *     if buildSolution is not None:             # <<<<<<<<<<<<<<
@@ -17553,7 +18993,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildSolution_Python(KSP __pyx_v_
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":1594
+    /* "libpetsc4py.pyx":1597
  *     cdef buildSolution = PyKSP(ksp).buildSolution
  *     if buildSolution is not None:
  *         if x == NULL: pass # XXX             # <<<<<<<<<<<<<<
@@ -17564,21 +19004,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildSolution_Python(KSP __pyx_v_
     if (__pyx_t_4) {
     }
 
-    /* "libpetsc4py.pyx":1595
+    /* "libpetsc4py.pyx":1598
  *     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_ERR(0, 1595, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1598, __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_ERR(0, 1595, __pyx_L1_error)
+    __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1598, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_INCREF(__pyx_v_buildSolution);
     __pyx_t_6 = __pyx_v_buildSolution; __pyx_t_7 = NULL;
     __pyx_t_8 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_6))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
       __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
       if (likely(__pyx_t_7)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
@@ -17588,24 +19028,46 @@ 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_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;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_6)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_1, __pyx_t_5};
+      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1598, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_t_1, __pyx_t_5};
+      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1598, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1598, __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;
+      }
+      __Pyx_GIVEREF(__pyx_t_1);
+      PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_1);
+      __Pyx_GIVEREF(__pyx_t_5);
+      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_ERR(0, 1598, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     }
-    __Pyx_GIVEREF(__pyx_t_1);
-    PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_t_1);
-    __Pyx_GIVEREF(__pyx_t_5);
-    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_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":1596
+    /* "libpetsc4py.pyx":1599
  *         if x == NULL: pass # XXX
  *         buildSolution(KSP_(ksp), Vec_(x))
  *         if V != NULL: V[0] = x             # <<<<<<<<<<<<<<
@@ -17617,7 +19079,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildSolution_Python(KSP __pyx_v_
       (__pyx_v_V[0]) = __pyx_v_x;
     }
 
-    /* "libpetsc4py.pyx":1593
+    /* "libpetsc4py.pyx":1596
  *     cdef PetscVec x = v
  *     cdef buildSolution = PyKSP(ksp).buildSolution
  *     if buildSolution is not None:             # <<<<<<<<<<<<<<
@@ -17627,7 +19089,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildSolution_Python(KSP __pyx_v_
     goto __pyx_L3;
   }
 
-  /* "libpetsc4py.pyx":1598
+  /* "libpetsc4py.pyx":1601
  *         if V != NULL: V[0] = x
  *     else:
  *         CHKERR( KSPBuildSolutionDefault(ksp, v, V) )             # <<<<<<<<<<<<<<
@@ -17635,11 +19097,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildSolution_Python(KSP __pyx_v_
  * 
  */
   /*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_t_8 = __pyx_f_11libpetsc4py_CHKERR(KSPBuildSolutionDefault(__pyx_v_ksp, __pyx_v_v, __pyx_v_V)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 1601, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "libpetsc4py.pyx":1599
+  /* "libpetsc4py.pyx":1602
  *     else:
  *         CHKERR( KSPBuildSolutionDefault(ksp, v, V) )
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -17649,7 +19111,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildSolution_Python(KSP __pyx_v_
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1584
+  /* "libpetsc4py.pyx":1587
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPBuildSolution_Python(             # <<<<<<<<<<<<<<
@@ -17671,12 +19133,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildSolution_Python(KSP __pyx_v_
   __Pyx_XDECREF(__pyx_v_buildSolution);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1601
+/* "libpetsc4py.pyx":1604
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPBuildResidual_Python(             # <<<<<<<<<<<<<<
@@ -17696,15 +19158,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildResidual_Python(KSP __pyx_v_
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
-  Py_ssize_t __pyx_t_9;
+  int __pyx_t_9;
   PyObject *__pyx_t_10 = NULL;
-  int __pyx_t_11;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("KSPBuildResidual_Python", 0);
 
-  /* "libpetsc4py.pyx":1608
+  /* "libpetsc4py.pyx":1611
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"KSPBuildResidual_Python")             # <<<<<<<<<<<<<<
@@ -17713,22 +19174,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildResidual_Python(KSP __pyx_v_
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPBuildResidual_Python"));
 
-  /* "libpetsc4py.pyx":1609
+  /* "libpetsc4py.pyx":1612
  *     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_ERR(0, 1609, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1612, __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_ERR(0, 1609, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_buildResidual); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1612, __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":1610
+  /* "libpetsc4py.pyx":1613
  *     FunctionBegin(b"KSPBuildResidual_Python")
  *     cdef buildResidual = PyKSP(ksp).buildResidual
  *     if buildResidual is not None:             # <<<<<<<<<<<<<<
@@ -17739,23 +19200,23 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildResidual_Python(KSP __pyx_v_
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":1611
+    /* "libpetsc4py.pyx":1614
  *     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_ERR(0, 1611, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1614, __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_ERR(0, 1611, __pyx_L1_error)
+    __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_t)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1614, __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_ERR(0, 1611, __pyx_L1_error)
+    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_v)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1614, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_INCREF(__pyx_v_buildResidual);
     __pyx_t_7 = __pyx_v_buildResidual; __pyx_t_8 = NULL;
     __pyx_t_9 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -17765,27 +19226,51 @@ 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_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;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_7)) {
+      PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_1, __pyx_t_5, __pyx_t_6};
+      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1614, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __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;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+      PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_1, __pyx_t_5, __pyx_t_6};
+      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1614, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __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;
+    } else
+    #endif
+    {
+      __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1614, __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;
+      }
+      __Pyx_GIVEREF(__pyx_t_1);
+      PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_1);
+      __Pyx_GIVEREF(__pyx_t_5);
+      PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_5);
+      __Pyx_GIVEREF(__pyx_t_6);
+      PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_t_6);
+      __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_ERR(0, 1614, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     }
-    __Pyx_GIVEREF(__pyx_t_1);
-    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_1);
-    __Pyx_GIVEREF(__pyx_t_5);
-    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_5);
-    __Pyx_GIVEREF(__pyx_t_6);
-    PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_t_6);
-    __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_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":1612
+    /* "libpetsc4py.pyx":1615
  *     if buildResidual is not None:
  *         buildResidual(KSP_(ksp), Vec_(t), Vec_(v))
  *         if V != NULL: V[0] = v             # <<<<<<<<<<<<<<
@@ -17797,7 +19282,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildResidual_Python(KSP __pyx_v_
       (__pyx_v_V[0]) = __pyx_v_v;
     }
 
-    /* "libpetsc4py.pyx":1610
+    /* "libpetsc4py.pyx":1613
  *     FunctionBegin(b"KSPBuildResidual_Python")
  *     cdef buildResidual = PyKSP(ksp).buildResidual
  *     if buildResidual is not None:             # <<<<<<<<<<<<<<
@@ -17807,7 +19292,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildResidual_Python(KSP __pyx_v_
     goto __pyx_L3;
   }
 
-  /* "libpetsc4py.pyx":1614
+  /* "libpetsc4py.pyx":1617
  *         if V != NULL: V[0] = v
  *     else:
  *         CHKERR( KSPBuildResidualDefault(ksp, t, v, V) )             # <<<<<<<<<<<<<<
@@ -17815,11 +19300,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildResidual_Python(KSP __pyx_v_
  * 
  */
   /*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_t_9 = __pyx_f_11libpetsc4py_CHKERR(KSPBuildResidualDefault(__pyx_v_ksp, __pyx_v_t, __pyx_v_v, __pyx_v_V)); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 1617, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "libpetsc4py.pyx":1615
+  /* "libpetsc4py.pyx":1618
  *     else:
  *         CHKERR( KSPBuildResidualDefault(ksp, t, v, V) )
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -17829,7 +19314,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildResidual_Python(KSP __pyx_v_
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1601
+  /* "libpetsc4py.pyx":1604
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPBuildResidual_Python(             # <<<<<<<<<<<<<<
@@ -17852,12 +19337,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPBuildResidual_Python(KSP __pyx_v_
   __Pyx_XDECREF(__pyx_v_buildResidual);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1617
+/* "libpetsc4py.pyx":1620
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPSolve_Python(             # <<<<<<<<<<<<<<
@@ -17880,15 +19365,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python(KSP __pyx_v_ksp) {
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = NULL;
-  Py_ssize_t __pyx_t_10;
-  PyObject *__pyx_t_11 = NULL;
-  PetscErrorCode __pyx_t_12;
+  PyObject *__pyx_t_10 = NULL;
+  PetscErrorCode __pyx_t_11;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("KSPSolve_Python", 0);
 
-  /* "libpetsc4py.pyx":1621
+  /* "libpetsc4py.pyx":1624
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"KSPSolve_Python")             # <<<<<<<<<<<<<<
@@ -17897,7 +19381,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python(KSP __pyx_v_ksp) {
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPSolve_Python"));
 
-  /* "libpetsc4py.pyx":1622
+  /* "libpetsc4py.pyx":1625
  *     except IERR with gil:
  *     FunctionBegin(b"KSPSolve_Python")
  *     cdef PetscVec B = NULL, X = NULL             # <<<<<<<<<<<<<<
@@ -17907,25 +19391,25 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python(KSP __pyx_v_ksp) {
   __pyx_v_B = NULL;
   __pyx_v_X = NULL;
 
-  /* "libpetsc4py.pyx":1623
+  /* "libpetsc4py.pyx":1626
  *     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_ERR(0, 1623, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPGetRhs(__pyx_v_ksp, (&__pyx_v_B))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1626, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1624
+  /* "libpetsc4py.pyx":1627
  *     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_ERR(0, 1624, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPGetSolution(__pyx_v_ksp, (&__pyx_v_X))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1627, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1626
+  /* "libpetsc4py.pyx":1629
  *     CHKERR( KSPGetSolution(ksp,&X) )
  *     #
  *     cdef solve = None             # <<<<<<<<<<<<<<
@@ -17935,7 +19419,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python(KSP __pyx_v_ksp) {
   __Pyx_INCREF(Py_None);
   __pyx_v_solve = Py_None;
 
-  /* "libpetsc4py.pyx":1627
+  /* "libpetsc4py.pyx":1630
  *     #
  *     cdef solve = None
  *     if ksp.transpose_solve:             # <<<<<<<<<<<<<<
@@ -17944,22 +19428,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python(KSP __pyx_v_ksp) {
  */
   if (__pyx_v_ksp->transpose_solve) {
 
-    /* "libpetsc4py.pyx":1628
+    /* "libpetsc4py.pyx":1631
  *     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_ERR(0, 1628, __pyx_L1_error)
+    __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1631, __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_ERR(0, 1628, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_solveTranspose); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1631, __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
+    /* "libpetsc4py.pyx":1630
  *     #
  *     cdef solve = None
  *     if ksp.transpose_solve:             # <<<<<<<<<<<<<<
@@ -17969,7 +19453,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python(KSP __pyx_v_ksp) {
     goto __pyx_L3;
   }
 
-  /* "libpetsc4py.pyx":1630
+  /* "libpetsc4py.pyx":1633
  *         solve = PyKSP(ksp).solveTranspose
  *     else:
  *         solve = PyKSP(ksp).solve             # <<<<<<<<<<<<<<
@@ -17977,9 +19461,9 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python(KSP __pyx_v_ksp) {
  *         solve(KSP_(ksp),Vec_(B),Vec_(X))
  */
   /*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_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1633, __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_ERR(0, 1630, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_solve); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1633, __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);
@@ -17987,7 +19471,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python(KSP __pyx_v_ksp) {
   }
   __pyx_L3:;
 
-  /* "libpetsc4py.pyx":1631
+  /* "libpetsc4py.pyx":1634
  *     else:
  *         solve = PyKSP(ksp).solve
  *     if solve is not None:             # <<<<<<<<<<<<<<
@@ -17998,53 +19482,77 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python(KSP __pyx_v_ksp) {
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (__pyx_t_5) {
 
-    /* "libpetsc4py.pyx":1632
+    /* "libpetsc4py.pyx":1635
  *         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_ERR(0, 1632, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1635, __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_ERR(0, 1632, __pyx_L1_error)
+    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_B)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1635, __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, 1632, __pyx_L1_error)
+    __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_X)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1635, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_INCREF(__pyx_v_solve);
     __pyx_t_8 = __pyx_v_solve; __pyx_t_9 = NULL;
-    __pyx_t_10 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_8))) {
+    __pyx_t_1 = 0;
+    if (CYTHON_UNPACK_METHODS && 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_8, function);
-        __pyx_t_10 = 1;
+        __pyx_t_1 = 1;
+      }
+    }
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_8)) {
+      PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_t_3, __pyx_t_6, __pyx_t_7};
+      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_1, 3+__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1635, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
+      PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_t_3, __pyx_t_6, __pyx_t_7};
+      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_1, 3+__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1635, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_10 = PyTuple_New(3+__pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1635, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_10);
+      if (__pyx_t_9) {
+        __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_9); __pyx_t_9 = NULL;
       }
+      __Pyx_GIVEREF(__pyx_t_3);
+      PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_1, __pyx_t_3);
+      __Pyx_GIVEREF(__pyx_t_6);
+      PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_1, __pyx_t_6);
+      __Pyx_GIVEREF(__pyx_t_7);
+      PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_1, __pyx_t_7);
+      __pyx_t_3 = 0;
+      __pyx_t_6 = 0;
+      __pyx_t_7 = 0;
+      __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_10, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1635, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     }
-    __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;
-    }
-    __Pyx_GIVEREF(__pyx_t_3);
-    PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_t_3);
-    __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_11, 2+__pyx_t_10, __pyx_t_7);
-    __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_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
+    /* "libpetsc4py.pyx":1634
  *     else:
  *         solve = PyKSP(ksp).solve
  *     if solve is not None:             # <<<<<<<<<<<<<<
@@ -18054,7 +19562,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python(KSP __pyx_v_ksp) {
     goto __pyx_L4;
   }
 
-  /* "libpetsc4py.pyx":1634
+  /* "libpetsc4py.pyx":1637
  *         solve(KSP_(ksp),Vec_(B),Vec_(X))
  *     else:
  *         KSPSolve_Python_default(ksp,B,X)             # <<<<<<<<<<<<<<
@@ -18062,11 +19570,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python(KSP __pyx_v_ksp) {
  * 
  */
   /*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_t_11 = __pyx_f_11libpetsc4py_KSPSolve_Python_default(__pyx_v_ksp, __pyx_v_B, __pyx_v_X); if (unlikely(__pyx_t_11 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 1637, __pyx_L1_error)
   }
   __pyx_L4:;
 
-  /* "libpetsc4py.pyx":1635
+  /* "libpetsc4py.pyx":1638
  *     else:
  *         KSPSolve_Python_default(ksp,B,X)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -18076,7 +19584,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python(KSP __pyx_v_ksp) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1617
+  /* "libpetsc4py.pyx":1620
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPSolve_Python(             # <<<<<<<<<<<<<<
@@ -18092,19 +19600,19 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python(KSP __pyx_v_ksp) {
   __Pyx_XDECREF(__pyx_t_7);
   __Pyx_XDECREF(__pyx_t_8);
   __Pyx_XDECREF(__pyx_t_9);
-  __Pyx_XDECREF(__pyx_t_11);
+  __Pyx_XDECREF(__pyx_t_10);
   __Pyx_AddTraceback("libpetsc4py.KSPSolve_Python", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = PETSC_ERR_PYTHON;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_solve);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1637
+/* "libpetsc4py.pyx":1640
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPSolve_Python_default(             # <<<<<<<<<<<<<<
@@ -18125,11 +19633,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python_default(KSP __pyx_v_
   PetscInt __pyx_t_3;
   PetscErrorCode __pyx_t_4;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("KSPSolve_Python_default", 0);
 
-  /* "libpetsc4py.pyx":1643
+  /* "libpetsc4py.pyx":1646
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"KSPSolve_Python_default")             # <<<<<<<<<<<<<<
@@ -18138,7 +19646,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python_default(KSP __pyx_v_
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPSolve_Python_default"));
 
-  /* "libpetsc4py.pyx":1645
+  /* "libpetsc4py.pyx":1648
  *     FunctionBegin(b"KSPSolve_Python_default")
  *     #
  *     cdef PetscVec t = NULL             # <<<<<<<<<<<<<<
@@ -18147,16 +19655,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python_default(KSP __pyx_v_
  */
   __pyx_v_t = NULL;
 
-  /* "libpetsc4py.pyx":1646
+  /* "libpetsc4py.pyx":1649
  *     #
  *     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), ((char *)"@ksp.vec_work_sol"), ((PetscObject *)(&__pyx_v_t)))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1646, __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 == ((int)-1))) __PYX_ERR(0, 1649, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1650
+  /* "libpetsc4py.pyx":1653
  *              b"@ksp.vec_work_sol",
  *              <PetscObject*>&t) )
  *     if t == NULL:             # <<<<<<<<<<<<<<
@@ -18166,25 +19674,25 @@ 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":1651
+    /* "libpetsc4py.pyx":1654
  *              <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_ERR(0, 1651, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecDuplicate(__pyx_v_X, (&__pyx_v_t))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1654, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1652
+    /* "libpetsc4py.pyx":1655
  *     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), ((char *)"@ksp.vec_work_sol"), ((PetscObject)__pyx_v_t))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1652, __pyx_L1_error)
+    __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 == ((int)-1))) __PYX_ERR(0, 1655, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1650
+    /* "libpetsc4py.pyx":1653
  *              b"@ksp.vec_work_sol",
  *              <PetscObject*>&t) )
  *     if t == NULL:             # <<<<<<<<<<<<<<
@@ -18193,7 +19701,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python_default(KSP __pyx_v_
  */
   }
 
-  /* "libpetsc4py.pyx":1656
+  /* "libpetsc4py.pyx":1659
  *                  b"@ksp.vec_work_sol",
  *                  <PetscObject>t) )
  *     cdef PetscVec v = NULL             # <<<<<<<<<<<<<<
@@ -18202,16 +19710,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python_default(KSP __pyx_v_
  */
   __pyx_v_v = NULL;
 
-  /* "libpetsc4py.pyx":1657
+  /* "libpetsc4py.pyx":1660
  *                  <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), ((char *)"@ksp.vec_work_res"), ((PetscObject *)(&__pyx_v_v)))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1657, __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 == ((int)-1))) __PYX_ERR(0, 1660, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1661
+  /* "libpetsc4py.pyx":1664
  *              b"@ksp.vec_work_res",
  *              <PetscObject*>&v) )
  *     if v == NULL:             # <<<<<<<<<<<<<<
@@ -18221,25 +19729,25 @@ 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":1662
+    /* "libpetsc4py.pyx":1665
  *              <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_ERR(0, 1662, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecDuplicate(__pyx_v_B, (&__pyx_v_v))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1665, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1663
+    /* "libpetsc4py.pyx":1666
  *     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), ((char *)"@ksp.vec_work_res"), ((PetscObject)__pyx_v_v))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1663, __pyx_L1_error)
+    __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 == ((int)-1))) __PYX_ERR(0, 1666, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1661
+    /* "libpetsc4py.pyx":1664
  *              b"@ksp.vec_work_res",
  *              <PetscObject*>&v) )
  *     if v == NULL:             # <<<<<<<<<<<<<<
@@ -18248,7 +19756,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python_default(KSP __pyx_v_
  */
   }
 
-  /* "libpetsc4py.pyx":1668
+  /* "libpetsc4py.pyx":1671
  *                  <PetscObject>v) )
  *     #
  *     cdef PetscInt its = 0             # <<<<<<<<<<<<<<
@@ -18257,7 +19765,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python_default(KSP __pyx_v_
  */
   __pyx_v_its = 0;
 
-  /* "libpetsc4py.pyx":1669
+  /* "libpetsc4py.pyx":1672
  *     #
  *     cdef PetscInt its = 0
  *     cdef PetscVec R = NULL             # <<<<<<<<<<<<<<
@@ -18266,7 +19774,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python_default(KSP __pyx_v_
  */
   __pyx_v_R = NULL;
 
-  /* "libpetsc4py.pyx":1670
+  /* "libpetsc4py.pyx":1673
  *     cdef PetscInt its = 0
  *     cdef PetscVec R = NULL
  *     cdef PetscReal rnorm = 0             # <<<<<<<<<<<<<<
@@ -18275,7 +19783,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python_default(KSP __pyx_v_
  */
   __pyx_v_rnorm = 0.0;
 
-  /* "libpetsc4py.pyx":1672
+  /* "libpetsc4py.pyx":1675
  *     cdef PetscReal rnorm = 0
  *     #
  *     ksp.iter   = 0             # <<<<<<<<<<<<<<
@@ -18284,7 +19792,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python_default(KSP __pyx_v_
  */
   __pyx_v_ksp->its = 0;
 
-  /* "libpetsc4py.pyx":1673
+  /* "libpetsc4py.pyx":1676
  *     #
  *     ksp.iter   = 0
  *     ksp.reason = KSP_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
@@ -18293,52 +19801,52 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python_default(KSP __pyx_v_
  */
   __pyx_v_ksp->reason = KSP_CONVERGED_ITERATING;
 
-  /* "libpetsc4py.pyx":1674
+  /* "libpetsc4py.pyx":1677
  *     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_ERR(0, 1674, __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 == ((int)-1))) __PYX_ERR(0, 1677, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1675
+  /* "libpetsc4py.pyx":1678
  *     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_ERR(0, 1675, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecNorm(__pyx_v_R, NORM_2, (&__pyx_v_rnorm))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1678, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1677
+  /* "libpetsc4py.pyx":1680
  *     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_ERR(0, 1677, __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 == ((int)-1))) __PYX_ERR(0, 1680, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1678
+  /* "libpetsc4py.pyx":1681
  *     #
  *     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_ERR(0, 1678, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPLogHistory(__pyx_v_ksp, __pyx_v_ksp->rnorm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1681, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1679
+  /* "libpetsc4py.pyx":1682
  *     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_ERR(0, 1679, __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 == ((int)-1))) __PYX_ERR(0, 1682, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1680
+  /* "libpetsc4py.pyx":1683
  *     CHKERR( KSPLogHistory(ksp,ksp.norm) )
  *     CHKERR( KSPMonitor(ksp,ksp.iter,ksp.norm) )
  *     for its from 0 <= its < ksp.max_its:             # <<<<<<<<<<<<<<
@@ -18348,7 +19856,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":1681
+    /* "libpetsc4py.pyx":1684
  *     CHKERR( KSPMonitor(ksp,ksp.iter,ksp.norm) )
  *     for its from 0 <= its < ksp.max_its:
  *         if ksp.reason: break             # <<<<<<<<<<<<<<
@@ -18359,43 +19867,43 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python_default(KSP __pyx_v_
       goto __pyx_L6_break;
     }
 
-    /* "libpetsc4py.pyx":1682
+    /* "libpetsc4py.pyx":1685
  *     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_ERR(0, 1682, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_11libpetsc4py_KSPPreStep_Python(__pyx_v_ksp); if (unlikely(__pyx_t_4 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 1685, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1684
+    /* "libpetsc4py.pyx":1687
  *         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_ERR(0, 1684, __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 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 1687, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1685
+    /* "libpetsc4py.pyx":1688
  *         #
  *         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_ERR(0, 1685, __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 == ((int)-1))) __PYX_ERR(0, 1688, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1686
+    /* "libpetsc4py.pyx":1689
  *         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_ERR(0, 1686, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecNorm(__pyx_v_R, NORM_2, (&__pyx_v_rnorm))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1689, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1687
+    /* "libpetsc4py.pyx":1690
  *         CHKERR( KSPBuildResidual(ksp,t,v,&R) )
  *         CHKERR( VecNorm(R,NORM_2,&rnorm)     )
  *         ksp.iter += 1             # <<<<<<<<<<<<<<
@@ -18404,55 +19912,102 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python_default(KSP __pyx_v_
  */
     __pyx_v_ksp->its = (__pyx_v_ksp->its + 1);
 
-    /* "libpetsc4py.pyx":1689
+    /* "libpetsc4py.pyx":1692
  *         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_ERR(0, 1689, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_11libpetsc4py_KSPPostStep_Python(__pyx_v_ksp); if (unlikely(__pyx_t_4 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 1692, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1690
+    /* "libpetsc4py.pyx":1693
  *         #
  *         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_ERR(0, 1690, __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 == ((int)-1))) __PYX_ERR(0, 1693, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1691
+    /* "libpetsc4py.pyx":1694
  *         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_ERR(0, 1691, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPLogHistory(__pyx_v_ksp, __pyx_v_ksp->rnorm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1694, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1692
+    /* "libpetsc4py.pyx":1695
  *         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
- *     #
+ *     if ksp.iter == ksp.max_its:
  */
-    __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_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPMonitor(__pyx_v_ksp, __pyx_v_ksp->its, __pyx_v_ksp->rnorm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1695, __pyx_L1_error)
   }
   __pyx_L6_break:;
 
-  /* "libpetsc4py.pyx":1693
+  /* "libpetsc4py.pyx":1696
  *         CHKERR( KSPLogHistory(ksp,ksp.norm) )
  *         CHKERR( KSPMonitor(ksp,ksp.iter,ksp.norm) )
  *     <void>its # silent unused warning             # <<<<<<<<<<<<<<
+ *     if ksp.iter == ksp.max_its:
+ *         if ksp.reason == KSP_CONVERGED_ITERATING:
+ */
+  ((void)__pyx_v_its);
+
+  /* "libpetsc4py.pyx":1697
+ *         CHKERR( KSPMonitor(ksp,ksp.iter,ksp.norm) )
+ *     <void>its # silent unused warning
+ *     if ksp.iter == ksp.max_its:             # <<<<<<<<<<<<<<
+ *         if ksp.reason == KSP_CONVERGED_ITERATING:
+ *             ksp.reason = KSP_DIVERGED_ITS
+ */
+  __pyx_t_2 = ((__pyx_v_ksp->its == __pyx_v_ksp->max_it) != 0);
+  if (__pyx_t_2) {
+
+    /* "libpetsc4py.pyx":1698
+ *     <void>its # silent unused warning
+ *     if ksp.iter == ksp.max_its:
+ *         if ksp.reason == KSP_CONVERGED_ITERATING:             # <<<<<<<<<<<<<<
+ *             ksp.reason = KSP_DIVERGED_ITS
+ *     #
+ */
+    __pyx_t_2 = ((__pyx_v_ksp->reason == KSP_CONVERGED_ITERATING) != 0);
+    if (__pyx_t_2) {
+
+      /* "libpetsc4py.pyx":1699
+ *     if ksp.iter == ksp.max_its:
+ *         if ksp.reason == KSP_CONVERGED_ITERATING:
+ *             ksp.reason = KSP_DIVERGED_ITS             # <<<<<<<<<<<<<<
  *     #
  *     return FunctionEnd()
  */
-  ((void)__pyx_v_its);
+      __pyx_v_ksp->reason = KSP_DIVERGED_ITS;
 
-  /* "libpetsc4py.pyx":1695
+      /* "libpetsc4py.pyx":1698
  *     <void>its # silent unused warning
+ *     if ksp.iter == ksp.max_its:
+ *         if ksp.reason == KSP_CONVERGED_ITERATING:             # <<<<<<<<<<<<<<
+ *             ksp.reason = KSP_DIVERGED_ITS
+ *     #
+ */
+    }
+
+    /* "libpetsc4py.pyx":1697
+ *         CHKERR( KSPMonitor(ksp,ksp.iter,ksp.norm) )
+ *     <void>its # silent unused warning
+ *     if ksp.iter == ksp.max_its:             # <<<<<<<<<<<<<<
+ *         if ksp.reason == KSP_CONVERGED_ITERATING:
+ *             ksp.reason = KSP_DIVERGED_ITS
+ */
+  }
+
+  /* "libpetsc4py.pyx":1701
+ *             ksp.reason = KSP_DIVERGED_ITS
  *     #
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
  * 
@@ -18461,7 +20016,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python_default(KSP __pyx_v_
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1637
+  /* "libpetsc4py.pyx":1640
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPSolve_Python_default(             # <<<<<<<<<<<<<<
@@ -18476,12 +20031,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPSolve_Python_default(KSP __pyx_v_
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1697
+/* "libpetsc4py.pyx":1703
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPPreStep_Python(             # <<<<<<<<<<<<<<
@@ -18501,11 +20056,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPreStep_Python(KSP __pyx_v_ksp) {
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("KSPPreStep_Python", 0);
 
-  /* "libpetsc4py.pyx":1701
+  /* "libpetsc4py.pyx":1707
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"KSPPreStep_Python")             # <<<<<<<<<<<<<<
@@ -18514,22 +20069,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPreStep_Python(KSP __pyx_v_ksp) {
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPPreStep_Python"));
 
-  /* "libpetsc4py.pyx":1702
+  /* "libpetsc4py.pyx":1708
  *     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_ERR(0, 1702, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1708, __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_ERR(0, 1702, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_preStep); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1708, __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":1703
+  /* "libpetsc4py.pyx":1709
  *     FunctionBegin(b"KSPPreStep_Python")
  *     cdef preStep = PyKSP(ksp).preStep
  *     if preStep is not None:             # <<<<<<<<<<<<<<
@@ -18540,18 +20095,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPreStep_Python(KSP __pyx_v_ksp) {
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":1704
+    /* "libpetsc4py.pyx":1710
  *     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_ERR(0, 1704, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1710, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_v_preStep);
     __pyx_t_5 = __pyx_v_preStep; __pyx_t_6 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
       __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
       if (likely(__pyx_t_6)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -18561,24 +20116,44 @@ 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_ERR(0, 1704, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1710, __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_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_ERR(0, 1704, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_1};
+        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1710, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_1};
+        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1710, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1710, __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_ERR(0, 1710, __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":1703
+    /* "libpetsc4py.pyx":1709
  *     FunctionBegin(b"KSPPreStep_Python")
  *     cdef preStep = PyKSP(ksp).preStep
  *     if preStep is not None:             # <<<<<<<<<<<<<<
@@ -18587,7 +20162,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPreStep_Python(KSP __pyx_v_ksp) {
  */
   }
 
-  /* "libpetsc4py.pyx":1705
+  /* "libpetsc4py.pyx":1711
  *     if preStep is not None:
  *         preStep(KSP_(ksp))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -18597,7 +20172,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPreStep_Python(KSP __pyx_v_ksp) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1697
+  /* "libpetsc4py.pyx":1703
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPPreStep_Python(             # <<<<<<<<<<<<<<
@@ -18618,12 +20193,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPreStep_Python(KSP __pyx_v_ksp) {
   __Pyx_XDECREF(__pyx_v_preStep);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1707
+/* "libpetsc4py.pyx":1713
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPPostStep_Python(             # <<<<<<<<<<<<<<
@@ -18643,11 +20218,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPostStep_Python(KSP __pyx_v_ksp)
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("KSPPostStep_Python", 0);
 
-  /* "libpetsc4py.pyx":1711
+  /* "libpetsc4py.pyx":1717
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"KSPPostStep_Python")             # <<<<<<<<<<<<<<
@@ -18656,22 +20231,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPostStep_Python(KSP __pyx_v_ksp)
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPPostStep_Python"));
 
-  /* "libpetsc4py.pyx":1712
+  /* "libpetsc4py.pyx":1718
  *     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_ERR(0, 1712, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1718, __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_ERR(0, 1712, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_postStep); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1718, __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":1713
+  /* "libpetsc4py.pyx":1719
  *     FunctionBegin(b"KSPPostStep_Python")
  *     cdef postStep = PyKSP(ksp).postStep
  *     if postStep is not None:             # <<<<<<<<<<<<<<
@@ -18682,18 +20257,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPostStep_Python(KSP __pyx_v_ksp)
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":1714
+    /* "libpetsc4py.pyx":1720
  *     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_ERR(0, 1714, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1720, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_v_postStep);
     __pyx_t_5 = __pyx_v_postStep; __pyx_t_6 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
       __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
       if (likely(__pyx_t_6)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -18703,24 +20278,44 @@ 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_ERR(0, 1714, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1720, __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_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_ERR(0, 1714, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_1};
+        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1720, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_1};
+        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1720, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1720, __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_ERR(0, 1720, __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":1713
+    /* "libpetsc4py.pyx":1719
  *     FunctionBegin(b"KSPPostStep_Python")
  *     cdef postStep = PyKSP(ksp).postStep
  *     if postStep is not None:             # <<<<<<<<<<<<<<
@@ -18729,7 +20324,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPostStep_Python(KSP __pyx_v_ksp)
  */
   }
 
-  /* "libpetsc4py.pyx":1715
+  /* "libpetsc4py.pyx":1721
  *     if postStep is not None:
  *         postStep(KSP_(ksp))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -18739,7 +20334,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPostStep_Python(KSP __pyx_v_ksp)
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1707
+  /* "libpetsc4py.pyx":1713
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPPostStep_Python(             # <<<<<<<<<<<<<<
@@ -18760,12 +20355,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPPostStep_Python(KSP __pyx_v_ksp)
   __Pyx_XDECREF(__pyx_v_postStep);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1717
+/* "libpetsc4py.pyx":1723
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPStep_Python(             # <<<<<<<<<<<<<<
@@ -18785,14 +20380,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPStep_Python(KSP __pyx_v_ksp, Vec
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
-  Py_ssize_t __pyx_t_9;
+  int __pyx_t_9;
   PyObject *__pyx_t_10 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("KSPStep_Python", 0);
 
-  /* "libpetsc4py.pyx":1723
+  /* "libpetsc4py.pyx":1729
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"KSPStep_Python")             # <<<<<<<<<<<<<<
@@ -18801,7 +20396,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPStep_Python(KSP __pyx_v_ksp, Vec
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"KSPStep_Python"));
 
-  /* "libpetsc4py.pyx":1724
+  /* "libpetsc4py.pyx":1730
  *     except IERR with gil:
  *     FunctionBegin(b"KSPStep_Python")
  *     cdef step = None             # <<<<<<<<<<<<<<
@@ -18811,7 +20406,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPStep_Python(KSP __pyx_v_ksp, Vec
   __Pyx_INCREF(Py_None);
   __pyx_v_step = Py_None;
 
-  /* "libpetsc4py.pyx":1725
+  /* "libpetsc4py.pyx":1731
  *     FunctionBegin(b"KSPStep_Python")
  *     cdef step = None
  *     if ksp.transpose_solve:             # <<<<<<<<<<<<<<
@@ -18820,22 +20415,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPStep_Python(KSP __pyx_v_ksp, Vec
  */
   if (__pyx_v_ksp->transpose_solve) {
 
-    /* "libpetsc4py.pyx":1726
+    /* "libpetsc4py.pyx":1732
  *     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_ERR(0, 1726, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1732, __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_ERR(0, 1726, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_stepTranspose); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1732, __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":1727
+    /* "libpetsc4py.pyx":1733
  *     if ksp.transpose_solve:
  *         step = PyKSP(ksp).stepTranspose
  *         if step is None: return UNSUPPORTED(b"stepTranspose")             # <<<<<<<<<<<<<<
@@ -18849,7 +20444,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPStep_Python(KSP __pyx_v_ksp, Vec
       goto __pyx_L0;
     }
 
-    /* "libpetsc4py.pyx":1725
+    /* "libpetsc4py.pyx":1731
  *     FunctionBegin(b"KSPStep_Python")
  *     cdef step = None
  *     if ksp.transpose_solve:             # <<<<<<<<<<<<<<
@@ -18859,7 +20454,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPStep_Python(KSP __pyx_v_ksp, Vec
     goto __pyx_L3;
   }
 
-  /* "libpetsc4py.pyx":1729
+  /* "libpetsc4py.pyx":1735
  *         if step is None: return UNSUPPORTED(b"stepTranspose")
  *     else:
  *         step = PyKSP(ksp).step             # <<<<<<<<<<<<<<
@@ -18867,15 +20462,15 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPStep_Python(KSP __pyx_v_ksp, Vec
  *     step(KSP_(ksp),Vec_(B),Vec_(X))
  */
   /*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_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyKSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1735, __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_ERR(0, 1729, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_step); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1735, __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":1730
+    /* "libpetsc4py.pyx":1736
  *     else:
  *         step = PyKSP(ksp).step
  *         if step is None: return UNSUPPORTED(b"step")             # <<<<<<<<<<<<<<
@@ -18891,23 +20486,23 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPStep_Python(KSP __pyx_v_ksp, Vec
   }
   __pyx_L3:;
 
-  /* "libpetsc4py.pyx":1731
+  /* "libpetsc4py.pyx":1737
  *         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_ERR(0, 1731, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_KSP_(__pyx_v_ksp)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1737, __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_ERR(0, 1731, __pyx_L1_error)
+  __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_B)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 1737, __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_ERR(0, 1731, __pyx_L1_error)
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_X)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1737, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(__pyx_v_step);
   __pyx_t_7 = __pyx_v_step; __pyx_t_8 = NULL;
   __pyx_t_9 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
     __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
     if (likely(__pyx_t_8)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -18917,27 +20512,51 @@ 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_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;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_7)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_2, __pyx_t_5, __pyx_t_6};
+    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1737, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_2, __pyx_t_5, __pyx_t_6};
+    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1737, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  } else
+  #endif
+  {
+    __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1737, __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;
+    }
+    __Pyx_GIVEREF(__pyx_t_2);
+    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_2);
+    __Pyx_GIVEREF(__pyx_t_5);
+    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_5);
+    __Pyx_GIVEREF(__pyx_t_6);
+    PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_t_6);
+    __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_ERR(0, 1737, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
   }
-  __Pyx_GIVEREF(__pyx_t_2);
-  PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_2);
-  __Pyx_GIVEREF(__pyx_t_5);
-  PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_5);
-  __Pyx_GIVEREF(__pyx_t_6);
-  PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_t_6);
-  __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_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":1732
+  /* "libpetsc4py.pyx":1738
  *         if step is None: return UNSUPPORTED(b"step")
  *     step(KSP_(ksp),Vec_(B),Vec_(X))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -18947,7 +20566,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPStep_Python(KSP __pyx_v_ksp, Vec
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1717
+  /* "libpetsc4py.pyx":1723
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode KSPStep_Python(             # <<<<<<<<<<<<<<
@@ -18970,12 +20589,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_KSPStep_Python(KSP __pyx_v_ksp, Vec
   __Pyx_XDECREF(__pyx_v_step);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1783
+/* "libpetsc4py.pyx":1793
  * @cython.internal
  * cdef class _PySNES(_PyObj): pass
  * cdef inline _PySNES PySNES(PetscSNES snes):             # <<<<<<<<<<<<<<
@@ -18991,7 +20610,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PySNES *__pyx_f_11libpetsc4
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("PySNES", 0);
 
-  /* "libpetsc4py.pyx":1784
+  /* "libpetsc4py.pyx":1794
  * cdef class _PySNES(_PyObj): pass
  * cdef inline _PySNES PySNES(PetscSNES snes):
  *     if snes != NULL and snes.data != NULL:             # <<<<<<<<<<<<<<
@@ -19009,7 +20628,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PySNES *__pyx_f_11libpetsc4
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "libpetsc4py.pyx":1785
+    /* "libpetsc4py.pyx":1795
  * cdef inline _PySNES PySNES(PetscSNES snes):
  *     if snes != NULL and snes.data != NULL:
  *         return <_PySNES>snes.data             # <<<<<<<<<<<<<<
@@ -19021,7 +20640,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PySNES *__pyx_f_11libpetsc4
     __pyx_r = ((struct __pyx_obj_11libpetsc4py__PySNES *)__pyx_v_snes->data);
     goto __pyx_L0;
 
-    /* "libpetsc4py.pyx":1784
+    /* "libpetsc4py.pyx":1794
  * cdef class _PySNES(_PyObj): pass
  * cdef inline _PySNES PySNES(PetscSNES snes):
  *     if snes != NULL and snes.data != NULL:             # <<<<<<<<<<<<<<
@@ -19030,7 +20649,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PySNES *__pyx_f_11libpetsc4
  */
   }
 
-  /* "libpetsc4py.pyx":1787
+  /* "libpetsc4py.pyx":1797
  *         return <_PySNES>snes.data
  *     else:
  *         return _PySNES.__new__(_PySNES)             # <<<<<<<<<<<<<<
@@ -19039,15 +20658,15 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PySNES *__pyx_f_11libpetsc4
  */
   /*else*/ {
     __Pyx_XDECREF(((PyObject *)__pyx_r));
-    __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_t_3 = __pyx_tp_new_11libpetsc4py__PySNES(((PyTypeObject *)__pyx_ptype_11libpetsc4py__PySNES), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1797, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11libpetsc4py__PySNES)))) __PYX_ERR(0, 1787, __pyx_L1_error)
+    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11libpetsc4py__PySNES)))) __PYX_ERR(0, 1797, __pyx_L1_error)
     __pyx_r = ((struct __pyx_obj_11libpetsc4py__PySNES *)__pyx_t_3);
     __pyx_t_3 = 0;
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1783
+  /* "libpetsc4py.pyx":1793
  * @cython.internal
  * cdef class _PySNES(_PyObj): pass
  * cdef inline _PySNES PySNES(PetscSNES snes):             # <<<<<<<<<<<<<<
@@ -19066,7 +20685,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PySNES *__pyx_f_11libpetsc4
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1789
+/* "libpetsc4py.pyx":1799
  *         return _PySNES.__new__(_PySNES)
  * 
  * cdef public PetscErrorCode SNESPythonGetContext(PetscSNES snes, void **ctx) \             # <<<<<<<<<<<<<<
@@ -19081,7 +20700,7 @@ PetscErrorCode SNESPythonGetContext(SNES __pyx_v_snes, void **__pyx_v_ctx) {
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("SNESPythonGetContext", 0);
 
-  /* "libpetsc4py.pyx":1791
+  /* "libpetsc4py.pyx":1801
  * cdef public PetscErrorCode SNESPythonGetContext(PetscSNES snes, void **ctx) \
  *     except IERR:
  *     FunctionBegin(b"SNESPythonGetContext ")             # <<<<<<<<<<<<<<
@@ -19090,19 +20709,19 @@ PetscErrorCode SNESPythonGetContext(SNES __pyx_v_snes, void **__pyx_v_ctx) {
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"SNESPythonGetContext "));
 
-  /* "libpetsc4py.pyx":1792
+  /* "libpetsc4py.pyx":1802
  *     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_ERR(0, 1792, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1802, __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_ERR(0, 1792, __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 == ((int)-1))) __PYX_ERR(0, 1802, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":1793
+  /* "libpetsc4py.pyx":1803
  *     FunctionBegin(b"SNESPythonGetContext ")
  *     PySNES(snes).getcontext(ctx)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -19112,7 +20731,7 @@ PetscErrorCode SNESPythonGetContext(SNES __pyx_v_snes, void **__pyx_v_ctx) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1789
+  /* "libpetsc4py.pyx":1799
  *         return _PySNES.__new__(_PySNES)
  * 
  * cdef public PetscErrorCode SNESPythonGetContext(PetscSNES snes, void **ctx) \             # <<<<<<<<<<<<<<
@@ -19130,7 +20749,7 @@ PetscErrorCode SNESPythonGetContext(SNES __pyx_v_snes, void **__pyx_v_ctx) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1795
+/* "libpetsc4py.pyx":1805
  *     return FunctionEnd()
  * 
  * cdef public PetscErrorCode SNESPythonSetContext(PetscSNES snes, void *ctx) \             # <<<<<<<<<<<<<<
@@ -19146,7 +20765,7 @@ PetscErrorCode SNESPythonSetContext(SNES __pyx_v_snes, void *__pyx_v_ctx) {
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("SNESPythonSetContext", 0);
 
-  /* "libpetsc4py.pyx":1797
+  /* "libpetsc4py.pyx":1807
  * cdef public PetscErrorCode SNESPythonSetContext(PetscSNES snes, void *ctx) \
  *     except IERR:
  *     FunctionBegin(b"SNESPythonSetContext ")             # <<<<<<<<<<<<<<
@@ -19155,22 +20774,22 @@ PetscErrorCode SNESPythonSetContext(SNES __pyx_v_snes, void *__pyx_v_ctx) {
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"SNESPythonSetContext "));
 
-  /* "libpetsc4py.pyx":1798
+  /* "libpetsc4py.pyx":1808
  *     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_ERR(0, 1798, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1808, __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_ERR(0, 1798, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1808, __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_ERR(0, 1798, __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 == ((int)-1))) __PYX_ERR(0, 1808, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1799
+  /* "libpetsc4py.pyx":1809
  *     FunctionBegin(b"SNESPythonSetContext ")
  *     PySNES(snes).setcontext(ctx, SNES_(snes))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -19180,7 +20799,7 @@ PetscErrorCode SNESPythonSetContext(SNES __pyx_v_snes, void *__pyx_v_ctx) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1795
+  /* "libpetsc4py.pyx":1805
  *     return FunctionEnd()
  * 
  * cdef public PetscErrorCode SNESPythonSetContext(PetscSNES snes, void *ctx) \             # <<<<<<<<<<<<<<
@@ -19199,7 +20818,7 @@ PetscErrorCode SNESPythonSetContext(SNES __pyx_v_snes, void *__pyx_v_ctx) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1801
+/* "libpetsc4py.pyx":1811
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESPythonSetType_PYTHON(PetscSNES snes, char name[]) \             # <<<<<<<<<<<<<<
@@ -19216,11 +20835,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPythonSetType_PYTHON(SNES __pyx_
   PetscErrorCode __pyx_t_3;
   int __pyx_t_4;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("SNESPythonSetType_PYTHON", 0);
 
-  /* "libpetsc4py.pyx":1803
+  /* "libpetsc4py.pyx":1813
  * cdef PetscErrorCode SNESPythonSetType_PYTHON(PetscSNES snes, char name[]) \
  *     except IERR with gil:
  *     FunctionBegin(b"SNESPythonSetType_PYTHON")             # <<<<<<<<<<<<<<
@@ -19229,7 +20848,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPythonSetType_PYTHON(SNES __pyx_
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"SNESPythonSetType_PYTHON"));
 
-  /* "libpetsc4py.pyx":1804
+  /* "libpetsc4py.pyx":1814
  *     except IERR with gil:
  *     FunctionBegin(b"SNESPythonSetType_PYTHON")
  *     if name == NULL: return FunctionEnd() # XXX             # <<<<<<<<<<<<<<
@@ -19242,40 +20861,40 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPythonSetType_PYTHON(SNES __pyx_
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1805
+  /* "libpetsc4py.pyx":1815
  *     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_ERR(0, 1805, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_11libpetsc4py_createcontext(__pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1815, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_ctx = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1806
+  /* "libpetsc4py.pyx":1816
  *     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_ERR(0, 1806, __pyx_L1_error)
+  __pyx_t_3 = SNESPythonSetContext(__pyx_v_snes, ((void *)__pyx_v_ctx)); if (unlikely(__pyx_t_3 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 1816, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1807
+  /* "libpetsc4py.pyx":1817
  *     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_ERR(0, 1807, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1817, __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_ERR(0, 1807, __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 == ((int)-1))) __PYX_ERR(0, 1817, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":1808
+  /* "libpetsc4py.pyx":1818
  *     SNESPythonSetContext(snes, <void*>ctx)
  *     PySNES(snes).setname(name)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -19285,7 +20904,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPythonSetType_PYTHON(SNES __pyx_
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1801
+  /* "libpetsc4py.pyx":1811
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESPythonSetType_PYTHON(PetscSNES snes, char name[]) \             # <<<<<<<<<<<<<<
@@ -19302,12 +20921,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPythonSetType_PYTHON(SNES __pyx_
   __Pyx_XDECREF(__pyx_v_ctx);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1810
+/* "libpetsc4py.pyx":1820
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESCreate_Python(             # <<<<<<<<<<<<<<
@@ -19324,11 +20943,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESCreate_Python(SNES __pyx_v_snes)
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("SNESCreate_Python", 0);
 
-  /* "libpetsc4py.pyx":1814
+  /* "libpetsc4py.pyx":1824
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"SNESCreate_Python")             # <<<<<<<<<<<<<<
@@ -19337,7 +20956,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESCreate_Python(SNES __pyx_v_snes)
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"SNESCreate_Python"));
 
-  /* "libpetsc4py.pyx":1816
+  /* "libpetsc4py.pyx":1826
  *     FunctionBegin(b"SNESCreate_Python")
  *     #
  *     cdef SNESOps ops   = snes.ops             # <<<<<<<<<<<<<<
@@ -19347,7 +20966,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":1817
+  /* "libpetsc4py.pyx":1827
  *     #
  *     cdef SNESOps ops   = snes.ops
  *     ops.reset          = SNESReset_Python             # <<<<<<<<<<<<<<
@@ -19356,7 +20975,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESCreate_Python(SNES __pyx_v_snes)
  */
   __pyx_v_ops->reset = __pyx_f_11libpetsc4py_SNESReset_Python;
 
-  /* "libpetsc4py.pyx":1818
+  /* "libpetsc4py.pyx":1828
  *     cdef SNESOps ops   = snes.ops
  *     ops.reset          = SNESReset_Python
  *     ops.destroy        = SNESDestroy_Python             # <<<<<<<<<<<<<<
@@ -19365,7 +20984,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESCreate_Python(SNES __pyx_v_snes)
  */
   __pyx_v_ops->destroy = __pyx_f_11libpetsc4py_SNESDestroy_Python;
 
-  /* "libpetsc4py.pyx":1819
+  /* "libpetsc4py.pyx":1829
  *     ops.reset          = SNESReset_Python
  *     ops.destroy        = SNESDestroy_Python
  *     ops.setup          = SNESSetUp_Python             # <<<<<<<<<<<<<<
@@ -19374,7 +20993,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESCreate_Python(SNES __pyx_v_snes)
  */
   __pyx_v_ops->setup = __pyx_f_11libpetsc4py_SNESSetUp_Python;
 
-  /* "libpetsc4py.pyx":1820
+  /* "libpetsc4py.pyx":1830
  *     ops.destroy        = SNESDestroy_Python
  *     ops.setup          = SNESSetUp_Python
  *     ops.setfromoptions = SNESSetFromOptions_Python             # <<<<<<<<<<<<<<
@@ -19383,7 +21002,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESCreate_Python(SNES __pyx_v_snes)
  */
   __pyx_v_ops->setfromoptions = __pyx_f_11libpetsc4py_SNESSetFromOptions_Python;
 
-  /* "libpetsc4py.pyx":1821
+  /* "libpetsc4py.pyx":1831
  *     ops.setup          = SNESSetUp_Python
  *     ops.setfromoptions = SNESSetFromOptions_Python
  *     ops.view           = SNESView_Python             # <<<<<<<<<<<<<<
@@ -19392,7 +21011,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESCreate_Python(SNES __pyx_v_snes)
  */
   __pyx_v_ops->view = __pyx_f_11libpetsc4py_SNESView_Python;
 
-  /* "libpetsc4py.pyx":1822
+  /* "libpetsc4py.pyx":1832
  *     ops.setfromoptions = SNESSetFromOptions_Python
  *     ops.view           = SNESView_Python
  *     ops.solve          = SNESSolve_Python             # <<<<<<<<<<<<<<
@@ -19401,28 +21020,28 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESCreate_Python(SNES __pyx_v_snes)
  */
   __pyx_v_ops->solve = __pyx_f_11libpetsc4py_SNESSolve_Python;
 
-  /* "libpetsc4py.pyx":1824
+  /* "libpetsc4py.pyx":1834
  *     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), ((char *)"SNESPythonSetType_C"), ((PetscVoidFunction)__pyx_f_11libpetsc4py_SNESPythonSetType_PYTHON))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 1824, __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 == ((int)-1))) __PYX_ERR(0, 1834, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1828
+  /* "libpetsc4py.pyx":1838
  *             <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_ERR(0, 1828, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1838, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_ctx = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "libpetsc4py.pyx":1829
+  /* "libpetsc4py.pyx":1839
  *     #
  *     cdef ctx = PySNES(NULL)
  *     snes.data = <void*> ctx             # <<<<<<<<<<<<<<
@@ -19431,7 +21050,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESCreate_Python(SNES __pyx_v_snes)
  */
   __pyx_v_snes->data = ((void *)__pyx_v_ctx);
 
-  /* "libpetsc4py.pyx":1830
+  /* "libpetsc4py.pyx":1840
  *     cdef ctx = PySNES(NULL)
  *     snes.data = <void*> ctx
  *     Py_INCREF(<PyObject*>snes.data)             # <<<<<<<<<<<<<<
@@ -19440,7 +21059,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESCreate_Python(SNES __pyx_v_snes)
  */
   Py_INCREF(((PyObject *)__pyx_v_snes->data));
 
-  /* "libpetsc4py.pyx":1831
+  /* "libpetsc4py.pyx":1841
  *     snes.data = <void*> ctx
  *     Py_INCREF(<PyObject*>snes.data)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -19450,7 +21069,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESCreate_Python(SNES __pyx_v_snes)
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1810
+  /* "libpetsc4py.pyx":1820
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESCreate_Python(             # <<<<<<<<<<<<<<
@@ -19467,12 +21086,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESCreate_Python(SNES __pyx_v_snes)
   __Pyx_XDECREF(__pyx_v_ctx);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1833
+/* "libpetsc4py.pyx":1843
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESDestroy_Python(             # <<<<<<<<<<<<<<
@@ -19495,11 +21114,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESDestroy_Python(SNES __pyx_v_snes
   PyObject *__pyx_t_10 = NULL;
   PyObject *__pyx_t_11 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("SNESDestroy_Python", 0);
 
-  /* "libpetsc4py.pyx":1837
+  /* "libpetsc4py.pyx":1847
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"SNESDestroy_Python")             # <<<<<<<<<<<<<<
@@ -19508,16 +21127,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESDestroy_Python(SNES __pyx_v_snes
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"SNESDestroy_Python"));
 
-  /* "libpetsc4py.pyx":1838
+  /* "libpetsc4py.pyx":1848
  *     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), ((char *)"SNESPythonSetType_C"), ((PetscVoidFunction)NULL))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 1838, __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 == ((int)-1))) __PYX_ERR(0, 1848, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1842
+  /* "libpetsc4py.pyx":1852
  *             <PetscVoidFunction>NULL) )
  *     #
  *     if not Py_IsInitialized(): return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -19530,7 +21149,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESDestroy_Python(SNES __pyx_v_snes
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1843
+  /* "libpetsc4py.pyx":1853
  *     #
  *     if not Py_IsInitialized(): return FunctionEnd()
  *     try:             # <<<<<<<<<<<<<<
@@ -19539,7 +21158,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESDestroy_Python(SNES __pyx_v_snes
  */
   /*try:*/ {
 
-    /* "libpetsc4py.pyx":1844
+    /* "libpetsc4py.pyx":1854
  *     if not Py_IsInitialized(): return FunctionEnd()
  *     try:
  *         addRef(snes)             # <<<<<<<<<<<<<<
@@ -19548,17 +21167,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESDestroy_Python(SNES __pyx_v_snes
  */
     __pyx_f_11libpetsc4py_addRef(__pyx_v_snes);
 
-    /* "libpetsc4py.pyx":1845
+    /* "libpetsc4py.pyx":1855
  *     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_ERR(0, 1845, __pyx_L5_error)
+    __pyx_t_3 = SNESPythonSetContext(__pyx_v_snes, NULL); if (unlikely(__pyx_t_3 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 1855, __pyx_L5_error)
   }
 
-  /* "libpetsc4py.pyx":1847
+  /* "libpetsc4py.pyx":1857
  *         SNESPythonSetContext(snes, NULL)
  *     finally:
  *         delRef(snes)             # <<<<<<<<<<<<<<
@@ -19569,7 +21188,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESDestroy_Python(SNES __pyx_v_snes
     /*normal exit:*/{
       __pyx_f_11libpetsc4py_delRef(__pyx_v_snes);
 
-      /* "libpetsc4py.pyx":1848
+      /* "libpetsc4py.pyx":1858
  *     finally:
  *         delRef(snes)
  *         Py_DECREF(<PyObject*>snes.data)             # <<<<<<<<<<<<<<
@@ -19578,7 +21197,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESDestroy_Python(SNES __pyx_v_snes
  */
       Py_DECREF(((PyObject *)__pyx_v_snes->data));
 
-      /* "libpetsc4py.pyx":1849
+      /* "libpetsc4py.pyx":1859
  *         delRef(snes)
  *         Py_DECREF(<PyObject*>snes.data)
  *         snes.data = NULL             # <<<<<<<<<<<<<<
@@ -19604,7 +21223,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":1847
+        /* "libpetsc4py.pyx":1857
  *         SNESPythonSetContext(snes, NULL)
  *     finally:
  *         delRef(snes)             # <<<<<<<<<<<<<<
@@ -19613,7 +21232,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESDestroy_Python(SNES __pyx_v_snes
  */
         __pyx_f_11libpetsc4py_delRef(__pyx_v_snes);
 
-        /* "libpetsc4py.pyx":1848
+        /* "libpetsc4py.pyx":1858
  *     finally:
  *         delRef(snes)
  *         Py_DECREF(<PyObject*>snes.data)             # <<<<<<<<<<<<<<
@@ -19622,7 +21241,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESDestroy_Python(SNES __pyx_v_snes
  */
         Py_DECREF(((PyObject *)__pyx_v_snes->data));
 
-        /* "libpetsc4py.pyx":1849
+        /* "libpetsc4py.pyx":1859
  *         delRef(snes)
  *         Py_DECREF(<PyObject*>snes.data)
  *         snes.data = NULL             # <<<<<<<<<<<<<<
@@ -19631,7 +21250,6 @@ 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);
@@ -19649,7 +21267,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESDestroy_Python(SNES __pyx_v_snes
     __pyx_L6:;
   }
 
-  /* "libpetsc4py.pyx":1850
+  /* "libpetsc4py.pyx":1860
  *         Py_DECREF(<PyObject*>snes.data)
  *         snes.data = NULL
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -19659,7 +21277,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESDestroy_Python(SNES __pyx_v_snes
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1833
+  /* "libpetsc4py.pyx":1843
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESDestroy_Python(             # <<<<<<<<<<<<<<
@@ -19674,12 +21292,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESDestroy_Python(SNES __pyx_v_snes
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1852
+/* "libpetsc4py.pyx":1862
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESSetUp_Python(             # <<<<<<<<<<<<<<
@@ -19703,11 +21321,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetUp_Python(SNES __pyx_v_snes)
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("SNESSetUp_Python", 0);
 
-  /* "libpetsc4py.pyx":1856
+  /* "libpetsc4py.pyx":1866
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"SNESSetUp_Python")             # <<<<<<<<<<<<<<
@@ -19716,7 +21334,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetUp_Python(SNES __pyx_v_snes)
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"SNESSetUp_Python"));
 
-  /* "libpetsc4py.pyx":1861
+  /* "libpetsc4py.pyx":1871
  *     #
  *     cdef char name[2048]
  *     cdef PetscBool found = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -19725,30 +21343,30 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetUp_Python(SNES __pyx_v_snes)
  */
   __pyx_v_found = PETSC_FALSE;
 
-  /* "libpetsc4py.pyx":1862
+  /* "libpetsc4py.pyx":1872
  *     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_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1862, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1872, __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":1863
+    /* "libpetsc4py.pyx":1873
  *     cdef PetscBool found = PETSC_FALSE
  *     if PySNES(snes).self is None:
  *         CHKERR( PetscOptionsGetString(NULL,             # <<<<<<<<<<<<<<
  *                 getPrefix(snes),b"-snes_python_type",
  *                 name,sizeof(name),&found) )
  */
-    __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)
+    __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 == ((int)-1))) __PYX_ERR(0, 1873, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1866
+    /* "libpetsc4py.pyx":1876
  *                 getPrefix(snes),b"-snes_python_type",
  *                 name,sizeof(name),&found) )
  *         if found and name[0]:             # <<<<<<<<<<<<<<
@@ -19765,17 +21383,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetUp_Python(SNES __pyx_v_snes)
     __pyx_L5_bool_binop_done:;
     if (__pyx_t_3) {
 
-      /* "libpetsc4py.pyx":1867
+      /* "libpetsc4py.pyx":1877
  *                 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_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)
+      __pyx_t_5 = __pyx_f_11libpetsc4py_SNESPythonSetType_PYTHON(__pyx_v_snes, __pyx_v_name); if (unlikely(__pyx_t_5 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 1877, __pyx_L1_error)
+      __pyx_t_4 = __pyx_f_11libpetsc4py_CHKERR(__pyx_t_5); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 1877, __pyx_L1_error)
 
-      /* "libpetsc4py.pyx":1866
+      /* "libpetsc4py.pyx":1876
  *                 getPrefix(snes),b"-snes_python_type",
  *                 name,sizeof(name),&found) )
  *         if found and name[0]:             # <<<<<<<<<<<<<<
@@ -19784,7 +21402,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetUp_Python(SNES __pyx_v_snes)
  */
     }
 
-    /* "libpetsc4py.pyx":1862
+    /* "libpetsc4py.pyx":1872
  *     cdef char name[2048]
  *     cdef PetscBool found = PETSC_FALSE
  *     if PySNES(snes).self is None:             # <<<<<<<<<<<<<<
@@ -19793,21 +21411,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetUp_Python(SNES __pyx_v_snes)
  */
   }
 
-  /* "libpetsc4py.pyx":1868
+  /* "libpetsc4py.pyx":1878
  *         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_ERR(0, 1868, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1878, __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":1869
+    /* "libpetsc4py.pyx":1879
  *             CHKERR( SNESPythonSetType_PYTHON(snes,name) )
  *     if PySNES(snes).self is None:
  *         return PetscSETERR(PETSC_ERR_USER,             # <<<<<<<<<<<<<<
@@ -19817,7 +21435,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetUp_Python(SNES __pyx_v_snes)
     __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
+    /* "libpetsc4py.pyx":1878
  *         if found and name[0]:
  *             CHKERR( SNESPythonSetType_PYTHON(snes,name) )
  *     if PySNES(snes).self is None:             # <<<<<<<<<<<<<<
@@ -19826,22 +21444,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetUp_Python(SNES __pyx_v_snes)
  */
   }
 
-  /* "libpetsc4py.pyx":1875
+  /* "libpetsc4py.pyx":1885
  *             "-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_ERR(0, 1875, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1885, __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_ERR(0, 1875, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_setUp); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1885, __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":1876
+  /* "libpetsc4py.pyx":1886
  *     #
  *     cdef setUp = PySNES(snes).setUp
  *     if setUp is not None:             # <<<<<<<<<<<<<<
@@ -19852,18 +21470,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetUp_Python(SNES __pyx_v_snes)
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "libpetsc4py.pyx":1877
+    /* "libpetsc4py.pyx":1887
  *     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_ERR(0, 1877, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1887, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_v_setUp);
     __pyx_t_7 = __pyx_v_setUp; __pyx_t_8 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -19873,24 +21491,44 @@ 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_ERR(0, 1877, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1887, __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_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_ERR(0, 1877, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_6);
-      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_7)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_1};
+        __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1887, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+        __Pyx_GOTREF(__pyx_t_6);
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_1};
+        __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1887, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+        __Pyx_GOTREF(__pyx_t_6);
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1887, __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_ERR(0, 1887, __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;
 
-    /* "libpetsc4py.pyx":1876
+    /* "libpetsc4py.pyx":1886
  *     #
  *     cdef setUp = PySNES(snes).setUp
  *     if setUp is not None:             # <<<<<<<<<<<<<<
@@ -19899,7 +21537,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetUp_Python(SNES __pyx_v_snes)
  */
   }
 
-  /* "libpetsc4py.pyx":1878
+  /* "libpetsc4py.pyx":1888
  *     if setUp is not None:
  *         setUp(SNES_(snes))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -19909,7 +21547,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetUp_Python(SNES __pyx_v_snes)
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1852
+  /* "libpetsc4py.pyx":1862
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESSetUp_Python(             # <<<<<<<<<<<<<<
@@ -19930,12 +21568,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetUp_Python(SNES __pyx_v_snes)
   __Pyx_XDECREF(__pyx_v_setUp);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1880
+/* "libpetsc4py.pyx":1890
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESReset_Python(             # <<<<<<<<<<<<<<
@@ -19955,11 +21593,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESReset_Python(SNES __pyx_v_snes)
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("SNESReset_Python", 0);
 
-  /* "libpetsc4py.pyx":1884
+  /* "libpetsc4py.pyx":1894
  *     ) \
  *     except IERR with gil:
  *     if getRef(snes) == 0: return 0             # <<<<<<<<<<<<<<
@@ -19972,7 +21610,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESReset_Python(SNES __pyx_v_snes)
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":1885
+  /* "libpetsc4py.pyx":1895
  *     except IERR with gil:
  *     if getRef(snes) == 0: return 0
  *     FunctionBegin(b"SNESReset_Python")             # <<<<<<<<<<<<<<
@@ -19981,22 +21619,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESReset_Python(SNES __pyx_v_snes)
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"SNESReset_Python"));
 
-  /* "libpetsc4py.pyx":1886
+  /* "libpetsc4py.pyx":1896
  *     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_ERR(0, 1886, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1896, __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_ERR(0, 1886, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_reset); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1896, __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":1887
+  /* "libpetsc4py.pyx":1897
  *     FunctionBegin(b"SNESReset_Python")
  *     cdef reset = PySNES(snes).reset
  *     if reset is not None:             # <<<<<<<<<<<<<<
@@ -20007,18 +21645,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESReset_Python(SNES __pyx_v_snes)
   __pyx_t_4 = (__pyx_t_1 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":1888
+    /* "libpetsc4py.pyx":1898
  *     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_ERR(0, 1888, __pyx_L1_error)
+    __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1898, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_INCREF(__pyx_v_reset);
     __pyx_t_5 = __pyx_v_reset; __pyx_t_6 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
       __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
       if (likely(__pyx_t_6)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -20028,24 +21666,44 @@ 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_ERR(0, 1888, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1898, __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_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_ERR(0, 1888, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_2};
+        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1898, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_2};
+        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1898, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1898, __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_ERR(0, 1898, __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;
 
-    /* "libpetsc4py.pyx":1887
+    /* "libpetsc4py.pyx":1897
  *     FunctionBegin(b"SNESReset_Python")
  *     cdef reset = PySNES(snes).reset
  *     if reset is not None:             # <<<<<<<<<<<<<<
@@ -20054,7 +21712,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESReset_Python(SNES __pyx_v_snes)
  */
   }
 
-  /* "libpetsc4py.pyx":1889
+  /* "libpetsc4py.pyx":1899
  *     if reset is not None:
  *         reset(SNES_(snes))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -20064,7 +21722,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESReset_Python(SNES __pyx_v_snes)
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1880
+  /* "libpetsc4py.pyx":1890
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESReset_Python(             # <<<<<<<<<<<<<<
@@ -20085,12 +21743,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESReset_Python(SNES __pyx_v_snes)
   __Pyx_XDECREF(__pyx_v_reset);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1891
+/* "libpetsc4py.pyx":1901
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESSetFromOptions_Python(             # <<<<<<<<<<<<<<
@@ -20117,11 +21775,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetFromOptions_Python(PetscOptio
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("SNESSetFromOptions_Python", 0);
 
-  /* "libpetsc4py.pyx":1896
+  /* "libpetsc4py.pyx":1906
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"SNESSetFromOptions_Python")             # <<<<<<<<<<<<<<
@@ -20130,20 +21788,20 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetFromOptions_Python(PetscOptio
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"SNESSetFromOptions_Python"));
 
-  /* "libpetsc4py.pyx":1898
+  /* "libpetsc4py.pyx":1908
  *     FunctionBegin(b"SNESSetFromOptions_Python")
  *     #
  *     cdef char name[2048], *defval = PySNES(snes).getname()             # <<<<<<<<<<<<<<
  *     cdef PetscBool found = PETSC_FALSE
  *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1898, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1908, __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_ERR(0, 1898, __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 == ((char *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 1908, __pyx_L1_error)
   __pyx_v_defval = __pyx_t_2;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":1899
+  /* "libpetsc4py.pyx":1909
  *     #
  *     cdef char name[2048], *defval = PySNES(snes).getname()
  *     cdef PetscBool found = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -20152,7 +21810,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetFromOptions_Python(PetscOptio
  */
   __pyx_v_found = PETSC_FALSE;
 
-  /* "libpetsc4py.pyx":1900
+  /* "libpetsc4py.pyx":1910
  *     cdef char name[2048], *defval = PySNES(snes).getname()
  *     cdef PetscBool found = PETSC_FALSE
  *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject             # <<<<<<<<<<<<<<
@@ -20161,16 +21819,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetFromOptions_Python(PetscOptio
  */
   PetscOptionsObject = __pyx_v_PetscOptionsObject;
 
-  /* "libpetsc4py.pyx":1901
+  /* "libpetsc4py.pyx":1911
  *     cdef PetscBool found = PETSC_FALSE
  *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject
  *     CHKERR( PetscOptionsString(             # <<<<<<<<<<<<<<
  *             b"-snes_python_type",b"Python [package.]module[.{class|function}]",
  *             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)
+  __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 == ((int)-1))) __PYX_ERR(0, 1911, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1903
+  /* "libpetsc4py.pyx":1913
  *     CHKERR( PetscOptionsString(
  *             b"-snes_python_type",b"Python [package.]module[.{class|function}]",
  *             b"SNESPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;             # <<<<<<<<<<<<<<
@@ -20179,7 +21837,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetFromOptions_Python(PetscOptio
  */
   ((void)PetscOptionsObject);
 
-  /* "libpetsc4py.pyx":1904
+  /* "libpetsc4py.pyx":1914
  *             b"-snes_python_type",b"Python [package.]module[.{class|function}]",
  *             b"SNESPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
  *     if found and name[0]:             # <<<<<<<<<<<<<<
@@ -20196,17 +21854,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetFromOptions_Python(PetscOptio
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":1905
+    /* "libpetsc4py.pyx":1915
  *             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_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)
+    __pyx_t_6 = __pyx_f_11libpetsc4py_SNESPythonSetType_PYTHON(__pyx_v_snes, __pyx_v_name); if (unlikely(__pyx_t_6 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 1915, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_11libpetsc4py_CHKERR(__pyx_t_6); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 1915, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1904
+    /* "libpetsc4py.pyx":1914
  *             b"-snes_python_type",b"Python [package.]module[.{class|function}]",
  *             b"SNESPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
  *     if found and name[0]:             # <<<<<<<<<<<<<<
@@ -20215,22 +21873,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetFromOptions_Python(PetscOptio
  */
   }
 
-  /* "libpetsc4py.pyx":1907
+  /* "libpetsc4py.pyx":1917
  *         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_ERR(0, 1907, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1917, __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_ERR(0, 1907, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_setFromOptions); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1917, __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":1908
+  /* "libpetsc4py.pyx":1918
  *     #
  *     cdef setFromOptions = PySNES(snes).setFromOptions
  *     if setFromOptions is not None:             # <<<<<<<<<<<<<<
@@ -20241,18 +21899,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetFromOptions_Python(PetscOptio
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (__pyx_t_5) {
 
-    /* "libpetsc4py.pyx":1909
+    /* "libpetsc4py.pyx":1919
  *     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_ERR(0, 1909, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1919, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_v_setFromOptions);
     __pyx_t_8 = __pyx_v_setFromOptions; __pyx_t_9 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_8))) {
+    if (CYTHON_UNPACK_METHODS && 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);
@@ -20262,24 +21920,44 @@ 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_ERR(0, 1909, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1919, __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_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_ERR(0, 1909, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_7);
-      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_8)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_t_1};
+        __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1919, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+        __Pyx_GOTREF(__pyx_t_7);
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_t_1};
+        __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1919, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+        __Pyx_GOTREF(__pyx_t_7);
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1919, __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_ERR(0, 1919, __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;
 
-    /* "libpetsc4py.pyx":1908
+    /* "libpetsc4py.pyx":1918
  *     #
  *     cdef setFromOptions = PySNES(snes).setFromOptions
  *     if setFromOptions is not None:             # <<<<<<<<<<<<<<
@@ -20288,7 +21966,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetFromOptions_Python(PetscOptio
  */
   }
 
-  /* "libpetsc4py.pyx":1910
+  /* "libpetsc4py.pyx":1920
  *     if setFromOptions is not None:
  *         setFromOptions(SNES_(snes))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -20298,7 +21976,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetFromOptions_Python(PetscOptio
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1891
+  /* "libpetsc4py.pyx":1901
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESSetFromOptions_Python(             # <<<<<<<<<<<<<<
@@ -20319,12 +21997,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSetFromOptions_Python(PetscOptio
   __Pyx_XDECREF(__pyx_v_setFromOptions);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1912
+/* "libpetsc4py.pyx":1922
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESView_Python(             # <<<<<<<<<<<<<<
@@ -20344,14 +22022,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESView_Python(SNES __pyx_v_snes, P
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
-  Py_ssize_t __pyx_t_9;
-  PyObject *__pyx_t_10 = NULL;
+  PyObject *__pyx_t_9 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("SNESView_Python", 0);
 
-  /* "libpetsc4py.pyx":1917
+  /* "libpetsc4py.pyx":1927
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"SNESView_Python")             # <<<<<<<<<<<<<<
@@ -20360,34 +22037,34 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESView_Python(SNES __pyx_v_snes, P
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"SNESView_Python"));
 
-  /* "libpetsc4py.pyx":1918
+  /* "libpetsc4py.pyx":1928
  *     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_ERR(0, 1918, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1928, __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_ERR(0, 1918, __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 == ((int)-1))) __PYX_ERR(0, 1928, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":1919
+  /* "libpetsc4py.pyx":1929
  *     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_ERR(0, 1919, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1929, __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_ERR(0, 1919, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_view); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1929, __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":1920
+  /* "libpetsc4py.pyx":1930
  *     viewcontext(PySNES(snes), vwr)
  *     cdef view = PySNES(snes).view
  *     if view is not None:             # <<<<<<<<<<<<<<
@@ -20398,48 +22075,70 @@ 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":1921
+    /* "libpetsc4py.pyx":1931
  *     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_ERR(0, 1921, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 1931, __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_ERR(0, 1921, __pyx_L1_error)
+    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Viewer_(__pyx_v_vwr)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 1931, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_INCREF(__pyx_v_view);
     __pyx_t_7 = __pyx_v_view; __pyx_t_8 = NULL;
-    __pyx_t_9 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+    __pyx_t_2 = 0;
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
         __Pyx_INCREF(__pyx_t_8);
         __Pyx_INCREF(function);
         __Pyx_DECREF_SET(__pyx_t_7, function);
-        __pyx_t_9 = 1;
+        __pyx_t_2 = 1;
       }
     }
-    __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;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_7)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_t_1, __pyx_t_6};
+      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_2, 2+__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1931, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_t_1, __pyx_t_6};
+      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_2, 2+__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1931, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_9 = PyTuple_New(2+__pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 1931, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_9);
+      if (__pyx_t_8) {
+        __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+__pyx_t_2, __pyx_t_1);
+      __Pyx_GIVEREF(__pyx_t_6);
+      PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_2, __pyx_t_6);
+      __pyx_t_1 = 0;
+      __pyx_t_6 = 0;
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_9, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1931, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     }
-    __Pyx_GIVEREF(__pyx_t_1);
-    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_1);
-    __Pyx_GIVEREF(__pyx_t_6);
-    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_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;
 
-    /* "libpetsc4py.pyx":1920
+    /* "libpetsc4py.pyx":1930
  *     viewcontext(PySNES(snes), vwr)
  *     cdef view = PySNES(snes).view
  *     if view is not None:             # <<<<<<<<<<<<<<
@@ -20448,7 +22147,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESView_Python(SNES __pyx_v_snes, P
  */
   }
 
-  /* "libpetsc4py.pyx":1922
+  /* "libpetsc4py.pyx":1932
  *     if view is not None:
  *         view(SNES_(snes), Viewer_(vwr))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -20458,7 +22157,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESView_Python(SNES __pyx_v_snes, P
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1912
+  /* "libpetsc4py.pyx":1922
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESView_Python(             # <<<<<<<<<<<<<<
@@ -20473,19 +22172,19 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESView_Python(SNES __pyx_v_snes, P
   __Pyx_XDECREF(__pyx_t_6);
   __Pyx_XDECREF(__pyx_t_7);
   __Pyx_XDECREF(__pyx_t_8);
-  __Pyx_XDECREF(__pyx_t_10);
+  __Pyx_XDECREF(__pyx_t_9);
   __Pyx_AddTraceback("libpetsc4py.SNESView_Python", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = PETSC_ERR_PYTHON;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_view);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1924
+/* "libpetsc4py.pyx":1934
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESSolve_Python(             # <<<<<<<<<<<<<<
@@ -20508,15 +22207,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python(SNES __pyx_v_snes)
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = NULL;
-  Py_ssize_t __pyx_t_10;
-  PyObject *__pyx_t_11 = NULL;
-  PetscErrorCode __pyx_t_12;
+  PyObject *__pyx_t_10 = NULL;
+  PetscErrorCode __pyx_t_11;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("SNESSolve_Python", 0);
 
-  /* "libpetsc4py.pyx":1928
+  /* "libpetsc4py.pyx":1938
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"SNESSolve_Python")             # <<<<<<<<<<<<<<
@@ -20525,7 +22223,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python(SNES __pyx_v_snes)
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"SNESSolve_Python"));
 
-  /* "libpetsc4py.pyx":1929
+  /* "libpetsc4py.pyx":1939
  *     except IERR with gil:
  *     FunctionBegin(b"SNESSolve_Python")
  *     cdef PetscVec b = NULL, x = NULL             # <<<<<<<<<<<<<<
@@ -20535,40 +22233,40 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python(SNES __pyx_v_snes)
   __pyx_v_b = NULL;
   __pyx_v_x = NULL;
 
-  /* "libpetsc4py.pyx":1930
+  /* "libpetsc4py.pyx":1940
  *     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_ERR(0, 1930, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESGetRhs(__pyx_v_snes, (&__pyx_v_b))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1940, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1931
+  /* "libpetsc4py.pyx":1941
  *     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_ERR(0, 1931, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESGetSolution(__pyx_v_snes, (&__pyx_v_x))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1941, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1933
+  /* "libpetsc4py.pyx":1943
  *     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_ERR(0, 1933, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1943, __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_ERR(0, 1933, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_solve); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1943, __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":1934
+  /* "libpetsc4py.pyx":1944
  *     #
  *     cdef solve = PySNES(snes).solve
  *     if solve is not None:             # <<<<<<<<<<<<<<
@@ -20579,17 +22277,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":1935
+    /* "libpetsc4py.pyx":1945
  *     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_ERR(0, 1935, __pyx_L1_error)
+    __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 1945, __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_ERR(0, 1935, __pyx_L1_error)
+      __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_b)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1945, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __pyx_t_6 = __pyx_t_7;
       __pyx_t_7 = 0;
@@ -20597,42 +22295,66 @@ 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_ERR(0, 1935, __pyx_L1_error)
+    __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 1945, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_INCREF(__pyx_v_solve);
     __pyx_t_8 = __pyx_v_solve; __pyx_t_9 = NULL;
-    __pyx_t_10 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_8))) {
+    __pyx_t_1 = 0;
+    if (CYTHON_UNPACK_METHODS && 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_8, function);
-        __pyx_t_10 = 1;
+        __pyx_t_1 = 1;
       }
     }
-    __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;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_8)) {
+      PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_t_2, __pyx_t_6, __pyx_t_7};
+      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_1, 3+__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1945, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
+      PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_t_2, __pyx_t_6, __pyx_t_7};
+      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_1, 3+__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1945, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_10 = PyTuple_New(3+__pyx_t_1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 1945, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_10);
+      if (__pyx_t_9) {
+        __Pyx_GIVEREF(__pyx_t_9); PyTuple_SET_ITEM(__pyx_t_10, 0, __pyx_t_9); __pyx_t_9 = NULL;
+      }
+      __Pyx_GIVEREF(__pyx_t_2);
+      PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_1, __pyx_t_2);
+      __Pyx_GIVEREF(__pyx_t_6);
+      PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_1, __pyx_t_6);
+      __Pyx_GIVEREF(__pyx_t_7);
+      PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_1, __pyx_t_7);
+      __pyx_t_2 = 0;
+      __pyx_t_6 = 0;
+      __pyx_t_7 = 0;
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_8, __pyx_t_10, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 1945, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     }
-    __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_11, 2+__pyx_t_10, __pyx_t_7);
-    __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_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
+    /* "libpetsc4py.pyx":1944
  *     #
  *     cdef solve = PySNES(snes).solve
  *     if solve is not None:             # <<<<<<<<<<<<<<
@@ -20642,7 +22364,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python(SNES __pyx_v_snes)
     goto __pyx_L3;
   }
 
-  /* "libpetsc4py.pyx":1937
+  /* "libpetsc4py.pyx":1947
  *         solve(SNES_(snes), Vec_(b) if b != NULL else None, Vec_(x))
  *     else:
  *         SNESSolve_Python_default(snes)             # <<<<<<<<<<<<<<
@@ -20650,11 +22372,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python(SNES __pyx_v_snes)
  *     return FunctionEnd()
  */
   /*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_t_11 = __pyx_f_11libpetsc4py_SNESSolve_Python_default(__pyx_v_snes); if (unlikely(__pyx_t_11 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 1947, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "libpetsc4py.pyx":1939
+  /* "libpetsc4py.pyx":1949
  *         SNESSolve_Python_default(snes)
  *     #
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -20664,7 +22386,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python(SNES __pyx_v_snes)
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1924
+  /* "libpetsc4py.pyx":1934
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESSolve_Python(             # <<<<<<<<<<<<<<
@@ -20680,19 +22402,19 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python(SNES __pyx_v_snes)
   __Pyx_XDECREF(__pyx_t_7);
   __Pyx_XDECREF(__pyx_t_8);
   __Pyx_XDECREF(__pyx_t_9);
-  __Pyx_XDECREF(__pyx_t_11);
+  __Pyx_XDECREF(__pyx_t_10);
   __Pyx_AddTraceback("libpetsc4py.SNESSolve_Python", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = PETSC_ERR_PYTHON;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_solve);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1941
+/* "libpetsc4py.pyx":1951
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESSolve_Python_default(             # <<<<<<<<<<<<<<
@@ -20704,6 +22426,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python_default(SNES __pyx_
   Vec __pyx_v_X;
   Vec __pyx_v_F;
   Vec __pyx_v_Y;
+  SNESLineSearch __pyx_v_ls;
   PetscInt __pyx_v_its;
   PetscInt __pyx_v_lits;
   PetscReal __pyx_v_xnorm;
@@ -20714,12 +22437,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python_default(SNES __pyx_
   int __pyx_t_1;
   PetscInt __pyx_t_2;
   PetscErrorCode __pyx_t_3;
+  int __pyx_t_4;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("SNESSolve_Python_default", 0);
 
-  /* "libpetsc4py.pyx":1945
+  /* "libpetsc4py.pyx":1955
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"SNESSolve_Python_default")             # <<<<<<<<<<<<<<
@@ -20728,47 +22452,56 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python_default(SNES __pyx_
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"SNESSolve_Python_default"));
 
-  /* "libpetsc4py.pyx":1947
+  /* "libpetsc4py.pyx":1957
  *     FunctionBegin(b"SNESSolve_Python_default")
  *     #
  *     cdef PetscVec X=NULL, F=NULL, Y=NULL             # <<<<<<<<<<<<<<
+ *     cdef PetscSNESLineSearch ls
  *     CHKERR( SNESGetSolution(snes,&X)           )
- *     CHKERR( SNESGetFunction(snes,&F,NULL,NULL) )
  */
   __pyx_v_X = NULL;
   __pyx_v_F = NULL;
   __pyx_v_Y = NULL;
 
-  /* "libpetsc4py.pyx":1948
- *     #
+  /* "libpetsc4py.pyx":1959
  *     cdef PetscVec X=NULL, F=NULL, Y=NULL
+ *     cdef PetscSNESLineSearch ls
  *     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_ERR(0, 1948, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESGetSolution(__pyx_v_snes, (&__pyx_v_X))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1959, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1949
- *     cdef PetscVec X=NULL, F=NULL, Y=NULL
+  /* "libpetsc4py.pyx":1960
+ *     cdef PetscSNESLineSearch ls
  *     CHKERR( SNESGetSolution(snes,&X)           )
  *     CHKERR( SNESGetFunction(snes,&F,NULL,NULL) )             # <<<<<<<<<<<<<<
  *     CHKERR( SNESGetSolutionUpdate(snes,&Y)     )
- *     cdef PetscInt  its=0, lits=0
+ *     CHKERR( SNESGetLineSearch(snes, &ls)       )
  */
-  __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)
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESGetFunction(__pyx_v_snes, (&__pyx_v_F), NULL, NULL)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1960, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1950
+  /* "libpetsc4py.pyx":1961
  *     CHKERR( SNESGetSolution(snes,&X)           )
  *     CHKERR( SNESGetFunction(snes,&F,NULL,NULL) )
  *     CHKERR( SNESGetSolutionUpdate(snes,&Y)     )             # <<<<<<<<<<<<<<
+ *     CHKERR( SNESGetLineSearch(snes, &ls)       )
  *     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_ERR(0, 1950, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESGetSolutionUpdate(__pyx_v_snes, (&__pyx_v_Y))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1961, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1951
+  /* "libpetsc4py.pyx":1962
  *     CHKERR( SNESGetFunction(snes,&F,NULL,NULL) )
  *     CHKERR( SNESGetSolutionUpdate(snes,&Y)     )
+ *     CHKERR( SNESGetLineSearch(snes, &ls)       )             # <<<<<<<<<<<<<<
+ *     cdef PetscInt  its=0, lits=0
+ *     cdef PetscReal xnorm = 0.0
+ */
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESGetLineSearch(__pyx_v_snes, (&__pyx_v_ls))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1962, __pyx_L1_error)
+
+  /* "libpetsc4py.pyx":1963
+ *     CHKERR( SNESGetSolutionUpdate(snes,&Y)     )
+ *     CHKERR( SNESGetLineSearch(snes, &ls)       )
  *     cdef PetscInt  its=0, lits=0             # <<<<<<<<<<<<<<
  *     cdef PetscReal xnorm = 0.0
  *     cdef PetscReal fnorm = 0.0
@@ -20776,8 +22509,8 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python_default(SNES __pyx_
   __pyx_v_its = 0;
   __pyx_v_lits = 0;
 
-  /* "libpetsc4py.pyx":1952
- *     CHKERR( SNESGetSolutionUpdate(snes,&Y)     )
+  /* "libpetsc4py.pyx":1964
+ *     CHKERR( SNESGetLineSearch(snes, &ls)       )
  *     cdef PetscInt  its=0, lits=0
  *     cdef PetscReal xnorm = 0.0             # <<<<<<<<<<<<<<
  *     cdef PetscReal fnorm = 0.0
@@ -20785,7 +22518,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python_default(SNES __pyx_
  */
   __pyx_v_xnorm = 0.0;
 
-  /* "libpetsc4py.pyx":1953
+  /* "libpetsc4py.pyx":1965
  *     cdef PetscInt  its=0, lits=0
  *     cdef PetscReal xnorm = 0.0
  *     cdef PetscReal fnorm = 0.0             # <<<<<<<<<<<<<<
@@ -20794,7 +22527,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python_default(SNES __pyx_
  */
   __pyx_v_fnorm = 0.0;
 
-  /* "libpetsc4py.pyx":1954
+  /* "libpetsc4py.pyx":1966
  *     cdef PetscReal xnorm = 0.0
  *     cdef PetscReal fnorm = 0.0
  *     cdef PetscReal ynorm = 0.0             # <<<<<<<<<<<<<<
@@ -20803,7 +22536,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python_default(SNES __pyx_
  */
   __pyx_v_ynorm = 0.0;
 
-  /* "libpetsc4py.pyx":1956
+  /* "libpetsc4py.pyx":1968
  *     cdef PetscReal ynorm = 0.0
  *     #
  *     snes.iter   = 0             # <<<<<<<<<<<<<<
@@ -20812,7 +22545,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python_default(SNES __pyx_
  */
   __pyx_v_snes->iter = 0;
 
-  /* "libpetsc4py.pyx":1957
+  /* "libpetsc4py.pyx":1969
  *     #
  *     snes.iter   = 0
  *     snes.reason = SNES_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
@@ -20821,70 +22554,70 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python_default(SNES __pyx_
  */
   __pyx_v_snes->reason = SNES_CONVERGED_ITERATING;
 
-  /* "libpetsc4py.pyx":1958
+  /* "libpetsc4py.pyx":1970
  *     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_ERR(0, 1958, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecSet(__pyx_v_Y, 0.0)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1970, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1959
+  /* "libpetsc4py.pyx":1971
  *     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_ERR(0, 1959, __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 == ((int)-1))) __PYX_ERR(0, 1971, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1960
+  /* "libpetsc4py.pyx":1972
  *     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_ERR(0, 1960, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecNorm(__pyx_v_X, NORM_2, (&__pyx_v_xnorm))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1972, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1961
+  /* "libpetsc4py.pyx":1973
  *     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_ERR(0, 1961, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecNorm(__pyx_v_F, NORM_2, (&__pyx_v_fnorm))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1973, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1963
+  /* "libpetsc4py.pyx":1975
  *     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_ERR(0, 1963, __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 == ((int)-1))) __PYX_ERR(0, 1975, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1964
+  /* "libpetsc4py.pyx":1976
  *     #
  *     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_ERR(0, 1964, __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 == ((int)-1))) __PYX_ERR(0, 1976, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1965
+  /* "libpetsc4py.pyx":1977
  *     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_ERR(0, 1965, __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 == ((int)-1))) __PYX_ERR(0, 1977, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":1966
+  /* "libpetsc4py.pyx":1978
  *     CHKERR( SNESLogHistory(snes,snes.norm,lits) )
  *     CHKERR( SNESMonitor(snes,snes.iter,snes.norm) )
  *     for its from 0 <= its < snes.max_its:             # <<<<<<<<<<<<<<
@@ -20894,7 +22627,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":1967
+    /* "libpetsc4py.pyx":1979
  *     CHKERR( SNESMonitor(snes,snes.iter,snes.norm) )
  *     for its from 0 <= its < snes.max_its:
  *         if snes.reason: break             # <<<<<<<<<<<<<<
@@ -20905,16 +22638,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python_default(SNES __pyx_
       goto __pyx_L4_break;
     }
 
-    /* "libpetsc4py.pyx":1968
+    /* "libpetsc4py.pyx":1980
  *     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_ERR(0, 1968, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_11libpetsc4py_SNESPreStep_Python(__pyx_v_snes); if (unlikely(__pyx_t_3 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 1980, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1970
+    /* "libpetsc4py.pyx":1982
  *         SNESPreStep_Python(snes)
  *         #
  *         lits = -snes.linear_its             # <<<<<<<<<<<<<<
@@ -20923,71 +22656,53 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python_default(SNES __pyx_
  */
     __pyx_v_lits = (-__pyx_v_snes->linear_its);
 
-    /* "libpetsc4py.pyx":1971
+    /* "libpetsc4py.pyx":1983
  *         #
  *         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_ERR(0, 1971, __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 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 1983, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1972
+    /* "libpetsc4py.pyx":1984
  *         lits = -snes.linear_its
  *         SNESStep_Python(snes,X,F,Y)
  *         lits += snes.linear_its             # <<<<<<<<<<<<<<
  *         #
- *         CHKERR( VecAXPY(X,-1.0,Y)             )
+ *         CHKERR( SNESLineSearchApply(ls,X,F,&fnorm,Y) )
  */
     __pyx_v_lits = (__pyx_v_lits + __pyx_v_snes->linear_its);
 
-    /* "libpetsc4py.pyx":1974
+    /* "libpetsc4py.pyx":1986
  *         lits += snes.linear_its
  *         #
- *         CHKERR( VecAXPY(X,-1.0,Y)             )             # <<<<<<<<<<<<<<
- *         CHKERR( SNESComputeFunction(snes,X,F) )
+ *         CHKERR( SNESLineSearchApply(ls,X,F,&fnorm,Y) )             # <<<<<<<<<<<<<<
  *         CHKERR( VecNorm(X,NORM_2,&xnorm)      )
+ *         CHKERR( VecNorm(Y,NORM_2,&ynorm)      )
  */
-    __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)
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESLineSearchApply(__pyx_v_ls, __pyx_v_X, __pyx_v_F, (&__pyx_v_fnorm), __pyx_v_Y)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1986, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1975
+    /* "libpetsc4py.pyx":1987
  *         #
- *         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_ERR(0, 1975, __pyx_L1_error)
-
-    /* "libpetsc4py.pyx":1976
- *         CHKERR( VecAXPY(X,-1.0,Y)             )
- *         CHKERR( SNESComputeFunction(snes,X,F) )
+ *         CHKERR( SNESLineSearchApply(ls,X,F,&fnorm,Y) )
  *         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_ERR(0, 1976, __pyx_L1_error)
-
-    /* "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_ERR(0, 1977, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecNorm(__pyx_v_X, NORM_2, (&__pyx_v_xnorm))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1987, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1978
+    /* "libpetsc4py.pyx":1988
+ *         CHKERR( SNESLineSearchApply(ls,X,F,&fnorm,Y) )
  *         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_ERR(0, 1978, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecNorm(__pyx_v_Y, NORM_2, (&__pyx_v_ynorm))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1988, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1979
- *         CHKERR( VecNorm(F,NORM_2,&fnorm)      )
+    /* "libpetsc4py.pyx":1989
+ *         CHKERR( VecNorm(X,NORM_2,&xnorm)      )
  *         CHKERR( VecNorm(Y,NORM_2,&ynorm)      )
  *         snes.iter += 1             # <<<<<<<<<<<<<<
  *         #
@@ -20995,55 +22710,102 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python_default(SNES __pyx_
  */
     __pyx_v_snes->iter = (__pyx_v_snes->iter + 1);
 
-    /* "libpetsc4py.pyx":1981
+    /* "libpetsc4py.pyx":1991
  *         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_ERR(0, 1981, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_11libpetsc4py_SNESPostStep_Python(__pyx_v_snes); if (unlikely(__pyx_t_3 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 1991, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1982
+    /* "libpetsc4py.pyx":1992
  *         #
  *         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_ERR(0, 1982, __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 == ((int)-1))) __PYX_ERR(0, 1992, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1983
+    /* "libpetsc4py.pyx":1993
  *         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_ERR(0, 1983, __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 == ((int)-1))) __PYX_ERR(0, 1993, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":1984
+    /* "libpetsc4py.pyx":1994
  *         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
- *     #
+ *     if snes.iter == snes.max_its:
  */
-    __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_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESMonitor(__pyx_v_snes, __pyx_v_snes->iter, __pyx_v_snes->norm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 1994, __pyx_L1_error)
   }
   __pyx_L4_break:;
 
-  /* "libpetsc4py.pyx":1985
+  /* "libpetsc4py.pyx":1995
  *         CHKERR( SNESLogHistory(snes,snes.norm,lits) )
  *         CHKERR( SNESMonitor(snes,snes.iter,snes.norm) )
  *     <void>its # silent unused warning             # <<<<<<<<<<<<<<
+ *     if snes.iter == snes.max_its:
+ *         if snes.reason == SNES_CONVERGED_ITERATING:
+ */
+  ((void)__pyx_v_its);
+
+  /* "libpetsc4py.pyx":1996
+ *         CHKERR( SNESMonitor(snes,snes.iter,snes.norm) )
+ *     <void>its # silent unused warning
+ *     if snes.iter == snes.max_its:             # <<<<<<<<<<<<<<
+ *         if snes.reason == SNES_CONVERGED_ITERATING:
+ *             snes.reason = SNES_DIVERGED_MAX_IT
+ */
+  __pyx_t_4 = ((__pyx_v_snes->iter == __pyx_v_snes->max_its) != 0);
+  if (__pyx_t_4) {
+
+    /* "libpetsc4py.pyx":1997
+ *     <void>its # silent unused warning
+ *     if snes.iter == snes.max_its:
+ *         if snes.reason == SNES_CONVERGED_ITERATING:             # <<<<<<<<<<<<<<
+ *             snes.reason = SNES_DIVERGED_MAX_IT
+ *     #
+ */
+    __pyx_t_4 = ((__pyx_v_snes->reason == SNES_CONVERGED_ITERATING) != 0);
+    if (__pyx_t_4) {
+
+      /* "libpetsc4py.pyx":1998
+ *     if snes.iter == snes.max_its:
+ *         if snes.reason == SNES_CONVERGED_ITERATING:
+ *             snes.reason = SNES_DIVERGED_MAX_IT             # <<<<<<<<<<<<<<
  *     #
  *     return FunctionEnd()
  */
-  ((void)__pyx_v_its);
+      __pyx_v_snes->reason = SNES_DIVERGED_MAX_IT;
+
+      /* "libpetsc4py.pyx":1997
+ *     <void>its # silent unused warning
+ *     if snes.iter == snes.max_its:
+ *         if snes.reason == SNES_CONVERGED_ITERATING:             # <<<<<<<<<<<<<<
+ *             snes.reason = SNES_DIVERGED_MAX_IT
+ *     #
+ */
+    }
 
-  /* "libpetsc4py.pyx":1987
+    /* "libpetsc4py.pyx":1996
+ *         CHKERR( SNESMonitor(snes,snes.iter,snes.norm) )
  *     <void>its # silent unused warning
+ *     if snes.iter == snes.max_its:             # <<<<<<<<<<<<<<
+ *         if snes.reason == SNES_CONVERGED_ITERATING:
+ *             snes.reason = SNES_DIVERGED_MAX_IT
+ */
+  }
+
+  /* "libpetsc4py.pyx":2000
+ *             snes.reason = SNES_DIVERGED_MAX_IT
  *     #
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
  * 
@@ -21052,7 +22814,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python_default(SNES __pyx_
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1941
+  /* "libpetsc4py.pyx":1951
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESSolve_Python_default(             # <<<<<<<<<<<<<<
@@ -21067,12 +22829,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESSolve_Python_default(SNES __pyx_
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1989
+/* "libpetsc4py.pyx":2002
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESPreStep_Python(             # <<<<<<<<<<<<<<
@@ -21092,11 +22854,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPreStep_Python(SNES __pyx_v_snes
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("SNESPreStep_Python", 0);
 
-  /* "libpetsc4py.pyx":1993
+  /* "libpetsc4py.pyx":2006
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"SNESPreStep_Python")             # <<<<<<<<<<<<<<
@@ -21105,22 +22867,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPreStep_Python(SNES __pyx_v_snes
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"SNESPreStep_Python"));
 
-  /* "libpetsc4py.pyx":1994
+  /* "libpetsc4py.pyx":2007
  *     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_ERR(0, 1994, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2007, __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_ERR(0, 1994, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_preStep); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2007, __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":1995
+  /* "libpetsc4py.pyx":2008
  *     FunctionBegin(b"SNESPreStep_Python")
  *     cdef preStep = PySNES(snes).preStep
  *     if preStep is not None:             # <<<<<<<<<<<<<<
@@ -21131,18 +22893,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPreStep_Python(SNES __pyx_v_snes
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":1996
+    /* "libpetsc4py.pyx":2009
  *     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_ERR(0, 1996, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2009, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_v_preStep);
     __pyx_t_5 = __pyx_v_preStep; __pyx_t_6 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
       __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
       if (likely(__pyx_t_6)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -21152,24 +22914,44 @@ 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_ERR(0, 1996, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2009, __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_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_ERR(0, 1996, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_1};
+        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2009, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_1};
+        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2009, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2009, __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_ERR(0, 2009, __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":1995
+    /* "libpetsc4py.pyx":2008
  *     FunctionBegin(b"SNESPreStep_Python")
  *     cdef preStep = PySNES(snes).preStep
  *     if preStep is not None:             # <<<<<<<<<<<<<<
@@ -21178,7 +22960,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPreStep_Python(SNES __pyx_v_snes
  */
   }
 
-  /* "libpetsc4py.pyx":1997
+  /* "libpetsc4py.pyx":2010
  *     if preStep is not None:
  *         preStep(SNES_(snes))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -21188,7 +22970,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPreStep_Python(SNES __pyx_v_snes
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1989
+  /* "libpetsc4py.pyx":2002
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESPreStep_Python(             # <<<<<<<<<<<<<<
@@ -21209,12 +22991,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPreStep_Python(SNES __pyx_v_snes
   __Pyx_XDECREF(__pyx_v_preStep);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":1999
+/* "libpetsc4py.pyx":2012
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESPostStep_Python(             # <<<<<<<<<<<<<<
@@ -21234,11 +23016,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPostStep_Python(SNES __pyx_v_sne
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("SNESPostStep_Python", 0);
 
-  /* "libpetsc4py.pyx":2003
+  /* "libpetsc4py.pyx":2016
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"SNESPostStep_Python")             # <<<<<<<<<<<<<<
@@ -21247,22 +23029,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPostStep_Python(SNES __pyx_v_sne
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"SNESPostStep_Python"));
 
-  /* "libpetsc4py.pyx":2004
+  /* "libpetsc4py.pyx":2017
  *     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_ERR(0, 2004, __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_postStep); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2004, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_postStep); 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_postStep = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":2005
+  /* "libpetsc4py.pyx":2018
  *     FunctionBegin(b"SNESPostStep_Python")
  *     cdef postStep = PySNES(snes).postStep
  *     if postStep is not None:             # <<<<<<<<<<<<<<
@@ -21273,18 +23055,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPostStep_Python(SNES __pyx_v_sne
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":2006
+    /* "libpetsc4py.pyx":2019
  *     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_ERR(0, 2006, __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_INCREF(__pyx_v_postStep);
     __pyx_t_5 = __pyx_v_postStep; __pyx_t_6 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
       __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
       if (likely(__pyx_t_6)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -21294,24 +23076,44 @@ 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_ERR(0, 2006, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2019, __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_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_ERR(0, 2006, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_1};
+        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2019, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_1};
+        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2019, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2019, __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_ERR(0, 2019, __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":2005
+    /* "libpetsc4py.pyx":2018
  *     FunctionBegin(b"SNESPostStep_Python")
  *     cdef postStep = PySNES(snes).postStep
  *     if postStep is not None:             # <<<<<<<<<<<<<<
@@ -21320,7 +23122,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPostStep_Python(SNES __pyx_v_sne
  */
   }
 
-  /* "libpetsc4py.pyx":2007
+  /* "libpetsc4py.pyx":2020
  *     if postStep is not None:
  *         postStep(SNES_(snes))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -21330,7 +23132,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPostStep_Python(SNES __pyx_v_sne
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":1999
+  /* "libpetsc4py.pyx":2012
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESPostStep_Python(             # <<<<<<<<<<<<<<
@@ -21351,12 +23153,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESPostStep_Python(SNES __pyx_v_sne
   __Pyx_XDECREF(__pyx_v_postStep);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2009
+/* "libpetsc4py.pyx":2022
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESStep_Python(             # <<<<<<<<<<<<<<
@@ -21377,15 +23179,15 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESStep_Python(SNES __pyx_v_snes, V
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = NULL;
-  Py_ssize_t __pyx_t_10;
+  int __pyx_t_10;
   PyObject *__pyx_t_11 = NULL;
   PetscErrorCode __pyx_t_12;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("SNESStep_Python", 0);
 
-  /* "libpetsc4py.pyx":2016
+  /* "libpetsc4py.pyx":2029
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"SNESStep_Python")             # <<<<<<<<<<<<<<
@@ -21394,22 +23196,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESStep_Python(SNES __pyx_v_snes, V
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"SNESStep_Python"));
 
-  /* "libpetsc4py.pyx":2017
+  /* "libpetsc4py.pyx":2030
  *     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_ERR(0, 2017, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PySNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2030, __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_ERR(0, 2017, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_step); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2030, __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":2018
+  /* "libpetsc4py.pyx":2031
  *     FunctionBegin(b"SNESStep_Python")
  *     cdef step = PySNES(snes).step
  *     if step is not None:             # <<<<<<<<<<<<<<
@@ -21420,25 +23222,25 @@ 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":2019
+    /* "libpetsc4py.pyx":2032
  *     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_ERR(0, 2019, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2032, __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_ERR(0, 2019, __pyx_L1_error)
+    __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_X)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2032, __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_ERR(0, 2019, __pyx_L1_error)
+    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_F)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2032, __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_ERR(0, 2019, __pyx_L1_error)
+    __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_Y)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2032, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_INCREF(__pyx_v_step);
     __pyx_t_8 = __pyx_v_step; __pyx_t_9 = NULL;
     __pyx_t_10 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_8))) {
+    if (CYTHON_UNPACK_METHODS && 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);
@@ -21448,30 +23250,56 @@ 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_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;
-    }
-    __Pyx_GIVEREF(__pyx_t_1);
-    PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_t_1);
-    __Pyx_GIVEREF(__pyx_t_5);
-    PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_t_5);
-    __Pyx_GIVEREF(__pyx_t_6);
-    PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_10, __pyx_t_6);
-    __Pyx_GIVEREF(__pyx_t_7);
-    PyTuple_SET_ITEM(__pyx_t_11, 3+__pyx_t_10, __pyx_t_7);
-    __pyx_t_1 = 0;
-    __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_ERR(0, 2019, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_8)) {
+      PyObject *__pyx_temp[5] = {__pyx_t_9, __pyx_t_1, __pyx_t_5, __pyx_t_6, __pyx_t_7};
+      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_10, 4+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2032, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __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;
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
+      PyObject *__pyx_temp[5] = {__pyx_t_9, __pyx_t_1, __pyx_t_5, __pyx_t_6, __pyx_t_7};
+      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_10, 4+__pyx_t_10); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2032, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __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;
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_11 = PyTuple_New(4+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2032, __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_1);
+      PyTuple_SET_ITEM(__pyx_t_11, 0+__pyx_t_10, __pyx_t_1);
+      __Pyx_GIVEREF(__pyx_t_5);
+      PyTuple_SET_ITEM(__pyx_t_11, 1+__pyx_t_10, __pyx_t_5);
+      __Pyx_GIVEREF(__pyx_t_6);
+      PyTuple_SET_ITEM(__pyx_t_11, 2+__pyx_t_10, __pyx_t_6);
+      __Pyx_GIVEREF(__pyx_t_7);
+      PyTuple_SET_ITEM(__pyx_t_11, 3+__pyx_t_10, __pyx_t_7);
+      __pyx_t_1 = 0;
+      __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_ERR(0, 2032, __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
+    /* "libpetsc4py.pyx":2031
  *     FunctionBegin(b"SNESStep_Python")
  *     cdef step = PySNES(snes).step
  *     if step is not None:             # <<<<<<<<<<<<<<
@@ -21481,7 +23309,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESStep_Python(SNES __pyx_v_snes, V
     goto __pyx_L3;
   }
 
-  /* "libpetsc4py.pyx":2021
+  /* "libpetsc4py.pyx":2034
  *         step(SNES_(snes),Vec_(X),Vec_(F),Vec_(Y))
  *     else:
  *         SNESStep_Python_default(snes,X,F,Y)             # <<<<<<<<<<<<<<
@@ -21489,11 +23317,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESStep_Python(SNES __pyx_v_snes, V
  * 
  */
   /*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_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 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 2034, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "libpetsc4py.pyx":2022
+  /* "libpetsc4py.pyx":2035
  *     else:
  *         SNESStep_Python_default(snes,X,F,Y)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -21503,7 +23331,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESStep_Python(SNES __pyx_v_snes, V
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2009
+  /* "libpetsc4py.pyx":2022
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESStep_Python(             # <<<<<<<<<<<<<<
@@ -21527,12 +23355,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESStep_Python(SNES __pyx_v_snes, V
   __Pyx_XDECREF(__pyx_v_step);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2024
+/* "libpetsc4py.pyx":2037
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESStep_Python_default(             # <<<<<<<<<<<<<<
@@ -21548,11 +23376,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESStep_Python_default(SNES __pyx_v
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("SNESStep_Python_default", 0);
 
-  /* "libpetsc4py.pyx":2031
+  /* "libpetsc4py.pyx":2044
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"SNESStep_Python_default")             # <<<<<<<<<<<<<<
@@ -21561,7 +23389,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESStep_Python_default(SNES __pyx_v
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"SNESStep_Python_default"));
 
-  /* "libpetsc4py.pyx":2032
+  /* "libpetsc4py.pyx":2045
  *     except IERR with gil:
  *     FunctionBegin(b"SNESStep_Python_default")
  *     cdef PetscMat J = NULL, P = NULL             # <<<<<<<<<<<<<<
@@ -21571,7 +23399,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESStep_Python_default(SNES __pyx_v
   __pyx_v_J = NULL;
   __pyx_v_P = NULL;
 
-  /* "libpetsc4py.pyx":2033
+  /* "libpetsc4py.pyx":2046
  *     FunctionBegin(b"SNESStep_Python_default")
  *     cdef PetscMat J = NULL, P = NULL
  *     cdef PetscInt lits = 0             # <<<<<<<<<<<<<<
@@ -21580,52 +23408,52 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESStep_Python_default(SNES __pyx_v
  */
   __pyx_v_lits = 0;
 
-  /* "libpetsc4py.pyx":2034
+  /* "libpetsc4py.pyx":2047
  *     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_ERR(0, 2034, __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 == ((int)-1))) __PYX_ERR(0, 2047, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2035
+  /* "libpetsc4py.pyx":2048
  *     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_ERR(0, 2035, __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 == ((int)-1))) __PYX_ERR(0, 2048, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2036
+  /* "libpetsc4py.pyx":2049
  *     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_ERR(0, 2036, __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 == ((int)-1))) __PYX_ERR(0, 2049, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2037
+  /* "libpetsc4py.pyx":2050
  *     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_ERR(0, 2037, __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 == ((int)-1))) __PYX_ERR(0, 2050, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2038
+  /* "libpetsc4py.pyx":2051
  *     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_ERR(0, 2038, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPGetIterationNumber(__pyx_v_snes->ksp, (&__pyx_v_lits))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2051, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2039
+  /* "libpetsc4py.pyx":2052
  *     CHKERR( KSPSolve(snes.ksp,F,Y)                  )
  *     CHKERR( KSPGetIterationNumber(snes.ksp,&lits)   )
  *     snes.linear_its += lits             # <<<<<<<<<<<<<<
@@ -21634,7 +23462,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":2040
+  /* "libpetsc4py.pyx":2053
  *     CHKERR( KSPGetIterationNumber(snes.ksp,&lits)   )
  *     snes.linear_its += lits
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -21644,7 +23472,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESStep_Python_default(SNES __pyx_v
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2024
+  /* "libpetsc4py.pyx":2037
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESStep_Python_default(             # <<<<<<<<<<<<<<
@@ -21659,12 +23487,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESStep_Python_default(SNES __pyx_v
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2118
+/* "libpetsc4py.pyx":2133
  * @cython.internal
  * cdef class _PyTS(_PyObj): pass
  * cdef inline _PyTS PyTS(PetscTS ts):             # <<<<<<<<<<<<<<
@@ -21680,7 +23508,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyTS *__pyx_f_11libpetsc4py
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("PyTS", 0);
 
-  /* "libpetsc4py.pyx":2119
+  /* "libpetsc4py.pyx":2134
  * cdef class _PyTS(_PyObj): pass
  * cdef inline _PyTS PyTS(PetscTS ts):
  *     if ts != NULL and ts.data != NULL:             # <<<<<<<<<<<<<<
@@ -21698,7 +23526,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyTS *__pyx_f_11libpetsc4py
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "libpetsc4py.pyx":2120
+    /* "libpetsc4py.pyx":2135
  * cdef inline _PyTS PyTS(PetscTS ts):
  *     if ts != NULL and ts.data != NULL:
  *         return <_PyTS>ts.data             # <<<<<<<<<<<<<<
@@ -21710,7 +23538,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyTS *__pyx_f_11libpetsc4py
     __pyx_r = ((struct __pyx_obj_11libpetsc4py__PyTS *)__pyx_v_ts->data);
     goto __pyx_L0;
 
-    /* "libpetsc4py.pyx":2119
+    /* "libpetsc4py.pyx":2134
  * cdef class _PyTS(_PyObj): pass
  * cdef inline _PyTS PyTS(PetscTS ts):
  *     if ts != NULL and ts.data != NULL:             # <<<<<<<<<<<<<<
@@ -21719,7 +23547,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyTS *__pyx_f_11libpetsc4py
  */
   }
 
-  /* "libpetsc4py.pyx":2122
+  /* "libpetsc4py.pyx":2137
  *         return <_PyTS>ts.data
  *     else:
  *         return _PyTS.__new__(_PyTS)             # <<<<<<<<<<<<<<
@@ -21728,15 +23556,15 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyTS *__pyx_f_11libpetsc4py
  */
   /*else*/ {
     __Pyx_XDECREF(((PyObject *)__pyx_r));
-    __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_t_3 = __pyx_tp_new_11libpetsc4py__PyTS(((PyTypeObject *)__pyx_ptype_11libpetsc4py__PyTS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2137, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11libpetsc4py__PyTS)))) __PYX_ERR(0, 2122, __pyx_L1_error)
+    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_11libpetsc4py__PyTS)))) __PYX_ERR(0, 2137, __pyx_L1_error)
     __pyx_r = ((struct __pyx_obj_11libpetsc4py__PyTS *)__pyx_t_3);
     __pyx_t_3 = 0;
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":2118
+  /* "libpetsc4py.pyx":2133
  * @cython.internal
  * cdef class _PyTS(_PyObj): pass
  * cdef inline _PyTS PyTS(PetscTS ts):             # <<<<<<<<<<<<<<
@@ -21755,7 +23583,7 @@ static CYTHON_INLINE struct __pyx_obj_11libpetsc4py__PyTS *__pyx_f_11libpetsc4py
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2124
+/* "libpetsc4py.pyx":2139
  *         return _PyTS.__new__(_PyTS)
  * 
  * cdef public PetscErrorCode TSPythonGetContext(PetscTS ts, void **ctx) \             # <<<<<<<<<<<<<<
@@ -21770,7 +23598,7 @@ PetscErrorCode TSPythonGetContext(TS __pyx_v_ts, void **__pyx_v_ctx) {
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("TSPythonGetContext", 0);
 
-  /* "libpetsc4py.pyx":2126
+  /* "libpetsc4py.pyx":2141
  * cdef public PetscErrorCode TSPythonGetContext(PetscTS ts, void **ctx) \
  *     except IERR:
  *     FunctionBegin(b"TSPythonGetContext")             # <<<<<<<<<<<<<<
@@ -21779,19 +23607,19 @@ PetscErrorCode TSPythonGetContext(TS __pyx_v_ts, void **__pyx_v_ctx) {
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSPythonGetContext"));
 
-  /* "libpetsc4py.pyx":2127
+  /* "libpetsc4py.pyx":2142
  *     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_ERR(0, 2127, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2142, __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_ERR(0, 2127, __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 == ((int)-1))) __PYX_ERR(0, 2142, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":2128
+  /* "libpetsc4py.pyx":2143
  *     FunctionBegin(b"TSPythonGetContext")
  *     PyTS(ts).getcontext(ctx)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -21801,7 +23629,7 @@ PetscErrorCode TSPythonGetContext(TS __pyx_v_ts, void **__pyx_v_ctx) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2124
+  /* "libpetsc4py.pyx":2139
  *         return _PyTS.__new__(_PyTS)
  * 
  * cdef public PetscErrorCode TSPythonGetContext(PetscTS ts, void **ctx) \             # <<<<<<<<<<<<<<
@@ -21819,7 +23647,7 @@ PetscErrorCode TSPythonGetContext(TS __pyx_v_ts, void **__pyx_v_ctx) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2130
+/* "libpetsc4py.pyx":2145
  *     return FunctionEnd()
  * 
  * cdef public PetscErrorCode TSPythonSetContext(PetscTS ts, void *ctx) \             # <<<<<<<<<<<<<<
@@ -21835,7 +23663,7 @@ PetscErrorCode TSPythonSetContext(TS __pyx_v_ts, void *__pyx_v_ctx) {
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("TSPythonSetContext", 0);
 
-  /* "libpetsc4py.pyx":2132
+  /* "libpetsc4py.pyx":2147
  * cdef public PetscErrorCode TSPythonSetContext(PetscTS ts, void *ctx) \
  *     except IERR:
  *     FunctionBegin(b"TSPythonSetContext")             # <<<<<<<<<<<<<<
@@ -21844,22 +23672,22 @@ PetscErrorCode TSPythonSetContext(TS __pyx_v_ts, void *__pyx_v_ctx) {
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSPythonSetContext"));
 
-  /* "libpetsc4py.pyx":2133
+  /* "libpetsc4py.pyx":2148
  *     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_ERR(0, 2133, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2148, __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_ERR(0, 2133, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2148, __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_ERR(0, 2133, __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 == ((int)-1))) __PYX_ERR(0, 2148, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":2134
+  /* "libpetsc4py.pyx":2149
  *     FunctionBegin(b"TSPythonSetContext")
  *     PyTS(ts).setcontext(ctx, TS_(ts))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -21869,7 +23697,7 @@ PetscErrorCode TSPythonSetContext(TS __pyx_v_ts, void *__pyx_v_ctx) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2130
+  /* "libpetsc4py.pyx":2145
  *     return FunctionEnd()
  * 
  * cdef public PetscErrorCode TSPythonSetContext(PetscTS ts, void *ctx) \             # <<<<<<<<<<<<<<
@@ -21888,7 +23716,7 @@ PetscErrorCode TSPythonSetContext(TS __pyx_v_ts, void *__pyx_v_ctx) {
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2136
+/* "libpetsc4py.pyx":2151
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSPythonSetType_PYTHON(PetscTS ts, char name[]) \             # <<<<<<<<<<<<<<
@@ -21905,11 +23733,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSPythonSetType_PYTHON(TS __pyx_v_ts
   PetscErrorCode __pyx_t_3;
   int __pyx_t_4;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TSPythonSetType_PYTHON", 0);
 
-  /* "libpetsc4py.pyx":2138
+  /* "libpetsc4py.pyx":2153
  * cdef PetscErrorCode TSPythonSetType_PYTHON(PetscTS ts, char name[]) \
  *     except IERR with gil:
  *     FunctionBegin(b"TSPythonSetType_PYTHON")             # <<<<<<<<<<<<<<
@@ -21918,7 +23746,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSPythonSetType_PYTHON(TS __pyx_v_ts
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSPythonSetType_PYTHON"));
 
-  /* "libpetsc4py.pyx":2139
+  /* "libpetsc4py.pyx":2154
  *     except IERR with gil:
  *     FunctionBegin(b"TSPythonSetType_PYTHON")
  *     if name == NULL: return FunctionEnd() # XXX             # <<<<<<<<<<<<<<
@@ -21931,40 +23759,40 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSPythonSetType_PYTHON(TS __pyx_v_ts
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":2140
+  /* "libpetsc4py.pyx":2155
  *     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_ERR(0, 2140, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_11libpetsc4py_createcontext(__pyx_v_name); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2155, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_ctx = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":2141
+  /* "libpetsc4py.pyx":2156
  *     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_ERR(0, 2141, __pyx_L1_error)
+  __pyx_t_3 = TSPythonSetContext(__pyx_v_ts, ((void *)__pyx_v_ctx)); if (unlikely(__pyx_t_3 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 2156, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2142
+  /* "libpetsc4py.pyx":2157
  *     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_ERR(0, 2142, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2157, __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_ERR(0, 2142, __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 == ((int)-1))) __PYX_ERR(0, 2157, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":2143
+  /* "libpetsc4py.pyx":2158
  *     TSPythonSetContext(ts, <void*>ctx)
  *     PyTS(ts).setname(name)
  *     return  0             # <<<<<<<<<<<<<<
@@ -21974,7 +23802,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSPythonSetType_PYTHON(TS __pyx_v_ts
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2136
+  /* "libpetsc4py.pyx":2151
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSPythonSetType_PYTHON(PetscTS ts, char name[]) \             # <<<<<<<<<<<<<<
@@ -21991,12 +23819,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSPythonSetType_PYTHON(TS __pyx_v_ts
   __Pyx_XDECREF(__pyx_v_ctx);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2145
+/* "libpetsc4py.pyx":2160
  *     return  0
  * 
  * cdef PetscErrorCode TSCreate_Python(             # <<<<<<<<<<<<<<
@@ -22013,11 +23841,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TSCreate_Python", 0);
 
-  /* "libpetsc4py.pyx":2149
+  /* "libpetsc4py.pyx":2164
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"TSCreate_Python")             # <<<<<<<<<<<<<<
@@ -22026,7 +23854,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSCreate_Python"));
 
-  /* "libpetsc4py.pyx":2151
+  /* "libpetsc4py.pyx":2166
  *     FunctionBegin(b"TSCreate_Python")
  *     #
  *     cdef TSOps ops     = ts.ops             # <<<<<<<<<<<<<<
@@ -22036,7 +23864,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":2152
+  /* "libpetsc4py.pyx":2167
  *     #
  *     cdef TSOps ops     = ts.ops
  *     ops.reset          = TSReset_Python             # <<<<<<<<<<<<<<
@@ -22045,7 +23873,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
  */
   __pyx_v_ops->reset = __pyx_f_11libpetsc4py_TSReset_Python;
 
-  /* "libpetsc4py.pyx":2153
+  /* "libpetsc4py.pyx":2168
  *     cdef TSOps ops     = ts.ops
  *     ops.reset          = TSReset_Python
  *     ops.destroy        = TSDestroy_Python             # <<<<<<<<<<<<<<
@@ -22054,7 +23882,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
  */
   __pyx_v_ops->destroy = __pyx_f_11libpetsc4py_TSDestroy_Python;
 
-  /* "libpetsc4py.pyx":2154
+  /* "libpetsc4py.pyx":2169
  *     ops.reset          = TSReset_Python
  *     ops.destroy        = TSDestroy_Python
  *     ops.setup          = TSSetUp_Python             # <<<<<<<<<<<<<<
@@ -22063,7 +23891,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
  */
   __pyx_v_ops->setup = __pyx_f_11libpetsc4py_TSSetUp_Python;
 
-  /* "libpetsc4py.pyx":2155
+  /* "libpetsc4py.pyx":2170
  *     ops.destroy        = TSDestroy_Python
  *     ops.setup          = TSSetUp_Python
  *     ops.setfromoptions = TSSetFromOptions_Python             # <<<<<<<<<<<<<<
@@ -22072,7 +23900,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
  */
   __pyx_v_ops->setfromoptions = __pyx_f_11libpetsc4py_TSSetFromOptions_Python;
 
-  /* "libpetsc4py.pyx":2156
+  /* "libpetsc4py.pyx":2171
  *     ops.setup          = TSSetUp_Python
  *     ops.setfromoptions = TSSetFromOptions_Python
  *     ops.view           = TSView_Python             # <<<<<<<<<<<<<<
@@ -22081,7 +23909,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
  */
   __pyx_v_ops->view = __pyx_f_11libpetsc4py_TSView_Python;
 
-  /* "libpetsc4py.pyx":2157
+  /* "libpetsc4py.pyx":2172
  *     ops.setfromoptions = TSSetFromOptions_Python
  *     ops.view           = TSView_Python
  *     ops.step           = TSStep_Python             # <<<<<<<<<<<<<<
@@ -22090,7 +23918,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
  */
   __pyx_v_ops->step = __pyx_f_11libpetsc4py_TSStep_Python;
 
-  /* "libpetsc4py.pyx":2158
+  /* "libpetsc4py.pyx":2173
  *     ops.view           = TSView_Python
  *     ops.step           = TSStep_Python
  *     ops.rollback       = TSRollBack_Python             # <<<<<<<<<<<<<<
@@ -22099,7 +23927,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
  */
   __pyx_v_ops->rollback = __pyx_f_11libpetsc4py_TSRollBack_Python;
 
-  /* "libpetsc4py.pyx":2159
+  /* "libpetsc4py.pyx":2174
  *     ops.step           = TSStep_Python
  *     ops.rollback       = TSRollBack_Python
  *     ops.interpolate    = TSInterpolate_Python             # <<<<<<<<<<<<<<
@@ -22108,7 +23936,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
  */
   __pyx_v_ops->interpolate = __pyx_f_11libpetsc4py_TSInterpolate_Python;
 
-  /* "libpetsc4py.pyx":2160
+  /* "libpetsc4py.pyx":2175
  *     ops.rollback       = TSRollBack_Python
  *     ops.interpolate    = TSInterpolate_Python
  *     ops.evaluatestep   = TSEvaluateStep_Python             # <<<<<<<<<<<<<<
@@ -22117,7 +23945,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
  */
   __pyx_v_ops->evaluatestep = __pyx_f_11libpetsc4py_TSEvaluateStep_Python;
 
-  /* "libpetsc4py.pyx":2161
+  /* "libpetsc4py.pyx":2176
  *     ops.interpolate    = TSInterpolate_Python
  *     ops.evaluatestep   = TSEvaluateStep_Python
  *     ops.snesfunction   = SNESTSFormFunction_Python             # <<<<<<<<<<<<<<
@@ -22126,7 +23954,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
  */
   __pyx_v_ops->snesfunction = __pyx_f_11libpetsc4py_SNESTSFormFunction_Python;
 
-  /* "libpetsc4py.pyx":2162
+  /* "libpetsc4py.pyx":2177
  *     ops.evaluatestep   = TSEvaluateStep_Python
  *     ops.snesfunction   = SNESTSFormFunction_Python
  *     ops.snesjacobian   = SNESTSFormJacobian_Python             # <<<<<<<<<<<<<<
@@ -22135,28 +23963,28 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
  */
   __pyx_v_ops->snesjacobian = __pyx_f_11libpetsc4py_SNESTSFormJacobian_Python;
 
-  /* "libpetsc4py.pyx":2164
+  /* "libpetsc4py.pyx":2179
  *     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), ((char *)"TSPythonSetType_C"), ((PetscVoidFunction)__pyx_f_11libpetsc4py_TSPythonSetType_PYTHON))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 2164, __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 == ((int)-1))) __PYX_ERR(0, 2179, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2168
+  /* "libpetsc4py.pyx":2183
  *             <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_ERR(0, 2168, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2183, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_ctx = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "libpetsc4py.pyx":2169
+  /* "libpetsc4py.pyx":2184
  *     #
  *     cdef ctx = PyTS(NULL)
  *     ts.data = <void*> ctx             # <<<<<<<<<<<<<<
@@ -22165,7 +23993,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
  */
   __pyx_v_ts->data = ((void *)__pyx_v_ctx);
 
-  /* "libpetsc4py.pyx":2170
+  /* "libpetsc4py.pyx":2185
  *     cdef ctx = PyTS(NULL)
  *     ts.data = <void*> ctx
  *     Py_INCREF(<PyObject*>ts.data)             # <<<<<<<<<<<<<<
@@ -22174,7 +24002,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
  */
   Py_INCREF(((PyObject *)__pyx_v_ts->data));
 
-  /* "libpetsc4py.pyx":2171
+  /* "libpetsc4py.pyx":2186
  *     ts.data = <void*> ctx
  *     Py_INCREF(<PyObject*>ts.data)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -22184,7 +24012,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2145
+  /* "libpetsc4py.pyx":2160
  *     return  0
  * 
  * cdef PetscErrorCode TSCreate_Python(             # <<<<<<<<<<<<<<
@@ -22201,12 +24029,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSCreate_Python(TS __pyx_v_ts) {
   __Pyx_XDECREF(__pyx_v_ctx);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2173
+/* "libpetsc4py.pyx":2188
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSDestroy_Python(             # <<<<<<<<<<<<<<
@@ -22229,11 +24057,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSDestroy_Python(TS __pyx_v_ts) {
   PyObject *__pyx_t_10 = NULL;
   PyObject *__pyx_t_11 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TSDestroy_Python", 0);
 
-  /* "libpetsc4py.pyx":2177
+  /* "libpetsc4py.pyx":2192
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"TSDestroy_Python")             # <<<<<<<<<<<<<<
@@ -22242,16 +24070,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSDestroy_Python(TS __pyx_v_ts) {
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSDestroy_Python"));
 
-  /* "libpetsc4py.pyx":2178
+  /* "libpetsc4py.pyx":2193
  *     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), ((char *)"TSPythonSetType_C"), ((PetscVoidFunction)NULL))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2178, __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 == ((int)-1))) __PYX_ERR(0, 2193, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2182
+  /* "libpetsc4py.pyx":2197
  *             <PetscVoidFunction>NULL) )
  *     #
  *     if not Py_IsInitialized(): return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -22264,7 +24092,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSDestroy_Python(TS __pyx_v_ts) {
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":2183
+  /* "libpetsc4py.pyx":2198
  *     #
  *     if not Py_IsInitialized(): return FunctionEnd()
  *     try:             # <<<<<<<<<<<<<<
@@ -22273,7 +24101,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSDestroy_Python(TS __pyx_v_ts) {
  */
   /*try:*/ {
 
-    /* "libpetsc4py.pyx":2184
+    /* "libpetsc4py.pyx":2199
  *     if not Py_IsInitialized(): return FunctionEnd()
  *     try:
  *         addRef(ts)             # <<<<<<<<<<<<<<
@@ -22282,17 +24110,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSDestroy_Python(TS __pyx_v_ts) {
  */
     __pyx_f_11libpetsc4py_addRef(__pyx_v_ts);
 
-    /* "libpetsc4py.pyx":2185
+    /* "libpetsc4py.pyx":2200
  *     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_ERR(0, 2185, __pyx_L5_error)
+    __pyx_t_3 = TSPythonSetContext(__pyx_v_ts, NULL); if (unlikely(__pyx_t_3 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 2200, __pyx_L5_error)
   }
 
-  /* "libpetsc4py.pyx":2187
+  /* "libpetsc4py.pyx":2202
  *         TSPythonSetContext(ts, NULL)
  *     finally:
  *         delRef(ts)             # <<<<<<<<<<<<<<
@@ -22303,7 +24131,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSDestroy_Python(TS __pyx_v_ts) {
     /*normal exit:*/{
       __pyx_f_11libpetsc4py_delRef(__pyx_v_ts);
 
-      /* "libpetsc4py.pyx":2188
+      /* "libpetsc4py.pyx":2203
  *     finally:
  *         delRef(ts)
  *         Py_DECREF(<PyObject*>ts.data)             # <<<<<<<<<<<<<<
@@ -22312,7 +24140,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSDestroy_Python(TS __pyx_v_ts) {
  */
       Py_DECREF(((PyObject *)__pyx_v_ts->data));
 
-      /* "libpetsc4py.pyx":2189
+      /* "libpetsc4py.pyx":2204
  *         delRef(ts)
  *         Py_DECREF(<PyObject*>ts.data)
  *         ts.data = NULL             # <<<<<<<<<<<<<<
@@ -22338,7 +24166,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":2187
+        /* "libpetsc4py.pyx":2202
  *         TSPythonSetContext(ts, NULL)
  *     finally:
  *         delRef(ts)             # <<<<<<<<<<<<<<
@@ -22347,7 +24175,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSDestroy_Python(TS __pyx_v_ts) {
  */
         __pyx_f_11libpetsc4py_delRef(__pyx_v_ts);
 
-        /* "libpetsc4py.pyx":2188
+        /* "libpetsc4py.pyx":2203
  *     finally:
  *         delRef(ts)
  *         Py_DECREF(<PyObject*>ts.data)             # <<<<<<<<<<<<<<
@@ -22356,7 +24184,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSDestroy_Python(TS __pyx_v_ts) {
  */
         Py_DECREF(((PyObject *)__pyx_v_ts->data));
 
-        /* "libpetsc4py.pyx":2189
+        /* "libpetsc4py.pyx":2204
  *         delRef(ts)
  *         Py_DECREF(<PyObject*>ts.data)
  *         ts.data = NULL             # <<<<<<<<<<<<<<
@@ -22365,7 +24193,6 @@ 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);
@@ -22383,7 +24210,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSDestroy_Python(TS __pyx_v_ts) {
     __pyx_L6:;
   }
 
-  /* "libpetsc4py.pyx":2190
+  /* "libpetsc4py.pyx":2205
  *         Py_DECREF(<PyObject*>ts.data)
  *         ts.data = NULL
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -22393,7 +24220,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSDestroy_Python(TS __pyx_v_ts) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2173
+  /* "libpetsc4py.pyx":2188
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSDestroy_Python(             # <<<<<<<<<<<<<<
@@ -22408,12 +24235,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSDestroy_Python(TS __pyx_v_ts) {
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2192
+/* "libpetsc4py.pyx":2207
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSSetUp_Python(             # <<<<<<<<<<<<<<
@@ -22439,11 +24266,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetUp_Python(TS __pyx_v_ts) {
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TSSetUp_Python", 0);
 
-  /* "libpetsc4py.pyx":2196
+  /* "libpetsc4py.pyx":2211
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"TSSetUp_Python")             # <<<<<<<<<<<<<<
@@ -22452,7 +24279,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetUp_Python(TS __pyx_v_ts) {
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSSetUp_Python"));
 
-  /* "libpetsc4py.pyx":2198
+  /* "libpetsc4py.pyx":2213
  *     FunctionBegin(b"TSSetUp_Python")
  *     #
  *     cdef PetscVec vec_update = NULL             # <<<<<<<<<<<<<<
@@ -22461,34 +24288,34 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetUp_Python(TS __pyx_v_ts) {
  */
   __pyx_v_vec_update = NULL;
 
-  /* "libpetsc4py.pyx":2199
+  /* "libpetsc4py.pyx":2214
  *     #
  *     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_ERR(0, 2199, __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 == ((int)-1))) __PYX_ERR(0, 2214, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2200
+  /* "libpetsc4py.pyx":2215
  *     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), ((char *)"@ts.vec_update"), ((PetscObject)__pyx_v_vec_update))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2200, __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 == ((int)-1))) __PYX_ERR(0, 2215, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2203
+  /* "libpetsc4py.pyx":2218
  *                                 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_ERR(0, 2203, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecDestroy((&__pyx_v_vec_update))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2218, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2204
+  /* "libpetsc4py.pyx":2219
  *                                 <PetscObject>vec_update) )
  *     CHKERR( VecDestroy(&vec_update) )
  *     cdef PetscVec vec_dot = NULL             # <<<<<<<<<<<<<<
@@ -22497,34 +24324,34 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetUp_Python(TS __pyx_v_ts) {
  */
   __pyx_v_vec_dot = NULL;
 
-  /* "libpetsc4py.pyx":2205
+  /* "libpetsc4py.pyx":2220
  *     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_ERR(0, 2205, __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 == ((int)-1))) __PYX_ERR(0, 2220, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2206
+  /* "libpetsc4py.pyx":2221
  *     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), ((char *)"@ts.vec_dot"), ((PetscObject)__pyx_v_vec_dot))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2206, __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 == ((int)-1))) __PYX_ERR(0, 2221, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2209
+  /* "libpetsc4py.pyx":2224
  *                                 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_ERR(0, 2209, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecDestroy((&__pyx_v_vec_dot))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2224, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2212
+  /* "libpetsc4py.pyx":2227
  *     #
  *     cdef char name[2048]
  *     cdef PetscBool found = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -22533,30 +24360,30 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetUp_Python(TS __pyx_v_ts) {
  */
   __pyx_v_found = PETSC_FALSE;
 
-  /* "libpetsc4py.pyx":2213
+  /* "libpetsc4py.pyx":2228
  *     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_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2213, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2228, __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":2214
+    /* "libpetsc4py.pyx":2229
  *     cdef PetscBool found = PETSC_FALSE
  *     if PyTS(ts).self is None:
  *         CHKERR( PetscOptionsGetString(NULL,             # <<<<<<<<<<<<<<
  *                 getPrefix(ts),b"-ts_python_type",
  *                 name,sizeof(name),&found) )
  */
-    __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)
+    __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 == ((int)-1))) __PYX_ERR(0, 2229, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":2217
+    /* "libpetsc4py.pyx":2232
  *                 getPrefix(ts),b"-ts_python_type",
  *                 name,sizeof(name),&found) )
  *         if found and name[0]:             # <<<<<<<<<<<<<<
@@ -22573,17 +24400,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetUp_Python(TS __pyx_v_ts) {
     __pyx_L5_bool_binop_done:;
     if (__pyx_t_4) {
 
-      /* "libpetsc4py.pyx":2218
+      /* "libpetsc4py.pyx":2233
  *                 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_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)
+      __pyx_t_5 = __pyx_f_11libpetsc4py_TSPythonSetType_PYTHON(__pyx_v_ts, __pyx_v_name); if (unlikely(__pyx_t_5 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 2233, __pyx_L1_error)
+      __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(__pyx_t_5); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2233, __pyx_L1_error)
 
-      /* "libpetsc4py.pyx":2217
+      /* "libpetsc4py.pyx":2232
  *                 getPrefix(ts),b"-ts_python_type",
  *                 name,sizeof(name),&found) )
  *         if found and name[0]:             # <<<<<<<<<<<<<<
@@ -22592,7 +24419,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetUp_Python(TS __pyx_v_ts) {
  */
     }
 
-    /* "libpetsc4py.pyx":2213
+    /* "libpetsc4py.pyx":2228
  *     cdef char name[2048]
  *     cdef PetscBool found = PETSC_FALSE
  *     if PyTS(ts).self is None:             # <<<<<<<<<<<<<<
@@ -22601,21 +24428,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetUp_Python(TS __pyx_v_ts) {
  */
   }
 
-  /* "libpetsc4py.pyx":2219
+  /* "libpetsc4py.pyx":2234
  *         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_ERR(0, 2219, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2234, __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":2220
+    /* "libpetsc4py.pyx":2235
  *             CHKERR( TSPythonSetType_PYTHON(ts,name) )
  *     if PyTS(ts).self is None:
  *         return PetscSETERR(PETSC_ERR_USER,             # <<<<<<<<<<<<<<
@@ -22625,7 +24452,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetUp_Python(TS __pyx_v_ts) {
     __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
+    /* "libpetsc4py.pyx":2234
  *         if found and name[0]:
  *             CHKERR( TSPythonSetType_PYTHON(ts,name) )
  *     if PyTS(ts).self is None:             # <<<<<<<<<<<<<<
@@ -22634,22 +24461,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetUp_Python(TS __pyx_v_ts) {
  */
   }
 
-  /* "libpetsc4py.pyx":2226
+  /* "libpetsc4py.pyx":2241
  *             "-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_ERR(0, 2226, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2241, __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_ERR(0, 2226, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_setUp); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2241, __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":2227
+  /* "libpetsc4py.pyx":2242
  *     #
  *     cdef setUp = PyTS(ts).setUp
  *     if setUp is not None:             # <<<<<<<<<<<<<<
@@ -22660,18 +24487,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetUp_Python(TS __pyx_v_ts) {
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":2228
+    /* "libpetsc4py.pyx":2243
  *     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_ERR(0, 2228, __pyx_L1_error)
+    __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2243, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_INCREF(__pyx_v_setUp);
     __pyx_t_7 = __pyx_v_setUp; __pyx_t_8 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -22681,24 +24508,44 @@ 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_ERR(0, 2228, __pyx_L1_error)
+      __pyx_t_6 = __Pyx_PyObject_CallOneArg(__pyx_t_7, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2243, __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_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_ERR(0, 2228, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_6);
-      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_7)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_2};
+        __pyx_t_6 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2243, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+        __Pyx_GOTREF(__pyx_t_6);
+        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_2};
+        __pyx_t_6 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2243, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+        __Pyx_GOTREF(__pyx_t_6);
+        __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2243, __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_ERR(0, 2243, __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;
 
-    /* "libpetsc4py.pyx":2227
+    /* "libpetsc4py.pyx":2242
  *     #
  *     cdef setUp = PyTS(ts).setUp
  *     if setUp is not None:             # <<<<<<<<<<<<<<
@@ -22707,7 +24554,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetUp_Python(TS __pyx_v_ts) {
  */
   }
 
-  /* "libpetsc4py.pyx":2229
+  /* "libpetsc4py.pyx":2244
  *     if setUp is not None:
  *         setUp(TS_(ts))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -22717,7 +24564,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetUp_Python(TS __pyx_v_ts) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2192
+  /* "libpetsc4py.pyx":2207
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSSetUp_Python(             # <<<<<<<<<<<<<<
@@ -22738,12 +24585,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetUp_Python(TS __pyx_v_ts) {
   __Pyx_XDECREF(__pyx_v_setUp);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2231
+/* "libpetsc4py.pyx":2246
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSReset_Python(             # <<<<<<<<<<<<<<
@@ -22764,11 +24611,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSReset_Python(TS __pyx_v_ts) {
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TSReset_Python", 0);
 
-  /* "libpetsc4py.pyx":2235
+  /* "libpetsc4py.pyx":2250
  *     ) \
  *     except IERR with gil:
  *     if getRef(ts) == 0: return 0             # <<<<<<<<<<<<<<
@@ -22781,7 +24628,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSReset_Python(TS __pyx_v_ts) {
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":2236
+  /* "libpetsc4py.pyx":2251
  *     except IERR with gil:
  *     if getRef(ts) == 0: return 0
  *     FunctionBegin(b"TSReset_Python")             # <<<<<<<<<<<<<<
@@ -22790,40 +24637,40 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSReset_Python(TS __pyx_v_ts) {
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSReset_Python"));
 
-  /* "libpetsc4py.pyx":2238
+  /* "libpetsc4py.pyx":2253
  *     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), ((char *)"@ts.vec_update"), NULL)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 2238, __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 == ((int)-1))) __PYX_ERR(0, 2253, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2239
+  /* "libpetsc4py.pyx":2254
  *     #
  *     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), ((char *)"@ts.vec_dot"), NULL)); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(0, 2239, __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 == ((int)-1))) __PYX_ERR(0, 2254, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2241
+  /* "libpetsc4py.pyx":2256
  *     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_ERR(0, 2241, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2256, __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_ERR(0, 2241, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_reset); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2256, __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":2242
+  /* "libpetsc4py.pyx":2257
  *     #
  *     cdef reset = PyTS(ts).reset
  *     if reset is not None:             # <<<<<<<<<<<<<<
@@ -22834,18 +24681,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSReset_Python(TS __pyx_v_ts) {
   __pyx_t_5 = (__pyx_t_1 != 0);
   if (__pyx_t_5) {
 
-    /* "libpetsc4py.pyx":2243
+    /* "libpetsc4py.pyx":2258
  *     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_ERR(0, 2243, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2258, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_reset);
     __pyx_t_6 = __pyx_v_reset; __pyx_t_7 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_6))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
       __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
       if (likely(__pyx_t_7)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
@@ -22855,24 +24702,44 @@ 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_ERR(0, 2243, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2258, __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_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_ERR(0, 2243, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_4);
-      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_6)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_7, __pyx_t_3};
+        __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2258, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+        __Pyx_GOTREF(__pyx_t_4);
+        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_7, __pyx_t_3};
+        __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 2258, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+        __Pyx_GOTREF(__pyx_t_4);
+        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2258, __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_ERR(0, 2258, __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;
 
-    /* "libpetsc4py.pyx":2242
+    /* "libpetsc4py.pyx":2257
  *     #
  *     cdef reset = PyTS(ts).reset
  *     if reset is not None:             # <<<<<<<<<<<<<<
@@ -22881,7 +24748,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSReset_Python(TS __pyx_v_ts) {
  */
   }
 
-  /* "libpetsc4py.pyx":2244
+  /* "libpetsc4py.pyx":2259
  *     if reset is not None:
  *         reset(TS_(ts))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -22891,7 +24758,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSReset_Python(TS __pyx_v_ts) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2231
+  /* "libpetsc4py.pyx":2246
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSReset_Python(             # <<<<<<<<<<<<<<
@@ -22912,12 +24779,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSReset_Python(TS __pyx_v_ts) {
   __Pyx_XDECREF(__pyx_v_reset);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2246
+/* "libpetsc4py.pyx":2261
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSSetFromOptions_Python(             # <<<<<<<<<<<<<<
@@ -22944,11 +24811,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetFromOptions_Python(PetscOptionI
   PyObject *__pyx_t_9 = NULL;
   PyObject *__pyx_t_10 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TSSetFromOptions_Python", 0);
 
-  /* "libpetsc4py.pyx":2251
+  /* "libpetsc4py.pyx":2266
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"TSSetFromOptions_Python")             # <<<<<<<<<<<<<<
@@ -22957,20 +24824,20 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetFromOptions_Python(PetscOptionI
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSSetFromOptions_Python"));
 
-  /* "libpetsc4py.pyx":2252
+  /* "libpetsc4py.pyx":2267
  *     except IERR with gil:
  *     FunctionBegin(b"TSSetFromOptions_Python")
  *     cdef char name[2048], *defval = PyTS(ts).getname()             # <<<<<<<<<<<<<<
  *     cdef PetscBool found = PETSC_FALSE
  *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject
  */
-  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2252, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2267, __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_ERR(0, 2252, __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 == ((char *)NULL) && PyErr_Occurred())) __PYX_ERR(0, 2267, __pyx_L1_error)
   __pyx_v_defval = __pyx_t_2;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":2253
+  /* "libpetsc4py.pyx":2268
  *     FunctionBegin(b"TSSetFromOptions_Python")
  *     cdef char name[2048], *defval = PyTS(ts).getname()
  *     cdef PetscBool found = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -22979,7 +24846,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetFromOptions_Python(PetscOptionI
  */
   __pyx_v_found = PETSC_FALSE;
 
-  /* "libpetsc4py.pyx":2254
+  /* "libpetsc4py.pyx":2269
  *     cdef char name[2048], *defval = PyTS(ts).getname()
  *     cdef PetscBool found = PETSC_FALSE
  *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject             # <<<<<<<<<<<<<<
@@ -22988,16 +24855,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetFromOptions_Python(PetscOptionI
  */
   PetscOptionsObject = __pyx_v_PetscOptionsObject;
 
-  /* "libpetsc4py.pyx":2255
+  /* "libpetsc4py.pyx":2270
  *     cdef PetscBool found = PETSC_FALSE
  *     cdef PetscOptionItems *opts "PetscOptionsObject" = PetscOptionsObject
  *     CHKERR( PetscOptionsString(             # <<<<<<<<<<<<<<
  *             b"-ts_python_type",b"Python [package.]module[.{class|function}]",
  *             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)
+  __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 == ((int)-1))) __PYX_ERR(0, 2270, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2257
+  /* "libpetsc4py.pyx":2272
  *     CHKERR( PetscOptionsString(
  *             b"-ts_python_type",b"Python [package.]module[.{class|function}]",
  *             b"TSPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;             # <<<<<<<<<<<<<<
@@ -23006,7 +24873,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetFromOptions_Python(PetscOptionI
  */
   ((void)PetscOptionsObject);
 
-  /* "libpetsc4py.pyx":2258
+  /* "libpetsc4py.pyx":2273
  *             b"-ts_python_type",b"Python [package.]module[.{class|function}]",
  *             b"TSPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
  *     if found and name[0]:             # <<<<<<<<<<<<<<
@@ -23023,17 +24890,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetFromOptions_Python(PetscOptionI
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":2259
+    /* "libpetsc4py.pyx":2274
  *             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_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)
+    __pyx_t_6 = __pyx_f_11libpetsc4py_TSPythonSetType_PYTHON(__pyx_v_ts, __pyx_v_name); if (unlikely(__pyx_t_6 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 2274, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_11libpetsc4py_CHKERR(__pyx_t_6); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 2274, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":2258
+    /* "libpetsc4py.pyx":2273
  *             b"-ts_python_type",b"Python [package.]module[.{class|function}]",
  *             b"TSPythonSetType",defval,name,sizeof(name),&found) ); <void>opts;
  *     if found and name[0]:             # <<<<<<<<<<<<<<
@@ -23042,22 +24909,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetFromOptions_Python(PetscOptionI
  */
   }
 
-  /* "libpetsc4py.pyx":2261
+  /* "libpetsc4py.pyx":2276
  *         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_ERR(0, 2261, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2276, __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_ERR(0, 2261, __pyx_L1_error)
+  __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_setFromOptions); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2276, __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":2262
+  /* "libpetsc4py.pyx":2277
  *     #
  *     cdef setFromOptions = PyTS(ts).setFromOptions
  *     if setFromOptions is not None:             # <<<<<<<<<<<<<<
@@ -23068,18 +24935,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetFromOptions_Python(PetscOptionI
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (__pyx_t_5) {
 
-    /* "libpetsc4py.pyx":2263
+    /* "libpetsc4py.pyx":2278
  *     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_ERR(0, 2263, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2278, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_v_setFromOptions);
     __pyx_t_8 = __pyx_v_setFromOptions; __pyx_t_9 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_8))) {
+    if (CYTHON_UNPACK_METHODS && 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);
@@ -23089,24 +24956,44 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetFromOptions_Python(PetscOptionI
       }
     }
     if (!__pyx_t_9) {
-      __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_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2278, __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_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_ERR(0, 2263, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_7);
-      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_8)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_t_1};
+        __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2278, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+        __Pyx_GOTREF(__pyx_t_7);
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_t_1};
+        __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2278, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+        __Pyx_GOTREF(__pyx_t_7);
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2278, __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_ERR(0, 2278, __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;
 
-    /* "libpetsc4py.pyx":2262
+    /* "libpetsc4py.pyx":2277
  *     #
  *     cdef setFromOptions = PyTS(ts).setFromOptions
  *     if setFromOptions is not None:             # <<<<<<<<<<<<<<
@@ -23115,16 +25002,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetFromOptions_Python(PetscOptionI
  */
   }
 
-  /* "libpetsc4py.pyx":2264
+  /* "libpetsc4py.pyx":2279
  *     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_ERR(0, 2264, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_11libpetsc4py_CHKERR(SNESSetFromOptions(__pyx_v_ts->snes)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(0, 2279, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2265
+  /* "libpetsc4py.pyx":2280
  *         setFromOptions(TS_(ts))
  *     CHKERR( SNESSetFromOptions(ts.snes) )
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -23134,7 +25021,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetFromOptions_Python(PetscOptionI
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2246
+  /* "libpetsc4py.pyx":2261
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSSetFromOptions_Python(             # <<<<<<<<<<<<<<
@@ -23155,12 +25042,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSetFromOptions_Python(PetscOptionI
   __Pyx_XDECREF(__pyx_v_setFromOptions);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2267
+/* "libpetsc4py.pyx":2282
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSView_Python(             # <<<<<<<<<<<<<<
@@ -23180,14 +25067,13 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSView_Python(TS __pyx_v_ts, PetscVi
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
-  Py_ssize_t __pyx_t_9;
-  PyObject *__pyx_t_10 = NULL;
+  PyObject *__pyx_t_9 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TSView_Python", 0);
 
-  /* "libpetsc4py.pyx":2272
+  /* "libpetsc4py.pyx":2287
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"TSView_Python")             # <<<<<<<<<<<<<<
@@ -23196,34 +25082,34 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSView_Python(TS __pyx_v_ts, PetscVi
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSView_Python"));
 
-  /* "libpetsc4py.pyx":2273
+  /* "libpetsc4py.pyx":2288
  *     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_ERR(0, 2273, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2288, __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_ERR(0, 2273, __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 == ((int)-1))) __PYX_ERR(0, 2288, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "libpetsc4py.pyx":2274
+  /* "libpetsc4py.pyx":2289
  *     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_ERR(0, 2274, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2289, __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_ERR(0, 2274, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_view); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2289, __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":2275
+  /* "libpetsc4py.pyx":2290
  *     viewcontext(PyTS(ts), vwr)
  *     cdef view = PyTS(ts).view
  *     if view is not None:             # <<<<<<<<<<<<<<
@@ -23234,48 +25120,70 @@ 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":2276
+    /* "libpetsc4py.pyx":2291
  *     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_ERR(0, 2276, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2291, __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_ERR(0, 2276, __pyx_L1_error)
+    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Viewer_(__pyx_v_vwr)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2291, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_INCREF(__pyx_v_view);
     __pyx_t_7 = __pyx_v_view; __pyx_t_8 = NULL;
-    __pyx_t_9 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+    __pyx_t_2 = 0;
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
         __Pyx_INCREF(__pyx_t_8);
         __Pyx_INCREF(function);
         __Pyx_DECREF_SET(__pyx_t_7, function);
-        __pyx_t_9 = 1;
+        __pyx_t_2 = 1;
       }
     }
-    __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;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_7)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_t_1, __pyx_t_6};
+      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_2, 2+__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2291, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_8, __pyx_t_1, __pyx_t_6};
+      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_2, 2+__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2291, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_9 = PyTuple_New(2+__pyx_t_2); if (unlikely(!__pyx_t_9)) __PYX_ERR(0, 2291, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_9);
+      if (__pyx_t_8) {
+        __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+__pyx_t_2, __pyx_t_1);
+      __Pyx_GIVEREF(__pyx_t_6);
+      PyTuple_SET_ITEM(__pyx_t_9, 1+__pyx_t_2, __pyx_t_6);
+      __pyx_t_1 = 0;
+      __pyx_t_6 = 0;
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_7, __pyx_t_9, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2291, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     }
-    __Pyx_GIVEREF(__pyx_t_1);
-    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_1);
-    __Pyx_GIVEREF(__pyx_t_6);
-    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_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;
 
-    /* "libpetsc4py.pyx":2275
+    /* "libpetsc4py.pyx":2290
  *     viewcontext(PyTS(ts), vwr)
  *     cdef view = PyTS(ts).view
  *     if view is not None:             # <<<<<<<<<<<<<<
@@ -23284,7 +25192,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSView_Python(TS __pyx_v_ts, PetscVi
  */
   }
 
-  /* "libpetsc4py.pyx":2277
+  /* "libpetsc4py.pyx":2292
  *     if view is not None:
  *         view(TS_(ts), Viewer_(vwr))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -23294,7 +25202,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSView_Python(TS __pyx_v_ts, PetscVi
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2267
+  /* "libpetsc4py.pyx":2282
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSView_Python(             # <<<<<<<<<<<<<<
@@ -23309,19 +25217,19 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSView_Python(TS __pyx_v_ts, PetscVi
   __Pyx_XDECREF(__pyx_t_6);
   __Pyx_XDECREF(__pyx_t_7);
   __Pyx_XDECREF(__pyx_t_8);
-  __Pyx_XDECREF(__pyx_t_10);
+  __Pyx_XDECREF(__pyx_t_9);
   __Pyx_AddTraceback("libpetsc4py.TSView_Python", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = PETSC_ERR_PYTHON;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_view);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2279
+/* "libpetsc4py.pyx":2294
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSStep_Python(             # <<<<<<<<<<<<<<
@@ -23342,11 +25250,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python(TS __pyx_v_ts) {
   PyObject *__pyx_t_7 = NULL;
   PetscErrorCode __pyx_t_8;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TSStep_Python", 0);
 
-  /* "libpetsc4py.pyx":2283
+  /* "libpetsc4py.pyx":2298
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"TSStep_Python")             # <<<<<<<<<<<<<<
@@ -23355,22 +25263,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python(TS __pyx_v_ts) {
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSStep_Python"));
 
-  /* "libpetsc4py.pyx":2284
+  /* "libpetsc4py.pyx":2299
  *     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_ERR(0, 2284, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2299, __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_ERR(0, 2284, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_step); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2299, __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":2285
+  /* "libpetsc4py.pyx":2300
  *     FunctionBegin(b"TSStep_Python")
  *     cdef step = PyTS(ts).step
  *     if step is not None:             # <<<<<<<<<<<<<<
@@ -23381,18 +25289,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python(TS __pyx_v_ts) {
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":2286
+    /* "libpetsc4py.pyx":2301
  *     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_ERR(0, 2286, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2301, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_INCREF(__pyx_v_step);
     __pyx_t_5 = __pyx_v_step; __pyx_t_6 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
       __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
       if (likely(__pyx_t_6)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -23402,24 +25310,44 @@ 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_ERR(0, 2286, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2301, __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_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_ERR(0, 2286, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_1};
+        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2301, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_1};
+        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2301, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2301, __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_ERR(0, 2301, __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
+    /* "libpetsc4py.pyx":2300
  *     FunctionBegin(b"TSStep_Python")
  *     cdef step = PyTS(ts).step
  *     if step is not None:             # <<<<<<<<<<<<<<
@@ -23429,7 +25357,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python(TS __pyx_v_ts) {
     goto __pyx_L3;
   }
 
-  /* "libpetsc4py.pyx":2288
+  /* "libpetsc4py.pyx":2303
  *         step(TS_(ts))
  *     else:
  *         TSStep_Python_default(ts)             # <<<<<<<<<<<<<<
@@ -23437,11 +25365,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python(TS __pyx_v_ts) {
  * 
  */
   /*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_t_8 = __pyx_f_11libpetsc4py_TSStep_Python_default(__pyx_v_ts); if (unlikely(__pyx_t_8 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 2303, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "libpetsc4py.pyx":2289
+  /* "libpetsc4py.pyx":2304
  *     else:
  *         TSStep_Python_default(ts)
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -23451,7 +25379,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python(TS __pyx_v_ts) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2279
+  /* "libpetsc4py.pyx":2294
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSStep_Python(             # <<<<<<<<<<<<<<
@@ -23472,12 +25400,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python(TS __pyx_v_ts) {
   __Pyx_XDECREF(__pyx_v_step);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2291
+/* "libpetsc4py.pyx":2306
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSRollBack_Python(             # <<<<<<<<<<<<<<
@@ -23497,11 +25425,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSRollBack_Python(TS __pyx_v_ts) {
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TSRollBack_Python", 0);
 
-  /* "libpetsc4py.pyx":2295
+  /* "libpetsc4py.pyx":2310
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"TSRollBack_Python")             # <<<<<<<<<<<<<<
@@ -23510,22 +25438,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSRollBack_Python(TS __pyx_v_ts) {
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSRollBack_Python"));
 
-  /* "libpetsc4py.pyx":2296
+  /* "libpetsc4py.pyx":2311
  *     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_ERR(0, 2296, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2311, __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_ERR(0, 2296, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_rollback); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2311, __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":2297
+  /* "libpetsc4py.pyx":2312
  *     FunctionBegin(b"TSRollBack_Python")
  *     cdef rollback = PyTS(ts).rollback
  *     if rollback is None: return UNSUPPORTED(b"rollback")             # <<<<<<<<<<<<<<
@@ -23539,18 +25467,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSRollBack_Python(TS __pyx_v_ts) {
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":2298
+  /* "libpetsc4py.pyx":2313
  *     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_ERR(0, 2298, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2313, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(__pyx_v_rollback);
   __pyx_t_5 = __pyx_v_rollback; __pyx_t_6 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
     __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
     if (likely(__pyx_t_6)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -23560,24 +25488,44 @@ 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_ERR(0, 2298, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2313, __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_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_ERR(0, 2298, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_5)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_1};
+      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2313, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_6, __pyx_t_1};
+      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2313, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2313, __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_ERR(0, 2313, __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":2299
+  /* "libpetsc4py.pyx":2314
  *     if rollback is None: return UNSUPPORTED(b"rollback")
  *     rollback(TS_(ts))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -23587,7 +25535,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSRollBack_Python(TS __pyx_v_ts) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2291
+  /* "libpetsc4py.pyx":2306
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSRollBack_Python(             # <<<<<<<<<<<<<<
@@ -23608,12 +25556,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSRollBack_Python(TS __pyx_v_ts) {
   __Pyx_XDECREF(__pyx_v_rollback);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2301
+/* "libpetsc4py.pyx":2316
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSInterpolate_Python(             # <<<<<<<<<<<<<<
@@ -23633,14 +25581,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSInterpolate_Python(TS __pyx_v_ts,
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
-  Py_ssize_t __pyx_t_9;
+  int __pyx_t_9;
   PyObject *__pyx_t_10 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TSInterpolate_Python", 0);
 
-  /* "libpetsc4py.pyx":2307
+  /* "libpetsc4py.pyx":2322
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"TSInterpolate _Python")             # <<<<<<<<<<<<<<
@@ -23649,22 +25597,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSInterpolate_Python(TS __pyx_v_ts,
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSInterpolate _Python"));
 
-  /* "libpetsc4py.pyx":2308
+  /* "libpetsc4py.pyx":2323
  *     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_ERR(0, 2308, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2323, __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_ERR(0, 2308, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_interpolate); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2323, __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":2309
+  /* "libpetsc4py.pyx":2324
  *     FunctionBegin(b"TSInterpolate _Python")
  *     cdef interpolate = PyTS(ts).interpolate
  *     if interpolate is None: return UNSUPPORTED(b"interpolate")             # <<<<<<<<<<<<<<
@@ -23678,23 +25626,23 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSInterpolate_Python(TS __pyx_v_ts,
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":2310
+  /* "libpetsc4py.pyx":2325
  *     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_ERR(0, 2310, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2325, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = __pyx_f_11libpetsc4py_toReal(__pyx_v_t); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2310, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_11libpetsc4py_toReal(__pyx_v_t); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2325, __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_ERR(0, 2310, __pyx_L1_error)
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2325, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(__pyx_v_interpolate);
   __pyx_t_7 = __pyx_v_interpolate; __pyx_t_8 = NULL;
   __pyx_t_9 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
     __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
     if (likely(__pyx_t_8)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -23704,27 +25652,51 @@ 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_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;
-  }
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_5);
-  PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_5);
-  __Pyx_GIVEREF(__pyx_t_6);
-  PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_t_6);
-  __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_ERR(0, 2310, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_7)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_1, __pyx_t_5, __pyx_t_6};
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2325, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_1, __pyx_t_5, __pyx_t_6};
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2325, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+  } else
+  #endif
+  {
+    __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2325, __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;
+    }
+    __Pyx_GIVEREF(__pyx_t_1);
+    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_1);
+    __Pyx_GIVEREF(__pyx_t_5);
+    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_5);
+    __Pyx_GIVEREF(__pyx_t_6);
+    PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_t_6);
+    __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_ERR(0, 2325, __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":2311
+  /* "libpetsc4py.pyx":2326
  *     if interpolate is None: return UNSUPPORTED(b"interpolate")
  *     interpolate(TS_(ts),toReal(t),Vec_(x))
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -23734,7 +25706,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSInterpolate_Python(TS __pyx_v_ts,
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2301
+  /* "libpetsc4py.pyx":2316
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSInterpolate_Python(             # <<<<<<<<<<<<<<
@@ -23757,12 +25729,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSInterpolate_Python(TS __pyx_v_ts,
   __Pyx_XDECREF(__pyx_v_interpolate);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2313
+/* "libpetsc4py.pyx":2328
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSEvaluateStep_Python(             # <<<<<<<<<<<<<<
@@ -23783,15 +25755,15 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSEvaluateStep_Python(TS __pyx_v_ts,
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
-  Py_ssize_t __pyx_t_9;
+  int __pyx_t_9;
   PyObject *__pyx_t_10 = NULL;
   PetscBool __pyx_t_11;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TSEvaluateStep_Python", 0);
 
-  /* "libpetsc4py.pyx":2320
+  /* "libpetsc4py.pyx":2335
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"TSEvaluateStep _Python")             # <<<<<<<<<<<<<<
@@ -23800,22 +25772,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSEvaluateStep_Python(TS __pyx_v_ts,
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSEvaluateStep _Python"));
 
-  /* "libpetsc4py.pyx":2321
+  /* "libpetsc4py.pyx":2336
  *     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_ERR(0, 2321, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2336, __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_ERR(0, 2321, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_evaluatestep); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2336, __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":2322
+  /* "libpetsc4py.pyx":2337
  *     FunctionBegin(b"TSEvaluateStep _Python")
  *     cdef evaluatestep = PyTS(ts).evaluatestep
  *     if evaluatestep is None: return UNSUPPORTED(b"evaluatestep")             # <<<<<<<<<<<<<<
@@ -23829,23 +25801,23 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSEvaluateStep_Python(TS __pyx_v_ts,
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":2323
+  /* "libpetsc4py.pyx":2338
  *     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_ERR(0, 2323, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2338, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_5 = __pyx_f_11libpetsc4py_toInt(__pyx_v_o); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2323, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_11libpetsc4py_toInt(__pyx_v_o); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2338, __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_ERR(0, 2323, __pyx_L1_error)
+  __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2338, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(__pyx_v_evaluatestep);
   __pyx_t_7 = __pyx_v_evaluatestep; __pyx_t_8 = NULL;
   __pyx_t_9 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
     __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
     if (likely(__pyx_t_8)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -23855,28 +25827,52 @@ 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_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;
-  }
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_1);
-  __Pyx_GIVEREF(__pyx_t_5);
-  PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_5);
-  __Pyx_GIVEREF(__pyx_t_6);
-  PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_t_6);
-  __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_ERR(0, 2323, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_2);
-  __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_7)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_1, __pyx_t_5, __pyx_t_6};
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2338, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_1, __pyx_t_5, __pyx_t_6};
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2338, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+    __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;
+  } else
+  #endif
+  {
+    __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2338, __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;
+    }
+    __Pyx_GIVEREF(__pyx_t_1);
+    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_1);
+    __Pyx_GIVEREF(__pyx_t_5);
+    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_5);
+    __Pyx_GIVEREF(__pyx_t_6);
+    PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_t_6);
+    __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_ERR(0, 2338, __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":2324
+  /* "libpetsc4py.pyx":2339
  *     if evaluatestep is None: return UNSUPPORTED(b"evaluatestep")
  *     cdef done = evaluatestep(TS_(ts),toInt(o),Vec_(x))
  *     if flag != NULL:             # <<<<<<<<<<<<<<
@@ -23886,14 +25882,14 @@ 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":2325
+    /* "libpetsc4py.pyx":2340
  *     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_ERR(0, 2325, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_done); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 2340, __pyx_L1_error)
     if (__pyx_t_4) {
       __pyx_t_11 = PETSC_TRUE;
     } else {
@@ -23901,7 +25897,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSEvaluateStep_Python(TS __pyx_v_ts,
     }
     (__pyx_v_flag[0]) = __pyx_t_11;
 
-    /* "libpetsc4py.pyx":2324
+    /* "libpetsc4py.pyx":2339
  *     if evaluatestep is None: return UNSUPPORTED(b"evaluatestep")
  *     cdef done = evaluatestep(TS_(ts),toInt(o),Vec_(x))
  *     if flag != NULL:             # <<<<<<<<<<<<<<
@@ -23911,18 +25907,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSEvaluateStep_Python(TS __pyx_v_ts,
     goto __pyx_L4;
   }
 
-  /* "libpetsc4py.pyx":2326
+  /* "libpetsc4py.pyx":2341
  *     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_ERR(0, 2326, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_done); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(0, 2341, __pyx_L1_error)
   __pyx_t_3 = ((!__pyx_t_4) != 0);
   if (__pyx_t_3) {
 
-    /* "libpetsc4py.pyx":2327
+    /* "libpetsc4py.pyx":2342
  *         flag[0] = PETSC_TRUE if done else PETSC_FALSE
  *     elif not done:
  *         return PetscSETERR(PETSC_ERR_USER, "Cannot evaluate step")             # <<<<<<<<<<<<<<
@@ -23932,7 +25928,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSEvaluateStep_Python(TS __pyx_v_ts,
     __pyx_r = __pyx_f_11libpetsc4py_PetscSETERR(PETSC_ERR_USER, ((char *)"Cannot evaluate step"));
     goto __pyx_L0;
 
-    /* "libpetsc4py.pyx":2326
+    /* "libpetsc4py.pyx":2341
  *     if flag != NULL:
  *         flag[0] = PETSC_TRUE if done else PETSC_FALSE
  *     elif not done:             # <<<<<<<<<<<<<<
@@ -23942,7 +25938,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSEvaluateStep_Python(TS __pyx_v_ts,
   }
   __pyx_L4:;
 
-  /* "libpetsc4py.pyx":2328
+  /* "libpetsc4py.pyx":2343
  *     elif not done:
  *         return PetscSETERR(PETSC_ERR_USER, "Cannot evaluate step")
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -23952,7 +25948,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSEvaluateStep_Python(TS __pyx_v_ts,
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2313
+  /* "libpetsc4py.pyx":2328
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSEvaluateStep_Python(             # <<<<<<<<<<<<<<
@@ -23976,12 +25972,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSEvaluateStep_Python(TS __pyx_v_ts,
   __Pyx_XDECREF(__pyx_v_done);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2330
+/* "libpetsc4py.pyx":2345
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESTSFormFunction_Python(             # <<<<<<<<<<<<<<
@@ -24006,26 +26002,26 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormFunction_Python(SNES __pyx
   PyObject *__pyx_t_7 = NULL;
   int __pyx_t_8;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("SNESTSFormFunction_Python", 0);
 
-  /* "libpetsc4py.pyx":2338
+  /* "libpetsc4py.pyx":2353
  *     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_ERR(0, 2338, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2353, __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_ERR(0, 2338, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_formSNESFunction); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2353, __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":2339
+  /* "libpetsc4py.pyx":2354
  *     #
  *     cdef formSNESFunction = PyTS(ts).formSNESFunction
  *     if formSNESFunction is not None:             # <<<<<<<<<<<<<<
@@ -24036,22 +26032,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormFunction_Python(SNES __pyx
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":2340
+    /* "libpetsc4py.pyx":2355
  *     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_ERR(0, 2340, __pyx_L1_error)
+    __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2355, __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_ERR(0, 2340, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2355, __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_ERR(0, 2340, __pyx_L1_error)
+    __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_f)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2355, __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_ERR(0, 2340, __pyx_L1_error)
+    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2355, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_7 = PyTuple_New(4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2340, __pyx_L1_error)
+    __pyx_t_7 = PyTuple_New(4); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2355, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_2);
@@ -24068,7 +26064,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormFunction_Python(SNES __pyx
     __pyx_v_args = ((PyObject*)__pyx_t_7);
     __pyx_t_7 = 0;
 
-    /* "libpetsc4py.pyx":2341
+    /* "libpetsc4py.pyx":2356
  *     if formSNESFunction is not None:
  *         args = (SNES_(snes),Vec_(x),Vec_(f),TS_(ts))
  *         formSNESFunction(args)             # <<<<<<<<<<<<<<
@@ -24077,7 +26073,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormFunction_Python(SNES __pyx
  */
     __Pyx_INCREF(__pyx_v_formSNESFunction);
     __pyx_t_6 = __pyx_v_formSNESFunction; __pyx_t_5 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_6))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
       __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_6);
       if (likely(__pyx_t_5)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
@@ -24087,23 +26083,41 @@ 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_ERR(0, 2341, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_6, __pyx_v_args); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2356, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
     } else {
-      __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_ERR(0, 2341, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_7);
-      __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_6)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_v_args};
+        __pyx_t_7 = __Pyx_PyFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2356, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+        __Pyx_GOTREF(__pyx_t_7);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_6)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_v_args};
+        __pyx_t_7 = __Pyx_PyCFunction_FastCall(__pyx_t_6, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2356, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+        __Pyx_GOTREF(__pyx_t_7);
+      } else
+      #endif
+      {
+        __pyx_t_1 = PyTuple_New(1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2356, __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_ERR(0, 2356, __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":2342
+    /* "libpetsc4py.pyx":2357
  *         args = (SNES_(snes),Vec_(x),Vec_(f),TS_(ts))
  *         formSNESFunction(args)
  *         return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -24113,7 +26127,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormFunction_Python(SNES __pyx
     __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
     goto __pyx_L0;
 
-    /* "libpetsc4py.pyx":2339
+    /* "libpetsc4py.pyx":2354
  *     #
  *     cdef formSNESFunction = PyTS(ts).formSNESFunction
  *     if formSNESFunction is not None:             # <<<<<<<<<<<<<<
@@ -24122,7 +26136,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormFunction_Python(SNES __pyx
  */
   }
 
-  /* "libpetsc4py.pyx":2344
+  /* "libpetsc4py.pyx":2359
  *         return FunctionEnd()
  *     #
  *     cdef PetscVec dx = NULL             # <<<<<<<<<<<<<<
@@ -24131,16 +26145,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormFunction_Python(SNES __pyx
  */
   __pyx_v_dx = NULL;
 
-  /* "libpetsc4py.pyx":2345
+  /* "libpetsc4py.pyx":2360
  *     #
  *     cdef PetscVec dx = NULL
  *     CHKERR( PetscObjectQuery(             # <<<<<<<<<<<<<<
  *             <PetscObject>ts,
  *              b"@ts.vec_dot",
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(0, 2360, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2350
+  /* "libpetsc4py.pyx":2365
  *              <PetscObject*>&dx) )
  *     #
  *     cdef PetscReal t = ts.ptime + ts.time_step             # <<<<<<<<<<<<<<
@@ -24149,7 +26163,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormFunction_Python(SNES __pyx
  */
   __pyx_v_t = (__pyx_v_ts->ptime + __pyx_v_ts->time_step);
 
-  /* "libpetsc4py.pyx":2351
+  /* "libpetsc4py.pyx":2366
  *     #
  *     cdef PetscReal t = ts.ptime + ts.time_step
  *     cdef PetscReal a = 1.0/ts.time_step             # <<<<<<<<<<<<<<
@@ -24158,34 +26172,34 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormFunction_Python(SNES __pyx
  */
   __pyx_v_a = (1.0 / __pyx_v_ts->time_step);
 
-  /* "libpetsc4py.pyx":2352
+  /* "libpetsc4py.pyx":2367
  *     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_ERR(0, 2352, __pyx_L1_error)
+  __pyx_t_8 = __pyx_f_11libpetsc4py_CHKERR(VecCopy(__pyx_v_ts->vec_sol, __pyx_v_dx)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(0, 2367, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2353
+  /* "libpetsc4py.pyx":2368
  *     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_ERR(0, 2353, __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 == ((int)-1))) __PYX_ERR(0, 2368, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2354
+  /* "libpetsc4py.pyx":2369
  *     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_ERR(0, 2354, __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 == ((int)-1))) __PYX_ERR(0, 2369, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2355
+  /* "libpetsc4py.pyx":2370
  *     CHKERR( VecAXPBY(dx,+a,-a,x)            )
  *     CHKERR( TSComputeIFunction(ts,t,x,dx,f,PETSC_FALSE) )
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -24195,7 +26209,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormFunction_Python(SNES __pyx
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2330
+  /* "libpetsc4py.pyx":2345
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESTSFormFunction_Python(             # <<<<<<<<<<<<<<
@@ -24217,12 +26231,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormFunction_Python(SNES __pyx
   __Pyx_XDECREF(__pyx_v_args);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2357
+/* "libpetsc4py.pyx":2372
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESTSFormJacobian_Python(             # <<<<<<<<<<<<<<
@@ -24248,26 +26262,26 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormJacobian_Python(SNES __pyx
   PyObject *__pyx_t_8 = NULL;
   int __pyx_t_9;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("SNESTSFormJacobian_Python", 0);
 
-  /* "libpetsc4py.pyx":2366
+  /* "libpetsc4py.pyx":2381
  *     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_ERR(0, 2366, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2381, __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_ERR(0, 2366, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_formSNESJacobian); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2381, __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":2367
+  /* "libpetsc4py.pyx":2382
  *     #
  *     cdef formSNESJacobian = PyTS(ts).formSNESJacobian
  *     if formSNESJacobian is not None:             # <<<<<<<<<<<<<<
@@ -24278,24 +26292,24 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormJacobian_Python(SNES __pyx
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":2368
+    /* "libpetsc4py.pyx":2383
  *     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_ERR(0, 2368, __pyx_L1_error)
+    __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_SNES_(__pyx_v_snes)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2383, __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_ERR(0, 2368, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2383, __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_ERR(0, 2368, __pyx_L1_error)
+    __pyx_t_5 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_A)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2383, __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_ERR(0, 2368, __pyx_L1_error)
+    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Mat_(__pyx_v_B)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2383, __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_ERR(0, 2368, __pyx_L1_error)
+    __pyx_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2383, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_8 = PyTuple_New(5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2368, __pyx_L1_error)
+    __pyx_t_8 = PyTuple_New(5); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2383, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_GIVEREF(__pyx_t_2);
     PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_2);
@@ -24315,18 +26329,18 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormJacobian_Python(SNES __pyx
     __pyx_v_args = ((PyObject*)__pyx_t_8);
     __pyx_t_8 = 0;
 
-    /* "libpetsc4py.pyx":2369
+    /* "libpetsc4py.pyx":2384
  *     if formSNESJacobian is not None:
  *         args = (SNES_(snes),Vec_(x),Mat_(A),Mat_(B),TS_(ts))
  *         formSNESJacobian(*args)             # <<<<<<<<<<<<<<
  *         return FunctionEnd()
  *     #
  */
-    __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_t_8 = __Pyx_PyObject_Call(__pyx_v_formSNESJacobian, __pyx_v_args, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2384, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-    /* "libpetsc4py.pyx":2370
+    /* "libpetsc4py.pyx":2385
  *         args = (SNES_(snes),Vec_(x),Mat_(A),Mat_(B),TS_(ts))
  *         formSNESJacobian(*args)
  *         return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -24336,7 +26350,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormJacobian_Python(SNES __pyx
     __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
     goto __pyx_L0;
 
-    /* "libpetsc4py.pyx":2367
+    /* "libpetsc4py.pyx":2382
  *     #
  *     cdef formSNESJacobian = PyTS(ts).formSNESJacobian
  *     if formSNESJacobian is not None:             # <<<<<<<<<<<<<<
@@ -24345,7 +26359,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormJacobian_Python(SNES __pyx
  */
   }
 
-  /* "libpetsc4py.pyx":2372
+  /* "libpetsc4py.pyx":2387
  *         return FunctionEnd()
  *     #
  *     cdef PetscVec dx = NULL             # <<<<<<<<<<<<<<
@@ -24354,16 +26368,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormJacobian_Python(SNES __pyx
  */
   __pyx_v_dx = NULL;
 
-  /* "libpetsc4py.pyx":2373
+  /* "libpetsc4py.pyx":2388
  *     #
  *     cdef PetscVec dx = NULL
  *     CHKERR( PetscObjectQuery(             # <<<<<<<<<<<<<<
  *             <PetscObject>ts,
  *              b"@ts.vec_dot",
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(0, 2388, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2378
+  /* "libpetsc4py.pyx":2393
  *              <PetscObject*>&dx) )
  *     #
  *     cdef PetscReal t = ts.ptime + ts.time_step             # <<<<<<<<<<<<<<
@@ -24372,7 +26386,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormJacobian_Python(SNES __pyx
  */
   __pyx_v_t = (__pyx_v_ts->ptime + __pyx_v_ts->time_step);
 
-  /* "libpetsc4py.pyx":2379
+  /* "libpetsc4py.pyx":2394
  *     #
  *     cdef PetscReal t = ts.ptime + ts.time_step
  *     cdef PetscReal a = 1.0/ts.time_step             # <<<<<<<<<<<<<<
@@ -24381,34 +26395,34 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormJacobian_Python(SNES __pyx
  */
   __pyx_v_a = (1.0 / __pyx_v_ts->time_step);
 
-  /* "libpetsc4py.pyx":2380
+  /* "libpetsc4py.pyx":2395
  *     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_ERR(0, 2380, __pyx_L1_error)
+  __pyx_t_9 = __pyx_f_11libpetsc4py_CHKERR(VecCopy(__pyx_v_ts->vec_sol, __pyx_v_dx)); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 2395, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2381
+  /* "libpetsc4py.pyx":2396
  *     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_ERR(0, 2381, __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 == ((int)-1))) __PYX_ERR(0, 2396, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2382
+  /* "libpetsc4py.pyx":2397
  *     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_ERR(0, 2382, __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 == ((int)-1))) __PYX_ERR(0, 2397, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2383
+  /* "libpetsc4py.pyx":2398
  *     CHKERR( VecAXPBY(dx,+a,-a,x)                  )
  *     CHKERR( TSComputeIJacobian(ts,t,x,dx,a,A,B,PETSC_FALSE) )
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -24418,7 +26432,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormJacobian_Python(SNES __pyx
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2357
+  /* "libpetsc4py.pyx":2372
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode SNESTSFormJacobian_Python(             # <<<<<<<<<<<<<<
@@ -24441,12 +26455,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_SNESTSFormJacobian_Python(SNES __pyx
   __Pyx_XDECREF(__pyx_v_args);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2385
+/* "libpetsc4py.pyx":2400
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSSolveStep_Python(             # <<<<<<<<<<<<<<
@@ -24468,15 +26482,14 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSolveStep_Python(TS __pyx_v_ts, Pe
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
-  Py_ssize_t __pyx_t_9;
+  int __pyx_t_9;
   PyObject *__pyx_t_10 = NULL;
-  int __pyx_t_11;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TSSolveStep_Python", 0);
 
-  /* "libpetsc4py.pyx":2391
+  /* "libpetsc4py.pyx":2406
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"TSSolveStep_Python")             # <<<<<<<<<<<<<<
@@ -24485,22 +26498,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSolveStep_Python(TS __pyx_v_ts, Pe
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSSolveStep_Python"));
 
-  /* "libpetsc4py.pyx":2393
+  /* "libpetsc4py.pyx":2408
  *     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_ERR(0, 2393, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2408, __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_ERR(0, 2393, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_solveStep); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2408, __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":2394
+  /* "libpetsc4py.pyx":2409
  *     #
  *     cdef solveStep = PyTS(ts).solveStep
  *     if solveStep is not None:             # <<<<<<<<<<<<<<
@@ -24511,23 +26524,23 @@ 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":2395
+    /* "libpetsc4py.pyx":2410
  *     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_ERR(0, 2395, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 2410, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = PyFloat_FromDouble(((double)__pyx_v_t)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2395, __pyx_L1_error)
+    __pyx_t_5 = PyFloat_FromDouble(((double)__pyx_v_t)); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2410, __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_ERR(0, 2395, __pyx_L1_error)
+    __pyx_t_6 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2410, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_INCREF(__pyx_v_solveStep);
     __pyx_t_7 = __pyx_v_solveStep; __pyx_t_8 = NULL;
     __pyx_t_9 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_7))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_7))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
@@ -24537,27 +26550,51 @@ 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_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;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_7)) {
+      PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_1, __pyx_t_5, __pyx_t_6};
+      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2410, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __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;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_7)) {
+      PyObject *__pyx_temp[4] = {__pyx_t_8, __pyx_t_1, __pyx_t_5, __pyx_t_6};
+      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_7, __pyx_temp+1-__pyx_t_9, 3+__pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2410, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+      __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;
+    } else
+    #endif
+    {
+      __pyx_t_10 = PyTuple_New(3+__pyx_t_9); if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2410, __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;
+      }
+      __Pyx_GIVEREF(__pyx_t_1);
+      PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_1);
+      __Pyx_GIVEREF(__pyx_t_5);
+      PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_5);
+      __Pyx_GIVEREF(__pyx_t_6);
+      PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_t_6);
+      __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_ERR(0, 2410, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_2);
+      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     }
-    __Pyx_GIVEREF(__pyx_t_1);
-    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_9, __pyx_t_1);
-    __Pyx_GIVEREF(__pyx_t_5);
-    PyTuple_SET_ITEM(__pyx_t_10, 1+__pyx_t_9, __pyx_t_5);
-    __Pyx_GIVEREF(__pyx_t_6);
-    PyTuple_SET_ITEM(__pyx_t_10, 2+__pyx_t_9, __pyx_t_6);
-    __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_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":2396
+    /* "libpetsc4py.pyx":2411
  *     if solveStep is not None:
  *         solveStep(TS_(ts), <double>t, Vec_(x))
  *         return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -24567,7 +26604,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSolveStep_Python(TS __pyx_v_ts, Pe
     __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
     goto __pyx_L0;
 
-    /* "libpetsc4py.pyx":2394
+    /* "libpetsc4py.pyx":2409
  *     #
  *     cdef solveStep = PyTS(ts).solveStep
  *     if solveStep is not None:             # <<<<<<<<<<<<<<
@@ -24576,7 +26613,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSolveStep_Python(TS __pyx_v_ts, Pe
  */
   }
 
-  /* "libpetsc4py.pyx":2398
+  /* "libpetsc4py.pyx":2413
  *         return FunctionEnd()
  *     #
  *     cdef PetscInt nits = 0, lits = 0             # <<<<<<<<<<<<<<
@@ -24586,34 +26623,34 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSolveStep_Python(TS __pyx_v_ts, Pe
   __pyx_v_nits = 0;
   __pyx_v_lits = 0;
 
-  /* "libpetsc4py.pyx":2399
+  /* "libpetsc4py.pyx":2414
  *     #
  *     cdef PetscInt nits = 0, lits = 0
  *     CHKERR( SNESSolve(ts.snes, NULL, x) )             # <<<<<<<<<<<<<<
  *     CHKERR( SNESGetIterationNumber(ts.snes,&nits) )
  *     CHKERR( SNESGetLinearSolveIterations(ts.snes,&lits) )
  */
-  __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)
+  __pyx_t_9 = __pyx_f_11libpetsc4py_CHKERR(SNESSolve(__pyx_v_ts->snes, NULL, __pyx_v_x)); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 2414, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2400
+  /* "libpetsc4py.pyx":2415
  *     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_ERR(0, 2400, __pyx_L1_error)
+  __pyx_t_9 = __pyx_f_11libpetsc4py_CHKERR(SNESGetIterationNumber(__pyx_v_ts->snes, (&__pyx_v_nits))); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 2415, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2401
+  /* "libpetsc4py.pyx":2416
  *     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_ERR(0, 2401, __pyx_L1_error)
+  __pyx_t_9 = __pyx_f_11libpetsc4py_CHKERR(SNESGetLinearSolveIterations(__pyx_v_ts->snes, (&__pyx_v_lits))); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(0, 2416, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2402
+  /* "libpetsc4py.pyx":2417
  *     CHKERR( SNESGetIterationNumber(ts.snes,&nits) )
  *     CHKERR( SNESGetLinearSolveIterations(ts.snes,&lits) )
  *     ts.snes_its += nits             # <<<<<<<<<<<<<<
@@ -24622,7 +26659,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":2403
+  /* "libpetsc4py.pyx":2418
  *     CHKERR( SNESGetLinearSolveIterations(ts.snes,&lits) )
  *     ts.snes_its += nits
  *     ts.ksp_its  += lits             # <<<<<<<<<<<<<<
@@ -24631,7 +26668,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":2404
+  /* "libpetsc4py.pyx":2419
  *     ts.snes_its += nits
  *     ts.ksp_its  += lits
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -24641,7 +26678,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSolveStep_Python(TS __pyx_v_ts, Pe
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2385
+  /* "libpetsc4py.pyx":2400
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSSolveStep_Python(             # <<<<<<<<<<<<<<
@@ -24664,12 +26701,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSSolveStep_Python(TS __pyx_v_ts, Pe
   __Pyx_XDECREF(__pyx_v_solveStep);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2406
+/* "libpetsc4py.pyx":2421
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSAdaptStep_Python(             # <<<<<<<<<<<<<<
@@ -24693,17 +26730,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
   PyObject *__pyx_t_7 = NULL;
   PyObject *__pyx_t_8 = NULL;
   PyObject *__pyx_t_9 = NULL;
-  Py_ssize_t __pyx_t_10;
+  int __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();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TSAdaptStep_Python", 0);
 
-  /* "libpetsc4py.pyx":2414
+  /* "libpetsc4py.pyx":2429
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"TSAdaptStep_Python")             # <<<<<<<<<<<<<<
@@ -24712,7 +26749,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSAdaptStep_Python"));
 
-  /* "libpetsc4py.pyx":2415
+  /* "libpetsc4py.pyx":2430
  *     except IERR with gil:
  *     FunctionBegin(b"TSAdaptStep_Python")
  *     nextdt[0] = ts.time_step             # <<<<<<<<<<<<<<
@@ -24722,7 +26759,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":2416
+  /* "libpetsc4py.pyx":2431
  *     FunctionBegin(b"TSAdaptStep_Python")
  *     nextdt[0] = ts.time_step
  *     stepok[0] = PETSC_TRUE             # <<<<<<<<<<<<<<
@@ -24731,22 +26768,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
  */
   (__pyx_v_stepok[0]) = PETSC_TRUE;
 
-  /* "libpetsc4py.pyx":2418
+  /* "libpetsc4py.pyx":2433
  *     stepok[0] = PETSC_TRUE
  *     #
  *     cdef adaptStep = PyTS(ts).adaptStep             # <<<<<<<<<<<<<<
  *     if adaptStep is None: return FunctionEnd()
  *     cdef object retval
  */
-  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2418, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_PyTS(__pyx_v_ts)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2433, __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_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_adaptStep); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2433, __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":2419
+  /* "libpetsc4py.pyx":2434
  *     #
  *     cdef adaptStep = PyTS(ts).adaptStep
  *     if adaptStep is None: return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -24760,23 +26797,23 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
     goto __pyx_L0;
   }
 
-  /* "libpetsc4py.pyx":2423
+  /* "libpetsc4py.pyx":2438
  *     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_2 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2423, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_11libpetsc4py_TS_(__pyx_v_ts)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2438, __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_t_6 = PyFloat_FromDouble(((double)__pyx_v_t)); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2438, __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_t_7 = ((PyObject *)__pyx_f_11libpetsc4py_Vec_(__pyx_v_x)); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2438, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_INCREF(__pyx_v_adaptStep);
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -24786,28 +26823,52 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
       __pyx_t_10 = 1;
     }
   }
-  __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;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_8)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_t_2, __pyx_t_6, __pyx_t_7};
+    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2438, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_8)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_9, __pyx_t_2, __pyx_t_6, __pyx_t_7};
+    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_8, __pyx_temp+1-__pyx_t_10, 3+__pyx_t_10); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2438, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  } else
+  #endif
+  {
+    __pyx_t_11 = PyTuple_New(3+__pyx_t_10); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2438, __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_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_11, 2+__pyx_t_10, __pyx_t_7);
+    __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_ERR(0, 2438, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
   }
-  __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_11, 2+__pyx_t_10, __pyx_t_7);
-  __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_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":2424
+  /* "libpetsc4py.pyx":2439
  *     cdef bint   ok
  *     retval = adaptStep(TS_(ts), <double>t, Vec_(x))
  *     if retval is None: pass             # <<<<<<<<<<<<<<
@@ -24820,7 +26881,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
     goto __pyx_L4;
   }
 
-  /* "libpetsc4py.pyx":2425
+  /* "libpetsc4py.pyx":2440
  *     retval = adaptStep(TS_(ts), <double>t, Vec_(x))
  *     if retval is None: pass
  *     elif isinstance(retval, float):             # <<<<<<<<<<<<<<
@@ -24831,17 +26892,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
   __pyx_t_5 = (__pyx_t_4 != 0);
   if (__pyx_t_5) {
 
-    /* "libpetsc4py.pyx":2426
+    /* "libpetsc4py.pyx":2441
  *     if retval is None: pass
  *     elif isinstance(retval, float):
  *         dt = retval             # <<<<<<<<<<<<<<
  *         nextdt[0] = <PetscReal>dt
  *         stepok[0] = PETSC_TRUE
  */
-    __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_t_12 = __pyx_PyFloat_AsDouble(__pyx_v_retval); if (unlikely((__pyx_t_12 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2441, __pyx_L1_error)
     __pyx_v_dt = __pyx_t_12;
 
-    /* "libpetsc4py.pyx":2427
+    /* "libpetsc4py.pyx":2442
  *     elif isinstance(retval, float):
  *         dt = retval
  *         nextdt[0] = <PetscReal>dt             # <<<<<<<<<<<<<<
@@ -24850,7 +26911,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
  */
     (__pyx_v_nextdt[0]) = ((PetscReal)__pyx_v_dt);
 
-    /* "libpetsc4py.pyx":2428
+    /* "libpetsc4py.pyx":2443
  *         dt = retval
  *         nextdt[0] = <PetscReal>dt
  *         stepok[0] = PETSC_TRUE             # <<<<<<<<<<<<<<
@@ -24859,7 +26920,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
  */
     (__pyx_v_stepok[0]) = PETSC_TRUE;
 
-    /* "libpetsc4py.pyx":2425
+    /* "libpetsc4py.pyx":2440
  *     retval = adaptStep(TS_(ts), <double>t, Vec_(x))
  *     if retval is None: pass
  *     elif isinstance(retval, float):             # <<<<<<<<<<<<<<
@@ -24869,7 +26930,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
     goto __pyx_L4;
   }
 
-  /* "libpetsc4py.pyx":2429
+  /* "libpetsc4py.pyx":2444
  *         nextdt[0] = <PetscReal>dt
  *         stepok[0] = PETSC_TRUE
  *     elif isinstance(retval, bool):             # <<<<<<<<<<<<<<
@@ -24878,22 +26939,22 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
  */
   __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_t_5 = PyObject_IsInstance(__pyx_v_retval, __pyx_t_3); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(0, 2444, __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":2430
+    /* "libpetsc4py.pyx":2445
  *         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_4 = __Pyx_PyObject_IsTrue(__pyx_v_retval); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2430, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_retval); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2445, __pyx_L1_error)
     __pyx_v_ok = __pyx_t_4;
 
-    /* "libpetsc4py.pyx":2431
+    /* "libpetsc4py.pyx":2446
  *     elif isinstance(retval, bool):
  *         ok = retval
  *         nextdt[0] = ts.time_step             # <<<<<<<<<<<<<<
@@ -24903,7 +26964,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":2432
+    /* "libpetsc4py.pyx":2447
  *         ok = retval
  *         nextdt[0] = ts.time_step
  *         stepok[0] = PETSC_TRUE if ok else PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -24917,7 +26978,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
     }
     (__pyx_v_stepok[0]) = __pyx_t_13;
 
-    /* "libpetsc4py.pyx":2429
+    /* "libpetsc4py.pyx":2444
  *         nextdt[0] = <PetscReal>dt
  *         stepok[0] = PETSC_TRUE
  *     elif isinstance(retval, bool):             # <<<<<<<<<<<<<<
@@ -24927,7 +26988,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
     goto __pyx_L4;
   }
 
-  /* "libpetsc4py.pyx":2434
+  /* "libpetsc4py.pyx":2449
  *         stepok[0] = PETSC_TRUE if ok else PETSC_FALSE
  *     else:
  *         dt, ok = retval             # <<<<<<<<<<<<<<
@@ -24937,7 +26998,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
   /*else*/ {
     if ((likely(PyTuple_CheckExact(__pyx_v_retval))) || (PyList_CheckExact(__pyx_v_retval))) {
       PyObject* sequence = __pyx_v_retval;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -24945,9 +27006,9 @@ 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_ERR(0, 2434, __pyx_L1_error)
+        __PYX_ERR(0, 2449, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
@@ -24958,21 +27019,21 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
       __Pyx_INCREF(__pyx_t_3);
       __Pyx_INCREF(__pyx_t_8);
       #else
-      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2434, __pyx_L1_error)
+      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 2449, __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_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(0, 2449, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       #endif
     } else {
       Py_ssize_t index = -1;
-      __pyx_t_11 = PyObject_GetIter(__pyx_v_retval); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2434, __pyx_L1_error)
+      __pyx_t_11 = PyObject_GetIter(__pyx_v_retval); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2449, __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)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_14(__pyx_t_11), 2) < 0) __PYX_ERR(0, 2449, __pyx_L1_error)
       __pyx_t_14 = NULL;
       __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
       goto __pyx_L6_unpacking_done;
@@ -24980,17 +27041,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
       __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
       __pyx_t_14 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      __PYX_ERR(0, 2434, __pyx_L1_error)
+      __PYX_ERR(0, 2449, __pyx_L1_error)
       __pyx_L6_unpacking_done:;
     }
-    __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_t_12 = __pyx_PyFloat_AsDouble(__pyx_t_3); if (unlikely((__pyx_t_12 == (double)-1) && PyErr_Occurred())) __PYX_ERR(0, 2449, __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_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(0, 2449, __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":2435
+    /* "libpetsc4py.pyx":2450
  *     else:
  *         dt, ok = retval
  *         nextdt[0] = <PetscReal>dt             # <<<<<<<<<<<<<<
@@ -24999,7 +27060,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
  */
     (__pyx_v_nextdt[0]) = ((PetscReal)__pyx_v_dt);
 
-    /* "libpetsc4py.pyx":2436
+    /* "libpetsc4py.pyx":2451
  *         dt, ok = retval
  *         nextdt[0] = <PetscReal>dt
  *         stepok[0] = PETSC_TRUE if ok else PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -25015,7 +27076,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
   }
   __pyx_L4:;
 
-  /* "libpetsc4py.pyx":2437
+  /* "libpetsc4py.pyx":2452
  *         nextdt[0] = <PetscReal>dt
  *         stepok[0] = PETSC_TRUE if ok else PETSC_FALSE
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -25025,7 +27086,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2406
+  /* "libpetsc4py.pyx":2421
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSAdaptStep_Python(             # <<<<<<<<<<<<<<
@@ -25049,12 +27110,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSAdaptStep_Python(TS __pyx_v_ts, Pe
   __Pyx_XDECREF(__pyx_v_retval);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2439
+/* "libpetsc4py.pyx":2454
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSStep_Python_default(             # <<<<<<<<<<<<<<
@@ -25078,11 +27139,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
   int __pyx_t_5;
   int __pyx_t_6;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TSStep_Python_default", 0);
 
-  /* "libpetsc4py.pyx":2443
+  /* "libpetsc4py.pyx":2458
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"TSStep_Python_default")             # <<<<<<<<<<<<<<
@@ -25091,7 +27152,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"TSStep_Python_default"));
 
-  /* "libpetsc4py.pyx":2444
+  /* "libpetsc4py.pyx":2459
  *     except IERR with gil:
  *     FunctionBegin(b"TSStep_Python_default")
  *     cdef PetscVec vec_update = NULL             # <<<<<<<<<<<<<<
@@ -25100,16 +27161,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
  */
   __pyx_v_vec_update = NULL;
 
-  /* "libpetsc4py.pyx":2445
+  /* "libpetsc4py.pyx":2460
  *     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), ((char *)"@ts.vec_update"), ((PetscObject *)(&__pyx_v_vec_update)))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2445, __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 == ((int)-1))) __PYX_ERR(0, 2460, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2450
+  /* "libpetsc4py.pyx":2465
  *              <PetscObject*>&vec_update) )
  *     #
  *     cdef PetscInt  r = 0             # <<<<<<<<<<<<<<
@@ -25118,7 +27179,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
  */
   __pyx_v_r = 0;
 
-  /* "libpetsc4py.pyx":2451
+  /* "libpetsc4py.pyx":2466
  *     #
  *     cdef PetscInt  r = 0
  *     cdef PetscReal tt = ts.ptime             # <<<<<<<<<<<<<<
@@ -25128,7 +27189,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
   __pyx_t_2 = __pyx_v_ts->ptime;
   __pyx_v_tt = __pyx_t_2;
 
-  /* "libpetsc4py.pyx":2452
+  /* "libpetsc4py.pyx":2467
  *     cdef PetscInt  r = 0
  *     cdef PetscReal tt = ts.ptime
  *     cdef PetscReal dt = ts.time_step             # <<<<<<<<<<<<<<
@@ -25138,7 +27199,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
   __pyx_t_2 = __pyx_v_ts->time_step;
   __pyx_v_dt = __pyx_t_2;
 
-  /* "libpetsc4py.pyx":2453
+  /* "libpetsc4py.pyx":2468
  *     cdef PetscReal tt = ts.ptime
  *     cdef PetscReal dt = ts.time_step
  *     cdef PetscBool accept  = PETSC_TRUE             # <<<<<<<<<<<<<<
@@ -25147,7 +27208,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
  */
   __pyx_v_accept = PETSC_TRUE;
 
-  /* "libpetsc4py.pyx":2454
+  /* "libpetsc4py.pyx":2469
  *     cdef PetscReal dt = ts.time_step
  *     cdef PetscBool accept  = PETSC_TRUE
  *     cdef PetscBool stageok = PETSC_TRUE             # <<<<<<<<<<<<<<
@@ -25156,7 +27217,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
  */
   __pyx_v_stageok = PETSC_TRUE;
 
-  /* "libpetsc4py.pyx":2455
+  /* "libpetsc4py.pyx":2470
  *     cdef PetscBool accept  = PETSC_TRUE
  *     cdef PetscBool stageok = PETSC_TRUE
  *     for r from 0 <= r < ts.max_reject:             # <<<<<<<<<<<<<<
@@ -25166,7 +27227,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
   __pyx_t_3 = __pyx_v_ts->max_reject;
   for (__pyx_v_r = 0; __pyx_v_r < __pyx_t_3; __pyx_v_r++) {
 
-    /* "libpetsc4py.pyx":2456
+    /* "libpetsc4py.pyx":2471
  *     cdef PetscBool stageok = PETSC_TRUE
  *     for r from 0 <= r < ts.max_reject:
  *         tt = ts.ptime + ts.time_step             # <<<<<<<<<<<<<<
@@ -25175,52 +27236,52 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
  */
     __pyx_v_tt = (__pyx_v_ts->ptime + __pyx_v_ts->time_step);
 
-    /* "libpetsc4py.pyx":2457
+    /* "libpetsc4py.pyx":2472
  *     for r from 0 <= r < ts.max_reject:
  *         tt = ts.ptime + ts.time_step
  *         CHKERR( VecCopy(ts.vec_sol,vec_update) )             # <<<<<<<<<<<<<<
  *         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_ERR(0, 2457, __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 == ((int)-1))) __PYX_ERR(0, 2472, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":2458
+    /* "libpetsc4py.pyx":2473
  *         tt = ts.ptime + ts.time_step
  *         CHKERR( VecCopy(ts.vec_sol,vec_update) )
  *         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(TSPreStage(__pyx_v_ts, (__pyx_v_tt + __pyx_v_dt))); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(0, 2458, __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 == ((int)-1))) __PYX_ERR(0, 2473, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":2459
+    /* "libpetsc4py.pyx":2474
  *         CHKERR( VecCopy(ts.vec_sol,vec_update) )
  *         CHKERR( TSPreStage(ts,tt+dt) )
  *         TSSolveStep_Python(ts,tt,vec_update)             # <<<<<<<<<<<<<<
  *         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_ERR(0, 2459, __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 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 2474, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":2460
+    /* "libpetsc4py.pyx":2475
  *         CHKERR( TSPreStage(ts,tt+dt) )
  *         TSSolveStep_Python(ts,tt,vec_update)
  *         CHKERR( TSPostStage(ts,tt+dt,0,&vec_update) );             # <<<<<<<<<<<<<<
  *         CHKERR( TSAdaptCheckStage(ts.adapt,ts,tt+dt,vec_update,&stageok) );
  *         if not stageok:
  */
-    __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)
+    __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 == ((int)-1))) __PYX_ERR(0, 2475, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":2461
+    /* "libpetsc4py.pyx":2476
  *         TSSolveStep_Python(ts,tt,vec_update)
  *         CHKERR( TSPostStage(ts,tt+dt,0,&vec_update) );
  *         CHKERR( TSAdaptCheckStage(ts.adapt,ts,tt+dt,vec_update,&stageok) );             # <<<<<<<<<<<<<<
  *         if not stageok:
  *             ts.reject += 1
  */
-    __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)
+    __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 == ((int)-1))) __PYX_ERR(0, 2476, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":2462
+    /* "libpetsc4py.pyx":2477
  *         CHKERR( TSPostStage(ts,tt+dt,0,&vec_update) );
  *         CHKERR( TSAdaptCheckStage(ts.adapt,ts,tt+dt,vec_update,&stageok) );
  *         if not stageok:             # <<<<<<<<<<<<<<
@@ -25230,7 +27291,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
     __pyx_t_5 = ((!__pyx_v_stageok) != 0);
     if (__pyx_t_5) {
 
-      /* "libpetsc4py.pyx":2463
+      /* "libpetsc4py.pyx":2478
  *         CHKERR( TSAdaptCheckStage(ts.adapt,ts,tt+dt,vec_update,&stageok) );
  *         if not stageok:
  *             ts.reject += 1             # <<<<<<<<<<<<<<
@@ -25239,7 +27300,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
  */
       __pyx_v_ts->reject = (__pyx_v_ts->reject + 1);
 
-      /* "libpetsc4py.pyx":2464
+      /* "libpetsc4py.pyx":2479
  *         if not stageok:
  *             ts.reject += 1
  *             continue             # <<<<<<<<<<<<<<
@@ -25248,7 +27309,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
  */
       goto __pyx_L3_continue;
 
-      /* "libpetsc4py.pyx":2462
+      /* "libpetsc4py.pyx":2477
  *         CHKERR( TSPostStage(ts,tt+dt,0,&vec_update) );
  *         CHKERR( TSAdaptCheckStage(ts.adapt,ts,tt+dt,vec_update,&stageok) );
  *         if not stageok:             # <<<<<<<<<<<<<<
@@ -25257,16 +27318,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
  */
     }
 
-    /* "libpetsc4py.pyx":2465
+    /* "libpetsc4py.pyx":2480
  *             ts.reject += 1
  *             continue
  *         TSAdaptStep_Python(ts,tt,vec_update,&dt,&accept)             # <<<<<<<<<<<<<<
  *         if not accept:
  *             ts.time_step = dt
  */
-    __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)
+    __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 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 2480, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":2466
+    /* "libpetsc4py.pyx":2481
  *             continue
  *         TSAdaptStep_Python(ts,tt,vec_update,&dt,&accept)
  *         if not accept:             # <<<<<<<<<<<<<<
@@ -25276,7 +27337,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
     __pyx_t_5 = ((!__pyx_v_accept) != 0);
     if (__pyx_t_5) {
 
-      /* "libpetsc4py.pyx":2467
+      /* "libpetsc4py.pyx":2482
  *         TSAdaptStep_Python(ts,tt,vec_update,&dt,&accept)
  *         if not accept:
  *             ts.time_step = dt             # <<<<<<<<<<<<<<
@@ -25285,7 +27346,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
  */
       __pyx_v_ts->time_step = __pyx_v_dt;
 
-      /* "libpetsc4py.pyx":2468
+      /* "libpetsc4py.pyx":2483
  *         if not accept:
  *             ts.time_step = dt
  *             ts.reject += 1             # <<<<<<<<<<<<<<
@@ -25294,7 +27355,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
  */
       __pyx_v_ts->reject = (__pyx_v_ts->reject + 1);
 
-      /* "libpetsc4py.pyx":2469
+      /* "libpetsc4py.pyx":2484
  *             ts.time_step = dt
  *             ts.reject += 1
  *             continue             # <<<<<<<<<<<<<<
@@ -25303,7 +27364,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
  */
       goto __pyx_L3_continue;
 
-      /* "libpetsc4py.pyx":2466
+      /* "libpetsc4py.pyx":2481
  *             continue
  *         TSAdaptStep_Python(ts,tt,vec_update,&dt,&accept)
  *         if not accept:             # <<<<<<<<<<<<<<
@@ -25312,16 +27373,16 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
  */
     }
 
-    /* "libpetsc4py.pyx":2470
+    /* "libpetsc4py.pyx":2485
  *             ts.reject += 1
  *             continue
  *         CHKERR( VecCopy(vec_update,ts.vec_sol) )             # <<<<<<<<<<<<<<
  *         ts.ptime += ts.time_step
  *         ts.time_step = dt
  */
-    __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)
+    __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(VecCopy(__pyx_v_vec_update, __pyx_v_ts->vec_sol)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2485, __pyx_L1_error)
 
-    /* "libpetsc4py.pyx":2471
+    /* "libpetsc4py.pyx":2486
  *             continue
  *         CHKERR( VecCopy(vec_update,ts.vec_sol) )
  *         ts.ptime += ts.time_step             # <<<<<<<<<<<<<<
@@ -25330,7 +27391,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
  */
     __pyx_v_ts->ptime = (__pyx_v_ts->ptime + __pyx_v_ts->time_step);
 
-    /* "libpetsc4py.pyx":2472
+    /* "libpetsc4py.pyx":2487
  *         CHKERR( VecCopy(vec_update,ts.vec_sol) )
  *         ts.ptime += ts.time_step
  *         ts.time_step = dt             # <<<<<<<<<<<<<<
@@ -25339,7 +27400,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
  */
     __pyx_v_ts->time_step = __pyx_v_dt;
 
-    /* "libpetsc4py.pyx":2473
+    /* "libpetsc4py.pyx":2488
  *         ts.ptime += ts.time_step
  *         ts.time_step = dt
  *         break             # <<<<<<<<<<<<<<
@@ -25351,7 +27412,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
   }
   __pyx_L4_break:;
 
-  /* "libpetsc4py.pyx":2474
+  /* "libpetsc4py.pyx":2489
  *         ts.time_step = dt
  *         break
  *     if (not stageok or not accept) and ts.reason == 0:             # <<<<<<<<<<<<<<
@@ -25375,7 +27436,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
   __pyx_L8_bool_binop_done:;
   if (__pyx_t_5) {
 
-    /* "libpetsc4py.pyx":2475
+    /* "libpetsc4py.pyx":2490
  *         break
  *     if (not stageok or not accept) and ts.reason == 0:
  *         ts.reason = TS_DIVERGED_STEP_REJECTED             # <<<<<<<<<<<<<<
@@ -25384,7 +27445,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
  */
     __pyx_v_ts->reason = TS_DIVERGED_STEP_REJECTED;
 
-    /* "libpetsc4py.pyx":2474
+    /* "libpetsc4py.pyx":2489
  *         ts.time_step = dt
  *         break
  *     if (not stageok or not accept) and ts.reason == 0:             # <<<<<<<<<<<<<<
@@ -25393,7 +27454,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
  */
   }
 
-  /* "libpetsc4py.pyx":2476
+  /* "libpetsc4py.pyx":2491
  *     if (not stageok or not accept) and ts.reason == 0:
  *         ts.reason = TS_DIVERGED_STEP_REJECTED
  *     <void>r # silent unused warning             # <<<<<<<<<<<<<<
@@ -25402,7 +27463,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
  */
   ((void)__pyx_v_r);
 
-  /* "libpetsc4py.pyx":2477
+  /* "libpetsc4py.pyx":2492
  *         ts.reason = TS_DIVERGED_STEP_REJECTED
  *     <void>r # silent unused warning
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -25412,7 +27473,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2439
+  /* "libpetsc4py.pyx":2454
  *     return FunctionEnd()
  * 
  * cdef PetscErrorCode TSStep_Python_default(             # <<<<<<<<<<<<<<
@@ -25427,12 +27488,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_TSStep_Python_default(TS __pyx_v_ts)
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2481
+/* "libpetsc4py.pyx":2496
  * # --------------------------------------------------------------------
  * 
  * cdef PetscErrorCode PetscPythonMonitorSet_Python(             # <<<<<<<<<<<<<<
@@ -25464,11 +27525,11 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
   PyObject *(*__pyx_t_10)(PyObject *);
   PyObject *__pyx_t_11 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("PetscPythonMonitorSet_Python", 0);
 
-  /* "libpetsc4py.pyx":2486
+  /* "libpetsc4py.pyx":2501
  *     ) \
  *     except IERR with gil:
  *     FunctionBegin(b"PetscPythonMonitorSet_Python")             # <<<<<<<<<<<<<<
@@ -25477,7 +27538,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PetscPythonMonitorSet_Python"));
 
-  /* "libpetsc4py.pyx":2487
+  /* "libpetsc4py.pyx":2502
  *     except IERR with gil:
  *     FunctionBegin(b"PetscPythonMonitorSet_Python")
  *     assert obj_p != NULL             # <<<<<<<<<<<<<<
@@ -25488,12 +27549,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_ERR(0, 2487, __pyx_L1_error)
+      __PYX_ERR(0, 2502, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "libpetsc4py.pyx":2488
+  /* "libpetsc4py.pyx":2503
  *     FunctionBegin(b"PetscPythonMonitorSet_Python")
  *     assert obj_p != NULL
  *     assert url_p != NULL             # <<<<<<<<<<<<<<
@@ -25504,12 +27565,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_ERR(0, 2488, __pyx_L1_error)
+      __PYX_ERR(0, 2503, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "libpetsc4py.pyx":2489
+  /* "libpetsc4py.pyx":2504
  *     assert obj_p != NULL
  *     assert url_p != NULL
  *     assert url_p[0] != 0             # <<<<<<<<<<<<<<
@@ -25520,12 +27581,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_ERR(0, 2489, __pyx_L1_error)
+      __PYX_ERR(0, 2504, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "libpetsc4py.pyx":2491
+  /* "libpetsc4py.pyx":2506
  *     assert url_p[0] != 0
  *     #
  *     cdef PetscClassId classid = 0             # <<<<<<<<<<<<<<
@@ -25534,41 +27595,41 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
  */
   __pyx_v_classid = 0;
 
-  /* "libpetsc4py.pyx":2492
+  /* "libpetsc4py.pyx":2507
  *     #
  *     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_ERR(0, 2492, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PetscObjectGetClassId(__pyx_v_obj_p, (&__pyx_v_classid))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2507, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2493
+  /* "libpetsc4py.pyx":2508
  *     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_ERR(0, 2493, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup(__pyx_v_classid)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2508, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_klass = ((PyTypeObject*)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":2494
+  /* "libpetsc4py.pyx":2509
  *     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_ERR(0, 2494, __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, 2509, __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_ERR(0, 2494, __pyx_L1_error)
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_Object))))) __PYX_ERR(0, 2509, __pyx_L1_error)
   __pyx_v_ob = ((struct PyPetscObjectObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":2495
+  /* "libpetsc4py.pyx":2510
  *     cdef type klass = PyPetscType_Lookup(classid)
  *     cdef Object ob = klass()
  *     ob.obj[0] = newRef(obj_p)             # <<<<<<<<<<<<<<
@@ -25577,41 +27638,41 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
  */
   (__pyx_v_ob->obj[0]) = __pyx_f_11libpetsc4py_newRef(__pyx_v_obj_p);
 
-  /* "libpetsc4py.pyx":2497
+  /* "libpetsc4py.pyx":2512
  *     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_ERR(0, 2497, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_11libpetsc4py_bytes2str(__pyx_v_url_p); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2512, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_url = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":2498
+  /* "libpetsc4py.pyx":2513
  *     #
  *     cdef url = bytes2str(url_p)
  *     if ':' in url:             # <<<<<<<<<<<<<<
  *         path, names = parse_url(url)
  *     else:
  */
-  __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_3 = (__Pyx_PySequence_ContainsTF(__pyx_kp_s_, __pyx_v_url, Py_EQ)); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(0, 2513, __pyx_L1_error)
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "libpetsc4py.pyx":2499
+    /* "libpetsc4py.pyx":2514
  *     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_ERR(0, 2499, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_11libpetsc4py_parse_url(__pyx_v_url); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2514, __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;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -25619,9 +27680,9 @@ 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_ERR(0, 2499, __pyx_L1_error)
+        __PYX_ERR(0, 2514, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); 
@@ -25632,15 +27693,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_ERR(0, 2499, __pyx_L1_error)
+      __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(0, 2514, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2499, __pyx_L1_error)
+      __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2514, __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_ERR(0, 2499, __pyx_L1_error)
+      __pyx_t_7 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2514, __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;
@@ -25648,7 +27709,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_ERR(0, 2499, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(0, 2514, __pyx_L1_error)
       __pyx_t_8 = NULL;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       goto __pyx_L5_unpacking_done;
@@ -25656,7 +27717,7 @@ 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_ERR(0, 2499, __pyx_L1_error)
+      __PYX_ERR(0, 2514, __pyx_L1_error)
       __pyx_L5_unpacking_done:;
     }
     __pyx_v_path = __pyx_t_5;
@@ -25664,7 +27725,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
     __pyx_v_names = __pyx_t_6;
     __pyx_t_6 = 0;
 
-    /* "libpetsc4py.pyx":2498
+    /* "libpetsc4py.pyx":2513
  *     #
  *     cdef url = bytes2str(url_p)
  *     if ':' in url:             # <<<<<<<<<<<<<<
@@ -25674,7 +27735,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
     goto __pyx_L3;
   }
 
-  /* "libpetsc4py.pyx":2501
+  /* "libpetsc4py.pyx":2516
  *         path, names = parse_url(url)
  *     else:
  *         path, names = url, 'monitor'             # <<<<<<<<<<<<<<
@@ -25693,55 +27754,55 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
   }
   __pyx_L3:;
 
-  /* "libpetsc4py.pyx":2502
+  /* "libpetsc4py.pyx":2517
  *     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_ERR(0, 2502, __pyx_L1_error)
+  __pyx_t_6 = __pyx_f_11libpetsc4py_load_module(__pyx_v_path); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2517, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __pyx_v_module = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "libpetsc4py.pyx":2503
+  /* "libpetsc4py.pyx":2518
  *         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_ERR(0, 2503, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_v_names, __pyx_n_s_split); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2518, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __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_t_2 = __Pyx_PyObject_Call(__pyx_t_6, __pyx_tuple__6, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2518, __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_ERR(0, 2503, __pyx_L1_error)
+    __pyx_t_9 = -1; __pyx_t_6 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(0, 2518, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_10 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2503, __pyx_L1_error)
+    __pyx_t_10 = Py_TYPE(__pyx_t_6)->tp_iternext; if (unlikely(!__pyx_t_10)) __PYX_ERR(0, 2518, __pyx_L1_error)
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   for (;;) {
     if (likely(!__pyx_t_10)) {
       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_ERR(0, 2503, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __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, 2518, __pyx_L1_error)
         #else
-        __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_t_2 = PySequence_ITEM(__pyx_t_6, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2518, __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_ERR(0, 2503, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __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, 2518, __pyx_L1_error)
         #else
-        __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_t_2 = PySequence_ITEM(__pyx_t_6, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2518, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
         #endif
       }
@@ -25750,8 +27811,8 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
       if (unlikely(!__pyx_t_2)) {
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
-          if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(0, 2503, __pyx_L1_error)
+          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
+          else __PYX_ERR(0, 2518, __pyx_L1_error)
         }
         break;
       }
@@ -25760,19 +27821,19 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
     __Pyx_XDECREF_SET(__pyx_v_attr, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "libpetsc4py.pyx":2504
+    /* "libpetsc4py.pyx":2519
  *     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_ERR(0, 2504, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_GetAttr(__pyx_v_module, __pyx_v_attr); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2519, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_XDECREF_SET(__pyx_v_monitor, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "libpetsc4py.pyx":2505
+    /* "libpetsc4py.pyx":2520
  *     for attr in names.split(','):
  *         monitor = getattr(module, attr)
  *         if isinstance(monitor, type):             # <<<<<<<<<<<<<<
@@ -25783,7 +27844,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
     __pyx_t_3 = (__pyx_t_4 != 0);
     if (__pyx_t_3) {
 
-      /* "libpetsc4py.pyx":2506
+      /* "libpetsc4py.pyx":2521
  *         monitor = getattr(module, attr)
  *         if isinstance(monitor, type):
  *             monitor = monitor(ob)             # <<<<<<<<<<<<<<
@@ -25792,7 +27853,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
  */
       __Pyx_INCREF(__pyx_v_monitor);
       __pyx_t_5 = __pyx_v_monitor; __pyx_t_7 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_5))) {
+      if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
         __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5);
         if (likely(__pyx_t_7)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -25802,24 +27863,42 @@ 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_ERR(0, 2506, __pyx_L1_error)
+        __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, ((PyObject *)__pyx_v_ob)); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2521, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
       } else {
-        __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_ERR(0, 2506, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_2);
-        __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+        #if CYTHON_FAST_PYCALL
+        if (PyFunction_Check(__pyx_t_5)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_7, ((PyObject *)__pyx_v_ob)};
+          __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2521, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+          __Pyx_GOTREF(__pyx_t_2);
+        } else
+        #endif
+        #if CYTHON_FAST_PYCCALL
+        if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+          PyObject *__pyx_temp[2] = {__pyx_t_7, ((PyObject *)__pyx_v_ob)};
+          __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2521, __pyx_L1_error)
+          __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+          __Pyx_GOTREF(__pyx_t_2);
+        } else
+        #endif
+        {
+          __pyx_t_11 = PyTuple_New(1+1); if (unlikely(!__pyx_t_11)) __PYX_ERR(0, 2521, __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_ERR(0, 2521, __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;
 
-      /* "libpetsc4py.pyx":2505
+      /* "libpetsc4py.pyx":2520
  *     for attr in names.split(','):
  *         monitor = getattr(module, attr)
  *         if isinstance(monitor, type):             # <<<<<<<<<<<<<<
@@ -25828,17 +27907,17 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
  */
     }
 
-    /* "libpetsc4py.pyx":2507
+    /* "libpetsc4py.pyx":2522
  *         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_ERR(0, 2507, __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, 2522, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_t_11 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
       __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_5);
       if (likely(__pyx_t_11)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -25848,23 +27927,41 @@ 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_ERR(0, 2507, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_v_monitor); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2522, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
     } else {
-      __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_ERR(0, 2507, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_11, __pyx_v_monitor};
+        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2522, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_11, __pyx_v_monitor};
+        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 2522, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_11); __pyx_t_11 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+      } else
+      #endif
+      {
+        __pyx_t_7 = PyTuple_New(1+1); if (unlikely(!__pyx_t_7)) __PYX_ERR(0, 2522, __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_ERR(0, 2522, __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":2503
+    /* "libpetsc4py.pyx":2518
  *         path, names = url, 'monitor'
  *     module = load_module(path)
  *     for attr in names.split(','):             # <<<<<<<<<<<<<<
@@ -25874,7 +27971,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
   }
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-  /* "libpetsc4py.pyx":2509
+  /* "libpetsc4py.pyx":2524
  *         ob.setMonitor(monitor)
  *     #
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -25884,7 +27981,7 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2481
+  /* "libpetsc4py.pyx":2496
  * # --------------------------------------------------------------------
  * 
  * cdef PetscErrorCode PetscPythonMonitorSet_Python(             # <<<<<<<<<<<<<<
@@ -25912,12 +28009,12 @@ static PetscErrorCode __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python(PetscOb
   __Pyx_XDECREF(__pyx_v_monitor);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "libpetsc4py.pyx":2537
+/* "libpetsc4py.pyx":2552
  * 
  * 
  * cdef public PetscErrorCode PetscPythonRegisterAll() except IERR:             # <<<<<<<<<<<<<<
@@ -25931,7 +28028,7 @@ PetscErrorCode PetscPythonRegisterAll(void) {
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("PetscPythonRegisterAll", 0);
 
-  /* "libpetsc4py.pyx":2538
+  /* "libpetsc4py.pyx":2553
  * 
  * cdef public PetscErrorCode PetscPythonRegisterAll() except IERR:
  *     FunctionBegin(b"PetscPythonRegisterAll")             # <<<<<<<<<<<<<<
@@ -25940,52 +28037,52 @@ PetscErrorCode PetscPythonRegisterAll(void) {
  */
   __pyx_f_11libpetsc4py_FunctionBegin(((char *)"PetscPythonRegisterAll"));
 
-  /* "libpetsc4py.pyx":2541
+  /* "libpetsc4py.pyx":2556
  * 
  *     # 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_ERR(0, 2541, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(MatRegister("python", __pyx_f_11libpetsc4py_MatCreate_Python)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2556, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2542
+  /* "libpetsc4py.pyx":2557
  *     # 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_ERR(0, 2542, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(PCRegister("python", __pyx_f_11libpetsc4py_PCCreate_Python)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2557, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2543
+  /* "libpetsc4py.pyx":2558
  *     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_ERR(0, 2543, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(KSPRegister("python", __pyx_f_11libpetsc4py_KSPCreate_Python)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2558, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2544
+  /* "libpetsc4py.pyx":2559
  *     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_ERR(0, 2544, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(SNESRegister("python", __pyx_f_11libpetsc4py_SNESCreate_Python)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2559, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2545
+  /* "libpetsc4py.pyx":2560
  *     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_ERR(0, 2545, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_11libpetsc4py_CHKERR(TSRegister("python", __pyx_f_11libpetsc4py_TSCreate_Python)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(0, 2560, __pyx_L1_error)
 
-  /* "libpetsc4py.pyx":2549
+  /* "libpetsc4py.pyx":2564
  *     # Python monitors
  *     global PetscPythonMonitorSet_C
  *     PetscPythonMonitorSet_C = PetscPythonMonitorSet_Python             # <<<<<<<<<<<<<<
@@ -25994,7 +28091,7 @@ PetscErrorCode PetscPythonRegisterAll(void) {
  */
   PetscPythonMonitorSet_C = __pyx_f_11libpetsc4py_PetscPythonMonitorSet_Python;
 
-  /* "libpetsc4py.pyx":2551
+  /* "libpetsc4py.pyx":2566
  *     PetscPythonMonitorSet_C = PetscPythonMonitorSet_Python
  * 
  *     return FunctionEnd()             # <<<<<<<<<<<<<<
@@ -26004,7 +28101,7 @@ PetscErrorCode PetscPythonRegisterAll(void) {
   __pyx_r = __pyx_f_11libpetsc4py_FunctionEnd();
   goto __pyx_L0;
 
-  /* "libpetsc4py.pyx":2537
+  /* "libpetsc4py.pyx":2552
  * 
  * 
  * cdef public PetscErrorCode PetscPythonRegisterAll() except IERR:             # <<<<<<<<<<<<<<
@@ -26040,8 +28137,8 @@ static PyObject *__pyx_tp_new_11libpetsc4py__PyObj(PyTypeObject *t, CYTHON_UNUSE
 
 static void __pyx_tp_dealloc_11libpetsc4py__PyObj(PyObject *o) {
   struct __pyx_obj_11libpetsc4py__PyObj *p = (struct __pyx_obj_11libpetsc4py__PyObj *)o;
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  #if CYTHON_USE_TP_FINALIZE
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -26486,17 +28583,31 @@ static PyMethodDef __pyx_methods[] = {
 };
 
 #if PY_MAJOR_VERSION >= 3
+#if CYTHON_PEP489_MULTI_PHASE_INIT
+static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/
+static int __pyx_pymod_exec_libpetsc4py(PyObject* module); /*proto*/
+static PyModuleDef_Slot __pyx_moduledef_slots[] = {
+  {Py_mod_create, (void*)__pyx_pymod_create},
+  {Py_mod_exec, (void*)__pyx_pymod_exec_libpetsc4py},
+  {0, NULL}
+};
+#endif
+
 static struct PyModuleDef __pyx_moduledef = {
-  #if PY_VERSION_HEX < 0x03020000
-    { PyObject_HEAD_INIT(NULL) NULL, 0, NULL },
-  #else
     PyModuleDef_HEAD_INIT,
-  #endif
     "libpetsc4py",
     0, /* m_doc */
+  #if CYTHON_PEP489_MULTI_PHASE_INIT
+    0, /* m_size */
+  #else
     -1, /* m_size */
+  #endif
     __pyx_methods /* m_methods */,
+  #if CYTHON_PEP489_MULTI_PHASE_INIT
+    __pyx_moduledef_slots, /* m_slots */
+  #else
     NULL, /* m_reload */
+  #endif
     NULL, /* m_traverse */
     NULL, /* m_clear */
     (freefunc)__pyx_module_cleanup /* m_free */
@@ -26521,11 +28632,13 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_buildSolution, __pyx_k_buildSolution, sizeof(__pyx_k_buildSolution), 0, 0, 1, 1},
   {&__pyx_n_s_builtins, __pyx_k_builtins, sizeof(__pyx_k_builtins), 0, 0, 1, 1},
   {&__pyx_n_s_class, __pyx_k_class, sizeof(__pyx_k_class), 0, 0, 1, 1},
+  {&__pyx_n_s_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1},
   {&__pyx_n_s_close, __pyx_k_close, sizeof(__pyx_k_close), 0, 0, 1, 1},
   {&__pyx_n_s_compile, __pyx_k_compile, sizeof(__pyx_k_compile), 0, 0, 1, 1},
   {&__pyx_n_s_conjugate, __pyx_k_conjugate, sizeof(__pyx_k_conjugate), 0, 0, 1, 1},
   {&__pyx_n_s_copy, __pyx_k_copy, sizeof(__pyx_k_copy), 0, 0, 1, 1},
   {&__pyx_n_s_create, __pyx_k_create, sizeof(__pyx_k_create), 0, 0, 1, 1},
+  {&__pyx_n_s_createSubMatrix, __pyx_k_createSubMatrix, sizeof(__pyx_k_createSubMatrix), 0, 0, 1, 1},
   {&__pyx_n_s_createVecs, __pyx_k_createVecs, sizeof(__pyx_k_createVecs), 0, 0, 1, 1},
   {&__pyx_n_s_destroy, __pyx_k_destroy, sizeof(__pyx_k_destroy), 0, 0, 1, 1},
   {&__pyx_n_s_diagonalScale, __pyx_k_diagonalScale, sizeof(__pyx_k_diagonalScale), 0, 0, 1, 1},
@@ -26539,7 +28652,6 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_formSNESJacobian, __pyx_k_formSNESJacobian, sizeof(__pyx_k_formSNESJacobian), 0, 0, 1, 1},
   {&__pyx_n_s_getDiagonal, __pyx_k_getDiagonal, sizeof(__pyx_k_getDiagonal), 0, 0, 1, 1},
   {&__pyx_n_s_getDiagonalBlock, __pyx_k_getDiagonalBlock, sizeof(__pyx_k_getDiagonalBlock), 0, 0, 1, 1},
-  {&__pyx_n_s_getSubMatrix, __pyx_k_getSubMatrix, sizeof(__pyx_k_getSubMatrix), 0, 0, 1, 1},
   {&__pyx_n_s_imagPart, __pyx_k_imagPart, sizeof(__pyx_k_imagPart), 0, 0, 1, 1},
   {&__pyx_n_s_import, __pyx_k_import, sizeof(__pyx_k_import), 0, 0, 1, 1},
   {&__pyx_n_s_interpolate, __pyx_k_interpolate, sizeof(__pyx_k_interpolate), 0, 0, 1, 1},
@@ -26589,8 +28701,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_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)
+  __pyx_builtin_open = __Pyx_GetBuiltinName(__pyx_n_s_open); if (!__pyx_builtin_open) __PYX_ERR(0, 271, __pyx_L1_error)
+  __pyx_builtin_compile = __Pyx_GetBuiltinName(__pyx_n_s_compile); if (!__pyx_builtin_compile) __PYX_ERR(0, 273, __pyx_L1_error)
   return 0;
   __pyx_L1_error:;
   return -1;
@@ -26600,36 +28712,36 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__Pyx_InitCachedConstants", 0);
 
-  /* "libpetsc4py.pyx":256
+  /* "libpetsc4py.pyx":258
  * 
  * cdef object parse_url(object url):
  *     path, name = url.rsplit(":", 1)             # <<<<<<<<<<<<<<
  *     return (path, name)
  * 
  */
-  __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_tuple__2 = PyTuple_Pack(2, __pyx_kp_s_, __pyx_int_1); if (unlikely(!__pyx_tuple__2)) __PYX_ERR(0, 258, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__2);
   __Pyx_GIVEREF(__pyx_tuple__2);
 
-  /* "libpetsc4py.pyx":375
+  /* "libpetsc4py.pyx":377
  *     # package.module[.{function|class}]
  *     if '.' in name:
  *         modname, clsname = name.rsplit('.', 1)             # <<<<<<<<<<<<<<
  *         mod = PyImport_Import(modname)
  *         if hasattr(mod, clsname):
  */
-  __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_tuple__4 = PyTuple_Pack(2, __pyx_kp_s__3, __pyx_int_1); if (unlikely(!__pyx_tuple__4)) __PYX_ERR(0, 377, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__4);
   __Pyx_GIVEREF(__pyx_tuple__4);
 
-  /* "libpetsc4py.pyx":2503
+  /* "libpetsc4py.pyx":2518
  *         path, names = url, 'monitor'
  *     module = load_module(path)
  *     for attr in names.split(','):             # <<<<<<<<<<<<<<
  *         monitor = getattr(module, attr)
  *         if isinstance(monitor, type):
  */
-  __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_s__5); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(0, 2503, __pyx_L1_error)
+  __pyx_tuple__6 = PyTuple_Pack(1, __pyx_kp_s__5); if (unlikely(!__pyx_tuple__6)) __PYX_ERR(0, 2518, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__6);
   __Pyx_GIVEREF(__pyx_tuple__6);
   __Pyx_RefNannyFinishContext();
@@ -26653,6 +28765,47 @@ PyMODINIT_FUNC initlibpetsc4py(void)
 #else
 PyMODINIT_FUNC PyInit_libpetsc4py(void); /*proto*/
 PyMODINIT_FUNC PyInit_libpetsc4py(void)
+#if CYTHON_PEP489_MULTI_PHASE_INIT
+{
+  return PyModuleDef_Init(&__pyx_moduledef);
+}
+static int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name) {
+    PyObject *value = PyObject_GetAttrString(spec, from_name);
+    int result = 0;
+    if (likely(value)) {
+        result = PyDict_SetItemString(moddict, to_name, value);
+        Py_DECREF(value);
+    } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
+        PyErr_Clear();
+    } else {
+        result = -1;
+    }
+    return result;
+}
+static PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) {
+    PyObject *module = NULL, *moddict, *modname;
+    if (__pyx_m)
+        return __Pyx_NewRef(__pyx_m);
+    modname = PyObject_GetAttrString(spec, "name");
+    if (unlikely(!modname)) goto bad;
+    module = PyModule_NewObject(modname);
+    Py_DECREF(modname);
+    if (unlikely(!module)) goto bad;
+    moddict = PyModule_GetDict(module);
+    if (unlikely(!moddict)) goto bad;
+    if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__") < 0)) goto bad;
+    if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__") < 0)) goto bad;
+    if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__") < 0)) goto bad;
+    if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__") < 0)) goto bad;
+    return module;
+bad:
+    Py_XDECREF(module);
+    return NULL;
+}
+
+
+static int __pyx_pymod_exec_libpetsc4py(PyObject *__pyx_pyinit_module)
+#endif
 #endif
 {
   PyObject *__pyx_t_1 = NULL;
@@ -26661,6 +28814,9 @@ PyMODINIT_FUNC PyInit_libpetsc4py(void)
   int __pyx_t_4;
   PetscErrorCode __pyx_t_5;
   __Pyx_RefNannyDeclarations
+  #if CYTHON_PEP489_MULTI_PHASE_INIT
+  if (__pyx_m && __pyx_m == __pyx_pyinit_module) return 0;
+  #endif
   #if CYTHON_REFNANNY
   __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
   if (!__Pyx_RefNanny) {
@@ -26687,6 +28843,9 @@ PyMODINIT_FUNC PyInit_libpetsc4py(void)
   #ifdef __Pyx_Generator_USED
   if (__pyx_Generator_init() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   #endif
+  #ifdef __Pyx_AsyncGen_USED
+  if (__pyx_AsyncGen_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
@@ -26698,15 +28857,21 @@ PyMODINIT_FUNC PyInit_libpetsc4py(void)
   #endif
   #endif
   /*--- Module creation code ---*/
+  #if CYTHON_PEP489_MULTI_PHASE_INIT
+  __pyx_m = __pyx_pyinit_module;
+  Py_INCREF(__pyx_m);
+  #else
   #if PY_MAJOR_VERSION < 3
   __pyx_m = Py_InitModule4("libpetsc4py", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
   #else
   __pyx_m = PyModule_Create(&__pyx_moduledef);
   #endif
   if (unlikely(!__pyx_m)) __PYX_ERR(0, 1, __pyx_L1_error)
+  #endif
   __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_ERR(0, 1, __pyx_L1_error)
+  __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(0, 1, __pyx_L1_error)
   #if CYTHON_COMPILING_IN_PYPY
   Py_INCREF(__pyx_b);
   #endif
@@ -26742,85 +28907,85 @@ 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_ERR(0, 284, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_11libpetsc4py__PyObj) < 0) __PYX_ERR(0, 286, __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_ERR(0, 284, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_11libpetsc4py__PyObj.tp_dict, __pyx_vtabptr_11libpetsc4py__PyObj) < 0) __PYX_ERR(0, 286, __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_ERR(0, 512, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_11libpetsc4py__PyMat) < 0) __PYX_ERR(0, 514, __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_ERR(0, 512, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_11libpetsc4py__PyMat.tp_dict, __pyx_vtabptr_11libpetsc4py__PyMat) < 0) __PYX_ERR(0, 514, __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_ERR(0, 1152, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_11libpetsc4py__PyPC) < 0) __PYX_ERR(0, 1154, __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_ERR(0, 1152, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_11libpetsc4py__PyPC.tp_dict, __pyx_vtabptr_11libpetsc4py__PyPC) < 0) __PYX_ERR(0, 1154, __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_ERR(0, 1427, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_11libpetsc4py__PyKSP) < 0) __PYX_ERR(0, 1430, __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_ERR(0, 1427, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_11libpetsc4py__PyKSP.tp_dict, __pyx_vtabptr_11libpetsc4py__PyKSP) < 0) __PYX_ERR(0, 1430, __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_ERR(0, 1782, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_11libpetsc4py__PySNES) < 0) __PYX_ERR(0, 1792, __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_ERR(0, 1782, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_11libpetsc4py__PySNES.tp_dict, __pyx_vtabptr_11libpetsc4py__PySNES) < 0) __PYX_ERR(0, 1792, __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_ERR(0, 2117, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_11libpetsc4py__PyTS) < 0) __PYX_ERR(0, 2132, __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_ERR(0, 2117, __pyx_L1_error)
+  if (__Pyx_SetVtable(__pyx_type_11libpetsc4py__PyTS.tp_dict, __pyx_vtabptr_11libpetsc4py__PyTS) < 0) __PYX_ERR(0, 2132, __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_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)
+  __pyx_ptype_8petsc4py_5PETSc_Comm = __Pyx_ImportType("petsc4py.PETSc", "Comm", sizeof(struct PyPetscCommObject), 1); if (unlikely(!__pyx_ptype_8petsc4py_5PETSc_Comm)) __PYX_ERR(1, 73, __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, 81, __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, 81, __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, 93, __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, 93, __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, 99, __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, 99, __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, 105, __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, 105, __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, 111, __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, 111, __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, 117, __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, 117, __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, 123, __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, 123, __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, 129, __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, 129, __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, 135, __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, 135, __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, 141, __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, 141, __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, 147, __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, 147, __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, 153, __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, 153, __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, 159, __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, 159, __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, 165, __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, 165, __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, 171, __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, 171, __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, 177, __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, 177, __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, 183, __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, 183, __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, 189, __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, 189, __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, 195, __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, 195, __pyx_L1_error)
   /*--- Variable import code ---*/
   /*--- Function import code ---*/
   __pyx_t_1 = __Pyx_ImportModule("petsc4py.PETSc"); if (!__pyx_t_1) __PYX_ERR(0, 1, __pyx_L1_error)
@@ -26831,7 +28996,7 @@ PyMODINIT_FUNC PyInit_libpetsc4py(void)
   if (__Pyx_patch_abc() < 0) __PYX_ERR(0, 1, __pyx_L1_error)
   #endif
 
-  /* "libpetsc4py.pyx":99
+  /* "libpetsc4py.pyx":101
  *     enum: IERR "PETSC_ERR_PYTHON"
  * 
  * cdef char *FUNCT = NULL             # <<<<<<<<<<<<<<
@@ -26840,7 +29005,7 @@ PyMODINIT_FUNC PyInit_libpetsc4py(void)
  */
   __pyx_v_11libpetsc4py_FUNCT = NULL;
 
-  /* "libpetsc4py.pyx":101
+  /* "libpetsc4py.pyx":103
  * cdef char *FUNCT = NULL
  * cdef char *fstack[1024]
  * cdef int   istack = 0             # <<<<<<<<<<<<<<
@@ -26849,7 +29014,7 @@ PyMODINIT_FUNC PyInit_libpetsc4py(void)
  */
   __pyx_v_11libpetsc4py_istack = 0;
 
-  /* "libpetsc4py.pyx":142
+  /* "libpetsc4py.pyx":144
  *     PyObject *PyExc_RuntimeError
  * 
  * cdef object PetscError = <object>PyExc_RuntimeError             # <<<<<<<<<<<<<<
@@ -26863,22 +29028,22 @@ PyMODINIT_FUNC PyInit_libpetsc4py(void)
   __Pyx_GIVEREF(__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "libpetsc4py.pyx":143
+  /* "libpetsc4py.pyx":145
  * 
  * 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_ERR(0, 143, __pyx_L1_error)
+  __pyx_t_2 = PyList_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 145, __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_ERR(0, 143, __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, 145, __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_ERR(0, 143, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_Error); if (unlikely(!__pyx_t_2)) __PYX_ERR(0, 145, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_t_2);
   __Pyx_XGOTREF(__pyx_v_11libpetsc4py_PetscError);
@@ -26887,21 +29052,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":259
+  /* "libpetsc4py.pyx":261
  *     return (path, name)
  * 
  * cdef dict module_cache = {}             # <<<<<<<<<<<<<<
  * 
  * cdef object load_module(object path):
  */
-  __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 259, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(0, 261, __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":2560
+  /* "libpetsc4py.pyx":2575
  * # below trick Cython to treat all these entries as used.
  * 
  * if PETSC_FALSE:             # <<<<<<<<<<<<<<
@@ -26910,127 +29075,127 @@ PyMODINIT_FUNC PyInit_libpetsc4py(void)
  */
   if (PETSC_FALSE) {
 
-    /* "libpetsc4py.pyx":2561
+    /* "libpetsc4py.pyx":2576
  * 
  * 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_ERR(0, 2561, __pyx_L1_error)
+    __pyx_t_4 = import_libpetsc4py(); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(0, 2576, __pyx_L1_error)
     ((void)__pyx_t_4);
 
-    /* "libpetsc4py.pyx":2562
+    /* "libpetsc4py.pyx":2577
  * 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_ERR(0, 2562, __pyx_L1_error)
+    __pyx_t_5 = MatPythonGetContext(NULL, NULL); if (unlikely(__pyx_t_5 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 2577, __pyx_L1_error)
     ((void)__pyx_t_5);
 
-    /* "libpetsc4py.pyx":2563
+    /* "libpetsc4py.pyx":2578
  *     <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_ERR(0, 2563, __pyx_L1_error)
+    __pyx_t_5 = MatPythonSetContext(NULL, NULL); if (unlikely(__pyx_t_5 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 2578, __pyx_L1_error)
     ((void)__pyx_t_5);
 
-    /* "libpetsc4py.pyx":2564
+    /* "libpetsc4py.pyx":2579
  *     <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_ERR(0, 2564, __pyx_L1_error)
+    __pyx_t_5 = PCPythonGetContext(NULL, NULL); if (unlikely(__pyx_t_5 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 2579, __pyx_L1_error)
     ((void)__pyx_t_5);
 
-    /* "libpetsc4py.pyx":2565
+    /* "libpetsc4py.pyx":2580
  *     <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_ERR(0, 2565, __pyx_L1_error)
+    __pyx_t_5 = PCPythonSetContext(NULL, NULL); if (unlikely(__pyx_t_5 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 2580, __pyx_L1_error)
     ((void)__pyx_t_5);
 
-    /* "libpetsc4py.pyx":2566
+    /* "libpetsc4py.pyx":2581
  *     <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_ERR(0, 2566, __pyx_L1_error)
+    __pyx_t_5 = KSPPythonGetContext(NULL, NULL); if (unlikely(__pyx_t_5 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 2581, __pyx_L1_error)
     ((void)__pyx_t_5);
 
-    /* "libpetsc4py.pyx":2567
+    /* "libpetsc4py.pyx":2582
  *     <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_ERR(0, 2567, __pyx_L1_error)
+    __pyx_t_5 = KSPPythonSetContext(NULL, NULL); if (unlikely(__pyx_t_5 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 2582, __pyx_L1_error)
     ((void)__pyx_t_5);
 
-    /* "libpetsc4py.pyx":2568
+    /* "libpetsc4py.pyx":2583
  *     <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_ERR(0, 2568, __pyx_L1_error)
+    __pyx_t_5 = SNESPythonGetContext(NULL, NULL); if (unlikely(__pyx_t_5 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 2583, __pyx_L1_error)
     ((void)__pyx_t_5);
 
-    /* "libpetsc4py.pyx":2569
+    /* "libpetsc4py.pyx":2584
  *     <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_ERR(0, 2569, __pyx_L1_error)
+    __pyx_t_5 = SNESPythonSetContext(NULL, NULL); if (unlikely(__pyx_t_5 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 2584, __pyx_L1_error)
     ((void)__pyx_t_5);
 
-    /* "libpetsc4py.pyx":2570
+    /* "libpetsc4py.pyx":2585
  *     <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_ERR(0, 2570, __pyx_L1_error)
+    __pyx_t_5 = TSPythonGetContext(NULL, NULL); if (unlikely(__pyx_t_5 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 2585, __pyx_L1_error)
     ((void)__pyx_t_5);
 
-    /* "libpetsc4py.pyx":2571
+    /* "libpetsc4py.pyx":2586
  *     <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_ERR(0, 2571, __pyx_L1_error)
+    __pyx_t_5 = TSPythonSetContext(NULL, NULL); if (unlikely(__pyx_t_5 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 2586, __pyx_L1_error)
     ((void)__pyx_t_5);
 
-    /* "libpetsc4py.pyx":2572
+    /* "libpetsc4py.pyx":2587
  *     <void>TSPythonGetContext(NULL,NULL)
  *     <void>TSPythonSetContext(NULL,NULL)
  *     <void>PetscPythonRegisterAll()             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-    __pyx_t_5 = PetscPythonRegisterAll(); if (unlikely(__pyx_t_5 == PETSC_ERR_PYTHON)) __PYX_ERR(0, 2572, __pyx_L1_error)
+    __pyx_t_5 = PetscPythonRegisterAll(); if (unlikely(__pyx_t_5 == ((PetscErrorCode)PETSC_ERR_PYTHON))) __PYX_ERR(0, 2587, __pyx_L1_error)
     ((void)__pyx_t_5);
 
-    /* "libpetsc4py.pyx":2560
+    /* "libpetsc4py.pyx":2575
  * # below trick Cython to treat all these entries as used.
  * 
  * if PETSC_FALSE:             # <<<<<<<<<<<<<<
@@ -27049,7 +29214,7 @@ PyMODINIT_FUNC PyInit_libpetsc4py(void)
   __Pyx_XDECREF(__pyx_t_3);
   if (__pyx_m) {
     if (__pyx_d) {
-      __Pyx_AddTraceback("init libpetsc4py", __pyx_clineno, __pyx_lineno, __pyx_filename);
+      __Pyx_AddTraceback("init libpetsc4py", 0, __pyx_lineno, __pyx_filename);
     }
     Py_DECREF(__pyx_m); __pyx_m = 0;
   } else if (!PyErr_Occurred()) {
@@ -27057,10 +29222,12 @@ PyMODINIT_FUNC PyInit_libpetsc4py(void)
   }
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
-  #if PY_MAJOR_VERSION < 3
-  return;
-  #else
+  #if CYTHON_PEP489_MULTI_PHASE_INIT
+  return (__pyx_m != NULL) ? 0 : -1;
+  #elif PY_MAJOR_VERSION >= 3
   return __pyx_m;
+  #else
+  return;
   #endif
 }
 
@@ -27152,7 +29319,7 @@ static PyObject *__Pyx_GetBuiltinName(PyObject *name) {
 }
 
 /* PyErrFetchRestore */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_FAST_THREAD_STATE
 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;
@@ -27223,7 +29390,7 @@ static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
         PyErr_SetString(PyExc_SystemError, "Missing type object");
         return 0;
     }
-    if (likely(PyObject_TypeCheck(obj, type)))
+    if (likely(__Pyx_TypeCheck(obj, type)))
         return 1;
     PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s",
                  Py_TYPE(obj)->tp_name, type->tp_name);
@@ -27292,11 +29459,11 @@ static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index) {
 
 /* IterFinish */
 static CYTHON_INLINE int __Pyx_IterFinish(void) {
-#if CYTHON_COMPILING_IN_CPYTHON
-    PyThreadState *tstate = PyThreadState_GET();
+#if CYTHON_FAST_THREAD_STATE
+    PyThreadState *tstate = __Pyx_PyThreadState_Current;
     PyObject* exc_type = tstate->curexc_type;
     if (unlikely(exc_type)) {
-        if (likely(exc_type == PyExc_StopIteration) || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)) {
+        if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) {
             PyObject *exc_value, *exc_tb;
             exc_value = tstate->curexc_value;
             exc_tb = tstate->curexc_traceback;
@@ -27337,6 +29504,149 @@ static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
     return 0;
 }
 
+/* PyCFunctionFastCall */
+#if CYTHON_FAST_PYCCALL
+static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) {
+    PyCFunctionObject *func = (PyCFunctionObject*)func_obj;
+    PyCFunction meth = PyCFunction_GET_FUNCTION(func);
+    PyObject *self = PyCFunction_GET_SELF(func);
+    int flags = PyCFunction_GET_FLAGS(func);
+    assert(PyCFunction_Check(func));
+    assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS)));
+    assert(nargs >= 0);
+    assert(nargs == 0 || args != NULL);
+    /* _PyCFunction_FastCallDict() must not be called with an exception set,
+       because it may clear it (directly or indirectly) and so the
+       caller loses its exception */
+    assert(!PyErr_Occurred());
+    if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) {
+        return (*((__Pyx_PyCFunctionFastWithKeywords)meth)) (self, args, nargs, NULL);
+    } else {
+        return (*((__Pyx_PyCFunctionFast)meth)) (self, args, nargs);
+    }
+}
+#endif
+
+/* PyFunctionFastCall */
+#if CYTHON_FAST_PYCALL
+#include "frameobject.h"
+static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na,
+                                               PyObject *globals) {
+    PyFrameObject *f;
+    PyThreadState *tstate = __Pyx_PyThreadState_Current;
+    PyObject **fastlocals;
+    Py_ssize_t i;
+    PyObject *result;
+    assert(globals != NULL);
+    /* XXX Perhaps we should create a specialized
+       PyFrame_New() that doesn't take locals, but does
+       take builtins without sanity checking them.
+       */
+    assert(tstate != NULL);
+    f = PyFrame_New(tstate, co, globals, NULL);
+    if (f == NULL) {
+        return NULL;
+    }
+    fastlocals = f->f_localsplus;
+    for (i = 0; i < na; i++) {
+        Py_INCREF(*args);
+        fastlocals[i] = *args++;
+    }
+    result = PyEval_EvalFrameEx(f,0);
+    ++tstate->recursion_depth;
+    Py_DECREF(f);
+    --tstate->recursion_depth;
+    return result;
+}
+#if 1 || PY_VERSION_HEX < 0x030600B1
+static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, int nargs, PyObject *kwargs) {
+    PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func);
+    PyObject *globals = PyFunction_GET_GLOBALS(func);
+    PyObject *argdefs = PyFunction_GET_DEFAULTS(func);
+    PyObject *closure;
+#if PY_MAJOR_VERSION >= 3
+    PyObject *kwdefs;
+#endif
+    PyObject *kwtuple, **k;
+    PyObject **d;
+    Py_ssize_t nd;
+    Py_ssize_t nk;
+    PyObject *result;
+    assert(kwargs == NULL || PyDict_Check(kwargs));
+    nk = kwargs ? PyDict_Size(kwargs) : 0;
+    if (Py_EnterRecursiveCall((char*)" while calling a Python object")) {
+        return NULL;
+    }
+    if (
+#if PY_MAJOR_VERSION >= 3
+            co->co_kwonlyargcount == 0 &&
+#endif
+            likely(kwargs == NULL || nk == 0) &&
+            co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) {
+        if (argdefs == NULL && co->co_argcount == nargs) {
+            result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals);
+            goto done;
+        }
+        else if (nargs == 0 && argdefs != NULL
+                 && co->co_argcount == Py_SIZE(argdefs)) {
+            /* function called with no arguments, but all parameters have
+               a default value: use default values as arguments .*/
+            args = &PyTuple_GET_ITEM(argdefs, 0);
+            result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals);
+            goto done;
+        }
+    }
+    if (kwargs != NULL) {
+        Py_ssize_t pos, i;
+        kwtuple = PyTuple_New(2 * nk);
+        if (kwtuple == NULL) {
+            result = NULL;
+            goto done;
+        }
+        k = &PyTuple_GET_ITEM(kwtuple, 0);
+        pos = i = 0;
+        while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) {
+            Py_INCREF(k[i]);
+            Py_INCREF(k[i+1]);
+            i += 2;
+        }
+        nk = i / 2;
+    }
+    else {
+        kwtuple = NULL;
+        k = NULL;
+    }
+    closure = PyFunction_GET_CLOSURE(func);
+#if PY_MAJOR_VERSION >= 3
+    kwdefs = PyFunction_GET_KW_DEFAULTS(func);
+#endif
+    if (argdefs != NULL) {
+        d = &PyTuple_GET_ITEM(argdefs, 0);
+        nd = Py_SIZE(argdefs);
+    }
+    else {
+        d = NULL;
+        nd = 0;
+    }
+#if PY_MAJOR_VERSION >= 3
+    result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL,
+                               args, nargs,
+                               k, (int)nk,
+                               d, (int)nd, kwdefs, closure);
+#else
+    result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL,
+                               args, nargs,
+                               k, (int)nk,
+                               d, (int)nd, closure);
+#endif
+    Py_XDECREF(kwtuple);
+done:
+    Py_LeaveRecursiveCall();
+    return result;
+}
+#endif
+#endif
+
 /* PyObjectCallMethO */
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg) {
@@ -27370,13 +29680,18 @@ static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) {
     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))) {
+#if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(func)) {
+        return __Pyx_PyFunction_FastCall(func, &arg, 1);
+    }
 #endif
+    if (likely(PyCFunction_Check(func))) {
         if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) {
             return __Pyx_PyObject_CallMethO(func, arg);
+#if CYTHON_FAST_PYCCALL
+        } else if (PyCFunction_GET_FLAGS(func) & METH_FASTCALL) {
+            return __Pyx_PyCFunction_FastCall(func, &arg, 1);
+#endif
         }
     }
     return __Pyx__PyObject_CallOneArg(func, arg);
@@ -27393,10 +29708,15 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObjec
 #endif
 
 /* PyObjectCallNoArg */
-  #if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
+#if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(func)) {
+        return __Pyx_PyFunction_FastCall(func, NULL, 0);
+    }
+#endif
 #ifdef __Pyx_CyFunction_USED
-    if (likely(PyCFunction_Check(func) || PyObject_TypeCheck(func, __pyx_CyFunctionType))) {
+    if (likely(PyCFunction_Check(func) || __Pyx_TypeCheck(func, __pyx_CyFunctionType))) {
 #else
     if (likely(PyCFunction_Check(func))) {
 #endif
@@ -27409,13 +29729,13 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
 #endif
 
 /* GetException */
-    #if CYTHON_COMPILING_IN_CPYTHON
+  #if CYTHON_FAST_THREAD_STATE
 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
+#if CYTHON_FAST_THREAD_STATE
     PyObject *tmp_type, *tmp_value, *tmp_tb;
     local_type = tstate->curexc_type;
     local_value = tstate->curexc_value;
@@ -27427,7 +29747,7 @@ static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb)
     PyErr_Fetch(&local_type, &local_value, &local_tb);
 #endif
     PyErr_NormalizeException(&local_type, &local_value, &local_tb);
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_FAST_THREAD_STATE
     if (unlikely(tstate->curexc_type))
 #else
     if (unlikely(PyErr_Occurred()))
@@ -27445,7 +29765,7 @@ static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb)
     *type = local_type;
     *value = local_value;
     *tb = local_tb;
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_FAST_THREAD_STATE
     tmp_type = tstate->exc_type;
     tmp_value = tstate->exc_value;
     tmp_tb = tstate->exc_traceback;
@@ -27470,7 +29790,7 @@ bad:
 }
 
 /* SwapException */
-      #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_FAST_THREAD_STATE
 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;
@@ -27495,7 +29815,7 @@ static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value,
 #endif
 
 /* SaveResetException */
-      #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_FAST_THREAD_STATE
 static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
     *type = tstate->exc_type;
     *value = tstate->exc_value;
@@ -27518,9 +29838,34 @@ static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject
 }
 #endif
 
+/* PyErrExceptionMatches */
+    #if CYTHON_FAST_THREAD_STATE
+static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) {
+    Py_ssize_t i, n;
+    n = PyTuple_GET_SIZE(tuple);
+#if PY_MAJOR_VERSION >= 3
+    for (i=0; i<n; i++) {
+        if (exc_type == PyTuple_GET_ITEM(tuple, i)) return 1;
+    }
+#endif
+    for (i=0; i<n; i++) {
+        if (__Pyx_PyErr_GivenExceptionMatches(exc_type, PyTuple_GET_ITEM(tuple, i))) return 1;
+    }
+    return 0;
+}
+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;
+    if (unlikely(PyTuple_Check(err)))
+        return __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err);
+    return __Pyx_PyErr_GivenExceptionMatches(exc_type, err);
+}
+#endif
+
 /* GetAttr */
-      static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) {
-#if CYTHON_COMPILING_IN_CPYTHON
+    static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *o, PyObject *n) {
+#if CYTHON_USE_TYPE_SLOTS
 #if PY_MAJOR_VERSION >= 3
     if (likely(PyUnicode_Check(n)))
 #else
@@ -27532,22 +29877,40 @@ static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject
 }
 
 /* GetAttr3 */
-      static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) {
+    static PyObject *__Pyx_GetAttr3Default(PyObject *d) {
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError)))
+        return NULL;
+    __Pyx_PyErr_Clear();
+    Py_INCREF(d);
+    return d;
+}
+static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *o, PyObject *n, PyObject *d) {
     PyObject *r = __Pyx_GetAttr(o, n);
+    return (likely(r)) ? r : __Pyx_GetAttr3Default(d);
+}
+
+/* HasAttr */
+    static CYTHON_INLINE int __Pyx_HasAttr(PyObject *o, PyObject *n) {
+    PyObject *r;
+    if (unlikely(!__Pyx_PyBaseString_Check(n))) {
+        PyErr_SetString(PyExc_TypeError,
+                        "hasattr(): attribute name must be string");
+        return -1;
+    }
+    r = __Pyx_GetAttr(o, n);
     if (unlikely(!r)) {
-        if (!PyErr_ExceptionMatches(PyExc_AttributeError))
-            goto bad;
         PyErr_Clear();
-        r = d;
-        Py_INCREF(d);
+        return 0;
+    } else {
+        Py_DECREF(r);
+        return 1;
     }
-    return r;
-bad:
-    return NULL;
 }
 
 /* SetVTable */
-      static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
+    static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
 #if PY_VERSION_HEX >= 0x02070000
     PyObject *ob = PyCapsule_New(vtable, 0, 0);
 #else
@@ -27565,7 +29928,7 @@ bad:
 }
 
 /* GetVTable */
-      static void* __Pyx_GetVtable(PyObject *dict) {
+    static void* __Pyx_GetVtable(PyObject *dict) {
     void* ptr;
     PyObject *ob = PyObject_GetItem(dict, __pyx_n_s_pyx_vtable);
     if (!ob)
@@ -27585,13 +29948,13 @@ bad:
 }
 
 /* Import */
-      static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
+    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
+    #if PY_MAJOR_VERSION < 3
     PyObject *py_import;
     py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import);
     if (!py_import)
@@ -27615,17 +29978,8 @@ 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;
@@ -27636,7 +29990,7 @@ bad:
         }
         #endif
         if (!module) {
-            #if PY_VERSION_HEX < 0x03030000
+            #if PY_MAJOR_VERSION < 3
             PyObject *py_level = PyInt_FromLong(level);
             if (!py_level)
                 goto bad;
@@ -27650,7 +30004,7 @@ bad:
         }
     }
 bad:
-    #if PY_VERSION_HEX < 0x03030000
+    #if PY_MAJOR_VERSION < 3
     Py_XDECREF(py_import);
     #endif
     Py_XDECREF(empty_list);
@@ -27659,7 +30013,7 @@ bad:
 }
 
 /* ImportFrom */
-      static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
+    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,
@@ -27673,7 +30027,7 @@ bad:
 }
 
 /* ModuleImport */
-      #ifndef __PYX_HAVE_RT_ImportModule
+    #ifndef __PYX_HAVE_RT_ImportModule
 #define __PYX_HAVE_RT_ImportModule
 static PyObject *__Pyx_ImportModule(const char *name) {
     PyObject *py_name = 0;
@@ -27691,7 +30045,7 @@ bad:
 #endif
 
 /* RegisterModuleCleanup */
-      #if PY_MAJOR_VERSION < 3
+    #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;
@@ -27752,13 +30106,49 @@ bad:
 }
 #else
 static int __Pyx_RegisterCleanup(void) {
-    if (0) __Pyx_ImportModule(NULL);
+    if ((0)) __Pyx_ImportModule(NULL);
     return 0;
 }
 #endif
 
+/* CLineInTraceback */
+    static int __Pyx_CLineForTraceback(int c_line) {
+#ifdef CYTHON_CLINE_IN_TRACEBACK
+    return ((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0;
+#else
+    PyObject *use_cline;
+#if CYTHON_COMPILING_IN_CPYTHON
+    PyObject **cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime);
+    if (likely(cython_runtime_dict)) {
+      use_cline = PyDict_GetItem(*cython_runtime_dict, __pyx_n_s_cline_in_traceback);
+    } else
+#endif
+    {
+      PyObject *ptype, *pvalue, *ptraceback;
+      PyObject *use_cline_obj;
+      PyErr_Fetch(&ptype, &pvalue, &ptraceback);
+      use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback);
+      if (use_cline_obj) {
+        use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True;
+        Py_DECREF(use_cline_obj);
+      } else {
+        use_cline = NULL;
+      }
+      PyErr_Restore(ptype, pvalue, ptraceback);
+    }
+    if (!use_cline) {
+        c_line = 0;
+        PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False);
+    }
+    else if (PyObject_Not(use_cline) != 0) {
+        c_line = 0;
+    }
+    return c_line;
+#endif
+}
+
 /* CodeObjectCache */
-      static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
+    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;
@@ -27838,7 +30228,7 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
 }
 
 /* AddTraceback */
-      #include "compile.h"
+    #include "compile.h"
 #include "frameobject.h"
 #include "traceback.h"
 static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
@@ -27897,21 +30287,24 @@ 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 (c_line) {
+        c_line = __Pyx_CLineForTraceback(c_line);
+    }
+    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);
+        __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*/
+        __Pyx_PyThreadState_Current, /*PyThreadState *tstate,*/
+        py_code,                     /*PyCodeObject *code,*/
+        __pyx_d,              /*PyObject *globals,*/
+        0                            /*PyObject *locals*/
     );
     if (!py_frame) goto bad;
-    py_frame->f_lineno = py_line;
+    __Pyx_PyFrame_SetLineNumber(py_frame, py_line);
     PyTraceBack_Here(py_frame);
 bad:
     Py_XDECREF(py_code);
@@ -27919,7 +30312,7 @@ bad:
 }
 
 /* None */
-      static CYTHON_INLINE int __Pyx_ErrOccurredWithGIL(void) {
+    static CYTHON_INLINE int __Pyx_ErrOccurredWithGIL(void) {
   int err;
   #ifdef WITH_THREAD
   PyGILState_STATE _save = PyGILState_Ensure();
@@ -27932,7 +30325,7 @@ bad:
 }
 
 /* CIntToPy */
-      static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscInt(PetscInt value) {
+    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) {
@@ -27940,14 +30333,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(PetscInt) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(PetscInt) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(PetscInt) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(PetscInt) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -27959,7 +30356,7 @@ bad:
 }
 
 /* CIntFromPyVerify */
-      #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\
+    #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)
@@ -27981,7 +30378,7 @@ bad:
     }
 
 /* CIntToPy */
-      static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
+    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) {
@@ -27989,14 +30386,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(long) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(long) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -28008,7 +30409,7 @@ bad:
 }
 
 /* PyExec */
-      static CYTHON_INLINE PyObject* __Pyx_PyExec2(PyObject* o, PyObject* globals) {
+    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) {
@@ -28030,7 +30431,7 @@ static PyObject* __Pyx_PyExec3(PyObject* o, PyObject* globals, PyObject* locals)
             goto bad;
     }
     if (PyCode_Check(o)) {
-        if (PyCode_GetNumFree((PyCodeObject *)o) > 0) {
+        if (__Pyx_PyCode_HasFreeVars((PyCodeObject *)o)) {
             PyErr_SetString(PyExc_TypeError,
                 "code object passed to exec() may not contain free variables");
             goto bad;
@@ -28077,34 +30478,7 @@ bad:
 }
 
 /* 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) {
+    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) {
@@ -28112,14 +30486,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(int) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(int) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -28131,7 +30509,7 @@ bad:
 }
 
 /* CIntToPy */
-      static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MatSORType(MatSORType value) {
+    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) {
@@ -28139,14 +30517,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(MatSORType) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(MatSORType) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(MatSORType) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(MatSORType) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -28158,7 +30540,7 @@ bad:
 }
 
 /* CIntToPy */
-      static CYTHON_INLINE PyObject* __Pyx_PyInt_From_NormType(NormType value) {
+    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) {
@@ -28166,14 +30548,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(NormType) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(NormType) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(NormType) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(NormType) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -28185,7 +30571,7 @@ bad:
 }
 
 /* CIntFromPy */
-      static CYTHON_INLINE PetscInt __Pyx_PyInt_As_PetscInt(PyObject *x) {
+    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
@@ -28252,8 +30638,10 @@ bad:
 #endif
             if (sizeof(PetscInt) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PetscInt, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(PetscInt) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PetscInt, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -28320,8 +30708,10 @@ bad:
 #endif
             if (sizeof(PetscInt) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PetscInt, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(PetscInt) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PetscInt, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -28370,7 +30760,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-      static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
+    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
@@ -28437,8 +30827,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(long) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -28505,8 +30897,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(long) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -28555,7 +30949,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-      static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
+    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
@@ -28622,8 +31016,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(int) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -28690,8 +31086,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(int) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -28739,8 +31137,80 @@ raise_neg_overflow:
     return (int) -1;
 }
 
+/* FastTypeChecks */
+    #if CYTHON_COMPILING_IN_CPYTHON
+static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) {
+    while (a) {
+        a = a->tp_base;
+        if (a == b)
+            return 1;
+    }
+    return b == &PyBaseObject_Type;
+}
+static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) {
+    PyObject *mro;
+    if (a == b) return 1;
+    mro = a->tp_mro;
+    if (likely(mro)) {
+        Py_ssize_t i, n;
+        n = PyTuple_GET_SIZE(mro);
+        for (i = 0; i < n; i++) {
+            if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b)
+                return 1;
+        }
+        return 0;
+    }
+    return __Pyx_InBases(a, b);
+}
+#if PY_MAJOR_VERSION == 2
+static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) {
+    PyObject *exception, *value, *tb;
+    int res;
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&exception, &value, &tb);
+    res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0;
+    if (unlikely(res == -1)) {
+        PyErr_WriteUnraisable(err);
+        res = 0;
+    }
+    if (!res) {
+        res = PyObject_IsSubclass(err, exc_type2);
+        if (unlikely(res == -1)) {
+            PyErr_WriteUnraisable(err);
+            res = 0;
+        }
+    }
+    __Pyx_ErrRestore(exception, value, tb);
+    return res;
+}
+#else
+static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) {
+    int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0;
+    if (!res) {
+        res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2);
+    }
+    return res;
+}
+#endif
+static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject* exc_type) {
+    if (likely(err == exc_type)) return 1;
+    if (likely(PyExceptionClass_Check(err))) {
+        return __Pyx_inner_PyErr_GivenExceptionMatches2(err, NULL, exc_type);
+    }
+    return PyErr_GivenExceptionMatches(err, exc_type);
+}
+static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *exc_type1, PyObject *exc_type2) {
+    if (likely(err == exc_type1 || err == exc_type2)) return 1;
+    if (likely(PyExceptionClass_Check(err))) {
+        return __Pyx_inner_PyErr_GivenExceptionMatches2(err, exc_type1, exc_type2);
+    }
+    return (PyErr_GivenExceptionMatches(err, exc_type1) || PyErr_GivenExceptionMatches(err, exc_type2));
+}
+#endif
+
 /* CheckBinaryVersion */
-      static int __Pyx_check_binary_version(void) {
+    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());
@@ -28756,7 +31226,7 @@ raise_neg_overflow:
 }
 
 /* TypeImport */
-      #ifndef __PYX_HAVE_RT_ImportType
+    #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)
@@ -28821,7 +31291,7 @@ bad:
 #endif
 
 /* FunctionImport */
-      #ifndef __PYX_HAVE_RT_ImportFunction
+    #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;
@@ -28875,7 +31345,7 @@ bad:
 #endif
 
 /* InitStrings */
-      static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
+    static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
     while (t->p) {
         #if PY_MAJOR_VERSION < 3
         if (t->is_unicode) {
@@ -28900,6 +31370,8 @@ bad:
         #endif
         if (!*t->p)
             return -1;
+        if (PyObject_Hash(*t->p) == -1)
+            PyErr_Clear();
         ++t;
     }
     return 0;
@@ -28908,50 +31380,57 @@ bad:
 static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) {
     return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str));
 }
-static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) {
+static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) {
     Py_ssize_t ignore;
     return __Pyx_PyObject_AsStringAndSize(o, &ignore);
 }
-static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
-#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 &&
-#endif
-            PyUnicode_Check(o)) {
-#if PY_VERSION_HEX < 0x03030000
-        char* defenc_c;
-        PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL);
-        if (!defenc) return NULL;
-        defenc_c = PyBytes_AS_STRING(defenc);
+#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
+#if !CYTHON_PEP393_ENABLED
+static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
+    char* defenc_c;
+    PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL);
+    if (!defenc) return NULL;
+    defenc_c = PyBytes_AS_STRING(defenc);
 #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
-        {
-            char* end = defenc_c + PyBytes_GET_SIZE(defenc);
-            char* c;
-            for (c = defenc_c; c < end; c++) {
-                if ((unsigned char) (*c) >= 128) {
-                    PyUnicode_AsASCIIString(o);
-                    return NULL;
-                }
+    {
+        char* end = defenc_c + PyBytes_GET_SIZE(defenc);
+        char* c;
+        for (c = defenc_c; c < end; c++) {
+            if ((unsigned char) (*c) >= 128) {
+                PyUnicode_AsASCIIString(o);
+                return NULL;
             }
         }
+    }
 #endif
-        *length = PyBytes_GET_SIZE(defenc);
-        return defenc_c;
+    *length = PyBytes_GET_SIZE(defenc);
+    return defenc_c;
+}
 #else
-        if (__Pyx_PyUnicode_READY(o) == -1) return NULL;
+static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
+    if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL;
 #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
-        if (PyUnicode_IS_ASCII(o)) {
-            *length = PyUnicode_GET_LENGTH(o);
-            return PyUnicode_AsUTF8(o);
-        } else {
-            PyUnicode_AsASCIIString(o);
-            return NULL;
-        }
+    if (likely(PyUnicode_IS_ASCII(o))) {
+        *length = PyUnicode_GET_LENGTH(o);
+        return PyUnicode_AsUTF8(o);
+    } else {
+        PyUnicode_AsASCIIString(o);
+        return NULL;
+    }
 #else
-        return PyUnicode_AsUTF8AndSize(o, length);
+    return PyUnicode_AsUTF8AndSize(o, length);
+#endif
+}
+#endif
 #endif
+static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
+#if __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 &&
 #endif
+            PyUnicode_Check(o)) {
+        return __Pyx_PyUnicode_AsStringAndSize(o, length);
     } else
 #endif
 #if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE))
@@ -28975,43 +31454,67 @@ 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 PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) {
+#if PY_MAJOR_VERSION >= 3
+    if (PyLong_Check(result)) {
+        if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
+                "__int__ returned non-int (type %.200s).  "
+                "The ability to return an instance of a strict subclass of int "
+                "is deprecated, and may be removed in a future version of Python.",
+                Py_TYPE(result)->tp_name)) {
+            Py_DECREF(result);
+            return NULL;
+        }
+        return result;
+    }
+#endif
+    PyErr_Format(PyExc_TypeError,
+                 "__%.4s__ returned non-%.4s (type %.200s)",
+                 type_name, type_name, Py_TYPE(result)->tp_name);
+    Py_DECREF(result);
+    return NULL;
+}
 static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) {
+#if CYTHON_USE_TYPE_SLOTS
   PyNumberMethods *m;
+#endif
   const char *name = NULL;
   PyObject *res = NULL;
 #if PY_MAJOR_VERSION < 3
-  if (PyInt_Check(x) || PyLong_Check(x))
+  if (likely(PyInt_Check(x) || PyLong_Check(x)))
 #else
-  if (PyLong_Check(x))
+  if (likely(PyLong_Check(x)))
 #endif
     return __Pyx_NewRef(x);
+#if CYTHON_USE_TYPE_SLOTS
   m = Py_TYPE(x)->tp_as_number;
-#if PY_MAJOR_VERSION < 3
+  #if PY_MAJOR_VERSION < 3
   if (m && m->nb_int) {
     name = "int";
-    res = PyNumber_Int(x);
+    res = m->nb_int(x);
   }
   else if (m && m->nb_long) {
     name = "long";
-    res = PyNumber_Long(x);
+    res = m->nb_long(x);
   }
-#else
-  if (m && m->nb_int) {
+  #else
+  if (likely(m && m->nb_int)) {
     name = "int";
-    res = PyNumber_Long(x);
+    res = m->nb_int(x);
+  }
+  #endif
+#else
+  if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) {
+    res = PyNumber_Int(x);
   }
 #endif
-  if (res) {
+  if (likely(res)) {
 #if PY_MAJOR_VERSION < 3
-    if (!PyInt_Check(res) && !PyLong_Check(res)) {
+    if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) {
 #else
-    if (!PyLong_Check(res)) {
+    if (unlikely(!PyLong_CheckExact(res))) {
 #endif
-      PyErr_Format(PyExc_TypeError,
-                   "__%.4s__ returned non-%.4s (type %.200s)",
-                   name, name, Py_TYPE(res)->tp_name);
-      Py_DECREF(res);
-      return NULL;
+        return __Pyx_PyNumber_IntOrLongWrongResultType(res, name);
     }
   }
   else if (!PyErr_Occurred()) {
diff --git a/src/libpetsc4py/libpetsc4py.h b/src/libpetsc4py/libpetsc4py.h
index 155f2ff..d26fbfd 100644
--- a/src/libpetsc4py/libpetsc4py.h
+++ b/src/libpetsc4py/libpetsc4py.h
@@ -1,4 +1,4 @@
-/* Generated by Cython 0.24 */
+/* Generated by Cython 0.27.1 */
 
 #ifndef __PYX_HAVE__libpetsc4py
 #define __PYX_HAVE__libpetsc4py
@@ -18,21 +18,24 @@
   #define DL_IMPORT(_T) _T
 #endif
 
-__PYX_EXTERN_C DL_IMPORT(int) import_libpetsc4py(void);
-__PYX_EXTERN_C DL_IMPORT(PetscErrorCode) MatPythonGetContext(Mat, void **);
-__PYX_EXTERN_C DL_IMPORT(PetscErrorCode) MatPythonSetContext(Mat, void *);
-__PYX_EXTERN_C DL_IMPORT(PetscErrorCode) PCPythonGetContext(PC, void **);
-__PYX_EXTERN_C DL_IMPORT(PetscErrorCode) PCPythonSetContext(PC, void *);
-__PYX_EXTERN_C DL_IMPORT(PetscErrorCode) KSPPythonGetContext(KSP, void **);
-__PYX_EXTERN_C DL_IMPORT(PetscErrorCode) KSPPythonSetContext(KSP, void *);
-__PYX_EXTERN_C DL_IMPORT(PetscErrorCode) SNESPythonGetContext(SNES, void **);
-__PYX_EXTERN_C DL_IMPORT(PetscErrorCode) SNESPythonSetContext(SNES, void *);
-__PYX_EXTERN_C DL_IMPORT(PetscErrorCode) TSPythonGetContext(TS, void **);
-__PYX_EXTERN_C DL_IMPORT(PetscErrorCode) TSPythonSetContext(TS, void *);
-__PYX_EXTERN_C DL_IMPORT(PetscErrorCode) PetscPythonRegisterAll(void);
+__PYX_EXTERN_C int import_libpetsc4py(void);
+__PYX_EXTERN_C PetscErrorCode MatPythonGetContext(Mat, void **);
+__PYX_EXTERN_C PetscErrorCode MatPythonSetContext(Mat, void *);
+__PYX_EXTERN_C PetscErrorCode PCPythonGetContext(PC, void **);
+__PYX_EXTERN_C PetscErrorCode PCPythonSetContext(PC, void *);
+__PYX_EXTERN_C PetscErrorCode KSPPythonGetContext(KSP, void **);
+__PYX_EXTERN_C PetscErrorCode KSPPythonSetContext(KSP, void *);
+__PYX_EXTERN_C PetscErrorCode SNESPythonGetContext(SNES, void **);
+__PYX_EXTERN_C PetscErrorCode SNESPythonSetContext(SNES, void *);
+__PYX_EXTERN_C PetscErrorCode TSPythonGetContext(TS, void **);
+__PYX_EXTERN_C PetscErrorCode TSPythonSetContext(TS, void *);
+__PYX_EXTERN_C PetscErrorCode PetscPythonRegisterAll(void);
 
 #endif /* !__PYX_HAVE_API__libpetsc4py */
 
+/* WARNING: the interface of the module init function changed in CPython 3.5. */
+/* It now returns a PyModuleDef instance instead of a PyModule instance. */
+
 #if PY_MAJOR_VERSION < 3
 PyMODINIT_FUNC initlibpetsc4py(void);
 #else
diff --git a/src/libpetsc4py/libpetsc4py.pyx b/src/libpetsc4py/libpetsc4py.pyx
index 7b6afc4..f254191 100644
--- a/src/libpetsc4py/libpetsc4py.pyx
+++ b/src/libpetsc4py/libpetsc4py.pyx
@@ -1,4 +1,6 @@
 #cython: cdivision=True
+#cython: binding=False
+#cython: auto_pickle=False
 #cython: autotestdict=False
 #cython: warn.multiple_declarators=False
 cimport cython
@@ -463,7 +465,7 @@ cdef extern from * nogil:
         PetscErrorCode (*view)(PetscMat,PetscViewer) except IERR
         PetscErrorCode (*duplicate)(PetscMat,MatDuplicateOption,PetscMat*) except IERR
         PetscErrorCode (*copy)(PetscMat,PetscMat,MatStructure) except IERR
-        PetscErrorCode (*getsubmatrix)(PetscMat,PetscIS,PetscIS,MatReuse,PetscMat*) except IERR
+        PetscErrorCode (*createsubmatrix)(PetscMat,PetscIS,PetscIS,MatReuse,PetscMat*) except IERR
         PetscErrorCode (*setoption)(PetscMat,MatOption,PetscBool) except IERR
         PetscErrorCode (*setup)(PetscMat) except IERR
         PetscErrorCode (*assemblybegin)(PetscMat,MatAssemblyType) except IERR
@@ -549,7 +551,7 @@ cdef PetscErrorCode MatCreate_Python(
     ops.view              = MatView_Python
     ops.duplicate         = MatDuplicate_Python
     ops.copy              = MatCopy_Python
-    ops.getsubmatrix      = MatGetSubMatrix_Python
+    ops.createsubmatrix   = MatCreateSubMatrix_Python
     ops.setoption         = MatSetOption_Python
     ops.setup             = MatSetUp_Python
     ops.assemblybegin     = MatAssemblyBegin_Python
@@ -693,7 +695,7 @@ cdef PetscErrorCode MatGetDiagonalBlock_Python(
     if sub is not None: out[0] = sub.mat
     return FunctionEnd()
 
-cdef PetscErrorCode MatGetSubMatrix_Python(
+cdef PetscErrorCode MatCreateSubMatrix_Python(
     PetscMat mat,
     PetscIS  row,
     PetscIS  col,
@@ -702,15 +704,15 @@ cdef PetscErrorCode MatGetSubMatrix_Python(
     ) \
     except IERR with gil:
     FunctionBegin(b"MatCopy_Python")
-    cdef getSubMatrix = PyMat(mat).getSubMatrix
-    if getSubMatrix is None: return UNSUPPORTED(b"getSubMatrix")
+    cdef createSubMatrix = PyMat(mat).createSubMatrix
+    if createSubMatrix is None: return UNSUPPORTED(b"createSubMatrix")
     cdef Mat sub = None
     if op == MAT_IGNORE_MATRIX:
         sub = None
     elif op == MAT_INITIAL_MATRIX:
-        sub = getSubMatrix(Mat_(mat), IS_(row), IS_(col), None)
+        sub = createSubMatrix(Mat_(mat), IS_(row), IS_(col), None)
     elif op == MAT_REUSE_MATRIX:
-        sub = getSubMatrix(Mat_(mat), IS_(row), IS_(col), Mat_(out[0]))
+        sub = createSubMatrix(Mat_(mat), IS_(row), IS_(col), Mat_(out[0]))
     if sub is not None:
         addRef(sub.mat)
         out[0] = sub.mat
@@ -725,7 +727,7 @@ cdef PetscErrorCode MatSetOption_Python(
     FunctionBegin(b"MatSetOption_Python")
     cdef setOption = PyMat(mat).setOption
     if setOption is not None:
-        setOption(Mat_(mat), <long>op, <bint>flag)
+        setOption(Mat_(mat), <long>op, <bint>(<int>flag))
     return FunctionEnd()
 
 cdef PetscErrorCode MatSetUp_Python(
@@ -930,7 +932,7 @@ cdef PetscErrorCode MatMultTransposeAdd_Python(
     except IERR with gil:
     FunctionBegin(b"MatMultTransposeAdd_Python")
     cdef multTransposeAdd = PyMat(mat).multTransposeAdd
-    if multTransposeAdd is not None:
+    if multTransposeAdd is None:
         CHKERR( MatMultTranspose(mat,x,y) )
         CHKERR( VecAXPY(y,1.0,v)          )
         return FunctionEnd()
@@ -947,7 +949,7 @@ cdef PetscErrorCode MatMultHermitianAdd_Python(
     except IERR with gil:
     FunctionBegin(b"MatMultHermitianAdd_Python")
     cdef multHermitianAdd = PyMat(mat).multHermitianAdd
-    if multHermitianAdd is not None:
+    if multHermitianAdd is None:
         CHKERR( MatMultHermitian(mat,x,y) )
         CHKERR( VecAXPY(y,1.0,v)          )
         return FunctionEnd()
@@ -1024,7 +1026,7 @@ cdef PetscErrorCode MatSolveTransposeAdd_Python(
     except IERR with gil:
     FunctionBegin(b"MatSolveTransposeAdd_Python")
     cdef solveTransposeAdd = PyMat(mat).solveTransposeAdd
-    if solveTransposeAdd is not None:
+    if solveTransposeAdd is None:
         CHKERR( MatSolveTranspose(mat,b,x) )
         CHKERR( VecAXPY(x,1.0,y)           )
         return FunctionEnd()
@@ -1388,6 +1390,7 @@ cdef extern from * nogil:
         PC_SYMMETRIC
     ctypedef enum KSPConvergedReason:
         KSP_CONVERGED_ITERATING
+        KSP_DIVERGED_ITS
 cdef extern from * nogil:
     struct _KSPOps:
       PetscErrorCode (*destroy)(PetscKSP) except IERR
@@ -1691,6 +1694,9 @@ cdef PetscErrorCode KSPSolve_Python_default(
         CHKERR( KSPLogHistory(ksp,ksp.norm) )
         CHKERR( KSPMonitor(ksp,ksp.iter,ksp.norm) )
     <void>its # silent unused warning
+    if ksp.iter == ksp.max_its:
+        if ksp.reason == KSP_CONVERGED_ITERATING:
+            ksp.reason = KSP_DIVERGED_ITS
     #
     return FunctionEnd()
 
@@ -1734,7 +1740,9 @@ cdef PetscErrorCode KSPStep_Python(
 # --------------------------------------------------------------------
 
 cdef extern from * nogil:
-    ctypedef enum SNESConvergedReason: SNES_CONVERGED_ITERATING
+    ctypedef enum SNESConvergedReason:
+      SNES_CONVERGED_ITERATING
+      SNES_DIVERGED_MAX_IT
 cdef extern from * nogil:
     struct _SNESOps:
       PetscErrorCode (*destroy)(PetscSNES) except IERR
@@ -1765,6 +1773,8 @@ cdef extern from * nogil:
     int SNESComputeJacobian(PetscSNES,PetscVec,PetscMat,PetscMat)
     SNESJacobian MatMFFDComputeJacobian
     PetscErrorCode SNESGetKSP(PetscSNES,PetscKSP*)
+    PetscErrorCode SNESGetLineSearch(PetscSNES,PetscSNESLineSearch*)
+    PetscErrorCode SNESLineSearchApply(PetscSNESLineSearch,PetscVec,PetscVec,PetscReal*,PetscVec)
 cdef extern from * nogil:
     PetscErrorCode SNESGetRhs(PetscSNES,PetscVec*)
     PetscErrorCode SNESGetSolution(PetscSNES,PetscVec*)
@@ -1945,9 +1955,11 @@ cdef PetscErrorCode SNESSolve_Python_default(
     FunctionBegin(b"SNESSolve_Python_default")
     #
     cdef PetscVec X=NULL, F=NULL, Y=NULL
+    cdef PetscSNESLineSearch ls
     CHKERR( SNESGetSolution(snes,&X)           )
     CHKERR( SNESGetFunction(snes,&F,NULL,NULL) )
     CHKERR( SNESGetSolutionUpdate(snes,&Y)     )
+    CHKERR( SNESGetLineSearch(snes, &ls)       )
     cdef PetscInt  its=0, lits=0
     cdef PetscReal xnorm = 0.0
     cdef PetscReal fnorm = 0.0
@@ -1971,10 +1983,8 @@ cdef PetscErrorCode SNESSolve_Python_default(
         SNESStep_Python(snes,X,F,Y)
         lits += snes.linear_its
         #
-        CHKERR( VecAXPY(X,-1.0,Y)             )
-        CHKERR( SNESComputeFunction(snes,X,F) )
+        CHKERR( SNESLineSearchApply(ls,X,F,&fnorm,Y) )
         CHKERR( VecNorm(X,NORM_2,&xnorm)      )
-        CHKERR( VecNorm(F,NORM_2,&fnorm)      )
         CHKERR( VecNorm(Y,NORM_2,&ynorm)      )
         snes.iter += 1
         #
@@ -1983,6 +1993,9 @@ cdef PetscErrorCode SNESSolve_Python_default(
         CHKERR( SNESLogHistory(snes,snes.norm,lits) )
         CHKERR( SNESMonitor(snes,snes.iter,snes.norm) )
     <void>its # silent unused warning
+    if snes.iter == snes.max_its:
+        if snes.reason == SNES_CONVERGED_ITERATING:
+            snes.reason = SNES_DIVERGED_MAX_IT
     #
     return FunctionEnd()
 
@@ -2110,6 +2123,8 @@ cdef extern from * nogil:
     PetscErrorCode TSMonitor(PetscTS,PetscInt,PetscReal,PetscVec)
     PetscErrorCode TSComputeIFunction(PetscTS,PetscReal,PetscVec,PetscVec,PetscVec,PetscBool)
     PetscErrorCode TSComputeIJacobian(PetscTS,PetscReal,PetscVec,PetscVec,PetscReal,PetscMat,PetscMat,PetscBool)
+    PetscErrorCode TSComputeI2Function(PetscTS,PetscReal,PetscVec,PetscVec,PetscVec,PetscVec)
+    PetscErrorCode TSComputeI2Jacobian(PetscTS,PetscReal,PetscVec,PetscVec,PetscVec,PetscReal,PetscReal,PetscMat,PetscMat)
     PetscErrorCode SNESTSFormFunction(PetscSNES,PetscVec,PetscVec,void*)
     PetscErrorCode SNESTSFormJacobian(PetscSNES,PetscVec,PetscMat,PetscMat,void*)
 
diff --git a/src/petsc4py.PETSc.c b/src/petsc4py.PETSc.c
index 7f37d28..85effab 100644
--- a/src/petsc4py.PETSc.c
+++ b/src/petsc4py.PETSc.c
@@ -1,13 +1,14 @@
-/* Generated by Cython 0.24 */
+/* Generated by Cython 0.27.1 */
 
 #define PY_SSIZE_T_CLEAN
 #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+.
+#elif PY_VERSION_HEX < 0x02060000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000)
+    #error Cython requires Python 2.6+ or Python 3.3+.
 #else
-#define CYTHON_ABI "0_24"
+#define CYTHON_ABI "0_27_1"
+#define CYTHON_FUTURE_DIVISION 0
 #include <stddef.h>
 #ifndef offsetof
   #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
@@ -29,6 +30,12 @@
 #ifndef DL_EXPORT
   #define DL_EXPORT(t) t
 #endif
+#define __PYX_COMMA ,
+#ifndef HAVE_LONG_LONG
+  #if PY_VERSION_HEX >= 0x02070000
+    #define HAVE_LONG_LONG
+  #endif
+#endif
 #ifndef PY_LONG_LONG
   #define PY_LONG_LONG LONG_LONG
 #endif
@@ -37,13 +44,138 @@
 #endif
 #ifdef PYPY_VERSION
   #define CYTHON_COMPILING_IN_PYPY 1
+  #define CYTHON_COMPILING_IN_PYSTON 0
+  #define CYTHON_COMPILING_IN_CPYTHON 0
+  #undef CYTHON_USE_TYPE_SLOTS
+  #define CYTHON_USE_TYPE_SLOTS 0
+  #undef CYTHON_USE_PYTYPE_LOOKUP
+  #define CYTHON_USE_PYTYPE_LOOKUP 0
+  #if PY_VERSION_HEX < 0x03050000
+    #undef CYTHON_USE_ASYNC_SLOTS
+    #define CYTHON_USE_ASYNC_SLOTS 0
+  #elif !defined(CYTHON_USE_ASYNC_SLOTS)
+    #define CYTHON_USE_ASYNC_SLOTS 1
+  #endif
+  #undef CYTHON_USE_PYLIST_INTERNALS
+  #define CYTHON_USE_PYLIST_INTERNALS 0
+  #undef CYTHON_USE_UNICODE_INTERNALS
+  #define CYTHON_USE_UNICODE_INTERNALS 0
+  #undef CYTHON_USE_UNICODE_WRITER
+  #define CYTHON_USE_UNICODE_WRITER 0
+  #undef CYTHON_USE_PYLONG_INTERNALS
+  #define CYTHON_USE_PYLONG_INTERNALS 0
+  #undef CYTHON_AVOID_BORROWED_REFS
+  #define CYTHON_AVOID_BORROWED_REFS 1
+  #undef CYTHON_ASSUME_SAFE_MACROS
+  #define CYTHON_ASSUME_SAFE_MACROS 0
+  #undef CYTHON_UNPACK_METHODS
+  #define CYTHON_UNPACK_METHODS 0
+  #undef CYTHON_FAST_THREAD_STATE
+  #define CYTHON_FAST_THREAD_STATE 0
+  #undef CYTHON_FAST_PYCALL
+  #define CYTHON_FAST_PYCALL 0
+  #undef CYTHON_PEP489_MULTI_PHASE_INIT
+  #define CYTHON_PEP489_MULTI_PHASE_INIT 0
+  #undef CYTHON_USE_TP_FINALIZE
+  #define CYTHON_USE_TP_FINALIZE 0
+#elif defined(PYSTON_VERSION)
+  #define CYTHON_COMPILING_IN_PYPY 0
+  #define CYTHON_COMPILING_IN_PYSTON 1
   #define CYTHON_COMPILING_IN_CPYTHON 0
+  #ifndef CYTHON_USE_TYPE_SLOTS
+    #define CYTHON_USE_TYPE_SLOTS 1
+  #endif
+  #undef CYTHON_USE_PYTYPE_LOOKUP
+  #define CYTHON_USE_PYTYPE_LOOKUP 0
+  #undef CYTHON_USE_ASYNC_SLOTS
+  #define CYTHON_USE_ASYNC_SLOTS 0
+  #undef CYTHON_USE_PYLIST_INTERNALS
+  #define CYTHON_USE_PYLIST_INTERNALS 0
+  #ifndef CYTHON_USE_UNICODE_INTERNALS
+    #define CYTHON_USE_UNICODE_INTERNALS 1
+  #endif
+  #undef CYTHON_USE_UNICODE_WRITER
+  #define CYTHON_USE_UNICODE_WRITER 0
+  #undef CYTHON_USE_PYLONG_INTERNALS
+  #define CYTHON_USE_PYLONG_INTERNALS 0
+  #ifndef CYTHON_AVOID_BORROWED_REFS
+    #define CYTHON_AVOID_BORROWED_REFS 0
+  #endif
+  #ifndef CYTHON_ASSUME_SAFE_MACROS
+    #define CYTHON_ASSUME_SAFE_MACROS 1
+  #endif
+  #ifndef CYTHON_UNPACK_METHODS
+    #define CYTHON_UNPACK_METHODS 1
+  #endif
+  #undef CYTHON_FAST_THREAD_STATE
+  #define CYTHON_FAST_THREAD_STATE 0
+  #undef CYTHON_FAST_PYCALL
+  #define CYTHON_FAST_PYCALL 0
+  #undef CYTHON_PEP489_MULTI_PHASE_INIT
+  #define CYTHON_PEP489_MULTI_PHASE_INIT 0
+  #undef CYTHON_USE_TP_FINALIZE
+  #define CYTHON_USE_TP_FINALIZE 0
 #else
   #define CYTHON_COMPILING_IN_PYPY 0
+  #define CYTHON_COMPILING_IN_PYSTON 0
   #define CYTHON_COMPILING_IN_CPYTHON 1
+  #ifndef CYTHON_USE_TYPE_SLOTS
+    #define CYTHON_USE_TYPE_SLOTS 1
+  #endif
+  #if PY_VERSION_HEX < 0x02070000
+    #undef CYTHON_USE_PYTYPE_LOOKUP
+    #define CYTHON_USE_PYTYPE_LOOKUP 0
+  #elif !defined(CYTHON_USE_PYTYPE_LOOKUP)
+    #define CYTHON_USE_PYTYPE_LOOKUP 1
+  #endif
+  #if PY_MAJOR_VERSION < 3
+    #undef CYTHON_USE_ASYNC_SLOTS
+    #define CYTHON_USE_ASYNC_SLOTS 0
+  #elif !defined(CYTHON_USE_ASYNC_SLOTS)
+    #define CYTHON_USE_ASYNC_SLOTS 1
+  #endif
+  #if PY_VERSION_HEX < 0x02070000
+    #undef CYTHON_USE_PYLONG_INTERNALS
+    #define CYTHON_USE_PYLONG_INTERNALS 0
+  #elif !defined(CYTHON_USE_PYLONG_INTERNALS)
+    #define CYTHON_USE_PYLONG_INTERNALS 1
+  #endif
+  #ifndef CYTHON_USE_PYLIST_INTERNALS
+    #define CYTHON_USE_PYLIST_INTERNALS 1
+  #endif
+  #ifndef CYTHON_USE_UNICODE_INTERNALS
+    #define CYTHON_USE_UNICODE_INTERNALS 1
+  #endif
+  #if PY_VERSION_HEX < 0x030300F0
+    #undef CYTHON_USE_UNICODE_WRITER
+    #define CYTHON_USE_UNICODE_WRITER 0
+  #elif !defined(CYTHON_USE_UNICODE_WRITER)
+    #define CYTHON_USE_UNICODE_WRITER 1
+  #endif
+  #ifndef CYTHON_AVOID_BORROWED_REFS
+    #define CYTHON_AVOID_BORROWED_REFS 0
+  #endif
+  #ifndef CYTHON_ASSUME_SAFE_MACROS
+    #define CYTHON_ASSUME_SAFE_MACROS 1
+  #endif
+  #ifndef CYTHON_UNPACK_METHODS
+    #define CYTHON_UNPACK_METHODS 1
+  #endif
+  #ifndef CYTHON_FAST_THREAD_STATE
+    #define CYTHON_FAST_THREAD_STATE 1
+  #endif
+  #ifndef CYTHON_FAST_PYCALL
+    #define CYTHON_FAST_PYCALL 1
+  #endif
+  #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
+    #define CYTHON_PEP489_MULTI_PHASE_INIT (0 && PY_VERSION_HEX >= 0x03050000)
+  #endif
+  #ifndef CYTHON_USE_TP_FINALIZE
+    #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1)
+  #endif
 #endif
-#if !defined(CYTHON_USE_PYLONG_INTERNALS) && CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x02070000
-  #define CYTHON_USE_PYLONG_INTERNALS 1
+#if !defined(CYTHON_FAST_PYCCALL)
+#define CYTHON_FAST_PYCCALL  (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1)
 #endif
 #if CYTHON_USE_PYLONG_INTERNALS
   #include "longintrepr.h"
@@ -79,24 +211,69 @@
 #ifndef Py_TPFLAGS_HAVE_FINALIZE
   #define Py_TPFLAGS_HAVE_FINALIZE 0
 #endif
+#if PY_VERSION_HEX < 0x030700A0 || !defined(METH_FASTCALL)
+  #ifndef METH_FASTCALL
+     #define METH_FASTCALL 0x80
+  #endif
+  typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject **args, Py_ssize_t nargs);
+  typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject **args,
+                                                          Py_ssize_t nargs, PyObject *kwnames);
+#else
+  #define __Pyx_PyCFunctionFast _PyCFunctionFast
+  #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords
+#endif
+#if CYTHON_FAST_PYCCALL
+#define __Pyx_PyFastCFunction_Check(func)\
+    ((PyCFunction_Check(func) && (METH_FASTCALL == (PyCFunction_GET_FLAGS(func) & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS)))))
+#else
+#define __Pyx_PyFastCFunction_Check(func) 0
+#endif
+#if !CYTHON_FAST_THREAD_STATE || PY_VERSION_HEX < 0x02070000
+  #define __Pyx_PyThreadState_Current PyThreadState_GET()
+#elif PY_VERSION_HEX >= 0x03060000
+  #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet()
+#elif PY_VERSION_HEX >= 0x03000000
+  #define __Pyx_PyThreadState_Current PyThreadState_GET()
+#else
+  #define __Pyx_PyThreadState_Current _PyThreadState_Current
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized)
+#define __Pyx_PyDict_NewPresized(n)  ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n))
+#else
+#define __Pyx_PyDict_NewPresized(n)  PyDict_New()
+#endif
+#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION
+  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_TrueDivide(x,y)
+  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceTrueDivide(x,y)
+#else
+  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_Divide(x,y)
+  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceDivide(x,y)
+#endif
 #if PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
   #define CYTHON_PEP393_ENABLED 1
   #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_MAX_CHAR_VALUE(u)   PyUnicode_MAX_CHAR_VALUE(u)
   #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_WRITE(k, d, i, ch)  PyUnicode_WRITE(k, d, i, ch)
   #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 PyUnicode_1BYTE_KIND  1
+  #define PyUnicode_2BYTE_KIND  2
+  #define PyUnicode_4BYTE_KIND  4
   #define __Pyx_PyUnicode_READY(op)       (0)
   #define __Pyx_PyUnicode_GET_LENGTH(u)   PyUnicode_GET_SIZE(u)
   #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))
+  #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u)   ((sizeof(Py_UNICODE) == 2) ? 65535 : 1114111)
   #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_WRITE(k, d, i, ch)  (((void)(k)), ((Py_UNICODE*)d)[i] = ch)
   #define __Pyx_PyUnicode_IS_TRUE(u)      (0 != PyUnicode_GET_SIZE(u))
 #endif
 #if CYTHON_COMPILING_IN_PYPY
@@ -110,6 +287,9 @@
 #if CYTHON_COMPILING_IN_PYPY && !defined(PyUnicode_Contains)
   #define PyUnicode_Contains(u, s)  PySequence_Contains(u, s)
 #endif
+#if CYTHON_COMPILING_IN_PYPY && !defined(PyByteArray_Check)
+  #define PyByteArray_Check(obj)  PyObject_TypeCheck(obj, &PyByteArray_Type)
+#endif
 #if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Format)
   #define PyObject_Format(obj, fmt)  PyObject_CallMethod(obj, "__format__", "O", fmt)
 #endif
@@ -118,6 +298,13 @@
   #define PyObject_Free(p)     PyMem_Free(p)
   #define PyObject_Realloc(p)  PyMem_Realloc(p)
 #endif
+#if CYTHON_COMPILING_IN_PYSTON
+  #define __Pyx_PyCode_HasFreeVars(co)  PyCode_HasFreeVars(co)
+  #define __Pyx_PyFrame_SetLineNumber(frame, lineno) PyFrame_SetLineNumber(frame, lineno)
+#else
+  #define __Pyx_PyCode_HasFreeVars(co)  (PyCode_GetNumFree(co) > 0)
+  #define __Pyx_PyFrame_SetLineNumber(frame, lineno)  (frame)->f_lineno = (lineno)
+#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
@@ -145,7 +332,7 @@
 #ifndef PySet_CheckExact
   #define PySet_CheckExact(obj)        (Py_TYPE(obj) == &PySet_Type)
 #endif
-#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
+#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception)
 #if PY_MAJOR_VERSION >= 3
   #define PyIntObject                  PyLongObject
   #define PyInt_Type                   PyLong_Type
@@ -184,18 +371,28 @@
 #else
   #define __Pyx_PyMethod_New(func, self, klass) PyMethod_New(func, self, klass)
 #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))
+#ifndef __has_attribute
+  #define __has_attribute(x) 0
+#endif
+#ifndef __has_cpp_attribute
+  #define __has_cpp_attribute(x) 0
+#endif
+#if CYTHON_USE_ASYNC_SLOTS
+  #if PY_VERSION_HEX >= 0x030500B1
+    #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods
+    #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async)
+  #else
+    #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved))
+  #endif
 #else
-#define __Pyx_PyType_AsAsync(obj) NULL
+  #define __Pyx_PyType_AsAsync(obj) NULL
+#endif
+#ifndef __Pyx_PyAsyncMethodsStruct
+    typedef struct {
+        unaryfunc am_await;
+        unaryfunc am_aiter;
+        unaryfunc am_anext;
+    } __Pyx_PyAsyncMethodsStruct;
 #endif
 #ifndef CYTHON_RESTRICT
   #if defined(__GNUC__)
@@ -208,10 +405,68 @@ typedef struct {
     #define CYTHON_RESTRICT
   #endif
 #endif
+#ifndef CYTHON_UNUSED
+# if defined(__GNUC__)
+#   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
+#     define CYTHON_UNUSED __attribute__ ((__unused__))
+#   else
+#     define CYTHON_UNUSED
+#   endif
+# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
+#   define CYTHON_UNUSED __attribute__ ((__unused__))
+# else
+#   define CYTHON_UNUSED
+# endif
+#endif
+#ifndef CYTHON_MAYBE_UNUSED_VAR
+#  if defined(__cplusplus)
+     template<class T> void CYTHON_MAYBE_UNUSED_VAR( const T& ) { }
+#  else
+#    define CYTHON_MAYBE_UNUSED_VAR(x) (void)(x)
+#  endif
+#endif
+#ifndef CYTHON_NCP_UNUSED
+# if CYTHON_COMPILING_IN_CPYTHON
+#  define CYTHON_NCP_UNUSED
+# else
+#  define CYTHON_NCP_UNUSED CYTHON_UNUSED
+# endif
+#endif
 #define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None)
+#ifdef _MSC_VER
+    #ifndef _MSC_STDINT_H_
+        #if _MSC_VER < 1300
+           typedef unsigned char     uint8_t;
+           typedef unsigned int      uint32_t;
+        #else
+           typedef unsigned __int8   uint8_t;
+           typedef unsigned __int32  uint32_t;
+        #endif
+    #endif
+#else
+   #include <stdint.h>
+#endif
+#ifndef CYTHON_FALLTHROUGH
+  #ifdef __cplusplus
+    #if __has_cpp_attribute(fallthrough)
+      #define CYTHON_FALLTHROUGH [[fallthrough]]
+    #elif __has_cpp_attribute(clang::fallthrough)
+      #define CYTHON_FALLTHROUGH [[clang::fallthrough]]
+    #endif
+  #endif
+  #ifndef CYTHON_FALLTHROUGH
+    #if __has_attribute(fallthrough) || (defined(__GNUC__) && defined(__attribute__))
+      #define CYTHON_FALLTHROUGH __attribute__((fallthrough))
+    #else
+      #define CYTHON_FALLTHROUGH
+    #endif
+  #endif
+#endif
 
 #ifndef CYTHON_INLINE
-  #if defined(__GNUC__)
+  #if defined(__clang__)
+    #define CYTHON_INLINE __inline__ __attribute__ ((__unused__))
+  #elif defined(__GNUC__)
     #define CYTHON_INLINE __inline__
   #elif defined(_MSC_VER)
     #define CYTHON_INLINE __inline
@@ -235,6 +490,11 @@ static CYTHON_INLINE float __PYX_NAN() {
   return value;
 }
 #endif
+#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL)
+#define __Pyx_truncl trunc
+#else
+#define __Pyx_truncl truncl
+#endif
 
 
 #define __PYX_ERR(f_index, lineno, Ln_error) \
@@ -242,14 +502,6 @@ static CYTHON_INLINE float __PYX_NAN() {
   __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)
-#else
-  #define __Pyx_PyNumber_Divide(x,y)         PyNumber_Divide(x,y)
-  #define __Pyx_PyNumber_InPlaceDivide(x,y)  PyNumber_InPlaceDivide(x,y)
-#endif
-
 #ifndef __PYX_EXTERN_C
   #ifdef __cplusplus
     #define __PYX_EXTERN_C extern "C"
@@ -276,30 +528,10 @@ static CYTHON_INLINE float __PYX_NAN() {
 #include <omp.h>
 #endif /* _OPENMP */
 
-#ifdef PYREX_WITHOUT_ASSERTIONS
+#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS)
 #define CYTHON_WITHOUT_ASSERTIONS
 #endif
 
-#ifndef CYTHON_UNUSED
-# if defined(__GNUC__)
-#   if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
-#     define CYTHON_UNUSED __attribute__ ((__unused__))
-#   else
-#     define CYTHON_UNUSED
-#   endif
-# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
-#   define CYTHON_UNUSED __attribute__ ((__unused__))
-# else
-#   define CYTHON_UNUSED
-# endif
-#endif
-#ifndef CYTHON_NCP_UNUSED
-# if CYTHON_COMPILING_IN_CPYTHON
-#  define CYTHON_NCP_UNUSED
-# else
-#  define CYTHON_NCP_UNUSED CYTHON_UNUSED
-# endif
-#endif
 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;
 
@@ -327,8 +559,8 @@ typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* enc
     #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 (_MSC_VER)
+    #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value))
 #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
     #define __Pyx_sst_abs(value) llabs(value)
 #elif defined (__GNUC__)
@@ -336,8 +568,8 @@ typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* enc
 #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);
+static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*);
+static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length);
 #define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s))
 #define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l)
 #define __Pyx_PyBytes_FromString        PyBytes_FromString
@@ -350,23 +582,27 @@ static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*);
     #define __Pyx_PyStr_FromString        __Pyx_PyUnicode_FromString
     #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize
 #endif
-#define __Pyx_PyObject_AsSString(s)    ((signed char*) __Pyx_PyObject_AsString(s))
-#define __Pyx_PyObject_AsUString(s)    ((unsigned char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyBytes_AsWritableString(s)     ((char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyBytes_AsWritableSString(s)    ((signed char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyBytes_AsWritableUString(s)    ((unsigned char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyBytes_AsString(s)     ((const char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyBytes_AsSString(s)    ((const signed char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyBytes_AsUString(s)    ((const unsigned char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyObject_AsWritableString(s)    ((char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_AsWritableSString(s)    ((signed char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_AsWritableUString(s)    ((unsigned char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_AsSString(s)    ((const signed char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_AsUString(s)    ((const unsigned char*) __Pyx_PyObject_AsString(s))
 #define __Pyx_PyObject_FromCString(s)  __Pyx_PyObject_FromString((const char*)s)
 #define __Pyx_PyBytes_FromCString(s)   __Pyx_PyBytes_FromString((const char*)s)
 #define __Pyx_PyByteArray_FromCString(s)   __Pyx_PyByteArray_FromString((const char*)s)
 #define __Pyx_PyStr_FromCString(s)     __Pyx_PyStr_FromString((const char*)s)
 #define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s)
-#if PY_MAJOR_VERSION < 3
-static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u)
-{
+static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u) {
     const Py_UNICODE *u_end = u;
     while (*u_end++) ;
     return (size_t)(u_end - u - 1);
 }
-#else
-#define __Pyx_Py_UNICODE_strlen Py_UNICODE_strlen
-#endif
 #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
@@ -375,9 +611,11 @@ static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u)
 #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_IntOrLong(PyObject* x);
+#define __Pyx_PySequence_Tuple(obj)\
+    (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj))
 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
+#if CYTHON_ASSUME_SAFE_MACROS
 #define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
 #else
 #define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
@@ -473,10 +711,12 @@ bad:
   #define likely(x)   (x)
   #define unlikely(x) (x)
 #endif /* __GNUC__ */
+static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; }
 
-static PyObject *__pyx_m;
+static PyObject *__pyx_m = NULL;
 static PyObject *__pyx_d;
 static PyObject *__pyx_b;
+static PyObject *__pyx_cython_runtime;
 static PyObject *__pyx_empty_tuple;
 static PyObject *__pyx_empty_bytes;
 static PyObject *__pyx_empty_unicode;
@@ -537,6 +777,18 @@ static const char *__pyx_f[] = {
   "PETSc/CAPI.pyx",
   "petsc4py.PETSc.pyx",
 };
+/* ForceInitThreads.proto */
+#ifndef __PYX_FORCE_INIT_THREADS
+  #define __PYX_FORCE_INIT_THREADS 0
+#endif
+
+/* NoFastGil.proto */
+#define __Pyx_PyGILState_Ensure PyGILState_Ensure
+#define __Pyx_PyGILState_Release PyGILState_Release
+#define __Pyx_FastGIL_Remember()
+#define __Pyx_FastGIL_Forget()
+#define __Pyx_FastGilFuncInit()
+
 
 /*--- Type declarations ---*/
 struct PyPetscCommObject;
@@ -623,7 +875,7 @@ typedef MPI_Comm *__pyx_t_8petsc4py_5PETSc_PyMPICommGet(PyObject *);
  */
 typedef PyObject *__pyx_t_8petsc4py_5PETSc_PyMPICommNew(MPI_Comm);
 
-/* "PETSc/petscvec.pxi":288
+/* "PETSc/petscvec.pxi":289
  * # --------------------------------------------------------------------
  * 
  * ctypedef int VecSetValuesFcn(PetscVec,PetscInt,const_PetscInt[],             # <<<<<<<<<<<<<<
@@ -632,7 +884,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":737
+/* "PETSc/petscmat.pxi":743
  * # -----------------------------------------------------------------------------
  * 
  * ctypedef int MatSetValuesFcn(PetscMat,PetscInt,const_PetscInt[],             # <<<<<<<<<<<<<<
@@ -648,7 +900,7 @@ typedef int __pyx_t_8petsc4py_5PETSc_MatSetValuesFcn(Mat, PetscInt, const PetscI
  */
 typedef int (*__pyx_t_8petsc4py_5PETSc_PetscDMShellXToYFunction)(DM, Vec, InsertMode, Vec);
 
-/* "petsc4py/PETSc.pxd":70
+/* "petsc4py/PETSc.pxd":73
  * # --------------------------------------------------------------------
  * 
  * ctypedef public api class Comm [             # <<<<<<<<<<<<<<
@@ -665,7 +917,7 @@ typedef struct PyPetscCommObject PyPetscCommObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscComm_Type;
 
-/* "petsc4py/PETSc.pxd":78
+/* "petsc4py/PETSc.pxd":81
  *     cdef object base
  * 
  * ctypedef public api class Object [             # <<<<<<<<<<<<<<
@@ -684,7 +936,7 @@ typedef struct PyPetscObjectObject PyPetscObjectObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscObject_Type;
 
-/* "petsc4py/PETSc.pxd":90
+/* "petsc4py/PETSc.pxd":93
  *     cdef object get_dict(self)
  * 
  * ctypedef public api class Viewer(Object) [             # <<<<<<<<<<<<<<
@@ -699,7 +951,7 @@ typedef struct PyPetscViewerObject PyPetscViewerObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscViewer_Type;
 
-/* "petsc4py/PETSc.pxd":96
+/* "petsc4py/PETSc.pxd":99
  *     cdef PetscViewer vwr
  * 
  * ctypedef public api class Random(Object) [             # <<<<<<<<<<<<<<
@@ -714,7 +966,7 @@ typedef struct PyPetscRandomObject PyPetscRandomObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscRandom_Type;
 
-/* "petsc4py/PETSc.pxd":102
+/* "petsc4py/PETSc.pxd":105
  *     cdef PetscRandom rnd
  * 
  * ctypedef public api class IS(Object) [             # <<<<<<<<<<<<<<
@@ -729,7 +981,7 @@ typedef struct PyPetscISObject PyPetscISObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscIS_Type;
 
-/* "petsc4py/PETSc.pxd":108
+/* "petsc4py/PETSc.pxd":111
  *     cdef PetscIS iset
  * 
  * ctypedef public api class LGMap(Object) [             # <<<<<<<<<<<<<<
@@ -744,7 +996,7 @@ typedef struct PyPetscLGMapObject PyPetscLGMapObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscLGMap_Type;
 
-/* "petsc4py/PETSc.pxd":114
+/* "petsc4py/PETSc.pxd":117
  *     cdef PetscLGMap lgm
  * 
  * ctypedef public api class SF(Object) [             # <<<<<<<<<<<<<<
@@ -759,7 +1011,7 @@ typedef struct PyPetscSFObject PyPetscSFObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscSF_Type;
 
-/* "petsc4py/PETSc.pxd":120
+/* "petsc4py/PETSc.pxd":123
  *     cdef PetscSF sf
  * 
  * ctypedef public api class Vec(Object) [             # <<<<<<<<<<<<<<
@@ -774,7 +1026,7 @@ typedef struct PyPetscVecObject PyPetscVecObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscVec_Type;
 
-/* "petsc4py/PETSc.pxd":126
+/* "petsc4py/PETSc.pxd":129
  *     cdef PetscVec vec
  * 
  * ctypedef public api class Scatter(Object) [             # <<<<<<<<<<<<<<
@@ -789,7 +1041,7 @@ typedef struct PyPetscScatterObject PyPetscScatterObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscScatter_Type;
 
-/* "petsc4py/PETSc.pxd":132
+/* "petsc4py/PETSc.pxd":135
  *     cdef PetscScatter sct
  * 
  * ctypedef public api class Section(Object) [             # <<<<<<<<<<<<<<
@@ -804,7 +1056,7 @@ typedef struct PyPetscSectionObject PyPetscSectionObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscSection_Type;
 
-/* "petsc4py/PETSc.pxd":138
+/* "petsc4py/PETSc.pxd":141
  *     cdef PetscSection sec
  * 
  * ctypedef public api class Mat(Object) [             # <<<<<<<<<<<<<<
@@ -819,7 +1071,7 @@ typedef struct PyPetscMatObject PyPetscMatObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscMat_Type;
 
-/* "petsc4py/PETSc.pxd":144
+/* "petsc4py/PETSc.pxd":147
  *     cdef PetscMat mat
  * 
  * ctypedef public api class NullSpace(Object) [             # <<<<<<<<<<<<<<
@@ -834,7 +1086,7 @@ typedef struct PyPetscNullSpaceObject PyPetscNullSpaceObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscNullSpace_Type;
 
-/* "petsc4py/PETSc.pxd":150
+/* "petsc4py/PETSc.pxd":153
  *     cdef PetscNullSpace nsp
  * 
  * ctypedef public api class PC(Object) [             # <<<<<<<<<<<<<<
@@ -849,7 +1101,7 @@ typedef struct PyPetscPCObject PyPetscPCObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscPC_Type;
 
-/* "petsc4py/PETSc.pxd":156
+/* "petsc4py/PETSc.pxd":159
  *     cdef PetscPC pc
  * 
  * ctypedef public api class KSP(Object) [             # <<<<<<<<<<<<<<
@@ -864,7 +1116,7 @@ typedef struct PyPetscKSPObject PyPetscKSPObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscKSP_Type;
 
-/* "petsc4py/PETSc.pxd":162
+/* "petsc4py/PETSc.pxd":165
  *     cdef PetscKSP ksp
  * 
  * ctypedef public api class SNES(Object) [             # <<<<<<<<<<<<<<
@@ -879,7 +1131,7 @@ typedef struct PyPetscSNESObject PyPetscSNESObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscSNES_Type;
 
-/* "petsc4py/PETSc.pxd":168
+/* "petsc4py/PETSc.pxd":171
  *     cdef PetscSNES snes
  * 
  * ctypedef public api class TS(Object) [             # <<<<<<<<<<<<<<
@@ -894,7 +1146,7 @@ typedef struct PyPetscTSObject PyPetscTSObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscTS_Type;
 
-/* "petsc4py/PETSc.pxd":174
+/* "petsc4py/PETSc.pxd":177
  *     cdef PetscTS ts
  * 
  * ctypedef public api class TAO(Object) [             # <<<<<<<<<<<<<<
@@ -909,7 +1161,7 @@ typedef struct PyPetscTAOObject PyPetscTAOObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscTAO_Type;
 
-/* "petsc4py/PETSc.pxd":180
+/* "petsc4py/PETSc.pxd":183
  *     cdef PetscTAO tao
  * 
  * ctypedef public api class AO(Object) [             # <<<<<<<<<<<<<<
@@ -924,7 +1176,7 @@ typedef struct PyPetscAOObject PyPetscAOObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscAO_Type;
 
-/* "petsc4py/PETSc.pxd":186
+/* "petsc4py/PETSc.pxd":189
  *     cdef PetscAO ao
  * 
  * ctypedef public api class DM(Object) [             # <<<<<<<<<<<<<<
@@ -939,7 +1191,7 @@ typedef struct PyPetscDMObject PyPetscDMObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscDM_Type;
 
-/* "petsc4py/PETSc.pxd":192
+/* "petsc4py/PETSc.pxd":195
  *     cdef PetscDM dm
  * 
  * ctypedef public api class Partitioner(Object) [             # <<<<<<<<<<<<<<
@@ -954,7 +1206,7 @@ typedef struct PyPetscPartitionerObject PyPetscPartitionerObject;
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscPartitioner_Type;
 
-/* "PETSc/petscis.pxi":113
+/* "PETSc/petscis.pxi":119
  * # --------------------------------------------------------------------
  * 
  * cdef class _IS_buffer:             # <<<<<<<<<<<<<<
@@ -971,7 +1223,7 @@ struct __pyx_obj_8petsc4py_5PETSc__IS_buffer {
 };
 
 
-/* "PETSc/petscvec.pxi":413
+/* "PETSc/petscvec.pxi":414
  *     return 0
  * 
  * cdef class _Vec_buffer:             # <<<<<<<<<<<<<<
@@ -989,7 +1241,7 @@ struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer {
 };
 
 
-/* "PETSc/petscvec.pxi":533
+/* "PETSc/petscvec.pxi":534
  * # --------------------------------------------------------------------
  * 
  * cdef class _Vec_LocalForm:             # <<<<<<<<<<<<<<
@@ -1003,7 +1255,7 @@ struct __pyx_obj_8petsc4py_5PETSc__Vec_LocalForm {
 };
 
 
-/* "PETSc/petscmat.pxi":1017
+/* "PETSc/petscmat.pxi":1023
  * 
  * #@cython.internal
  * cdef class _Mat_Stencil:             # <<<<<<<<<<<<<<
@@ -1132,7 +1384,7 @@ struct __pyx_obj_8petsc4py_5PETSc_LogEvent {
 };
 
 
-/* "PETSc/Viewer.pyx":322
+/* "PETSc/Viewer.pyx":353
  * # --------------------------------------------------------------------
  * 
  * cdef class ViewerHDF5(Viewer):             # <<<<<<<<<<<<<<
@@ -1209,7 +1461,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_Object *__pyx_vtabptr_8petsc4py_
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscViewer_Type;
 
-/* "PETSc/Viewer.pyx":74
+/* "PETSc/Viewer.pyx":73
  * # --------------------------------------------------------------------
  * 
  * cdef class Viewer(Object):             # <<<<<<<<<<<<<<
@@ -1254,12 +1506,12 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_IS *__pyx_vtabptr_8petsc4py_5PET
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscLGMap_Type;
 
-/* "PETSc/IS.pyx":350
+/* "PETSc/IS.pyx":355
  * # --------------------------------------------------------------------
  * 
  * cdef class LGMap(Object):             # <<<<<<<<<<<<<<
  * 
- *     MapType = GLMapType
+ *     MapMode = GLMapMode
  */
 
 struct __pyx_vtabstruct_8petsc4py_5PETSc_LGMap {
@@ -1329,7 +1581,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_Section *__pyx_vtabptr_8petsc4py
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscMat_Type;
 
-/* "PETSc/Mat.pyx":148
+/* "PETSc/Mat.pyx":142
  * # --------------------------------------------------------------------
  * 
  * cdef class Mat(Object):             # <<<<<<<<<<<<<<
@@ -1344,7 +1596,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_Mat *__pyx_vtabptr_8petsc4py_5PE
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscNullSpace_Type;
 
-/* "PETSc/Mat.pyx":1461
+/* "PETSc/Mat.pyx":1504
  * # --------------------------------------------------------------------
  * 
  * cdef class NullSpace(Object):             # <<<<<<<<<<<<<<
@@ -1359,7 +1611,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_NullSpace *__pyx_vtabptr_8petsc4
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscPC_Type;
 
-/* "PETSc/PC.pyx":104
+/* "PETSc/PC.pyx":108
  * # --------------------------------------------------------------------
  * 
  * cdef class PC(Object):             # <<<<<<<<<<<<<<
@@ -1374,7 +1626,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_PC *__pyx_vtabptr_8petsc4py_5PET
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscKSP_Type;
 
-/* "PETSc/KSP.pyx":86
+/* "PETSc/KSP.pyx":87
  * # --------------------------------------------------------------------
  * 
  * cdef class KSP(Object):             # <<<<<<<<<<<<<<
@@ -1404,7 +1656,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_SNES *__pyx_vtabptr_8petsc4py_5P
 
 __PYX_EXTERN_C DL_EXPORT(PyTypeObject) PyPetscTS_Type;
 
-/* "PETSc/TS.pyx":69
+/* "PETSc/TS.pyx":79
  * # -----------------------------------------------------------------------------
  * 
  * cdef class TS(Object):             # <<<<<<<<<<<<<<
@@ -1478,7 +1730,7 @@ struct __pyx_vtabstruct_8petsc4py_5PETSc_Partitioner {
 static struct __pyx_vtabstruct_8petsc4py_5PETSc_Partitioner *__pyx_vtabptr_8petsc4py_5PETSc_Partitioner;
 
 
-/* "PETSc/petscis.pxi":113
+/* "PETSc/petscis.pxi":119
  * # --------------------------------------------------------------------
  * 
  * cdef class _IS_buffer:             # <<<<<<<<<<<<<<
@@ -1498,7 +1750,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":413
+/* "PETSc/petscvec.pxi":414
  *     return 0
  * 
  * cdef class _Vec_buffer:             # <<<<<<<<<<<<<<
@@ -1533,7 +1785,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":322
+/* "PETSc/Viewer.pyx":353
  * # --------------------------------------------------------------------
  * 
  * cdef class ViewerHDF5(Viewer):             # <<<<<<<<<<<<<<
@@ -1665,7 +1917,7 @@ static struct __pyx_vtabstruct_8petsc4py_5PETSc_DMShell *__pyx_vtabptr_8petsc4py
 #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
+#if CYTHON_USE_TYPE_SLOTS
 static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name) {
     PyTypeObject* tp = Py_TYPE(obj);
     if (likely(tp->tp_getattro))
@@ -1683,6 +1935,20 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject
 /* GetBuiltinName.proto */
 static PyObject *__Pyx_GetBuiltinName(PyObject *name);
 
+/* decode_c_string_utf16.proto */
+static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16(const char *s, Py_ssize_t size, const char *errors) {
+    int byteorder = 0;
+    return PyUnicode_DecodeUTF16(s, size, errors, &byteorder);
+}
+static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16LE(const char *s, Py_ssize_t size, const char *errors) {
+    int byteorder = -1;
+    return PyUnicode_DecodeUTF16(s, size, errors, &byteorder);
+}
+static CYTHON_INLINE PyObject *__Pyx_PyUnicode_DecodeUTF16BE(const char *s, Py_ssize_t size, const char *errors) {
+    int byteorder = 1;
+    return PyUnicode_DecodeUTF16(s, size, errors, &byteorder);
+}
+
 /* 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,
@@ -1699,6 +1965,24 @@ static CYTHON_INLINE PyObject* __Pyx_decode_bytes(
         start, stop, encoding, errors, decode_func);
 }
 
+/* PyCFunctionFastCall.proto */
+#if CYTHON_FAST_PYCCALL
+static CYTHON_INLINE PyObject *__Pyx_PyCFunction_FastCall(PyObject *func, PyObject **args, Py_ssize_t nargs);
+#else
+#define __Pyx_PyCFunction_FastCall(func, args, nargs)  (assert(0), NULL)
+#endif
+
+/* PyFunctionFastCall.proto */
+#if CYTHON_FAST_PYCALL
+#define __Pyx_PyFunction_FastCall(func, args, nargs)\
+    __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL)
+#if 1 || PY_VERSION_HEX < 0x030600B1
+static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, int nargs, PyObject *kwargs);
+#else
+#define __Pyx_PyFunction_FastCallDict(func, args, nargs, kwargs) _PyFunction_FastCallDict(func, args, nargs, kwargs)
+#endif
+#endif
+
 /* PyObjectCall.proto */
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw);
@@ -1721,29 +2005,34 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func);
 #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
-
 /* PyThreadStateGet.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_FAST_THREAD_STATE
 #define __Pyx_PyThreadState_declare  PyThreadState *__pyx_tstate;
-#define __Pyx_PyThreadState_assign  __pyx_tstate = PyThreadState_GET();
+#define __Pyx_PyThreadState_assign  __pyx_tstate = __Pyx_PyThreadState_Current;
+#define __Pyx_PyErr_Occurred()  __pyx_tstate->curexc_type
 #else
 #define __Pyx_PyThreadState_declare
 #define __Pyx_PyThreadState_assign
+#define __Pyx_PyErr_Occurred()  PyErr_Occurred()
 #endif
 
 /* PyErrFetchRestore.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_FAST_THREAD_STATE
+#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL)
 #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);
+#if CYTHON_COMPILING_IN_CPYTHON
+#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL))
 #else
+#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)
+#endif
+#else
+#define __Pyx_PyErr_Clear() PyErr_Clear()
+#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)
 #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)
@@ -1775,7 +2064,7 @@ static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int
 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause);
 
 /* ListAppend.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
 static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) {
     PyListObject* L = (PyListObject*) list;
     Py_ssize_t len = Py_SIZE(list);
@@ -1792,7 +2081,7 @@ static CYTHON_INLINE int __Pyx_PyList_Append(PyObject* list, PyObject* x) {
 #endif
 
 /* GetException.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_FAST_THREAD_STATE
 #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
@@ -1800,7 +2089,7 @@ static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb);
 #endif
 
 /* SwapException.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_FAST_THREAD_STATE
 #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
@@ -1808,7 +2097,7 @@ static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value,
 #endif
 
 /* SaveResetException.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_FAST_THREAD_STATE
 #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)
@@ -1820,11 +2109,12 @@ static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject
 
 /* PyObjectCallMethod1.proto */
 static PyObject* __Pyx_PyObject_CallMethod1(PyObject* obj, PyObject* method_name, PyObject* arg);
+static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject* arg);
 
 /* 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
+#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
 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))) ?\
@@ -1868,7 +2158,7 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_
     (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);
-static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j);
+static 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);
 
@@ -1894,7 +2184,7 @@ static CYTHON_INLINE int __Pyx_IterFinish(void);
 static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected);
 
 /* PyErrExceptionMatches.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_FAST_THREAD_STATE
 #define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err)
 static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err);
 #else
@@ -1914,14 +2204,16 @@ 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);
+#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\
+    ((likely((Py_TYPE(obj) == type) | (none_allowed && (obj == Py_None)))) ? 1 :\
+        __Pyx__ArgTypeTest(obj, type, name, exact))
+static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact);
 
 /* KeywordStringCheck.proto */
-static CYTHON_INLINE int __Pyx_CheckKeywordStrings(PyObject *kwdict, const char* function_name, int kw_allowed);
+static int __Pyx_CheckKeywordStrings(PyObject *kwdict, const char* function_name, int kw_allowed);
 
 /* PyObjectSetAttrStr.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_USE_TYPE_SLOTS
 #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) {
     PyTypeObject* tp = Py_TYPE(obj);
@@ -1957,14 +2249,38 @@ static PyObject* __Pyx__CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc, PyObje
     ((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)))) :\
+             ((cfunc)->flag == METH_VARARGS ?  (*((cfunc)->func))(self, __pyx_empty_tuple) :\
+              (PY_VERSION_HEX >= 0x030600B1 && (cfunc)->flag == METH_FASTCALL ?\
+                (PY_VERSION_HEX >= 0x030700A0 ?\
+                    (*(__Pyx_PyCFunctionFast)(cfunc)->func)(self, &PyTuple_GET_ITEM(__pyx_empty_tuple, 0), 0) :\
+                    (*(__Pyx_PyCFunctionFastWithKeywords)(cfunc)->func)(self, &PyTuple_GET_ITEM(__pyx_empty_tuple, 0), 0, NULL)) :\
+              (PY_VERSION_HEX >= 0x030700A0 && (cfunc)->flag == (METH_FASTCALL | METH_KEYWORDS) ?\
+                    (*(__Pyx_PyCFunctionFastWithKeywords)(cfunc)->func)(self, &PyTuple_GET_ITEM(__pyx_empty_tuple, 0), 0, NULL) :\
+                    __Pyx__CallUnboundCMethod0(cfunc, self)))))) :\
         __Pyx__CallUnboundCMethod0(cfunc, self))
 #else
 #define __Pyx_CallUnboundCMethod0(cfunc, self)  __Pyx__CallUnboundCMethod0(cfunc, self)
 #endif
 
+/* ListCompAppend.proto */
+#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
+static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) {
+    PyListObject* L = (PyListObject*) list;
+    Py_ssize_t len = Py_SIZE(list);
+    if (likely(L->allocated > len)) {
+        Py_INCREF(x);
+        PyList_SET_ITEM(list, len, x);
+        Py_SIZE(list) = len+1;
+        return 0;
+    }
+    return PyList_Append(list, x);
+}
+#else
+#define __Pyx_ListComp_Append(L,x) PyList_Append(L,x)
+#endif
+
 /* PyIntBinop.proto */
-#if CYTHON_COMPILING_IN_CPYTHON
+#if !CYTHON_COMPILING_IN_PYPY
 static PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, long intval, int inplace);
 #else
 #define __Pyx_PyInt_EqObjC(op1, op2, intval, inplace)\
@@ -1977,35 +2293,18 @@ static PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, long intval, i
     __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 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
+#if !CYTHON_COMPILING_IN_PYPY
 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;
-    Py_ssize_t len = Py_SIZE(list);
-    if (likely(L->allocated > len)) {
-        Py_INCREF(x);
-        PyList_SET_ITEM(list, len, x);
-        Py_SIZE(list) = len+1;
-        return 0;
-    }
-    return PyList_Append(list, x);
-}
-#else
-#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
@@ -2035,7 +2334,7 @@ static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name
 
 /* pop.proto */
 static CYTHON_INLINE PyObject* __Pyx__PyObject_Pop(PyObject* L);
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
 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))
@@ -2072,7 +2371,7 @@ static PyObject *__Pyx_PyDict_GetItem(PyObject *d, PyObject* key) {
 #endif
 
 /* PyObjectLookupSpecial.proto */
-#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x02070000
+#if CYTHON_USE_PYTYPE_LOOKUP && CYTHON_USE_TYPE_SLOTS
 static CYTHON_INLINE PyObject* __Pyx_PyObject_LookupSpecial(PyObject* obj, PyObject* attr_name) {
     PyObject *res;
     PyTypeObject *tp = Py_TYPE(obj);
@@ -2192,6 +2491,10 @@ static int __pyx_CyFunction_init(void);
 /* GetNameInClass.proto */
 static PyObject *__Pyx_GetNameInClass(PyObject *nmspace, PyObject *name);
 
+/* ClassMethod.proto */
+#include "descrobject.h"
+static PyObject* __Pyx_Method_ClassMethod(PyObject *method);
+
 /* PyIdentifierFromString.proto */
 #if !defined(__Pyx_PyIdentifier_FromString)
 #if PY_MAJOR_VERSION < 3
@@ -2208,6 +2511,9 @@ static PyObject *__Pyx_ImportModule(const char *name);
 static void __pyx_module_cleanup(PyObject *self);
 static int __Pyx_RegisterCleanup(void);
 
+/* CLineInTraceback.proto */
+static int __Pyx_CLineForTraceback(int c_line);
+
 /* CodeObjectCache.proto */
 typedef struct {
     PyCodeObject* code_object;
@@ -2246,7 +2552,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscViewerFormat(PetscViewerFor
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscFileMode(PetscFileMode value);
 
 /* CIntToPy.proto */
-static CYTHON_INLINE PyObject* __Pyx_PyInt_From_ISGlobalToLocalMappingType(ISGlobalToLocalMappingType value);
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_ISGlobalToLocalMappingMode(ISGlobalToLocalMappingMode value);
 
 /* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_VecOption(VecOption value);
@@ -2282,6 +2588,9 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PCGASMType(PCGASMType value);
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PCMGType(PCMGType value);
 
 /* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PCMGCycleType(PCMGCycleType value);
+
+/* CIntToPy.proto */
 static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PCCompositeType(PCCompositeType value);
 
 /* CIntToPy.proto */
@@ -2336,9 +2645,6 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value);
 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 */
@@ -2355,9 +2661,11 @@ static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MPI_Fint(MPI_Fint value);
 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);
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MatDuplicateOption(MatDuplicateOption value);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscBool(PetscBool value);
 
 /* CIntFromPy.proto */
 static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *);
@@ -2414,13 +2722,13 @@ static CYTHON_INLINE PetscClassId __Pyx_PyInt_As_PetscClassId(PyObject *);
 static CYTHON_INLINE PetscViewerFormat __Pyx_PyInt_As_PetscViewerFormat(PyObject *);
 
 /* CIntFromPy.proto */
-static CYTHON_INLINE unsigned long __Pyx_PyInt_As_unsigned_long(PyObject *);
+static CYTHON_INLINE PetscBool __Pyx_PyInt_As_PetscBool(PyObject *);
 
 /* CIntFromPy.proto */
-static CYTHON_INLINE PetscBool __Pyx_PyInt_As_PetscBool(PyObject *);
+static CYTHON_INLINE unsigned long __Pyx_PyInt_As_unsigned_long(PyObject *);
 
 /* CIntFromPy.proto */
-static CYTHON_INLINE ISGlobalToLocalMappingType __Pyx_PyInt_As_ISGlobalToLocalMappingType(PyObject *);
+static CYTHON_INLINE ISGlobalToLocalMappingMode __Pyx_PyInt_As_ISGlobalToLocalMappingMode(PyObject *);
 
 /* CIntFromPy.proto */
 static CYTHON_INLINE VecOption __Pyx_PyInt_As_VecOption(PyObject *);
@@ -2453,6 +2761,9 @@ static CYTHON_INLINE PCFieldSplitSchurPreType __Pyx_PyInt_As_PCFieldSplitSchurPr
 static CYTHON_INLINE PCMGType __Pyx_PyInt_As_PCMGType(PyObject *);
 
 /* CIntFromPy.proto */
+static CYTHON_INLINE PCMGCycleType __Pyx_PyInt_As_PCMGCycleType(PyObject *);
+
+/* CIntFromPy.proto */
 static CYTHON_INLINE PCSide __Pyx_PyInt_As_PCSide(PyObject *);
 
 /* CIntFromPy.proto */
@@ -2476,6 +2787,18 @@ static CYTHON_INLINE TSConvergedReason __Pyx_PyInt_As_TSConvergedReason(PyObject
 /* CIntFromPy.proto */
 static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *);
 
+/* FastTypeChecks.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type)
+static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b);
+static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type);
+static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2);
+#else
+#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
+#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type)
+#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2))
+#endif
+
 /* CheckBinaryVersion.proto */
 static int __Pyx_check_binary_version(void);
 
@@ -2508,6 +2831,8 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_6Object_get_attr(struct PyPetscObjectO
 static PyObject *__pyx_f_8petsc4py_5PETSc_6Object_set_attr(struct PyPetscObjectObject *__pyx_v_self, char *__pyx_v_name, PyObject *__pyx_v_attr); /* proto*/
 static PyObject *__pyx_f_8petsc4py_5PETSc_6Object_get_dict(struct PyPetscObjectObject *__pyx_v_self); /* proto*/
 
+/* Module declarations from 'cython' */
+
 /* Module declarations from 'numpy' */
 
 /* Module declarations from 'petsc4py.PETSc' */
@@ -2572,6 +2897,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_str2bytes(PyObject *, co
 static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_S_(const char *); /*proto*/
 static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_SETERR(int); /*proto*/
 static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_CHKERR(int); /*proto*/
+static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toBool(PetscBool); /*proto*/
 static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toInt(PetscInt); /*proto*/
 static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asInt(PyObject *); /*proto*/
 static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toReal(PetscReal); /*proto*/
@@ -2633,7 +2959,7 @@ static int __pyx_f_8petsc4py_5PETSc_PetscDelPyDict(void *); /*proto*/
 static PyObject *__pyx_f_8petsc4py_5PETSc_PetscGetPyDict(PetscObject, int); /*proto*/
 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 Py_intptr_t __pyx_f_8petsc4py_5PETSc_Object_toFortran(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*/
@@ -2716,6 +3042,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Function(SNES, Vec, Vec, void *); /*pro
 static int __pyx_f_8petsc4py_5PETSc_SNES_Update(SNES, PetscInt); /*proto*/
 static int __pyx_f_8petsc4py_5PETSc_SNES_Jacobian(SNES, Vec, Mat, Mat, void *); /*proto*/
 static int __pyx_f_8petsc4py_5PETSc_SNES_Objective(SNES, Vec, PetscReal *, void *); /*proto*/
+static int __pyx_f_8petsc4py_5PETSc_SNES_NGS(SNES, Vec, Vec, void *); /*proto*/
 static int __pyx_f_8petsc4py_5PETSc_SNES_Converged(SNES, PetscInt, PetscReal, PetscReal, PetscReal, SNESConvergedReason *, void *); /*proto*/
 static int __pyx_f_8petsc4py_5PETSc_SNES_Monitor(SNES, PetscInt, PetscReal, void *); /*proto*/
 static CYTHON_INLINE struct PyPetscTSObject *__pyx_f_8petsc4py_5PETSc_ref_TS(TS); /*proto*/
@@ -2723,9 +3050,15 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSFunction(TS, PetscReal, Vec, Vec, void
 static int __pyx_f_8petsc4py_5PETSc_TS_RHSJacobian(TS, PetscReal, Vec, Mat, Mat, void *); /*proto*/
 static int __pyx_f_8petsc4py_5PETSc_TS_IFunction(TS, PetscReal, Vec, Vec, Vec, void *); /*proto*/
 static int __pyx_f_8petsc4py_5PETSc_TS_IJacobian(TS, PetscReal, Vec, Vec, PetscReal, Mat, Mat, void *); /*proto*/
+static int __pyx_f_8petsc4py_5PETSc_TS_I2Function(TS, PetscReal, Vec, Vec, Vec, Vec, void *); /*proto*/
+static int __pyx_f_8petsc4py_5PETSc_TS_I2Jacobian(TS, PetscReal, Vec, Vec, Vec, PetscReal, PetscReal, Mat, Mat, void *); /*proto*/
 static int __pyx_f_8petsc4py_5PETSc_TS_Monitor(TS, PetscInt, PetscReal, Vec, void *); /*proto*/
 static int __pyx_f_8petsc4py_5PETSc_TS_PreStep(TS); /*proto*/
 static int __pyx_f_8petsc4py_5PETSc_TS_PostStep(TS); /*proto*/
+static int __pyx_f_8petsc4py_5PETSc_TSAdjoint_CostIntegrand(TS, PetscReal, Vec, Vec, void *); /*proto*/
+static int __pyx_f_8petsc4py_5PETSc_TSAdjoint_CostIntegrand_DY(TS, PetscReal, Vec, Vec *, void *); /*proto*/
+static int __pyx_f_8petsc4py_5PETSc_TSAdjoint_CostIntegrand_DP(TS, PetscReal, Vec, Vec *, void *); /*proto*/
+static int __pyx_f_8petsc4py_5PETSc_TSAdjoint_RHSJacobian(TS, PetscReal, Vec, Mat, void *); /*proto*/
 static CYTHON_INLINE struct PyPetscTAOObject *__pyx_f_8petsc4py_5PETSc_ref_TAO(Tao); /*proto*/
 static int __pyx_f_8petsc4py_5PETSc_TAO_Objective(Tao, Vec, PetscReal *, void *); /*proto*/
 static int __pyx_f_8petsc4py_5PETSc_TAO_SeparableObjective(Tao, Vec, Vec, void *); /*proto*/
@@ -2765,7 +3098,10 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Coarsen(DM, MPI_Comm, DM *); /*proto
 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_CreateRestriction(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_CreateDomainDecomposition(DM, PetscInt *, char ***, IS **, IS **, DM **); /*proto*/
+static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateDomainDecompositionScatters(DM, PetscInt, DM *, VecScatter **, VecScatter **, VecScatter **); /*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*/
@@ -2883,7 +3219,6 @@ 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";
@@ -2926,6 +3261,7 @@ 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_vm[] = "vm";
 static const char __pyx_k_vn[] = "vn";
 static const char __pyx_k_xl[] = "xl";
 static const char __pyx_k_xu[] = "xu";
@@ -2968,6 +3304,8 @@ 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_RK3[] = "RK3";
+static const char __pyx_k_RK4[] = "RK4";
 static const char __pyx_k_SEQ[] = "SEQ";
 static const char __pyx_k_SOR[] = "SOR";
 static const char __pyx_k_SPD[] = "SPD";
@@ -2978,6 +3316,7 @@ 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__33[] = ",";
 static const char __pyx_k_a_2[] = "a+";
 static const char __pyx_k_all[] = "all";
 static const char __pyx_k_app[] = "app";
@@ -2995,6 +3334,8 @@ 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_msg[] = "msg";
+static const char __pyx_k_ngs[] = "ngs";
 static const char __pyx_k_nnz[] = "nnz";
 static const char __pyx_k_nsd[] = "nsd";
 static const char __pyx_k_nsp[] = "nsp";
@@ -3036,9 +3377,10 @@ 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_GLLE[] = "GLLE";
 static const char __pyx_k_GPCG[] = "GPCG";
 static const char __pyx_k_HALF[] = "HALF";
+static const char __pyx_k_HASH[] = "HASH";
 static const char __pyx_k_HDF5[] = "HDF5";
 static const char __pyx_k_LEFT[] = "LEFT";
 static const char __pyx_k_LMVM[] = "LMVM";
@@ -3049,7 +3391,6 @@ 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";
@@ -3057,13 +3398,14 @@ 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_RK2A[] = "RK2A";
+static const char __pyx_k_RK5F[] = "RK5F";
 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";
@@ -3083,6 +3425,7 @@ 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_cost[] = "cost";
 static const char __pyx_k_data[] = "data";
 static const char __pyx_k_date[] = "date";
 static const char __pyx_k_diag[] = "diag";
@@ -3091,6 +3434,7 @@ 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_gsec[] = "gsec";
 static const char __pyx_k_gtol[] = "gtol";
 static const char __pyx_k_gvec[] = "gvec";
 static const char __pyx_k_idxm[] = "idxm";
@@ -3121,6 +3465,7 @@ 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_part[] = "part";
 static const char __pyx_k_perm[] = "perm";
 static const char __pyx_k_push[] = "push";
 static const char __pyx_k_rank[] = "rank";
@@ -3139,6 +3484,7 @@ 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_tabs[] = "tabs";
 static const char __pyx_k_time[] = "time";
 static const char __pyx_k_vecs[] = "vecs";
 static const char __pyx_k_view[] = "view";
@@ -3159,7 +3505,6 @@ 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";
@@ -3182,6 +3527,10 @@ 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_RK1FE[] = "RK1FE";
+static const char __pyx_k_RK3BS[] = "RK3BS";
+static const char __pyx_k_RK5BS[] = "RK5BS";
+static const char __pyx_k_RK5DP[] = "RK5DP";
 static const char __pyx_k_Right[] = "Right";
 static const char __pyx_k_SBAIJ[] = "SBAIJ";
 static const char __pyx_k_SCHUR[] = "SCHUR";
@@ -3255,7 +3604,6 @@ 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";
@@ -3295,11 +3643,15 @@ 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_CGGLTR[] = "CGGLTR";
+static const char __pyx_k_CGNASH[] = "CGNASH";
+static const char __pyx_k_CGSTCG[] = "CGSTCG";
 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_FETIDP[] = "FETIDP";
 static const char __pyx_k_FGMRES[] = "FGMRES";
 static const char __pyx_k_Format[] = "Format";
 static const char __pyx_k_INSERT[] = "INSERT";
@@ -3314,7 +3666,6 @@ 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";
@@ -3328,9 +3679,9 @@ 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_RKType[] = "RKType";
 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";
@@ -3378,12 +3729,12 @@ 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_metric[] = "metric";
 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";
@@ -3444,7 +3795,7 @@ 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_MapMode[] = "MapMode";
 static const char __pyx_k_MatType[] = "MatType";
 static const char __pyx_k_NATURAL[] = "NATURAL";
 static const char __pyx_k_NETWORK[] = "NETWORK";
@@ -3536,6 +3887,7 @@ 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_xdotdot[] = "xdotdot";
 static const char __pyx_k_ADDITIVE[] = "ADDITIVE";
 static const char __pyx_k_ADVANCED[] = "ADVANCED";
 static const char __pyx_k_AINVCUSP[] = "AINVCUSP";
@@ -3549,6 +3901,7 @@ 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_GIT_Date[] = "GIT Date:";
 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";
@@ -3559,7 +3912,6 @@ 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";
@@ -3576,7 +3928,6 @@ 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";
@@ -3585,6 +3936,7 @@ 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_TSRKType[] = "TSRKType";
 static const char __pyx_k_VIENNACL[] = "VIENNACL";
 static const char __pyx_k_addFlops[] = "addFlops";
 static const char __pyx_k_assembly[] = "assembly";
@@ -3618,12 +3970,12 @@ 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_numFaces[] = "numFaces";
 static const char __pyx_k_numProcs[] = "numProcs";
 static const char __pyx_k_numcells[] = "numcells";
 static const char __pyx_k_only_and[] = "only '==' and '!='";
@@ -3663,14 +4015,14 @@ 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_GLMapMode[] = "GLMapMode";
 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_LGMapType[] = "LGMapType";
 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";
@@ -3680,7 +4032,6 @@ 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";
@@ -3708,6 +4059,7 @@ 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_labelName[] = "labelName";
 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";
@@ -3719,6 +4071,7 @@ 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_rfunction[] = "rfunction";
 static const char __pyx_k_row_bsize[] = "row_bsize";
 static const char __pyx_k_separable[] = "separable";
 static const char __pyx_k_setActive[] = "setActive";
@@ -3771,6 +4124,7 @@ 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_cycle_type[] = "cycle_type";
 static const char __pyx_k_empty_name[] = "empty name";
 static const char __pyx_k_errhandler[] = "errhandler";
 static const char __pyx_k_getCPUTime[] = "getCPUTime";
@@ -3784,6 +4138,7 @@ 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_lgmap_type[] = "lgmap_type";
 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";
@@ -3793,6 +4148,7 @@ 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_useAnchors[] = "useAnchors";
 static const char __pyx_k_useClosure[] = "useClosure";
 static const char __pyx_k_AIJCUSPARSE[] = "AIJCUSPARSE";
 static const char __pyx_k_AIJVIENNACL[] = "AIJVIENNACL";
@@ -3809,6 +4165,7 @@ 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_MGCycleType[] = "MGCycleType";
 static const char __pyx_k_MPIVIENNACL[] = "MPIVIENNACL";
 static const char __pyx_k_MatInfoType[] = "MatInfoType";
 static const char __pyx_k_MemoryError[] = "MemoryError";
@@ -3889,6 +4246,8 @@ 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_drdpfunction[] = "drdpfunction";
+static const char __pyx_k_drdyfunction[] = "drdyfunction";
 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";
@@ -3898,7 +4257,6 @@ 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";
@@ -3918,11 +4276,13 @@ 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_PCMGCycleType[] = "PCMGCycleType";
 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_adjoint_steps[] = "adjoint_steps";
 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";
@@ -4000,16 +4360,20 @@ 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_PETSc_Error_pyx[] = "PETSc/Error.pyx";
+static const char __pyx_k_PETSc_PETSc_pyx[] = "PETSc/PETSc.pyx";
 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_adjointjacobian[] = "adjointjacobian";
 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_getFunctionNorm[] = "getFunctionNorm";
 static const char __pyx_k_getGhostCorners[] = "getGhostCorners";
 static const char __pyx_k_getResidualNorm[] = "getResidualNorm";
 static const char __pyx_k_getSolutionNorm[] = "getSolutionNorm";
@@ -4020,6 +4384,7 @@ 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_setFunctionNorm[] = "setFunctionNorm";
 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";
@@ -4034,6 +4399,7 @@ 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_popSignalHandler[] = "popSignalHandler";
 static const char __pyx_k_pushErrorHandler[] = "pushErrorHandler";
 static const char __pyx_k_registerCitation[] = "registerCitation";
 static const char __pyx_k_setOptionsPrefix[] = "setOptionsPrefix";
@@ -4053,7 +4419,6 @@ 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";
@@ -4071,7 +4436,9 @@ 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_cline_in_traceback[] = "cline_in_traceback";
 static const char __pyx_k_createGlobalVector[] = "createGlobalVector";
+static const char __pyx_k_create_restriction[] = "create_restriction";
 static const char __pyx_k_getConvergedReason[] = "getConvergedReason";
 static const char __pyx_k_getIterationNumber[] = "getIterationNumber";
 static const char __pyx_k_getMaxStepFailures[] = "getMaxStepFailures";
@@ -4190,7 +4557,6 @@ static const char __pyx_k_Invalid_mode_expected_rw_r_or_w[] = "Invalid mode: exp
 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";
@@ -4219,7 +4585,6 @@ static const char __pyx_k_ownership_range_size_d_and_numbe[] = "ownership range
 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;
@@ -4300,15 +4665,17 @@ static PyObject *__pyx_n_s_BLOCKMAT;
 static PyObject *__pyx_n_s_BMRM;
 static PyObject *__pyx_n_s_BOX;
 static PyObject *__pyx_n_s_BQPIP;
-static PyObject *__pyx_n_s_BSTRM;
 static PyObject *__pyx_n_s_Barrier;
 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_CGGLTR;
 static PyObject *__pyx_n_s_CGLS;
+static PyObject *__pyx_n_s_CGNASH;
 static PyObject *__pyx_n_s_CGNE;
 static PyObject *__pyx_n_s_CGS;
+static PyObject *__pyx_n_s_CGSTCG;
 static PyObject *__pyx_n_s_CHACO;
 static PyObject *__pyx_n_s_CHEBYSHEV;
 static PyObject *__pyx_n_s_CHOLESKY;
@@ -4429,6 +4796,7 @@ 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_FETIDP;
 static PyObject *__pyx_n_s_FFT;
 static PyObject *__pyx_n_s_FFTW;
 static PyObject *__pyx_n_s_FGMRES;
@@ -4459,11 +4827,11 @@ static PyObject *__pyx_n_s_GENERAL;
 static PyObject *__pyx_n_s_GEO;
 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_kp_s_GIT_Date;
+static PyObject *__pyx_n_s_GLLE;
+static PyObject *__pyx_n_s_GLMapMode;
 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;
 static PyObject *__pyx_n_s_GROPPCG;
@@ -4473,6 +4841,7 @@ static PyObject *__pyx_kp_s_Given_d_column_indices_but_d_non;
 static PyObject *__pyx_n_s_H;
 static PyObject *__pyx_n_s_HALF;
 static PyObject *__pyx_n_s_HALF_SIZE;
+static PyObject *__pyx_n_s_HASH;
 static PyObject *__pyx_n_s_HDF5;
 static PyObject *__pyx_n_s_HDF5_VIZ;
 static PyObject *__pyx_n_s_HERMITIAN;
@@ -4526,6 +4895,7 @@ static PyObject *__pyx_n_s_LCD;
 static PyObject *__pyx_n_s_LCL;
 static PyObject *__pyx_n_s_LEFT;
 static PyObject *__pyx_n_s_LGMRES;
+static PyObject *__pyx_n_s_LGMapType;
 static PyObject *__pyx_n_s_LINEAR;
 static PyObject *__pyx_n_s_LMVM;
 static PyObject *__pyx_n_s_LOCAL;
@@ -4551,6 +4921,7 @@ 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_MGCycleType;
 static PyObject *__pyx_n_s_MGType;
 static PyObject *__pyx_n_s_MIMEX;
 static PyObject *__pyx_n_s_MINRES;
@@ -4566,16 +4937,14 @@ static PyObject *__pyx_n_s_MPIAIJCUSPARSE;
 static PyObject *__pyx_n_s_MPIAIJPERM;
 static PyObject *__pyx_n_s_MPIAIJVIENNACL;
 static PyObject *__pyx_n_s_MPIBAIJ;
-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_MPISBAIJ;
-static PyObject *__pyx_n_s_MPISBSTRM;
 static PyObject *__pyx_n_s_MPIVIENNACL;
 static PyObject *__pyx_n_s_MS;
 static PyObject *__pyx_n_s_MULTIPLICATIVE;
-static PyObject *__pyx_n_s_MapType;
+static PyObject *__pyx_n_s_MapMode;
 static PyObject *__pyx_n_s_MatAssemblyType;
 static PyObject *__pyx_n_s_MatFactorShiftType;
 static PyObject *__pyx_n_s_MatInfoType;
@@ -4591,14 +4960,12 @@ static PyObject *__pyx_kp_s_Must_provide_both_sizes_and_poin;
 static PyObject *__pyx_n_s_N1;
 static PyObject *__pyx_n_s_N12;
 static PyObject *__pyx_n_s_N2;
-static PyObject *__pyx_n_s_NASH;
 static PyObject *__pyx_n_s_NASM;
 static PyObject *__pyx_n_s_NATIVE;
 static PyObject *__pyx_n_s_NATURAL;
 static PyObject *__pyx_n_s_NCG;
 static PyObject *__pyx_n_s_ND;
 static PyObject *__pyx_n_s_NEST;
-static PyObject *__pyx_n_s_NETCDF;
 static PyObject *__pyx_n_s_NETWORK;
 static PyObject *__pyx_n_s_NEWTONLS;
 static PyObject *__pyx_n_s_NEWTONTR;
@@ -4666,12 +5033,15 @@ 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_PCMGCycleType;
 static PyObject *__pyx_n_s_PCMGType;
 static PyObject *__pyx_n_s_PCSide;
 static PyObject *__pyx_n_s_PCType;
 static PyObject *__pyx_n_s_PD;
 static PyObject *__pyx_n_s_PERIODIC;
 static PyObject *__pyx_kp_s_PETSc_Error_d;
+static PyObject *__pyx_kp_s_PETSc_Error_pyx;
+static PyObject *__pyx_kp_s_PETSc_PETSc_pyx;
 static PyObject *__pyx_n_s_PFMG;
 static PyObject *__pyx_n_s_PGMRES;
 static PyObject *__pyx_n_s_PINFINITY;
@@ -4714,6 +5084,15 @@ static PyObject *__pyx_n_s_REVERSE_LOCAL;
 static PyObject *__pyx_n_s_RICHARDSON;
 static PyObject *__pyx_n_s_RIGHT;
 static PyObject *__pyx_n_s_RK;
+static PyObject *__pyx_n_s_RK1FE;
+static PyObject *__pyx_n_s_RK2A;
+static PyObject *__pyx_n_s_RK3;
+static PyObject *__pyx_n_s_RK3BS;
+static PyObject *__pyx_n_s_RK4;
+static PyObject *__pyx_n_s_RK5BS;
+static PyObject *__pyx_n_s_RK5DP;
+static PyObject *__pyx_n_s_RK5F;
+static PyObject *__pyx_n_s_RKType;
 static PyObject *__pyx_n_s_ROSW;
 static PyObject *__pyx_n_s_ROWLENGTH;
 static PyObject *__pyx_n_s_ROW_ORIENTED;
@@ -4731,7 +5110,6 @@ static PyObject *__pyx_n_s_SAME_NONZERO_PATTERN;
 static PyObject *__pyx_n_s_SAME_NZ;
 static PyObject *__pyx_n_s_SAWS;
 static PyObject *__pyx_n_s_SBAIJ;
-static PyObject *__pyx_n_s_SBSTRM;
 static PyObject *__pyx_n_s_SCATTER;
 static PyObject *__pyx_n_s_SCATTER_FORWARD;
 static PyObject *__pyx_n_s_SCATTER_FORWARD_LOCAL;
@@ -4750,13 +5128,11 @@ static PyObject *__pyx_n_s_SEQAIJCUSPARSE;
 static PyObject *__pyx_n_s_SEQAIJPERM;
 static PyObject *__pyx_n_s_SEQAIJVIENNACL;
 static PyObject *__pyx_n_s_SEQBAIJ;
-static PyObject *__pyx_n_s_SEQBSTRM;
 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_SEQSBAIJ;
-static PyObject *__pyx_n_s_SEQSBSTRM;
 static PyObject *__pyx_n_s_SEQVIENNACL;
 static PyObject *__pyx_n_s_SFType;
 static PyObject *__pyx_n_s_SHARED;
@@ -4778,7 +5154,6 @@ static PyObject *__pyx_n_s_SSILS;
 static PyObject *__pyx_n_s_SSP;
 static PyObject *__pyx_n_s_STANDARD;
 static PyObject *__pyx_n_s_STAR;
-static PyObject *__pyx_n_s_STCG;
 static PyObject *__pyx_n_s_STDERR;
 static PyObject *__pyx_n_s_STDOUT;
 static PyObject *__pyx_n_s_STEPOVER;
@@ -4829,6 +5204,7 @@ static PyObject *__pyx_n_s_TSEquationType;
 static PyObject *__pyx_n_s_TSExactFinalTime;
 static PyObject *__pyx_n_s_TSIRM;
 static PyObject *__pyx_n_s_TSProblemType;
+static PyObject *__pyx_n_s_TSRKType;
 static PyObject *__pyx_n_s_TSType;
 static PyObject *__pyx_n_s_TWIST;
 static PyObject *__pyx_n_s_Type;
@@ -4867,6 +5243,7 @@ static PyObject *__pyx_n_s_ZERO_INITIAL_GUESS;
 static PyObject *__pyx_kp_s__10;
 static PyObject *__pyx_kp_s__2;
 static PyObject *__pyx_kp_s__32;
+static PyObject *__pyx_kp_s__33;
 static PyObject *__pyx_kp_b__5;
 static PyObject *__pyx_kp_s__5;
 static PyObject *__pyx_n_s_a;
@@ -4875,6 +5252,8 @@ static PyObject *__pyx_n_s_abort;
 static PyObject *__pyx_kp_s_accessing_non_existent_buffer_se;
 static PyObject *__pyx_n_s_addFlops;
 static PyObject *__pyx_n_s_addv;
+static PyObject *__pyx_n_s_adjoint_steps;
+static PyObject *__pyx_n_s_adjointjacobian;
 static PyObject *__pyx_n_s_all;
 static PyObject *__pyx_n_s_alpha;
 static PyObject *__pyx_n_s_alpha2;
@@ -4929,6 +5308,7 @@ 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_cline_in_traceback;
 static PyObject *__pyx_n_s_cmap;
 static PyObject *__pyx_n_s_coarsen;
 static PyObject *__pyx_n_s_col;
@@ -4953,6 +5333,7 @@ static PyObject *__pyx_kp_s_coordinates_must_have_two_dimens;
 static PyObject *__pyx_n_s_coords;
 static PyObject *__pyx_kp_s_coords_vertices_must_have_two_di;
 static PyObject *__pyx_n_s_copy;
+static PyObject *__pyx_n_s_cost;
 static PyObject *__pyx_n_s_count;
 static PyObject *__pyx_n_s_crank;
 static PyObject *__pyx_n_s_createGlobalVec;
@@ -4972,11 +5353,13 @@ 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;
+static PyObject *__pyx_n_s_create_restriction;
 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;
 static PyObject *__pyx_n_s_ctype;
+static PyObject *__pyx_n_s_cycle_type;
 static PyObject *__pyx_kp_s_d_s;
 static PyObject *__pyx_n_s_da;
 static PyObject *__pyx_n_s_data;
@@ -5000,6 +5383,8 @@ static PyObject *__pyx_n_s_dm;
 static PyObject *__pyx_n_s_dm_type;
 static PyObject *__pyx_n_s_doc;
 static PyObject *__pyx_n_s_dof;
+static PyObject *__pyx_n_s_drdpfunction;
+static PyObject *__pyx_n_s_drdyfunction;
 static PyObject *__pyx_n_s_drop;
 static PyObject *__pyx_n_s_dt;
 static PyObject *__pyx_n_s_dtcol;
@@ -5074,6 +5459,7 @@ static PyObject *__pyx_n_s_getDimension;
 static PyObject *__pyx_n_s_getDof;
 static PyObject *__pyx_n_s_getEquationType;
 static PyObject *__pyx_n_s_getFlops;
+static PyObject *__pyx_n_s_getFunctionNorm;
 static PyObject *__pyx_n_s_getFunctionTolerances;
 static PyObject *__pyx_n_s_getFunctionValue;
 static PyObject *__pyx_n_s_getGhostCorners;
@@ -5153,6 +5539,7 @@ static PyObject *__pyx_n_s_globalsec;
 static PyObject *__pyx_n_s_gradient;
 static PyObject *__pyx_n_s_group;
 static PyObject *__pyx_n_s_grtol;
+static PyObject *__pyx_n_s_gsec;
 static PyObject *__pyx_n_s_gtol;
 static PyObject *__pyx_n_s_gttol;
 static PyObject *__pyx_n_s_gv;
@@ -5162,8 +5549,6 @@ static PyObject *__pyx_n_s_hasLabel;
 static PyObject *__pyx_n_s_hasLagrange;
 static PyObject *__pyx_n_s_hasName;
 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;
@@ -5185,8 +5570,6 @@ 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;
 static PyObject *__pyx_n_s_initialize;
 static PyObject *__pyx_kp_s_input_arrays_have_incompatible_s;
@@ -5230,11 +5613,13 @@ static PyObject *__pyx_n_s_ksp;
 static PyObject *__pyx_n_s_ksp_type;
 static PyObject *__pyx_n_s_l;
 static PyObject *__pyx_n_s_label;
+static PyObject *__pyx_n_s_labelName;
 static PyObject *__pyx_n_s_left;
 static PyObject *__pyx_n_s_length;
 static PyObject *__pyx_n_s_level;
 static PyObject *__pyx_n_s_levels;
 static PyObject *__pyx_n_s_lgmap;
+static PyObject *__pyx_n_s_lgmap_type;
 static PyObject *__pyx_n_s_linear_its;
 static PyObject *__pyx_n_s_lits;
 static PyObject *__pyx_n_s_local;
@@ -5251,7 +5636,6 @@ 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;
 static PyObject *__pyx_n_s_mat_type;
@@ -5265,6 +5649,7 @@ 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_metric;
 static PyObject *__pyx_n_s_mgtype;
 static PyObject *__pyx_n_s_minor;
 static PyObject *__pyx_n_s_mirror;
@@ -5275,14 +5660,15 @@ 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;
+static PyObject *__pyx_n_s_msg;
 static PyObject *__pyx_n_s_mult;
 static PyObject *__pyx_n_s_n;
 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_ngs;
 static PyObject *__pyx_n_s_nleaves;
 static PyObject *__pyx_n_s_nlevels;
 static PyObject *__pyx_n_s_nlocal;
@@ -5303,6 +5689,7 @@ 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;
+static PyObject *__pyx_n_s_numFaces;
 static PyObject *__pyx_n_s_numFields;
 static PyObject *__pyx_n_s_numMessages;
 static PyObject *__pyx_n_s_numProcs;
@@ -5342,8 +5729,8 @@ static PyObject *__pyx_n_s_p1;
 static PyObject *__pyx_n_s_pEnd;
 static PyObject *__pyx_n_s_pStart;
 static PyObject *__pyx_n_s_parent;
+static PyObject *__pyx_n_s_part;
 static PyObject *__pyx_n_s_part_type;
-static PyObject *__pyx_n_s_patch;
 static PyObject *__pyx_n_s_pc;
 static PyObject *__pyx_n_s_pc_type;
 static PyObject *__pyx_n_s_pd;
@@ -5355,6 +5742,7 @@ static PyObject *__pyx_n_s_point;
 static PyObject *__pyx_n_s_points;
 static PyObject *__pyx_n_s_pop;
 static PyObject *__pyx_n_s_popErrorHandler;
+static PyObject *__pyx_n_s_popSignalHandler;
 static PyObject *__pyx_n_s_position;
 static PyObject *__pyx_n_s_positive_definite;
 static PyObject *__pyx_n_s_poststep;
@@ -5402,6 +5790,7 @@ static PyObject *__pyx_n_s_restart;
 static PyObject *__pyx_n_s_result;
 static PyObject *__pyx_n_s_reuse;
 static PyObject *__pyx_n_s_reverse;
+static PyObject *__pyx_n_s_rfunction;
 static PyObject *__pyx_n_s_rhs;
 static PyObject *__pyx_n_s_right;
 static PyObject *__pyx_n_s_rmap;
@@ -5437,6 +5826,7 @@ static PyObject *__pyx_n_s_setDefaultComm;
 static PyObject *__pyx_n_s_setDiagonal;
 static PyObject *__pyx_n_s_setDimension;
 static PyObject *__pyx_n_s_setEquationType;
+static PyObject *__pyx_n_s_setFunctionNorm;
 static PyObject *__pyx_n_s_setFunctionTolerances;
 static PyObject *__pyx_n_s_setInitialGuessKnoll;
 static PyObject *__pyx_n_s_setInitialGuessNonzero;
@@ -5527,6 +5917,7 @@ static PyObject *__pyx_n_s_syncFlush;
 static PyObject *__pyx_n_s_syncPrint;
 static PyObject *__pyx_n_s_t;
 static PyObject *__pyx_n_s_tab;
+static PyObject *__pyx_n_s_tabs;
 static PyObject *__pyx_n_s_tao_type;
 static PyObject *__pyx_n_s_tbline;
 static PyObject *__pyx_n_s_tblist;
@@ -5558,6 +5949,7 @@ static PyObject *__pyx_kp_s_unknown_shift_type_s;
 static PyObject *__pyx_kp_s_unknown_stencil_type_s;
 static PyObject *__pyx_n_s_update;
 static PyObject *__pyx_n_s_upper;
+static PyObject *__pyx_n_s_useAnchors;
 static PyObject *__pyx_n_s_useClosure;
 static PyObject *__pyx_n_s_useCone;
 static PyObject *__pyx_n_s_v;
@@ -5578,6 +5970,7 @@ static PyObject *__pyx_n_s_view;
 static PyObject *__pyx_n_s_viewer;
 static PyObject *__pyx_n_s_vl;
 static PyObject *__pyx_n_s_vlg;
+static PyObject *__pyx_n_s_vm;
 static PyObject *__pyx_n_s_vn;
 static PyObject *__pyx_n_s_vwr_type;
 static PyObject *__pyx_n_s_w;
@@ -5585,6 +5978,7 @@ static PyObject *__pyx_kp_s_w_2;
 static PyObject *__pyx_n_s_width;
 static PyObject *__pyx_n_s_x;
 static PyObject *__pyx_n_s_xdot;
+static PyObject *__pyx_n_s_xdotdot;
 static PyObject *__pyx_n_s_xl;
 static PyObject *__pyx_n_s_xmax;
 static PyObject *__pyx_n_s_xmin;
@@ -5680,8 +6074,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_36getReal(struct __pyx_obj_8
 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_getVersion(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_devel, PyObject *__pyx_v_date, PyObject *__pyx_v_author); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_2getVersionInfo(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 */
@@ -5693,8 +6087,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_18splitOwnership(CYTHON_UNUSED P
 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_3Sys_26popSignalHandler(CYTHON_UNUSED PyTypeObject *__pyx_v_cls); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_28infoAllow(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_30registerCitation(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 */
@@ -5786,23 +6181,24 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_16getType(struct PyPetscObjec
 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_24viewFromOptions(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_name, struct PyPetscObjectObject *__pyx_v_prefix); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_26getComm(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_28getName(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_30setName(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_32getClassId(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_34getClassName(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_36getRefCount(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_38compose(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_name, struct PyPetscObjectObject *__pyx_v_obj); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_40query(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_42incRef(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_44decRef(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_46getAttr(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_48setAttr(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_attr); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_50getDict(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_52stateIncrease(struct PyPetscObjectObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_54incrementTabLevel(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_tab, struct PyPetscObjectObject *__pyx_v_parent); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_56setTabLevel(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_level); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_58getTabLevel(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 */
@@ -5825,25 +6221,35 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_12createBinary(struct PyPetsc
 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_6Viewer_20createDraw(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_22setType(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_vwr_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_24getType(struct PyPetscViewerObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_26getFormat(struct PyPetscViewerObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_28pushFormat(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_format); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_30popFormat(struct PyPetscViewerObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_32STDOUT(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_34STDERR(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_36ASCII(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_name, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_38BINARY(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_40DRAW(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_42setASCIITab(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_tabs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_44getASCIITab(struct PyPetscViewerObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_46addASCIITab(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_tabs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_48subtractASCIITab(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_tabs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_50pushASCIISynchronized(struct PyPetscViewerObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_52popASCIISynchronized(struct PyPetscViewerObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54pushASCIITab(struct PyPetscViewerObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_56popASCIITab(struct PyPetscViewerObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_58useASCIITabs(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_60printfASCII(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_msg); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_62printfASCIISynchronized(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_msg); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_64flush(struct PyPetscViewerObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_66setFileMode(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_mode); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_68getFileMode(struct PyPetscViewerObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_70setFileName(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_72getFileName(struct PyPetscViewerObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_74setDrawInfo(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_76clearDraw(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 */
@@ -5925,22 +6331,24 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_5array___get__(struct PyPetscISOb
 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_4setType(struct PyPetscLGMapObject *__pyx_v_self, PyObject *__pyx_v_lgmap_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_6setFromOptions(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_8view(struct PyPetscLGMapObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_10destroy(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_12create(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_14createIS(struct PyPetscLGMapObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_16createSF(struct PyPetscLGMapObject *__pyx_v_self, struct PyPetscSFObject *__pyx_v_sf, PyObject *__pyx_v_start); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_18getSize(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_20getBlockSize(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_22getIndices(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_24getBlockIndices(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_26getInfo(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_28getBlockInfo(struct PyPetscLGMapObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_30apply(struct PyPetscLGMapObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_result); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_32applyBlock(struct PyPetscLGMapObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_result); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_34applyIS(struct PyPetscLGMapObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_36applyInverse(struct PyPetscLGMapObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_mode); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_38applyBlockInverse(struct PyPetscLGMapObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_mode); /* 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 */
@@ -5954,14 +6362,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_6__abs__(struct PyPetscVecObject
 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
+#if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
 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
+#if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
 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 */
@@ -6060,28 +6468,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_210setValue(struct PyPetscVecObj
 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_218getLGMap(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_220setValueLocal(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_222setValuesLocal(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_224setValuesBlockedLocal(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_226assemblyBegin(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_228assemblyEnd(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_230assemble(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_232strideScale(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field, PyObject *__pyx_v_alpha); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_234strideSum(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_236strideMin(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_238strideMax(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_240strideNorm(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field, PyObject *__pyx_v_norm_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_242strideScatter(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_244strideGather(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_246localForm(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_248ghostUpdateBegin(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_addv, PyObject *__pyx_v_mode); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_250ghostUpdateEnd(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_addv, PyObject *__pyx_v_mode); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_252ghostUpdate(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_addv, PyObject *__pyx_v_mode); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_254setMPIGhost(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_ghosts); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_256getSubVector(struct PyPetscVecObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset, struct PyPetscVecObject *__pyx_v_subvec); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_258restoreSubVector(struct PyPetscVecObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset, struct PyPetscVecObject *__pyx_v_subvec); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_260getNestSubVecs(struct PyPetscVecObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_262setNestSubVecs(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 */
@@ -6156,14 +6565,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_4__neg__(struct PyPetscMatObject
 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
+#if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
 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
+#if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
 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 */
@@ -6189,8 +6598,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_62setPreallocationDense(struct P
 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_70createLRC(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_A, struct PyPetscMatObject *__pyx_v_U, struct PyPetscVecObject *__pyx_v_c, struct PyPetscMatObject *__pyx_v_V); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_72createSubMatrixVirtual(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 */
@@ -6246,96 +6655,101 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_176setValuesBlockedRCV(struct Py
 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_184getLGMap(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_186setValueLocal(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_188setValuesLocal(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_190setValuesLocalRCV(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_192setValuesLocalIJV(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_194setValuesLocalCSR(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_196setValuesBlockedLocal(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_198setValuesBlockedLocalRCV(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_200setValuesBlockedLocalIJV(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_202setValuesBlockedLocalCSR(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_204setStencil(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_206setValueStencil(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_208setValueBlockedStencil(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_210zeroRows(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_212zeroRowsLocal(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_214zeroRowsColumns(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_216storeValues(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_218retrieveValues(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_220assemblyBegin(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_assembly); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_222assemblyEnd(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_assembly); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_224assemble(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_assembly); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_226isAssembled(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_228createVecs(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_side); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_230createVecRight(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_232createVecLeft(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_234getColumnVector(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_column, struct PyPetscVecObject *__pyx_v_result); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_236getRedundantMatrix(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_238getDiagonal(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_result); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_240getRowSum(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_result); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_242setDiagonal(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_diag, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_244diagonalScale(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_L, struct PyPetscVecObject *__pyx_v_R); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_246invertBlockDiagonal(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_248setNullSpace(struct PyPetscMatObject *__pyx_v_self, struct PyPetscNullSpaceObject *__pyx_v_nsp); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_250getNullSpace(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_252setTransposeNullSpace(struct PyPetscMatObject *__pyx_v_self, struct PyPetscNullSpaceObject *__pyx_v_nsp); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_254getTransposeNullSpace(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_256setNearNullSpace(struct PyPetscMatObject *__pyx_v_self, struct PyPetscNullSpaceObject *__pyx_v_nsp); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_258getNearNullSpace(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_260mult(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_262multAdd(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_264multTranspose(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_266multTransposeAdd(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_268multHermitian(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_270multHermitianAdd(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_272SOR(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_274getDiagonalBlock(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_276increaseOverlap(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset, PyObject *__pyx_v_overlap); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_278createSubMatrix(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_280createSubMatrices(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_282getLocalSubMatrix(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_284restoreLocalSubMatrix(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_286norm(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_norm_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_288scale(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_alpha); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_290shift(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_alpha); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_292chop(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_tol); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_294axpy(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_296aypx(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_298matMultSymbolic(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, PyObject *__pyx_v_fill); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_300matMultNumeric(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, struct PyPetscMatObject *__pyx_v_result); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_302matMult(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_304matTransposeMult(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_306transposeMatMult(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_308PtAP(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_P, struct PyPetscMatObject *__pyx_v_result, PyObject *__pyx_v_fill); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_310getOrdering(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_ord_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_312reorderForNonzeroDiagonal(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_314factorLU(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_316factorSymbolicLU(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_318factorNumericLU(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, PyObject *__pyx_v_options); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_320factorILU(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_322factorSymbolicILU(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_324factorCholesky(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isperm, PyObject *__pyx_v_options); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_326factorSymbolicCholesky(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isperm, PyObject *__pyx_v_options); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_328factorNumericCholesky(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, PyObject *__pyx_v_options); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_330factorICC(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isperm, PyObject *__pyx_v_options); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_332factorSymbolicICC(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isperm, PyObject *__pyx_v_options); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_334getInertia(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_336setUnfactored(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_338getLRCMats(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_340setMumpsIcntl(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_icntl, PyObject *__pyx_v_ival); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_342getMumpsIcntl(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_icntl); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_344setMumpsCntl(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_icntl, PyObject *__pyx_v_val); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_346getMumpsCntl(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_icntl); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_348getMumpsInfo(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_icntl); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_350getMumpsInfog(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_icntl); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_352getMumpsRinfo(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_icntl); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_354getMumpsRinfog(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_icntl); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_356solveForward(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_358solveBackward(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_360solve(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_362solveTranspose(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_364solveAdd(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_366solveTransposeAdd(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_368matSolve(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_B, struct PyPetscMatObject *__pyx_v_X); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_370getDenseArray(struct PyPetscMatObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_372getDenseLocalMatrix(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 */
@@ -6359,6 +6773,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_14hasConstant(struct PyPet
 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 PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_22test(struct PyPetscNullSpaceObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat); /* 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 */
@@ -6434,10 +6849,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_142getMGRScale(struct PyPetscPCOb
 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 PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_150setMGCycleType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_cycle_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_152setMGCycleTypeOnLevel(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, PyObject *__pyx_v_cycle_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_154setMGRhs(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscVecObject *__pyx_v_rhs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_156setMGX(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscVecObject *__pyx_v_x); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_158setMGR(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 */
@@ -6585,60 +7001,67 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_78getObjective(struct PyPetscSN
 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_86setNGS(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_ngs, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_88getNGS(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_90computeNGS(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_b); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_92setTolerances(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_94getTolerances(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_96setNormSchedule(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_normsched); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_98getNormSchedule(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_100setConvergenceTest(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_102getConvergenceTest(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_104callConvergenceTest(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_106setConvergenceHistory(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_length, PyObject *__pyx_v_reset); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_108getConvergenceHistory(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_110logConvergenceHistory(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_norm, PyObject *__pyx_v_linear_its); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_112setResetCounters(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_reset); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_114setMonitor(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_116getMonitor(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_118cancelMonitor(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_120monitor(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_its, PyObject *__pyx_v_rnorm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_122setMaxFunctionEvaluations(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_max_funcs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_124getMaxFunctionEvaluations(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_126getFunctionEvaluations(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_128setMaxStepFailures(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_max_fails); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_130getMaxStepFailures(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_132getStepFailures(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_134setMaxKSPFailures(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_max_fails); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_136getMaxKSPFailures(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_138getKSPFailures(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_140setUp(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_142reset(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_144solve(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_146setConvergedReason(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_reason); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_148getConvergedReason(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_150setIterationNumber(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_its); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_152getIterationNumber(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_154setFunctionNorm(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_norm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_156getFunctionNorm(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_158getLinearSolveIterations(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_160getRhs(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_162getSolution(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_164setSolution(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_166getSolutionUpdate(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_168setKSP(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscKSPObject *__pyx_v_ksp); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_170getKSP(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_172setUseEW(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_174getUseEW(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_176setParamsEW(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_178getParamsEW(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_180setUseMF(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_182getUseMF(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_184setUseFD(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_186getUseFD(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_188setVariableBounds(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_xl, struct PyPetscVecObject *__pyx_v_xu); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_190getVIInactiveSet(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_192createPython(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_context, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_194setPythonContext(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_context); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_196getPythonContext(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_198setPythonType(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_py_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_200getCompositeSNES(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_n); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_202getCompositeNumber(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_204getNASMSNES(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_n); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_206getNASMNumber(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 */
@@ -6664,6 +7087,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_9max_funcs___get__(struct PyPet
 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_4norm___get__(struct PyPetscSNESObject *__pyx_v_self); /* proto */
+static int __pyx_pf_8petsc4py_5PETSc_4SNES_4norm_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 */
@@ -6681,89 +7106,106 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_6destroy(struct PyPetscTSObject *
 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_14setRKType(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_ts_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_16getType(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_18getRKType(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_20setProblemType(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_ptype); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_22getProblemType(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_24setEquationType(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_eqtype); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_26getEquationType(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_28setOptionsPrefix(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_prefix); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_30getOptionsPrefix(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_32setFromOptions(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_34setAppCtx(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_appctx); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_36getAppCtx(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_38setRHSFunction(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_40setRHSJacobian(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_42computeRHSFunction(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_44computeRHSFunctionLinear(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_46computeRHSJacobian(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_48computeRHSJacobianConstant(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_50getRHSFunction(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_52getRHSJacobian(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_54setIFunction(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_56setIJacobian(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_58computeIFunction(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_60computeIJacobian(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_62getIFunction(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_64getIJacobian(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_66setI2Function(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_68setI2Jacobian(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_70computeI2Function(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_xdot, struct PyPetscVecObject *__pyx_v_xdotdot, struct PyPetscVecObject *__pyx_v_f); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_72computeI2Jacobian(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_xdot, struct PyPetscVecObject *__pyx_v_xdotdot, PyObject *__pyx_v_v, PyObject *__pyx_v_a, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_74getI2Function(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_76getI2Jacobian(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_78setSolution(struct PyPetscTSObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_u); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_80getSolution(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_82setSolution2(struct PyPetscTSObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_u, struct PyPetscVecObject *__pyx_v_v); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_84getSolution2(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_86getSNES(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_88getKSP(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_90getDM(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_92setDM(struct PyPetscTSObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_94setTime(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_96getTime(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_98getPrevTime(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_100getSolveTime(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_102setTimeStep(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_time_step); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_104getTimeStep(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_106setStepNumber(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_step_number); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_108getStepNumber(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_110setMaxTime(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_max_time); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_112getMaxTime(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_114setMaxSteps(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_max_steps); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_116getMaxSteps(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_118getSNESIterations(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_120getKSPIterations(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122setMaxStepRejections(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_n); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_124getStepRejections(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_126setMaxSNESFailures(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_n); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_128getSNESFailures(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_130setErrorIfStepFails(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_132setTolerances(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_rtol, PyObject *__pyx_v_atol); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_134getTolerances(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_136setExactFinalTime(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_option); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_138setConvergedReason(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_reason); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_140getConvergedReason(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_142setMonitor(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_144getMonitor(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_146cancelMonitor(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_148monitor(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_150setPreStep(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_152getPreStep(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_154setPostStep(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_156getPostStep(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_158setUp(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_160reset(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_162step(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_164rollBack(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_166solve(struct PyPetscTSObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_u); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_168interpolate(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_u); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_170setSaveTrajectory(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_172getCostIntegral(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_174setCostGradients(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_vl, PyObject *__pyx_v_vm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_176getCostGradients(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_178setCostIntegrand(struct PyPetscTSObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_cost, PyObject *__pyx_v_rfunction, PyObject *__pyx_v_n, PyObject *__pyx_v_drdyfunction, PyObject *__pyx_v_drdpfunction, PyObject *__pyx_v_forward, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_180adjointSetRHSJacobian(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_adjointjacobian, struct PyPetscMatObject *__pyx_v_A, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_182adjointComputeRHSJacobian(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_x, struct PyPetscMatObject *__pyx_v_J); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_184adjointSetSteps(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_adjoint_steps); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_186adjointSetUp(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_188adjointSolve(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_190adjointStep(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_192createPython(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_context, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_194setPythonContext(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_context); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_196getPythonContext(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_198setPythonType(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_py_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_200setTheta(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_theta); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_202getTheta(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_204setThetaEndpoint(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_flag); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_206getThetaEndpoint(struct PyPetscTSObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_208setAlphaRadius(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_radius); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_210setAlphaParams(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_212getAlphaParams(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 */
@@ -6901,49 +7343,62 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_28getBlockSize(struct PyPetscDMOb
 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_2DM_36getGlobalVec(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_38restoreGlobalVec(struct PyPetscDMObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vg); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_40getLocalVec(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_42restoreLocalVec(struct PyPetscDMObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vl); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_44globalToLocal(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_46localToGlobal(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_48localToLocal(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_50getLGMap(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_52getCoordinateDM(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_54getCoordinateSection(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_56setCoordinates(struct PyPetscDMObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_c); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_58getCoordinates(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_60setCoordinatesLocal(struct PyPetscDMObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_c); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_62getCoordinatesLocal(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_64setMatType(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_mat_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_66createMat(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_68createInterpolation(struct PyPetscDMObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_70createInjection(struct PyPetscDMObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_72createAggregates(struct PyPetscDMObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_74convert(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_dm_type); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_76refine(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_78coarsen(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_comm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_80refineHierarchy(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_nlevels); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_82coarsenHierarchy(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_nlevels); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_84getRefineLevel(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_86setRefineLevel(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_level); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_88getCoarsenLevel(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_90adaptLabel(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_label); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_92adaptMetric(struct PyPetscDMObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_metric, PyObject *__pyx_v_label); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_94setDefaultSection(struct PyPetscDMObject *__pyx_v_self, struct PyPetscSectionObject *__pyx_v_sec); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_96getDefaultSection(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_98setDefaultGlobalSection(struct PyPetscDMObject *__pyx_v_self, struct PyPetscSectionObject *__pyx_v_sec); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_100getDefaultGlobalSection(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_102createDefaultSF(struct PyPetscDMObject *__pyx_v_self, struct PyPetscSectionObject *__pyx_v_localsec, struct PyPetscSectionObject *__pyx_v_globalsec); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_104getDefaultSF(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_106getPointSF(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_108setPointSF(struct PyPetscDMObject *__pyx_v_self, struct PyPetscSFObject *__pyx_v_sf); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_110getNumLabels(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_112getLabelName(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_index); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_114hasLabel(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_116createLabel(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_118removeLabel(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_120getLabelValue(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_point); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_122setLabelValue(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_124clearLabelValue(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_126getLabelSize(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_128getLabelIdIS(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_130getStratumSize(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_132getStratumIS(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_134clearLabelStratum(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_136setLabelOutput(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_output); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_138getLabelOutput(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_140setKSPComputeOperators(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_operators, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_142createFieldDecomposition(struct PyPetscDMObject *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_144setSNESFunction(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_function, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_146setSNESJacobian(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_jacobian, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* 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 */
@@ -7001,63 +7456,80 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_7corners___get__(struct __pyx_o
 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_4createBoxMesh(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_dim, PyObject *__pyx_v_numFaces, 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_6DMPlex_8createFromFile(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_10createCGNS(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_12createCGNSFromFile(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_14createExodusFromFile(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_16createExodus(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_18createGmsh(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_20createCohesiveSubmesh(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_22getChart(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_24setChart(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_26getConeSize(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_28setConeSize(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_30getCone(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_32setCone(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_34insertCone(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_36insertConeOrientation(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_38getConeOrientation(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_40setConeOrientation(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_42getSupportSize(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_44setSupportSize(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_46getSupport(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_48setSupport(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_50getMaxSizes(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_52symmetrize(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_54stratify(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_56orient(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_58getCellNumbering(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_60getVertexNumbering(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_62createPointNumbering(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_64getDepth(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_66getDepthStratum(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_svalue); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_68getHeightStratum(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_svalue); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_70getMeet(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_points); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_72getJoin(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_points); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_74getTransitiveClosure(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_76vecGetClosure(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_78getVecClosure(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, struct PyPetscSectionObject *__pyx_v_sec, struct PyPetscVecObject *__pyx_v_vec, PyObject *__pyx_v_point); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_80setVecClosure(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, struct PyPetscSectionObject *__pyx_v_sec, struct PyPetscVecObject *__pyx_v_vec, PyObject *__pyx_v_point, PyObject *__pyx_v_values, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_82setMatClosure(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, struct PyPetscSectionObject *__pyx_v_sec, struct PyPetscSectionObject *__pyx_v_gsec, struct PyPetscMatObject *__pyx_v_mat, PyObject *__pyx_v_point, PyObject *__pyx_v_values, PyObject *__pyx_v_addv); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_84generate(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_86setTriangleOptions(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_opts); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_88setTetGenOptions(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_opts); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_90createSquareBoundary(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_92createCubeBoundary(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_94markBoundaryFaces(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_label); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_96setAdjacencyUseCone(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_useCone); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_98getAdjacencyUseCone(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_100setAdjacencyUseClosure(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_useClosure); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102getAdjacencyUseClosure(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_104setAdjacencyUseAnchors(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_useAnchors); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_106getAdjacencyUseAnchors(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_108getAdjacency(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_110setPartitioner(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, struct PyPetscPartitionerObject *__pyx_v_part); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_112getPartitioner(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_114distribute(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_overlap); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_116distributeOverlap(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_overlap); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_118interpolate(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_120uninterpolate(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_122distributeField(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_124createCoarsePointIS(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_126createSection(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_128getPointLocal(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_point); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_130getPointLocalField(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_field); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_132getPointGlobal(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_point); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_134getPointGlobalField(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_field); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_136setRefinementUniform(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_refinementUniform); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_138getRefinementUniform(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_140setRefinementLimit(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_refinementLimit); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_142getRefinementLimit(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_144getOrdering(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_otype); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_146permute(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, struct PyPetscISObject *__pyx_v_perm); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_148computeCellGeometryFVM(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_cell); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_150constructGhostCells(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_labelName); /* 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 */
@@ -7085,8 +7557,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_26setCoarsen(struct __pyx_ob
 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 PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_34setCreateRestriction(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_create_restriction, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_36setCreateFieldDecomposition(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_38setCreateDomainDecomposition(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_40setCreateDomainDecompositionScatters(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_scatter, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs); /* proto */
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_42setCreateSubDM(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 */
@@ -7166,10 +7641,10 @@ 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__58;
+static PyObject *__pyx_slice__66;
 static PyObject *__pyx_slice__67;
+static PyObject *__pyx_slice__70;
 static PyObject *__pyx_tuple__11;
 static PyObject *__pyx_tuple__12;
 static PyObject *__pyx_tuple__13;
@@ -7191,7 +7666,6 @@ 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;
@@ -7213,26 +7687,81 @@ static PyObject *__pyx_tuple__51;
 static PyObject *__pyx_tuple__52;
 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__60;
 static PyObject *__pyx_tuple__61;
 static PyObject *__pyx_tuple__62;
+static PyObject *__pyx_tuple__63;
+static PyObject *__pyx_tuple__64;
 static PyObject *__pyx_tuple__65;
-static PyObject *__pyx_tuple__66;
 static PyObject *__pyx_tuple__68;
-static PyObject *__pyx_tuple__70;
+static PyObject *__pyx_tuple__69;
+static PyObject *__pyx_tuple__71;
 static PyObject *__pyx_tuple__72;
+static PyObject *__pyx_tuple__73;
 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_tuple__75;
+static PyObject *__pyx_tuple__77;
+static PyObject *__pyx_tuple__79;
+static PyObject *__pyx_tuple__81;
+static PyObject *__pyx_tuple__83;
+static PyObject *__pyx_tuple__84;
+static PyObject *__pyx_tuple__85;
+static PyObject *__pyx_tuple__86;
+static PyObject *__pyx_tuple__87;
+static PyObject *__pyx_tuple__88;
+static PyObject *__pyx_tuple__89;
+static PyObject *__pyx_tuple__90;
+static PyObject *__pyx_tuple__91;
+static PyObject *__pyx_tuple__92;
+static PyObject *__pyx_tuple__93;
+static PyObject *__pyx_tuple__94;
+static PyObject *__pyx_tuple__95;
+static PyObject *__pyx_tuple__96;
+static PyObject *__pyx_tuple__97;
+static PyObject *__pyx_tuple__98;
+static PyObject *__pyx_tuple__99;
+static PyObject *__pyx_tuple__100;
+static PyObject *__pyx_tuple__101;
+static PyObject *__pyx_tuple__102;
+static PyObject *__pyx_tuple__103;
+static PyObject *__pyx_tuple__104;
+static PyObject *__pyx_tuple__105;
+static PyObject *__pyx_tuple__106;
+static PyObject *__pyx_tuple__107;
+static PyObject *__pyx_tuple__108;
+static PyObject *__pyx_tuple__109;
+static PyObject *__pyx_tuple__110;
+static PyObject *__pyx_tuple__111;
+static PyObject *__pyx_tuple__112;
+static PyObject *__pyx_tuple__113;
+static PyObject *__pyx_tuple__114;
+static PyObject *__pyx_tuple__115;
+static PyObject *__pyx_tuple__116;
+static PyObject *__pyx_tuple__117;
+static PyObject *__pyx_tuple__118;
+static PyObject *__pyx_tuple__119;
+static PyObject *__pyx_tuple__120;
+static PyObject *__pyx_tuple__121;
+static PyObject *__pyx_tuple__122;
+static PyObject *__pyx_tuple__123;
+static PyObject *__pyx_tuple__124;
+static PyObject *__pyx_tuple__125;
+static PyObject *__pyx_tuple__126;
+static PyObject *__pyx_tuple__127;
+static PyObject *__pyx_tuple__128;
+static PyObject *__pyx_tuple__129;
+static PyObject *__pyx_tuple__130;
+static PyObject *__pyx_tuple__131;
+static PyObject *__pyx_codeobj__76;
 static PyObject *__pyx_codeobj__78;
+static PyObject *__pyx_codeobj__80;
+static PyObject *__pyx_codeobj__82;
+static PyObject *__pyx_codeobj__132;
+static PyObject *__pyx_codeobj__133;
 
 /* "PETSc/PETSc.pyx":12
  *     ctypedef char const_char "const char"
@@ -7444,7 +7973,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_str2bytes(PyObject *__py
     __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))) {
+    if (CYTHON_UNPACK_METHODS && 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);
@@ -7480,7 +8009,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_str2bytes(PyObject *__py
  *     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_t_6 = __Pyx_PyObject_AsWritableString(__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
@@ -7579,7 +8108,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_S_(const char *__pyx_v_p
     __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))) {
+    if (CYTHON_UNPACK_METHODS && 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);
@@ -7641,7 +8170,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_SETERR(int __pyx_v_ierr) {
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("SETERR", 0);
 
@@ -7720,12 +8249,12 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_SETERR(int __pyx_v_ierr) {
   __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_WriteUnraisable("petsc4py.PETSc.SETERR", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
   __pyx_r = 0;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
@@ -7833,7 +8362,55 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_CHKERR(int __pyx_v_ierr) {
 }
 
 /* "PETSc/PETSc.pyx":84
- *     PetscScalar PyPetscScalar_AsPetscScalar(object) except*
+ *     PetscScalar PyPetscScalar_AsPetscScalar(object) except? <PetscScalar>-1.0
+ * 
+ * cdef inline object toBool(PetscBool value):             # <<<<<<<<<<<<<<
+ *     return True if value else False
+ * 
+ */
+
+static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toBool(PetscBool __pyx_v_value) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("toBool", 0);
+
+  /* "PETSc/PETSc.pyx":85
+ * 
+ * cdef inline object toBool(PetscBool value):
+ *     return True if value else False             # <<<<<<<<<<<<<<
+ * 
+ * cdef inline object toInt(PetscInt value):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  if (__pyx_v_value) {
+    __Pyx_INCREF(Py_True);
+    __pyx_t_1 = Py_True;
+  } else {
+    __Pyx_INCREF(Py_False);
+    __pyx_t_1 = Py_False;
+  }
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/PETSc.pyx":84
+ *     PetscScalar PyPetscScalar_AsPetscScalar(object) except? <PetscScalar>-1.0
+ * 
+ * cdef inline object toBool(PetscBool value):             # <<<<<<<<<<<<<<
+ *     return True if value else False
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/PETSc.pyx":87
+ *     return True if value else False
  * 
  * cdef inline object toInt(PetscInt value):             # <<<<<<<<<<<<<<
  *     return value
@@ -7846,7 +8423,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toInt(PetscInt __pyx_v_v
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("toInt", 0);
 
-  /* "PETSc/PETSc.pyx":85
+  /* "PETSc/PETSc.pyx":88
  * 
  * cdef inline object toInt(PetscInt value):
  *     return value             # <<<<<<<<<<<<<<
@@ -7854,14 +8431,14 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toInt(PetscInt __pyx_v_v
  *     return value
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_PetscInt(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 85, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_PetscInt(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 88, __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*
+  /* "PETSc/PETSc.pyx":87
+ *     return True if value else False
  * 
  * cdef inline object toInt(PetscInt value):             # <<<<<<<<<<<<<<
  *     return value
@@ -7879,7 +8456,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toInt(PetscInt __pyx_v_v
   return __pyx_r;
 }
 
-/* "PETSc/PETSc.pyx":86
+/* "PETSc/PETSc.pyx":89
  * cdef inline object toInt(PetscInt value):
  *     return value
  * cdef inline PetscInt asInt(object value) except? -1:             # <<<<<<<<<<<<<<
@@ -7893,18 +8470,18 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asInt(PyObject *__pyx_v_v
   PetscInt __pyx_t_1;
   __Pyx_RefNannySetupContext("asInt", 0);
 
-  /* "PETSc/PETSc.pyx":87
+  /* "PETSc/PETSc.pyx":90
  *     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_t_1 = __Pyx_PyInt_As_PetscInt(__pyx_v_value); if (unlikely((__pyx_t_1 == ((PetscInt)-1)) && PyErr_Occurred())) __PYX_ERR(11, 90, __pyx_L1_error)
   __pyx_r = __pyx_t_1;
   goto __pyx_L0;
 
-  /* "PETSc/PETSc.pyx":86
+  /* "PETSc/PETSc.pyx":89
  * cdef inline object toInt(PetscInt value):
  *     return value
  * cdef inline PetscInt asInt(object value) except? -1:             # <<<<<<<<<<<<<<
@@ -7921,7 +8498,7 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asInt(PyObject *__pyx_v_v
   return __pyx_r;
 }
 
-/* "PETSc/PETSc.pyx":89
+/* "PETSc/PETSc.pyx":92
  *     return value
  * 
  * cdef inline object toReal(PetscReal value):             # <<<<<<<<<<<<<<
@@ -7935,7 +8512,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toReal(PetscReal __pyx_v
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("toReal", 0);
 
-  /* "PETSc/PETSc.pyx":90
+  /* "PETSc/PETSc.pyx":93
  * 
  * cdef inline object toReal(PetscReal value):
  *     return value             # <<<<<<<<<<<<<<
@@ -7943,13 +8520,13 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toReal(PetscReal __pyx_v
  *     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_t_1 = PyFloat_FromDouble(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 93, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/PETSc.pyx":89
+  /* "PETSc/PETSc.pyx":92
  *     return value
  * 
  * cdef inline object toReal(PetscReal value):             # <<<<<<<<<<<<<<
@@ -7968,7 +8545,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toReal(PetscReal __pyx_v
   return __pyx_r;
 }
 
-/* "PETSc/PETSc.pyx":91
+/* "PETSc/PETSc.pyx":94
  * cdef inline object toReal(PetscReal value):
  *     return value
  * cdef inline PetscReal asReal(object value) except? -1:             # <<<<<<<<<<<<<<
@@ -7982,18 +8559,18 @@ static CYTHON_INLINE PetscReal __pyx_f_8petsc4py_5PETSc_asReal(PyObject *__pyx_v
   PetscReal __pyx_t_1;
   __Pyx_RefNannySetupContext("asReal", 0);
 
-  /* "PETSc/PETSc.pyx":92
+  /* "PETSc/PETSc.pyx":95
  *     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_t_1 = __pyx_PyFloat_AsDouble(__pyx_v_value); if (unlikely((__pyx_t_1 == ((PetscReal)-1)) && PyErr_Occurred())) __PYX_ERR(11, 95, __pyx_L1_error)
   __pyx_r = __pyx_t_1;
   goto __pyx_L0;
 
-  /* "PETSc/PETSc.pyx":91
+  /* "PETSc/PETSc.pyx":94
  * cdef inline object toReal(PetscReal value):
  *     return value
  * cdef inline PetscReal asReal(object value) except? -1:             # <<<<<<<<<<<<<<
@@ -8010,12 +8587,12 @@ static CYTHON_INLINE PetscReal __pyx_f_8petsc4py_5PETSc_asReal(PyObject *__pyx_v
   return __pyx_r;
 }
 
-/* "PETSc/PETSc.pyx":94
+/* "PETSc/PETSc.pyx":97
  *     return value
  * 
  * cdef inline object toScalar(PetscScalar value):             # <<<<<<<<<<<<<<
  *     return PyPetscScalar_FromPetscScalar(value)
- * cdef inline PetscScalar asScalar(object value) except*:
+ * cdef inline PetscScalar asScalar(object value) except? <PetscScalar>-1.0:
  */
 
 static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toScalar(PetscScalar __pyx_v_value) {
@@ -8024,26 +8601,26 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toScalar(PetscScalar __p
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("toScalar", 0);
 
-  /* "PETSc/PETSc.pyx":95
+  /* "PETSc/PETSc.pyx":98
  * 
  * cdef inline object toScalar(PetscScalar value):
  *     return PyPetscScalar_FromPetscScalar(value)             # <<<<<<<<<<<<<<
- * cdef inline PetscScalar asScalar(object value) except*:
+ * cdef inline PetscScalar asScalar(object value) except? <PetscScalar>-1.0:
  *     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_t_1 = PyPetscScalar_FromPetscScalar(__pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 98, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/PETSc.pyx":94
+  /* "PETSc/PETSc.pyx":97
  *     return value
  * 
  * cdef inline object toScalar(PetscScalar value):             # <<<<<<<<<<<<<<
  *     return PyPetscScalar_FromPetscScalar(value)
- * cdef inline PetscScalar asScalar(object value) except*:
+ * cdef inline PetscScalar asScalar(object value) except? <PetscScalar>-1.0:
  */
 
   /* function exit code */
@@ -8057,10 +8634,10 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toScalar(PetscScalar __p
   return __pyx_r;
 }
 
-/* "PETSc/PETSc.pyx":96
+/* "PETSc/PETSc.pyx":99
  * cdef inline object toScalar(PetscScalar value):
  *     return PyPetscScalar_FromPetscScalar(value)
- * cdef inline PetscScalar asScalar(object value) except*:             # <<<<<<<<<<<<<<
+ * cdef inline PetscScalar asScalar(object value) except? <PetscScalar>-1.0:             # <<<<<<<<<<<<<<
  *     return PyPetscScalar_AsPetscScalar(value)
  * 
  */
@@ -8071,21 +8648,21 @@ static CYTHON_INLINE PetscScalar __pyx_f_8petsc4py_5PETSc_asScalar(PyObject *__p
   PetscScalar __pyx_t_1;
   __Pyx_RefNannySetupContext("asScalar", 0);
 
-  /* "PETSc/PETSc.pyx":97
+  /* "PETSc/PETSc.pyx":100
  *     return PyPetscScalar_FromPetscScalar(value)
- * cdef inline PetscScalar asScalar(object value) except*:
+ * cdef inline PetscScalar asScalar(object value) except? <PetscScalar>-1.0:
  *     return PyPetscScalar_AsPetscScalar(value)             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-  __pyx_t_1 = PyPetscScalar_AsPetscScalar(__pyx_v_value); if (unlikely(PyErr_Occurred())) __PYX_ERR(11, 97, __pyx_L1_error)
+  __pyx_t_1 = PyPetscScalar_AsPetscScalar(__pyx_v_value); if (unlikely(__pyx_t_1 == ((PetscScalar)((PetscScalar)(-1.0))) && PyErr_Occurred())) __PYX_ERR(11, 100, __pyx_L1_error)
   __pyx_r = __pyx_t_1;
   goto __pyx_L0;
 
-  /* "PETSc/PETSc.pyx":96
+  /* "PETSc/PETSc.pyx":99
  * cdef inline object toScalar(PetscScalar value):
  *     return PyPetscScalar_FromPetscScalar(value)
- * cdef inline PetscScalar asScalar(object value) except*:             # <<<<<<<<<<<<<<
+ * cdef inline PetscScalar asScalar(object value) except? <PetscScalar>-1.0:             # <<<<<<<<<<<<<<
  *     return PyPetscScalar_AsPetscScalar(value)
  * 
  */
@@ -8093,7 +8670,7 @@ static CYTHON_INLINE PetscScalar __pyx_f_8petsc4py_5PETSc_asScalar(PyObject *__p
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.asScalar", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = 0;
+  __pyx_r = ((PetscScalar)(-1.0));
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
@@ -10087,7 +10664,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getprefix(PyObject *__pyx_v_prefix, st
     __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))) {
+    if (CYTHON_UNPACK_METHODS && 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);
@@ -10429,7 +11006,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Bool(PetscOptions __pyx_v_opt,
  *     cdef PetscBool value = PETSC_FALSE
  *     cdef PetscBool flag  = PETSC_FALSE             # <<<<<<<<<<<<<<
  *     CHKERR( PetscOptionsGetBool(opt, pre, name, &value, &flag) )
- *     if flag==PETSC_TRUE: return <bint>value
+ *     if flag==PETSC_TRUE: return toBool(value)
  */
   __pyx_v_flag = PETSC_FALSE;
 
@@ -10437,22 +11014,22 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Bool(PetscOptions __pyx_v_opt,
  *     cdef PetscBool value = PETSC_FALSE
  *     cdef PetscBool flag  = PETSC_FALSE
  *     CHKERR( PetscOptionsGetBool(opt, pre, name, &value, &flag) )             # <<<<<<<<<<<<<<
- *     if flag==PETSC_TRUE: return <bint>value
+ *     if flag==PETSC_TRUE: return toBool(value)
  *     if deft is not None: return deft
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(3, 66, __pyx_L1_error)
 
   /* "PETSc/petscopt.pxi":67
  *     cdef PetscBool flag  = PETSC_FALSE
  *     CHKERR( PetscOptionsGetBool(opt, pre, name, &value, &flag) )
- *     if flag==PETSC_TRUE: return <bint>value             # <<<<<<<<<<<<<<
+ *     if flag==PETSC_TRUE: return toBool(value)             # <<<<<<<<<<<<<<
  *     if deft is not None: return deft
  *     raise KeyError(opt2str(pre, name))
  */
   __pyx_t_2 = ((__pyx_v_flag == PETSC_TRUE) != 0);
   if (__pyx_t_2) {
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = __Pyx_PyInt_From_PetscBool(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 67, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toBool(__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;
@@ -10461,7 +11038,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Bool(PetscOptions __pyx_v_opt,
 
   /* "PETSc/petscopt.pxi":68
  *     CHKERR( PetscOptionsGetBool(opt, pre, name, &value, &flag) )
- *     if flag==PETSC_TRUE: return <bint>value
+ *     if flag==PETSC_TRUE: return toBool(value)
  *     if deft is not None: return deft             # <<<<<<<<<<<<<<
  *     raise KeyError(opt2str(pre, name))
  * 
@@ -10476,7 +11053,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Bool(PetscOptions __pyx_v_opt,
   }
 
   /* "PETSc/petscopt.pxi":69
- *     if flag==PETSC_TRUE: return <bint>value
+ *     if flag==PETSC_TRUE: return toBool(value)
  *     if deft is not None: return deft
  *     raise KeyError(opt2str(pre, name))             # <<<<<<<<<<<<<<
  * 
@@ -10561,7 +11138,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Int(PetscOptions __pyx_v_opt, c
  *     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_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)
+  __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 == ((int)-1))) __PYX_ERR(3, 74, __pyx_L1_error)
 
   /* "PETSc/petscopt.pxi":75
  *     cdef PetscBool flag = PETSC_FALSE
@@ -10682,7 +11259,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Real(PetscOptions __pyx_v_opt,
  *     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_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)
+  __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 == ((int)-1))) __PYX_ERR(3, 82, __pyx_L1_error)
 
   /* "PETSc/petscopt.pxi":83
  *     cdef PetscBool flag = PETSC_FALSE
@@ -10803,7 +11380,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_Scalar(PetscOptions __pyx_v_opt
  *     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_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)
+  __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 == ((int)-1))) __PYX_ERR(3, 90, __pyx_L1_error)
 
   /* "PETSc/petscopt.pxi":91
  *     cdef PetscBool flag = PETSC_FALSE
@@ -10915,7 +11492,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getopt_String(PetscOptions __pyx_v_opt
  *     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_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)
+  __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 == ((int)-1))) __PYX_ERR(3, 98, __pyx_L1_error)
 
   /* "PETSc/petscopt.pxi":99
  *     cdef PetscBool flag = PETSC_FALSE
@@ -11443,7 +12020,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_tokenize(PyObject *__pyx_v_options) {
  *   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_ERR(3, 147, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscTokenCreate(__pyx_v_s, ' ', (&__pyx_v_t))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(3, 147, __pyx_L1_error)
 
   /* "PETSc/petscopt.pxi":148
  *   cdef list tokens = []
@@ -11461,7 +12038,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_tokenize(PyObject *__pyx_v_options) {
  *       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_ERR(3, 149, __pyx_L4_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscTokenFind(__pyx_v_t, ((char **)(&__pyx_v_p)))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(3, 149, __pyx_L4_error)
 
     /* "PETSc/petscopt.pxi":150
  *   try:
@@ -11483,7 +12060,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_tokenize(PyObject *__pyx_v_options) {
  */
       __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_ERR(3, 151, __pyx_L4_error)
+      __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_tokens, __pyx_t_1); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(3, 151, __pyx_L4_error)
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
       /* "PETSc/petscopt.pxi":152
@@ -11493,7 +12070,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_tokenize(PyObject *__pyx_v_options) {
  *   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_ERR(3, 152, __pyx_L4_error)
+      __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscTokenFind(__pyx_v_t, ((char **)(&__pyx_v_p)))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(3, 152, __pyx_L4_error)
     }
   }
 
@@ -11506,7 +12083,7 @@ 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_ERR(3, 154, __pyx_L1_error)
+      __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscTokenDestroy((&__pyx_v_t))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(3, 154, __pyx_L1_error)
       goto __pyx_L5;
     }
     /*exception exit:*/{
@@ -11525,9 +12102,8 @@ 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_ERR(3, 154, __pyx_L9_error)
+        __pyx_t_13 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscTokenDestroy((&__pyx_v_t))); if (unlikely(__pyx_t_13 == ((int)-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);
@@ -11542,7 +12118,6 @@ 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);
@@ -11657,7 +12232,7 @@ static int __pyx_f_8petsc4py_5PETSc_iskey(PyObject *__pyx_v_key) {
  *         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_ERR(3, 162, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsValidKey(__pyx_v_k, (&__pyx_v_b))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(3, 162, __pyx_L1_error)
 
     /* "PETSc/petscopt.pxi":163
  *         key = str2bytes(key, &k)
@@ -11718,7 +12293,7 @@ static int __pyx_f_8petsc4py_5PETSc_iskey(PyObject *__pyx_v_key) {
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_WriteUnraisable("petsc4py.PETSc.iskey", __pyx_clineno, __pyx_lineno, __pyx_filename, 0, 0);
+  __Pyx_WriteUnraisable("petsc4py.PETSc.iskey", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
   __pyx_r = 0;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_key);
@@ -11824,7 +12399,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getkey(PyObject *__pyx_v_key, PyObject
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   int __pyx_t_6;
-  Py_ssize_t __pyx_t_7;
+  int __pyx_t_7;
   __Pyx_RefNannySetupContext("getkey", 0);
   __Pyx_INCREF(__pyx_v_key);
 
@@ -11915,7 +12490,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getkey(PyObject *__pyx_v_key, PyObject
   __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))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
     __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
     if (likely(__pyx_t_4)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -11928,15 +12503,33 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getkey(PyObject *__pyx_v_key, PyObject
     __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_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_ERR(3, 179, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
-    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_3)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_prefix};
+      __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 179, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_prefix};
+      __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 179, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __Pyx_GOTREF(__pyx_t_2);
+    } else
+    #endif
+    {
+      __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_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_ERR(3, 179, __pyx_L1_error)
@@ -11977,7 +12570,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_getkey(PyObject *__pyx_v_key, PyObject
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_5 = NULL;
   __pyx_t_7 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
     __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
     if (likely(__pyx_t_5)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -11987,23 +12580,41 @@ 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_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;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_3)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_v_prefix, __pyx_kp_s__10, __pyx_int_1};
+    __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 181, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+    PyObject *__pyx_temp[4] = {__pyx_t_5, __pyx_v_prefix, __pyx_kp_s__10, __pyx_int_1};
+    __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_7, 3+__pyx_t_7); if (unlikely(!__pyx_t_2)) __PYX_ERR(3, 181, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __Pyx_GOTREF(__pyx_t_2);
+  } else
+  #endif
+  {
+    __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;
+    }
+    __Pyx_INCREF(__pyx_v_prefix);
+    __Pyx_GIVEREF(__pyx_v_prefix);
+    PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_7, __pyx_v_prefix);
+    __Pyx_INCREF(__pyx_kp_s__10);
+    __Pyx_GIVEREF(__pyx_kp_s__10);
+    PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_7, __pyx_kp_s__10);
+    __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_ERR(3, 181, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   }
-  __Pyx_INCREF(__pyx_v_prefix);
-  __Pyx_GIVEREF(__pyx_v_prefix);
-  PyTuple_SET_ITEM(__pyx_t_4, 0+__pyx_t_7, __pyx_v_prefix);
-  __Pyx_INCREF(__pyx_kp_s__10);
-  __Pyx_GIVEREF(__pyx_kp_s__10);
-  PyTuple_SET_ITEM(__pyx_t_4, 1+__pyx_t_7, __pyx_kp_s__10);
-  __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_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;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
@@ -12130,7 +12741,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_parseopt(PyObject *__pyx_v_options, Py
  *     first = gettok(tokens)
  *     while first:
  */
-  __pyx_t_3 = PyDict_New(); if (unlikely(!__pyx_t_3)) __PYX_ERR(3, 190, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); 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;
@@ -12367,7 +12978,7 @@ static CYTHON_INLINE MPI_Comm __pyx_f_8petsc4py_5PETSc_mpi4py_Comm_Get(PyObject
   __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_ERR(13, 40, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_Import(__pyx_n_s_mpi4py, __pyx_t_1, 0); 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_ERR(13, 40, __pyx_L1_error)
@@ -12384,7 +12995,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, ((char *)"PyMPIComm_Get"), ((char *)"MPI_Comm *(PyObject *)")); if (unlikely(__pyx_t_3 == NULL && PyErr_Occurred())) __PYX_ERR(13, 42, __pyx_L1_error)
+  __pyx_t_3 = Cython_ImportFunction(__pyx_v_MPI, ((char *)"PyMPIComm_Get"), ((char *)"MPI_Comm *(PyObject *)")); if (unlikely(__pyx_t_3 == ((void *)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
@@ -12407,7 +13018,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_ERR(13, 45, __pyx_L1_error)
+  __pyx_t_5 = __pyx_v_commget(__pyx_v_comm); if (unlikely(__pyx_t_5 == ((MPI_Comm *)NULL))) __PYX_ERR(13, 45, __pyx_L1_error)
   __pyx_v_ptr = __pyx_t_5;
 
   /* "PETSc/petscmpi.pxi":46
@@ -12484,7 +13095,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_mpi4py_Comm_New(MPI_Comm
   __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_ERR(13, 50, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_Import(__pyx_n_s_mpi4py, __pyx_t_1, 0); 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_ERR(13, 50, __pyx_L1_error)
@@ -12501,7 +13112,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, ((char *)"PyMPIComm_New"), ((char *)"PyObject *(MPI_Comm)")); if (unlikely(__pyx_t_3 == NULL && PyErr_Occurred())) __PYX_ERR(13, 52, __pyx_L1_error)
+  __pyx_t_3 = Cython_ImportFunction(__pyx_v_MPI, ((char *)"PyMPIComm_New"), ((char *)"PyObject *(MPI_Comm)")); if (unlikely(__pyx_t_3 == ((void *)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
@@ -12948,7 +13559,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_ERR(13, 90, __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 == ((int)-1))) __PYX_ERR(13, 90, __pyx_L1_error)
 
   /* "PETSc/petscmpi.pxi":91
  *     cdef int size = 0
@@ -13027,7 +13638,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_ERR(13, 96, __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 == ((int)-1))) __PYX_ERR(13, 96, __pyx_L1_error)
 
   /* "PETSc/petscmpi.pxi":97
  *     cdef int rank = 0
@@ -13057,7 +13668,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_comm_rank(MPI_Comm __pyx_v_com
   return __pyx_r;
 }
 
-/* "PETSc/petscsys.pxi":57
+/* "PETSc/petscsys.pxi":48
  * 
  * 
  * cdef inline int Sys_Sizes(             # <<<<<<<<<<<<<<
@@ -13087,7 +13698,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
   int __pyx_t_11;
   __Pyx_RefNannySetupContext("Sys_Sizes", 0);
 
-  /* "PETSc/petscsys.pxi":64
+  /* "PETSc/petscsys.pxi":55
  *     ) except -1:
  *     # get block size
  *     cdef PetscInt bs=PETSC_DECIDE, b=PETSC_DECIDE             # <<<<<<<<<<<<<<
@@ -13097,7 +13708,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":65
+  /* "PETSc/petscsys.pxi":56
  *     # get block size
  *     cdef PetscInt bs=PETSC_DECIDE, b=PETSC_DECIDE
  *     if bsize is not None: bs = b = asInt(bsize)             # <<<<<<<<<<<<<<
@@ -13107,12 +13718,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 == -1L && PyErr_Occurred())) __PYX_ERR(14, 65, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_bsize); if (unlikely(__pyx_t_3 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(14, 56, __pyx_L1_error)
     __pyx_v_bs = __pyx_t_3;
     __pyx_v_b = __pyx_t_3;
   }
 
-  /* "PETSc/petscsys.pxi":66
+  /* "PETSc/petscsys.pxi":57
  *     cdef PetscInt bs=PETSC_DECIDE, b=PETSC_DECIDE
  *     if bsize is not None: bs = b = asInt(bsize)
  *     if bs == PETSC_DECIDE: bs = 1             # <<<<<<<<<<<<<<
@@ -13124,7 +13735,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
     __pyx_v_bs = 1;
   }
 
-  /* "PETSc/petscsys.pxi":68
+  /* "PETSc/petscsys.pxi":59
  *     if bs == PETSC_DECIDE: bs = 1
  *     # unpack and get local and global sizes
  *     cdef PetscInt n=PETSC_DECIDE, N=PETSC_DECIDE             # <<<<<<<<<<<<<<
@@ -13134,7 +13745,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":70
+  /* "PETSc/petscsys.pxi":61
  *     cdef PetscInt n=PETSC_DECIDE, N=PETSC_DECIDE
  *     cdef object on, oN
  *     try:             # <<<<<<<<<<<<<<
@@ -13150,7 +13761,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
     __Pyx_XGOTREF(__pyx_t_6);
     /*try:*/ {
 
-      /* "PETSc/petscsys.pxi":71
+      /* "PETSc/petscsys.pxi":62
  *     cdef object on, oN
  *     try:
  *         on, oN = size             # <<<<<<<<<<<<<<
@@ -13159,7 +13770,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
  */
       if ((likely(PyTuple_CheckExact(__pyx_v_size))) || (PyList_CheckExact(__pyx_v_size))) {
         PyObject* sequence = __pyx_v_size;
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if !CYTHON_COMPILING_IN_PYPY
         Py_ssize_t size = Py_SIZE(sequence);
         #else
         Py_ssize_t size = PySequence_Size(sequence);
@@ -13167,9 +13778,9 @@ 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_ERR(14, 71, __pyx_L5_error)
+          __PYX_ERR(14, 62, __pyx_L5_error)
         }
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         if (likely(PyTuple_CheckExact(sequence))) {
           __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); 
           __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
@@ -13180,37 +13791,37 @@ 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_ERR(14, 71, __pyx_L5_error)
+        __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(14, 62, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_7);
-        __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(14, 71, __pyx_L5_error)
+        __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(14, 62, __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_ERR(14, 71, __pyx_L5_error)
+        __pyx_t_9 = PyObject_GetIter(__pyx_v_size); if (unlikely(!__pyx_t_9)) __PYX_ERR(14, 62, __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;
+        index = 0; __pyx_t_7 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_7)) goto __pyx_L11_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;
+        index = 1; __pyx_t_8 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L11_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_8);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) __PYX_ERR(14, 71, __pyx_L5_error)
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) __PYX_ERR(14, 62, __pyx_L5_error)
         __pyx_t_10 = NULL;
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-        goto __pyx_L14_unpacking_done;
-        __pyx_L13_unpacking_failed:;
+        goto __pyx_L12_unpacking_done;
+        __pyx_L11_unpacking_failed:;
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         __pyx_t_10 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        __PYX_ERR(14, 71, __pyx_L5_error)
-        __pyx_L14_unpacking_done:;
+        __PYX_ERR(14, 62, __pyx_L5_error)
+        __pyx_L12_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
+      /* "PETSc/petscsys.pxi":61
  *     cdef PetscInt n=PETSC_DECIDE, N=PETSC_DECIDE
  *     cdef object on, oN
  *     try:             # <<<<<<<<<<<<<<
@@ -13221,14 +13832,13 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
     __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;
+    goto __pyx_L10_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":72
+    /* "PETSc/petscsys.pxi":63
  *     try:
  *         on, oN = size
  *     except (TypeError, ValueError):             # <<<<<<<<<<<<<<
@@ -13238,12 +13848,12 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
     __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_ERR(14, 72, __pyx_L7_except_error)
+      if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_9) < 0) __PYX_ERR(14, 63, __pyx_L7_except_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_GOTREF(__pyx_t_9);
 
-      /* "PETSc/petscsys.pxi":73
+      /* "PETSc/petscsys.pxi":64
  *         on, oN = size
  *     except (TypeError, ValueError):
  *         on = None; oN = size             # <<<<<<<<<<<<<<
@@ -13262,29 +13872,27 @@ 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
+    /* "PETSc/petscsys.pxi":61
  *     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);
     __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
-    __pyx_L12_try_end:;
+    __pyx_L10_try_end:;
   }
 
-  /* "PETSc/petscsys.pxi":74
+  /* "PETSc/petscsys.pxi":65
  *     except (TypeError, ValueError):
  *         on = None; oN = size
  *     if on is not None: n = asInt(on)             # <<<<<<<<<<<<<<
@@ -13294,11 +13902,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 == -1L && PyErr_Occurred())) __PYX_ERR(14, 74, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_on); if (unlikely(__pyx_t_3 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(14, 65, __pyx_L1_error)
     __pyx_v_n = __pyx_t_3;
   }
 
-  /* "PETSc/petscsys.pxi":75
+  /* "PETSc/petscsys.pxi":66
  *         on = None; oN = size
  *     if on is not None: n = asInt(on)
  *     if oN is not None: N = asInt(oN)             # <<<<<<<<<<<<<<
@@ -13308,11 +13916,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 == -1L && PyErr_Occurred())) __PYX_ERR(14, 75, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_oN); if (unlikely(__pyx_t_3 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(14, 66, __pyx_L1_error)
     __pyx_v_N = __pyx_t_3;
   }
 
-  /* "PETSc/petscsys.pxi":77
+  /* "PETSc/petscsys.pxi":68
  *     if oN is not None: N = asInt(oN)
  *     # check block, local, and and global sizes
  *     if (bs < 1): raise ValueError(             # <<<<<<<<<<<<<<
@@ -13322,40 +13930,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":78
+    /* "PETSc/petscsys.pxi":69
  *     # 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_ERR(14, 78, __pyx_L1_error)
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_bs); if (unlikely(!__pyx_t_9)) __PYX_ERR(14, 69, __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_ERR(14, 78, __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, 69, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-    /* "PETSc/petscsys.pxi":77
+    /* "PETSc/petscsys.pxi":68
  *     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_ERR(14, 77, __pyx_L1_error)
+    __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(14, 68, __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_ERR(14, 77, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_9, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(14, 68, __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_ERR(14, 77, __pyx_L1_error)
+    __PYX_ERR(14, 68, __pyx_L1_error)
   }
 
-  /* "PETSc/petscsys.pxi":79
+  /* "PETSc/petscsys.pxi":70
  *     if (bs < 1): raise ValueError(
  *         "block size %d must be positive" % toInt(bs))
  *     if n==PETSC_DECIDE and N==PETSC_DECIDE: raise ValueError(             # <<<<<<<<<<<<<<
@@ -13366,20 +13974,20 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
   if (__pyx_t_1) {
   } else {
     __pyx_t_2 = __pyx_t_1;
-    goto __pyx_L21_bool_binop_done;
+    goto __pyx_L19_bool_binop_done;
   }
   __pyx_t_1 = ((__pyx_v_N == PETSC_DECIDE) != 0);
   __pyx_t_2 = __pyx_t_1;
-  __pyx_L21_bool_binop_done:;
+  __pyx_L19_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_ERR(14, 79, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__13, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(14, 70, __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_ERR(14, 79, __pyx_L1_error)
+    __PYX_ERR(14, 70, __pyx_L1_error)
   }
 
-  /* "PETSc/petscsys.pxi":81
+  /* "PETSc/petscsys.pxi":72
  *     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(             # <<<<<<<<<<<<<<
@@ -13390,25 +13998,25 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
   if (__pyx_t_1) {
   } else {
     __pyx_t_2 = __pyx_t_1;
-    goto __pyx_L24_bool_binop_done;
+    goto __pyx_L22_bool_binop_done;
   }
   __pyx_t_1 = ((__pyx_v_n % __pyx_v_bs) != 0);
   __pyx_t_2 = __pyx_t_1;
-  __pyx_L24_bool_binop_done:;
+  __pyx_L22_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "PETSc/petscsys.pxi":83
+    /* "PETSc/petscsys.pxi":74
  *     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_ERR(14, 83, __pyx_L1_error)
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_7)) __PYX_ERR(14, 74, __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_ERR(14, 83, __pyx_L1_error)
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_bs); if (unlikely(!__pyx_t_9)) __PYX_ERR(14, 74, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
-    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(14, 83, __pyx_L1_error)
+    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(14, 74, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_GIVEREF(__pyx_t_7);
     PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_7);
@@ -13417,38 +14025,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":82
+    /* "PETSc/petscsys.pxi":73
  *         "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_ERR(14, 82, __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, 73, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-    /* "PETSc/petscsys.pxi":81
+    /* "PETSc/petscsys.pxi":72
  *     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_ERR(14, 81, __pyx_L1_error)
+    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(14, 72, __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_ERR(14, 81, __pyx_L1_error)
+    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_8, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(14, 72, __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_ERR(14, 81, __pyx_L1_error)
+    __PYX_ERR(14, 72, __pyx_L1_error)
   }
 
-  /* "PETSc/petscsys.pxi":84
+  /* "PETSc/petscsys.pxi":75
  *         "local size %d not divisible by block size %d" %
  *         (toInt(n), toInt(bs)) )
  *     if (N > 0) and (N % bs): raise ValueError(             # <<<<<<<<<<<<<<
@@ -13459,25 +14067,25 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
   if (__pyx_t_1) {
   } else {
     __pyx_t_2 = __pyx_t_1;
-    goto __pyx_L27_bool_binop_done;
+    goto __pyx_L25_bool_binop_done;
   }
   __pyx_t_1 = ((__pyx_v_N % __pyx_v_bs) != 0);
   __pyx_t_2 = __pyx_t_1;
-  __pyx_L27_bool_binop_done:;
+  __pyx_L25_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "PETSc/petscsys.pxi":86
+    /* "PETSc/petscsys.pxi":77
  *     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_ERR(14, 86, __pyx_L1_error)
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_9)) __PYX_ERR(14, 77, __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_ERR(14, 86, __pyx_L1_error)
+    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_bs); if (unlikely(!__pyx_t_8)) __PYX_ERR(14, 77, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(14, 86, __pyx_L1_error)
+    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(14, 77, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_GIVEREF(__pyx_t_9);
     PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_9);
@@ -13486,38 +14094,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":85
+    /* "PETSc/petscsys.pxi":76
  *         (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_ERR(14, 85, __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, 76, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-    /* "PETSc/petscsys.pxi":84
+    /* "PETSc/petscsys.pxi":75
  *         "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_ERR(14, 84, __pyx_L1_error)
+    __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(14, 75, __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_ERR(14, 84, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_7, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(14, 75, __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_ERR(14, 84, __pyx_L1_error)
+    __PYX_ERR(14, 75, __pyx_L1_error)
   }
 
-  /* "PETSc/petscsys.pxi":88
+  /* "PETSc/petscsys.pxi":79
  *         (toInt(N), toInt(bs)) )
  *     # return result to the caller
  *     if _b != NULL: _b[0] = b             # <<<<<<<<<<<<<<
@@ -13529,7 +14137,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
     (__pyx_v__b[0]) = __pyx_v_b;
   }
 
-  /* "PETSc/petscsys.pxi":89
+  /* "PETSc/petscsys.pxi":80
  *     # return result to the caller
  *     if _b != NULL: _b[0] = b
  *     if _n != NULL: _n[0] = n             # <<<<<<<<<<<<<<
@@ -13541,7 +14149,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
     (__pyx_v__n[0]) = __pyx_v_n;
   }
 
-  /* "PETSc/petscsys.pxi":90
+  /* "PETSc/petscsys.pxi":81
  *     if _b != NULL: _b[0] = b
  *     if _n != NULL: _n[0] = n
  *     if _N != NULL: _N[0] = N             # <<<<<<<<<<<<<<
@@ -13553,7 +14161,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
     (__pyx_v__N[0]) = __pyx_v_N;
   }
 
-  /* "PETSc/petscsys.pxi":91
+  /* "PETSc/petscsys.pxi":82
  *     if _n != NULL: _n[0] = n
  *     if _N != NULL: _N[0] = N
  *     return 0             # <<<<<<<<<<<<<<
@@ -13563,7 +14171,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscsys.pxi":57
+  /* "PETSc/petscsys.pxi":48
  * 
  * 
  * cdef inline int Sys_Sizes(             # <<<<<<<<<<<<<<
@@ -13585,7 +14193,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Sizes(PyObject *__pyx_v_si
   return __pyx_r;
 }
 
-/* "PETSc/petscsys.pxi":93
+/* "PETSc/petscsys.pxi":84
  *     return 0
  * 
  * cdef inline int Sys_Layout(             # <<<<<<<<<<<<<<
@@ -13602,7 +14210,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Layout(MPI_Comm __pyx_v_co
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("Sys_Layout", 0);
 
-  /* "PETSc/petscsys.pxi":99
+  /* "PETSc/petscsys.pxi":90
  *     PetscInt *_N,
  *     ) except -1:
  *     cdef PetscInt n = _n[0]             # <<<<<<<<<<<<<<
@@ -13611,7 +14219,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":91
  *     ) except -1:
  *     cdef PetscInt n = _n[0]
  *     cdef PetscInt N = _N[0]             # <<<<<<<<<<<<<<
@@ -13620,7 +14228,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":101
+  /* "PETSc/petscsys.pxi":92
  *     cdef PetscInt n = _n[0]
  *     cdef PetscInt N = _N[0]
  *     if bs < 0: bs = 1             # <<<<<<<<<<<<<<
@@ -13632,7 +14240,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Layout(MPI_Comm __pyx_v_co
     __pyx_v_bs = 1;
   }
 
-  /* "PETSc/petscsys.pxi":102
+  /* "PETSc/petscsys.pxi":93
  *     cdef PetscInt N = _N[0]
  *     if bs < 0: bs = 1
  *     if n  > 0: n = n // bs             # <<<<<<<<<<<<<<
@@ -13644,7 +14252,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Layout(MPI_Comm __pyx_v_co
     __pyx_v_n = (__pyx_v_n / __pyx_v_bs);
   }
 
-  /* "PETSc/petscsys.pxi":103
+  /* "PETSc/petscsys.pxi":94
  *     if bs < 0: bs = 1
  *     if n  > 0: n = n // bs
  *     if N  > 0: N = N // bs             # <<<<<<<<<<<<<<
@@ -13656,16 +14264,16 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Sys_Layout(MPI_Comm __pyx_v_co
     __pyx_v_N = (__pyx_v_N / __pyx_v_bs);
   }
 
-  /* "PETSc/petscsys.pxi":104
+  /* "PETSc/petscsys.pxi":95
  *     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_ERR(14, 104, __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 == ((int)-1))) __PYX_ERR(14, 95, __pyx_L1_error)
 
-  /* "PETSc/petscsys.pxi":105
+  /* "PETSc/petscsys.pxi":96
  *     if N  > 0: N = N // bs
  *     CHKERR( PetscSplitOwnership(comm, &n, &N) )
  *     _n[0] = n * bs             # <<<<<<<<<<<<<<
@@ -13674,7 +14282,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":97
  *     CHKERR( PetscSplitOwnership(comm, &n, &N) )
  *     _n[0] = n * bs
  *     _N[0] = N * bs             # <<<<<<<<<<<<<<
@@ -13682,7 +14290,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":107
+  /* "PETSc/petscsys.pxi":98
  *     _n[0] = n * bs
  *     _N[0] = N * bs
  *     return 0             # <<<<<<<<<<<<<<
@@ -13690,7 +14298,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":93
+  /* "PETSc/petscsys.pxi":84
  *     return 0
  * 
  * cdef inline int Sys_Layout(             # <<<<<<<<<<<<<<
@@ -13747,7 +14355,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_ERR(15, 64, __pyx_L1_error)
+  __pyx_t_1 = PyObject_Length(__pyx_v_args); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(15, 64, __pyx_L1_error)
   __pyx_v_n = __pyx_t_1;
 
   /* "PETSc/petsclog.pxi":65
@@ -13851,7 +14459,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_event_args2objs(PyObject *__py
   return __pyx_r;
 }
 
-/* "PETSc/petscobj.pxi":37
+/* "PETSc/petscobj.pxi":38
  * # --------------------------------------------------------------------
  * 
  * cdef inline int PetscINCREF(PetscObject *obj) nogil:             # <<<<<<<<<<<<<<
@@ -13863,7 +14471,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_PetscINCREF(PetscObject *__pyx
   int __pyx_r;
   int __pyx_t_1;
 
-  /* "PETSc/petscobj.pxi":38
+  /* "PETSc/petscobj.pxi":39
  * 
  * cdef inline int PetscINCREF(PetscObject *obj) nogil:
  *     if obj    == NULL: return 0             # <<<<<<<<<<<<<<
@@ -13876,7 +14484,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_PetscINCREF(PetscObject *__pyx
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscobj.pxi":39
+  /* "PETSc/petscobj.pxi":40
  * cdef inline int PetscINCREF(PetscObject *obj) nogil:
  *     if obj    == NULL: return 0
  *     if obj[0] == NULL: return 0             # <<<<<<<<<<<<<<
@@ -13889,7 +14497,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_PetscINCREF(PetscObject *__pyx
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscobj.pxi":40
+  /* "PETSc/petscobj.pxi":41
  *     if obj    == NULL: return 0
  *     if obj[0] == NULL: return 0
  *     return PetscObjectReference(obj[0])             # <<<<<<<<<<<<<<
@@ -13899,7 +14507,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_PetscINCREF(PetscObject *__pyx
   __pyx_r = PetscObjectReference((__pyx_v_obj[0]));
   goto __pyx_L0;
 
-  /* "PETSc/petscobj.pxi":37
+  /* "PETSc/petscobj.pxi":38
  * # --------------------------------------------------------------------
  * 
  * cdef inline int PetscINCREF(PetscObject *obj) nogil:             # <<<<<<<<<<<<<<
@@ -13912,7 +14520,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_PetscINCREF(PetscObject *__pyx
   return __pyx_r;
 }
 
-/* "PETSc/petscobj.pxi":42
+/* "PETSc/petscobj.pxi":43
  *     return PetscObjectReference(obj[0])
  * 
  * cdef inline int PetscCLEAR(PetscObject* obj) nogil:             # <<<<<<<<<<<<<<
@@ -13925,7 +14533,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_PetscCLEAR(PetscObject *__pyx_
   int __pyx_r;
   int __pyx_t_1;
 
-  /* "PETSc/petscobj.pxi":43
+  /* "PETSc/petscobj.pxi":44
  * 
  * cdef inline int PetscCLEAR(PetscObject* obj) nogil:
  *     if obj    == NULL: return 0             # <<<<<<<<<<<<<<
@@ -13938,7 +14546,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_PetscCLEAR(PetscObject *__pyx_
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscobj.pxi":44
+  /* "PETSc/petscobj.pxi":45
  * cdef inline int PetscCLEAR(PetscObject* obj) nogil:
  *     if obj    == NULL: return 0
  *     if obj[0] == NULL: return 0             # <<<<<<<<<<<<<<
@@ -13951,7 +14559,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_PetscCLEAR(PetscObject *__pyx_
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscobj.pxi":46
+  /* "PETSc/petscobj.pxi":47
  *     if obj[0] == NULL: return 0
  *     cdef PetscObject tmp
  *     tmp = obj[0]; obj[0] = NULL             # <<<<<<<<<<<<<<
@@ -13961,7 +14569,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_PetscCLEAR(PetscObject *__pyx_
   __pyx_v_tmp = (__pyx_v_obj[0]);
   (__pyx_v_obj[0]) = NULL;
 
-  /* "PETSc/petscobj.pxi":47
+  /* "PETSc/petscobj.pxi":48
  *     cdef PetscObject tmp
  *     tmp = obj[0]; obj[0] = NULL
  *     return PetscObjectDestroy(&tmp)             # <<<<<<<<<<<<<<
@@ -13971,7 +14579,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_PetscCLEAR(PetscObject *__pyx_
   __pyx_r = PetscObjectDestroy((&__pyx_v_tmp));
   goto __pyx_L0;
 
-  /* "PETSc/petscobj.pxi":42
+  /* "PETSc/petscobj.pxi":43
  *     return PetscObjectReference(obj[0])
  * 
  * cdef inline int PetscCLEAR(PetscObject* obj) nogil:             # <<<<<<<<<<<<<<
@@ -13984,7 +14592,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_PetscCLEAR(PetscObject *__pyx_
   return __pyx_r;
 }
 
-/* "PETSc/petscobj.pxi":49
+/* "PETSc/petscobj.pxi":50
  *     return PetscObjectDestroy(&tmp)
  * 
  * cdef inline int PetscDEALLOC(PetscObject* obj) nogil:             # <<<<<<<<<<<<<<
@@ -13997,7 +14605,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_PetscDEALLOC(PetscObject *__py
   int __pyx_r;
   int __pyx_t_1;
 
-  /* "PETSc/petscobj.pxi":50
+  /* "PETSc/petscobj.pxi":51
  * 
  * cdef inline int PetscDEALLOC(PetscObject* obj) nogil:
  *     if obj    == NULL: return 0             # <<<<<<<<<<<<<<
@@ -14010,7 +14618,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_PetscDEALLOC(PetscObject *__py
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscobj.pxi":51
+  /* "PETSc/petscobj.pxi":52
  * cdef inline int PetscDEALLOC(PetscObject* obj) nogil:
  *     if obj    == NULL: return 0
  *     if obj[0] == NULL: return 0             # <<<<<<<<<<<<<<
@@ -14023,7 +14631,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_PetscDEALLOC(PetscObject *__py
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscobj.pxi":53
+  /* "PETSc/petscobj.pxi":54
  *     if obj[0] == NULL: return 0
  *     cdef PetscObject tmp
  *     tmp = obj[0]; obj[0] = NULL             # <<<<<<<<<<<<<<
@@ -14033,7 +14641,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_PetscDEALLOC(PetscObject *__py
   __pyx_v_tmp = (__pyx_v_obj[0]);
   (__pyx_v_obj[0]) = NULL;
 
-  /* "PETSc/petscobj.pxi":54
+  /* "PETSc/petscobj.pxi":55
  *     cdef PetscObject tmp
  *     tmp = obj[0]; obj[0] = NULL
  *     if not (<int>PetscInitializeCalled): return 0             # <<<<<<<<<<<<<<
@@ -14046,7 +14654,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_PetscDEALLOC(PetscObject *__py
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscobj.pxi":55
+  /* "PETSc/petscobj.pxi":56
  *     tmp = obj[0]; obj[0] = NULL
  *     if not (<int>PetscInitializeCalled): return 0
  *     if     (<int>PetscFinalizeCalled):   return 0             # <<<<<<<<<<<<<<
@@ -14059,7 +14667,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_PetscDEALLOC(PetscObject *__py
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscobj.pxi":56
+  /* "PETSc/petscobj.pxi":57
  *     if not (<int>PetscInitializeCalled): return 0
  *     if     (<int>PetscFinalizeCalled):   return 0
  *     return PetscObjectDestroy(&tmp)             # <<<<<<<<<<<<<<
@@ -14069,7 +14677,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_PetscDEALLOC(PetscObject *__py
   __pyx_r = PetscObjectDestroy((&__pyx_v_tmp));
   goto __pyx_L0;
 
-  /* "PETSc/petscobj.pxi":49
+  /* "PETSc/petscobj.pxi":50
  *     return PetscObjectDestroy(&tmp)
  * 
  * cdef inline int PetscDEALLOC(PetscObject* obj) nogil:             # <<<<<<<<<<<<<<
@@ -14082,7 +14690,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_PetscDEALLOC(PetscObject *__py
   return __pyx_r;
 }
 
-/* "PETSc/petscobj.pxi":58
+/* "PETSc/petscobj.pxi":59
  *     return PetscObjectDestroy(&tmp)
  * 
  * cdef inline int PetscINCSTATE(PetscObject *obj) nogil:             # <<<<<<<<<<<<<<
@@ -14094,7 +14702,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_PetscINCSTATE(PetscObject *__p
   int __pyx_r;
   int __pyx_t_1;
 
-  /* "PETSc/petscobj.pxi":59
+  /* "PETSc/petscobj.pxi":60
  * 
  * cdef inline int PetscINCSTATE(PetscObject *obj) nogil:
  *     if obj    == NULL: return 0             # <<<<<<<<<<<<<<
@@ -14107,7 +14715,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_PetscINCSTATE(PetscObject *__p
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscobj.pxi":60
+  /* "PETSc/petscobj.pxi":61
  * cdef inline int PetscINCSTATE(PetscObject *obj) nogil:
  *     if obj    == NULL: return 0
  *     if obj[0] == NULL: return 0             # <<<<<<<<<<<<<<
@@ -14120,7 +14728,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_PetscINCSTATE(PetscObject *__p
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscobj.pxi":61
+  /* "PETSc/petscobj.pxi":62
  *     if obj    == NULL: return 0
  *     if obj[0] == NULL: return 0
  *     return PetscObjectStateIncrease(obj[0])             # <<<<<<<<<<<<<<
@@ -14130,7 +14738,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_PetscINCSTATE(PetscObject *__p
   __pyx_r = PetscObjectStateIncrease((__pyx_v_obj[0]));
   goto __pyx_L0;
 
-  /* "PETSc/petscobj.pxi":58
+  /* "PETSc/petscobj.pxi":59
  *     return PetscObjectDestroy(&tmp)
  * 
  * cdef inline int PetscINCSTATE(PetscObject *obj) nogil:             # <<<<<<<<<<<<<<
@@ -14143,7 +14751,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_PetscINCSTATE(PetscObject *__p
   return __pyx_r;
 }
 
-/* "PETSc/petscobj.pxi":78
+/* "PETSc/petscobj.pxi":79
  *         int (*python_destroy)(void*)
  * 
  * cdef inline void Py_DecRef(PyObject *ob) with gil:             # <<<<<<<<<<<<<<
@@ -14154,11 +14762,11 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_PetscINCSTATE(PetscObject *__p
 static CYTHON_INLINE void __pyx_f_8petsc4py_5PETSc_Py_DecRef(PyObject *__pyx_v_ob) {
   __Pyx_RefNannyDeclarations
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("Py_DecRef", 0);
 
-  /* "PETSc/petscobj.pxi":79
+  /* "PETSc/petscobj.pxi":80
  * 
  * cdef inline void Py_DecRef(PyObject *ob) with gil:
  *     _Py_DecRef(ob)             # <<<<<<<<<<<<<<
@@ -14167,7 +14775,7 @@ static CYTHON_INLINE void __pyx_f_8petsc4py_5PETSc_Py_DecRef(PyObject *__pyx_v_o
  */
   Py_DECREF(__pyx_v_ob);
 
-  /* "PETSc/petscobj.pxi":78
+  /* "PETSc/petscobj.pxi":79
  *         int (*python_destroy)(void*)
  * 
  * cdef inline void Py_DecRef(PyObject *ob) with gil:             # <<<<<<<<<<<<<<
@@ -14178,11 +14786,11 @@ static CYTHON_INLINE void __pyx_f_8petsc4py_5PETSc_Py_DecRef(PyObject *__pyx_v_o
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
 }
 
-/* "PETSc/petscobj.pxi":81
+/* "PETSc/petscobj.pxi":82
  *     _Py_DecRef(ob)
  * 
  * cdef int PetscDelPyDict(void* ptr) nogil:             # <<<<<<<<<<<<<<
@@ -14195,7 +14803,7 @@ static int __pyx_f_8petsc4py_5PETSc_PetscDelPyDict(void *__pyx_v_ptr) {
   int __pyx_t_1;
   int __pyx_t_2;
 
-  /* "PETSc/petscobj.pxi":82
+  /* "PETSc/petscobj.pxi":83
  * 
  * cdef int PetscDelPyDict(void* ptr) nogil:
  *     if ptr != NULL and Py_IsInitialized():             # <<<<<<<<<<<<<<
@@ -14213,7 +14821,7 @@ static int __pyx_f_8petsc4py_5PETSc_PetscDelPyDict(void *__pyx_v_ptr) {
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "PETSc/petscobj.pxi":83
+    /* "PETSc/petscobj.pxi":84
  * cdef int PetscDelPyDict(void* ptr) nogil:
  *     if ptr != NULL and Py_IsInitialized():
  *         Py_DecRef(<PyObject*>ptr)             # <<<<<<<<<<<<<<
@@ -14222,7 +14830,7 @@ static int __pyx_f_8petsc4py_5PETSc_PetscDelPyDict(void *__pyx_v_ptr) {
  */
     __pyx_f_8petsc4py_5PETSc_Py_DecRef(((PyObject *)__pyx_v_ptr));
 
-    /* "PETSc/petscobj.pxi":82
+    /* "PETSc/petscobj.pxi":83
  * 
  * cdef int PetscDelPyDict(void* ptr) nogil:
  *     if ptr != NULL and Py_IsInitialized():             # <<<<<<<<<<<<<<
@@ -14231,7 +14839,7 @@ static int __pyx_f_8petsc4py_5PETSc_PetscDelPyDict(void *__pyx_v_ptr) {
  */
   }
 
-  /* "PETSc/petscobj.pxi":84
+  /* "PETSc/petscobj.pxi":85
  *     if ptr != NULL and Py_IsInitialized():
  *         Py_DecRef(<PyObject*>ptr)
  *     return 0             # <<<<<<<<<<<<<<
@@ -14241,7 +14849,7 @@ static int __pyx_f_8petsc4py_5PETSc_PetscDelPyDict(void *__pyx_v_ptr) {
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscobj.pxi":81
+  /* "PETSc/petscobj.pxi":82
  *     _Py_DecRef(ob)
  * 
  * cdef int PetscDelPyDict(void* ptr) nogil:             # <<<<<<<<<<<<<<
@@ -14254,7 +14862,7 @@ static int __pyx_f_8petsc4py_5PETSc_PetscDelPyDict(void *__pyx_v_ptr) {
   return __pyx_r;
 }
 
-/* "PETSc/petscobj.pxi":86
+/* "PETSc/petscobj.pxi":87
  *     return 0
  * 
  * cdef object PetscGetPyDict(PetscObject obj, bint create):             # <<<<<<<<<<<<<<
@@ -14269,7 +14877,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscGetPyDict(PetscObject __pyx_v_obj
   PyObject *__pyx_t_2;
   __Pyx_RefNannySetupContext("PetscGetPyDict", 0);
 
-  /* "PETSc/petscobj.pxi":87
+  /* "PETSc/petscobj.pxi":88
  * 
  * cdef object PetscGetPyDict(PetscObject obj, bint create):
  *     if obj.python_context != NULL:             # <<<<<<<<<<<<<<
@@ -14279,7 +14887,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscGetPyDict(PetscObject __pyx_v_obj
   __pyx_t_1 = ((__pyx_v_obj->python_context != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscobj.pxi":88
+    /* "PETSc/petscobj.pxi":89
  * cdef object PetscGetPyDict(PetscObject obj, bint create):
  *     if obj.python_context != NULL:
  *         return <object>obj.python_context             # <<<<<<<<<<<<<<
@@ -14291,7 +14899,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscGetPyDict(PetscObject __pyx_v_obj
     __pyx_r = ((PyObject *)__pyx_v_obj->python_context);
     goto __pyx_L0;
 
-    /* "PETSc/petscobj.pxi":87
+    /* "PETSc/petscobj.pxi":88
  * 
  * cdef object PetscGetPyDict(PetscObject obj, bint create):
  *     if obj.python_context != NULL:             # <<<<<<<<<<<<<<
@@ -14300,7 +14908,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscGetPyDict(PetscObject __pyx_v_obj
  */
   }
 
-  /* "PETSc/petscobj.pxi":89
+  /* "PETSc/petscobj.pxi":90
  *     if obj.python_context != NULL:
  *         return <object>obj.python_context
  *     if create:             # <<<<<<<<<<<<<<
@@ -14310,7 +14918,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscGetPyDict(PetscObject __pyx_v_obj
   __pyx_t_1 = (__pyx_v_create != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscobj.pxi":90
+    /* "PETSc/petscobj.pxi":91
  *         return <object>obj.python_context
  *     if create:
  *         obj.python_destroy = PetscDelPyDict             # <<<<<<<<<<<<<<
@@ -14319,17 +14927,17 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscGetPyDict(PetscObject __pyx_v_obj
  */
     __pyx_v_obj->python_destroy = __pyx_f_8petsc4py_5PETSc_PetscDelPyDict;
 
-    /* "PETSc/petscobj.pxi":91
+    /* "PETSc/petscobj.pxi":92
  *     if create:
  *         obj.python_destroy = PetscDelPyDict
  *         obj.python_context = <void*>PyDict_New()             # <<<<<<<<<<<<<<
  *         return <object>obj.python_context
  *     return None
  */
-    __pyx_t_2 = PyDict_New(); if (unlikely(__pyx_t_2 == NULL)) __PYX_ERR(16, 91, __pyx_L1_error)
+    __pyx_t_2 = PyDict_New(); if (unlikely(__pyx_t_2 == ((PyObject *)NULL))) __PYX_ERR(16, 92, __pyx_L1_error)
     __pyx_v_obj->python_context = ((void *)__pyx_t_2);
 
-    /* "PETSc/petscobj.pxi":92
+    /* "PETSc/petscobj.pxi":93
  *         obj.python_destroy = PetscDelPyDict
  *         obj.python_context = <void*>PyDict_New()
  *         return <object>obj.python_context             # <<<<<<<<<<<<<<
@@ -14341,7 +14949,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscGetPyDict(PetscObject __pyx_v_obj
     __pyx_r = ((PyObject *)__pyx_v_obj->python_context);
     goto __pyx_L0;
 
-    /* "PETSc/petscobj.pxi":89
+    /* "PETSc/petscobj.pxi":90
  *     if obj.python_context != NULL:
  *         return <object>obj.python_context
  *     if create:             # <<<<<<<<<<<<<<
@@ -14350,7 +14958,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscGetPyDict(PetscObject __pyx_v_obj
  */
   }
 
-  /* "PETSc/petscobj.pxi":93
+  /* "PETSc/petscobj.pxi":94
  *         obj.python_context = <void*>PyDict_New()
  *         return <object>obj.python_context
  *     return None             # <<<<<<<<<<<<<<
@@ -14362,7 +14970,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscGetPyDict(PetscObject __pyx_v_obj
   __pyx_r = Py_None;
   goto __pyx_L0;
 
-  /* "PETSc/petscobj.pxi":86
+  /* "PETSc/petscobj.pxi":87
  *     return 0
  * 
  * cdef object PetscGetPyDict(PetscObject obj, bint create):             # <<<<<<<<<<<<<<
@@ -14380,7 +14988,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscGetPyDict(PetscObject __pyx_v_obj
   return __pyx_r;
 }
 
-/* "PETSc/petscobj.pxi":95
+/* "PETSc/petscobj.pxi":96
  *     return None
  * 
  * cdef object PetscGetPyObj(PetscObject o, char name[]):             # <<<<<<<<<<<<<<
@@ -14402,19 +15010,19 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscGetPyObj(PetscObject __pyx_v_o, c
   PyObject *__pyx_t_4;
   __Pyx_RefNannySetupContext("PetscGetPyObj", 0);
 
-  /* "PETSc/petscobj.pxi":96
+  /* "PETSc/petscobj.pxi":97
  * 
  * cdef object PetscGetPyObj(PetscObject o, char name[]):
  *     cdef object dct = PetscGetPyDict(o, False)             # <<<<<<<<<<<<<<
  *     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_ERR(16, 96, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_PetscGetPyDict(__pyx_v_o, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(16, 97, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_dct = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscobj.pxi":97
+  /* "PETSc/petscobj.pxi":98
  * cdef object PetscGetPyObj(PetscObject o, char name[]):
  *     cdef object dct = PetscGetPyDict(o, False)
  *     if dct is None: return None             # <<<<<<<<<<<<<<
@@ -14430,19 +15038,19 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscGetPyObj(PetscObject __pyx_v_o, c
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscobj.pxi":98
+  /* "PETSc/petscobj.pxi":99
  *     cdef object dct = PetscGetPyDict(o, False)
  *     if dct is None: return None
  *     cdef object key = bytes2str(name)             # <<<<<<<<<<<<<<
  *     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_ERR(16, 98, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_name); if (unlikely(!__pyx_t_1)) __PYX_ERR(16, 99, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_key = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscobj.pxi":99
+  /* "PETSc/petscobj.pxi":100
  *     if dct is None: return None
  *     cdef object key = bytes2str(name)
  *     cdef PyObject *d = <PyObject*>dct             # <<<<<<<<<<<<<<
@@ -14451,7 +15059,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscGetPyObj(PetscObject __pyx_v_o, c
  */
   __pyx_v_d = ((PyObject *)__pyx_v_dct);
 
-  /* "PETSc/petscobj.pxi":100
+  /* "PETSc/petscobj.pxi":101
  *     cdef object key = bytes2str(name)
  *     cdef PyObject *d = <PyObject*>dct
  *     cdef PyObject *k = <PyObject*>key             # <<<<<<<<<<<<<<
@@ -14460,7 +15068,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscGetPyObj(PetscObject __pyx_v_o, c
  */
   __pyx_v_k = ((PyObject *)__pyx_v_key);
 
-  /* "PETSc/petscobj.pxi":101
+  /* "PETSc/petscobj.pxi":102
  *     cdef PyObject *d = <PyObject*>dct
  *     cdef PyObject *k = <PyObject*>key
  *     cdef PyObject *v = NULL             # <<<<<<<<<<<<<<
@@ -14469,17 +15077,17 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscGetPyObj(PetscObject __pyx_v_o, c
  */
   __pyx_v_v = NULL;
 
-  /* "PETSc/petscobj.pxi":102
+  /* "PETSc/petscobj.pxi":103
  *     cdef PyObject *k = <PyObject*>key
  *     cdef PyObject *v = NULL
  *     v = PyDict_GetItem(d, k)             # <<<<<<<<<<<<<<
  *     if v != NULL: return <object>v
  *     return None
  */
-  __pyx_t_4 = PyDict_GetItem(__pyx_v_d, __pyx_v_k); if (unlikely(PyErr_Occurred())) __PYX_ERR(16, 102, __pyx_L1_error)
+  __pyx_t_4 = PyDict_GetItem(__pyx_v_d, __pyx_v_k); if (unlikely(PyErr_Occurred())) __PYX_ERR(16, 103, __pyx_L1_error)
   __pyx_v_v = __pyx_t_4;
 
-  /* "PETSc/petscobj.pxi":103
+  /* "PETSc/petscobj.pxi":104
  *     cdef PyObject *v = NULL
  *     v = PyDict_GetItem(d, k)
  *     if v != NULL: return <object>v             # <<<<<<<<<<<<<<
@@ -14494,7 +15102,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscGetPyObj(PetscObject __pyx_v_o, c
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscobj.pxi":104
+  /* "PETSc/petscobj.pxi":105
  *     v = PyDict_GetItem(d, k)
  *     if v != NULL: return <object>v
  *     return None             # <<<<<<<<<<<<<<
@@ -14506,7 +15114,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscGetPyObj(PetscObject __pyx_v_o, c
   __pyx_r = Py_None;
   goto __pyx_L0;
 
-  /* "PETSc/petscobj.pxi":95
+  /* "PETSc/petscobj.pxi":96
  *     return None
  * 
  * cdef object PetscGetPyObj(PetscObject o, char name[]):             # <<<<<<<<<<<<<<
@@ -14527,7 +15135,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscGetPyObj(PetscObject __pyx_v_o, c
   return __pyx_r;
 }
 
-/* "PETSc/petscobj.pxi":106
+/* "PETSc/petscobj.pxi":107
  *     return None
  * 
  * cdef object PetscSetPyObj(PetscObject o, char name[], object p):             # <<<<<<<<<<<<<<
@@ -14549,7 +15157,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscSetPyObj(PetscObject __pyx_v_o, c
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("PetscSetPyObj", 0);
 
-  /* "PETSc/petscobj.pxi":108
+  /* "PETSc/petscobj.pxi":109
  * cdef object PetscSetPyObj(PetscObject o, char name[], object p):
  *     cdef object dct
  *     if p is not None:             # <<<<<<<<<<<<<<
@@ -14560,19 +15168,19 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscSetPyObj(PetscObject __pyx_v_o, c
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscobj.pxi":109
+    /* "PETSc/petscobj.pxi":110
  *     cdef object dct
  *     if p is not None:
  *         dct = PetscGetPyDict(o, True)             # <<<<<<<<<<<<<<
  *     else:
  *         dct = PetscGetPyDict(o, False)
  */
-    __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_t_3 = __pyx_f_8petsc4py_5PETSc_PetscGetPyDict(__pyx_v_o, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 110, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_dct = __pyx_t_3;
     __pyx_t_3 = 0;
 
-    /* "PETSc/petscobj.pxi":108
+    /* "PETSc/petscobj.pxi":109
  * cdef object PetscSetPyObj(PetscObject o, char name[], object p):
  *     cdef object dct
  *     if p is not None:             # <<<<<<<<<<<<<<
@@ -14582,7 +15190,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscSetPyObj(PetscObject __pyx_v_o, c
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscobj.pxi":111
+  /* "PETSc/petscobj.pxi":112
  *         dct = PetscGetPyDict(o, True)
  *     else:
  *         dct = PetscGetPyDict(o, False)             # <<<<<<<<<<<<<<
@@ -14590,12 +15198,12 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscSetPyObj(PetscObject __pyx_v_o, c
  *     cdef str key = bytes2str(name)
  */
   /*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_t_3 = __pyx_f_8petsc4py_5PETSc_PetscGetPyDict(__pyx_v_o, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 112, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_dct = __pyx_t_3;
     __pyx_t_3 = 0;
 
-    /* "PETSc/petscobj.pxi":112
+    /* "PETSc/petscobj.pxi":113
  *     else:
  *         dct = PetscGetPyDict(o, False)
  *         if dct is None: return None             # <<<<<<<<<<<<<<
@@ -14613,20 +15221,20 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscSetPyObj(PetscObject __pyx_v_o, c
   }
   __pyx_L3:;
 
-  /* "PETSc/petscobj.pxi":113
+  /* "PETSc/petscobj.pxi":114
  *         dct = PetscGetPyDict(o, False)
  *         if dct is None: return None
  *     cdef str key = bytes2str(name)             # <<<<<<<<<<<<<<
  *     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_ERR(16, 113, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_name); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 114, __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_ERR(16, 113, __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, 114, __pyx_L1_error)
   __pyx_v_key = ((PyObject*)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscobj.pxi":114
+  /* "PETSc/petscobj.pxi":115
  *         if dct is None: return None
  *     cdef str key = bytes2str(name)
  *     cdef PyObject *d = <PyObject*>dct             # <<<<<<<<<<<<<<
@@ -14635,7 +15243,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscSetPyObj(PetscObject __pyx_v_o, c
  */
   __pyx_v_d = ((PyObject *)__pyx_v_dct);
 
-  /* "PETSc/petscobj.pxi":115
+  /* "PETSc/petscobj.pxi":116
  *     cdef str key = bytes2str(name)
  *     cdef PyObject *d = <PyObject*>dct
  *     cdef PyObject *k = <PyObject*>key             # <<<<<<<<<<<<<<
@@ -14644,7 +15252,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscSetPyObj(PetscObject __pyx_v_o, c
  */
   __pyx_v_k = ((PyObject *)__pyx_v_key);
 
-  /* "PETSc/petscobj.pxi":116
+  /* "PETSc/petscobj.pxi":117
  *     cdef PyObject *d = <PyObject*>dct
  *     cdef PyObject *k = <PyObject*>key
  *     cdef PyObject *v = <PyObject*>p             # <<<<<<<<<<<<<<
@@ -14653,16 +15261,16 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscSetPyObj(PetscObject __pyx_v_o, c
  */
   __pyx_v_v = ((PyObject *)__pyx_v_p);
 
-  /* "PETSc/petscobj.pxi":117
+  /* "PETSc/petscobj.pxi":118
  *     cdef PyObject *k = <PyObject*>key
  *     cdef PyObject *v = <PyObject*>p
  *     PyDict_SetItem(d, k, v)             # <<<<<<<<<<<<<<
  *     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_ERR(16, 117, __pyx_L1_error)
+  __pyx_t_4 = PyDict_SetItem(__pyx_v_d, __pyx_v_k, __pyx_v_v); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(16, 118, __pyx_L1_error)
 
-  /* "PETSc/petscobj.pxi":118
+  /* "PETSc/petscobj.pxi":119
  *     cdef PyObject *v = <PyObject*>p
  *     PyDict_SetItem(d, k, v)
  *     if v == <PyObject*>None:             # <<<<<<<<<<<<<<
@@ -14672,16 +15280,16 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscSetPyObj(PetscObject __pyx_v_o, c
   __pyx_t_1 = ((__pyx_v_v == ((PyObject *)Py_None)) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscobj.pxi":119
+    /* "PETSc/petscobj.pxi":120
  *     PyDict_SetItem(d, k, v)
  *     if v == <PyObject*>None:
  *         PyDict_DelItem(d, k)             # <<<<<<<<<<<<<<
  *     return None
  * 
  */
-    __pyx_t_4 = PyDict_DelItem(__pyx_v_d, __pyx_v_k); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(16, 119, __pyx_L1_error)
+    __pyx_t_4 = PyDict_DelItem(__pyx_v_d, __pyx_v_k); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(16, 120, __pyx_L1_error)
 
-    /* "PETSc/petscobj.pxi":118
+    /* "PETSc/petscobj.pxi":119
  *     cdef PyObject *v = <PyObject*>p
  *     PyDict_SetItem(d, k, v)
  *     if v == <PyObject*>None:             # <<<<<<<<<<<<<<
@@ -14690,7 +15298,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscSetPyObj(PetscObject __pyx_v_o, c
  */
   }
 
-  /* "PETSc/petscobj.pxi":120
+  /* "PETSc/petscobj.pxi":121
  *     if v == <PyObject*>None:
  *         PyDict_DelItem(d, k)
  *     return None             # <<<<<<<<<<<<<<
@@ -14702,7 +15310,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscSetPyObj(PetscObject __pyx_v_o, c
   __pyx_r = Py_None;
   goto __pyx_L0;
 
-  /* "PETSc/petscobj.pxi":106
+  /* "PETSc/petscobj.pxi":107
  *     return None
  * 
  * cdef object PetscSetPyObj(PetscObject o, char name[], object p):             # <<<<<<<<<<<<<<
@@ -14723,32 +15331,32 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PetscSetPyObj(PetscObject __pyx_v_o, c
   return __pyx_r;
 }
 
-/* "PETSc/petscobj.pxi":127
+/* "PETSc/petscobj.pxi":129
  *     object PyLong_FromVoidPtr(void*)
  * 
- * cdef inline long Object_toFortran(PetscObject o) nogil:             # <<<<<<<<<<<<<<
- *     return <long> o
+ * cdef inline Py_intptr_t Object_toFortran(PetscObject o) nogil:             # <<<<<<<<<<<<<<
+ *     return <Py_intptr_t> o
  * 
  */
 
-static CYTHON_INLINE long __pyx_f_8petsc4py_5PETSc_Object_toFortran(PetscObject __pyx_v_o) {
-  long __pyx_r;
+static CYTHON_INLINE Py_intptr_t __pyx_f_8petsc4py_5PETSc_Object_toFortran(PetscObject __pyx_v_o) {
+  Py_intptr_t __pyx_r;
 
-  /* "PETSc/petscobj.pxi":128
+  /* "PETSc/petscobj.pxi":130
  * 
- * cdef inline long Object_toFortran(PetscObject o) nogil:
- *     return <long> o             # <<<<<<<<<<<<<<
+ * cdef inline Py_intptr_t Object_toFortran(PetscObject o) nogil:
+ *     return <Py_intptr_t> o             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-  __pyx_r = ((long)__pyx_v_o);
+  __pyx_r = ((Py_intptr_t)__pyx_v_o);
   goto __pyx_L0;
 
-  /* "PETSc/petscobj.pxi":127
+  /* "PETSc/petscobj.pxi":129
  *     object PyLong_FromVoidPtr(void*)
  * 
- * cdef inline long Object_toFortran(PetscObject o) nogil:             # <<<<<<<<<<<<<<
- *     return <long> o
+ * cdef inline Py_intptr_t Object_toFortran(PetscObject o) nogil:             # <<<<<<<<<<<<<<
+ *     return <Py_intptr_t> o
  * 
  */
 
@@ -14757,7 +15365,7 @@ static CYTHON_INLINE long __pyx_f_8petsc4py_5PETSc_Object_toFortran(PetscObject
   return __pyx_r;
 }
 
-/* "PETSc/petscobj.pxi":132
+/* "PETSc/petscobj.pxi":134
  * # --------------------------------------------------------------------
  * 
  * cdef inline type subtype_DM(PetscDM dm):             # <<<<<<<<<<<<<<
@@ -14774,7 +15382,7 @@ static CYTHON_INLINE PyTypeObject *__pyx_f_8petsc4py_5PETSc_subtype_DM(DM __pyx_
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("subtype_DM", 0);
 
-  /* "PETSc/petscobj.pxi":133
+  /* "PETSc/petscobj.pxi":135
  * 
  * cdef inline type subtype_DM(PetscDM dm):
  *     cdef PetscObject obj = <PetscObject> dm             # <<<<<<<<<<<<<<
@@ -14783,7 +15391,7 @@ static CYTHON_INLINE PyTypeObject *__pyx_f_8petsc4py_5PETSc_subtype_DM(DM __pyx_
  */
   __pyx_v_obj = ((PetscObject)__pyx_v_dm);
 
-  /* "PETSc/petscobj.pxi":134
+  /* "PETSc/petscobj.pxi":136
  * cdef inline type subtype_DM(PetscDM dm):
  *     cdef PetscObject obj = <PetscObject> dm
  *     if obj == NULL: return DM             # <<<<<<<<<<<<<<
@@ -14798,7 +15406,7 @@ static CYTHON_INLINE PyTypeObject *__pyx_f_8petsc4py_5PETSc_subtype_DM(DM __pyx_
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscobj.pxi":136
+  /* "PETSc/petscobj.pxi":138
  *     if obj == NULL: return DM
  *     # ---
  *     cdef PetscBool match = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -14807,16 +15415,16 @@ static CYTHON_INLINE PyTypeObject *__pyx_f_8petsc4py_5PETSc_subtype_DM(DM __pyx_
  */
   __pyx_v_match = PETSC_FALSE;
 
-  /* "PETSc/petscobj.pxi":137
+  /* "PETSc/petscobj.pxi":139
  *     # ---
  *     cdef PetscBool match = PETSC_FALSE
  *     CHKERR( PetscObjectTypeCompare(obj, b"da", &match) )             # <<<<<<<<<<<<<<
  *     if match == PETSC_TRUE: return DMDA
  *     CHKERR( PetscObjectTypeCompare(obj, b"plex", &match) )
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectTypeCompare(__pyx_v_obj, ((char *)"da"), (&__pyx_v_match))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(16, 139, __pyx_L1_error)
 
-  /* "PETSc/petscobj.pxi":138
+  /* "PETSc/petscobj.pxi":140
  *     cdef PetscBool match = PETSC_FALSE
  *     CHKERR( PetscObjectTypeCompare(obj, b"da", &match) )
  *     if match == PETSC_TRUE: return DMDA             # <<<<<<<<<<<<<<
@@ -14831,16 +15439,16 @@ static CYTHON_INLINE PyTypeObject *__pyx_f_8petsc4py_5PETSc_subtype_DM(DM __pyx_
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscobj.pxi":139
+  /* "PETSc/petscobj.pxi":141
  *     CHKERR( PetscObjectTypeCompare(obj, b"da", &match) )
  *     if match == PETSC_TRUE: return DMDA
  *     CHKERR( PetscObjectTypeCompare(obj, b"plex", &match) )             # <<<<<<<<<<<<<<
  *     if match == PETSC_TRUE: return DMPlex
  *     CHKERR( PetscObjectTypeCompare(obj, b"composite", &match) )
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectTypeCompare(__pyx_v_obj, ((char *)"plex"), (&__pyx_v_match))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(16, 141, __pyx_L1_error)
 
-  /* "PETSc/petscobj.pxi":140
+  /* "PETSc/petscobj.pxi":142
  *     if match == PETSC_TRUE: return DMDA
  *     CHKERR( PetscObjectTypeCompare(obj, b"plex", &match) )
  *     if match == PETSC_TRUE: return DMPlex             # <<<<<<<<<<<<<<
@@ -14855,16 +15463,16 @@ static CYTHON_INLINE PyTypeObject *__pyx_f_8petsc4py_5PETSc_subtype_DM(DM __pyx_
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscobj.pxi":141
+  /* "PETSc/petscobj.pxi":143
  *     CHKERR( PetscObjectTypeCompare(obj, b"plex", &match) )
  *     if match == PETSC_TRUE: return DMPlex
  *     CHKERR( PetscObjectTypeCompare(obj, b"composite", &match) )             # <<<<<<<<<<<<<<
  *     if match == PETSC_TRUE: return DMComposite
  *     CHKERR( PetscObjectTypeCompare(obj, b"shell", &match) )
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectTypeCompare(__pyx_v_obj, ((char *)"composite"), (&__pyx_v_match))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(16, 143, __pyx_L1_error)
 
-  /* "PETSc/petscobj.pxi":142
+  /* "PETSc/petscobj.pxi":144
  *     if match == PETSC_TRUE: return DMPlex
  *     CHKERR( PetscObjectTypeCompare(obj, b"composite", &match) )
  *     if match == PETSC_TRUE: return DMComposite             # <<<<<<<<<<<<<<
@@ -14879,16 +15487,16 @@ static CYTHON_INLINE PyTypeObject *__pyx_f_8petsc4py_5PETSc_subtype_DM(DM __pyx_
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscobj.pxi":143
+  /* "PETSc/petscobj.pxi":145
  *     CHKERR( PetscObjectTypeCompare(obj, b"composite", &match) )
  *     if match == PETSC_TRUE: return DMComposite
  *     CHKERR( PetscObjectTypeCompare(obj, b"shell", &match) )             # <<<<<<<<<<<<<<
  *     if match == PETSC_TRUE: return DMShell
  *     # ---
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectTypeCompare(__pyx_v_obj, ((char *)"shell"), (&__pyx_v_match))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(16, 145, __pyx_L1_error)
 
-  /* "PETSc/petscobj.pxi":144
+  /* "PETSc/petscobj.pxi":146
  *     if match == PETSC_TRUE: return DMComposite
  *     CHKERR( PetscObjectTypeCompare(obj, b"shell", &match) )
  *     if match == PETSC_TRUE: return DMShell             # <<<<<<<<<<<<<<
@@ -14903,7 +15511,7 @@ static CYTHON_INLINE PyTypeObject *__pyx_f_8petsc4py_5PETSc_subtype_DM(DM __pyx_
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscobj.pxi":146
+  /* "PETSc/petscobj.pxi":148
  *     if match == PETSC_TRUE: return DMShell
  *     # ---
  *     return DM             # <<<<<<<<<<<<<<
@@ -14915,7 +15523,7 @@ static CYTHON_INLINE PyTypeObject *__pyx_f_8petsc4py_5PETSc_subtype_DM(DM __pyx_
   __pyx_r = __pyx_ptype_8petsc4py_5PETSc_DM;
   goto __pyx_L0;
 
-  /* "PETSc/petscobj.pxi":132
+  /* "PETSc/petscobj.pxi":134
  * # --------------------------------------------------------------------
  * 
  * cdef inline type subtype_DM(PetscDM dm):             # <<<<<<<<<<<<<<
@@ -14933,7 +15541,7 @@ static CYTHON_INLINE PyTypeObject *__pyx_f_8petsc4py_5PETSc_subtype_DM(DM __pyx_
   return __pyx_r;
 }
 
-/* "PETSc/petscobj.pxi":148
+/* "PETSc/petscobj.pxi":150
  *     return DM
  * 
  * cdef inline type subtype_Object(PetscObject obj):             # <<<<<<<<<<<<<<
@@ -14951,7 +15559,7 @@ static CYTHON_INLINE PyTypeObject *__pyx_f_8petsc4py_5PETSc_subtype_Object(Petsc
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("subtype_Object", 0);
 
-  /* "PETSc/petscobj.pxi":149
+  /* "PETSc/petscobj.pxi":151
  * 
  * cdef inline type subtype_Object(PetscObject obj):
  *     cdef type klass = Object             # <<<<<<<<<<<<<<
@@ -14961,7 +15569,7 @@ static CYTHON_INLINE PyTypeObject *__pyx_f_8petsc4py_5PETSc_subtype_Object(Petsc
   __Pyx_INCREF(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Object));
   __pyx_v_klass = __pyx_ptype_8petsc4py_5PETSc_Object;
 
-  /* "PETSc/petscobj.pxi":150
+  /* "PETSc/petscobj.pxi":152
  * cdef inline type subtype_Object(PetscObject obj):
  *     cdef type klass = Object
  *     if obj == NULL: return klass             # <<<<<<<<<<<<<<
@@ -14976,7 +15584,7 @@ static CYTHON_INLINE PyTypeObject *__pyx_f_8petsc4py_5PETSc_subtype_Object(Petsc
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscobj.pxi":151
+  /* "PETSc/petscobj.pxi":153
  *     cdef type klass = Object
  *     if obj == NULL: return klass
  *     cdef PetscClassId classid = 0             # <<<<<<<<<<<<<<
@@ -14985,16 +15593,16 @@ static CYTHON_INLINE PyTypeObject *__pyx_f_8petsc4py_5PETSc_subtype_Object(Petsc
  */
   __pyx_v_classid = 0;
 
-  /* "PETSc/petscobj.pxi":152
+  /* "PETSc/petscobj.pxi":154
  *     if obj == NULL: return klass
  *     cdef PetscClassId classid = 0
  *     CHKERR( PetscObjectGetClassId(obj,&classid) )             # <<<<<<<<<<<<<<
  *     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_ERR(16, 152, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetClassId(__pyx_v_obj, (&__pyx_v_classid))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(16, 154, __pyx_L1_error)
 
-  /* "PETSc/petscobj.pxi":153
+  /* "PETSc/petscobj.pxi":155
  *     cdef PetscClassId classid = 0
  *     CHKERR( PetscObjectGetClassId(obj,&classid) )
  *     if classid == PETSC_DM_CLASSID:             # <<<<<<<<<<<<<<
@@ -15004,19 +15612,19 @@ static CYTHON_INLINE PyTypeObject *__pyx_f_8petsc4py_5PETSc_subtype_Object(Petsc
   __pyx_t_1 = ((__pyx_v_classid == DM_CLASSID) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscobj.pxi":154
+    /* "PETSc/petscobj.pxi":156
  *     CHKERR( PetscObjectGetClassId(obj,&classid) )
  *     if classid == PETSC_DM_CLASSID:
  *         klass = subtype_DM(<PetscDM>obj)             # <<<<<<<<<<<<<<
  *     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_ERR(16, 154, __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, 156, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_klass, ((PyTypeObject*)__pyx_t_3));
     __pyx_t_3 = 0;
 
-    /* "PETSc/petscobj.pxi":153
+    /* "PETSc/petscobj.pxi":155
  *     cdef PetscClassId classid = 0
  *     CHKERR( PetscObjectGetClassId(obj,&classid) )
  *     if classid == PETSC_DM_CLASSID:             # <<<<<<<<<<<<<<
@@ -15026,7 +15634,7 @@ static CYTHON_INLINE PyTypeObject *__pyx_f_8petsc4py_5PETSc_subtype_Object(Petsc
     goto __pyx_L4;
   }
 
-  /* "PETSc/petscobj.pxi":156
+  /* "PETSc/petscobj.pxi":158
  *         klass = subtype_DM(<PetscDM>obj)
  *     else:
  *         klass = PyPetscType_Lookup(classid)             # <<<<<<<<<<<<<<
@@ -15034,14 +15642,14 @@ static CYTHON_INLINE PyTypeObject *__pyx_f_8petsc4py_5PETSc_subtype_Object(Petsc
  * 
  */
   /*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_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup(__pyx_v_classid)); if (unlikely(!__pyx_t_3)) __PYX_ERR(16, 158, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_klass, ((PyTypeObject*)__pyx_t_3));
     __pyx_t_3 = 0;
   }
   __pyx_L4:;
 
-  /* "PETSc/petscobj.pxi":157
+  /* "PETSc/petscobj.pxi":159
  *     else:
  *         klass = PyPetscType_Lookup(classid)
  *     return klass             # <<<<<<<<<<<<<<
@@ -15053,7 +15661,7 @@ static CYTHON_INLINE PyTypeObject *__pyx_f_8petsc4py_5PETSc_subtype_Object(Petsc
   __pyx_r = __pyx_v_klass;
   goto __pyx_L0;
 
-  /* "PETSc/petscobj.pxi":148
+  /* "PETSc/petscobj.pxi":150
  *     return DM
  * 
  * cdef inline type subtype_Object(PetscObject obj):             # <<<<<<<<<<<<<<
@@ -15073,7 +15681,7 @@ static CYTHON_INLINE PyTypeObject *__pyx_f_8petsc4py_5PETSc_subtype_Object(Petsc
   return __pyx_r;
 }
 
-/* "PETSc/petscvwr.pxi":119
+/* "PETSc/petscvwr.pxi":130
  * # ---
  * 
  * cdef inline PetscFileMode filemode(object mode) except <PetscFileMode>(-1):             # <<<<<<<<<<<<<<
@@ -15089,7 +15697,7 @@ static CYTHON_INLINE PetscFileMode __pyx_f_8petsc4py_5PETSc_filemode(PyObject *_
   PetscFileMode __pyx_t_3;
   __Pyx_RefNannySetupContext("filemode", 0);
 
-  /* "PETSc/petscvwr.pxi":120
+  /* "PETSc/petscvwr.pxi":131
  * 
  * cdef inline PetscFileMode filemode(object mode) except <PetscFileMode>(-1):
  *     if mode is None:             # <<<<<<<<<<<<<<
@@ -15100,7 +15708,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":121
+    /* "PETSc/petscvwr.pxi":132
  * cdef inline PetscFileMode filemode(object mode) except <PetscFileMode>(-1):
  *     if mode is None:
  *         return PETSC_FILE_MODE_READ             # <<<<<<<<<<<<<<
@@ -15110,7 +15718,7 @@ static CYTHON_INLINE PetscFileMode __pyx_f_8petsc4py_5PETSc_filemode(PyObject *_
     __pyx_r = FILE_MODE_READ;
     goto __pyx_L0;
 
-    /* "PETSc/petscvwr.pxi":120
+    /* "PETSc/petscvwr.pxi":131
  * 
  * cdef inline PetscFileMode filemode(object mode) except <PetscFileMode>(-1):
  *     if mode is None:             # <<<<<<<<<<<<<<
@@ -15119,7 +15727,7 @@ static CYTHON_INLINE PetscFileMode __pyx_f_8petsc4py_5PETSc_filemode(PyObject *_
  */
   }
 
-  /* "PETSc/petscvwr.pxi":122
+  /* "PETSc/petscvwr.pxi":133
  *     if mode is None:
  *         return PETSC_FILE_MODE_READ
  *     if isinstance(mode, str):             # <<<<<<<<<<<<<<
@@ -15130,123 +15738,123 @@ static CYTHON_INLINE PetscFileMode __pyx_f_8petsc4py_5PETSc_filemode(PyObject *_
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscvwr.pxi":123
+    /* "PETSc/petscvwr.pxi":134
  *         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_ERR(17, 123, __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, 134, __pyx_L1_error)
     if (__pyx_t_1) {
       __pyx_r = FILE_MODE_READ;
       goto __pyx_L0;
     }
 
-    /* "PETSc/petscvwr.pxi":124
+    /* "PETSc/petscvwr.pxi":135
  *     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_ERR(17, 124, __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, 135, __pyx_L1_error)
     if (__pyx_t_1) {
       __pyx_r = FILE_MODE_WRITE;
       goto __pyx_L0;
     }
 
-    /* "PETSc/petscvwr.pxi":125
+    /* "PETSc/petscvwr.pxi":136
  *         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_ERR(17, 125, __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, 136, __pyx_L1_error)
     if (__pyx_t_1) {
       __pyx_r = FILE_MODE_APPEND;
       goto __pyx_L0;
     }
 
-    /* "PETSc/petscvwr.pxi":126
+    /* "PETSc/petscvwr.pxi":137
  *         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_ERR(17, 126, __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, 137, __pyx_L1_error)
     if (__pyx_t_1) {
       __pyx_r = FILE_MODE_UPDATE;
       goto __pyx_L0;
     }
 
-    /* "PETSc/petscvwr.pxi":127
+    /* "PETSc/petscvwr.pxi":138
  *         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_ERR(17, 127, __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, 138, __pyx_L1_error)
     if (__pyx_t_1) {
       __pyx_r = FILE_MODE_UPDATE;
       goto __pyx_L0;
     }
 
-    /* "PETSc/petscvwr.pxi":128
+    /* "PETSc/petscvwr.pxi":139
  *         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_ERR(17, 128, __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, 139, __pyx_L1_error)
     if (__pyx_t_1) {
       __pyx_r = FILE_MODE_APPEND_UPDATE;
       goto __pyx_L0;
     }
 
-    /* "PETSc/petscvwr.pxi":129
+    /* "PETSc/petscvwr.pxi":140
  *         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_ERR(17, 129, __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, 140, __pyx_L1_error)
     if (__pyx_t_1) {
       __pyx_r = FILE_MODE_UPDATE;
       goto __pyx_L0;
     }
 
-    /* "PETSc/petscvwr.pxi":130
+    /* "PETSc/petscvwr.pxi":141
  *         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_ERR(17, 130, __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, 141, __pyx_L1_error)
     if (__pyx_t_1) {
       __pyx_r = FILE_MODE_APPEND_UPDATE;
       goto __pyx_L0;
     }
 
-    /* "PETSc/petscvwr.pxi":131
+    /* "PETSc/petscvwr.pxi":142
  *         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_ERR(17, 131, __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, 142, __pyx_L1_error)
     if (__pyx_t_1) {
       __pyx_r = FILE_MODE_APPEND_UPDATE;
       goto __pyx_L0;
     }
 
-    /* "PETSc/petscvwr.pxi":122
+    /* "PETSc/petscvwr.pxi":133
  *     if mode is None:
  *         return PETSC_FILE_MODE_READ
  *     if isinstance(mode, str):             # <<<<<<<<<<<<<<
@@ -15255,16 +15863,16 @@ static CYTHON_INLINE PetscFileMode __pyx_f_8petsc4py_5PETSc_filemode(PyObject *_
  */
   }
 
-  /* "PETSc/petscvwr.pxi":132
+  /* "PETSc/petscvwr.pxi":143
  *         elif mode == 'au' : return PETSC_FILE_MODE_APPEND_UPDATE
  *         elif mode == 'ua' : return PETSC_FILE_MODE_APPEND_UPDATE
  *     return mode             # <<<<<<<<<<<<<<
  */
-  __pyx_t_3 = ((PetscFileMode)__Pyx_PyInt_As_PetscFileMode(__pyx_v_mode)); if (unlikely(PyErr_Occurred())) __PYX_ERR(17, 132, __pyx_L1_error)
+  __pyx_t_3 = ((PetscFileMode)__Pyx_PyInt_As_PetscFileMode(__pyx_v_mode)); if (unlikely(PyErr_Occurred())) __PYX_ERR(17, 143, __pyx_L1_error)
   __pyx_r = __pyx_t_3;
   goto __pyx_L0;
 
-  /* "PETSc/petscvwr.pxi":119
+  /* "PETSc/petscvwr.pxi":130
  * # ---
  * 
  * cdef inline PetscFileMode filemode(object mode) except <PetscFileMode>(-1):             # <<<<<<<<<<<<<<
@@ -15281,7 +15889,7 @@ static CYTHON_INLINE PetscFileMode __pyx_f_8petsc4py_5PETSc_filemode(PyObject *_
   return __pyx_r;
 }
 
-/* "PETSc/petscis.pxi":91
+/* "PETSc/petscis.pxi":97
  * # --------------------------------------------------------------------
  * 
  * cdef inline IS ref_IS(PetscIS iset):             # <<<<<<<<<<<<<<
@@ -15297,14 +15905,14 @@ static CYTHON_INLINE struct PyPetscISObject *__pyx_f_8petsc4py_5PETSc_ref_IS(IS
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("ref_IS", 0);
 
-  /* "PETSc/petscis.pxi":92
+  /* "PETSc/petscis.pxi":98
  * 
  * cdef inline IS ref_IS(PetscIS iset):
  *     cdef IS ob = <IS> IS()             # <<<<<<<<<<<<<<
  *     ob.iset = iset
  *     PetscINCREF(ob.obj)
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __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);
@@ -15312,7 +15920,7 @@ static CYTHON_INLINE struct PyPetscISObject *__pyx_f_8petsc4py_5PETSc_ref_IS(IS
   __pyx_v_ob = ((struct PyPetscISObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscis.pxi":93
+  /* "PETSc/petscis.pxi":99
  * cdef inline IS ref_IS(PetscIS iset):
  *     cdef IS ob = <IS> IS()
  *     ob.iset = iset             # <<<<<<<<<<<<<<
@@ -15321,7 +15929,7 @@ static CYTHON_INLINE struct PyPetscISObject *__pyx_f_8petsc4py_5PETSc_ref_IS(IS
  */
   __pyx_v_ob->iset = __pyx_v_iset;
 
-  /* "PETSc/petscis.pxi":94
+  /* "PETSc/petscis.pxi":100
  *     cdef IS ob = <IS> IS()
  *     ob.iset = iset
  *     PetscINCREF(ob.obj)             # <<<<<<<<<<<<<<
@@ -15330,7 +15938,7 @@ static CYTHON_INLINE struct PyPetscISObject *__pyx_f_8petsc4py_5PETSc_ref_IS(IS
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_ob->__pyx_base.obj);
 
-  /* "PETSc/petscis.pxi":95
+  /* "PETSc/petscis.pxi":101
  *     ob.iset = iset
  *     PetscINCREF(ob.obj)
  *     return ob             # <<<<<<<<<<<<<<
@@ -15342,7 +15950,7 @@ static CYTHON_INLINE struct PyPetscISObject *__pyx_f_8petsc4py_5PETSc_ref_IS(IS
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "PETSc/petscis.pxi":91
+  /* "PETSc/petscis.pxi":97
  * # --------------------------------------------------------------------
  * 
  * cdef inline IS ref_IS(PetscIS iset):             # <<<<<<<<<<<<<<
@@ -15363,7 +15971,7 @@ static CYTHON_INLINE struct PyPetscISObject *__pyx_f_8petsc4py_5PETSc_ref_IS(IS
   return __pyx_r;
 }
 
-/* "PETSc/petscis.pxi":97
+/* "PETSc/petscis.pxi":103
  *     return ob
  * 
  * cdef inline LGMap ref_LGMap(PetscLGMap lgm):             # <<<<<<<<<<<<<<
@@ -15379,14 +15987,14 @@ static CYTHON_INLINE struct PyPetscLGMapObject *__pyx_f_8petsc4py_5PETSc_ref_LGM
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("ref_LGMap", 0);
 
-  /* "PETSc/petscis.pxi":98
+  /* "PETSc/petscis.pxi":104
  * 
  * cdef inline LGMap ref_LGMap(PetscLGMap lgm):
  *     cdef LGMap ob = <LGMap> LGMap()             # <<<<<<<<<<<<<<
  *     ob.lgm = lgm
  *     PetscINCREF(ob.obj)
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_LGMap), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(4, 104, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -15394,7 +16002,7 @@ static CYTHON_INLINE struct PyPetscLGMapObject *__pyx_f_8petsc4py_5PETSc_ref_LGM
   __pyx_v_ob = ((struct PyPetscLGMapObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscis.pxi":99
+  /* "PETSc/petscis.pxi":105
  * cdef inline LGMap ref_LGMap(PetscLGMap lgm):
  *     cdef LGMap ob = <LGMap> LGMap()
  *     ob.lgm = lgm             # <<<<<<<<<<<<<<
@@ -15403,7 +16011,7 @@ static CYTHON_INLINE struct PyPetscLGMapObject *__pyx_f_8petsc4py_5PETSc_ref_LGM
  */
   __pyx_v_ob->lgm = __pyx_v_lgm;
 
-  /* "PETSc/petscis.pxi":100
+  /* "PETSc/petscis.pxi":106
  *     cdef LGMap ob = <LGMap> LGMap()
  *     ob.lgm = lgm
  *     PetscINCREF(ob.obj)             # <<<<<<<<<<<<<<
@@ -15412,7 +16020,7 @@ static CYTHON_INLINE struct PyPetscLGMapObject *__pyx_f_8petsc4py_5PETSc_ref_LGM
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_ob->__pyx_base.obj);
 
-  /* "PETSc/petscis.pxi":101
+  /* "PETSc/petscis.pxi":107
  *     ob.lgm = lgm
  *     PetscINCREF(ob.obj)
  *     return ob             # <<<<<<<<<<<<<<
@@ -15424,7 +16032,7 @@ static CYTHON_INLINE struct PyPetscLGMapObject *__pyx_f_8petsc4py_5PETSc_ref_LGM
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "PETSc/petscis.pxi":97
+  /* "PETSc/petscis.pxi":103
  *     return ob
  * 
  * cdef inline LGMap ref_LGMap(PetscLGMap lgm):             # <<<<<<<<<<<<<<
@@ -15445,10 +16053,10 @@ static CYTHON_INLINE struct PyPetscLGMapObject *__pyx_f_8petsc4py_5PETSc_ref_LGM
   return __pyx_r;
 }
 
-/* "PETSc/petscis.pxi":120
+/* "PETSc/petscis.pxi":126
  *     cdef bint hasarray
  * 
- *     def __cinit__(self, IS iset not None):             # <<<<<<<<<<<<<<
+ *     def __cinit__(self, IS iset):             # <<<<<<<<<<<<<<
  *         cdef PetscIS i = iset.iset
  *         CHKERR( PetscINCREF(<PetscObject*>&i) )
  */
@@ -15468,6 +16076,7 @@ static int __pyx_pw_8petsc4py_5PETSc_10_IS_buffer_1__cinit__(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -15478,7 +16087,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_ERR(4, 120, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(4, 126, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -15489,13 +16098,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_ERR(4, 120, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__cinit__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(4, 126, __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_ERR(4, 120, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iset), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iset", 0))) __PYX_ERR(4, 126, __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 */
@@ -15515,9 +16124,9 @@ static int __pyx_pf_8petsc4py_5PETSc_10_IS_buffer___cinit__(struct __pyx_obj_8pe
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "PETSc/petscis.pxi":121
+  /* "PETSc/petscis.pxi":127
  * 
- *     def __cinit__(self, IS iset not None):
+ *     def __cinit__(self, IS iset):
  *         cdef PetscIS i = iset.iset             # <<<<<<<<<<<<<<
  *         CHKERR( PetscINCREF(<PetscObject*>&i) )
  *         self.iset = i
@@ -15525,16 +16134,16 @@ static int __pyx_pf_8petsc4py_5PETSc_10_IS_buffer___cinit__(struct __pyx_obj_8pe
   __pyx_t_1 = __pyx_v_iset->iset;
   __pyx_v_i = __pyx_t_1;
 
-  /* "PETSc/petscis.pxi":122
- *     def __cinit__(self, IS iset not None):
+  /* "PETSc/petscis.pxi":128
+ *     def __cinit__(self, IS iset):
  *         cdef PetscIS i = iset.iset
  *         CHKERR( PetscINCREF(<PetscObject*>&i) )             # <<<<<<<<<<<<<<
  *         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_ERR(4, 122, __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 == ((int)-1))) __PYX_ERR(4, 128, __pyx_L1_error)
 
-  /* "PETSc/petscis.pxi":123
+  /* "PETSc/petscis.pxi":129
  *         cdef PetscIS i = iset.iset
  *         CHKERR( PetscINCREF(<PetscObject*>&i) )
  *         self.iset = i             # <<<<<<<<<<<<<<
@@ -15543,7 +16152,7 @@ static int __pyx_pf_8petsc4py_5PETSc_10_IS_buffer___cinit__(struct __pyx_obj_8pe
  */
   __pyx_v_self->iset = __pyx_v_i;
 
-  /* "PETSc/petscis.pxi":124
+  /* "PETSc/petscis.pxi":130
  *         CHKERR( PetscINCREF(<PetscObject*>&i) )
  *         self.iset = i
  *         self.size = 0             # <<<<<<<<<<<<<<
@@ -15552,7 +16161,7 @@ static int __pyx_pf_8petsc4py_5PETSc_10_IS_buffer___cinit__(struct __pyx_obj_8pe
  */
   __pyx_v_self->size = 0;
 
-  /* "PETSc/petscis.pxi":125
+  /* "PETSc/petscis.pxi":131
  *         self.iset = i
  *         self.size = 0
  *         self.data = NULL             # <<<<<<<<<<<<<<
@@ -15561,7 +16170,7 @@ static int __pyx_pf_8petsc4py_5PETSc_10_IS_buffer___cinit__(struct __pyx_obj_8pe
  */
   __pyx_v_self->data = NULL;
 
-  /* "PETSc/petscis.pxi":126
+  /* "PETSc/petscis.pxi":132
  *         self.size = 0
  *         self.data = NULL
  *         self.hasarray = 0             # <<<<<<<<<<<<<<
@@ -15570,10 +16179,10 @@ static int __pyx_pf_8petsc4py_5PETSc_10_IS_buffer___cinit__(struct __pyx_obj_8pe
  */
   __pyx_v_self->hasarray = 0;
 
-  /* "PETSc/petscis.pxi":120
+  /* "PETSc/petscis.pxi":126
  *     cdef bint hasarray
  * 
- *     def __cinit__(self, IS iset not None):             # <<<<<<<<<<<<<<
+ *     def __cinit__(self, IS iset):             # <<<<<<<<<<<<<<
  *         cdef PetscIS i = iset.iset
  *         CHKERR( PetscINCREF(<PetscObject*>&i) )
  */
@@ -15589,7 +16198,7 @@ static int __pyx_pf_8petsc4py_5PETSc_10_IS_buffer___cinit__(struct __pyx_obj_8pe
   return __pyx_r;
 }
 
-/* "PETSc/petscis.pxi":128
+/* "PETSc/petscis.pxi":134
  *         self.hasarray = 0
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -15615,7 +16224,7 @@ static void __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_2__dealloc__(struct __pyx_obj
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("__dealloc__", 0);
 
-  /* "PETSc/petscis.pxi":129
+  /* "PETSc/petscis.pxi":135
  * 
  *     def __dealloc__(self):
  *         if self.hasarray and self.iset != NULL:             # <<<<<<<<<<<<<<
@@ -15633,16 +16242,16 @@ static void __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_2__dealloc__(struct __pyx_obj
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "PETSc/petscis.pxi":130
+    /* "PETSc/petscis.pxi":136
  *     def __dealloc__(self):
  *         if self.hasarray and self.iset != NULL:
  *             CHKERR( ISRestoreIndices(self.iset, &self.data) )             # <<<<<<<<<<<<<<
  *         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_ERR(4, 130, __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 == ((int)-1))) __PYX_ERR(4, 136, __pyx_L1_error)
 
-    /* "PETSc/petscis.pxi":129
+    /* "PETSc/petscis.pxi":135
  * 
  *     def __dealloc__(self):
  *         if self.hasarray and self.iset != NULL:             # <<<<<<<<<<<<<<
@@ -15651,16 +16260,16 @@ static void __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_2__dealloc__(struct __pyx_obj
  */
   }
 
-  /* "PETSc/petscis.pxi":131
+  /* "PETSc/petscis.pxi":137
  *         if self.hasarray and self.iset != NULL:
  *             CHKERR( ISRestoreIndices(self.iset, &self.data) )
  *         CHKERR( ISDestroy(&self.iset) )             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __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)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISDestroy((&__pyx_v_self->iset))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(4, 137, __pyx_L1_error)
 
-  /* "PETSc/petscis.pxi":128
+  /* "PETSc/petscis.pxi":134
  *         self.hasarray = 0
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -15671,12 +16280,12 @@ static void __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_2__dealloc__(struct __pyx_obj
   /* function exit code */
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_WriteUnraisable("petsc4py.PETSc._IS_buffer.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 0, 0);
+  __Pyx_WriteUnraisable("petsc4py.PETSc._IS_buffer.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
 }
 
-/* "PETSc/petscis.pxi":135
+/* "PETSc/petscis.pxi":141
  *     #
  * 
  *     cdef int acquire(self) except -1:             # <<<<<<<<<<<<<<
@@ -15692,7 +16301,7 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_acquire(struct __pyx_obj_8petsc
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("acquire", 0);
 
-  /* "PETSc/petscis.pxi":136
+  /* "PETSc/petscis.pxi":142
  * 
  *     cdef int acquire(self) except -1:
  *         if not self.hasarray and self.iset != NULL:             # <<<<<<<<<<<<<<
@@ -15710,25 +16319,25 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_acquire(struct __pyx_obj_8petsc
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "PETSc/petscis.pxi":137
+    /* "PETSc/petscis.pxi":143
  *     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) )
  *             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_ERR(4, 137, __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 == ((int)-1))) __PYX_ERR(4, 143, __pyx_L1_error)
 
-    /* "PETSc/petscis.pxi":138
+    /* "PETSc/petscis.pxi":144
  *         if not self.hasarray and self.iset != NULL:
  *             CHKERR( ISGetLocalSize(self.iset, &self.size) )
  *             CHKERR( ISGetIndices(self.iset, &self.data) )             # <<<<<<<<<<<<<<
  *             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_ERR(4, 138, __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 == ((int)-1))) __PYX_ERR(4, 144, __pyx_L1_error)
 
-    /* "PETSc/petscis.pxi":139
+    /* "PETSc/petscis.pxi":145
  *             CHKERR( ISGetLocalSize(self.iset, &self.size) )
  *             CHKERR( ISGetIndices(self.iset, &self.data) )
  *             self.hasarray = 1             # <<<<<<<<<<<<<<
@@ -15737,7 +16346,7 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_acquire(struct __pyx_obj_8petsc
  */
     __pyx_v_self->hasarray = 1;
 
-    /* "PETSc/petscis.pxi":136
+    /* "PETSc/petscis.pxi":142
  * 
  *     cdef int acquire(self) except -1:
  *         if not self.hasarray and self.iset != NULL:             # <<<<<<<<<<<<<<
@@ -15746,7 +16355,7 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_acquire(struct __pyx_obj_8petsc
  */
   }
 
-  /* "PETSc/petscis.pxi":140
+  /* "PETSc/petscis.pxi":146
  *             CHKERR( ISGetIndices(self.iset, &self.data) )
  *             self.hasarray = 1
  *         return 0             # <<<<<<<<<<<<<<
@@ -15756,7 +16365,7 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_acquire(struct __pyx_obj_8petsc
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscis.pxi":135
+  /* "PETSc/petscis.pxi":141
  *     #
  * 
  *     cdef int acquire(self) except -1:             # <<<<<<<<<<<<<<
@@ -15773,7 +16382,7 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_acquire(struct __pyx_obj_8petsc
   return __pyx_r;
 }
 
-/* "PETSc/petscis.pxi":142
+/* "PETSc/petscis.pxi":148
  *         return 0
  * 
  *     cdef int release(self) except -1:             # <<<<<<<<<<<<<<
@@ -15789,7 +16398,7 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_release(struct __pyx_obj_8petsc
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("release", 0);
 
-  /* "PETSc/petscis.pxi":143
+  /* "PETSc/petscis.pxi":149
  * 
  *     cdef int release(self) except -1:
  *         if self.hasarray and self.iset != NULL:             # <<<<<<<<<<<<<<
@@ -15807,7 +16416,7 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_release(struct __pyx_obj_8petsc
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_1) {
 
-    /* "PETSc/petscis.pxi":144
+    /* "PETSc/petscis.pxi":150
  *     cdef int release(self) except -1:
  *         if self.hasarray and self.iset != NULL:
  *             self.size = 0             # <<<<<<<<<<<<<<
@@ -15816,16 +16425,16 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_release(struct __pyx_obj_8petsc
  */
     __pyx_v_self->size = 0;
 
-    /* "PETSc/petscis.pxi":145
+    /* "PETSc/petscis.pxi":151
  *         if self.hasarray and self.iset != NULL:
  *             self.size = 0
  *             CHKERR( ISRestoreIndices(self.iset, &self.data) )             # <<<<<<<<<<<<<<
  *             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_ERR(4, 145, __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 == ((int)-1))) __PYX_ERR(4, 151, __pyx_L1_error)
 
-    /* "PETSc/petscis.pxi":146
+    /* "PETSc/petscis.pxi":152
  *             self.size = 0
  *             CHKERR( ISRestoreIndices(self.iset, &self.data) )
  *             self.hasarray = 0             # <<<<<<<<<<<<<<
@@ -15834,7 +16443,7 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_release(struct __pyx_obj_8petsc
  */
     __pyx_v_self->hasarray = 0;
 
-    /* "PETSc/petscis.pxi":147
+    /* "PETSc/petscis.pxi":153
  *             CHKERR( ISRestoreIndices(self.iset, &self.data) )
  *             self.hasarray = 0
  *             self.data = NULL             # <<<<<<<<<<<<<<
@@ -15843,7 +16452,7 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_release(struct __pyx_obj_8petsc
  */
     __pyx_v_self->data = NULL;
 
-    /* "PETSc/petscis.pxi":143
+    /* "PETSc/petscis.pxi":149
  * 
  *     cdef int release(self) except -1:
  *         if self.hasarray and self.iset != NULL:             # <<<<<<<<<<<<<<
@@ -15852,7 +16461,7 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_release(struct __pyx_obj_8petsc
  */
   }
 
-  /* "PETSc/petscis.pxi":148
+  /* "PETSc/petscis.pxi":154
  *             self.hasarray = 0
  *             self.data = NULL
  *         return 0             # <<<<<<<<<<<<<<
@@ -15862,7 +16471,7 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_release(struct __pyx_obj_8petsc
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscis.pxi":142
+  /* "PETSc/petscis.pxi":148
  *         return 0
  * 
  *     cdef int release(self) except -1:             # <<<<<<<<<<<<<<
@@ -15879,7 +16488,7 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_release(struct __pyx_obj_8petsc
   return __pyx_r;
 }
 
-/* "PETSc/petscis.pxi":152
+/* "PETSc/petscis.pxi":158
  *     # buffer interface (PEP 3118)
  * 
  *     cdef int acquirebuffer(self, Py_buffer *view, int flags) except -1:             # <<<<<<<<<<<<<<
@@ -15893,25 +16502,25 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_acquirebuffer(struct __pyx_obj_
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("acquirebuffer", 0);
 
-  /* "PETSc/petscis.pxi":153
+  /* "PETSc/petscis.pxi":159
  * 
  *     cdef int acquirebuffer(self, Py_buffer *view, int flags) except -1:
  *         self.acquire()             # <<<<<<<<<<<<<<
  *         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_ERR(4, 153, __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 == ((int)-1))) __PYX_ERR(4, 159, __pyx_L1_error)
 
-  /* "PETSc/petscis.pxi":154
+  /* "PETSc/petscis.pxi":160
  *     cdef int acquirebuffer(self, Py_buffer *view, int flags) except -1:
  *         self.acquire()
  *         PyPetscBuffer_FillInfo(view, <void*>self.data, self.size,             # <<<<<<<<<<<<<<
  *                                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_ERR(4, 154, __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 == ((int)-1))) __PYX_ERR(4, 160, __pyx_L1_error)
 
-  /* "PETSc/petscis.pxi":156
+  /* "PETSc/petscis.pxi":162
  *         PyPetscBuffer_FillInfo(view, <void*>self.data, self.size,
  *                                c'i', 1, flags)
  *         view.obj = self             # <<<<<<<<<<<<<<
@@ -15924,7 +16533,7 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_acquirebuffer(struct __pyx_obj_
   __Pyx_DECREF(__pyx_v_view->obj);
   __pyx_v_view->obj = ((PyObject *)__pyx_v_self);
 
-  /* "PETSc/petscis.pxi":157
+  /* "PETSc/petscis.pxi":163
  *                                c'i', 1, flags)
  *         view.obj = self
  *         return 0             # <<<<<<<<<<<<<<
@@ -15934,7 +16543,7 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_acquirebuffer(struct __pyx_obj_
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscis.pxi":152
+  /* "PETSc/petscis.pxi":158
  *     # buffer interface (PEP 3118)
  * 
  *     cdef int acquirebuffer(self, Py_buffer *view, int flags) except -1:             # <<<<<<<<<<<<<<
@@ -15951,7 +16560,7 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_acquirebuffer(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "PETSc/petscis.pxi":159
+/* "PETSc/petscis.pxi":165
  *         return 0
  * 
  *     cdef int releasebuffer(self, Py_buffer *view) except -1:             # <<<<<<<<<<<<<<
@@ -15965,7 +16574,7 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_releasebuffer(struct __pyx_obj_
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("releasebuffer", 0);
 
-  /* "PETSc/petscis.pxi":160
+  /* "PETSc/petscis.pxi":166
  * 
  *     cdef int releasebuffer(self, Py_buffer *view) except -1:
  *         PyPetscBuffer_Release(view)             # <<<<<<<<<<<<<<
@@ -15974,16 +16583,16 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_releasebuffer(struct __pyx_obj_
  */
   PyPetscBuffer_Release(__pyx_v_view);
 
-  /* "PETSc/petscis.pxi":161
+  /* "PETSc/petscis.pxi":167
  *     cdef int releasebuffer(self, Py_buffer *view) except -1:
  *         PyPetscBuffer_Release(view)
  *         self.release()             # <<<<<<<<<<<<<<
  *         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_ERR(4, 161, __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 == ((int)-1))) __PYX_ERR(4, 167, __pyx_L1_error)
 
-  /* "PETSc/petscis.pxi":162
+  /* "PETSc/petscis.pxi":168
  *         PyPetscBuffer_Release(view)
  *         self.release()
  *         return 0             # <<<<<<<<<<<<<<
@@ -15993,7 +16602,7 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_releasebuffer(struct __pyx_obj_
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscis.pxi":159
+  /* "PETSc/petscis.pxi":165
  *         return 0
  * 
  *     cdef int releasebuffer(self, Py_buffer *view) except -1:             # <<<<<<<<<<<<<<
@@ -16010,7 +16619,7 @@ static int __pyx_f_8petsc4py_5PETSc_10_IS_buffer_releasebuffer(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "PETSc/petscis.pxi":164
+/* "PETSc/petscis.pxi":170
  *         return 0
  * 
  *     def __getbuffer__(self, Py_buffer *view, int flags):             # <<<<<<<<<<<<<<
@@ -16041,16 +16650,16 @@ static int __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_4__getbuffer__(struct __pyx_ob
     __Pyx_GIVEREF(__pyx_v_view->obj);
   }
 
-  /* "PETSc/petscis.pxi":165
+  /* "PETSc/petscis.pxi":171
  * 
  *     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__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)
+  __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 == ((int)-1))) __PYX_ERR(4, 171, __pyx_L1_error)
 
-  /* "PETSc/petscis.pxi":164
+  /* "PETSc/petscis.pxi":170
  *         return 0
  * 
  *     def __getbuffer__(self, Py_buffer *view, int flags):             # <<<<<<<<<<<<<<
@@ -16079,7 +16688,7 @@ static int __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_4__getbuffer__(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "PETSc/petscis.pxi":167
+/* "PETSc/petscis.pxi":173
  *         self.acquirebuffer(view, flags)
  * 
  *     def __releasebuffer__(self, Py_buffer *view):             # <<<<<<<<<<<<<<
@@ -16103,16 +16712,16 @@ static void __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_6__releasebuffer__(struct __p
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("__releasebuffer__", 0);
 
-  /* "PETSc/petscis.pxi":168
+  /* "PETSc/petscis.pxi":174
  * 
  *     def __releasebuffer__(self, Py_buffer *view):
  *         self.releasebuffer(view)             # <<<<<<<<<<<<<<
  * 
  *     # '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_ERR(4, 168, __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 == ((int)-1))) __PYX_ERR(4, 174, __pyx_L1_error)
 
-  /* "PETSc/petscis.pxi":167
+  /* "PETSc/petscis.pxi":173
  *         self.acquirebuffer(view, flags)
  * 
  *     def __releasebuffer__(self, Py_buffer *view):             # <<<<<<<<<<<<<<
@@ -16123,12 +16732,12 @@ static void __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_6__releasebuffer__(struct __p
   /* function exit code */
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_WriteUnraisable("petsc4py.PETSc._IS_buffer.__releasebuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename, 0, 0);
+  __Pyx_WriteUnraisable("petsc4py.PETSc._IS_buffer.__releasebuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
 }
 
-/* "PETSc/petscis.pxi":172
+/* "PETSc/petscis.pxi":178
  *     # 'with' statement (PEP 343)
  * 
  *     cdef object enter(self):             # <<<<<<<<<<<<<<
@@ -16143,16 +16752,16 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_10_IS_buffer_enter(struct __pyx_obj_8p
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("enter", 0);
 
-  /* "PETSc/petscis.pxi":173
+  /* "PETSc/petscis.pxi":179
  * 
  *     cdef object enter(self):
  *         self.acquire()             # <<<<<<<<<<<<<<
  *         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_ERR(4, 173, __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 == ((int)-1))) __PYX_ERR(4, 179, __pyx_L1_error)
 
-  /* "PETSc/petscis.pxi":174
+  /* "PETSc/petscis.pxi":180
  *     cdef object enter(self):
  *         self.acquire()
  *         return asarray(self)             # <<<<<<<<<<<<<<
@@ -16160,13 +16769,13 @@ 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_ERR(4, 174, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_asarray(((PyObject *)__pyx_v_self))); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 180, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscis.pxi":172
+  /* "PETSc/petscis.pxi":178
  *     # 'with' statement (PEP 343)
  * 
  *     cdef object enter(self):             # <<<<<<<<<<<<<<
@@ -16185,7 +16794,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_10_IS_buffer_enter(struct __pyx_obj_8p
   return __pyx_r;
 }
 
-/* "PETSc/petscis.pxi":176
+/* "PETSc/petscis.pxi":182
  *         return asarray(self)
  * 
  *     cdef object exit(self):             # <<<<<<<<<<<<<<
@@ -16199,16 +16808,16 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_10_IS_buffer_exit(struct __pyx_obj_8pe
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("exit", 0);
 
-  /* "PETSc/petscis.pxi":177
+  /* "PETSc/petscis.pxi":183
  * 
  *     cdef object exit(self):
  *         self.release()             # <<<<<<<<<<<<<<
  *         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_ERR(4, 177, __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 == ((int)-1))) __PYX_ERR(4, 183, __pyx_L1_error)
 
-  /* "PETSc/petscis.pxi":178
+  /* "PETSc/petscis.pxi":184
  *     cdef object exit(self):
  *         self.release()
  *         return None             # <<<<<<<<<<<<<<
@@ -16220,7 +16829,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_10_IS_buffer_exit(struct __pyx_obj_8pe
   __pyx_r = Py_None;
   goto __pyx_L0;
 
-  /* "PETSc/petscis.pxi":176
+  /* "PETSc/petscis.pxi":182
  *         return asarray(self)
  * 
  *     cdef object exit(self):             # <<<<<<<<<<<<<<
@@ -16238,7 +16847,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_10_IS_buffer_exit(struct __pyx_obj_8pe
   return __pyx_r;
 }
 
-/* "PETSc/petscis.pxi":180
+/* "PETSc/petscis.pxi":186
  *         return None
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -16269,7 +16878,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10_IS_buffer_8__enter__(struct __pyx_
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__enter__", 0);
 
-  /* "PETSc/petscis.pxi":181
+  /* "PETSc/petscis.pxi":187
  * 
  *     def __enter__(self):
  *         return self.enter()             # <<<<<<<<<<<<<<
@@ -16277,13 +16886,13 @@ 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_ERR(4, 181, __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, 187, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscis.pxi":180
+  /* "PETSc/petscis.pxi":186
  *         return None
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -16302,7 +16911,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10_IS_buffer_8__enter__(struct __pyx_
   return __pyx_r;
 }
 
-/* "PETSc/petscis.pxi":183
+/* "PETSc/petscis.pxi":189
  *         return self.enter()
  * 
  *     def __exit__(self, *exc):             # <<<<<<<<<<<<<<
@@ -16335,7 +16944,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10_IS_buffer_10__exit__(struct __pyx_
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__exit__", 0);
 
-  /* "PETSc/petscis.pxi":184
+  /* "PETSc/petscis.pxi":190
  * 
  *     def __exit__(self, *exc):
  *         return self.exit()             # <<<<<<<<<<<<<<
@@ -16343,13 +16952,13 @@ 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_ERR(4, 184, __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, 190, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscis.pxi":183
+  /* "PETSc/petscis.pxi":189
  *         return self.enter()
  * 
  *     def __exit__(self, *exc):             # <<<<<<<<<<<<<<
@@ -16368,7 +16977,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10_IS_buffer_10__exit__(struct __pyx_
   return __pyx_r;
 }
 
-/* "PETSc/petscis.pxi":188
+/* "PETSc/petscis.pxi":194
  *     # buffer interface (legacy)
  * 
  *     cdef Py_ssize_t getbuffer(self, void **p) except -1:             # <<<<<<<<<<<<<<
@@ -16385,7 +16994,7 @@ static Py_ssize_t __pyx_f_8petsc4py_5PETSc_10_IS_buffer_getbuffer(struct __pyx_o
   PetscInt __pyx_t_3;
   __Pyx_RefNannySetupContext("getbuffer", 0);
 
-  /* "PETSc/petscis.pxi":189
+  /* "PETSc/petscis.pxi":195
  * 
  *     cdef Py_ssize_t getbuffer(self, void **p) except -1:
  *         cdef PetscInt n = 0             # <<<<<<<<<<<<<<
@@ -16394,7 +17003,7 @@ static Py_ssize_t __pyx_f_8petsc4py_5PETSc_10_IS_buffer_getbuffer(struct __pyx_o
  */
   __pyx_v_n = 0;
 
-  /* "PETSc/petscis.pxi":190
+  /* "PETSc/petscis.pxi":196
  *     cdef Py_ssize_t getbuffer(self, void **p) except -1:
  *         cdef PetscInt n = 0
  *         if p != NULL:             # <<<<<<<<<<<<<<
@@ -16404,16 +17013,16 @@ static Py_ssize_t __pyx_f_8petsc4py_5PETSc_10_IS_buffer_getbuffer(struct __pyx_o
   __pyx_t_1 = ((__pyx_v_p != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscis.pxi":191
+    /* "PETSc/petscis.pxi":197
  *         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__IS_buffer *)__pyx_v_self->__pyx_vtab)->acquire(__pyx_v_self); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(4, 191, __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 == ((int)-1))) __PYX_ERR(4, 197, __pyx_L1_error)
 
-    /* "PETSc/petscis.pxi":192
+    /* "PETSc/petscis.pxi":198
  *         if p != NULL:
  *             self.acquire()
  *             p[0] = <void*>self.data             # <<<<<<<<<<<<<<
@@ -16422,7 +17031,7 @@ static Py_ssize_t __pyx_f_8petsc4py_5PETSc_10_IS_buffer_getbuffer(struct __pyx_o
  */
     (__pyx_v_p[0]) = ((void *)__pyx_v_self->data);
 
-    /* "PETSc/petscis.pxi":193
+    /* "PETSc/petscis.pxi":199
  *             self.acquire()
  *             p[0] = <void*>self.data
  *             n = self.size             # <<<<<<<<<<<<<<
@@ -16432,7 +17041,7 @@ 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
+    /* "PETSc/petscis.pxi":196
  *     cdef Py_ssize_t getbuffer(self, void **p) except -1:
  *         cdef PetscInt n = 0
  *         if p != NULL:             # <<<<<<<<<<<<<<
@@ -16442,7 +17051,7 @@ static Py_ssize_t __pyx_f_8petsc4py_5PETSc_10_IS_buffer_getbuffer(struct __pyx_o
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscis.pxi":194
+  /* "PETSc/petscis.pxi":200
  *             p[0] = <void*>self.data
  *             n = self.size
  *         elif self.iset != NULL:             # <<<<<<<<<<<<<<
@@ -16452,16 +17061,16 @@ static Py_ssize_t __pyx_f_8petsc4py_5PETSc_10_IS_buffer_getbuffer(struct __pyx_o
   __pyx_t_1 = ((__pyx_v_self->iset != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscis.pxi":195
+    /* "PETSc/petscis.pxi":201
  *             n = self.size
  *         elif self.iset != NULL:
  *             CHKERR( ISGetLocalSize(self.iset, &n) )             # <<<<<<<<<<<<<<
  *         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_ERR(4, 195, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetLocalSize(__pyx_v_self->iset, (&__pyx_v_n))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(4, 201, __pyx_L1_error)
 
-    /* "PETSc/petscis.pxi":194
+    /* "PETSc/petscis.pxi":200
  *             p[0] = <void*>self.data
  *             n = self.size
  *         elif self.iset != NULL:             # <<<<<<<<<<<<<<
@@ -16471,7 +17080,7 @@ static Py_ssize_t __pyx_f_8petsc4py_5PETSc_10_IS_buffer_getbuffer(struct __pyx_o
   }
   __pyx_L3:;
 
-  /* "PETSc/petscis.pxi":196
+  /* "PETSc/petscis.pxi":202
  *         elif self.iset != NULL:
  *             CHKERR( ISGetLocalSize(self.iset, &n) )
  *         return <Py_ssize_t>(<size_t>n*sizeof(PetscInt))             # <<<<<<<<<<<<<<
@@ -16481,7 +17090,7 @@ static Py_ssize_t __pyx_f_8petsc4py_5PETSc_10_IS_buffer_getbuffer(struct __pyx_o
   __pyx_r = ((Py_ssize_t)(((size_t)__pyx_v_n) * (sizeof(PetscInt))));
   goto __pyx_L0;
 
-  /* "PETSc/petscis.pxi":188
+  /* "PETSc/petscis.pxi":194
  *     # buffer interface (legacy)
  * 
  *     cdef Py_ssize_t getbuffer(self, void **p) except -1:             # <<<<<<<<<<<<<<
@@ -16498,7 +17107,7 @@ static Py_ssize_t __pyx_f_8petsc4py_5PETSc_10_IS_buffer_getbuffer(struct __pyx_o
   return __pyx_r;
 }
 
-/* "PETSc/petscis.pxi":198
+/* "PETSc/petscis.pxi":204
  *         return <Py_ssize_t>(<size_t>n*sizeof(PetscInt))
  * 
  *     def __getsegcount__(self, Py_ssize_t *lenp):             # <<<<<<<<<<<<<<
@@ -16529,7 +17138,7 @@ static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_12__getsegcount__(struc
   Py_ssize_t __pyx_t_2;
   __Pyx_RefNannySetupContext("__getsegcount__", 0);
 
-  /* "PETSc/petscis.pxi":199
+  /* "PETSc/petscis.pxi":205
  * 
  *     def __getsegcount__(self, Py_ssize_t *lenp):
  *         if lenp != NULL:             # <<<<<<<<<<<<<<
@@ -16539,17 +17148,17 @@ static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_12__getsegcount__(struc
   __pyx_t_1 = ((__pyx_v_lenp != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscis.pxi":200
+    /* "PETSc/petscis.pxi":206
  *     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__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_t_2 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__IS_buffer *)__pyx_v_self->__pyx_vtab)->getbuffer(__pyx_v_self, NULL); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1L))) __PYX_ERR(4, 206, __pyx_L1_error)
     (__pyx_v_lenp[0]) = __pyx_t_2;
 
-    /* "PETSc/petscis.pxi":199
+    /* "PETSc/petscis.pxi":205
  * 
  *     def __getsegcount__(self, Py_ssize_t *lenp):
  *         if lenp != NULL:             # <<<<<<<<<<<<<<
@@ -16558,7 +17167,7 @@ static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_12__getsegcount__(struc
  */
   }
 
-  /* "PETSc/petscis.pxi":201
+  /* "PETSc/petscis.pxi":207
  *         if lenp != NULL:
  *             lenp[0] = self.getbuffer(NULL)
  *         return 1             # <<<<<<<<<<<<<<
@@ -16568,7 +17177,7 @@ static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_12__getsegcount__(struc
   __pyx_r = 1;
   goto __pyx_L0;
 
-  /* "PETSc/petscis.pxi":198
+  /* "PETSc/petscis.pxi":204
  *         return <Py_ssize_t>(<size_t>n*sizeof(PetscInt))
  * 
  *     def __getsegcount__(self, Py_ssize_t *lenp):             # <<<<<<<<<<<<<<
@@ -16586,7 +17195,7 @@ static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_12__getsegcount__(struc
 }
 #endif /*!(#if PY_MAJOR_VERSION < 3)*/
 
-/* "PETSc/petscis.pxi":203
+/* "PETSc/petscis.pxi":209
  *         return 1
  * 
  *     def __getreadbuffer__(self, Py_ssize_t idx, void **p):             # <<<<<<<<<<<<<<
@@ -16618,7 +17227,7 @@ static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_14__getreadbuffer__(str
   Py_ssize_t __pyx_t_3;
   __Pyx_RefNannySetupContext("__getreadbuffer__", 0);
 
-  /* "PETSc/petscis.pxi":204
+  /* "PETSc/petscis.pxi":210
  * 
  *     def __getreadbuffer__(self, Py_ssize_t idx, void **p):
  *         if idx != 0: raise SystemError(             # <<<<<<<<<<<<<<
@@ -16627,25 +17236,25 @@ 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_ERR(4, 204, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_SystemError, __pyx_tuple__14, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(4, 210, __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_ERR(4, 204, __pyx_L1_error)
+    __PYX_ERR(4, 210, __pyx_L1_error)
   }
 
-  /* "PETSc/petscis.pxi":206
+  /* "PETSc/petscis.pxi":212
  *         if idx != 0: raise SystemError(
  *             "accessing non-existent buffer segment")
  *         return self.getbuffer(p)             # <<<<<<<<<<<<<<
  * 
  *     # 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 == -1L)) __PYX_ERR(4, 206, __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 == ((Py_ssize_t)-1L))) __PYX_ERR(4, 212, __pyx_L1_error)
   __pyx_r = __pyx_t_3;
   goto __pyx_L0;
 
-  /* "PETSc/petscis.pxi":203
+  /* "PETSc/petscis.pxi":209
  *         return 1
  * 
  *     def __getreadbuffer__(self, Py_ssize_t idx, void **p):             # <<<<<<<<<<<<<<
@@ -16664,7 +17273,7 @@ static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_10_IS_buffer_14__getreadbuffer__(str
 }
 #endif /*!(#if PY_MAJOR_VERSION < 3)*/
 
-/* "PETSc/petscis.pxi":211
+/* "PETSc/petscis.pxi":217
  * 
  *     property __array_interface__:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -16699,7 +17308,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10_IS_buffer_19__array_interface_____
   PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/petscis.pxi":212
+  /* "PETSc/petscis.pxi":218
  *     property __array_interface__:
  *         def __get__(self):
  *             cdef PetscInt n = 0             # <<<<<<<<<<<<<<
@@ -16708,7 +17317,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10_IS_buffer_19__array_interface_____
  */
   __pyx_v_n = 0;
 
-  /* "PETSc/petscis.pxi":213
+  /* "PETSc/petscis.pxi":219
  *         def __get__(self):
  *             cdef PetscInt n = 0
  *             if self.iset != NULL:             # <<<<<<<<<<<<<<
@@ -16718,16 +17327,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10_IS_buffer_19__array_interface_____
   __pyx_t_1 = ((__pyx_v_self->iset != NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscis.pxi":214
+    /* "PETSc/petscis.pxi":220
  *             cdef PetscInt n = 0
  *             if self.iset != NULL:
  *                 CHKERR( ISGetLocalSize(self.iset, &n) )             # <<<<<<<<<<<<<<
  *             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_ERR(4, 214, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetLocalSize(__pyx_v_self->iset, (&__pyx_v_n))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(4, 220, __pyx_L1_error)
 
-    /* "PETSc/petscis.pxi":213
+    /* "PETSc/petscis.pxi":219
  *         def __get__(self):
  *             cdef PetscInt n = 0
  *             if self.iset != NULL:             # <<<<<<<<<<<<<<
@@ -16736,42 +17345,42 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10_IS_buffer_19__array_interface_____
  */
   }
 
-  /* "PETSc/petscis.pxi":215
+  /* "PETSc/petscis.pxi":221
  *             if self.iset != NULL:
  *                 CHKERR( ISGetLocalSize(self.iset, &n) )
  *             cdef object size = toInt(n)             # <<<<<<<<<<<<<<
  *             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_ERR(4, 215, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 221, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_size = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscis.pxi":216
+  /* "PETSc/petscis.pxi":222
  *                 CHKERR( ISGetLocalSize(self.iset, &n) )
  *             cdef object size = toInt(n)
  *             cdef dtype descr = PyArray_DescrFromType(NPY_PETSC_INT)             # <<<<<<<<<<<<<<
  *             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_ERR(4, 216, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)PyArray_DescrFromType(NPY_PETSC_INT)); if (unlikely(!__pyx_t_3)) __PYX_ERR(4, 222, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_descr = ((PyArray_Descr *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscis.pxi":217
+  /* "PETSc/petscis.pxi":223
  *             cdef object size = toInt(n)
  *             cdef dtype descr = PyArray_DescrFromType(NPY_PETSC_INT)
  *             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_ERR(4, 217, __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, 223, __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_ERR(4, 217, __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, 223, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 217, __pyx_L1_error)
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 223, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
@@ -16779,14 +17388,14 @@ 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_ERR(4, 217, __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, 223, __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_ERR(4, 217, __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, 223, __pyx_L1_error)
   __pyx_v_typestr = ((PyObject*)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "PETSc/petscis.pxi":218
+  /* "PETSc/petscis.pxi":224
  *             cdef dtype descr = PyArray_DescrFromType(NPY_PETSC_INT)
  *             cdef str typestr = "=%c%d" % (descr.kind, descr.itemsize)
  *             return dict(version=3,             # <<<<<<<<<<<<<<
@@ -16794,47 +17403,47 @@ 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_ERR(4, 218, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(4, 224, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_version, __pyx_int_3) < 0) __PYX_ERR(4, 218, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_version, __pyx_int_3) < 0) __PYX_ERR(4, 224, __pyx_L1_error)
 
-  /* "PETSc/petscis.pxi":219
+  /* "PETSc/petscis.pxi":225
  *             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_ERR(4, 218, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_data, ((PyObject *)__pyx_v_self)) < 0) __PYX_ERR(4, 224, __pyx_L1_error)
 
-  /* "PETSc/petscis.pxi":220
+  /* "PETSc/petscis.pxi":226
  *             return dict(version=3,
  *                         data=self,
  *                         shape=(size,),             # <<<<<<<<<<<<<<
  *                         typestr=typestr)
  * 
  */
-  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 220, __pyx_L1_error)
+  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(4, 226, __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_ERR(4, 218, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_shape, __pyx_t_5) < 0) __PYX_ERR(4, 224, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/petscis.pxi":221
+  /* "PETSc/petscis.pxi":227
  *                         data=self,
  *                         shape=(size,),
  *                         typestr=typestr)             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_typestr, __pyx_v_typestr) < 0) __PYX_ERR(4, 218, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_typestr, __pyx_v_typestr) < 0) __PYX_ERR(4, 224, __pyx_L1_error)
   __pyx_r = __pyx_t_4;
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscis.pxi":211
+  /* "PETSc/petscis.pxi":217
  * 
  *     property __array_interface__:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -16858,7 +17467,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10_IS_buffer_19__array_interface_____
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":166
+/* "PETSc/petscvec.pxi":167
  * # --------------------------------------------------------------------
  * 
  * cdef inline Vec ref_Vec(PetscVec vec):             # <<<<<<<<<<<<<<
@@ -16874,14 +17483,14 @@ static CYTHON_INLINE struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_ref_Vec(V
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("ref_Vec", 0);
 
-  /* "PETSc/petscvec.pxi":167
+  /* "PETSc/petscvec.pxi":168
  * 
  * 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 *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 167, __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, 168, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -16889,7 +17498,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":168
+  /* "PETSc/petscvec.pxi":169
  * cdef inline Vec ref_Vec(PetscVec vec):
  *     cdef Vec ob = <Vec> Vec()
  *     ob.vec = vec             # <<<<<<<<<<<<<<
@@ -16898,7 +17507,7 @@ static CYTHON_INLINE struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_ref_Vec(V
  */
   __pyx_v_ob->vec = __pyx_v_vec;
 
-  /* "PETSc/petscvec.pxi":169
+  /* "PETSc/petscvec.pxi":170
  *     cdef Vec ob = <Vec> Vec()
  *     ob.vec = vec
  *     PetscINCREF(ob.obj)             # <<<<<<<<<<<<<<
@@ -16907,7 +17516,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":170
+  /* "PETSc/petscvec.pxi":171
  *     ob.vec = vec
  *     PetscINCREF(ob.obj)
  *     return ob             # <<<<<<<<<<<<<<
@@ -16919,7 +17528,7 @@ static CYTHON_INLINE struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_ref_Vec(V
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":166
+  /* "PETSc/petscvec.pxi":167
  * # --------------------------------------------------------------------
  * 
  * cdef inline Vec ref_Vec(PetscVec vec):             # <<<<<<<<<<<<<<
@@ -16940,7 +17549,7 @@ static CYTHON_INLINE struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_ref_Vec(V
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":176
+/* "PETSc/petscvec.pxi":177
  * # unary operations
  * 
  * cdef Vec vec_pos(Vec self):             # <<<<<<<<<<<<<<
@@ -16958,7 +17567,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_pos(struct PyPetscV
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("vec_pos", 0);
 
-  /* "PETSc/petscvec.pxi":177
+  /* "PETSc/petscvec.pxi":178
  * 
  * cdef Vec vec_pos(Vec self):
  *     cdef Vec vec = type(self)()             # <<<<<<<<<<<<<<
@@ -16967,7 +17576,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_pos(struct PyPetscV
  */
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -16977,36 +17586,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_ERR(5, 177, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 178, __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(5, 177, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 178, __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_ERR(5, 177, __pyx_L1_error)
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(5, 178, __pyx_L1_error)
   __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscvec.pxi":178
+  /* "PETSc/petscvec.pxi":179
  * 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_ERR(5, 178, __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 == ((int)-1))) __PYX_ERR(5, 179, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":179
+  /* "PETSc/petscvec.pxi":180
  *     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_ERR(5, 179, __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 == ((int)-1))) __PYX_ERR(5, 180, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":180
+  /* "PETSc/petscvec.pxi":181
  *     CHKERR( VecDuplicate(self.vec, &vec.vec) )
  *     CHKERR( VecCopy(self.vec, vec.vec) )
  *     return vec             # <<<<<<<<<<<<<<
@@ -17018,7 +17627,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_pos(struct PyPetscV
   __pyx_r = __pyx_v_vec;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":176
+  /* "PETSc/petscvec.pxi":177
  * # unary operations
  * 
  * cdef Vec vec_pos(Vec self):             # <<<<<<<<<<<<<<
@@ -17040,7 +17649,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_pos(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":182
+/* "PETSc/petscvec.pxi":183
  *     return vec
  * 
  * cdef Vec vec_neg(Vec self):             # <<<<<<<<<<<<<<
@@ -17057,14 +17666,14 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_neg(struct PyPetscV
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("vec_neg", 0);
 
-  /* "PETSc/petscvec.pxi":183
+  /* "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_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 183, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 184, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -17072,16 +17681,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":184
+  /* "PETSc/petscvec.pxi":185
  * 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_ERR(5, 184, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScale(__pyx_v_vec->vec, -1.0)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(5, 185, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":185
+  /* "PETSc/petscvec.pxi":186
  *     cdef Vec vec = <Vec> vec_pos(self)
  *     CHKERR( VecScale(vec.vec, -1) )
  *     return vec             # <<<<<<<<<<<<<<
@@ -17093,7 +17702,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_neg(struct PyPetscV
   __pyx_r = __pyx_v_vec;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":182
+  /* "PETSc/petscvec.pxi":183
  *     return vec
  * 
  * cdef Vec vec_neg(Vec self):             # <<<<<<<<<<<<<<
@@ -17114,7 +17723,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_neg(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":187
+/* "PETSc/petscvec.pxi":188
  *     return vec
  * 
  * cdef Vec vec_abs(Vec self):             # <<<<<<<<<<<<<<
@@ -17131,14 +17740,14 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_abs(struct PyPetscV
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("vec_abs", 0);
 
-  /* "PETSc/petscvec.pxi":188
+  /* "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_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 188, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 189, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -17146,16 +17755,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":189
+  /* "PETSc/petscvec.pxi":190
  * 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_ERR(5, 189, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAbs(__pyx_v_vec->vec)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(5, 190, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":190
+  /* "PETSc/petscvec.pxi":191
  *     cdef Vec vec = <Vec> vec_pos(self)
  *     CHKERR( VecAbs(vec.vec) )
  *     return vec             # <<<<<<<<<<<<<<
@@ -17167,7 +17776,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_abs(struct PyPetscV
   __pyx_r = __pyx_v_vec;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":187
+  /* "PETSc/petscvec.pxi":188
  *     return vec
  * 
  * cdef Vec vec_abs(Vec self):             # <<<<<<<<<<<<<<
@@ -17188,7 +17797,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_abs(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":194
+/* "PETSc/petscvec.pxi":195
  * # inplace binary operations
  * 
  * cdef Vec vec_iadd(Vec self, other):             # <<<<<<<<<<<<<<
@@ -17213,7 +17822,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_iadd(struct PyPetsc
   __Pyx_RefNannySetupContext("vec_iadd", 0);
   __Pyx_INCREF(__pyx_v_other);
 
-  /* "PETSc/petscvec.pxi":195
+  /* "PETSc/petscvec.pxi":196
  * 
  * cdef Vec vec_iadd(Vec self, other):
  *     cdef PetscScalar alpha = 1             # <<<<<<<<<<<<<<
@@ -17222,7 +17831,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_iadd(struct PyPetsc
  */
   __pyx_v_alpha = 1.0;
 
-  /* "PETSc/petscvec.pxi":197
+  /* "PETSc/petscvec.pxi":198
  *     cdef PetscScalar alpha = 1
  *     cdef Vec vec
  *     if isinstance(other, Vec):             # <<<<<<<<<<<<<<
@@ -17233,7 +17842,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_iadd(struct PyPetsc
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscvec.pxi":198
+    /* "PETSc/petscvec.pxi":199
  *     cdef Vec vec
  *     if isinstance(other, Vec):
  *         alpha = 1; vec = other             # <<<<<<<<<<<<<<
@@ -17241,22 +17850,22 @@ 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_ERR(5, 198, __pyx_L1_error)
+    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(5, 199, __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":199
+    /* "PETSc/petscvec.pxi":200
  *     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_ERR(5, 199, __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 == ((int)-1))) __PYX_ERR(5, 200, __pyx_L1_error)
 
-    /* "PETSc/petscvec.pxi":197
+    /* "PETSc/petscvec.pxi":198
  *     cdef PetscScalar alpha = 1
  *     cdef Vec vec
  *     if isinstance(other, Vec):             # <<<<<<<<<<<<<<
@@ -17266,7 +17875,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_iadd(struct PyPetsc
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscvec.pxi":200
+  /* "PETSc/petscvec.pxi":201
  *         alpha = 1; vec = other
  *         CHKERR( VecAXPY(self.vec, alpha, vec.vec) )
  *     elif isinstance(other, tuple) or isinstance(other, list):             # <<<<<<<<<<<<<<
@@ -17286,7 +17895,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_iadd(struct PyPetsc
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "PETSc/petscvec.pxi":201
+    /* "PETSc/petscvec.pxi":202
  *         CHKERR( VecAXPY(self.vec, alpha, vec.vec) )
  *     elif isinstance(other, tuple) or isinstance(other, list):
  *         other, vec = other             # <<<<<<<<<<<<<<
@@ -17295,7 +17904,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_iadd(struct PyPetsc
  */
     if ((likely(PyTuple_CheckExact(__pyx_v_other))) || (PyList_CheckExact(__pyx_v_other))) {
       PyObject* sequence = __pyx_v_other;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -17303,9 +17912,9 @@ 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_ERR(5, 201, __pyx_L1_error)
+        __PYX_ERR(5, 202, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); 
@@ -17316,21 +17925,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_ERR(5, 201, __pyx_L1_error)
+      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 202, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 201, __pyx_L1_error)
+      __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 202, __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_ERR(5, 201, __pyx_L1_error)
+      __pyx_t_7 = PyObject_GetIter(__pyx_v_other); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 202, __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_ERR(5, 201, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(5, 202, __pyx_L1_error)
       __pyx_t_8 = NULL;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       goto __pyx_L7_unpacking_done;
@@ -17338,35 +17947,35 @@ 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_ERR(5, 201, __pyx_L1_error)
+      __PYX_ERR(5, 202, __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_ERR(5, 201, __pyx_L1_error)
+    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(5, 202, __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":202
+    /* "PETSc/petscvec.pxi":203
  *     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_ERR(5, 202, __pyx_L1_error)
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_other); if (unlikely(__pyx_t_9 == ((PetscScalar)((PetscScalar)(-1.0))) && PyErr_Occurred())) __PYX_ERR(5, 203, __pyx_L1_error)
     __pyx_v_alpha = __pyx_t_9;
 
-    /* "PETSc/petscvec.pxi":203
+    /* "PETSc/petscvec.pxi":204
  *         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_ERR(5, 203, __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 == ((int)-1))) __PYX_ERR(5, 204, __pyx_L1_error)
 
-    /* "PETSc/petscvec.pxi":200
+    /* "PETSc/petscvec.pxi":201
  *         alpha = 1; vec = other
  *         CHKERR( VecAXPY(self.vec, alpha, vec.vec) )
  *     elif isinstance(other, tuple) or isinstance(other, list):             # <<<<<<<<<<<<<<
@@ -17376,7 +17985,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_iadd(struct PyPetsc
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscvec.pxi":205
+  /* "PETSc/petscvec.pxi":206
  *         CHKERR( VecAXPY(self.vec, alpha, vec.vec) )
  *     else:
  *         alpha = asScalar(other)             # <<<<<<<<<<<<<<
@@ -17384,21 +17993,21 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_iadd(struct PyPetsc
  *     return self
  */
   /*else*/ {
-    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_other); if (unlikely(PyErr_Occurred())) __PYX_ERR(5, 205, __pyx_L1_error)
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_other); if (unlikely(__pyx_t_9 == ((PetscScalar)((PetscScalar)(-1.0))) && PyErr_Occurred())) __PYX_ERR(5, 206, __pyx_L1_error)
     __pyx_v_alpha = __pyx_t_9;
 
-    /* "PETSc/petscvec.pxi":206
+    /* "PETSc/petscvec.pxi":207
  *     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_ERR(5, 206, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecShift(__pyx_v_self->vec, __pyx_v_alpha)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(5, 207, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/petscvec.pxi":207
+  /* "PETSc/petscvec.pxi":208
  *         alpha = asScalar(other)
  *         CHKERR( VecShift(self.vec, alpha) )
  *     return self             # <<<<<<<<<<<<<<
@@ -17410,7 +18019,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_iadd(struct PyPetsc
   __pyx_r = __pyx_v_self;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":194
+  /* "PETSc/petscvec.pxi":195
  * # inplace binary operations
  * 
  * cdef Vec vec_iadd(Vec self, other):             # <<<<<<<<<<<<<<
@@ -17433,7 +18042,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_iadd(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":209
+/* "PETSc/petscvec.pxi":210
  *     return self
  * 
  * cdef Vec vec_isub(Vec self, other):             # <<<<<<<<<<<<<<
@@ -17458,7 +18067,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_isub(struct PyPetsc
   __Pyx_RefNannySetupContext("vec_isub", 0);
   __Pyx_INCREF(__pyx_v_other);
 
-  /* "PETSc/petscvec.pxi":210
+  /* "PETSc/petscvec.pxi":211
  * 
  * cdef Vec vec_isub(Vec self, other):
  *     cdef PetscScalar alpha = 1             # <<<<<<<<<<<<<<
@@ -17467,7 +18076,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_isub(struct PyPetsc
  */
   __pyx_v_alpha = 1.0;
 
-  /* "PETSc/petscvec.pxi":212
+  /* "PETSc/petscvec.pxi":213
  *     cdef PetscScalar alpha = 1
  *     cdef Vec vec
  *     if isinstance(other, Vec):             # <<<<<<<<<<<<<<
@@ -17478,7 +18087,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_isub(struct PyPetsc
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscvec.pxi":213
+    /* "PETSc/petscvec.pxi":214
  *     cdef Vec vec
  *     if isinstance(other, Vec):
  *         alpha = 1; vec = other             # <<<<<<<<<<<<<<
@@ -17486,22 +18095,22 @@ 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_ERR(5, 213, __pyx_L1_error)
+    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(5, 214, __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":214
+    /* "PETSc/petscvec.pxi":215
  *     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_ERR(5, 214, __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 == ((int)-1))) __PYX_ERR(5, 215, __pyx_L1_error)
 
-    /* "PETSc/petscvec.pxi":212
+    /* "PETSc/petscvec.pxi":213
  *     cdef PetscScalar alpha = 1
  *     cdef Vec vec
  *     if isinstance(other, Vec):             # <<<<<<<<<<<<<<
@@ -17511,7 +18120,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_isub(struct PyPetsc
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscvec.pxi":215
+  /* "PETSc/petscvec.pxi":216
  *         alpha = 1; vec = other
  *         CHKERR( VecAXPY(self.vec, -alpha, vec.vec) )
  *     elif isinstance(other, tuple) or isinstance(other, list):             # <<<<<<<<<<<<<<
@@ -17531,7 +18140,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_isub(struct PyPetsc
   __pyx_L4_bool_binop_done:;
   if (__pyx_t_2) {
 
-    /* "PETSc/petscvec.pxi":216
+    /* "PETSc/petscvec.pxi":217
  *         CHKERR( VecAXPY(self.vec, -alpha, vec.vec) )
  *     elif isinstance(other, tuple) or isinstance(other, list):
  *         other, vec = other             # <<<<<<<<<<<<<<
@@ -17540,7 +18149,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_isub(struct PyPetsc
  */
     if ((likely(PyTuple_CheckExact(__pyx_v_other))) || (PyList_CheckExact(__pyx_v_other))) {
       PyObject* sequence = __pyx_v_other;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -17548,9 +18157,9 @@ 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_ERR(5, 216, __pyx_L1_error)
+        __PYX_ERR(5, 217, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); 
@@ -17561,21 +18170,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_ERR(5, 216, __pyx_L1_error)
+      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 217, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 216, __pyx_L1_error)
+      __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 217, __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_ERR(5, 216, __pyx_L1_error)
+      __pyx_t_7 = PyObject_GetIter(__pyx_v_other); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 217, __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_ERR(5, 216, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(5, 217, __pyx_L1_error)
       __pyx_t_8 = NULL;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       goto __pyx_L7_unpacking_done;
@@ -17583,35 +18192,35 @@ 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_ERR(5, 216, __pyx_L1_error)
+      __PYX_ERR(5, 217, __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_ERR(5, 216, __pyx_L1_error)
+    if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(5, 217, __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":217
+    /* "PETSc/petscvec.pxi":218
  *     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_ERR(5, 217, __pyx_L1_error)
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_other); if (unlikely(__pyx_t_9 == ((PetscScalar)((PetscScalar)(-1.0))) && PyErr_Occurred())) __PYX_ERR(5, 218, __pyx_L1_error)
     __pyx_v_alpha = __pyx_t_9;
 
-    /* "PETSc/petscvec.pxi":218
+    /* "PETSc/petscvec.pxi":219
  *         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_ERR(5, 218, __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 == ((int)-1))) __PYX_ERR(5, 219, __pyx_L1_error)
 
-    /* "PETSc/petscvec.pxi":215
+    /* "PETSc/petscvec.pxi":216
  *         alpha = 1; vec = other
  *         CHKERR( VecAXPY(self.vec, -alpha, vec.vec) )
  *     elif isinstance(other, tuple) or isinstance(other, list):             # <<<<<<<<<<<<<<
@@ -17621,7 +18230,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_isub(struct PyPetsc
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscvec.pxi":220
+  /* "PETSc/petscvec.pxi":221
  *         CHKERR( VecAXPY(self.vec, -alpha, vec.vec) )
  *     else:
  *         alpha = asScalar(other)             # <<<<<<<<<<<<<<
@@ -17629,21 +18238,21 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_isub(struct PyPetsc
  *     return self
  */
   /*else*/ {
-    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_other); if (unlikely(PyErr_Occurred())) __PYX_ERR(5, 220, __pyx_L1_error)
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_other); if (unlikely(__pyx_t_9 == ((PetscScalar)((PetscScalar)(-1.0))) && PyErr_Occurred())) __PYX_ERR(5, 221, __pyx_L1_error)
     __pyx_v_alpha = __pyx_t_9;
 
-    /* "PETSc/petscvec.pxi":221
+    /* "PETSc/petscvec.pxi":222
  *     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_ERR(5, 221, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecShift(__pyx_v_self->vec, (-__pyx_v_alpha))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(5, 222, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/petscvec.pxi":222
+  /* "PETSc/petscvec.pxi":223
  *         alpha = asScalar(other)
  *         CHKERR( VecShift(self.vec, -alpha) )
  *     return self             # <<<<<<<<<<<<<<
@@ -17655,7 +18264,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_isub(struct PyPetsc
   __pyx_r = __pyx_v_self;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":209
+  /* "PETSc/petscvec.pxi":210
  *     return self
  * 
  * cdef Vec vec_isub(Vec self, other):             # <<<<<<<<<<<<<<
@@ -17678,7 +18287,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_isub(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":224
+/* "PETSc/petscvec.pxi":225
  *     return self
  * 
  * cdef Vec vec_imul(Vec self, other):             # <<<<<<<<<<<<<<
@@ -17698,7 +18307,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_imul(struct PyPetsc
   PetscScalar __pyx_t_5;
   __Pyx_RefNannySetupContext("vec_imul", 0);
 
-  /* "PETSc/petscvec.pxi":225
+  /* "PETSc/petscvec.pxi":226
  * 
  * cdef Vec vec_imul(Vec self, other):
  *     cdef PetscScalar alpha = 1             # <<<<<<<<<<<<<<
@@ -17707,7 +18316,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_imul(struct PyPetsc
  */
   __pyx_v_alpha = 1.0;
 
-  /* "PETSc/petscvec.pxi":227
+  /* "PETSc/petscvec.pxi":228
  *     cdef PetscScalar alpha = 1
  *     cdef Vec vec
  *     if isinstance(other, Vec):             # <<<<<<<<<<<<<<
@@ -17718,29 +18327,29 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_imul(struct PyPetsc
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscvec.pxi":228
+    /* "PETSc/petscvec.pxi":229
  *     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_ERR(5, 228, __pyx_L1_error)
+    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(5, 229, __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":229
+    /* "PETSc/petscvec.pxi":230
  *     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_ERR(5, 229, __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 == ((int)-1))) __PYX_ERR(5, 230, __pyx_L1_error)
 
-    /* "PETSc/petscvec.pxi":227
+    /* "PETSc/petscvec.pxi":228
  *     cdef PetscScalar alpha = 1
  *     cdef Vec vec
  *     if isinstance(other, Vec):             # <<<<<<<<<<<<<<
@@ -17750,7 +18359,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_imul(struct PyPetsc
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscvec.pxi":231
+  /* "PETSc/petscvec.pxi":232
  *         CHKERR( VecPointwiseMult(self.vec, self.vec, vec.vec) )
  *     else:
  *         alpha = asScalar(other)             # <<<<<<<<<<<<<<
@@ -17758,21 +18367,21 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_imul(struct PyPetsc
  *     return self
  */
   /*else*/ {
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_other); if (unlikely(PyErr_Occurred())) __PYX_ERR(5, 231, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_other); if (unlikely(__pyx_t_5 == ((PetscScalar)((PetscScalar)(-1.0))) && PyErr_Occurred())) __PYX_ERR(5, 232, __pyx_L1_error)
     __pyx_v_alpha = __pyx_t_5;
 
-    /* "PETSc/petscvec.pxi":232
+    /* "PETSc/petscvec.pxi":233
  *     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_ERR(5, 232, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScale(__pyx_v_self->vec, __pyx_v_alpha)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(5, 233, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/petscvec.pxi":233
+  /* "PETSc/petscvec.pxi":234
  *         alpha = asScalar(other)
  *         CHKERR( VecScale(self.vec, alpha) )
  *     return self             # <<<<<<<<<<<<<<
@@ -17784,7 +18393,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_imul(struct PyPetsc
   __pyx_r = __pyx_v_self;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":224
+  /* "PETSc/petscvec.pxi":225
  *     return self
  * 
  * cdef Vec vec_imul(Vec self, other):             # <<<<<<<<<<<<<<
@@ -17804,7 +18413,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_imul(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":235
+/* "PETSc/petscvec.pxi":236
  *     return self
  * 
  * cdef Vec vec_idiv(Vec self, other):             # <<<<<<<<<<<<<<
@@ -17825,7 +18434,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_idiv(struct PyPetsc
   PetscScalar __pyx_t_5;
   __Pyx_RefNannySetupContext("vec_idiv", 0);
 
-  /* "PETSc/petscvec.pxi":236
+  /* "PETSc/petscvec.pxi":237
  * 
  * cdef Vec vec_idiv(Vec self, other):
  *     cdef PetscScalar one = 1             # <<<<<<<<<<<<<<
@@ -17834,7 +18443,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_idiv(struct PyPetsc
  */
   __pyx_v_one = 1.0;
 
-  /* "PETSc/petscvec.pxi":237
+  /* "PETSc/petscvec.pxi":238
  * cdef Vec vec_idiv(Vec self, other):
  *     cdef PetscScalar one = 1
  *     cdef PetscScalar alpha = 1             # <<<<<<<<<<<<<<
@@ -17843,7 +18452,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_idiv(struct PyPetsc
  */
   __pyx_v_alpha = 1.0;
 
-  /* "PETSc/petscvec.pxi":239
+  /* "PETSc/petscvec.pxi":240
  *     cdef PetscScalar alpha = 1
  *     cdef Vec vec
  *     if isinstance(other, Vec):             # <<<<<<<<<<<<<<
@@ -17854,29 +18463,29 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_idiv(struct PyPetsc
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscvec.pxi":240
+    /* "PETSc/petscvec.pxi":241
  *     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_ERR(5, 240, __pyx_L1_error)
+    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(5, 241, __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":241
+    /* "PETSc/petscvec.pxi":242
  *     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_ERR(5, 241, __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 == ((int)-1))) __PYX_ERR(5, 242, __pyx_L1_error)
 
-    /* "PETSc/petscvec.pxi":239
+    /* "PETSc/petscvec.pxi":240
  *     cdef PetscScalar alpha = 1
  *     cdef Vec vec
  *     if isinstance(other, Vec):             # <<<<<<<<<<<<<<
@@ -17886,7 +18495,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_idiv(struct PyPetsc
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscvec.pxi":243
+  /* "PETSc/petscvec.pxi":244
  *         CHKERR( VecPointwiseDivide(self.vec, self.vec, vec.vec) )
  *     else:
  *         alpha = asScalar(other)             # <<<<<<<<<<<<<<
@@ -17894,21 +18503,21 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_idiv(struct PyPetsc
  *     return self
  */
   /*else*/ {
-    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_other); if (unlikely(PyErr_Occurred())) __PYX_ERR(5, 243, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_other); if (unlikely(__pyx_t_5 == ((PetscScalar)((PetscScalar)(-1.0))) && PyErr_Occurred())) __PYX_ERR(5, 244, __pyx_L1_error)
     __pyx_v_alpha = __pyx_t_5;
 
-    /* "PETSc/petscvec.pxi":244
+    /* "PETSc/petscvec.pxi":245
  *     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_ERR(5, 244, __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 == ((int)-1))) __PYX_ERR(5, 245, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/petscvec.pxi":245
+  /* "PETSc/petscvec.pxi":246
  *         alpha = asScalar(other)
  *         CHKERR( VecScale(self.vec, one/alpha) )
  *     return self             # <<<<<<<<<<<<<<
@@ -17920,7 +18529,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_idiv(struct PyPetsc
   __pyx_r = __pyx_v_self;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":235
+  /* "PETSc/petscvec.pxi":236
  *     return self
  * 
  * cdef Vec vec_idiv(Vec self, other):             # <<<<<<<<<<<<<<
@@ -17940,7 +18549,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_idiv(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":249
+/* "PETSc/petscvec.pxi":250
  * # binary operations
  * 
  * cdef Vec vec_add(Vec self, other):             # <<<<<<<<<<<<<<
@@ -17955,7 +18564,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_add(struct PyPetscV
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("vec_add", 0);
 
-  /* "PETSc/petscvec.pxi":250
+  /* "PETSc/petscvec.pxi":251
  * 
  * cdef Vec vec_add(Vec self, other):
  *     return vec_iadd(vec_pos(self), other)             # <<<<<<<<<<<<<<
@@ -17963,16 +18572,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_ERR(5, 250, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 251, __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_ERR(5, 250, __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, 251, __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":250
  * # binary operations
  * 
  * cdef Vec vec_add(Vec self, other):             # <<<<<<<<<<<<<<
@@ -17992,7 +18601,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_add(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":252
+/* "PETSc/petscvec.pxi":253
  *     return vec_iadd(vec_pos(self), other)
  * 
  * cdef Vec vec_sub(Vec self, other):             # <<<<<<<<<<<<<<
@@ -18007,7 +18616,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_sub(struct PyPetscV
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("vec_sub", 0);
 
-  /* "PETSc/petscvec.pxi":253
+  /* "PETSc/petscvec.pxi":254
  * 
  * cdef Vec vec_sub(Vec self, other):
  *     return vec_isub(vec_pos(self), other)             # <<<<<<<<<<<<<<
@@ -18015,16 +18624,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_ERR(5, 253, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 254, __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_ERR(5, 253, __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, 254, __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":253
  *     return vec_iadd(vec_pos(self), other)
  * 
  * cdef Vec vec_sub(Vec self, other):             # <<<<<<<<<<<<<<
@@ -18044,7 +18653,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_sub(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":255
+/* "PETSc/petscvec.pxi":256
  *     return vec_isub(vec_pos(self), other)
  * 
  * cdef Vec vec_mul(Vec self, other):             # <<<<<<<<<<<<<<
@@ -18059,7 +18668,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_mul(struct PyPetscV
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("vec_mul", 0);
 
-  /* "PETSc/petscvec.pxi":256
+  /* "PETSc/petscvec.pxi":257
  * 
  * cdef Vec vec_mul(Vec self, other):
  *     return vec_imul(vec_pos(self), other)             # <<<<<<<<<<<<<<
@@ -18067,16 +18676,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_ERR(5, 256, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 257, __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_ERR(5, 256, __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, 257, __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":255
+  /* "PETSc/petscvec.pxi":256
  *     return vec_isub(vec_pos(self), other)
  * 
  * cdef Vec vec_mul(Vec self, other):             # <<<<<<<<<<<<<<
@@ -18096,7 +18705,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_mul(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":258
+/* "PETSc/petscvec.pxi":259
  *     return vec_imul(vec_pos(self), other)
  * 
  * cdef Vec vec_div(Vec self, other):             # <<<<<<<<<<<<<<
@@ -18111,7 +18720,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_div(struct PyPetscV
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("vec_div", 0);
 
-  /* "PETSc/petscvec.pxi":259
+  /* "PETSc/petscvec.pxi":260
  * 
  * cdef Vec vec_div(Vec self, other):
  *     return vec_idiv(vec_pos(self), other)             # <<<<<<<<<<<<<<
@@ -18119,16 +18728,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_ERR(5, 259, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 260, __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_ERR(5, 259, __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, 260, __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":258
+  /* "PETSc/petscvec.pxi":259
  *     return vec_imul(vec_pos(self), other)
  * 
  * cdef Vec vec_div(Vec self, other):             # <<<<<<<<<<<<<<
@@ -18148,7 +18757,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_div(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":263
+/* "PETSc/petscvec.pxi":264
  * # reflected binary operations
  * 
  * cdef Vec vec_radd(Vec self, other):             # <<<<<<<<<<<<<<
@@ -18162,7 +18771,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_radd(struct PyPetsc
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("vec_radd", 0);
 
-  /* "PETSc/petscvec.pxi":264
+  /* "PETSc/petscvec.pxi":265
  * 
  * cdef Vec vec_radd(Vec self, other):
  *     return vec_add(self, other)             # <<<<<<<<<<<<<<
@@ -18170,13 +18779,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_ERR(5, 264, __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, 265, __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":263
+  /* "PETSc/petscvec.pxi":264
  * # reflected binary operations
  * 
  * cdef Vec vec_radd(Vec self, other):             # <<<<<<<<<<<<<<
@@ -18195,7 +18804,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_radd(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":266
+/* "PETSc/petscvec.pxi":267
  *     return vec_add(self, other)
  * 
  * cdef Vec vec_rsub(Vec self, other):             # <<<<<<<<<<<<<<
@@ -18212,14 +18821,14 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_rsub(struct PyPetsc
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("vec_rsub", 0);
 
-  /* "PETSc/petscvec.pxi":267
+  /* "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_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_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_sub(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 268, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -18227,16 +18836,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":268
+  /* "PETSc/petscvec.pxi":269
  * 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_ERR(5, 268, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScale(__pyx_v_vec->vec, -1.0)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(5, 269, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":269
+  /* "PETSc/petscvec.pxi":270
  *     cdef Vec vec = <Vec> vec_sub(self, other)
  *     CHKERR( VecScale(vec.vec, -1) )
  *     return vec             # <<<<<<<<<<<<<<
@@ -18248,7 +18857,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_rsub(struct PyPetsc
   __pyx_r = __pyx_v_vec;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":266
+  /* "PETSc/petscvec.pxi":267
  *     return vec_add(self, other)
  * 
  * cdef Vec vec_rsub(Vec self, other):             # <<<<<<<<<<<<<<
@@ -18269,7 +18878,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_rsub(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":271
+/* "PETSc/petscvec.pxi":272
  *     return vec
  * 
  * cdef Vec vec_rmul(Vec self, other):             # <<<<<<<<<<<<<<
@@ -18283,7 +18892,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_rmul(struct PyPetsc
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("vec_rmul", 0);
 
-  /* "PETSc/petscvec.pxi":272
+  /* "PETSc/petscvec.pxi":273
  * 
  * cdef Vec vec_rmul(Vec self, other):
  *     return vec_mul(self, other)             # <<<<<<<<<<<<<<
@@ -18291,13 +18900,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_ERR(5, 272, __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, 273, __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":271
+  /* "PETSc/petscvec.pxi":272
  *     return vec
  * 
  * cdef Vec vec_rmul(Vec self, other):             # <<<<<<<<<<<<<<
@@ -18316,7 +18925,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_rmul(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":274
+/* "PETSc/petscvec.pxi":275
  *     return vec_mul(self, other)
  * 
  * cdef Vec vec_rdiv(Vec self, other):             # <<<<<<<<<<<<<<
@@ -18333,14 +18942,14 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_rdiv(struct PyPetsc
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("vec_rdiv", 0);
 
-  /* "PETSc/petscvec.pxi":275
+  /* "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_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_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_vec_div(__pyx_v_self, __pyx_v_other)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 276, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -18348,16 +18957,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":276
+  /* "PETSc/petscvec.pxi":277
  * 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_ERR(5, 276, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecReciprocal(__pyx_v_vec->vec)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(5, 277, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":277
+  /* "PETSc/petscvec.pxi":278
  *     cdef Vec vec = <Vec> vec_div(self, other)
  *     CHKERR( VecReciprocal(vec.vec) )
  *     return vec             # <<<<<<<<<<<<<<
@@ -18369,7 +18978,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_rdiv(struct PyPetsc
   __pyx_r = __pyx_v_vec;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":274
+  /* "PETSc/petscvec.pxi":275
  *     return vec_mul(self, other)
  * 
  * cdef Vec vec_rdiv(Vec self, other):             # <<<<<<<<<<<<<<
@@ -18390,7 +18999,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_vec_rdiv(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":281
+/* "PETSc/petscvec.pxi":282
  * # --------------------------------------------------------------------
  * 
  * cdef inline int Vec_Sizes(object size, object bsize,             # <<<<<<<<<<<<<<
@@ -18404,16 +19013,16 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Vec_Sizes(PyObject *__pyx_v_si
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("Vec_Sizes", 0);
 
-  /* "PETSc/petscvec.pxi":283
+  /* "PETSc/petscvec.pxi":284
  * 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_ERR(5, 283, __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 == ((int)-1))) __PYX_ERR(5, 284, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":284
+  /* "PETSc/petscvec.pxi":285
  *                           PetscInt *b, PetscInt *n, PetscInt *N) except -1:
  *     Sys_Sizes(size, bsize, b, n, N)
  *     return 0             # <<<<<<<<<<<<<<
@@ -18423,7 +19032,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Vec_Sizes(PyObject *__pyx_v_si
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":281
+  /* "PETSc/petscvec.pxi":282
  * # --------------------------------------------------------------------
  * 
  * cdef inline int Vec_Sizes(object size, object bsize,             # <<<<<<<<<<<<<<
@@ -18440,7 +19049,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Vec_Sizes(PyObject *__pyx_v_si
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":291
+/* "PETSc/petscvec.pxi":292
  *                              const_PetscScalar[],PetscInsertMode)
  * 
  * cdef inline int vecsetvalues(PetscVec V,             # <<<<<<<<<<<<<<
@@ -18470,7 +19079,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vecsetvalues(Vec __pyx_v_V, Py
   int __pyx_t_8;
   __Pyx_RefNannySetupContext("vecsetvalues", 0);
 
-  /* "PETSc/petscvec.pxi":295
+  /* "PETSc/petscvec.pxi":296
  *                              int blocked, int local) except -1:
  *     # block size
  *     cdef PetscInt bs=1             # <<<<<<<<<<<<<<
@@ -18479,7 +19088,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vecsetvalues(Vec __pyx_v_V, Py
  */
   __pyx_v_bs = 1;
 
-  /* "PETSc/petscvec.pxi":296
+  /* "PETSc/petscvec.pxi":297
  *     # block size
  *     cdef PetscInt bs=1
  *     if blocked:             # <<<<<<<<<<<<<<
@@ -18489,16 +19098,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":297
+    /* "PETSc/petscvec.pxi":298
  *     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_ERR(5, 297, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetBlockSize(__pyx_v_V, (&__pyx_v_bs))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 298, __pyx_L1_error)
 
-    /* "PETSc/petscvec.pxi":298
+    /* "PETSc/petscvec.pxi":299
  *     if blocked:
  *         CHKERR( VecGetBlockSize(V, &bs) )
  *         if bs < 1: bs = 1             # <<<<<<<<<<<<<<
@@ -18510,7 +19119,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vecsetvalues(Vec __pyx_v_V, Py
       __pyx_v_bs = 1;
     }
 
-    /* "PETSc/petscvec.pxi":296
+    /* "PETSc/petscvec.pxi":297
  *     # block size
  *     cdef PetscInt bs=1
  *     if blocked:             # <<<<<<<<<<<<<<
@@ -18519,7 +19128,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vecsetvalues(Vec __pyx_v_V, Py
  */
   }
 
-  /* "PETSc/petscvec.pxi":300
+  /* "PETSc/petscvec.pxi":301
  *         if bs < 1: bs = 1
  *     # indices and values
  *     cdef PetscInt ni=0, nv=0             # <<<<<<<<<<<<<<
@@ -18529,7 +19138,7 @@ 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":301
+  /* "PETSc/petscvec.pxi":302
  *     # indices and values
  *     cdef PetscInt ni=0, nv=0
  *     cdef PetscInt    *i=NULL             # <<<<<<<<<<<<<<
@@ -18538,7 +19147,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vecsetvalues(Vec __pyx_v_V, Py
  */
   __pyx_v_i = NULL;
 
-  /* "PETSc/petscvec.pxi":302
+  /* "PETSc/petscvec.pxi":303
  *     cdef PetscInt ni=0, nv=0
  *     cdef PetscInt    *i=NULL
  *     cdef PetscScalar *v=NULL             # <<<<<<<<<<<<<<
@@ -18547,31 +19156,31 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vecsetvalues(Vec __pyx_v_V, Py
  */
   __pyx_v_v = NULL;
 
-  /* "PETSc/petscvec.pxi":303
+  /* "PETSc/petscvec.pxi":304
  *     cdef PetscInt    *i=NULL
  *     cdef PetscScalar *v=NULL
  *     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_ERR(5, 303, __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, 304, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_tmp1 = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscvec.pxi":304
+  /* "PETSc/petscvec.pxi":305
  *     cdef PetscScalar *v=NULL
  *     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_ERR(5, 304, __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, 305, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_tmp2 = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscvec.pxi":305
+  /* "PETSc/petscvec.pxi":306
  *     cdef object tmp1 = iarray_i(oi, &ni, &i)
  *     cdef object tmp2 = iarray_s(ov, &nv, &v)
  *     if ni*bs != nv: raise ValueError(             # <<<<<<<<<<<<<<
@@ -18581,20 +19190,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":307
+    /* "PETSc/petscvec.pxi":308
  *     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_ERR(5, 307, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ni); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 308, __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_ERR(5, 307, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nv); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 308, __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_ERR(5, 307, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_bs); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 308, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 307, __pyx_L1_error)
+    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 308, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_GIVEREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3);
@@ -18606,48 +19215,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":306
+    /* "PETSc/petscvec.pxi":307
  *     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_ERR(5, 306, __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, 307, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "PETSc/petscvec.pxi":305
+    /* "PETSc/petscvec.pxi":306
  *     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_ERR(5, 305, __pyx_L1_error)
+    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 306, __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_ERR(5, 305, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_6, NULL); 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;
     __Pyx_Raise(__pyx_t_5, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __PYX_ERR(5, 305, __pyx_L1_error)
+    __PYX_ERR(5, 306, __pyx_L1_error)
   }
 
-  /* "PETSc/petscvec.pxi":309
+  /* "PETSc/petscvec.pxi":310
  *         (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)-1L))) __PYX_ERR(5, 309, __pyx_L1_error)
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_oim); if (unlikely(__pyx_t_7 == ((InsertMode)((InsertMode)-1L)))) __PYX_ERR(5, 310, __pyx_L1_error)
   __pyx_v_addv = __pyx_t_7;
 
-  /* "PETSc/petscvec.pxi":311
+  /* "PETSc/petscvec.pxi":312
  *     cdef PetscInsertMode addv = insertmode(oim)
  *     # VecSetValuesXXX function
  *     cdef VecSetValuesFcn *setvalues = NULL             # <<<<<<<<<<<<<<
@@ -18656,7 +19265,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vecsetvalues(Vec __pyx_v_V, Py
  */
   __pyx_v_setvalues = NULL;
 
-  /* "PETSc/petscvec.pxi":312
+  /* "PETSc/petscvec.pxi":313
  *     # VecSetValuesXXX function
  *     cdef VecSetValuesFcn *setvalues = NULL
  *     if blocked and local: setvalues = VecSetValuesBlockedLocal             # <<<<<<<<<<<<<<
@@ -18677,7 +19286,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vecsetvalues(Vec __pyx_v_V, Py
     goto __pyx_L6;
   }
 
-  /* "PETSc/petscvec.pxi":313
+  /* "PETSc/petscvec.pxi":314
  *     cdef VecSetValuesFcn *setvalues = NULL
  *     if blocked and local: setvalues = VecSetValuesBlockedLocal
  *     elif blocked:         setvalues = VecSetValuesBlocked             # <<<<<<<<<<<<<<
@@ -18690,7 +19299,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vecsetvalues(Vec __pyx_v_V, Py
     goto __pyx_L6;
   }
 
-  /* "PETSc/petscvec.pxi":314
+  /* "PETSc/petscvec.pxi":315
  *     if blocked and local: setvalues = VecSetValuesBlockedLocal
  *     elif blocked:         setvalues = VecSetValuesBlocked
  *     elif local:           setvalues = VecSetValuesLocal             # <<<<<<<<<<<<<<
@@ -18703,7 +19312,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vecsetvalues(Vec __pyx_v_V, Py
     goto __pyx_L6;
   }
 
-  /* "PETSc/petscvec.pxi":315
+  /* "PETSc/petscvec.pxi":316
  *     elif blocked:         setvalues = VecSetValuesBlocked
  *     elif local:           setvalues = VecSetValuesLocal
  *     else:                 setvalues = VecSetValues             # <<<<<<<<<<<<<<
@@ -18715,16 +19324,16 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vecsetvalues(Vec __pyx_v_V, Py
   }
   __pyx_L6:;
 
-  /* "PETSc/petscvec.pxi":317
+  /* "PETSc/petscvec.pxi":318
  *     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_ERR(5, 317, __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 == ((int)-1))) __PYX_ERR(5, 318, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":318
+  /* "PETSc/petscvec.pxi":319
  *     # actual call
  *     CHKERR( setvalues(V, ni, i, v, addv) )
  *     return 0             # <<<<<<<<<<<<<<
@@ -18734,7 +19343,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vecsetvalues(Vec __pyx_v_V, Py
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":291
+  /* "PETSc/petscvec.pxi":292
  *                              const_PetscScalar[],PetscInsertMode)
  * 
  * cdef inline int vecsetvalues(PetscVec V,             # <<<<<<<<<<<<<<
@@ -18757,7 +19366,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vecsetvalues(Vec __pyx_v_V, Py
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":320
+/* "PETSc/petscvec.pxi":321
  *     return 0
  * 
  * cdef object vecgetvalues(PetscVec vec, object oindices, object values):             # <<<<<<<<<<<<<<
@@ -18782,7 +19391,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vecgetvalues(Vec __pyx_v_vec, PyObject
   __Pyx_RefNannySetupContext("vecgetvalues", 0);
   __Pyx_INCREF(__pyx_v_values);
 
-  /* "PETSc/petscvec.pxi":321
+  /* "PETSc/petscvec.pxi":322
  * 
  * cdef object vecgetvalues(PetscVec vec, object oindices, object values):
  *     cdef PetscInt ni=0, nv=0             # <<<<<<<<<<<<<<
@@ -18792,7 +19401,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vecgetvalues(Vec __pyx_v_vec, PyObject
   __pyx_v_ni = 0;
   __pyx_v_nv = 0;
 
-  /* "PETSc/petscvec.pxi":322
+  /* "PETSc/petscvec.pxi":323
  * cdef object vecgetvalues(PetscVec vec, object oindices, object values):
  *     cdef PetscInt ni=0, nv=0
  *     cdef PetscInt    *i=NULL             # <<<<<<<<<<<<<<
@@ -18801,7 +19410,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vecgetvalues(Vec __pyx_v_vec, PyObject
  */
   __pyx_v_i = NULL;
 
-  /* "PETSc/petscvec.pxi":323
+  /* "PETSc/petscvec.pxi":324
  *     cdef PetscInt ni=0, nv=0
  *     cdef PetscInt    *i=NULL
  *     cdef PetscScalar *v=NULL             # <<<<<<<<<<<<<<
@@ -18810,19 +19419,19 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vecgetvalues(Vec __pyx_v_vec, PyObject
  */
   __pyx_v_v = NULL;
 
-  /* "PETSc/petscvec.pxi":324
+  /* "PETSc/petscvec.pxi":325
  *     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_ERR(5, 324, __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, 325, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_indices = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscvec.pxi":325
+  /* "PETSc/petscvec.pxi":326
  *     cdef PetscScalar *v=NULL
  *     cdef object indices = iarray_i(oindices, &ni, &i)
  *     if values is None:             # <<<<<<<<<<<<<<
@@ -18833,31 +19442,31 @@ 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":326
+    /* "PETSc/petscvec.pxi":327
  *     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_ERR(5, 326, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_s(__pyx_v_ni)); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 327, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_values, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "PETSc/petscvec.pxi":327
+    /* "PETSc/petscvec.pxi":328
  *     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_ERR(5, 327, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_indices, __pyx_n_s_shape); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 328, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    if (__Pyx_PyObject_SetAttrStr(__pyx_v_values, __pyx_n_s_shape, __pyx_t_1) < 0) __PYX_ERR(5, 327, __pyx_L1_error)
+    if (__Pyx_PyObject_SetAttrStr(__pyx_v_values, __pyx_n_s_shape, __pyx_t_1) < 0) __PYX_ERR(5, 328, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "PETSc/petscvec.pxi":325
+    /* "PETSc/petscvec.pxi":326
  *     cdef PetscScalar *v=NULL
  *     cdef object indices = iarray_i(oindices, &ni, &i)
  *     if values is None:             # <<<<<<<<<<<<<<
@@ -18866,19 +19475,19 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vecgetvalues(Vec __pyx_v_vec, PyObject
  */
   }
 
-  /* "PETSc/petscvec.pxi":328
+  /* "PETSc/petscvec.pxi":329
  *         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_ERR(5, 328, __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, 329, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_values, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscvec.pxi":329
+  /* "PETSc/petscvec.pxi":330
  *         values.shape = indices.shape
  *     values = oarray_s(values, &nv, &v)
  *     if (ni != nv): raise ValueError(             # <<<<<<<<<<<<<<
@@ -18888,18 +19497,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":331
+    /* "PETSc/petscvec.pxi":332
  *     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_ERR(5, 331, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ni); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 332, __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_ERR(5, 331, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nv); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 332, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 331, __pyx_L1_error)
+    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 332, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
@@ -18907,40 +19516,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_ERR(5, 331, __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, 332, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-    /* "PETSc/petscvec.pxi":329
+    /* "PETSc/petscvec.pxi":330
  *         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_ERR(5, 329, __pyx_L1_error)
+    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 330, __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_ERR(5, 329, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 330, __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_ERR(5, 329, __pyx_L1_error)
+    __PYX_ERR(5, 330, __pyx_L1_error)
   }
 
-  /* "PETSc/petscvec.pxi":332
+  /* "PETSc/petscvec.pxi":333
  *         ("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_ERR(5, 332, __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 == ((int)-1))) __PYX_ERR(5, 333, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":333
+  /* "PETSc/petscvec.pxi":334
  *          "ni=%d, nv=%d") % (toInt(ni), toInt(nv)))
  *     CHKERR( VecGetValues(vec, ni, i, v) )
  *     return values             # <<<<<<<<<<<<<<
@@ -18952,7 +19561,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vecgetvalues(Vec __pyx_v_vec, PyObject
   __pyx_r = __pyx_v_values;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":320
+  /* "PETSc/petscvec.pxi":321
  *     return 0
  * 
  * cdef object vecgetvalues(PetscVec vec, object oindices, object values):             # <<<<<<<<<<<<<<
@@ -18975,7 +19584,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vecgetvalues(Vec __pyx_v_vec, PyObject
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":337
+/* "PETSc/petscvec.pxi":338
  * # --------------------------------------------------------------------
  * 
  * cdef inline _Vec_buffer vec_getbuffer_r(Vec self):             # <<<<<<<<<<<<<<
@@ -18991,25 +19600,25 @@ static CYTHON_INLINE struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_f_8pet
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("vec_getbuffer_r", 0);
 
-  /* "PETSc/petscvec.pxi":338
+  /* "PETSc/petscvec.pxi":339
  * 
  * 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_ERR(5, 338, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 339, __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 *)__pyx_ptype_8petsc4py_5PETSc__Vec_buffer), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 338, __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, 339, __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":339
+  /* "PETSc/petscvec.pxi":340
  * cdef inline _Vec_buffer vec_getbuffer_r(Vec self):
  *     cdef _Vec_buffer buf = _Vec_buffer(self)
  *     buf.readonly = 1             # <<<<<<<<<<<<<<
@@ -19018,7 +19627,7 @@ static CYTHON_INLINE struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_f_8pet
  */
   __pyx_v_buf->readonly = 1;
 
-  /* "PETSc/petscvec.pxi":340
+  /* "PETSc/petscvec.pxi":341
  *     cdef _Vec_buffer buf = _Vec_buffer(self)
  *     buf.readonly = 1
  *     return buf             # <<<<<<<<<<<<<<
@@ -19030,7 +19639,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":337
+  /* "PETSc/petscvec.pxi":338
  * # --------------------------------------------------------------------
  * 
  * cdef inline _Vec_buffer vec_getbuffer_r(Vec self):             # <<<<<<<<<<<<<<
@@ -19051,7 +19660,7 @@ static CYTHON_INLINE struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_f_8pet
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":342
+/* "PETSc/petscvec.pxi":343
  *     return buf
  * 
  * cdef inline _Vec_buffer vec_getbuffer_w(Vec self):             # <<<<<<<<<<<<<<
@@ -19067,25 +19676,25 @@ static CYTHON_INLINE struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_f_8pet
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("vec_getbuffer_w", 0);
 
-  /* "PETSc/petscvec.pxi":343
+  /* "PETSc/petscvec.pxi":344
  * 
  * 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_ERR(5, 343, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 344, __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 *)__pyx_ptype_8petsc4py_5PETSc__Vec_buffer), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 343, __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, 344, __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":344
+  /* "PETSc/petscvec.pxi":345
  * cdef inline _Vec_buffer vec_getbuffer_w(Vec self):
  *     cdef _Vec_buffer buf = _Vec_buffer(self)
  *     buf.readonly = 0             # <<<<<<<<<<<<<<
@@ -19094,7 +19703,7 @@ static CYTHON_INLINE struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_f_8pet
  */
   __pyx_v_buf->readonly = 0;
 
-  /* "PETSc/petscvec.pxi":345
+  /* "PETSc/petscvec.pxi":346
  *     cdef _Vec_buffer buf = _Vec_buffer(self)
  *     buf.readonly = 0
  *     return buf             # <<<<<<<<<<<<<<
@@ -19106,7 +19715,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":342
+  /* "PETSc/petscvec.pxi":343
  *     return buf
  * 
  * cdef inline _Vec_buffer vec_getbuffer_w(Vec self):             # <<<<<<<<<<<<<<
@@ -19127,7 +19736,7 @@ static CYTHON_INLINE struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *__pyx_f_8pet
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":347
+/* "PETSc/petscvec.pxi":348
  *     return buf
  * 
  * cdef inline ndarray vec_getarray_r(Vec self):             # <<<<<<<<<<<<<<
@@ -19142,7 +19751,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_vec_getarray_r(stru
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("vec_getarray_r", 0);
 
-  /* "PETSc/petscvec.pxi":348
+  /* "PETSc/petscvec.pxi":349
  * 
  * cdef inline ndarray vec_getarray_r(Vec self):
  *     return asarray(vec_getbuffer_r(self))             # <<<<<<<<<<<<<<
@@ -19150,16 +19759,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_ERR(5, 348, __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, 349, __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_ERR(5, 348, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_asarray(__pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 349, __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":347
+  /* "PETSc/petscvec.pxi":348
  *     return buf
  * 
  * cdef inline ndarray vec_getarray_r(Vec self):             # <<<<<<<<<<<<<<
@@ -19179,7 +19788,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_vec_getarray_r(stru
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":350
+/* "PETSc/petscvec.pxi":351
  *     return asarray(vec_getbuffer_r(self))
  * 
  * cdef inline ndarray vec_getarray_w(Vec self):             # <<<<<<<<<<<<<<
@@ -19194,7 +19803,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_vec_getarray_w(stru
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("vec_getarray_w", 0);
 
-  /* "PETSc/petscvec.pxi":351
+  /* "PETSc/petscvec.pxi":352
  * 
  * cdef inline ndarray vec_getarray_w(Vec self):
  *     return asarray(vec_getbuffer_w(self))             # <<<<<<<<<<<<<<
@@ -19202,16 +19811,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_ERR(5, 351, __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, 352, __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_ERR(5, 351, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_asarray(__pyx_t_1)); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 352, __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":350
+  /* "PETSc/petscvec.pxi":351
  *     return asarray(vec_getbuffer_r(self))
  * 
  * cdef inline ndarray vec_getarray_w(Vec self):             # <<<<<<<<<<<<<<
@@ -19231,7 +19840,7 @@ static CYTHON_INLINE PyArrayObject *__pyx_f_8petsc4py_5PETSc_vec_getarray_w(stru
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":353
+/* "PETSc/petscvec.pxi":354
  *     return asarray(vec_getbuffer_w(self))
  * 
  * cdef inline int vec_setarray(Vec self, object o) except -1:             # <<<<<<<<<<<<<<
@@ -19266,7 +19875,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vec_setarray(struct PyPetscVec
   int __pyx_t_16;
   __Pyx_RefNannySetupContext("vec_setarray", 0);
 
-  /* "PETSc/petscvec.pxi":354
+  /* "PETSc/petscvec.pxi":355
  * 
  * cdef inline int vec_setarray(Vec self, object o) except -1:
  *     cdef PetscInt na=0, nv=0, i=0             # <<<<<<<<<<<<<<
@@ -19277,7 +19886,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vec_setarray(struct PyPetscVec
   __pyx_v_nv = 0;
   __pyx_v_i = 0;
 
-  /* "PETSc/petscvec.pxi":355
+  /* "PETSc/petscvec.pxi":356
  * 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             # <<<<<<<<<<<<<<
@@ -19287,28 +19896,28 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vec_setarray(struct PyPetscVec
   __pyx_v_va = NULL;
   __pyx_v_vv = NULL;
 
-  /* "PETSc/petscvec.pxi":356
+  /* "PETSc/petscvec.pxi":357
  *     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_ERR(5, 356, __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, 357, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_ary = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscvec.pxi":357
+  /* "PETSc/petscvec.pxi":358
  *     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_ERR(5, 357, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetLocalSize(__pyx_v_self->vec, (&__pyx_v_nv))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 358, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":358
+  /* "PETSc/petscvec.pxi":359
  *     cdef ndarray ary = iarray_s(o, &na, &va)
  *     CHKERR( VecGetLocalSize(self.vec, &nv) )
  *     if (na != nv) and PyArray_NDIM(ary) > 0: raise ValueError(             # <<<<<<<<<<<<<<
@@ -19326,18 +19935,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":360
+    /* "PETSc/petscvec.pxi":361
  *     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_ERR(5, 360, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_na); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 361, __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_ERR(5, 360, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nv); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 361, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 360, __pyx_L1_error)
+    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 361, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_1);
@@ -19346,47 +19955,47 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vec_setarray(struct PyPetscVec
     __pyx_t_1 = 0;
     __pyx_t_5 = 0;
 
-    /* "PETSc/petscvec.pxi":359
+    /* "PETSc/petscvec.pxi":360
  *     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_ERR(5, 359, __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, 360, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "PETSc/petscvec.pxi":358
+    /* "PETSc/petscvec.pxi":359
  *     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_ERR(5, 358, __pyx_L1_error)
+    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 359, __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_ERR(5, 358, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_6, NULL); 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;
     __Pyx_Raise(__pyx_t_5, 0, 0, 0);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-    __PYX_ERR(5, 358, __pyx_L1_error)
+    __PYX_ERR(5, 359, __pyx_L1_error)
   }
 
-  /* "PETSc/petscvec.pxi":361
+  /* "PETSc/petscvec.pxi":362
  *         "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_ERR(5, 361, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetArray(__pyx_v_self->vec, (&__pyx_v_vv))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 362, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":362
+  /* "PETSc/petscvec.pxi":363
  *         (toInt(na), toInt(nv)) )
  *     CHKERR( VecGetArray(self.vec, &vv) )
  *     try:             # <<<<<<<<<<<<<<
@@ -19395,7 +20004,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vec_setarray(struct PyPetscVec
  */
   /*try:*/ {
 
-    /* "PETSc/petscvec.pxi":363
+    /* "PETSc/petscvec.pxi":364
  *     CHKERR( VecGetArray(self.vec, &vv) )
  *     try:
  *         if PyArray_NDIM(ary) == 0:             # <<<<<<<<<<<<<<
@@ -19405,7 +20014,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":364
+      /* "PETSc/petscvec.pxi":365
  *     try:
  *         if PyArray_NDIM(ary) == 0:
  *             for i from 0 <= i < nv:             # <<<<<<<<<<<<<<
@@ -19415,7 +20024,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":365
+        /* "PETSc/petscvec.pxi":366
  *         if PyArray_NDIM(ary) == 0:
  *             for i from 0 <= i < nv:
  *                 vv[i] = va[0]             # <<<<<<<<<<<<<<
@@ -19425,7 +20034,7 @@ 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
+      /* "PETSc/petscvec.pxi":364
  *     CHKERR( VecGetArray(self.vec, &vv) )
  *     try:
  *         if PyArray_NDIM(ary) == 0:             # <<<<<<<<<<<<<<
@@ -19435,7 +20044,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vec_setarray(struct PyPetscVec
       goto __pyx_L9;
     }
 
-    /* "PETSc/petscvec.pxi":367
+    /* "PETSc/petscvec.pxi":368
  *                 vv[i] = va[0]
  *         else:
  *             CHKERR( PetscMemcpy(vv, va, <size_t>nv*sizeof(PetscScalar)) )             # <<<<<<<<<<<<<<
@@ -19443,12 +20052,12 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vec_setarray(struct PyPetscVec
  *         CHKERR( VecRestoreArray(self.vec, &vv) )
  */
     /*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_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 == ((int)-1))) __PYX_ERR(5, 368, __pyx_L7_error)
     }
     __pyx_L9:;
   }
 
-  /* "PETSc/petscvec.pxi":369
+  /* "PETSc/petscvec.pxi":370
  *             CHKERR( PetscMemcpy(vv, va, <size_t>nv*sizeof(PetscScalar)) )
  *     finally:
  *         CHKERR( VecRestoreArray(self.vec, &vv) )             # <<<<<<<<<<<<<<
@@ -19457,7 +20066,7 @@ 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_ERR(5, 369, __pyx_L1_error)
+      __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecRestoreArray(__pyx_v_self->vec, (&__pyx_v_vv))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 370, __pyx_L1_error)
       goto __pyx_L8;
     }
     /*exception exit:*/{
@@ -19478,9 +20087,8 @@ 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_ERR(5, 369, __pyx_L13_error)
+        __pyx_t_16 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecRestoreArray(__pyx_v_self->vec, (&__pyx_v_vv))); if (unlikely(__pyx_t_16 == ((int)-1))) __PYX_ERR(5, 370, __pyx_L13_error)
       }
-      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_13);
         __Pyx_XGIVEREF(__pyx_t_14);
@@ -19495,7 +20103,6 @@ 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);
@@ -19511,7 +20118,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vec_setarray(struct PyPetscVec
     __pyx_L8:;
   }
 
-  /* "PETSc/petscvec.pxi":370
+  /* "PETSc/petscvec.pxi":371
  *     finally:
  *         CHKERR( VecRestoreArray(self.vec, &vv) )
  *     return 0             # <<<<<<<<<<<<<<
@@ -19521,7 +20128,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vec_setarray(struct PyPetscVec
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":353
+  /* "PETSc/petscvec.pxi":354
  *     return asarray(vec_getbuffer_w(self))
  * 
  * cdef inline int vec_setarray(Vec self, object o) except -1:             # <<<<<<<<<<<<<<
@@ -19542,7 +20149,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_vec_setarray(struct PyPetscVec
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":372
+/* "PETSc/petscvec.pxi":373
  *     return 0
  * 
  * cdef object vec_getitem(Vec self, object i):             # <<<<<<<<<<<<<<
@@ -19569,7 +20176,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vec_getitem(struct PyPetscVecObject *_
   __Pyx_RefNannySetupContext("vec_getitem", 0);
   __Pyx_INCREF(__pyx_v_i);
 
-  /* "PETSc/petscvec.pxi":373
+  /* "PETSc/petscvec.pxi":374
  * 
  * cdef object vec_getitem(Vec self, object i):
  *     cdef PetscInt N=0             # <<<<<<<<<<<<<<
@@ -19578,7 +20185,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vec_getitem(struct PyPetscVecObject *_
  */
   __pyx_v_N = 0;
 
-  /* "PETSc/petscvec.pxi":374
+  /* "PETSc/petscvec.pxi":375
  * cdef object vec_getitem(Vec self, object i):
  *     cdef PetscInt N=0
  *     if i is Ellipsis:             # <<<<<<<<<<<<<<
@@ -19589,7 +20196,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":375
+    /* "PETSc/petscvec.pxi":376
  *     cdef PetscInt N=0
  *     if i is Ellipsis:
  *         return asarray(self)             # <<<<<<<<<<<<<<
@@ -19597,13 +20204,13 @@ 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_ERR(5, 375, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_asarray(((PyObject *)__pyx_v_self))); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 376, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
 
-    /* "PETSc/petscvec.pxi":374
+    /* "PETSc/petscvec.pxi":375
  * cdef object vec_getitem(Vec self, object i):
  *     cdef PetscInt N=0
  *     if i is Ellipsis:             # <<<<<<<<<<<<<<
@@ -19612,7 +20219,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vec_getitem(struct PyPetscVecObject *_
  */
   }
 
-  /* "PETSc/petscvec.pxi":376
+  /* "PETSc/petscvec.pxi":377
  *     if i is Ellipsis:
  *         return asarray(self)
  *     if isinstance(i, slice):             # <<<<<<<<<<<<<<
@@ -19623,28 +20230,28 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vec_getitem(struct PyPetscVecObject *_
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/petscvec.pxi":377
+    /* "PETSc/petscvec.pxi":378
  *         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_ERR(5, 377, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetSize(__pyx_v_self->vec, (&__pyx_v_N))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(5, 378, __pyx_L1_error)
 
-    /* "PETSc/petscvec.pxi":378
+    /* "PETSc/petscvec.pxi":379
  *     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_ERR(5, 378, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_i, __pyx_n_s_indices); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 379, __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_ERR(5, 378, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 379, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __pyx_t_7 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
       __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5);
       if (likely(__pyx_t_7)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -19654,24 +20261,44 @@ 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_ERR(5, 378, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 379, __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_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_ERR(5, 378, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_7, __pyx_t_6};
+        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 379, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_7, __pyx_t_6};
+        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 379, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 379, __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_ERR(5, 379, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
       PyObject* sequence = __pyx_t_3;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -19679,9 +20306,9 @@ 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_ERR(5, 378, __pyx_L1_error)
+        __PYX_ERR(5, 379, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
@@ -19695,17 +20322,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_ERR(5, 378, __pyx_L1_error)
+      __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 379, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 378, __pyx_L1_error)
+      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 379, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
-      __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 378, __pyx_L1_error)
+      __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 379, __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_ERR(5, 378, __pyx_L1_error)
+      __pyx_t_7 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 379, __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;
@@ -19715,7 +20342,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_ERR(5, 378, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_7), 3) < 0) __PYX_ERR(5, 379, __pyx_L1_error)
       __pyx_t_9 = NULL;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       goto __pyx_L6_unpacking_done;
@@ -19723,7 +20350,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_ERR(5, 378, __pyx_L1_error)
+      __PYX_ERR(5, 379, __pyx_L1_error)
       __pyx_L6_unpacking_done:;
     }
     __pyx_v_start = __pyx_t_5;
@@ -19733,19 +20360,19 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vec_getitem(struct PyPetscVecObject *_
     __pyx_v_stride = __pyx_t_6;
     __pyx_t_6 = 0;
 
-    /* "PETSc/petscvec.pxi":379
+    /* "PETSc/petscvec.pxi":380
  *         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_ERR(5, 379, __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, 380, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_i, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "PETSc/petscvec.pxi":376
+    /* "PETSc/petscvec.pxi":377
  *     if i is Ellipsis:
  *         return asarray(self)
  *     if isinstance(i, slice):             # <<<<<<<<<<<<<<
@@ -19754,7 +20381,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vec_getitem(struct PyPetscVecObject *_
  */
   }
 
-  /* "PETSc/petscvec.pxi":380
+  /* "PETSc/petscvec.pxi":381
  *         start, stop, stride = i.indices(toInt(N))
  *         i = arange(start, stop, stride)
  *     return vecgetvalues(self.vec, i, None)             # <<<<<<<<<<<<<<
@@ -19762,13 +20389,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_ERR(5, 380, __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, 381, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":372
+  /* "PETSc/petscvec.pxi":373
  *     return 0
  * 
  * cdef object vec_getitem(Vec self, object i):             # <<<<<<<<<<<<<<
@@ -19795,7 +20422,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_vec_getitem(struct PyPetscVecObject *_
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":382
+/* "PETSc/petscvec.pxi":383
  *     return vecgetvalues(self.vec, i, None)
  * 
  * cdef int vec_setitem(Vec self, object i, object v) except -1:             # <<<<<<<<<<<<<<
@@ -19822,7 +20449,7 @@ static int __pyx_f_8petsc4py_5PETSc_vec_setitem(struct PyPetscVecObject *__pyx_v
   __Pyx_RefNannySetupContext("vec_setitem", 0);
   __Pyx_INCREF(__pyx_v_i);
 
-  /* "PETSc/petscvec.pxi":383
+  /* "PETSc/petscvec.pxi":384
  * 
  * cdef int vec_setitem(Vec self, object i, object v) except -1:
  *     cdef PetscInt N=0             # <<<<<<<<<<<<<<
@@ -19831,7 +20458,7 @@ static int __pyx_f_8petsc4py_5PETSc_vec_setitem(struct PyPetscVecObject *__pyx_v
  */
   __pyx_v_N = 0;
 
-  /* "PETSc/petscvec.pxi":384
+  /* "PETSc/petscvec.pxi":385
  * cdef int vec_setitem(Vec self, object i, object v) except -1:
  *     cdef PetscInt N=0
  *     if i is Ellipsis:             # <<<<<<<<<<<<<<
@@ -19842,18 +20469,18 @@ 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":385
+    /* "PETSc/petscvec.pxi":386
  *     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_ERR(5, 385, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_vec_setarray(__pyx_v_self, __pyx_v_v); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(5, 386, __pyx_L1_error)
     __pyx_r = __pyx_t_3;
     goto __pyx_L0;
 
-    /* "PETSc/petscvec.pxi":384
+    /* "PETSc/petscvec.pxi":385
  * cdef int vec_setitem(Vec self, object i, object v) except -1:
  *     cdef PetscInt N=0
  *     if i is Ellipsis:             # <<<<<<<<<<<<<<
@@ -19862,7 +20489,7 @@ static int __pyx_f_8petsc4py_5PETSc_vec_setitem(struct PyPetscVecObject *__pyx_v
  */
   }
 
-  /* "PETSc/petscvec.pxi":386
+  /* "PETSc/petscvec.pxi":387
  *     if i is Ellipsis:
  *         return vec_setarray(self, v)
  *     if isinstance(i, slice):             # <<<<<<<<<<<<<<
@@ -19873,28 +20500,28 @@ 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":387
+    /* "PETSc/petscvec.pxi":388
  *         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_ERR(5, 387, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetSize(__pyx_v_self->vec, (&__pyx_v_N))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(5, 388, __pyx_L1_error)
 
-    /* "PETSc/petscvec.pxi":388
+    /* "PETSc/petscvec.pxi":389
  *     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_ERR(5, 388, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_i, __pyx_n_s_indices); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 389, __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_ERR(5, 388, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 389, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __pyx_t_7 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
       __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5);
       if (likely(__pyx_t_7)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -19904,24 +20531,44 @@ 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_ERR(5, 388, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 389, __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_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_ERR(5, 388, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_4);
-      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_7, __pyx_t_6};
+        __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 389, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+        __Pyx_GOTREF(__pyx_t_4);
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_5)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_7, __pyx_t_6};
+        __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_5, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 389, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+        __Pyx_GOTREF(__pyx_t_4);
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 389, __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_ERR(5, 389, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_4);
+        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     if ((likely(PyTuple_CheckExact(__pyx_t_4))) || (PyList_CheckExact(__pyx_t_4))) {
       PyObject* sequence = __pyx_t_4;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -19929,9 +20576,9 @@ 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_ERR(5, 388, __pyx_L1_error)
+        __PYX_ERR(5, 389, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
@@ -19945,17 +20592,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_ERR(5, 388, __pyx_L1_error)
+      __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 389, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
-      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 388, __pyx_L1_error)
+      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(5, 389, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
-      __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 388, __pyx_L1_error)
+      __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(5, 389, __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_ERR(5, 388, __pyx_L1_error)
+      __pyx_t_7 = PyObject_GetIter(__pyx_t_4); if (unlikely(!__pyx_t_7)) __PYX_ERR(5, 389, __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;
@@ -19965,7 +20612,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_ERR(5, 388, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_7), 3) < 0) __PYX_ERR(5, 389, __pyx_L1_error)
       __pyx_t_9 = NULL;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       goto __pyx_L6_unpacking_done;
@@ -19973,7 +20620,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_ERR(5, 388, __pyx_L1_error)
+      __PYX_ERR(5, 389, __pyx_L1_error)
       __pyx_L6_unpacking_done:;
     }
     __pyx_v_start = __pyx_t_5;
@@ -19983,19 +20630,19 @@ 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":389
+    /* "PETSc/petscvec.pxi":390
  *         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_ERR(5, 389, __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, 390, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_i, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "PETSc/petscvec.pxi":386
+    /* "PETSc/petscvec.pxi":387
  *     if i is Ellipsis:
  *         return vec_setarray(self, v)
  *     if isinstance(i, slice):             # <<<<<<<<<<<<<<
@@ -20004,16 +20651,16 @@ static int __pyx_f_8petsc4py_5PETSc_vec_setitem(struct PyPetscVecObject *__pyx_v
  */
   }
 
-  /* "PETSc/petscvec.pxi":390
+  /* "PETSc/petscvec.pxi":391
  *         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_ERR(5, 390, __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 == ((int)-1))) __PYX_ERR(5, 391, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":391
+  /* "PETSc/petscvec.pxi":392
  *         i = arange(start, stop, stride)
  *     vecsetvalues(self.vec, i, v, None, 0, 0)
  *     return 0             # <<<<<<<<<<<<<<
@@ -20023,7 +20670,7 @@ static int __pyx_f_8petsc4py_5PETSc_vec_setitem(struct PyPetscVecObject *__pyx_v
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":382
+  /* "PETSc/petscvec.pxi":383
  *     return vecgetvalues(self.vec, i, None)
  * 
  * cdef int vec_setitem(Vec self, object i, object v) except -1:             # <<<<<<<<<<<<<<
@@ -20049,7 +20696,7 @@ static int __pyx_f_8petsc4py_5PETSc_vec_setitem(struct PyPetscVecObject *__pyx_v
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":403
+/* "PETSc/petscvec.pxi":404
  * # --------------------------------------------------------------------
  * 
  * cdef int Vec_AcquireArray(PetscVec v, PetscScalar *a[], int ro) nogil except -1:             # <<<<<<<<<<<<<<
@@ -20062,7 +20709,7 @@ static int __pyx_f_8petsc4py_5PETSc_Vec_AcquireArray(Vec __pyx_v_v, PetscScalar
   int __pyx_t_1;
   int __pyx_t_2;
 
-  /* "PETSc/petscvec.pxi":404
+  /* "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) )             # <<<<<<<<<<<<<<
@@ -20071,11 +20718,11 @@ 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_ERR(5, 404, __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 == ((int)-1))) __PYX_ERR(5, 405, __pyx_L1_error)
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscvec.pxi":405
+  /* "PETSc/petscvec.pxi":406
  * 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) )             # <<<<<<<<<<<<<<
@@ -20083,11 +20730,11 @@ static int __pyx_f_8petsc4py_5PETSc_Vec_AcquireArray(Vec __pyx_v_v, PetscScalar
  * 
  */
   /*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_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetArray(__pyx_v_v, __pyx_v_a)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 406, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/petscvec.pxi":406
+  /* "PETSc/petscvec.pxi":407
  *     if ro: CHKERR( VecGetArrayRead(v, <const_PetscScalar**>a) )
  *     else:  CHKERR( VecGetArray(v, a) )
  *     return 0             # <<<<<<<<<<<<<<
@@ -20097,7 +20744,7 @@ static int __pyx_f_8petsc4py_5PETSc_Vec_AcquireArray(Vec __pyx_v_v, PetscScalar
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":403
+  /* "PETSc/petscvec.pxi":404
  * # --------------------------------------------------------------------
  * 
  * cdef int Vec_AcquireArray(PetscVec v, PetscScalar *a[], int ro) nogil except -1:             # <<<<<<<<<<<<<<
@@ -20109,11 +20756,11 @@ static int __pyx_f_8petsc4py_5PETSc_Vec_AcquireArray(Vec __pyx_v_v, PetscScalar
   __pyx_L1_error:;
   {
     #ifdef WITH_THREAD
-    PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
     #endif
     __Pyx_AddTraceback("petsc4py.PETSc.Vec_AcquireArray", __pyx_clineno, __pyx_lineno, __pyx_filename);
     #ifdef WITH_THREAD
-    PyGILState_Release(__pyx_gilstate_save);
+    __Pyx_PyGILState_Release(__pyx_gilstate_save);
     #endif
   }
   __pyx_r = -1;
@@ -20121,7 +20768,7 @@ static int __pyx_f_8petsc4py_5PETSc_Vec_AcquireArray(Vec __pyx_v_v, PetscScalar
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":408
+/* "PETSc/petscvec.pxi":409
  *     return 0
  * 
  * cdef int Vec_ReleaseArray(PetscVec v, PetscScalar *a[], int ro) nogil except -1:             # <<<<<<<<<<<<<<
@@ -20134,7 +20781,7 @@ static int __pyx_f_8petsc4py_5PETSc_Vec_ReleaseArray(Vec __pyx_v_v, PetscScalar
   int __pyx_t_1;
   int __pyx_t_2;
 
-  /* "PETSc/petscvec.pxi":409
+  /* "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) )             # <<<<<<<<<<<<<<
@@ -20143,11 +20790,11 @@ 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_ERR(5, 409, __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 == ((int)-1))) __PYX_ERR(5, 410, __pyx_L1_error)
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscvec.pxi":410
+  /* "PETSc/petscvec.pxi":411
  * 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) )             # <<<<<<<<<<<<<<
@@ -20155,11 +20802,11 @@ static int __pyx_f_8petsc4py_5PETSc_Vec_ReleaseArray(Vec __pyx_v_v, PetscScalar
  * 
  */
   /*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_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecRestoreArray(__pyx_v_v, __pyx_v_a)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 411, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/petscvec.pxi":411
+  /* "PETSc/petscvec.pxi":412
  *     if ro: CHKERR( VecRestoreArrayRead(v, <const_PetscScalar**>a) )
  *     else:  CHKERR( VecRestoreArray(v, a) )
  *     return 0             # <<<<<<<<<<<<<<
@@ -20169,7 +20816,7 @@ static int __pyx_f_8petsc4py_5PETSc_Vec_ReleaseArray(Vec __pyx_v_v, PetscScalar
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":408
+  /* "PETSc/petscvec.pxi":409
  *     return 0
  * 
  * cdef int Vec_ReleaseArray(PetscVec v, PetscScalar *a[], int ro) nogil except -1:             # <<<<<<<<<<<<<<
@@ -20181,11 +20828,11 @@ static int __pyx_f_8petsc4py_5PETSc_Vec_ReleaseArray(Vec __pyx_v_v, PetscScalar
   __pyx_L1_error:;
   {
     #ifdef WITH_THREAD
-    PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
     #endif
     __Pyx_AddTraceback("petsc4py.PETSc.Vec_ReleaseArray", __pyx_clineno, __pyx_lineno, __pyx_filename);
     #ifdef WITH_THREAD
-    PyGILState_Release(__pyx_gilstate_save);
+    __Pyx_PyGILState_Release(__pyx_gilstate_save);
     #endif
   }
   __pyx_r = -1;
@@ -20193,10 +20840,10 @@ static int __pyx_f_8petsc4py_5PETSc_Vec_ReleaseArray(Vec __pyx_v_v, PetscScalar
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":421
+/* "PETSc/petscvec.pxi":422
  *     cdef bint hasarray
  * 
- *     def __cinit__(self, Vec vec not None, bint readonly=0):             # <<<<<<<<<<<<<<
+ *     def __cinit__(self, Vec vec, bint readonly=0):             # <<<<<<<<<<<<<<
  *         cdef PetscVec v = vec.vec
  *         CHKERR( PetscINCREF(<PetscObject*>&v) )
  */
@@ -20217,7 +20864,9 @@ static int __pyx_pw_8petsc4py_5PETSc_11_Vec_buffer_1__cinit__(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -20226,6 +20875,7 @@ static int __pyx_pw_8petsc4py_5PETSc_11_Vec_buffer_1__cinit__(PyObject *__pyx_v_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vec)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_readonly);
@@ -20233,11 +20883,12 @@ 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_ERR(5, 421, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__cinit__") < 0)) __PYX_ERR(5, 422, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -20245,20 +20896,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_ERR(5, 421, __pyx_L3_error)
+      __pyx_v_readonly = __Pyx_PyObject_IsTrue(values[1]); if (unlikely((__pyx_v_readonly == (int)-1) && PyErr_Occurred())) __PYX_ERR(5, 422, __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_ERR(5, 421, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(5, 422, __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_ERR(5, 421, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) __PYX_ERR(5, 422, __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 */
@@ -20279,9 +20930,9 @@ static int __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer___cinit__(struct __pyx_obj_8p
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "PETSc/petscvec.pxi":422
+  /* "PETSc/petscvec.pxi":423
  * 
- *     def __cinit__(self, Vec vec not None, bint readonly=0):
+ *     def __cinit__(self, Vec vec, bint readonly=0):
  *         cdef PetscVec v = vec.vec             # <<<<<<<<<<<<<<
  *         CHKERR( PetscINCREF(<PetscObject*>&v) )
  *         self.vec = v
@@ -20289,16 +20940,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":423
- *     def __cinit__(self, Vec vec not None, bint readonly=0):
+  /* "PETSc/petscvec.pxi":424
+ *     def __cinit__(self, Vec vec, 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_ERR(5, 423, __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 == ((int)-1))) __PYX_ERR(5, 424, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":424
+  /* "PETSc/petscvec.pxi":425
  *         cdef PetscVec v = vec.vec
  *         CHKERR( PetscINCREF(<PetscObject*>&v) )
  *         self.vec = v             # <<<<<<<<<<<<<<
@@ -20307,7 +20958,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":425
+  /* "PETSc/petscvec.pxi":426
  *         CHKERR( PetscINCREF(<PetscObject*>&v) )
  *         self.vec = v
  *         self.size = 0             # <<<<<<<<<<<<<<
@@ -20316,7 +20967,7 @@ static int __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer___cinit__(struct __pyx_obj_8p
  */
   __pyx_v_self->size = 0;
 
-  /* "PETSc/petscvec.pxi":426
+  /* "PETSc/petscvec.pxi":427
  *         self.vec = v
  *         self.size = 0
  *         self.data = NULL             # <<<<<<<<<<<<<<
@@ -20325,7 +20976,7 @@ static int __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer___cinit__(struct __pyx_obj_8p
  */
   __pyx_v_self->data = NULL;
 
-  /* "PETSc/petscvec.pxi":427
+  /* "PETSc/petscvec.pxi":428
  *         self.size = 0
  *         self.data = NULL
  *         self.readonly = 1 if readonly else 0             # <<<<<<<<<<<<<<
@@ -20339,7 +20990,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":428
+  /* "PETSc/petscvec.pxi":429
  *         self.data = NULL
  *         self.readonly = 1 if readonly else 0
  *         self.hasarray = 0             # <<<<<<<<<<<<<<
@@ -20348,10 +20999,10 @@ static int __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer___cinit__(struct __pyx_obj_8p
  */
   __pyx_v_self->hasarray = 0;
 
-  /* "PETSc/petscvec.pxi":421
+  /* "PETSc/petscvec.pxi":422
  *     cdef bint hasarray
  * 
- *     def __cinit__(self, Vec vec not None, bint readonly=0):             # <<<<<<<<<<<<<<
+ *     def __cinit__(self, Vec vec, bint readonly=0):             # <<<<<<<<<<<<<<
  *         cdef PetscVec v = vec.vec
  *         CHKERR( PetscINCREF(<PetscObject*>&v) )
  */
@@ -20367,7 +21018,7 @@ static int __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer___cinit__(struct __pyx_obj_8p
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":430
+/* "PETSc/petscvec.pxi":431
  *         self.hasarray = 0
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -20393,7 +21044,7 @@ static void __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_2__dealloc__(struct __pyx_ob
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("__dealloc__", 0);
 
-  /* "PETSc/petscvec.pxi":431
+  /* "PETSc/petscvec.pxi":432
  * 
  *     def __dealloc__(self):
  *         if self.hasarray and self.vec != NULL:             # <<<<<<<<<<<<<<
@@ -20411,16 +21062,16 @@ 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":432
+    /* "PETSc/petscvec.pxi":433
  *     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_ERR(5, 432, __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 == ((int)-1))) __PYX_ERR(5, 433, __pyx_L1_error)
 
-    /* "PETSc/petscvec.pxi":431
+    /* "PETSc/petscvec.pxi":432
  * 
  *     def __dealloc__(self):
  *         if self.hasarray and self.vec != NULL:             # <<<<<<<<<<<<<<
@@ -20429,16 +21080,16 @@ static void __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_2__dealloc__(struct __pyx_ob
  */
   }
 
-  /* "PETSc/petscvec.pxi":433
+  /* "PETSc/petscvec.pxi":434
  *         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_ERR(5, 433, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecDestroy((&__pyx_v_self->vec))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(5, 434, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":430
+  /* "PETSc/petscvec.pxi":431
  *         self.hasarray = 0
  * 
  *     def __dealloc__(self):             # <<<<<<<<<<<<<<
@@ -20449,12 +21100,12 @@ static void __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_2__dealloc__(struct __pyx_ob
   /* function exit code */
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_WriteUnraisable("petsc4py.PETSc._Vec_buffer.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 0, 0);
+  __Pyx_WriteUnraisable("petsc4py.PETSc._Vec_buffer.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
 }
 
-/* "PETSc/petscvec.pxi":437
+/* "PETSc/petscvec.pxi":438
  *     #
  * 
  *     cdef int acquire(self) nogil except -1:             # <<<<<<<<<<<<<<
@@ -20468,7 +21119,7 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_acquire(struct __pyx_obj_8pets
   int __pyx_t_2;
   int __pyx_t_3;
 
-  /* "PETSc/petscvec.pxi":438
+  /* "PETSc/petscvec.pxi":439
  * 
  *     cdef int acquire(self) nogil except -1:
  *         if not self.hasarray and self.vec != NULL:             # <<<<<<<<<<<<<<
@@ -20486,25 +21137,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":439
+    /* "PETSc/petscvec.pxi":440
  *     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_ERR(5, 439, __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 == ((int)-1))) __PYX_ERR(5, 440, __pyx_L1_error)
 
-    /* "PETSc/petscvec.pxi":440
+    /* "PETSc/petscvec.pxi":441
  *         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_ERR(5, 440, __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 == ((int)-1))) __PYX_ERR(5, 441, __pyx_L1_error)
 
-    /* "PETSc/petscvec.pxi":441
+    /* "PETSc/petscvec.pxi":442
  *             CHKERR( VecGetLocalSize(self.vec, &self.size) )
  *             Vec_AcquireArray(self.vec, &self.data, self.readonly)
  *             self.hasarray = 1             # <<<<<<<<<<<<<<
@@ -20513,7 +21164,7 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_acquire(struct __pyx_obj_8pets
  */
     __pyx_v_self->hasarray = 1;
 
-    /* "PETSc/petscvec.pxi":438
+    /* "PETSc/petscvec.pxi":439
  * 
  *     cdef int acquire(self) nogil except -1:
  *         if not self.hasarray and self.vec != NULL:             # <<<<<<<<<<<<<<
@@ -20522,7 +21173,7 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_acquire(struct __pyx_obj_8pets
  */
   }
 
-  /* "PETSc/petscvec.pxi":442
+  /* "PETSc/petscvec.pxi":443
  *             Vec_AcquireArray(self.vec, &self.data, self.readonly)
  *             self.hasarray = 1
  *         return 0             # <<<<<<<<<<<<<<
@@ -20532,7 +21183,7 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_acquire(struct __pyx_obj_8pets
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":437
+  /* "PETSc/petscvec.pxi":438
  *     #
  * 
  *     cdef int acquire(self) nogil except -1:             # <<<<<<<<<<<<<<
@@ -20544,11 +21195,11 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_acquire(struct __pyx_obj_8pets
   __pyx_L1_error:;
   {
     #ifdef WITH_THREAD
-    PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
     #endif
     __Pyx_AddTraceback("petsc4py.PETSc._Vec_buffer.acquire", __pyx_clineno, __pyx_lineno, __pyx_filename);
     #ifdef WITH_THREAD
-    PyGILState_Release(__pyx_gilstate_save);
+    __Pyx_PyGILState_Release(__pyx_gilstate_save);
     #endif
   }
   __pyx_r = -1;
@@ -20556,7 +21207,7 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_acquire(struct __pyx_obj_8pets
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":444
+/* "PETSc/petscvec.pxi":445
  *         return 0
  * 
  *     cdef int release(self) nogil except -1:             # <<<<<<<<<<<<<<
@@ -20570,7 +21221,7 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_release(struct __pyx_obj_8pets
   int __pyx_t_2;
   int __pyx_t_3;
 
-  /* "PETSc/petscvec.pxi":445
+  /* "PETSc/petscvec.pxi":446
  * 
  *     cdef int release(self) nogil except -1:
  *         if self.hasarray and self.vec != NULL:             # <<<<<<<<<<<<<<
@@ -20588,7 +21239,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":446
+    /* "PETSc/petscvec.pxi":447
  *     cdef int release(self) nogil except -1:
  *         if self.hasarray and self.vec != NULL:
  *             self.size = 0             # <<<<<<<<<<<<<<
@@ -20597,16 +21248,16 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_release(struct __pyx_obj_8pets
  */
     __pyx_v_self->size = 0;
 
-    /* "PETSc/petscvec.pxi":447
+    /* "PETSc/petscvec.pxi":448
  *         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_ERR(5, 447, __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 == ((int)-1))) __PYX_ERR(5, 448, __pyx_L1_error)
 
-    /* "PETSc/petscvec.pxi":448
+    /* "PETSc/petscvec.pxi":449
  *             self.size = 0
  *             Vec_ReleaseArray(self.vec, &self.data, self.readonly)
  *             self.hasarray = 0             # <<<<<<<<<<<<<<
@@ -20615,7 +21266,7 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_release(struct __pyx_obj_8pets
  */
     __pyx_v_self->hasarray = 0;
 
-    /* "PETSc/petscvec.pxi":445
+    /* "PETSc/petscvec.pxi":446
  * 
  *     cdef int release(self) nogil except -1:
  *         if self.hasarray and self.vec != NULL:             # <<<<<<<<<<<<<<
@@ -20624,7 +21275,7 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_release(struct __pyx_obj_8pets
  */
   }
 
-  /* "PETSc/petscvec.pxi":449
+  /* "PETSc/petscvec.pxi":450
  *             Vec_ReleaseArray(self.vec, &self.data, self.readonly)
  *             self.hasarray = 0
  *         return 0             # <<<<<<<<<<<<<<
@@ -20634,7 +21285,7 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_release(struct __pyx_obj_8pets
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":444
+  /* "PETSc/petscvec.pxi":445
  *         return 0
  * 
  *     cdef int release(self) nogil except -1:             # <<<<<<<<<<<<<<
@@ -20646,11 +21297,11 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_release(struct __pyx_obj_8pets
   __pyx_L1_error:;
   {
     #ifdef WITH_THREAD
-    PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+    PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
     #endif
     __Pyx_AddTraceback("petsc4py.PETSc._Vec_buffer.release", __pyx_clineno, __pyx_lineno, __pyx_filename);
     #ifdef WITH_THREAD
-    PyGILState_Release(__pyx_gilstate_save);
+    __Pyx_PyGILState_Release(__pyx_gilstate_save);
     #endif
   }
   __pyx_r = -1;
@@ -20658,7 +21309,7 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_release(struct __pyx_obj_8pets
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":453
+/* "PETSc/petscvec.pxi":454
  *     # buffer interface (PEP 3118)
  * 
  *     cdef int acquirebuffer(self, Py_buffer *view, int flags) except -1:             # <<<<<<<<<<<<<<
@@ -20672,25 +21323,25 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_acquirebuffer(struct __pyx_obj
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("acquirebuffer", 0);
 
-  /* "PETSc/petscvec.pxi":454
+  /* "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)
  */
-  __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)
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc__Vec_buffer *)__pyx_v_self->__pyx_vtab)->acquire(__pyx_v_self); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(5, 455, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":455
+  /* "PETSc/petscvec.pxi":456
  *     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_ERR(5, 455, __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 == ((int)-1))) __PYX_ERR(5, 456, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":457
+  /* "PETSc/petscvec.pxi":458
  *         PyPetscBuffer_FillInfo(view, <void*>self.data, self.size,
  *                                c's', self.readonly, flags)
  *         view.obj = self             # <<<<<<<<<<<<<<
@@ -20703,7 +21354,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":458
+  /* "PETSc/petscvec.pxi":459
  *                                c's', self.readonly, flags)
  *         view.obj = self
  *         return 0             # <<<<<<<<<<<<<<
@@ -20713,7 +21364,7 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_acquirebuffer(struct __pyx_obj
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":453
+  /* "PETSc/petscvec.pxi":454
  *     # buffer interface (PEP 3118)
  * 
  *     cdef int acquirebuffer(self, Py_buffer *view, int flags) except -1:             # <<<<<<<<<<<<<<
@@ -20730,7 +21381,7 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_acquirebuffer(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":460
+/* "PETSc/petscvec.pxi":461
  *         return 0
  * 
  *     cdef int releasebuffer(self, Py_buffer *view) except -1:             # <<<<<<<<<<<<<<
@@ -20744,7 +21395,7 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_releasebuffer(struct __pyx_obj
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("releasebuffer", 0);
 
-  /* "PETSc/petscvec.pxi":461
+  /* "PETSc/petscvec.pxi":462
  * 
  *     cdef int releasebuffer(self, Py_buffer *view) except -1:
  *         PyPetscBuffer_Release(view)             # <<<<<<<<<<<<<<
@@ -20753,16 +21404,16 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_releasebuffer(struct __pyx_obj
  */
   PyPetscBuffer_Release(__pyx_v_view);
 
-  /* "PETSc/petscvec.pxi":462
+  /* "PETSc/petscvec.pxi":463
  *     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_ERR(5, 462, __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 == ((int)-1))) __PYX_ERR(5, 463, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":463
+  /* "PETSc/petscvec.pxi":464
  *         PyPetscBuffer_Release(view)
  *         self.release()
  *         return 0             # <<<<<<<<<<<<<<
@@ -20772,7 +21423,7 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_releasebuffer(struct __pyx_obj
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":460
+  /* "PETSc/petscvec.pxi":461
  *         return 0
  * 
  *     cdef int releasebuffer(self, Py_buffer *view) except -1:             # <<<<<<<<<<<<<<
@@ -20789,7 +21440,7 @@ static int __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_releasebuffer(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":465
+/* "PETSc/petscvec.pxi":466
  *         return 0
  * 
  *     def __getbuffer__(self, Py_buffer *view, int flags):             # <<<<<<<<<<<<<<
@@ -20820,16 +21471,16 @@ static int __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_4__getbuffer__(struct __pyx_o
     __Pyx_GIVEREF(__pyx_v_view->obj);
   }
 
-  /* "PETSc/petscvec.pxi":466
+  /* "PETSc/petscvec.pxi":467
  * 
  *     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_ERR(5, 466, __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 == ((int)-1))) __PYX_ERR(5, 467, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":465
+  /* "PETSc/petscvec.pxi":466
  *         return 0
  * 
  *     def __getbuffer__(self, Py_buffer *view, int flags):             # <<<<<<<<<<<<<<
@@ -20858,7 +21509,7 @@ static int __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_4__getbuffer__(struct __pyx_o
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":468
+/* "PETSc/petscvec.pxi":469
  *         self.acquirebuffer(view, flags)
  * 
  *     def __releasebuffer__(self, Py_buffer *view):             # <<<<<<<<<<<<<<
@@ -20882,16 +21533,16 @@ static void __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_6__releasebuffer__(struct __
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("__releasebuffer__", 0);
 
-  /* "PETSc/petscvec.pxi":469
+  /* "PETSc/petscvec.pxi":470
  * 
  *     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_ERR(5, 469, __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 == ((int)-1))) __PYX_ERR(5, 470, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":468
+  /* "PETSc/petscvec.pxi":469
  *         self.acquirebuffer(view, flags)
  * 
  *     def __releasebuffer__(self, Py_buffer *view):             # <<<<<<<<<<<<<<
@@ -20902,12 +21553,12 @@ static void __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_6__releasebuffer__(struct __
   /* function exit code */
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_WriteUnraisable("petsc4py.PETSc._Vec_buffer.__releasebuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename, 0, 0);
+  __Pyx_WriteUnraisable("petsc4py.PETSc._Vec_buffer.__releasebuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
 }
 
-/* "PETSc/petscvec.pxi":473
+/* "PETSc/petscvec.pxi":474
  *     # 'with' statement (PEP 343)
  * 
  *     cdef object enter(self):             # <<<<<<<<<<<<<<
@@ -20922,16 +21573,16 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_11_Vec_buffer_enter(struct __pyx_obj_8
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("enter", 0);
 
-  /* "PETSc/petscvec.pxi":474
+  /* "PETSc/petscvec.pxi":475
  * 
  *     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_ERR(5, 474, __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 == ((int)-1))) __PYX_ERR(5, 475, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":475
+  /* "PETSc/petscvec.pxi":476
  *     cdef object enter(self):
  *         self.acquire()
  *         return asarray(self)             # <<<<<<<<<<<<<<
@@ -20939,13 +21590,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_ERR(5, 475, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_asarray(((PyObject *)__pyx_v_self))); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 476, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":473
+  /* "PETSc/petscvec.pxi":474
  *     # 'with' statement (PEP 343)
  * 
  *     cdef object enter(self):             # <<<<<<<<<<<<<<
@@ -20964,7 +21615,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_11_Vec_buffer_enter(struct __pyx_obj_8
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":477
+/* "PETSc/petscvec.pxi":478
  *         return asarray(self)
  * 
  *     cdef object exit(self):             # <<<<<<<<<<<<<<
@@ -20978,16 +21629,16 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_11_Vec_buffer_exit(struct __pyx_obj_8p
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("exit", 0);
 
-  /* "PETSc/petscvec.pxi":478
+  /* "PETSc/petscvec.pxi":479
  * 
  *     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_ERR(5, 478, __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 == ((int)-1))) __PYX_ERR(5, 479, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":479
+  /* "PETSc/petscvec.pxi":480
  *     cdef object exit(self):
  *         self.release()
  *         return None             # <<<<<<<<<<<<<<
@@ -20999,7 +21650,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":477
+  /* "PETSc/petscvec.pxi":478
  *         return asarray(self)
  * 
  *     cdef object exit(self):             # <<<<<<<<<<<<<<
@@ -21017,7 +21668,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_11_Vec_buffer_exit(struct __pyx_obj_8p
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":481
+/* "PETSc/petscvec.pxi":482
  *         return None
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -21048,7 +21699,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_8__enter__(struct __pyx
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__enter__", 0);
 
-  /* "PETSc/petscvec.pxi":482
+  /* "PETSc/petscvec.pxi":483
  * 
  *     def __enter__(self):
  *         return self.enter()             # <<<<<<<<<<<<<<
@@ -21056,13 +21707,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_ERR(5, 482, __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, 483, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":481
+  /* "PETSc/petscvec.pxi":482
  *         return None
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -21081,7 +21732,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_8__enter__(struct __pyx
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":484
+/* "PETSc/petscvec.pxi":485
  *         return self.enter()
  * 
  *     def __exit__(self, *exc):             # <<<<<<<<<<<<<<
@@ -21114,7 +21765,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_10__exit__(struct __pyx
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__exit__", 0);
 
-  /* "PETSc/petscvec.pxi":485
+  /* "PETSc/petscvec.pxi":486
  * 
  *     def __exit__(self, *exc):
  *         return self.exit()             # <<<<<<<<<<<<<<
@@ -21122,13 +21773,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_ERR(5, 485, __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, 486, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":484
+  /* "PETSc/petscvec.pxi":485
  *         return self.enter()
  * 
  *     def __exit__(self, *exc):             # <<<<<<<<<<<<<<
@@ -21147,7 +21798,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_10__exit__(struct __pyx
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":489
+/* "PETSc/petscvec.pxi":490
  *     # buffer interface (legacy)
  * 
  *     cdef Py_ssize_t getbuffer(self, void **p) except -1:             # <<<<<<<<<<<<<<
@@ -21164,7 +21815,7 @@ static Py_ssize_t __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_getbuffer(struct __pyx_
   PetscInt __pyx_t_3;
   __Pyx_RefNannySetupContext("getbuffer", 0);
 
-  /* "PETSc/petscvec.pxi":490
+  /* "PETSc/petscvec.pxi":491
  * 
  *     cdef Py_ssize_t getbuffer(self, void **p) except -1:
  *         cdef PetscInt n = 0             # <<<<<<<<<<<<<<
@@ -21173,7 +21824,7 @@ static Py_ssize_t __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_getbuffer(struct __pyx_
  */
   __pyx_v_n = 0;
 
-  /* "PETSc/petscvec.pxi":491
+  /* "PETSc/petscvec.pxi":492
  *     cdef Py_ssize_t getbuffer(self, void **p) except -1:
  *         cdef PetscInt n = 0
  *         if p != NULL:             # <<<<<<<<<<<<<<
@@ -21183,16 +21834,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":492
+    /* "PETSc/petscvec.pxi":493
  *         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_ERR(5, 492, __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 == ((int)-1))) __PYX_ERR(5, 493, __pyx_L1_error)
 
-    /* "PETSc/petscvec.pxi":493
+    /* "PETSc/petscvec.pxi":494
  *         if p != NULL:
  *             self.acquire()
  *             p[0] = <void*>self.data             # <<<<<<<<<<<<<<
@@ -21201,7 +21852,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":494
+    /* "PETSc/petscvec.pxi":495
  *             self.acquire()
  *             p[0] = <void*>self.data
  *             n = self.size             # <<<<<<<<<<<<<<
@@ -21211,7 +21862,7 @@ 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
+    /* "PETSc/petscvec.pxi":492
  *     cdef Py_ssize_t getbuffer(self, void **p) except -1:
  *         cdef PetscInt n = 0
  *         if p != NULL:             # <<<<<<<<<<<<<<
@@ -21221,7 +21872,7 @@ static Py_ssize_t __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_getbuffer(struct __pyx_
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscvec.pxi":495
+  /* "PETSc/petscvec.pxi":496
  *             p[0] = <void*>self.data
  *             n = self.size
  *         elif self.vec != NULL:             # <<<<<<<<<<<<<<
@@ -21231,16 +21882,16 @@ 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":496
+    /* "PETSc/petscvec.pxi":497
  *             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_ERR(5, 496, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetLocalSize(__pyx_v_self->vec, (&__pyx_v_n))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 497, __pyx_L1_error)
 
-    /* "PETSc/petscvec.pxi":495
+    /* "PETSc/petscvec.pxi":496
  *             p[0] = <void*>self.data
  *             n = self.size
  *         elif self.vec != NULL:             # <<<<<<<<<<<<<<
@@ -21250,7 +21901,7 @@ static Py_ssize_t __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_getbuffer(struct __pyx_
   }
   __pyx_L3:;
 
-  /* "PETSc/petscvec.pxi":497
+  /* "PETSc/petscvec.pxi":498
  *         elif self.vec != NULL:
  *             CHKERR( VecGetLocalSize(self.vec, &n) )
  *         return <Py_ssize_t>(<size_t>n*sizeof(PetscScalar))             # <<<<<<<<<<<<<<
@@ -21260,7 +21911,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":489
+  /* "PETSc/petscvec.pxi":490
  *     # buffer interface (legacy)
  * 
  *     cdef Py_ssize_t getbuffer(self, void **p) except -1:             # <<<<<<<<<<<<<<
@@ -21277,7 +21928,7 @@ static Py_ssize_t __pyx_f_8petsc4py_5PETSc_11_Vec_buffer_getbuffer(struct __pyx_
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":499
+/* "PETSc/petscvec.pxi":500
  *         return <Py_ssize_t>(<size_t>n*sizeof(PetscScalar))
  * 
  *     def __getsegcount__(self, Py_ssize_t *lenp):             # <<<<<<<<<<<<<<
@@ -21308,7 +21959,7 @@ static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_12__getsegcount__(stru
   Py_ssize_t __pyx_t_2;
   __Pyx_RefNannySetupContext("__getsegcount__", 0);
 
-  /* "PETSc/petscvec.pxi":500
+  /* "PETSc/petscvec.pxi":501
  * 
  *     def __getsegcount__(self, Py_ssize_t *lenp):
  *         if lenp != NULL:             # <<<<<<<<<<<<<<
@@ -21318,17 +21969,17 @@ 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":501
+    /* "PETSc/petscvec.pxi":502
  *     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 == -1L)) __PYX_ERR(5, 501, __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 == ((Py_ssize_t)-1L))) __PYX_ERR(5, 502, __pyx_L1_error)
     (__pyx_v_lenp[0]) = __pyx_t_2;
 
-    /* "PETSc/petscvec.pxi":500
+    /* "PETSc/petscvec.pxi":501
  * 
  *     def __getsegcount__(self, Py_ssize_t *lenp):
  *         if lenp != NULL:             # <<<<<<<<<<<<<<
@@ -21337,7 +21988,7 @@ static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_12__getsegcount__(stru
  */
   }
 
-  /* "PETSc/petscvec.pxi":502
+  /* "PETSc/petscvec.pxi":503
  *         if lenp != NULL:
  *             lenp[0] = self.getbuffer(NULL)
  *         return 1             # <<<<<<<<<<<<<<
@@ -21347,7 +21998,7 @@ static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_12__getsegcount__(stru
   __pyx_r = 1;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":499
+  /* "PETSc/petscvec.pxi":500
  *         return <Py_ssize_t>(<size_t>n*sizeof(PetscScalar))
  * 
  *     def __getsegcount__(self, Py_ssize_t *lenp):             # <<<<<<<<<<<<<<
@@ -21365,7 +22016,7 @@ static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_12__getsegcount__(stru
 }
 #endif /*!(#if PY_MAJOR_VERSION < 3)*/
 
-/* "PETSc/petscvec.pxi":504
+/* "PETSc/petscvec.pxi":505
  *         return 1
  * 
  *     def __getreadbuffer__(self, Py_ssize_t idx, void **p):             # <<<<<<<<<<<<<<
@@ -21397,7 +22048,7 @@ static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_14__getreadbuffer__(st
   Py_ssize_t __pyx_t_3;
   __Pyx_RefNannySetupContext("__getreadbuffer__", 0);
 
-  /* "PETSc/petscvec.pxi":505
+  /* "PETSc/petscvec.pxi":506
  * 
  *     def __getreadbuffer__(self, Py_ssize_t idx, void **p):
  *         if idx != 0: raise SystemError(             # <<<<<<<<<<<<<<
@@ -21406,25 +22057,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_ERR(5, 505, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_SystemError, __pyx_tuple__15, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 506, __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_ERR(5, 505, __pyx_L1_error)
+    __PYX_ERR(5, 506, __pyx_L1_error)
   }
 
-  /* "PETSc/petscvec.pxi":507
+  /* "PETSc/petscvec.pxi":508
  *         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 == -1L)) __PYX_ERR(5, 507, __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 == ((Py_ssize_t)-1L))) __PYX_ERR(5, 508, __pyx_L1_error)
   __pyx_r = __pyx_t_3;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":504
+  /* "PETSc/petscvec.pxi":505
  *         return 1
  * 
  *     def __getreadbuffer__(self, Py_ssize_t idx, void **p):             # <<<<<<<<<<<<<<
@@ -21443,7 +22094,7 @@ static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_14__getreadbuffer__(st
 }
 #endif /*!(#if PY_MAJOR_VERSION < 3)*/
 
-/* "PETSc/petscvec.pxi":509
+/* "PETSc/petscvec.pxi":510
  *         return self.getbuffer(p)
  * 
  *     def __getwritebuffer__(self, Py_ssize_t idx, void **p):             # <<<<<<<<<<<<<<
@@ -21475,7 +22126,7 @@ static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_16__getwritebuffer__(s
   Py_ssize_t __pyx_t_3;
   __Pyx_RefNannySetupContext("__getwritebuffer__", 0);
 
-  /* "PETSc/petscvec.pxi":510
+  /* "PETSc/petscvec.pxi":511
  * 
  *     def __getwritebuffer__(self, Py_ssize_t idx, void **p):
  *         if idx != 0: raise SystemError(             # <<<<<<<<<<<<<<
@@ -21484,14 +22135,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_ERR(5, 510, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_SystemError, __pyx_tuple__16, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 511, __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_ERR(5, 510, __pyx_L1_error)
+    __PYX_ERR(5, 511, __pyx_L1_error)
   }
 
-  /* "PETSc/petscvec.pxi":512
+  /* "PETSc/petscvec.pxi":513
  *         if idx != 0: raise SystemError(
  *             "accessing non-existent buffer segment")
  *         if self.readonly: raise TypeError(             # <<<<<<<<<<<<<<
@@ -21500,25 +22151,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_ERR(5, 512, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__17, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(5, 513, __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_ERR(5, 512, __pyx_L1_error)
+    __PYX_ERR(5, 513, __pyx_L1_error)
   }
 
-  /* "PETSc/petscvec.pxi":514
+  /* "PETSc/petscvec.pxi":515
  *         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 == -1L)) __PYX_ERR(5, 514, __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 == ((Py_ssize_t)-1L))) __PYX_ERR(5, 515, __pyx_L1_error)
   __pyx_r = __pyx_t_3;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":509
+  /* "PETSc/petscvec.pxi":510
  *         return self.getbuffer(p)
  * 
  *     def __getwritebuffer__(self, Py_ssize_t idx, void **p):             # <<<<<<<<<<<<<<
@@ -21537,7 +22188,7 @@ static Py_ssize_t __pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_16__getwritebuffer__(s
 }
 #endif /*!(#if PY_MAJOR_VERSION < 3)*/
 
-/* "PETSc/petscvec.pxi":519
+/* "PETSc/petscvec.pxi":520
  * 
  *     property __array_interface__:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -21572,7 +22223,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_19__array_interface____
   PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/petscvec.pxi":520
+  /* "PETSc/petscvec.pxi":521
  *     property __array_interface__:
  *         def __get__(self):
  *             cdef PetscInt n = 0             # <<<<<<<<<<<<<<
@@ -21581,7 +22232,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_19__array_interface____
  */
   __pyx_v_n = 0;
 
-  /* "PETSc/petscvec.pxi":521
+  /* "PETSc/petscvec.pxi":522
  *         def __get__(self):
  *             cdef PetscInt n = 0
  *             if self.vec != NULL:             # <<<<<<<<<<<<<<
@@ -21591,16 +22242,16 @@ 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":522
+    /* "PETSc/petscvec.pxi":523
  *             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_ERR(5, 522, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetLocalSize(__pyx_v_self->vec, (&__pyx_v_n))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(5, 523, __pyx_L1_error)
 
-    /* "PETSc/petscvec.pxi":521
+    /* "PETSc/petscvec.pxi":522
  *         def __get__(self):
  *             cdef PetscInt n = 0
  *             if self.vec != NULL:             # <<<<<<<<<<<<<<
@@ -21609,42 +22260,42 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_19__array_interface____
  */
   }
 
-  /* "PETSc/petscvec.pxi":523
+  /* "PETSc/petscvec.pxi":524
  *             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_ERR(5, 523, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 524, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_size = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscvec.pxi":524
+  /* "PETSc/petscvec.pxi":525
  *                 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_ERR(5, 524, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)PyArray_DescrFromType(NPY_PETSC_SCALAR)); if (unlikely(!__pyx_t_3)) __PYX_ERR(5, 525, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_descr = ((PyArray_Descr *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscvec.pxi":525
+  /* "PETSc/petscvec.pxi":526
  *             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_ERR(5, 525, __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, 526, __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_ERR(5, 525, __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, 526, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 525, __pyx_L1_error)
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 526, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
@@ -21652,14 +22303,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_ERR(5, 525, __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, 526, __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_ERR(5, 525, __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, 526, __pyx_L1_error)
   __pyx_v_typestr = ((PyObject*)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "PETSc/petscvec.pxi":526
+  /* "PETSc/petscvec.pxi":527
  *             cdef dtype descr = PyArray_DescrFromType(NPY_PETSC_SCALAR)
  *             cdef str typestr = "=%c%d" % (descr.kind, descr.itemsize)
  *             return dict(version=3,             # <<<<<<<<<<<<<<
@@ -21667,47 +22318,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_ERR(5, 526, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyDict_NewPresized(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(5, 527, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_version, __pyx_int_3) < 0) __PYX_ERR(5, 526, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_version, __pyx_int_3) < 0) __PYX_ERR(5, 527, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":527
+  /* "PETSc/petscvec.pxi":528
  *             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_ERR(5, 526, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_data, ((PyObject *)__pyx_v_self)) < 0) __PYX_ERR(5, 527, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":528
+  /* "PETSc/petscvec.pxi":529
  *             return dict(version=3,
  *                         data=self,
  *                         shape=(size,),             # <<<<<<<<<<<<<<
  *                         typestr=typestr)
  * 
  */
-  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 528, __pyx_L1_error)
+  __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(5, 529, __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_ERR(5, 526, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_shape, __pyx_t_5) < 0) __PYX_ERR(5, 527, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/petscvec.pxi":529
+  /* "PETSc/petscvec.pxi":530
  *                         data=self,
  *                         shape=(size,),
  *                         typestr=typestr)             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_typestr, __pyx_v_typestr) < 0) __PYX_ERR(5, 526, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_typestr, __pyx_v_typestr) < 0) __PYX_ERR(5, 527, __pyx_L1_error)
   __pyx_r = __pyx_t_4;
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscvec.pxi":519
+  /* "PETSc/petscvec.pxi":520
  * 
  *     property __array_interface__:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -21731,10 +22382,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11_Vec_buffer_19__array_interface____
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":540
+/* "PETSc/petscvec.pxi":541
  *     cdef Vec lvec
  * 
- *     def __init__(self, Vec gvec not None):             # <<<<<<<<<<<<<<
+ *     def __init__(self, Vec gvec):             # <<<<<<<<<<<<<<
  *         self.gvec = gvec
  *         self.lvec = Vec()
  */
@@ -21754,6 +22405,7 @@ static int __pyx_pw_8petsc4py_5PETSc_14_Vec_LocalForm_1__init__(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -21764,7 +22416,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_ERR(5, 540, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__init__") < 0)) __PYX_ERR(5, 541, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -21775,13 +22427,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_ERR(5, 540, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(5, 541, __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_ERR(5, 540, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gvec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "gvec", 0))) __PYX_ERR(5, 541, __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 */
@@ -21799,9 +22451,9 @@ static int __pyx_pf_8petsc4py_5PETSc_14_Vec_LocalForm___init__(struct __pyx_obj_
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__init__", 0);
 
-  /* "PETSc/petscvec.pxi":541
+  /* "PETSc/petscvec.pxi":542
  * 
- *     def __init__(self, Vec gvec not None):
+ *     def __init__(self, Vec gvec):
  *         self.gvec = gvec             # <<<<<<<<<<<<<<
  *         self.lvec = Vec()
  * 
@@ -21812,14 +22464,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":542
- *     def __init__(self, Vec gvec not None):
+  /* "PETSc/petscvec.pxi":543
+ *     def __init__(self, Vec gvec):
  *         self.gvec = gvec
  *         self.lvec = Vec()             # <<<<<<<<<<<<<<
  * 
  *     def __enter__(self):
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(5, 543, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_GIVEREF(__pyx_t_1);
   __Pyx_GOTREF(__pyx_v_self->lvec);
@@ -21827,10 +22479,10 @@ 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":540
+  /* "PETSc/petscvec.pxi":541
  *     cdef Vec lvec
  * 
- *     def __init__(self, Vec gvec not None):             # <<<<<<<<<<<<<<
+ *     def __init__(self, Vec gvec):             # <<<<<<<<<<<<<<
  *         self.gvec = gvec
  *         self.lvec = Vec()
  */
@@ -21847,7 +22499,7 @@ static int __pyx_pf_8petsc4py_5PETSc_14_Vec_LocalForm___init__(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":544
+/* "PETSc/petscvec.pxi":545
  *         self.lvec = Vec()
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -21880,7 +22532,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_14_Vec_LocalForm_2__enter__(struct __
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("__enter__", 0);
 
-  /* "PETSc/petscvec.pxi":545
+  /* "PETSc/petscvec.pxi":546
  * 
  *     def __enter__(self):
  *         cdef PetscVec gvec = self.gvec.vec             # <<<<<<<<<<<<<<
@@ -21890,16 +22542,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":546
+  /* "PETSc/petscvec.pxi":547
  *     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_ERR(5, 546, __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 == ((int)-1))) __PYX_ERR(5, 547, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":547
+  /* "PETSc/petscvec.pxi":548
  *         cdef PetscVec gvec = self.gvec.vec
  *         CHKERR( VecGhostGetLocalForm(gvec, &self.lvec.vec) )
  *         return self.lvec             # <<<<<<<<<<<<<<
@@ -21911,7 +22563,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":544
+  /* "PETSc/petscvec.pxi":545
  *         self.lvec = Vec()
  * 
  *     def __enter__(self):             # <<<<<<<<<<<<<<
@@ -21929,7 +22581,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_14_Vec_LocalForm_2__enter__(struct __
   return __pyx_r;
 }
 
-/* "PETSc/petscvec.pxi":549
+/* "PETSc/petscvec.pxi":550
  *         return self.lvec
  * 
  *     def __exit__(self, *exc):             # <<<<<<<<<<<<<<
@@ -21964,7 +22616,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_14_Vec_LocalForm_4__exit__(struct __p
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("__exit__", 0);
 
-  /* "PETSc/petscvec.pxi":550
+  /* "PETSc/petscvec.pxi":551
  * 
  *     def __exit__(self, *exc):
  *         cdef PetscVec gvec = self.gvec.vec             # <<<<<<<<<<<<<<
@@ -21974,16 +22626,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":551
+  /* "PETSc/petscvec.pxi":552
  *     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_ERR(5, 551, __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 == ((int)-1))) __PYX_ERR(5, 552, __pyx_L1_error)
 
-  /* "PETSc/petscvec.pxi":552
+  /* "PETSc/petscvec.pxi":553
  *         cdef PetscVec gvec = self.gvec.vec
  *         CHKERR( VecGhostRestoreLocalForm(gvec, &self.lvec.vec) )
  *         self.lvec.vec = NULL             # <<<<<<<<<<<<<<
@@ -21992,7 +22644,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_14_Vec_LocalForm_4__exit__(struct __p
  */
   __pyx_v_self->lvec->vec = NULL;
 
-  /* "PETSc/petscvec.pxi":549
+  /* "PETSc/petscvec.pxi":550
  *         return self.lvec
  * 
  *     def __exit__(self, *exc):             # <<<<<<<<<<<<<<
@@ -22012,7 +22664,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_14_Vec_LocalForm_4__exit__(struct __p
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":412
+/* "PETSc/petscmat.pxi":418
  *     int MatGetNearNullSpace(PetscMat,PetscNullSpace*)
  * 
  * cdef inline NullSpace ref_NullSpace(PetscNullSpace nsp):             # <<<<<<<<<<<<<<
@@ -22028,14 +22680,14 @@ static CYTHON_INLINE struct PyPetscNullSpaceObject *__pyx_f_8petsc4py_5PETSc_ref
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("ref_NullSpace", 0);
 
-  /* "PETSc/petscmat.pxi":413
+  /* "PETSc/petscmat.pxi":419
  * 
  * 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 *)__pyx_ptype_8petsc4py_5PETSc_NullSpace), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 413, __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, 419, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -22043,7 +22695,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":414
+  /* "PETSc/petscmat.pxi":420
  * cdef inline NullSpace ref_NullSpace(PetscNullSpace nsp):
  *     cdef NullSpace ob = <NullSpace> NullSpace()
  *     ob.nsp = nsp             # <<<<<<<<<<<<<<
@@ -22052,7 +22704,7 @@ static CYTHON_INLINE struct PyPetscNullSpaceObject *__pyx_f_8petsc4py_5PETSc_ref
  */
   __pyx_v_ob->nsp = __pyx_v_nsp;
 
-  /* "PETSc/petscmat.pxi":415
+  /* "PETSc/petscmat.pxi":421
  *     cdef NullSpace ob = <NullSpace> NullSpace()
  *     ob.nsp = nsp
  *     PetscINCREF(ob.obj)             # <<<<<<<<<<<<<<
@@ -22061,7 +22713,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":416
+  /* "PETSc/petscmat.pxi":422
  *     ob.nsp = nsp
  *     PetscINCREF(ob.obj)
  *     return ob             # <<<<<<<<<<<<<<
@@ -22073,7 +22725,7 @@ static CYTHON_INLINE struct PyPetscNullSpaceObject *__pyx_f_8petsc4py_5PETSc_ref
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":412
+  /* "PETSc/petscmat.pxi":418
  *     int MatGetNearNullSpace(PetscMat,PetscNullSpace*)
  * 
  * cdef inline NullSpace ref_NullSpace(PetscNullSpace nsp):             # <<<<<<<<<<<<<<
@@ -22094,7 +22746,7 @@ static CYTHON_INLINE struct PyPetscNullSpaceObject *__pyx_f_8petsc4py_5PETSc_ref
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":418
+/* "PETSc/petscmat.pxi":424
  *     return ob
  * 
  * cdef int NullSpace_Function(             # <<<<<<<<<<<<<<
@@ -22117,46 +22769,46 @@ static int __pyx_f_8petsc4py_5PETSc_NullSpace_Function(MatNullSpace __pyx_v_n, V
   PyObject *__pyx_t_5 = NULL;
   PyObject *(*__pyx_t_6)(PyObject *);
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("NullSpace_Function", 0);
 
-  /* "PETSc/petscmat.pxi":423
+  /* "PETSc/petscmat.pxi":429
  *     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_ERR(6, 423, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_NullSpace(__pyx_v_n)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 429, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_nsp = ((struct PyPetscNullSpaceObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscmat.pxi":424
+  /* "PETSc/petscmat.pxi":430
  *     ) 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_ERR(6, 424, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_v)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 430, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscmat.pxi":425
+  /* "PETSc/petscmat.pxi":431
  *     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), ((char *)"__function__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 425, __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, 431, __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
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -22164,9 +22816,9 @@ 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_ERR(6, 425, __pyx_L1_error)
+      __PYX_ERR(6, 431, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
@@ -22180,17 +22832,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_ERR(6, 425, __pyx_L1_error)
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 431, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 425, __pyx_L1_error)
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 431, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 425, __pyx_L1_error)
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 431, __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(6, 425, __pyx_L1_error)
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 431, __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;
@@ -22200,7 +22852,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_ERR(6, 425, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(6, 431, __pyx_L1_error)
     __pyx_t_6 = NULL;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     goto __pyx_L4_unpacking_done;
@@ -22208,7 +22860,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_ERR(6, 425, __pyx_L1_error)
+    __PYX_ERR(6, 431, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_function = __pyx_t_2;
@@ -22218,14 +22870,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":426
+  /* "PETSc/petscmat.pxi":432
  *     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_ERR(6, 426, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 432, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_nsp));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_nsp));
@@ -22233,30 +22885,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_ERR(6, 426, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 432, __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(6, 426, __pyx_L1_error)
+  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 432, __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(6, 426, __pyx_L1_error)
+    __PYX_ERR(6, 432, __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(6, 426, __pyx_L1_error)
+    __pyx_t_4 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 432, __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(6, 426, __pyx_L1_error)
+    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 432, __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_ERR(6, 426, __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, 432, __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":427
+  /* "PETSc/petscmat.pxi":433
  *     (function, args, kargs) = nsp.get_attr('__function__')
  *     function(nsp, vec, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -22266,7 +22918,7 @@ static int __pyx_f_8petsc4py_5PETSc_NullSpace_Function(MatNullSpace __pyx_v_n, V
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":418
+  /* "PETSc/petscmat.pxi":424
  *     return ob
  * 
  * cdef int NullSpace_Function(             # <<<<<<<<<<<<<<
@@ -22291,12 +22943,12 @@ static int __pyx_f_8petsc4py_5PETSc_NullSpace_Function(MatNullSpace __pyx_v_n, V
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":431
+/* "PETSc/petscmat.pxi":437
  * # -----------------------------------------------------------------------------
  * 
  * cdef inline Mat ref_Mat(PetscMat mat):             # <<<<<<<<<<<<<<
@@ -22312,14 +22964,14 @@ static CYTHON_INLINE struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_ref_Mat(M
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("ref_Mat", 0);
 
-  /* "PETSc/petscmat.pxi":432
+  /* "PETSc/petscmat.pxi":438
  * 
  * 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 *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 432, __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, 438, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -22327,7 +22979,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":433
+  /* "PETSc/petscmat.pxi":439
  * cdef inline Mat ref_Mat(PetscMat mat):
  *     cdef Mat ob = <Mat> Mat()
  *     ob.mat = mat             # <<<<<<<<<<<<<<
@@ -22336,7 +22988,7 @@ static CYTHON_INLINE struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_ref_Mat(M
  */
   __pyx_v_ob->mat = __pyx_v_mat;
 
-  /* "PETSc/petscmat.pxi":434
+  /* "PETSc/petscmat.pxi":440
  *     cdef Mat ob = <Mat> Mat()
  *     ob.mat = mat
  *     PetscINCREF(ob.obj)             # <<<<<<<<<<<<<<
@@ -22345,7 +22997,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":435
+  /* "PETSc/petscmat.pxi":441
  *     ob.mat = mat
  *     PetscINCREF(ob.obj)
  *     return ob             # <<<<<<<<<<<<<<
@@ -22357,7 +23009,7 @@ static CYTHON_INLINE struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_ref_Mat(M
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":431
+  /* "PETSc/petscmat.pxi":437
  * # -----------------------------------------------------------------------------
  * 
  * cdef inline Mat ref_Mat(PetscMat mat):             # <<<<<<<<<<<<<<
@@ -22378,7 +23030,7 @@ static CYTHON_INLINE struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_ref_Mat(M
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":441
+/* "PETSc/petscmat.pxi":447
  * # unary operations
  * 
  * cdef Mat mat_pos(Mat self):             # <<<<<<<<<<<<<<
@@ -22396,7 +23048,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_pos(struct PyPetscM
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("mat_pos", 0);
 
-  /* "PETSc/petscmat.pxi":442
+  /* "PETSc/petscmat.pxi":448
  * 
  * cdef Mat mat_pos(Mat self):
  *     cdef Mat mat = type(self)()             # <<<<<<<<<<<<<<
@@ -22405,7 +23057,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_pos(struct PyPetscM
  */
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -22415,27 +23067,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_ERR(6, 442, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 448, __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(6, 442, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 448, __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_ERR(6, 442, __pyx_L1_error)
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(6, 448, __pyx_L1_error)
   __pyx_v_mat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscmat.pxi":443
+  /* "PETSc/petscmat.pxi":449
  * 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_ERR(6, 443, __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 == ((int)-1))) __PYX_ERR(6, 449, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":444
+  /* "PETSc/petscmat.pxi":450
  *     cdef Mat mat = type(self)()
  *     CHKERR( MatDuplicate(self.mat, MAT_COPY_VALUES, &mat.mat) )
  *     return mat             # <<<<<<<<<<<<<<
@@ -22447,7 +23099,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_pos(struct PyPetscM
   __pyx_r = __pyx_v_mat;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":441
+  /* "PETSc/petscmat.pxi":447
  * # unary operations
  * 
  * cdef Mat mat_pos(Mat self):             # <<<<<<<<<<<<<<
@@ -22469,7 +23121,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_pos(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":446
+/* "PETSc/petscmat.pxi":452
  *     return mat
  * 
  * cdef Mat mat_neg(Mat self):             # <<<<<<<<<<<<<<
@@ -22486,14 +23138,14 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_neg(struct PyPetscM
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("mat_neg", 0);
 
-  /* "PETSc/petscmat.pxi":447
+  /* "PETSc/petscmat.pxi":453
  * 
  * 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_ERR(6, 447, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 453, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -22501,16 +23153,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":448
+  /* "PETSc/petscmat.pxi":454
  * 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_ERR(6, 448, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatScale(__pyx_v_mat->mat, -1.0)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(6, 454, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":449
+  /* "PETSc/petscmat.pxi":455
  *     cdef Mat mat = <Mat> mat_pos(self)
  *     CHKERR( MatScale(mat.mat, -1) )
  *     return mat             # <<<<<<<<<<<<<<
@@ -22522,7 +23174,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_neg(struct PyPetscM
   __pyx_r = __pyx_v_mat;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":446
+  /* "PETSc/petscmat.pxi":452
  *     return mat
  * 
  * cdef Mat mat_neg(Mat self):             # <<<<<<<<<<<<<<
@@ -22543,7 +23195,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_neg(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":453
+/* "PETSc/petscmat.pxi":459
  * # inplace binary operations
  * 
  * cdef Mat mat_iadd(Mat self, other):             # <<<<<<<<<<<<<<
@@ -22561,14 +23213,14 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_iadd(struct PyPetsc
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
-  Py_ssize_t __pyx_t_6;
+  int __pyx_t_6;
   PyObject *__pyx_t_7 = NULL;
   int __pyx_t_8;
   PyObject *(*__pyx_t_9)(PyObject *);
   PyObject *__pyx_t_10 = NULL;
   __Pyx_RefNannySetupContext("mat_iadd", 0);
 
-  /* "PETSc/petscmat.pxi":454
+  /* "PETSc/petscmat.pxi":460
  * 
  * cdef Mat mat_iadd(Mat self, other):
  *     if isinstance(other, Mat):             # <<<<<<<<<<<<<<
@@ -22579,18 +23231,18 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_iadd(struct PyPetsc
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":455
+    /* "PETSc/petscmat.pxi":461
  * 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_ERR(6, 455, __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, 461, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
     __pyx_t_6 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && 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);
@@ -22600,24 +23252,42 @@ 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_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;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_4)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_int_1, __pyx_v_other};
+      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 461, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __Pyx_GOTREF(__pyx_t_3);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_int_1, __pyx_v_other};
+      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 461, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __Pyx_GOTREF(__pyx_t_3);
+    } else
+    #endif
+    {
+      __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 461, __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;
+      }
+      __Pyx_INCREF(__pyx_int_1);
+      __Pyx_GIVEREF(__pyx_int_1);
+      PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_int_1);
+      __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_ERR(6, 461, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     }
-    __Pyx_INCREF(__pyx_int_1);
-    __Pyx_GIVEREF(__pyx_int_1);
-    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_int_1);
-    __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_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
+    /* "PETSc/petscmat.pxi":460
  * 
  * cdef Mat mat_iadd(Mat self, other):
  *     if isinstance(other, Mat):             # <<<<<<<<<<<<<<
@@ -22627,7 +23297,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_iadd(struct PyPetsc
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscmat.pxi":456
+  /* "PETSc/petscmat.pxi":462
  *     if isinstance(other, Mat):
  *         self.axpy(1, other)
  *     elif isinstance(other, (tuple, list)):             # <<<<<<<<<<<<<<
@@ -22648,7 +23318,7 @@ 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":457
+    /* "PETSc/petscmat.pxi":463
  *         self.axpy(1, other)
  *     elif isinstance(other, (tuple, list)):
  *         alpha, mat = other             # <<<<<<<<<<<<<<
@@ -22657,7 +23327,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_iadd(struct PyPetsc
  */
     if ((likely(PyTuple_CheckExact(__pyx_v_other))) || (PyList_CheckExact(__pyx_v_other))) {
       PyObject* sequence = __pyx_v_other;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -22665,9 +23335,9 @@ 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_ERR(6, 457, __pyx_L1_error)
+        __PYX_ERR(6, 463, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
@@ -22678,21 +23348,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_ERR(6, 457, __pyx_L1_error)
+      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 463, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 457, __pyx_L1_error)
+      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 463, __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_ERR(6, 457, __pyx_L1_error)
+      __pyx_t_7 = PyObject_GetIter(__pyx_v_other); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 463, __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_ERR(6, 457, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_7), 2) < 0) __PYX_ERR(6, 463, __pyx_L1_error)
       __pyx_t_9 = NULL;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       goto __pyx_L7_unpacking_done;
@@ -22700,7 +23370,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_ERR(6, 457, __pyx_L1_error)
+      __PYX_ERR(6, 463, __pyx_L1_error)
       __pyx_L7_unpacking_done:;
     }
     __pyx_v_alpha = __pyx_t_3;
@@ -22708,18 +23378,18 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_iadd(struct PyPetsc
     __pyx_v_mat = __pyx_t_4;
     __pyx_t_4 = 0;
 
-    /* "PETSc/petscmat.pxi":458
+    /* "PETSc/petscmat.pxi":464
  *     elif isinstance(other, (tuple, list)):
  *         alpha, mat = 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_ERR(6, 458, __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, 464, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_7 = NULL;
     __pyx_t_6 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
       __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_3);
       if (likely(__pyx_t_7)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -22729,24 +23399,42 @@ 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_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;
-    }
-    __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_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;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_3)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_alpha, __pyx_v_mat};
+      __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 464, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __Pyx_GOTREF(__pyx_t_4);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_alpha, __pyx_v_mat};
+      __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 464, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __Pyx_GOTREF(__pyx_t_4);
+    } else
+    #endif
+    {
+      __pyx_t_5 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 464, __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;
+      }
+      __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_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, 464, __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
+    /* "PETSc/petscmat.pxi":462
  *     if isinstance(other, Mat):
  *         self.axpy(1, other)
  *     elif isinstance(other, (tuple, list)):             # <<<<<<<<<<<<<<
@@ -22756,7 +23444,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_iadd(struct PyPetsc
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscmat.pxi":459
+  /* "PETSc/petscmat.pxi":465
  *         alpha, mat = other
  *         self.axpy(alpha, mat)
  *     elif isinstance(other, Vec):             # <<<<<<<<<<<<<<
@@ -22767,20 +23455,20 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_iadd(struct PyPetsc
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":460
+    /* "PETSc/petscmat.pxi":466
  *         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_ERR(6, 460, __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, 466, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_5 = __Pyx_PyInt_From_InsertMode(ADD_VALUES); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 460, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyInt_From_InsertMode(ADD_VALUES); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 466, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_t_7 = NULL;
     __pyx_t_6 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
       __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_3);
       if (likely(__pyx_t_7)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -22790,24 +23478,44 @@ 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_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;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_3)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_other, __pyx_t_5};
+      __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 466, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_other, __pyx_t_5};
+      __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 466, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_10 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(6, 466, __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;
+      }
+      __Pyx_INCREF(__pyx_v_other);
+      __Pyx_GIVEREF(__pyx_v_other);
+      PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_6, __pyx_v_other);
+      __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_ERR(6, 466, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     }
-    __Pyx_INCREF(__pyx_v_other);
-    __Pyx_GIVEREF(__pyx_v_other);
-    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_6, __pyx_v_other);
-    __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_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
+    /* "PETSc/petscmat.pxi":465
  *         alpha, mat = other
  *         self.axpy(alpha, mat)
  *     elif isinstance(other, Vec):             # <<<<<<<<<<<<<<
@@ -22817,7 +23525,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_iadd(struct PyPetsc
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscmat.pxi":462
+  /* "PETSc/petscmat.pxi":468
  *         self.setDiagonal(other, PETSC_ADD_VALUES)
  *     else:
  *         self.shift(other)             # <<<<<<<<<<<<<<
@@ -22825,10 +23533,10 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_iadd(struct PyPetsc
  * 
  */
   /*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_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_shift); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 468, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_10 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
       __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_3);
       if (likely(__pyx_t_10)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -22838,25 +23546,43 @@ 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_ERR(6, 462, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_v_other); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 468, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
     } else {
-      __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_ERR(6, 462, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_4);
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_3)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_10, __pyx_v_other};
+        __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 468, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+        __Pyx_GOTREF(__pyx_t_4);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_10, __pyx_v_other};
+        __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 468, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+        __Pyx_GOTREF(__pyx_t_4);
+      } else
+      #endif
+      {
+        __pyx_t_5 = PyTuple_New(1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 468, __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_ERR(6, 468, __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;
   }
   __pyx_L3:;
 
-  /* "PETSc/petscmat.pxi":463
+  /* "PETSc/petscmat.pxi":469
  *     else:
  *         self.shift(other)
  *     return self             # <<<<<<<<<<<<<<
@@ -22868,7 +23594,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_iadd(struct PyPetsc
   __pyx_r = __pyx_v_self;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":453
+  /* "PETSc/petscmat.pxi":459
  * # inplace binary operations
  * 
  * cdef Mat mat_iadd(Mat self, other):             # <<<<<<<<<<<<<<
@@ -22893,7 +23619,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_iadd(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":465
+/* "PETSc/petscmat.pxi":471
  *     return self
  * 
  * cdef Mat mat_isub(Mat self, other):             # <<<<<<<<<<<<<<
@@ -22912,14 +23638,14 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_isub(struct PyPetsc
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
-  Py_ssize_t __pyx_t_6;
+  int __pyx_t_6;
   PyObject *__pyx_t_7 = NULL;
   int __pyx_t_8;
   PyObject *(*__pyx_t_9)(PyObject *);
   PyObject *__pyx_t_10 = NULL;
   __Pyx_RefNannySetupContext("mat_isub", 0);
 
-  /* "PETSc/petscmat.pxi":466
+  /* "PETSc/petscmat.pxi":472
  * 
  * cdef Mat mat_isub(Mat self, other):
  *     if isinstance(other, Mat):             # <<<<<<<<<<<<<<
@@ -22930,18 +23656,18 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_isub(struct PyPetsc
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":467
+    /* "PETSc/petscmat.pxi":473
  * 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_ERR(6, 467, __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, 473, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
     __pyx_t_6 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && 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);
@@ -22951,24 +23677,42 @@ 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_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;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_4)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_int_neg_1, __pyx_v_other};
+      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 473, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __Pyx_GOTREF(__pyx_t_3);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_int_neg_1, __pyx_v_other};
+      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 473, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __Pyx_GOTREF(__pyx_t_3);
+    } else
+    #endif
+    {
+      __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 473, __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;
+      }
+      __Pyx_INCREF(__pyx_int_neg_1);
+      __Pyx_GIVEREF(__pyx_int_neg_1);
+      PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_int_neg_1);
+      __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_ERR(6, 473, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     }
-    __Pyx_INCREF(__pyx_int_neg_1);
-    __Pyx_GIVEREF(__pyx_int_neg_1);
-    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_int_neg_1);
-    __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_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
+    /* "PETSc/petscmat.pxi":472
  * 
  * cdef Mat mat_isub(Mat self, other):
  *     if isinstance(other, Mat):             # <<<<<<<<<<<<<<
@@ -22978,7 +23722,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_isub(struct PyPetsc
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscmat.pxi":468
+  /* "PETSc/petscmat.pxi":474
  *     if isinstance(other, Mat):
  *         self.axpy(-1, other)
  *     elif isinstance(other, (tuple, list)):             # <<<<<<<<<<<<<<
@@ -22999,7 +23743,7 @@ 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":469
+    /* "PETSc/petscmat.pxi":475
  *         self.axpy(-1, other)
  *     elif isinstance(other, (tuple, list)):
  *         alpha, mat = other             # <<<<<<<<<<<<<<
@@ -23008,7 +23752,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_isub(struct PyPetsc
  */
     if ((likely(PyTuple_CheckExact(__pyx_v_other))) || (PyList_CheckExact(__pyx_v_other))) {
       PyObject* sequence = __pyx_v_other;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -23016,9 +23760,9 @@ 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_ERR(6, 469, __pyx_L1_error)
+        __PYX_ERR(6, 475, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
@@ -23029,21 +23773,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_ERR(6, 469, __pyx_L1_error)
+      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 475, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 469, __pyx_L1_error)
+      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 475, __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_ERR(6, 469, __pyx_L1_error)
+      __pyx_t_7 = PyObject_GetIter(__pyx_v_other); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 475, __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_ERR(6, 469, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_7), 2) < 0) __PYX_ERR(6, 475, __pyx_L1_error)
       __pyx_t_9 = NULL;
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
       goto __pyx_L7_unpacking_done;
@@ -23051,7 +23795,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_ERR(6, 469, __pyx_L1_error)
+      __PYX_ERR(6, 475, __pyx_L1_error)
       __pyx_L7_unpacking_done:;
     }
     __pyx_v_alpha = __pyx_t_3;
@@ -23059,20 +23803,20 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_isub(struct PyPetsc
     __pyx_v_mat = __pyx_t_4;
     __pyx_t_4 = 0;
 
-    /* "PETSc/petscmat.pxi":470
+    /* "PETSc/petscmat.pxi":476
  *     elif isinstance(other, (tuple, list)):
  *         alpha, mat = 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_ERR(6, 470, __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, 476, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_7 = PyNumber_Negative(__pyx_v_alpha); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 470, __pyx_L1_error)
+    __pyx_t_7 = PyNumber_Negative(__pyx_v_alpha); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 476, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __pyx_t_5 = NULL;
     __pyx_t_6 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
       __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_3);
       if (likely(__pyx_t_5)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -23082,24 +23826,44 @@ 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_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;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_3)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_7, __pyx_v_mat};
+      __pyx_t_4 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 476, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_t_7, __pyx_v_mat};
+      __pyx_t_4 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 476, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_10 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(6, 476, __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_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_ERR(6, 476, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
     }
-    __Pyx_GIVEREF(__pyx_t_7);
-    PyTuple_SET_ITEM(__pyx_t_10, 0+__pyx_t_6, __pyx_t_7);
-    __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_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
+    /* "PETSc/petscmat.pxi":474
  *     if isinstance(other, Mat):
  *         self.axpy(-1, other)
  *     elif isinstance(other, (tuple, list)):             # <<<<<<<<<<<<<<
@@ -23109,7 +23873,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_isub(struct PyPetsc
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscmat.pxi":471
+  /* "PETSc/petscmat.pxi":477
  *         alpha, mat = other
  *         self.axpy(-alpha, mat)
  *     elif isinstance(other, Vec):             # <<<<<<<<<<<<<<
@@ -23120,17 +23884,17 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_isub(struct PyPetsc
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":472
+    /* "PETSc/petscmat.pxi":478
  *         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_ERR(6, 472, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_other, __pyx_n_s_copy); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 478, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_10 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
       __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_3);
       if (likely(__pyx_t_10)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -23140,44 +23904,44 @@ 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_ERR(6, 472, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_10); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 478, __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_ERR(6, 472, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 478, __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":473
+    /* "PETSc/petscmat.pxi":479
  *     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_ERR(6, 473, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_diag, __pyx_n_s_scale); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 479, __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_ERR(6, 473, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__18, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 479, __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":474
+    /* "PETSc/petscmat.pxi":480
  *         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_ERR(6, 474, __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, 480, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_10 = __Pyx_PyInt_From_InsertMode(ADD_VALUES); if (unlikely(!__pyx_t_10)) __PYX_ERR(6, 474, __pyx_L1_error)
+    __pyx_t_10 = __Pyx_PyInt_From_InsertMode(ADD_VALUES); if (unlikely(!__pyx_t_10)) __PYX_ERR(6, 480, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_10);
     __pyx_t_7 = NULL;
     __pyx_t_6 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
       __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_4);
       if (likely(__pyx_t_7)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -23187,34 +23951,54 @@ 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_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;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_4)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_diag, __pyx_t_10};
+      __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 480, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_7, __pyx_v_diag, __pyx_t_10};
+      __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 480, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+    } else
+    #endif
+    {
+      __pyx_t_5 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 480, __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;
+      }
+      __Pyx_INCREF(__pyx_v_diag);
+      __Pyx_GIVEREF(__pyx_v_diag);
+      PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_6, __pyx_v_diag);
+      __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_ERR(6, 480, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     }
-    __Pyx_INCREF(__pyx_v_diag);
-    __Pyx_GIVEREF(__pyx_v_diag);
-    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_6, __pyx_v_diag);
-    __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_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":475
+    /* "PETSc/petscmat.pxi":481
  *         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_ERR(6, 475, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_diag, __pyx_n_s_destroy); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 481, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && 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);
@@ -23224,16 +24008,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_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 475, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 481, __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(6, 475, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 481, __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
+    /* "PETSc/petscmat.pxi":477
  *         alpha, mat = other
  *         self.axpy(-alpha, mat)
  *     elif isinstance(other, Vec):             # <<<<<<<<<<<<<<
@@ -23243,7 +24027,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_isub(struct PyPetsc
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscmat.pxi":477
+  /* "PETSc/petscmat.pxi":483
  *         diag.destroy()
  *     else:
  *         self.shift(other)             # <<<<<<<<<<<<<<
@@ -23251,10 +24035,10 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_isub(struct PyPetsc
  * 
  */
   /*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_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_shift); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 483, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && 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);
@@ -23264,25 +24048,43 @@ 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_ERR(6, 477, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_other); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 483, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
     } else {
-      __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_ERR(6, 477, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_v_other};
+        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 483, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_v_other};
+        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 483, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      {
+        __pyx_t_10 = PyTuple_New(1+1); if (unlikely(!__pyx_t_10)) __PYX_ERR(6, 483, __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_ERR(6, 483, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   }
   __pyx_L3:;
 
-  /* "PETSc/petscmat.pxi":478
+  /* "PETSc/petscmat.pxi":484
  *     else:
  *         self.shift(other)
  *     return self             # <<<<<<<<<<<<<<
@@ -23294,7 +24096,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_isub(struct PyPetsc
   __pyx_r = __pyx_v_self;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":465
+  /* "PETSc/petscmat.pxi":471
  *     return self
  * 
  * cdef Mat mat_isub(Mat self, other):             # <<<<<<<<<<<<<<
@@ -23320,7 +24122,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_isub(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":480
+/* "PETSc/petscmat.pxi":486
  *     return self
  * 
  * cdef Mat mat_imul(Mat self, other):             # <<<<<<<<<<<<<<
@@ -23340,11 +24142,11 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_imul(struct PyPetsc
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
   PyObject *(*__pyx_t_7)(PyObject *);
-  Py_ssize_t __pyx_t_8;
+  int __pyx_t_8;
   PyObject *__pyx_t_9 = NULL;
   __Pyx_RefNannySetupContext("mat_imul", 0);
 
-  /* "PETSc/petscmat.pxi":481
+  /* "PETSc/petscmat.pxi":487
  * 
  * cdef Mat mat_imul(Mat self, other):
  *     if (isinstance(other, tuple) or             # <<<<<<<<<<<<<<
@@ -23359,7 +24161,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_imul(struct PyPetsc
     goto __pyx_L4_bool_binop_done;
   }
 
-  /* "PETSc/petscmat.pxi":482
+  /* "PETSc/petscmat.pxi":488
  * cdef Mat mat_imul(Mat self, other):
  *     if (isinstance(other, tuple) or
  *         isinstance(other, list)):             # <<<<<<<<<<<<<<
@@ -23371,7 +24173,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_imul(struct PyPetsc
   __pyx_t_1 = __pyx_t_2;
   __pyx_L4_bool_binop_done:;
 
-  /* "PETSc/petscmat.pxi":481
+  /* "PETSc/petscmat.pxi":487
  * 
  * cdef Mat mat_imul(Mat self, other):
  *     if (isinstance(other, tuple) or             # <<<<<<<<<<<<<<
@@ -23380,7 +24182,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_imul(struct PyPetsc
  */
   if (__pyx_t_1) {
 
-    /* "PETSc/petscmat.pxi":483
+    /* "PETSc/petscmat.pxi":489
  *     if (isinstance(other, tuple) or
  *         isinstance(other, list)):
  *         L, R = other             # <<<<<<<<<<<<<<
@@ -23389,7 +24191,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_imul(struct PyPetsc
  */
     if ((likely(PyTuple_CheckExact(__pyx_v_other))) || (PyList_CheckExact(__pyx_v_other))) {
       PyObject* sequence = __pyx_v_other;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -23397,9 +24199,9 @@ 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_ERR(6, 483, __pyx_L1_error)
+        __PYX_ERR(6, 489, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
@@ -23410,21 +24212,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_ERR(6, 483, __pyx_L1_error)
+      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 489, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 483, __pyx_L1_error)
+      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 489, __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_ERR(6, 483, __pyx_L1_error)
+      __pyx_t_6 = PyObject_GetIter(__pyx_v_other); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 489, __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_ERR(6, 483, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(6, 489, __pyx_L1_error)
       __pyx_t_7 = NULL;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       goto __pyx_L7_unpacking_done;
@@ -23432,7 +24234,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_ERR(6, 483, __pyx_L1_error)
+      __PYX_ERR(6, 489, __pyx_L1_error)
       __pyx_L7_unpacking_done:;
     }
     __pyx_v_L = __pyx_t_4;
@@ -23440,18 +24242,18 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_imul(struct PyPetsc
     __pyx_v_R = __pyx_t_5;
     __pyx_t_5 = 0;
 
-    /* "PETSc/petscmat.pxi":484
+    /* "PETSc/petscmat.pxi":490
  *         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_ERR(6, 484, __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, 490, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_6 = NULL;
     __pyx_t_8 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
       __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
       if (likely(__pyx_t_6)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -23461,24 +24263,42 @@ 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_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;
-    }
-    __Pyx_INCREF(__pyx_v_L);
-    __Pyx_GIVEREF(__pyx_v_L);
-    PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_v_L);
-    __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_ERR(6, 484, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_4)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_L, __pyx_v_R};
+      __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 490, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __Pyx_GOTREF(__pyx_t_5);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_L, __pyx_v_R};
+      __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 490, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __Pyx_GOTREF(__pyx_t_5);
+    } else
+    #endif
+    {
+      __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 490, __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;
+      }
+      __Pyx_INCREF(__pyx_v_L);
+      __Pyx_GIVEREF(__pyx_v_L);
+      PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_v_L);
+      __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_ERR(6, 490, __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
+    /* "PETSc/petscmat.pxi":487
  * 
  * cdef Mat mat_imul(Mat self, other):
  *     if (isinstance(other, tuple) or             # <<<<<<<<<<<<<<
@@ -23488,7 +24308,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_imul(struct PyPetsc
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscmat.pxi":486
+  /* "PETSc/petscmat.pxi":492
  *         self.diagonalScale(L, R)
  *     else:
  *         self.scale(other)             # <<<<<<<<<<<<<<
@@ -23496,10 +24316,10 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_imul(struct PyPetsc
  * 
  */
   /*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_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_scale); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 492, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_9 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
       __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_4);
       if (likely(__pyx_t_9)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -23509,25 +24329,43 @@ 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_ERR(6, 486, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_other); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 492, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
     } else {
-      __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_ERR(6, 486, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_5);
-      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_v_other};
+        __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 492, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+        __Pyx_GOTREF(__pyx_t_5);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_v_other};
+        __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 492, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+        __Pyx_GOTREF(__pyx_t_5);
+      } else
+      #endif
+      {
+        __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 492, __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_ERR(6, 492, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_5);
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
   __pyx_L3:;
 
-  /* "PETSc/petscmat.pxi":487
+  /* "PETSc/petscmat.pxi":493
  *     else:
  *         self.scale(other)
  *     return self             # <<<<<<<<<<<<<<
@@ -23539,7 +24377,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_imul(struct PyPetsc
   __pyx_r = __pyx_v_self;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":480
+  /* "PETSc/petscmat.pxi":486
  *     return self
  * 
  * cdef Mat mat_imul(Mat self, other):             # <<<<<<<<<<<<<<
@@ -23563,7 +24401,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_imul(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":489
+/* "PETSc/petscmat.pxi":495
  *     return self
  * 
  * cdef Mat mat_idiv(Mat self, other):             # <<<<<<<<<<<<<<
@@ -23583,11 +24421,11 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_idiv(struct PyPetsc
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
   PyObject *(*__pyx_t_7)(PyObject *);
-  Py_ssize_t __pyx_t_8;
+  int __pyx_t_8;
   PyObject *__pyx_t_9 = NULL;
   __Pyx_RefNannySetupContext("mat_idiv", 0);
 
-  /* "PETSc/petscmat.pxi":490
+  /* "PETSc/petscmat.pxi":496
  * 
  * cdef Mat mat_idiv(Mat self, other):
  *     if isinstance(other, (tuple, list)):             # <<<<<<<<<<<<<<
@@ -23608,7 +24446,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":491
+    /* "PETSc/petscmat.pxi":497
  * cdef Mat mat_idiv(Mat self, other):
  *     if isinstance(other, (tuple, list)):
  *         L, R = other             # <<<<<<<<<<<<<<
@@ -23617,7 +24455,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_idiv(struct PyPetsc
  */
     if ((likely(PyTuple_CheckExact(__pyx_v_other))) || (PyList_CheckExact(__pyx_v_other))) {
       PyObject* sequence = __pyx_v_other;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -23625,9 +24463,9 @@ 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_ERR(6, 491, __pyx_L1_error)
+        __PYX_ERR(6, 497, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
@@ -23638,21 +24476,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_ERR(6, 491, __pyx_L1_error)
+      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 497, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 491, __pyx_L1_error)
+      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 497, __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_ERR(6, 491, __pyx_L1_error)
+      __pyx_t_6 = PyObject_GetIter(__pyx_v_other); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 497, __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_ERR(6, 491, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(6, 497, __pyx_L1_error)
       __pyx_t_7 = NULL;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       goto __pyx_L7_unpacking_done;
@@ -23660,7 +24498,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_ERR(6, 491, __pyx_L1_error)
+      __PYX_ERR(6, 497, __pyx_L1_error)
       __pyx_L7_unpacking_done:;
     }
     __pyx_v_L = __pyx_t_4;
@@ -23668,7 +24506,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_idiv(struct PyPetsc
     __pyx_v_R = __pyx_t_5;
     __pyx_t_5 = 0;
 
-    /* "PETSc/petscmat.pxi":492
+    /* "PETSc/petscmat.pxi":498
  *     if isinstance(other, (tuple, list)):
  *         L, R = other
  *         if isinstance(L, Vec):             # <<<<<<<<<<<<<<
@@ -23679,17 +24517,17 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_idiv(struct PyPetsc
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "PETSc/petscmat.pxi":493
+      /* "PETSc/petscmat.pxi":499
  *         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_ERR(6, 493, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_L, __pyx_n_s_copy); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 499, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_6 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
         __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
         if (likely(__pyx_t_6)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -23699,27 +24537,27 @@ 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_ERR(6, 493, __pyx_L1_error)
+        __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 499, __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_ERR(6, 493, __pyx_L1_error)
+        __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 499, __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":494
+      /* "PETSc/petscmat.pxi":500
  *         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_ERR(6, 494, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_L, __pyx_n_s_reciprocal); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 500, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_6 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
         __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
         if (likely(__pyx_t_6)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -23729,16 +24567,16 @@ 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_ERR(6, 494, __pyx_L1_error)
+        __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 500, __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_ERR(6, 494, __pyx_L1_error)
+        __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 500, __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/petscmat.pxi":492
+      /* "PETSc/petscmat.pxi":498
  *     if isinstance(other, (tuple, list)):
  *         L, R = other
  *         if isinstance(L, Vec):             # <<<<<<<<<<<<<<
@@ -23747,7 +24585,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_idiv(struct PyPetsc
  */
     }
 
-    /* "PETSc/petscmat.pxi":495
+    /* "PETSc/petscmat.pxi":501
  *             L = L.copy()
  *             L.reciprocal()
  *         if isinstance(R, Vec):             # <<<<<<<<<<<<<<
@@ -23758,17 +24596,17 @@ 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":496
+      /* "PETSc/petscmat.pxi":502
  *             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_ERR(6, 496, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_R, __pyx_n_s_copy); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 502, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_6 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
         __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
         if (likely(__pyx_t_6)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -23778,27 +24616,27 @@ 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_ERR(6, 496, __pyx_L1_error)
+        __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 502, __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_ERR(6, 496, __pyx_L1_error)
+        __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 502, __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":497
+      /* "PETSc/petscmat.pxi":503
  *         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_ERR(6, 497, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_R, __pyx_n_s_reciprocal); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 503, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __pyx_t_6 = NULL;
-      if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+      if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
         __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
         if (likely(__pyx_t_6)) {
           PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -23808,16 +24646,16 @@ 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_ERR(6, 497, __pyx_L1_error)
+        __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 503, __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_ERR(6, 497, __pyx_L1_error)
+        __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 503, __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/petscmat.pxi":495
+      /* "PETSc/petscmat.pxi":501
  *             L = L.copy()
  *             L.reciprocal()
  *         if isinstance(R, Vec):             # <<<<<<<<<<<<<<
@@ -23826,18 +24664,18 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_idiv(struct PyPetsc
  */
     }
 
-    /* "PETSc/petscmat.pxi":498
+    /* "PETSc/petscmat.pxi":504
  *             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_ERR(6, 498, __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, 504, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_6 = NULL;
     __pyx_t_8 = 0;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
       __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_4);
       if (likely(__pyx_t_6)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -23847,24 +24685,42 @@ 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_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;
-    }
-    __Pyx_INCREF(__pyx_v_L);
-    __Pyx_GIVEREF(__pyx_v_L);
-    PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_v_L);
-    __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_ERR(6, 498, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_5);
-    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_4)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_L, __pyx_v_R};
+      __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 504, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __Pyx_GOTREF(__pyx_t_5);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+      PyObject *__pyx_temp[3] = {__pyx_t_6, __pyx_v_L, __pyx_v_R};
+      __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_8, 2+__pyx_t_8); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 504, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __Pyx_GOTREF(__pyx_t_5);
+    } else
+    #endif
+    {
+      __pyx_t_9 = PyTuple_New(2+__pyx_t_8); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 504, __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;
+      }
+      __Pyx_INCREF(__pyx_v_L);
+      __Pyx_GIVEREF(__pyx_v_L);
+      PyTuple_SET_ITEM(__pyx_t_9, 0+__pyx_t_8, __pyx_v_L);
+      __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_ERR(6, 504, __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
+    /* "PETSc/petscmat.pxi":496
  * 
  * cdef Mat mat_idiv(Mat self, other):
  *     if isinstance(other, (tuple, list)):             # <<<<<<<<<<<<<<
@@ -23874,7 +24730,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_idiv(struct PyPetsc
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscmat.pxi":500
+  /* "PETSc/petscmat.pxi":506
  *         self.diagonalScale(L, R)
  *     else:
  *         self.scale(other)             # <<<<<<<<<<<<<<
@@ -23882,10 +24738,10 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_idiv(struct PyPetsc
  * 
  */
   /*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_t_4 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_scale); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 506, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_9 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
       __pyx_t_9 = PyMethod_GET_SELF(__pyx_t_4);
       if (likely(__pyx_t_9)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -23895,25 +24751,43 @@ 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_ERR(6, 500, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_other); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 506, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_5);
     } else {
-      __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_ERR(6, 500, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_5);
-      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_v_other};
+        __pyx_t_5 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 506, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+        __Pyx_GOTREF(__pyx_t_5);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_9, __pyx_v_other};
+        __pyx_t_5 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 506, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+        __Pyx_GOTREF(__pyx_t_5);
+      } else
+      #endif
+      {
+        __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 506, __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_ERR(6, 506, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_5);
+        __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
   __pyx_L3:;
 
-  /* "PETSc/petscmat.pxi":501
+  /* "PETSc/petscmat.pxi":507
  *     else:
  *         self.scale(other)
  *     return self             # <<<<<<<<<<<<<<
@@ -23925,7 +24799,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_idiv(struct PyPetsc
   __pyx_r = __pyx_v_self;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":489
+  /* "PETSc/petscmat.pxi":495
  *     return self
  * 
  * cdef Mat mat_idiv(Mat self, other):             # <<<<<<<<<<<<<<
@@ -23949,7 +24823,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_idiv(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":505
+/* "PETSc/petscmat.pxi":511
  * # binary operations
  * 
  * cdef Mat mat_add(Mat self, other):             # <<<<<<<<<<<<<<
@@ -23964,7 +24838,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_add(struct PyPetscM
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("mat_add", 0);
 
-  /* "PETSc/petscmat.pxi":506
+  /* "PETSc/petscmat.pxi":512
  * 
  * cdef Mat mat_add(Mat self, other):
  *     return mat_iadd(mat_pos(self), other)             # <<<<<<<<<<<<<<
@@ -23972,16 +24846,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_ERR(6, 506, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 512, __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_ERR(6, 506, __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, 512, __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":505
+  /* "PETSc/petscmat.pxi":511
  * # binary operations
  * 
  * cdef Mat mat_add(Mat self, other):             # <<<<<<<<<<<<<<
@@ -24001,7 +24875,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_add(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":508
+/* "PETSc/petscmat.pxi":514
  *     return mat_iadd(mat_pos(self), other)
  * 
  * cdef Mat mat_sub(Mat self, other):             # <<<<<<<<<<<<<<
@@ -24016,7 +24890,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_sub(struct PyPetscM
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("mat_sub", 0);
 
-  /* "PETSc/petscmat.pxi":509
+  /* "PETSc/petscmat.pxi":515
  * 
  * cdef Mat mat_sub(Mat self, other):
  *     return mat_isub(mat_pos(self), other)             # <<<<<<<<<<<<<<
@@ -24024,16 +24898,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_ERR(6, 509, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 515, __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_ERR(6, 509, __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, 515, __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":508
+  /* "PETSc/petscmat.pxi":514
  *     return mat_iadd(mat_pos(self), other)
  * 
  * cdef Mat mat_sub(Mat self, other):             # <<<<<<<<<<<<<<
@@ -24053,7 +24927,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_sub(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":511
+/* "PETSc/petscmat.pxi":517
  *     return mat_isub(mat_pos(self), other)
  * 
  * cdef Mat mat_mul(Mat self, other):             # <<<<<<<<<<<<<<
@@ -24072,7 +24946,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_mul(struct PyPetscM
   PyObject *__pyx_t_6 = NULL;
   __Pyx_RefNannySetupContext("mat_mul", 0);
 
-  /* "PETSc/petscmat.pxi":512
+  /* "PETSc/petscmat.pxi":518
  * 
  * cdef Mat mat_mul(Mat self, other):
  *     if isinstance(other, Mat):             # <<<<<<<<<<<<<<
@@ -24083,7 +24957,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_mul(struct PyPetscM
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":513
+    /* "PETSc/petscmat.pxi":519
  * cdef Mat mat_mul(Mat self, other):
  *     if isinstance(other, Mat):
  *         return self.matMult(other)             # <<<<<<<<<<<<<<
@@ -24091,10 +24965,10 @@ 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_ERR(6, 513, __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, 519, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && 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);
@@ -24104,26 +24978,44 @@ 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_ERR(6, 513, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_v_other); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 519, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
     } else {
-      __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_ERR(6, 513, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_v_other};
+        __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 519, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_5, __pyx_v_other};
+        __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 519, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+        __Pyx_GOTREF(__pyx_t_3);
+      } else
+      #endif
+      {
+        __pyx_t_6 = PyTuple_New(1+1); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 519, __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_ERR(6, 519, __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_ERR(6, 513, __pyx_L1_error)
+    if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(6, 519, __pyx_L1_error)
     __pyx_r = ((struct PyPetscMatObject *)__pyx_t_3);
     __pyx_t_3 = 0;
     goto __pyx_L0;
 
-    /* "PETSc/petscmat.pxi":512
+    /* "PETSc/petscmat.pxi":518
  * 
  * cdef Mat mat_mul(Mat self, other):
  *     if isinstance(other, Mat):             # <<<<<<<<<<<<<<
@@ -24132,7 +25024,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_mul(struct PyPetscM
  */
   }
 
-  /* "PETSc/petscmat.pxi":515
+  /* "PETSc/petscmat.pxi":521
  *         return self.matMult(other)
  *     else:
  *         return mat_imul(mat_pos(self), other)             # <<<<<<<<<<<<<<
@@ -24141,9 +25033,9 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_mul(struct PyPetscM
  */
   /*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_ERR(6, 515, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_pos(__pyx_v_self)); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 521, __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_ERR(6, 515, __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, 521, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     __pyx_r = ((struct PyPetscMatObject *)__pyx_t_4);
@@ -24151,7 +25043,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_mul(struct PyPetscM
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscmat.pxi":511
+  /* "PETSc/petscmat.pxi":517
  *     return mat_isub(mat_pos(self), other)
  * 
  * cdef Mat mat_mul(Mat self, other):             # <<<<<<<<<<<<<<
@@ -24173,7 +25065,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_mul(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":517
+/* "PETSc/petscmat.pxi":523
  *         return mat_imul(mat_pos(self), other)
  * 
  * cdef Vec mat_mul_vec(Mat self, Vec other):             # <<<<<<<<<<<<<<
@@ -24188,21 +25080,21 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_mat_mul_vec(struct PyPe
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
-  Py_ssize_t __pyx_t_4;
+  int __pyx_t_4;
   PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("mat_mul_vec", 0);
 
-  /* "PETSc/petscmat.pxi":518
+  /* "PETSc/petscmat.pxi":524
  * 
  * 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_ERR(6, 518, __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, 524, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -24212,29 +25104,29 @@ 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_ERR(6, 518, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 524, __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(6, 518, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 524, __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_ERR(6, 518, __pyx_L1_error)
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(6, 524, __pyx_L1_error)
   __pyx_v_result = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscmat.pxi":519
+  /* "PETSc/petscmat.pxi":525
  * 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_ERR(6, 519, __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, 525, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   __pyx_t_4 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -24244,24 +25136,42 @@ 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_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;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_2)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_3, ((PyObject *)__pyx_v_other), ((PyObject *)__pyx_v_result)};
+    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 525, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_GOTREF(__pyx_t_1);
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_3, ((PyObject *)__pyx_v_other), ((PyObject *)__pyx_v_result)};
+    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 525, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_GOTREF(__pyx_t_1);
+  } else
+  #endif
+  {
+    __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 525, __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;
+    }
+    __Pyx_INCREF(((PyObject *)__pyx_v_other));
+    __Pyx_GIVEREF(((PyObject *)__pyx_v_other));
+    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, ((PyObject *)__pyx_v_other));
+    __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_ERR(6, 525, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
-  __Pyx_INCREF(((PyObject *)__pyx_v_other));
-  __Pyx_GIVEREF(((PyObject *)__pyx_v_other));
-  PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, ((PyObject *)__pyx_v_other));
-  __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_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":520
+  /* "PETSc/petscmat.pxi":526
  *     cdef Vec result = self.createVecLeft()
  *     self.mult(other, result)
  *     return result             # <<<<<<<<<<<<<<
@@ -24273,7 +25183,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_mat_mul_vec(struct PyPe
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":517
+  /* "PETSc/petscmat.pxi":523
  *         return mat_imul(mat_pos(self), other)
  * 
  * cdef Vec mat_mul_vec(Mat self, Vec other):             # <<<<<<<<<<<<<<
@@ -24296,7 +25206,7 @@ static struct PyPetscVecObject *__pyx_f_8petsc4py_5PETSc_mat_mul_vec(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":522
+/* "PETSc/petscmat.pxi":528
  *     return result
  * 
  * cdef Mat mat_div(Mat self, other):             # <<<<<<<<<<<<<<
@@ -24311,7 +25221,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_div(struct PyPetscM
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("mat_div", 0);
 
-  /* "PETSc/petscmat.pxi":523
+  /* "PETSc/petscmat.pxi":529
  * 
  * cdef Mat mat_div(Mat self, other):
  *     return mat_idiv(mat_pos(self), other)             # <<<<<<<<<<<<<<
@@ -24319,16 +25229,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_ERR(6, 523, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 529, __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_ERR(6, 523, __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, 529, __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":522
+  /* "PETSc/petscmat.pxi":528
  *     return result
  * 
  * cdef Mat mat_div(Mat self, other):             # <<<<<<<<<<<<<<
@@ -24348,7 +25258,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_div(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":527
+/* "PETSc/petscmat.pxi":533
  * # reflected binary operations
  * 
  * cdef Mat mat_radd(Mat self, other):             # <<<<<<<<<<<<<<
@@ -24362,7 +25272,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_radd(struct PyPetsc
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("mat_radd", 0);
 
-  /* "PETSc/petscmat.pxi":528
+  /* "PETSc/petscmat.pxi":534
  * 
  * cdef Mat mat_radd(Mat self, other):
  *     return mat_add(self, other)             # <<<<<<<<<<<<<<
@@ -24370,13 +25280,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_ERR(6, 528, __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, 534, __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":527
+  /* "PETSc/petscmat.pxi":533
  * # reflected binary operations
  * 
  * cdef Mat mat_radd(Mat self, other):             # <<<<<<<<<<<<<<
@@ -24395,7 +25305,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_radd(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":530
+/* "PETSc/petscmat.pxi":536
  *     return mat_add(self, other)
  * 
  * cdef Mat mat_rsub(Mat self, other):             # <<<<<<<<<<<<<<
@@ -24411,14 +25321,14 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_rsub(struct PyPetsc
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("mat_rsub", 0);
 
-  /* "PETSc/petscmat.pxi":531
+  /* "PETSc/petscmat.pxi":537
  * 
  * 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_ERR(6, 531, __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, 537, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -24426,21 +25336,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":532
+  /* "PETSc/petscmat.pxi":538
  * 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_ERR(6, 532, __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, 538, __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_ERR(6, 532, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_tuple__19, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 538, __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":533
+  /* "PETSc/petscmat.pxi":539
  *     cdef Mat mat = <Mat> mat_sub(self, other)
  *     mat.scale(-1)
  *     return mat             # <<<<<<<<<<<<<<
@@ -24452,7 +25362,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_rsub(struct PyPetsc
   __pyx_r = __pyx_v_mat;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":530
+  /* "PETSc/petscmat.pxi":536
  *     return mat_add(self, other)
  * 
  * cdef Mat mat_rsub(Mat self, other):             # <<<<<<<<<<<<<<
@@ -24473,7 +25383,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_rsub(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":535
+/* "PETSc/petscmat.pxi":541
  *     return mat
  * 
  * cdef Mat mat_rmul(Mat self, other):             # <<<<<<<<<<<<<<
@@ -24487,7 +25397,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_rmul(struct PyPetsc
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("mat_rmul", 0);
 
-  /* "PETSc/petscmat.pxi":536
+  /* "PETSc/petscmat.pxi":542
  * 
  * cdef Mat mat_rmul(Mat self, other):
  *     return mat_mul(self, other)             # <<<<<<<<<<<<<<
@@ -24495,13 +25405,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_ERR(6, 536, __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, 542, __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":535
+  /* "PETSc/petscmat.pxi":541
  *     return mat
  * 
  * cdef Mat mat_rmul(Mat self, other):             # <<<<<<<<<<<<<<
@@ -24520,7 +25430,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_rmul(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":538
+/* "PETSc/petscmat.pxi":544
  *     return mat_mul(self, other)
  * 
  * cdef Mat mat_rdiv(Mat self, other):             # <<<<<<<<<<<<<<
@@ -24533,7 +25443,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_rdiv(struct PyPetsc
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("mat_rdiv", 0);
 
-  /* "PETSc/petscmat.pxi":539
+  /* "PETSc/petscmat.pxi":545
  * 
  * cdef Mat mat_rdiv(Mat self, other):
  *     <void>self; <void>other; # unused             # <<<<<<<<<<<<<<
@@ -24543,7 +25453,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_rdiv(struct PyPetsc
   ((void)__pyx_v_self);
   ((void)__pyx_v_other);
 
-  /* "PETSc/petscmat.pxi":540
+  /* "PETSc/petscmat.pxi":546
  * cdef Mat mat_rdiv(Mat self, other):
  *     <void>self; <void>other; # unused
  *     raise NotImplementedError             # <<<<<<<<<<<<<<
@@ -24551,9 +25461,9 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_rdiv(struct PyPetsc
  * # -----------------------------------------------------------------------------
  */
   __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
-  __PYX_ERR(6, 540, __pyx_L1_error)
+  __PYX_ERR(6, 546, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":538
+  /* "PETSc/petscmat.pxi":544
  *     return mat_mul(self, other)
  * 
  * cdef Mat mat_rdiv(Mat self, other):             # <<<<<<<<<<<<<<
@@ -24570,7 +25480,7 @@ static struct PyPetscMatObject *__pyx_f_8petsc4py_5PETSc_mat_rdiv(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":544
+/* "PETSc/petscmat.pxi":550
  * # -----------------------------------------------------------------------------
  * 
  * cdef inline PetscMatStructure matstructure(object structure) \             # <<<<<<<<<<<<<<
@@ -24586,7 +25496,7 @@ static CYTHON_INLINE MatStructure __pyx_f_8petsc4py_5PETSc_matstructure(PyObject
   MatStructure __pyx_t_3;
   __Pyx_RefNannySetupContext("matstructure", 0);
 
-  /* "PETSc/petscmat.pxi":546
+  /* "PETSc/petscmat.pxi":552
  * cdef inline PetscMatStructure matstructure(object structure) \
  *     except <PetscMatStructure>(-1):
  *     if   structure is None:  return MAT_DIFFERENT_NONZERO_PATTERN             # <<<<<<<<<<<<<<
@@ -24600,7 +25510,7 @@ static CYTHON_INLINE MatStructure __pyx_f_8petsc4py_5PETSc_matstructure(PyObject
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscmat.pxi":547
+  /* "PETSc/petscmat.pxi":553
  *     except <PetscMatStructure>(-1):
  *     if   structure is None:  return MAT_DIFFERENT_NONZERO_PATTERN
  *     elif structure is False: return MAT_DIFFERENT_NONZERO_PATTERN             # <<<<<<<<<<<<<<
@@ -24614,7 +25524,7 @@ static CYTHON_INLINE MatStructure __pyx_f_8petsc4py_5PETSc_matstructure(PyObject
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscmat.pxi":548
+  /* "PETSc/petscmat.pxi":554
  *     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             # <<<<<<<<<<<<<<
@@ -24628,7 +25538,7 @@ static CYTHON_INLINE MatStructure __pyx_f_8petsc4py_5PETSc_matstructure(PyObject
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscmat.pxi":549
+  /* "PETSc/petscmat.pxi":555
  *     elif structure is False: return MAT_DIFFERENT_NONZERO_PATTERN
  *     elif structure is True:  return MAT_SAME_NONZERO_PATTERN
  *     else:                    return structure             # <<<<<<<<<<<<<<
@@ -24636,12 +25546,12 @@ static CYTHON_INLINE MatStructure __pyx_f_8petsc4py_5PETSc_matstructure(PyObject
  * cdef inline PetscMatAssemblyType assemblytype(object assembly) \
  */
   /*else*/ {
-    __pyx_t_3 = ((MatStructure)__Pyx_PyInt_As_MatStructure(__pyx_v_structure)); if (unlikely(PyErr_Occurred())) __PYX_ERR(6, 549, __pyx_L1_error)
+    __pyx_t_3 = ((MatStructure)__Pyx_PyInt_As_MatStructure(__pyx_v_structure)); if (unlikely(PyErr_Occurred())) __PYX_ERR(6, 555, __pyx_L1_error)
     __pyx_r = __pyx_t_3;
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscmat.pxi":544
+  /* "PETSc/petscmat.pxi":550
  * # -----------------------------------------------------------------------------
  * 
  * cdef inline PetscMatStructure matstructure(object structure) \             # <<<<<<<<<<<<<<
@@ -24658,7 +25568,7 @@ static CYTHON_INLINE MatStructure __pyx_f_8petsc4py_5PETSc_matstructure(PyObject
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":551
+/* "PETSc/petscmat.pxi":557
  *     else:                    return structure
  * 
  * cdef inline PetscMatAssemblyType assemblytype(object assembly) \             # <<<<<<<<<<<<<<
@@ -24674,7 +25584,7 @@ static CYTHON_INLINE MatAssemblyType __pyx_f_8petsc4py_5PETSc_assemblytype(PyObj
   MatAssemblyType __pyx_t_3;
   __Pyx_RefNannySetupContext("assemblytype", 0);
 
-  /* "PETSc/petscmat.pxi":553
+  /* "PETSc/petscmat.pxi":559
  * cdef inline PetscMatAssemblyType assemblytype(object assembly) \
  *     except <PetscMatAssemblyType>(-1):
  *     if   assembly is None:  return MAT_FINAL_ASSEMBLY             # <<<<<<<<<<<<<<
@@ -24688,7 +25598,7 @@ static CYTHON_INLINE MatAssemblyType __pyx_f_8petsc4py_5PETSc_assemblytype(PyObj
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscmat.pxi":554
+  /* "PETSc/petscmat.pxi":560
  *     except <PetscMatAssemblyType>(-1):
  *     if   assembly is None:  return MAT_FINAL_ASSEMBLY
  *     elif assembly is False: return MAT_FINAL_ASSEMBLY             # <<<<<<<<<<<<<<
@@ -24702,7 +25612,7 @@ static CYTHON_INLINE MatAssemblyType __pyx_f_8petsc4py_5PETSc_assemblytype(PyObj
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscmat.pxi":555
+  /* "PETSc/petscmat.pxi":561
  *     if   assembly is None:  return MAT_FINAL_ASSEMBLY
  *     elif assembly is False: return MAT_FINAL_ASSEMBLY
  *     elif assembly is True:  return MAT_FLUSH_ASSEMBLY             # <<<<<<<<<<<<<<
@@ -24716,7 +25626,7 @@ static CYTHON_INLINE MatAssemblyType __pyx_f_8petsc4py_5PETSc_assemblytype(PyObj
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscmat.pxi":556
+  /* "PETSc/petscmat.pxi":562
  *     elif assembly is False: return MAT_FINAL_ASSEMBLY
  *     elif assembly is True:  return MAT_FLUSH_ASSEMBLY
  *     else:                   return assembly             # <<<<<<<<<<<<<<
@@ -24724,12 +25634,12 @@ static CYTHON_INLINE MatAssemblyType __pyx_f_8petsc4py_5PETSc_assemblytype(PyObj
  * cdef inline PetscMatInfoType infotype(object info) \
  */
   /*else*/ {
-    __pyx_t_3 = ((MatAssemblyType)__Pyx_PyInt_As_MatAssemblyType(__pyx_v_assembly)); if (unlikely(PyErr_Occurred())) __PYX_ERR(6, 556, __pyx_L1_error)
+    __pyx_t_3 = ((MatAssemblyType)__Pyx_PyInt_As_MatAssemblyType(__pyx_v_assembly)); if (unlikely(PyErr_Occurred())) __PYX_ERR(6, 562, __pyx_L1_error)
     __pyx_r = __pyx_t_3;
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscmat.pxi":551
+  /* "PETSc/petscmat.pxi":557
  *     else:                    return structure
  * 
  * cdef inline PetscMatAssemblyType assemblytype(object assembly) \             # <<<<<<<<<<<<<<
@@ -24746,7 +25656,7 @@ static CYTHON_INLINE MatAssemblyType __pyx_f_8petsc4py_5PETSc_assemblytype(PyObj
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":558
+/* "PETSc/petscmat.pxi":564
  *     else:                   return assembly
  * 
  * cdef inline PetscMatInfoType infotype(object info) \             # <<<<<<<<<<<<<<
@@ -24762,7 +25672,7 @@ static CYTHON_INLINE MatInfoType __pyx_f_8petsc4py_5PETSc_infotype(PyObject *__p
   MatInfoType __pyx_t_3;
   __Pyx_RefNannySetupContext("infotype", 0);
 
-  /* "PETSc/petscmat.pxi":560
+  /* "PETSc/petscmat.pxi":566
  * cdef inline PetscMatInfoType infotype(object info) \
  *     except <PetscMatInfoType>(-1):
  *     if   info is None: return MAT_GLOBAL_SUM             # <<<<<<<<<<<<<<
@@ -24776,7 +25686,7 @@ static CYTHON_INLINE MatInfoType __pyx_f_8petsc4py_5PETSc_infotype(PyObject *__p
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscmat.pxi":561
+  /* "PETSc/petscmat.pxi":567
  *     except <PetscMatInfoType>(-1):
  *     if   info is None: return MAT_GLOBAL_SUM
  *     else:              return info             # <<<<<<<<<<<<<<
@@ -24784,12 +25694,12 @@ static CYTHON_INLINE MatInfoType __pyx_f_8petsc4py_5PETSc_infotype(PyObject *__p
  * # -----------------------------------------------------------------------------
  */
   /*else*/ {
-    __pyx_t_3 = ((MatInfoType)__Pyx_PyInt_As_MatInfoType(__pyx_v_info)); if (unlikely(PyErr_Occurred())) __PYX_ERR(6, 561, __pyx_L1_error)
+    __pyx_t_3 = ((MatInfoType)__Pyx_PyInt_As_MatInfoType(__pyx_v_info)); if (unlikely(PyErr_Occurred())) __PYX_ERR(6, 567, __pyx_L1_error)
     __pyx_r = __pyx_t_3;
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscmat.pxi":558
+  /* "PETSc/petscmat.pxi":564
  *     else:                   return assembly
  * 
  * cdef inline PetscMatInfoType infotype(object info) \             # <<<<<<<<<<<<<<
@@ -24806,7 +25716,7 @@ static CYTHON_INLINE MatInfoType __pyx_f_8petsc4py_5PETSc_infotype(PyObject *__p
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":565
+/* "PETSc/petscmat.pxi":571
  * # -----------------------------------------------------------------------------
  * 
  * cdef inline int Mat_Sizes(             # <<<<<<<<<<<<<<
@@ -24831,7 +25741,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Sizes(PyObject *__pyx_v_si
   int __pyx_t_8;
   __Pyx_RefNannySetupContext("Mat_Sizes", 0);
 
-  /* "PETSc/petscmat.pxi":573
+  /* "PETSc/petscmat.pxi":579
  *     # unpack row and column sizes
  *     cdef object rsize, csize
  *     try:             # <<<<<<<<<<<<<<
@@ -24847,7 +25757,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Sizes(PyObject *__pyx_v_si
     __Pyx_XGOTREF(__pyx_t_3);
     /*try:*/ {
 
-      /* "PETSc/petscmat.pxi":574
+      /* "PETSc/petscmat.pxi":580
  *     cdef object rsize, csize
  *     try:
  *         rsize , csize = size             # <<<<<<<<<<<<<<
@@ -24856,7 +25766,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Sizes(PyObject *__pyx_v_si
  */
       if ((likely(PyTuple_CheckExact(__pyx_v_size))) || (PyList_CheckExact(__pyx_v_size))) {
         PyObject* sequence = __pyx_v_size;
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if !CYTHON_COMPILING_IN_PYPY
         Py_ssize_t size = Py_SIZE(sequence);
         #else
         Py_ssize_t size = PySequence_Size(sequence);
@@ -24864,9 +25774,9 @@ 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_ERR(6, 574, __pyx_L3_error)
+          __PYX_ERR(6, 580, __pyx_L3_error)
         }
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         if (likely(PyTuple_CheckExact(sequence))) {
           __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
           __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
@@ -24877,37 +25787,37 @@ 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_ERR(6, 574, __pyx_L3_error)
+        __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 580, __pyx_L3_error)
         __Pyx_GOTREF(__pyx_t_4);
-        __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 574, __pyx_L3_error)
+        __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 580, __pyx_L3_error)
         __Pyx_GOTREF(__pyx_t_5);
         #endif
       } else {
         Py_ssize_t index = -1;
-        __pyx_t_6 = PyObject_GetIter(__pyx_v_size); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 574, __pyx_L3_error)
+        __pyx_t_6 = PyObject_GetIter(__pyx_v_size); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 580, __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;
+        index = 0; __pyx_t_4 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L9_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;
+        index = 1; __pyx_t_5 = __pyx_t_7(__pyx_t_6); if (unlikely(!__pyx_t_5)) goto __pyx_L9_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_5);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(6, 574, __pyx_L3_error)
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(6, 580, __pyx_L3_error)
         __pyx_t_7 = NULL;
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-        goto __pyx_L12_unpacking_done;
-        __pyx_L11_unpacking_failed:;
+        goto __pyx_L10_unpacking_done;
+        __pyx_L9_unpacking_failed:;
         __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
         __pyx_t_7 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        __PYX_ERR(6, 574, __pyx_L3_error)
-        __pyx_L12_unpacking_done:;
+        __PYX_ERR(6, 580, __pyx_L3_error)
+        __pyx_L10_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
+      /* "PETSc/petscmat.pxi":579
  *     # unpack row and column sizes
  *     cdef object rsize, csize
  *     try:             # <<<<<<<<<<<<<<
@@ -24918,14 +25828,13 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Sizes(PyObject *__pyx_v_si
     __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;
+    goto __pyx_L8_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":575
+    /* "PETSc/petscmat.pxi":581
  *     try:
  *         rsize , csize = size
  *     except (TypeError, ValueError):             # <<<<<<<<<<<<<<
@@ -24935,12 +25844,12 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Sizes(PyObject *__pyx_v_si
     __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_ERR(6, 575, __pyx_L5_except_error)
+      if (__Pyx_GetException(&__pyx_t_5, &__pyx_t_4, &__pyx_t_6) < 0) __PYX_ERR(6, 581, __pyx_L5_except_error)
       __Pyx_GOTREF(__pyx_t_5);
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_GOTREF(__pyx_t_6);
 
-      /* "PETSc/petscmat.pxi":576
+      /* "PETSc/petscmat.pxi":582
  *         rsize , csize = size
  *     except (TypeError, ValueError):
  *         rsize = csize = size             # <<<<<<<<<<<<<<
@@ -24959,29 +25868,27 @@ 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
+    /* "PETSc/petscmat.pxi":579
  *     # 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);
     __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
-    __pyx_L10_try_end:;
+    __pyx_L8_try_end:;
   }
 
-  /* "PETSc/petscmat.pxi":579
+  /* "PETSc/petscmat.pxi":585
  *     # unpack row and column block sizes
  *     cdef object rbsize, cbsize
  *     try:             # <<<<<<<<<<<<<<
@@ -24997,7 +25904,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Sizes(PyObject *__pyx_v_si
     __Pyx_XGOTREF(__pyx_t_1);
     /*try:*/ {
 
-      /* "PETSc/petscmat.pxi":580
+      /* "PETSc/petscmat.pxi":586
  *     cdef object rbsize, cbsize
  *     try:
  *         rbsize , cbsize = bsize             # <<<<<<<<<<<<<<
@@ -25006,7 +25913,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Sizes(PyObject *__pyx_v_si
  */
       if ((likely(PyTuple_CheckExact(__pyx_v_bsize))) || (PyList_CheckExact(__pyx_v_bsize))) {
         PyObject* sequence = __pyx_v_bsize;
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if !CYTHON_COMPILING_IN_PYPY
         Py_ssize_t size = Py_SIZE(sequence);
         #else
         Py_ssize_t size = PySequence_Size(sequence);
@@ -25014,9 +25921,9 @@ 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_ERR(6, 580, __pyx_L15_error)
+          __PYX_ERR(6, 586, __pyx_L13_error)
         }
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         if (likely(PyTuple_CheckExact(sequence))) {
           __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); 
           __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
@@ -25027,37 +25934,37 @@ 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_ERR(6, 580, __pyx_L15_error)
+        __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 586, __pyx_L13_error)
         __Pyx_GOTREF(__pyx_t_6);
-        __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 580, __pyx_L15_error)
+        __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 586, __pyx_L13_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_ERR(6, 580, __pyx_L15_error)
+        __pyx_t_5 = PyObject_GetIter(__pyx_v_bsize); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 586, __pyx_L13_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;
+        index = 0; __pyx_t_6 = __pyx_t_7(__pyx_t_5); 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_5); if (unlikely(!__pyx_t_4)) goto __pyx_L23_unpacking_failed;
+        index = 1; __pyx_t_4 = __pyx_t_7(__pyx_t_5); if (unlikely(!__pyx_t_4)) goto __pyx_L19_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_4);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_5), 2) < 0) __PYX_ERR(6, 580, __pyx_L15_error)
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_5), 2) < 0) __PYX_ERR(6, 586, __pyx_L13_error)
         __pyx_t_7 = NULL;
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-        goto __pyx_L24_unpacking_done;
-        __pyx_L23_unpacking_failed:;
+        goto __pyx_L20_unpacking_done;
+        __pyx_L19_unpacking_failed:;
         __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
         __pyx_t_7 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        __PYX_ERR(6, 580, __pyx_L15_error)
-        __pyx_L24_unpacking_done:;
+        __PYX_ERR(6, 586, __pyx_L13_error)
+        __pyx_L20_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
+      /* "PETSc/petscmat.pxi":585
  *     # unpack row and column block sizes
  *     cdef object rbsize, cbsize
  *     try:             # <<<<<<<<<<<<<<
@@ -25068,14 +25975,13 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Sizes(PyObject *__pyx_v_si
     __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
+    goto __pyx_L18_try_end;
+    __pyx_L13_error:;
     __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":581
+    /* "PETSc/petscmat.pxi":587
  *     try:
  *         rbsize , cbsize = bsize
  *     except (TypeError, ValueError):             # <<<<<<<<<<<<<<
@@ -25085,12 +25991,12 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Sizes(PyObject *__pyx_v_si
     __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_ERR(6, 581, __pyx_L17_except_error)
+      if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_6, &__pyx_t_5) < 0) __PYX_ERR(6, 587, __pyx_L15_except_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_GOTREF(__pyx_t_5);
 
-      /* "PETSc/petscmat.pxi":582
+      /* "PETSc/petscmat.pxi":588
  *         rbsize , cbsize = bsize
  *     except (TypeError, ValueError):
  *         rbsize = cbsize = bsize             # <<<<<<<<<<<<<<
@@ -25104,52 +26010,50 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Sizes(PyObject *__pyx_v_si
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      goto __pyx_L16_exception_handled;
+      goto __pyx_L14_exception_handled;
     }
-    goto __pyx_L17_except_error;
-    __pyx_L17_except_error:;
+    goto __pyx_L15_except_error;
+    __pyx_L15_except_error:;
 
-    /* "PETSc/petscmat.pxi":579
+    /* "PETSc/petscmat.pxi":585
  *     # 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_L14_exception_handled:;
     __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);
-    __pyx_L22_try_end:;
+    __pyx_L18_try_end:;
   }
 
-  /* "PETSc/petscmat.pxi":584
+  /* "PETSc/petscmat.pxi":590
  *         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_ERR(6, 584, __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 == ((int)-1))) __PYX_ERR(6, 590, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":585
+  /* "PETSc/petscmat.pxi":591
  *     # 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_ERR(6, 585, __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 == ((int)-1))) __PYX_ERR(6, 591, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":586
+  /* "PETSc/petscmat.pxi":592
  *     Sys_Sizes(rsize, rbsize, r, m, M)
  *     Sys_Sizes(csize, cbsize, c, n, N)
  *     return 0             # <<<<<<<<<<<<<<
@@ -25159,7 +26063,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Sizes(PyObject *__pyx_v_si
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":565
+  /* "PETSc/petscmat.pxi":571
  * # -----------------------------------------------------------------------------
  * 
  * cdef inline int Mat_Sizes(             # <<<<<<<<<<<<<<
@@ -25183,7 +26087,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Sizes(PyObject *__pyx_v_si
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":588
+/* "PETSc/petscmat.pxi":594
  *     return 0
  * 
  * cdef inline int Mat_Create(             # <<<<<<<<<<<<<<
@@ -25207,17 +26111,17 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Create(const char* __pyx_v
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("Mat_Create", 0);
 
-  /* "PETSc/petscmat.pxi":596
+  /* "PETSc/petscmat.pxi":602
  *     ) 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_ERR(6, 596, __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, 602, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/petscmat.pxi":598
+  /* "PETSc/petscmat.pxi":604
  *     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             # <<<<<<<<<<<<<<
@@ -25231,16 +26135,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":599
+  /* "PETSc/petscmat.pxi":605
  *     # 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_ERR(6, 599, __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 == ((int)-1))) __PYX_ERR(6, 605, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":600
+  /* "PETSc/petscmat.pxi":606
  *     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             # <<<<<<<<<<<<<<
@@ -25252,7 +26156,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Create(const char* __pyx_v
     __pyx_v_rbs = 1;
   }
 
-  /* "PETSc/petscmat.pxi":601
+  /* "PETSc/petscmat.pxi":607
  *     Mat_Sizes(size, bsize, &rbs, &cbs, &m, &n, &M, &N)
  *     if rbs == PETSC_DECIDE: rbs = 1
  *     if cbs == PETSC_DECIDE: cbs = rbs             # <<<<<<<<<<<<<<
@@ -25264,25 +26168,25 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Create(const char* __pyx_v
     __pyx_v_cbs = __pyx_v_rbs;
   }
 
-  /* "PETSc/petscmat.pxi":602
+  /* "PETSc/petscmat.pxi":608
  *     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_ERR(6, 602, __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 == ((int)-1))) __PYX_ERR(6, 608, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":603
+  /* "PETSc/petscmat.pxi":609
  *     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_ERR(6, 603, __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 == ((int)-1))) __PYX_ERR(6, 609, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":605
+  /* "PETSc/petscmat.pxi":611
  *     Sys_Layout(ccomm, cbs, &n, &N)
  *     # create matrix and set sizes
  *     cdef PetscMat mat = NULL             # <<<<<<<<<<<<<<
@@ -25291,43 +26195,43 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Create(const char* __pyx_v
  */
   __pyx_v_mat = NULL;
 
-  /* "PETSc/petscmat.pxi":606
+  /* "PETSc/petscmat.pxi":612
  *     # 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_ERR(6, 606, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreate(__pyx_v_ccomm, (&__pyx_v_mat))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(6, 612, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":607
+  /* "PETSc/petscmat.pxi":613
  *     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_ERR(6, 607, __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 == ((int)-1))) __PYX_ERR(6, 613, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":608
+  /* "PETSc/petscmat.pxi":614
  *     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_ERR(6, 608, __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 == ((int)-1))) __PYX_ERR(6, 614, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":609
+  /* "PETSc/petscmat.pxi":615
  *     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_ERR(6, 609, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetType(__pyx_v_mat, __pyx_v_mtype)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(6, 615, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":610
+  /* "PETSc/petscmat.pxi":616
  *     CHKERR( MatSetBlockSizes(mat, rbs, cbs) )
  *     CHKERR( MatSetType(mat, mtype) )
  *     A[0] = mat             # <<<<<<<<<<<<<<
@@ -25336,7 +26240,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":611
+  /* "PETSc/petscmat.pxi":617
  *     CHKERR( MatSetType(mat, mtype) )
  *     A[0] = mat
  *     return 0             # <<<<<<<<<<<<<<
@@ -25346,7 +26250,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Create(const char* __pyx_v
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":588
+  /* "PETSc/petscmat.pxi":594
  *     return 0
  * 
  * cdef inline int Mat_Create(             # <<<<<<<<<<<<<<
@@ -25363,7 +26267,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_Create(const char* __pyx_v
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":613
+/* "PETSc/petscmat.pxi":619
  *     return 0
  * 
  * cdef inline int Mat_AllocAIJ_NNZ( PetscMat A, object NNZ) except -1:             # <<<<<<<<<<<<<<
@@ -25401,7 +26305,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
   PyObject *__pyx_t_12 = NULL;
   __Pyx_RefNannySetupContext("Mat_AllocAIJ_NNZ", 0);
 
-  /* "PETSc/petscmat.pxi":615
+  /* "PETSc/petscmat.pxi":621
  * cdef inline int Mat_AllocAIJ_NNZ( PetscMat A, object NNZ) except -1:
  *     #
  *     cdef PetscBool aij=PETSC_FALSE, baij=PETSC_FALSE, sbaij=PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -25412,16 +26316,16 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
   __pyx_v_baij = PETSC_FALSE;
   __pyx_v_sbaij = PETSC_FALSE;
 
-  /* "PETSc/petscmat.pxi":616
+  /* "PETSc/petscmat.pxi":622
  *     #
  *     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_ERR(6, 616, __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 == ((int)-1))) __PYX_ERR(6, 622, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":618
+  /* "PETSc/petscmat.pxi":624
  *     CHKERR( MatHasPreallocationAIJ(A, &aij, &baij, &sbaij))
  *     # local row size and block size
  *     cdef PetscInt m=0, bs=1             # <<<<<<<<<<<<<<
@@ -25431,16 +26335,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":619
+  /* "PETSc/petscmat.pxi":625
  *     # 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_ERR(6, 619, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetLocalSize(__pyx_v_A, (&__pyx_v_m), NULL)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 625, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":620
+  /* "PETSc/petscmat.pxi":626
  *     cdef PetscInt m=0, bs=1
  *     CHKERR( MatGetLocalSize(A, &m, NULL) )
  *     if baij == PETSC_TRUE or sbaij == PETSC_TRUE:             # <<<<<<<<<<<<<<
@@ -25458,16 +26362,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":621
+    /* "PETSc/petscmat.pxi":627
  *     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_ERR(6, 621, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetBlockSize(__pyx_v_A, (&__pyx_v_bs))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 627, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":622
+    /* "PETSc/petscmat.pxi":628
  *     if baij == PETSC_TRUE or sbaij == PETSC_TRUE:
  *         CHKERR( MatGetBlockSize(A, &bs) )
  *         assert bs > 0, "block size not set"             # <<<<<<<<<<<<<<
@@ -25478,12 +26382,12 @@ 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_ERR(6, 622, __pyx_L1_error)
+        __PYX_ERR(6, 628, __pyx_L1_error)
       }
     }
     #endif
 
-    /* "PETSc/petscmat.pxi":620
+    /* "PETSc/petscmat.pxi":626
  *     cdef PetscInt m=0, bs=1
  *     CHKERR( MatGetLocalSize(A, &m, NULL) )
  *     if baij == PETSC_TRUE or sbaij == PETSC_TRUE:             # <<<<<<<<<<<<<<
@@ -25492,7 +26396,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
  */
   }
 
-  /* "PETSc/petscmat.pxi":625
+  /* "PETSc/petscmat.pxi":631
  *     # unpack NNZ argument
  *     cdef object od_nnz, oo_nnz
  *     try:             # <<<<<<<<<<<<<<
@@ -25508,7 +26412,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
     __Pyx_XGOTREF(__pyx_t_6);
     /*try:*/ {
 
-      /* "PETSc/petscmat.pxi":626
+      /* "PETSc/petscmat.pxi":632
  *     cdef object od_nnz, oo_nnz
  *     try:
  *         od_nnz, oo_nnz = NNZ             # <<<<<<<<<<<<<<
@@ -25517,7 +26421,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
  */
       if ((likely(PyTuple_CheckExact(__pyx_v_NNZ))) || (PyList_CheckExact(__pyx_v_NNZ))) {
         PyObject* sequence = __pyx_v_NNZ;
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if !CYTHON_COMPILING_IN_PYPY
         Py_ssize_t size = Py_SIZE(sequence);
         #else
         Py_ssize_t size = PySequence_Size(sequence);
@@ -25525,9 +26429,9 @@ 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_ERR(6, 626, __pyx_L6_error)
+          __PYX_ERR(6, 632, __pyx_L6_error)
         }
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         if (likely(PyTuple_CheckExact(sequence))) {
           __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); 
           __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
@@ -25538,37 +26442,37 @@ 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_ERR(6, 626, __pyx_L6_error)
+        __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 632, __pyx_L6_error)
         __Pyx_GOTREF(__pyx_t_7);
-        __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 626, __pyx_L6_error)
+        __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 632, __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_ERR(6, 626, __pyx_L6_error)
+        __pyx_t_9 = PyObject_GetIter(__pyx_v_NNZ); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 632, __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;
+        index = 0; __pyx_t_7 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_7)) goto __pyx_L12_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;
+        index = 1; __pyx_t_8 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L12_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_8);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) __PYX_ERR(6, 626, __pyx_L6_error)
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) __PYX_ERR(6, 632, __pyx_L6_error)
         __pyx_t_10 = NULL;
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-        goto __pyx_L15_unpacking_done;
-        __pyx_L14_unpacking_failed:;
+        goto __pyx_L13_unpacking_done;
+        __pyx_L12_unpacking_failed:;
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         __pyx_t_10 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        __PYX_ERR(6, 626, __pyx_L6_error)
-        __pyx_L15_unpacking_done:;
+        __PYX_ERR(6, 632, __pyx_L6_error)
+        __pyx_L13_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
+      /* "PETSc/petscmat.pxi":631
  *     # unpack NNZ argument
  *     cdef object od_nnz, oo_nnz
  *     try:             # <<<<<<<<<<<<<<
@@ -25579,14 +26483,13 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
     __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;
+    goto __pyx_L11_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":627
+    /* "PETSc/petscmat.pxi":633
  *     try:
  *         od_nnz, oo_nnz = NNZ
  *     except (TypeError, ValueError):             # <<<<<<<<<<<<<<
@@ -25596,12 +26499,12 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
     __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_ERR(6, 627, __pyx_L8_except_error)
+      if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_9) < 0) __PYX_ERR(6, 633, __pyx_L8_except_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_GOTREF(__pyx_t_9);
 
-      /* "PETSc/petscmat.pxi":628
+      /* "PETSc/petscmat.pxi":634
  *         od_nnz, oo_nnz = NNZ
  *     except (TypeError, ValueError):
  *         od_nnz, oo_nnz = NNZ, None             # <<<<<<<<<<<<<<
@@ -25624,29 +26527,27 @@ 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
+    /* "PETSc/petscmat.pxi":631
  *     # 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);
     __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
-    __pyx_L13_try_end:;
+    __pyx_L11_try_end:;
   }
 
-  /* "PETSc/petscmat.pxi":630
+  /* "PETSc/petscmat.pxi":636
  *         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             # <<<<<<<<<<<<<<
@@ -25657,7 +26558,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":631
+  /* "PETSc/petscmat.pxi":637
  *     # 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:             # <<<<<<<<<<<<<<
@@ -25668,46 +26569,47 @@ 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":632
+    /* "PETSc/petscmat.pxi":638
  *     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_ERR(6, 632, __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, 638, __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":633
+    /* "PETSc/petscmat.pxi":639
  *     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_t_3 = ((__pyx_v_d_n == 0) != 0);
+    if (__pyx_t_3) {
       __pyx_v_d_nnz = NULL;
-      break;
+      goto __pyx_L17;
+    }
 
-      /* "PETSc/petscmat.pxi":634
+    /* "PETSc/petscmat.pxi":640
  *         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:
  */
-      case 1:
+    __pyx_t_3 = ((__pyx_v_d_n == 1) != 0);
+    if (__pyx_t_3) {
       __pyx_v_d_nz = (__pyx_v_d_nnz[0]);
       __pyx_v_d_n = 0;
       __pyx_v_d_nnz = NULL;
-      break;
-      default: break;
     }
+    __pyx_L17:;
 
-    /* "PETSc/petscmat.pxi":631
+    /* "PETSc/petscmat.pxi":637
  *     # 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:             # <<<<<<<<<<<<<<
@@ -25716,7 +26618,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
  */
   }
 
-  /* "PETSc/petscmat.pxi":635
+  /* "PETSc/petscmat.pxi":641
  *         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             # <<<<<<<<<<<<<<
@@ -25727,7 +26629,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":636
+  /* "PETSc/petscmat.pxi":642
  *         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:             # <<<<<<<<<<<<<<
@@ -25738,46 +26640,47 @@ 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":637
+    /* "PETSc/petscmat.pxi":643
  *     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_ERR(6, 637, __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, 643, __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":638
+    /* "PETSc/petscmat.pxi":644
  *     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_t_2 = ((__pyx_v_o_n == 0) != 0);
+    if (__pyx_t_2) {
       __pyx_v_o_nnz = NULL;
-      break;
+      goto __pyx_L19;
+    }
 
-      /* "PETSc/petscmat.pxi":639
+    /* "PETSc/petscmat.pxi":645
  *         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
  */
-      case 1:
+    __pyx_t_2 = ((__pyx_v_o_n == 1) != 0);
+    if (__pyx_t_2) {
       __pyx_v_o_nz = (__pyx_v_o_nnz[0]);
       __pyx_v_o_n = 0;
       __pyx_v_o_nnz = NULL;
-      break;
-      default: break;
     }
+    __pyx_L19:;
 
-    /* "PETSc/petscmat.pxi":636
+    /* "PETSc/petscmat.pxi":642
  *         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:             # <<<<<<<<<<<<<<
@@ -25786,7 +26689,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
  */
   }
 
-  /* "PETSc/petscmat.pxi":640
+  /* "PETSc/petscmat.pxi":646
  *         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:             # <<<<<<<<<<<<<<
@@ -25796,7 +26699,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":641
+    /* "PETSc/petscmat.pxi":647
  *         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             # <<<<<<<<<<<<<<
@@ -25816,7 +26719,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
       __pyx_v_m = (__pyx_v_d_n * __pyx_v_bs);
     }
 
-    /* "PETSc/petscmat.pxi":642
+    /* "PETSc/petscmat.pxi":648
  *     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             # <<<<<<<<<<<<<<
@@ -25836,7 +26739,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
       __pyx_v_m = (__pyx_v_o_n * __pyx_v_bs);
     }
 
-    /* "PETSc/petscmat.pxi":640
+    /* "PETSc/petscmat.pxi":646
  *         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:             # <<<<<<<<<<<<<<
@@ -25845,7 +26748,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
  */
   }
 
-  /* "PETSc/petscmat.pxi":644
+  /* "PETSc/petscmat.pxi":650
  *         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(             # <<<<<<<<<<<<<<
@@ -25863,18 +26766,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":646
+    /* "PETSc/petscmat.pxi":652
  *     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_ERR(6, 646, __pyx_L1_error)
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_d_n); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 652, __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_ERR(6, 646, __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, 652, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 646, __pyx_L1_error)
+    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 652, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_GIVEREF(__pyx_t_9);
     PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9);
@@ -25883,38 +26786,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":645
+    /* "PETSc/petscmat.pxi":651
  *     # 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_ERR(6, 645, __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, 651, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-    /* "PETSc/petscmat.pxi":644
+    /* "PETSc/petscmat.pxi":650
  *         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_ERR(6, 644, __pyx_L1_error)
+    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 650, __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_ERR(6, 644, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 650, __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_ERR(6, 644, __pyx_L1_error)
+    __PYX_ERR(6, 650, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":647
+  /* "PETSc/petscmat.pxi":653
  *         "size(d_nnz) is %d, expected %d" %
  *             (toInt(d_n), toInt(m//bs)) )
  *     if o_n > 1 and o_n*bs != m: raise ValueError(             # <<<<<<<<<<<<<<
@@ -25932,18 +26835,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":649
+    /* "PETSc/petscmat.pxi":655
  *     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_ERR(6, 649, __pyx_L1_error)
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_o_n); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 655, __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_ERR(6, 649, __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, 655, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 649, __pyx_L1_error)
+    __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 655, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_GIVEREF(__pyx_t_7);
     PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7);
@@ -25952,38 +26855,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":648
+    /* "PETSc/petscmat.pxi":654
  *             (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_ERR(6, 648, __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, 654, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
 
-    /* "PETSc/petscmat.pxi":647
+    /* "PETSc/petscmat.pxi":653
  *         "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_ERR(6, 647, __pyx_L1_error)
+    __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 653, __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_ERR(6, 647, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_9, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 653, __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_ERR(6, 647, __pyx_L1_error)
+    __PYX_ERR(6, 653, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":651
+  /* "PETSc/petscmat.pxi":657
  *             (toInt(o_n), toInt(m//bs)) )
  *     # preallocate
  *     if aij == PETSC_TRUE:             # <<<<<<<<<<<<<<
@@ -25993,25 +26896,25 @@ 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":652
+    /* "PETSc/petscmat.pxi":658
  *     # 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_ERR(6, 652, __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 == ((int)-1))) __PYX_ERR(6, 658, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":653
+    /* "PETSc/petscmat.pxi":659
  *     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_ERR(6, 653, __pyx_L1_error)
+    __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 == ((int)-1))) __PYX_ERR(6, 659, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":651
+    /* "PETSc/petscmat.pxi":657
  *             (toInt(o_n), toInt(m//bs)) )
  *     # preallocate
  *     if aij == PETSC_TRUE:             # <<<<<<<<<<<<<<
@@ -26020,7 +26923,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
  */
   }
 
-  /* "PETSc/petscmat.pxi":654
+  /* "PETSc/petscmat.pxi":660
  *         CHKERR( MatSeqAIJSetPreallocation(A, d_nz, d_nnz) )
  *         CHKERR( MatMPIAIJSetPreallocation(A, d_nz, d_nnz, o_nz, o_nnz) )
  *     if baij == PETSC_TRUE:             # <<<<<<<<<<<<<<
@@ -26030,25 +26933,25 @@ 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":655
+    /* "PETSc/petscmat.pxi":661
  *         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_ERR(6, 655, __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 == ((int)-1))) __PYX_ERR(6, 661, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":656
+    /* "PETSc/petscmat.pxi":662
  *     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_ERR(6, 656, __pyx_L1_error)
+    __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 == ((int)-1))) __PYX_ERR(6, 662, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":654
+    /* "PETSc/petscmat.pxi":660
  *         CHKERR( MatSeqAIJSetPreallocation(A, d_nz, d_nnz) )
  *         CHKERR( MatMPIAIJSetPreallocation(A, d_nz, d_nnz, o_nz, o_nnz) )
  *     if baij == PETSC_TRUE:             # <<<<<<<<<<<<<<
@@ -26057,7 +26960,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
  */
   }
 
-  /* "PETSc/petscmat.pxi":657
+  /* "PETSc/petscmat.pxi":663
  *         CHKERR( MatSeqBAIJSetPreallocation(A, bs, d_nz, d_nnz) )
  *         CHKERR( MatMPIBAIJSetPreallocation(A, bs, d_nz, d_nnz, o_nz, o_nnz) )
  *     if sbaij == PETSC_TRUE:             # <<<<<<<<<<<<<<
@@ -26067,25 +26970,25 @@ 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":658
+    /* "PETSc/petscmat.pxi":664
  *         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_ERR(6, 658, __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 == ((int)-1))) __PYX_ERR(6, 664, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":659
+    /* "PETSc/petscmat.pxi":665
  *     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_ERR(6, 659, __pyx_L1_error)
+    __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 == ((int)-1))) __PYX_ERR(6, 665, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":657
+    /* "PETSc/petscmat.pxi":663
  *         CHKERR( MatSeqBAIJSetPreallocation(A, bs, d_nz, d_nnz) )
  *         CHKERR( MatMPIBAIJSetPreallocation(A, bs, d_nz, d_nnz, o_nz, o_nnz) )
  *     if sbaij == PETSC_TRUE:             # <<<<<<<<<<<<<<
@@ -26094,7 +26997,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
  */
   }
 
-  /* "PETSc/petscmat.pxi":660
+  /* "PETSc/petscmat.pxi":666
  *         CHKERR( MatSeqSBAIJSetPreallocation(A, bs, d_nz, d_nnz) )
  *         CHKERR( MatMPISBAIJSetPreallocation(A, bs, d_nz, d_nnz, o_nz, o_nnz) )
  *     return 0             # <<<<<<<<<<<<<<
@@ -26104,7 +27007,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":613
+  /* "PETSc/petscmat.pxi":619
  *     return 0
  * 
  * cdef inline int Mat_AllocAIJ_NNZ( PetscMat A, object NNZ) except -1:             # <<<<<<<<<<<<<<
@@ -26128,7 +27031,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(Mat __pyx_v_A
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":662
+/* "PETSc/petscmat.pxi":668
  *     return 0
  * 
  * cdef inline int Mat_AllocAIJ_CSR(PetscMat A, object CSR) except -1:             # <<<<<<<<<<<<<<
@@ -26168,7 +27071,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
   PyObject *__pyx_t_13 = NULL;
   __Pyx_RefNannySetupContext("Mat_AllocAIJ_CSR", 0);
 
-  /* "PETSc/petscmat.pxi":664
+  /* "PETSc/petscmat.pxi":670
  * cdef inline int Mat_AllocAIJ_CSR(PetscMat A, object CSR) except -1:
  *     #
  *     cdef PetscBool aij=PETSC_FALSE, baij=PETSC_FALSE, sbaij=PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -26179,16 +27082,16 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
   __pyx_v_baij = PETSC_FALSE;
   __pyx_v_sbaij = PETSC_FALSE;
 
-  /* "PETSc/petscmat.pxi":665
+  /* "PETSc/petscmat.pxi":671
  *     #
  *     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_ERR(6, 665, __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 == ((int)-1))) __PYX_ERR(6, 671, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":667
+  /* "PETSc/petscmat.pxi":673
  *     CHKERR( MatHasPreallocationAIJ(A, &aij, &baij, &sbaij))
  *     # local row size and block size
  *     cdef PetscInt m=0, bs = 1             # <<<<<<<<<<<<<<
@@ -26198,16 +27101,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":668
+  /* "PETSc/petscmat.pxi":674
  *     # 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_ERR(6, 668, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetLocalSize(__pyx_v_A, (&__pyx_v_m), NULL)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 674, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":669
+  /* "PETSc/petscmat.pxi":675
  *     cdef PetscInt m=0, bs = 1
  *     CHKERR( MatGetLocalSize(A, &m, NULL) )
  *     if baij == PETSC_TRUE or sbaij == PETSC_TRUE:             # <<<<<<<<<<<<<<
@@ -26225,16 +27128,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":670
+    /* "PETSc/petscmat.pxi":676
  *     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_ERR(6, 670, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetBlockSize(__pyx_v_A, (&__pyx_v_bs))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 676, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":671
+    /* "PETSc/petscmat.pxi":677
  *     if baij == PETSC_TRUE or sbaij == PETSC_TRUE:
  *         CHKERR( MatGetBlockSize(A, &bs) )
  *         assert bs > 0, "block size not set"             # <<<<<<<<<<<<<<
@@ -26245,12 +27148,12 @@ 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_ERR(6, 671, __pyx_L1_error)
+        __PYX_ERR(6, 677, __pyx_L1_error)
       }
     }
     #endif
 
-    /* "PETSc/petscmat.pxi":669
+    /* "PETSc/petscmat.pxi":675
  *     cdef PetscInt m=0, bs = 1
  *     CHKERR( MatGetLocalSize(A, &m, NULL) )
  *     if baij == PETSC_TRUE or sbaij == PETSC_TRUE:             # <<<<<<<<<<<<<<
@@ -26259,7 +27162,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
  */
   }
 
-  /* "PETSc/petscmat.pxi":674
+  /* "PETSc/petscmat.pxi":680
  *     # unpack CSR argument
  *     cdef object oi, oj, ov
  *     try:             # <<<<<<<<<<<<<<
@@ -26275,7 +27178,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
     __Pyx_XGOTREF(__pyx_t_6);
     /*try:*/ {
 
-      /* "PETSc/petscmat.pxi":675
+      /* "PETSc/petscmat.pxi":681
  *     cdef object oi, oj, ov
  *     try:
  *         oi, oj, ov = CSR             # <<<<<<<<<<<<<<
@@ -26284,7 +27187,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
  */
       if ((likely(PyTuple_CheckExact(__pyx_v_CSR))) || (PyList_CheckExact(__pyx_v_CSR))) {
         PyObject* sequence = __pyx_v_CSR;
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if !CYTHON_COMPILING_IN_PYPY
         Py_ssize_t size = Py_SIZE(sequence);
         #else
         Py_ssize_t size = PySequence_Size(sequence);
@@ -26292,9 +27195,9 @@ 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_ERR(6, 675, __pyx_L6_error)
+          __PYX_ERR(6, 681, __pyx_L6_error)
         }
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         if (likely(PyTuple_CheckExact(sequence))) {
           __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); 
           __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
@@ -26308,34 +27211,34 @@ 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_ERR(6, 675, __pyx_L6_error)
+        __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 681, __pyx_L6_error)
         __Pyx_GOTREF(__pyx_t_7);
-        __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 675, __pyx_L6_error)
+        __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 681, __pyx_L6_error)
         __Pyx_GOTREF(__pyx_t_8);
-        __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 675, __pyx_L6_error)
+        __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 681, __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_ERR(6, 675, __pyx_L6_error)
+        __pyx_t_10 = PyObject_GetIter(__pyx_v_CSR); if (unlikely(!__pyx_t_10)) __PYX_ERR(6, 681, __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;
+        index = 0; __pyx_t_7 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_7)) goto __pyx_L12_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_7);
-        index = 1; __pyx_t_8 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_8)) goto __pyx_L14_unpacking_failed;
+        index = 1; __pyx_t_8 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_8)) goto __pyx_L12_unpacking_failed;
         __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;
+        index = 2; __pyx_t_9 = __pyx_t_11(__pyx_t_10); if (unlikely(!__pyx_t_9)) goto __pyx_L12_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_9);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 3) < 0) __PYX_ERR(6, 675, __pyx_L6_error)
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 3) < 0) __PYX_ERR(6, 681, __pyx_L6_error)
         __pyx_t_11 = NULL;
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-        goto __pyx_L15_unpacking_done;
-        __pyx_L14_unpacking_failed:;
+        goto __pyx_L13_unpacking_done;
+        __pyx_L12_unpacking_failed:;
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         __pyx_t_11 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        __PYX_ERR(6, 675, __pyx_L6_error)
-        __pyx_L15_unpacking_done:;
+        __PYX_ERR(6, 681, __pyx_L6_error)
+        __pyx_L13_unpacking_done:;
       }
       __pyx_v_oi = __pyx_t_7;
       __pyx_t_7 = 0;
@@ -26344,7 +27247,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
       __pyx_v_ov = __pyx_t_9;
       __pyx_t_9 = 0;
 
-      /* "PETSc/petscmat.pxi":674
+      /* "PETSc/petscmat.pxi":680
  *     # unpack CSR argument
  *     cdef object oi, oj, ov
  *     try:             # <<<<<<<<<<<<<<
@@ -26355,15 +27258,14 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
     __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;
+    goto __pyx_L11_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":676
+    /* "PETSc/petscmat.pxi":682
  *     try:
  *         oi, oj, ov = CSR
  *     except (TypeError, ValueError):             # <<<<<<<<<<<<<<
@@ -26373,12 +27275,12 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
     __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_ERR(6, 676, __pyx_L8_except_error)
+      if (__Pyx_GetException(&__pyx_t_9, &__pyx_t_8, &__pyx_t_7) < 0) __PYX_ERR(6, 682, __pyx_L8_except_error)
       __Pyx_GOTREF(__pyx_t_9);
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_GOTREF(__pyx_t_7);
 
-      /* "PETSc/petscmat.pxi":677
+      /* "PETSc/petscmat.pxi":683
  *         oi, oj, ov = CSR
  *     except (TypeError, ValueError):
  *         oi, oj = CSR; ov = None             # <<<<<<<<<<<<<<
@@ -26387,7 +27289,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
  */
       if ((likely(PyTuple_CheckExact(__pyx_v_CSR))) || (PyList_CheckExact(__pyx_v_CSR))) {
         PyObject* sequence = __pyx_v_CSR;
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if !CYTHON_COMPILING_IN_PYPY
         Py_ssize_t size = Py_SIZE(sequence);
         #else
         Py_ssize_t size = PySequence_Size(sequence);
@@ -26395,9 +27297,9 @@ 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_ERR(6, 677, __pyx_L8_except_error)
+          __PYX_ERR(6, 683, __pyx_L8_except_error)
         }
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         if (likely(PyTuple_CheckExact(sequence))) {
           __pyx_t_10 = PyTuple_GET_ITEM(sequence, 0); 
           __pyx_t_12 = PyTuple_GET_ITEM(sequence, 1); 
@@ -26408,30 +27310,30 @@ 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_ERR(6, 677, __pyx_L8_except_error)
+        __pyx_t_10 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_10)) __PYX_ERR(6, 683, __pyx_L8_except_error)
         __Pyx_GOTREF(__pyx_t_10);
-        __pyx_t_12 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(6, 677, __pyx_L8_except_error)
+        __pyx_t_12 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(6, 683, __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_ERR(6, 677, __pyx_L8_except_error)
+        __pyx_t_13 = PyObject_GetIter(__pyx_v_CSR); if (unlikely(!__pyx_t_13)) __PYX_ERR(6, 683, __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;
+        index = 0; __pyx_t_10 = __pyx_t_11(__pyx_t_13); if (unlikely(!__pyx_t_10)) goto __pyx_L16_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;
+        index = 1; __pyx_t_12 = __pyx_t_11(__pyx_t_13); if (unlikely(!__pyx_t_12)) goto __pyx_L16_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_12);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_13), 2) < 0) __PYX_ERR(6, 677, __pyx_L8_except_error)
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_13), 2) < 0) __PYX_ERR(6, 683, __pyx_L8_except_error)
         __pyx_t_11 = NULL;
         __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
-        goto __pyx_L19_unpacking_done;
-        __pyx_L18_unpacking_failed:;
+        goto __pyx_L17_unpacking_done;
+        __pyx_L16_unpacking_failed:;
         __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
         __pyx_t_11 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        __PYX_ERR(6, 677, __pyx_L8_except_error)
-        __pyx_L19_unpacking_done:;
+        __PYX_ERR(6, 683, __pyx_L8_except_error)
+        __pyx_L17_unpacking_done:;
       }
       __Pyx_XDECREF_SET(__pyx_v_oi, __pyx_t_10);
       __pyx_t_10 = 0;
@@ -26447,29 +27349,27 @@ 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
+    /* "PETSc/petscmat.pxi":680
  *     # 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);
     __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
-    __pyx_L13_try_end:;
+    __pyx_L11_try_end:;
   }
 
-  /* "PETSc/petscmat.pxi":679
+  /* "PETSc/petscmat.pxi":685
  *         oi, oj = CSR; ov = None
  *     # rows, cols, and values
  *     cdef PetscInt ni=0, *i=NULL             # <<<<<<<<<<<<<<
@@ -26479,7 +27379,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":680
+  /* "PETSc/petscmat.pxi":686
  *     # rows, cols, and values
  *     cdef PetscInt ni=0, *i=NULL
  *     cdef PetscInt nj=0, *j=NULL             # <<<<<<<<<<<<<<
@@ -26489,7 +27389,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":681
+  /* "PETSc/petscmat.pxi":687
  *     cdef PetscInt ni=0, *i=NULL
  *     cdef PetscInt nj=0, *j=NULL
  *     cdef PetscInt nv=0             # <<<<<<<<<<<<<<
@@ -26498,7 +27398,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
  */
   __pyx_v_nv = 0;
 
-  /* "PETSc/petscmat.pxi":682
+  /* "PETSc/petscmat.pxi":688
  *     cdef PetscInt nj=0, *j=NULL
  *     cdef PetscInt nv=0
  *     cdef PetscScalar *v=NULL             # <<<<<<<<<<<<<<
@@ -26507,31 +27407,31 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
  */
   __pyx_v_v = NULL;
 
-  /* "PETSc/petscmat.pxi":683
+  /* "PETSc/petscmat.pxi":689
  *     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_ERR(6, 683, __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, 689, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF_SET(__pyx_v_oi, __pyx_t_7);
   __pyx_t_7 = 0;
 
-  /* "PETSc/petscmat.pxi":684
+  /* "PETSc/petscmat.pxi":690
  *     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_ERR(6, 684, __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, 690, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF_SET(__pyx_v_oj, __pyx_t_7);
   __pyx_t_7 = 0;
 
-  /* "PETSc/petscmat.pxi":685
+  /* "PETSc/petscmat.pxi":691
  *     oi = iarray_i(oi, &ni, &i)
  *     oj = iarray_i(oj, &nj, &j)
  *     if ov is not None:             # <<<<<<<<<<<<<<
@@ -26542,19 +27442,19 @@ 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":686
+    /* "PETSc/petscmat.pxi":692
  *     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_ERR(6, 686, __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, 692, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_DECREF_SET(__pyx_v_ov, __pyx_t_7);
     __pyx_t_7 = 0;
 
-    /* "PETSc/petscmat.pxi":685
+    /* "PETSc/petscmat.pxi":691
  *     oi = iarray_i(oi, &ni, &i)
  *     oj = iarray_i(oj, &nj, &j)
  *     if ov is not None:             # <<<<<<<<<<<<<<
@@ -26563,7 +27463,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
  */
   }
 
-  /* "PETSc/petscmat.pxi":687
+  /* "PETSc/petscmat.pxi":693
  *     if ov is not None:
  *         ov = iarray_s(ov, &nv, &v)
  *     if m == PETSC_DECIDE: m = (ni-1)*bs             # <<<<<<<<<<<<<<
@@ -26575,7 +27475,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
     __pyx_v_m = ((__pyx_v_ni - 1) * __pyx_v_bs);
   }
 
-  /* "PETSc/petscmat.pxi":689
+  /* "PETSc/petscmat.pxi":695
  *     if m == PETSC_DECIDE: m = (ni-1)*bs
  *     # check array sizes
  *     if ((ni-1)*bs != m):             # <<<<<<<<<<<<<<
@@ -26585,18 +27485,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":691
+    /* "PETSc/petscmat.pxi":697
  *     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_ERR(6, 691, __pyx_L1_error)
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ni); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 697, __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_ERR(6, 691, __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, 697, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 691, __pyx_L1_error)
+    __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 697, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_GIVEREF(__pyx_t_7);
     PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7);
@@ -26605,29 +27505,29 @@ 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":690
+    /* "PETSc/petscmat.pxi":696
  *     # 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_ERR(6, 690, __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, 696, __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_ERR(6, 690, __pyx_L1_error)
+    __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 696, __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_ERR(6, 690, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_9, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 696, __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_ERR(6, 690, __pyx_L1_error)
+    __PYX_ERR(6, 696, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":689
+    /* "PETSc/petscmat.pxi":695
  *     if m == PETSC_DECIDE: m = (ni-1)*bs
  *     # check array sizes
  *     if ((ni-1)*bs != m):             # <<<<<<<<<<<<<<
@@ -26636,7 +27536,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
  */
   }
 
-  /* "PETSc/petscmat.pxi":692
+  /* "PETSc/petscmat.pxi":698
  *         raise ValueError("size(I) is %d, expected %d" %
  *                          (toInt(ni), toInt(m//bs+1)) )
  *     if (i[0] != 0):             # <<<<<<<<<<<<<<
@@ -26646,18 +27546,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":694
+    /* "PETSc/petscmat.pxi":700
  *     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_ERR(6, 694, __pyx_L1_error)
+    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_i[0])); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 700, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toInt(0); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 694, __pyx_L1_error)
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toInt(0); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 700, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
-    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 694, __pyx_L1_error)
+    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 700, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_GIVEREF(__pyx_t_8);
     PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_8);
@@ -26666,29 +27566,29 @@ 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":693
+    /* "PETSc/petscmat.pxi":699
  *                          (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_ERR(6, 693, __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, 699, __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_ERR(6, 693, __pyx_L1_error)
+    __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 699, __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_ERR(6, 693, __pyx_L1_error)
+    __pyx_t_9 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_7, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 699, __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_ERR(6, 693, __pyx_L1_error)
+    __PYX_ERR(6, 699, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":692
+    /* "PETSc/petscmat.pxi":698
  *         raise ValueError("size(I) is %d, expected %d" %
  *                          (toInt(ni), toInt(m//bs+1)) )
  *     if (i[0] != 0):             # <<<<<<<<<<<<<<
@@ -26697,7 +27597,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
  */
   }
 
-  /* "PETSc/petscmat.pxi":695
+  /* "PETSc/petscmat.pxi":701
  *         raise ValueError("I[0] is %d, expected %d" %
  *                          (toInt(i[0]), toInt(0)) )
  *     if (i[ni-1] != nj):             # <<<<<<<<<<<<<<
@@ -26707,18 +27607,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":697
+    /* "PETSc/petscmat.pxi":703
  *     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_ERR(6, 697, __pyx_L1_error)
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nj); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 703, __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_ERR(6, 697, __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, 703, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 697, __pyx_L1_error)
+    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 703, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_GIVEREF(__pyx_t_9);
     PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_9);
@@ -26727,29 +27627,29 @@ 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":696
+    /* "PETSc/petscmat.pxi":702
  *                          (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_ERR(6, 696, __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, 702, __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_ERR(6, 696, __pyx_L1_error)
+    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 702, __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_ERR(6, 696, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 702, __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_ERR(6, 696, __pyx_L1_error)
+    __PYX_ERR(6, 702, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":695
+    /* "PETSc/petscmat.pxi":701
  *         raise ValueError("I[0] is %d, expected %d" %
  *                          (toInt(i[0]), toInt(0)) )
  *     if (i[ni-1] != nj):             # <<<<<<<<<<<<<<
@@ -26758,7 +27658,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
  */
   }
 
-  /* "PETSc/petscmat.pxi":698
+  /* "PETSc/petscmat.pxi":704
  *         raise ValueError("size(J) is %d, expected %d" %
  *                          (toInt(nj), toInt(i[ni-1])) )
  *     if v != NULL and (nj*bs*bs != nv):             # <<<<<<<<<<<<<<
@@ -26769,25 +27669,25 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
   if (__pyx_t_2) {
   } else {
     __pyx_t_3 = __pyx_t_2;
-    goto __pyx_L26_bool_binop_done;
+    goto __pyx_L24_bool_binop_done;
   }
   __pyx_t_2 = ((((__pyx_v_nj * __pyx_v_bs) * __pyx_v_bs) != __pyx_v_nv) != 0);
   __pyx_t_3 = __pyx_t_2;
-  __pyx_L26_bool_binop_done:;
+  __pyx_L24_bool_binop_done:;
   if (__pyx_t_3) {
 
-    /* "PETSc/petscmat.pxi":700
+    /* "PETSc/petscmat.pxi":706
  *     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_ERR(6, 700, __pyx_L1_error)
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nv); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 706, __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_ERR(6, 700, __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, 706, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 700, __pyx_L1_error)
+    __pyx_t_9 = PyTuple_New(2); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 706, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __Pyx_GIVEREF(__pyx_t_7);
     PyTuple_SET_ITEM(__pyx_t_9, 0, __pyx_t_7);
@@ -26796,29 +27696,29 @@ 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":699
+    /* "PETSc/petscmat.pxi":705
  *                          (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_ERR(6, 699, __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, 705, __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_ERR(6, 699, __pyx_L1_error)
+    __pyx_t_9 = PyTuple_New(1); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 705, __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_ERR(6, 699, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_9, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 705, __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_ERR(6, 699, __pyx_L1_error)
+    __PYX_ERR(6, 705, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":698
+    /* "PETSc/petscmat.pxi":704
  *         raise ValueError("size(J) is %d, expected %d" %
  *                          (toInt(nj), toInt(i[ni-1])) )
  *     if v != NULL and (nj*bs*bs != nv):             # <<<<<<<<<<<<<<
@@ -26827,7 +27727,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
  */
   }
 
-  /* "PETSc/petscmat.pxi":702
+  /* "PETSc/petscmat.pxi":708
  *                          (toInt(nv), toInt(nj*bs*bs)) )
  *     # preallocate
  *     if aij == PETSC_TRUE:             # <<<<<<<<<<<<<<
@@ -26837,25 +27737,25 @@ 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":703
+    /* "PETSc/petscmat.pxi":709
  *     # 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_ERR(6, 703, __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 == ((int)-1))) __PYX_ERR(6, 709, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":704
+    /* "PETSc/petscmat.pxi":710
  *     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_ERR(6, 704, __pyx_L1_error)
+    __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 == ((int)-1))) __PYX_ERR(6, 710, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":702
+    /* "PETSc/petscmat.pxi":708
  *                          (toInt(nv), toInt(nj*bs*bs)) )
  *     # preallocate
  *     if aij == PETSC_TRUE:             # <<<<<<<<<<<<<<
@@ -26864,7 +27764,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
  */
   }
 
-  /* "PETSc/petscmat.pxi":705
+  /* "PETSc/petscmat.pxi":711
  *         CHKERR( MatSeqAIJSetPreallocationCSR(A, i, j, v) )
  *         CHKERR( MatMPIAIJSetPreallocationCSR(A, i, j, v) )
  *     if baij == PETSC_TRUE:             # <<<<<<<<<<<<<<
@@ -26874,25 +27774,25 @@ 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":706
+    /* "PETSc/petscmat.pxi":712
  *         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_ERR(6, 706, __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 == ((int)-1))) __PYX_ERR(6, 712, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":707
+    /* "PETSc/petscmat.pxi":713
  *     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_ERR(6, 707, __pyx_L1_error)
+    __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 == ((int)-1))) __PYX_ERR(6, 713, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":705
+    /* "PETSc/petscmat.pxi":711
  *         CHKERR( MatSeqAIJSetPreallocationCSR(A, i, j, v) )
  *         CHKERR( MatMPIAIJSetPreallocationCSR(A, i, j, v) )
  *     if baij == PETSC_TRUE:             # <<<<<<<<<<<<<<
@@ -26901,7 +27801,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
  */
   }
 
-  /* "PETSc/petscmat.pxi":708
+  /* "PETSc/petscmat.pxi":714
  *         CHKERR( MatSeqBAIJSetPreallocationCSR(A, bs, i, j, v) )
  *         CHKERR( MatMPIBAIJSetPreallocationCSR(A, bs, i, j, v) )
  *     if sbaij == PETSC_TRUE:             # <<<<<<<<<<<<<<
@@ -26911,25 +27811,25 @@ 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":709
+    /* "PETSc/petscmat.pxi":715
  *         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_ERR(6, 709, __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 == ((int)-1))) __PYX_ERR(6, 715, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":710
+    /* "PETSc/petscmat.pxi":716
  *     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_ERR(6, 710, __pyx_L1_error)
+    __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 == ((int)-1))) __PYX_ERR(6, 716, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":708
+    /* "PETSc/petscmat.pxi":714
  *         CHKERR( MatSeqBAIJSetPreallocationCSR(A, bs, i, j, v) )
  *         CHKERR( MatMPIBAIJSetPreallocationCSR(A, bs, i, j, v) )
  *     if sbaij == PETSC_TRUE:             # <<<<<<<<<<<<<<
@@ -26938,7 +27838,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
  */
   }
 
-  /* "PETSc/petscmat.pxi":711
+  /* "PETSc/petscmat.pxi":717
  *         CHKERR( MatSeqSBAIJSetPreallocationCSR(A, bs, i, j, v) )
  *         CHKERR( MatMPISBAIJSetPreallocationCSR(A, bs, i, j, v) )
  *     return 0             # <<<<<<<<<<<<<<
@@ -26948,7 +27848,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":662
+  /* "PETSc/petscmat.pxi":668
  *     return 0
  * 
  * cdef inline int Mat_AllocAIJ_CSR(PetscMat A, object CSR) except -1:             # <<<<<<<<<<<<<<
@@ -26974,7 +27874,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(Mat __pyx_v_A
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":713
+/* "PETSc/petscmat.pxi":719
  *     return 0
  * 
  * cdef inline int Mat_AllocAIJ(PetscMat A,object NNZ, object CSR) except -1:             # <<<<<<<<<<<<<<
@@ -26990,7 +27890,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ(Mat __pyx_v_A, Py
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("Mat_AllocAIJ", 0);
 
-  /* "PETSc/petscmat.pxi":714
+  /* "PETSc/petscmat.pxi":720
  * 
  * cdef inline int Mat_AllocAIJ(PetscMat A,object NNZ, object CSR) except -1:
  *     if CSR is not None:             # <<<<<<<<<<<<<<
@@ -27001,18 +27901,18 @@ 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":715
+    /* "PETSc/petscmat.pxi":721
  * 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_ERR(6, 715, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_CSR(__pyx_v_A, __pyx_v_CSR); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(6, 721, __pyx_L1_error)
     __pyx_r = __pyx_t_3;
     goto __pyx_L0;
 
-    /* "PETSc/petscmat.pxi":714
+    /* "PETSc/petscmat.pxi":720
  * 
  * cdef inline int Mat_AllocAIJ(PetscMat A,object NNZ, object CSR) except -1:
  *     if CSR is not None:             # <<<<<<<<<<<<<<
@@ -27021,7 +27921,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ(Mat __pyx_v_A, Py
  */
   }
 
-  /* "PETSc/petscmat.pxi":716
+  /* "PETSc/petscmat.pxi":722
  *     if CSR is not None:
  *         return Mat_AllocAIJ_CSR(A, CSR)
  *     if NNZ is not None:             # <<<<<<<<<<<<<<
@@ -27032,18 +27932,18 @@ 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":717
+    /* "PETSc/petscmat.pxi":723
  *         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_ERR(6, 717, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ_NNZ(__pyx_v_A, __pyx_v_NNZ); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(6, 723, __pyx_L1_error)
     __pyx_r = __pyx_t_3;
     goto __pyx_L0;
 
-    /* "PETSc/petscmat.pxi":716
+    /* "PETSc/petscmat.pxi":722
  *     if CSR is not None:
  *         return Mat_AllocAIJ_CSR(A, CSR)
  *     if NNZ is not None:             # <<<<<<<<<<<<<<
@@ -27052,7 +27952,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ(Mat __pyx_v_A, Py
  */
   }
 
-  /* "PETSc/petscmat.pxi":718
+  /* "PETSc/petscmat.pxi":724
  *     if NNZ is not None:
  *         return Mat_AllocAIJ_NNZ(A, NNZ)
  *     return 0             # <<<<<<<<<<<<<<
@@ -27062,7 +27962,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":713
+  /* "PETSc/petscmat.pxi":719
  *     return 0
  * 
  * cdef inline int Mat_AllocAIJ(PetscMat A,object NNZ, object CSR) except -1:             # <<<<<<<<<<<<<<
@@ -27079,7 +27979,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_Mat_AllocAIJ(Mat __pyx_v_A, Py
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":720
+/* "PETSc/petscmat.pxi":726
  *     return 0
  * 
  * cdef inline object Mat_AllocDense(PetscMat A, object array):             # <<<<<<<<<<<<<<
@@ -27105,7 +28005,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_Mat_AllocDense(Mat __pyx
   __Pyx_RefNannySetupContext("Mat_AllocDense", 0);
   __Pyx_INCREF(__pyx_v_array);
 
-  /* "PETSc/petscmat.pxi":721
+  /* "PETSc/petscmat.pxi":727
  * 
  * cdef inline object Mat_AllocDense(PetscMat A, object array):
  *     cdef PetscInt m=0, N=0             # <<<<<<<<<<<<<<
@@ -27115,25 +28015,25 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_Mat_AllocDense(Mat __pyx
   __pyx_v_m = 0;
   __pyx_v_N = 0;
 
-  /* "PETSc/petscmat.pxi":722
+  /* "PETSc/petscmat.pxi":728
  * 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_ERR(6, 722, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetLocalSize(__pyx_v_A, (&__pyx_v_m), NULL)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 728, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":723
+  /* "PETSc/petscmat.pxi":729
  *     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_ERR(6, 723, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetSize(__pyx_v_A, NULL, (&__pyx_v_N))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 729, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":724
+  /* "PETSc/petscmat.pxi":730
  *     CHKERR( MatGetLocalSize(A, &m, NULL) )
  *     CHKERR( MatGetSize(A, NULL, &N) )
  *     cdef PetscInt size=0             # <<<<<<<<<<<<<<
@@ -27142,7 +28042,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_Mat_AllocDense(Mat __pyx
  */
   __pyx_v_size = 0;
 
-  /* "PETSc/petscmat.pxi":725
+  /* "PETSc/petscmat.pxi":731
  *     CHKERR( MatGetSize(A, NULL, &N) )
  *     cdef PetscInt size=0
  *     cdef PetscScalar *data=NULL             # <<<<<<<<<<<<<<
@@ -27151,7 +28051,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_Mat_AllocDense(Mat __pyx
  */
   __pyx_v_data = NULL;
 
-  /* "PETSc/petscmat.pxi":726
+  /* "PETSc/petscmat.pxi":732
  *     cdef PetscInt size=0
  *     cdef PetscScalar *data=NULL
  *     if array is not None:             # <<<<<<<<<<<<<<
@@ -27162,19 +28062,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":727
+    /* "PETSc/petscmat.pxi":733
  *     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_ERR(6, 727, __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, 733, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_array, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "PETSc/petscmat.pxi":728
+    /* "PETSc/petscmat.pxi":734
  *     if array is not None:
  *         array = ofarray_s(array, &size, &data)
  *         if m*N != size: raise ValueError(             # <<<<<<<<<<<<<<
@@ -27184,22 +28084,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":730
+      /* "PETSc/petscmat.pxi":736
  *         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_ERR(6, 730, __pyx_L1_error)
+      __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_size); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 736, __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_ERR(6, 730, __pyx_L1_error)
+      __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_m); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 736, __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_ERR(6, 730, __pyx_L1_error)
+      __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 736, __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_ERR(6, 730, __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, 736, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_8 = PyTuple_New(4); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 730, __pyx_L1_error)
+      __pyx_t_8 = PyTuple_New(4); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 736, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_GIVEREF(__pyx_t_4);
       PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_4);
@@ -27214,38 +28114,38 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_Mat_AllocDense(Mat __pyx
       __pyx_t_6 = 0;
       __pyx_t_7 = 0;
 
-      /* "PETSc/petscmat.pxi":729
+      /* "PETSc/petscmat.pxi":735
  *         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_ERR(6, 729, __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, 735, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-      /* "PETSc/petscmat.pxi":728
+      /* "PETSc/petscmat.pxi":734
  *     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_ERR(6, 728, __pyx_L1_error)
+      __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 734, __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_ERR(6, 728, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 734, __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_ERR(6, 728, __pyx_L1_error)
+      __PYX_ERR(6, 734, __pyx_L1_error)
     }
 
-    /* "PETSc/petscmat.pxi":726
+    /* "PETSc/petscmat.pxi":732
  *     cdef PetscInt size=0
  *     cdef PetscScalar *data=NULL
  *     if array is not None:             # <<<<<<<<<<<<<<
@@ -27254,25 +28154,25 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_Mat_AllocDense(Mat __pyx
  */
   }
 
-  /* "PETSc/petscmat.pxi":731
+  /* "PETSc/petscmat.pxi":737
  *             "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_ERR(6, 731, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSeqDenseSetPreallocation(__pyx_v_A, __pyx_v_data)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 737, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":732
+  /* "PETSc/petscmat.pxi":738
  *             (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_ERR(6, 732, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMPIDenseSetPreallocation(__pyx_v_A, __pyx_v_data)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(6, 738, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":733
+  /* "PETSc/petscmat.pxi":739
  *     CHKERR( MatSeqDenseSetPreallocation(A, data) )
  *     CHKERR( MatMPIDenseSetPreallocation(A, data) )
  *     return array             # <<<<<<<<<<<<<<
@@ -27284,7 +28184,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_Mat_AllocDense(Mat __pyx
   __pyx_r = __pyx_v_array;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":720
+  /* "PETSc/petscmat.pxi":726
  *     return 0
  * 
  * cdef inline object Mat_AllocDense(PetscMat A, object array):             # <<<<<<<<<<<<<<
@@ -27308,7 +28208,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_Mat_AllocDense(Mat __pyx
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":741
+/* "PETSc/petscmat.pxi":747
  *                              const_PetscScalar[],PetscInsertMode)
  * 
  * cdef inline MatSetValuesFcn* matsetvalues_fcn(int blocked, int local):             # <<<<<<<<<<<<<<
@@ -27324,7 +28224,7 @@ static CYTHON_INLINE __pyx_t_8petsc4py_5PETSc_MatSetValuesFcn *__pyx_f_8petsc4py
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("matsetvalues_fcn", 0);
 
-  /* "PETSc/petscmat.pxi":742
+  /* "PETSc/petscmat.pxi":748
  * 
  * cdef inline MatSetValuesFcn* matsetvalues_fcn(int blocked, int local):
  *     cdef MatSetValuesFcn *setvalues = NULL             # <<<<<<<<<<<<<<
@@ -27333,7 +28233,7 @@ static CYTHON_INLINE __pyx_t_8petsc4py_5PETSc_MatSetValuesFcn *__pyx_f_8petsc4py
  */
   __pyx_v_setvalues = NULL;
 
-  /* "PETSc/petscmat.pxi":743
+  /* "PETSc/petscmat.pxi":749
  * cdef inline MatSetValuesFcn* matsetvalues_fcn(int blocked, int local):
  *     cdef MatSetValuesFcn *setvalues = NULL
  *     if blocked and local: setvalues = MatSetValuesBlockedLocal             # <<<<<<<<<<<<<<
@@ -27354,7 +28254,7 @@ static CYTHON_INLINE __pyx_t_8petsc4py_5PETSc_MatSetValuesFcn *__pyx_f_8petsc4py
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscmat.pxi":744
+  /* "PETSc/petscmat.pxi":750
  *     cdef MatSetValuesFcn *setvalues = NULL
  *     if blocked and local: setvalues = MatSetValuesBlockedLocal
  *     elif blocked:         setvalues = MatSetValuesBlocked             # <<<<<<<<<<<<<<
@@ -27367,7 +28267,7 @@ static CYTHON_INLINE __pyx_t_8petsc4py_5PETSc_MatSetValuesFcn *__pyx_f_8petsc4py
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscmat.pxi":745
+  /* "PETSc/petscmat.pxi":751
  *     if blocked and local: setvalues = MatSetValuesBlockedLocal
  *     elif blocked:         setvalues = MatSetValuesBlocked
  *     elif local:           setvalues = MatSetValuesLocal             # <<<<<<<<<<<<<<
@@ -27380,7 +28280,7 @@ static CYTHON_INLINE __pyx_t_8petsc4py_5PETSc_MatSetValuesFcn *__pyx_f_8petsc4py
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscmat.pxi":746
+  /* "PETSc/petscmat.pxi":752
  *     elif blocked:         setvalues = MatSetValuesBlocked
  *     elif local:           setvalues = MatSetValuesLocal
  *     else:                 setvalues = MatSetValues             # <<<<<<<<<<<<<<
@@ -27392,7 +28292,7 @@ static CYTHON_INLINE __pyx_t_8petsc4py_5PETSc_MatSetValuesFcn *__pyx_f_8petsc4py
   }
   __pyx_L3:;
 
-  /* "PETSc/petscmat.pxi":747
+  /* "PETSc/petscmat.pxi":753
  *     elif local:           setvalues = MatSetValuesLocal
  *     else:                 setvalues = MatSetValues
  *     return setvalues             # <<<<<<<<<<<<<<
@@ -27402,7 +28302,7 @@ static CYTHON_INLINE __pyx_t_8petsc4py_5PETSc_MatSetValuesFcn *__pyx_f_8petsc4py
   __pyx_r = __pyx_v_setvalues;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":741
+  /* "PETSc/petscmat.pxi":747
  *                              const_PetscScalar[],PetscInsertMode)
  * 
  * cdef inline MatSetValuesFcn* matsetvalues_fcn(int blocked, int local):             # <<<<<<<<<<<<<<
@@ -27416,7 +28316,7 @@ static CYTHON_INLINE __pyx_t_8petsc4py_5PETSc_MatSetValuesFcn *__pyx_f_8petsc4py
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":749
+/* "PETSc/petscmat.pxi":755
  *     return setvalues
  * 
  * cdef inline int matsetvalues(PetscMat A,             # <<<<<<<<<<<<<<
@@ -27449,7 +28349,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues(Mat __pyx_v_A, Py
   __Pyx_INCREF(__pyx_v_oj);
   __Pyx_INCREF(__pyx_v_ov);
 
-  /* "PETSc/petscmat.pxi":753
+  /* "PETSc/petscmat.pxi":759
  *                              object oaddv, int blocked, int local) except -1:
  *     # block size
  *     cdef PetscInt rbs=1, cbs=1             # <<<<<<<<<<<<<<
@@ -27459,7 +28359,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":754
+  /* "PETSc/petscmat.pxi":760
  *     # block size
  *     cdef PetscInt rbs=1, cbs=1
  *     if blocked: CHKERR( MatGetBlockSizes(A, &rbs, &cbs) )             # <<<<<<<<<<<<<<
@@ -27468,10 +28368,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_ERR(6, 754, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetBlockSizes(__pyx_v_A, (&__pyx_v_rbs), (&__pyx_v_cbs))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(6, 760, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":755
+  /* "PETSc/petscmat.pxi":761
  *     cdef PetscInt rbs=1, cbs=1
  *     if blocked: CHKERR( MatGetBlockSizes(A, &rbs, &cbs) )
  *     if rbs < 1: rbs = 1             # <<<<<<<<<<<<<<
@@ -27483,7 +28383,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues(Mat __pyx_v_A, Py
     __pyx_v_rbs = 1;
   }
 
-  /* "PETSc/petscmat.pxi":756
+  /* "PETSc/petscmat.pxi":762
  *     if blocked: CHKERR( MatGetBlockSizes(A, &rbs, &cbs) )
  *     if rbs < 1: rbs = 1
  *     if cbs < 1: cbs = 1             # <<<<<<<<<<<<<<
@@ -27495,7 +28395,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues(Mat __pyx_v_A, Py
     __pyx_v_cbs = 1;
   }
 
-  /* "PETSc/petscmat.pxi":758
+  /* "PETSc/petscmat.pxi":764
  *     if cbs < 1: cbs = 1
  *     # rows, cols, and values
  *     cdef PetscInt ni=0, *i=NULL             # <<<<<<<<<<<<<<
@@ -27505,7 +28405,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":759
+  /* "PETSc/petscmat.pxi":765
  *     # rows, cols, and values
  *     cdef PetscInt ni=0, *i=NULL
  *     cdef PetscInt nj=0, *j=NULL             # <<<<<<<<<<<<<<
@@ -27515,7 +28415,7 @@ 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":760
+  /* "PETSc/petscmat.pxi":766
  *     cdef PetscInt ni=0, *i=NULL
  *     cdef PetscInt nj=0, *j=NULL
  *     cdef PetscInt nv=0             # <<<<<<<<<<<<<<
@@ -27524,7 +28424,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues(Mat __pyx_v_A, Py
  */
   __pyx_v_nv = 0;
 
-  /* "PETSc/petscmat.pxi":761
+  /* "PETSc/petscmat.pxi":767
  *     cdef PetscInt nj=0, *j=NULL
  *     cdef PetscInt nv=0
  *     cdef PetscScalar *v=NULL             # <<<<<<<<<<<<<<
@@ -27533,43 +28433,43 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues(Mat __pyx_v_A, Py
  */
   __pyx_v_v = NULL;
 
-  /* "PETSc/petscmat.pxi":762
+  /* "PETSc/petscmat.pxi":768
  *     cdef PetscInt nv=0
  *     cdef PetscScalar *v=NULL
  *     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_ERR(6, 762, __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, 768, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF_SET(__pyx_v_oi, __pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscmat.pxi":763
+  /* "PETSc/petscmat.pxi":769
  *     cdef PetscScalar *v=NULL
  *     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_ERR(6, 763, __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, 769, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF_SET(__pyx_v_oj, __pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscmat.pxi":764
+  /* "PETSc/petscmat.pxi":770
  *     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_ERR(6, 764, __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, 770, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF_SET(__pyx_v_ov, __pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscmat.pxi":765
+  /* "PETSc/petscmat.pxi":771
  *     oj = iarray_i(oj, &nj, &j)
  *     ov = iarray_s(ov, &nv, &v)
  *     if ni*nj*rbs*cbs != nv: raise ValueError(             # <<<<<<<<<<<<<<
@@ -27579,20 +28479,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":767
+    /* "PETSc/petscmat.pxi":773
  *     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_ERR(6, 767, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ni); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 773, __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_ERR(6, 767, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nj); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 773, __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_ERR(6, 767, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nv); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 773, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 767, __pyx_L1_error)
+    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 773, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_GIVEREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3);
@@ -27604,38 +28504,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":766
+    /* "PETSc/petscmat.pxi":772
  *     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_ERR(6, 766, __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, 772, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "PETSc/petscmat.pxi":765
+    /* "PETSc/petscmat.pxi":771
  *     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_ERR(6, 765, __pyx_L1_error)
+    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 771, __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_ERR(6, 765, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 771, __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_ERR(6, 765, __pyx_L1_error)
+    __PYX_ERR(6, 771, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":770
+  /* "PETSc/petscmat.pxi":776
  *     # MatSetValuesXXX function and insert mode
  *     cdef MatSetValuesFcn *setvalues = \
  *          matsetvalues_fcn(blocked, local)             # <<<<<<<<<<<<<<
@@ -27644,26 +28544,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":771
+  /* "PETSc/petscmat.pxi":777
  *     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)-1L))) __PYX_ERR(6, 771, __pyx_L1_error)
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_oaddv); if (unlikely(__pyx_t_7 == ((InsertMode)((InsertMode)-1L)))) __PYX_ERR(6, 777, __pyx_L1_error)
   __pyx_v_addv = __pyx_t_7;
 
-  /* "PETSc/petscmat.pxi":773
+  /* "PETSc/petscmat.pxi":779
  *     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_ERR(6, 773, __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 == ((int)-1))) __PYX_ERR(6, 779, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":774
+  /* "PETSc/petscmat.pxi":780
  *     # actual call
  *     CHKERR( setvalues(A, ni, i, nj, j, v, addv) )
  *     return 0             # <<<<<<<<<<<<<<
@@ -27673,7 +28573,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues(Mat __pyx_v_A, Py
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":749
+  /* "PETSc/petscmat.pxi":755
  *     return setvalues
  * 
  * cdef inline int matsetvalues(PetscMat A,             # <<<<<<<<<<<<<<
@@ -27697,7 +28597,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues(Mat __pyx_v_A, Py
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":776
+/* "PETSc/petscmat.pxi":782
  *     return 0
  * 
  * cdef inline int matsetvalues_rcv(PetscMat A,             # <<<<<<<<<<<<<<
@@ -27737,7 +28637,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
   Py_ssize_t __pyx_t_9;
   __Pyx_RefNannySetupContext("matsetvalues_rcv", 0);
 
-  /* "PETSc/petscmat.pxi":781
+  /* "PETSc/petscmat.pxi":787
  *                                  int blocked, int local) except -1:
  *     # block size
  *     cdef PetscInt rbs=1, cbs=1             # <<<<<<<<<<<<<<
@@ -27747,7 +28647,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":782
+  /* "PETSc/petscmat.pxi":788
  *     # block size
  *     cdef PetscInt rbs=1, cbs=1
  *     if blocked: CHKERR( MatGetBlockSizes(A, &rbs, &cbs) )             # <<<<<<<<<<<<<<
@@ -27756,10 +28656,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_ERR(6, 782, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetBlockSizes(__pyx_v_A, (&__pyx_v_rbs), (&__pyx_v_cbs))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(6, 788, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":783
+  /* "PETSc/petscmat.pxi":789
  *     cdef PetscInt rbs=1, cbs=1
  *     if blocked: CHKERR( MatGetBlockSizes(A, &rbs, &cbs) )
  *     if rbs < 1: rbs = 1             # <<<<<<<<<<<<<<
@@ -27771,7 +28671,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
     __pyx_v_rbs = 1;
   }
 
-  /* "PETSc/petscmat.pxi":784
+  /* "PETSc/petscmat.pxi":790
  *     if blocked: CHKERR( MatGetBlockSizes(A, &rbs, &cbs) )
  *     if rbs < 1: rbs = 1
  *     if cbs < 1: cbs = 1             # <<<<<<<<<<<<<<
@@ -27783,7 +28683,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
     __pyx_v_cbs = 1;
   }
 
-  /* "PETSc/petscmat.pxi":786
+  /* "PETSc/petscmat.pxi":792
  *     if cbs < 1: cbs = 1
  *     # rows, cols, and values
  *     cdef PetscInt ni=0, *i=NULL             # <<<<<<<<<<<<<<
@@ -27793,7 +28693,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":787
+  /* "PETSc/petscmat.pxi":793
  *     # rows, cols, and values
  *     cdef PetscInt ni=0, *i=NULL
  *     cdef PetscInt nj=0, *j=NULL             # <<<<<<<<<<<<<<
@@ -27803,7 +28703,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":788
+  /* "PETSc/petscmat.pxi":794
  *     cdef PetscInt ni=0, *i=NULL
  *     cdef PetscInt nj=0, *j=NULL
  *     cdef PetscInt nv=0             # <<<<<<<<<<<<<<
@@ -27812,7 +28712,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
  */
   __pyx_v_nv = 0;
 
-  /* "PETSc/petscmat.pxi":789
+  /* "PETSc/petscmat.pxi":795
  *     cdef PetscInt nj=0, *j=NULL
  *     cdef PetscInt nv=0
  *     cdef PetscScalar *v=NULL             # <<<<<<<<<<<<<<
@@ -27821,43 +28721,43 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
  */
   __pyx_v_v = NULL;
 
-  /* "PETSc/petscmat.pxi":790
+  /* "PETSc/petscmat.pxi":796
  *     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_ERR(6, 790, __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, 796, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_ai = ((PyArrayObject *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscmat.pxi":791
+  /* "PETSc/petscmat.pxi":797
  *     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_ERR(6, 791, __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, 797, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_aj = ((PyArrayObject *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscmat.pxi":792
+  /* "PETSc/petscmat.pxi":798
  *     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_ERR(6, 792, __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, 798, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_av = ((PyArrayObject *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscmat.pxi":794
+  /* "PETSc/petscmat.pxi":800
  *     cdef ndarray av = iarray_s(ov, &nv, &v)
  *     # check various dimensions
  *     if PyArray_NDIM(ai) != 2: raise ValueError(             # <<<<<<<<<<<<<<
@@ -27867,40 +28767,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":796
+    /* "PETSc/petscmat.pxi":802
  *     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_ERR(6, 796, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyInt_From_int(PyArray_NDIM(__pyx_v_ai)); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 802, __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_ERR(6, 796, __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, 802, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "PETSc/petscmat.pxi":794
+    /* "PETSc/petscmat.pxi":800
  *     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_ERR(6, 794, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 800, __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_ERR(6, 794, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 800, __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_ERR(6, 794, __pyx_L1_error)
+    __PYX_ERR(6, 800, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":797
+  /* "PETSc/petscmat.pxi":803
  *         ("row indices must have two dimensions: "
  *          "rows.ndim=%d") % (PyArray_NDIM(ai)) )
  *     elif not PyArray_ISCONTIGUOUS(ai): raise ValueError(             # <<<<<<<<<<<<<<
@@ -27909,14 +28809,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_ERR(6, 797, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__20, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 803, __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(6, 797, __pyx_L1_error)
+    __PYX_ERR(6, 803, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":799
+  /* "PETSc/petscmat.pxi":805
  *     elif not PyArray_ISCONTIGUOUS(ai): raise ValueError(
  *         "expecting a C-contiguous array")
  *     if PyArray_NDIM(aj) != 2: raise ValueError(             # <<<<<<<<<<<<<<
@@ -27926,40 +28826,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":801
+    /* "PETSc/petscmat.pxi":807
  *     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_ERR(6, 801, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyInt_From_int(PyArray_NDIM(__pyx_v_aj)); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 807, __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_ERR(6, 801, __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, 807, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "PETSc/petscmat.pxi":799
+    /* "PETSc/petscmat.pxi":805
  *     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_ERR(6, 799, __pyx_L1_error)
+    __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 805, __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_ERR(6, 799, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 805, __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_ERR(6, 799, __pyx_L1_error)
+    __PYX_ERR(6, 805, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":802
+  /* "PETSc/petscmat.pxi":808
  *         ("column indices must have two dimensions: "
  *          "cols.ndim=%d") % (PyArray_NDIM(aj)) )
  *     elif not PyArray_ISCONTIGUOUS(aj): raise ValueError(             # <<<<<<<<<<<<<<
@@ -27968,14 +28868,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_ERR(6, 802, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__21, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 808, __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(6, 802, __pyx_L1_error)
+    __PYX_ERR(6, 808, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":804
+  /* "PETSc/petscmat.pxi":810
  *     elif not PyArray_ISCONTIGUOUS(aj): raise ValueError(
  *         "expecting a C-contiguous array")
  *     if PyArray_NDIM(av) < 2: raise ValueError(             # <<<<<<<<<<<<<<
@@ -27985,40 +28885,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":806
+    /* "PETSc/petscmat.pxi":812
  *     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_ERR(6, 806, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyInt_From_int(PyArray_NDIM(__pyx_v_av)); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 812, __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_ERR(6, 806, __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, 812, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "PETSc/petscmat.pxi":804
+    /* "PETSc/petscmat.pxi":810
  *     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_ERR(6, 804, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 810, __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_ERR(6, 804, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 810, __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_ERR(6, 804, __pyx_L1_error)
+    __PYX_ERR(6, 810, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":807
+  /* "PETSc/petscmat.pxi":813
  *         ("values must have two or more dimensions: "
  *          "vals.ndim=%d") % (PyArray_NDIM(av)) )
  *     elif not PyArray_ISCONTIGUOUS(av): raise ValueError(             # <<<<<<<<<<<<<<
@@ -28027,14 +28927,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_ERR(6, 807, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__22, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 813, __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(6, 807, __pyx_L1_error)
+    __PYX_ERR(6, 813, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":810
+  /* "PETSc/petscmat.pxi":816
  *         "expecting a C-contiguous array")
  *     # check various shapes
  *     cdef Py_ssize_t nm = PyArray_DIM(ai, 0)             # <<<<<<<<<<<<<<
@@ -28043,7 +28943,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":811
+  /* "PETSc/petscmat.pxi":817
  *     # check various shapes
  *     cdef Py_ssize_t nm = PyArray_DIM(ai, 0)
  *     cdef Py_ssize_t si = PyArray_DIM(ai, 1)             # <<<<<<<<<<<<<<
@@ -28052,7 +28952,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":812
+  /* "PETSc/petscmat.pxi":818
  *     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)             # <<<<<<<<<<<<<<
@@ -28061,7 +28961,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":813
+  /* "PETSc/petscmat.pxi":819
  *     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)             # <<<<<<<<<<<<<<
@@ -28070,7 +28970,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":814
+  /* "PETSc/petscmat.pxi":820
  *     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             # <<<<<<<<<<<<<<
@@ -28084,7 +28984,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
     goto __pyx_L10_bool_binop_done;
   }
 
-  /* "PETSc/petscmat.pxi":815
+  /* "PETSc/petscmat.pxi":821
  *     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             # <<<<<<<<<<<<<<
@@ -28098,7 +28998,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
     goto __pyx_L10_bool_binop_done;
   }
 
-  /* "PETSc/petscmat.pxi":816
+  /* "PETSc/petscmat.pxi":822
  *     if ((nm != PyArray_DIM(aj, 0)) or
  *         (nm != PyArray_DIM(av, 0)) or
  *         (si*rbs * sj*cbs != sv)): raise ValueError(             # <<<<<<<<<<<<<<
@@ -28109,7 +29009,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
   __pyx_t_1 = __pyx_t_5;
   __pyx_L10_bool_binop_done:;
 
-  /* "PETSc/petscmat.pxi":814
+  /* "PETSc/petscmat.pxi":820
  *     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             # <<<<<<<<<<<<<<
@@ -28118,20 +29018,20 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
  */
   if (__pyx_t_1) {
 
-    /* "PETSc/petscmat.pxi":819
+    /* "PETSc/petscmat.pxi":825
  *         ("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_ERR(6, 819, __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, 825, __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_ERR(6, 819, __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, 825, __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_ERR(6, 819, __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, 825, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 819, __pyx_L1_error)
+    __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 825, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_GIVEREF(__pyx_t_4);
     PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_4);
@@ -28143,37 +29043,37 @@ 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":818
+    /* "PETSc/petscmat.pxi":824
  *         (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_ERR(6, 818, __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, 824, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-    /* "PETSc/petscmat.pxi":816
+    /* "PETSc/petscmat.pxi":822
  *     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_ERR(6, 816, __pyx_L1_error)
+    __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(6, 822, __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_ERR(6, 816, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_7, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 822, __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_ERR(6, 816, __pyx_L1_error)
+    __PYX_ERR(6, 822, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":814
+    /* "PETSc/petscmat.pxi":820
  *     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             # <<<<<<<<<<<<<<
@@ -28182,7 +29082,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
  */
   }
 
-  /* "PETSc/petscmat.pxi":822
+  /* "PETSc/petscmat.pxi":828
  *     # MatSetValuesXXX function and insert mode
  *     cdef MatSetValuesFcn *setvalues = \
  *          matsetvalues_fcn(blocked, local)             # <<<<<<<<<<<<<<
@@ -28191,17 +29091,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":823
+  /* "PETSc/petscmat.pxi":829
  *     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)-1L))) __PYX_ERR(6, 823, __pyx_L1_error)
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_oaddv); if (unlikely(__pyx_t_8 == ((InsertMode)((InsertMode)-1L)))) __PYX_ERR(6, 829, __pyx_L1_error)
   __pyx_v_addv = __pyx_t_8;
 
-  /* "PETSc/petscmat.pxi":825
+  /* "PETSc/petscmat.pxi":831
  *     cdef PetscInsertMode addv = insertmode(oaddv)
  *     # actual calls
  *     cdef Py_ssize_t k=0             # <<<<<<<<<<<<<<
@@ -28210,7 +29110,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
  */
   __pyx_v_k = 0;
 
-  /* "PETSc/petscmat.pxi":826
+  /* "PETSc/petscmat.pxi":832
  *     # actual calls
  *     cdef Py_ssize_t k=0
  *     for k from 0 <= k < nm:             # <<<<<<<<<<<<<<
@@ -28220,17 +29120,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":827
+    /* "PETSc/petscmat.pxi":833
  *     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_ERR(6, 827, __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 == ((int)-1))) __PYX_ERR(6, 833, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":831
+  /* "PETSc/petscmat.pxi":837
  *                           <PetscInt>sj, &j[k*sj],
  *                           &v[k*sv], addv) )
  *     return 0             # <<<<<<<<<<<<<<
@@ -28240,7 +29140,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":776
+  /* "PETSc/petscmat.pxi":782
  *     return 0
  * 
  * cdef inline int matsetvalues_rcv(PetscMat A,             # <<<<<<<<<<<<<<
@@ -28264,7 +29164,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_rcv(Mat __pyx_v_A
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":833
+/* "PETSc/petscmat.pxi":839
  *     return 0
  * 
  * cdef inline int matsetvalues_ijv(PetscMat A,             # <<<<<<<<<<<<<<
@@ -28310,7 +29210,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
   __Pyx_INCREF(__pyx_v_ov);
   __Pyx_INCREF(__pyx_v_om);
 
-  /* "PETSc/petscmat.pxi":839
+  /* "PETSc/petscmat.pxi":845
  *                                  int blocked, int local) except -1:
  *     # block size
  *     cdef PetscInt rbs=1, cbs=1             # <<<<<<<<<<<<<<
@@ -28320,7 +29220,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":840
+  /* "PETSc/petscmat.pxi":846
  *     # block size
  *     cdef PetscInt rbs=1, cbs=1
  *     if blocked: CHKERR( MatGetBlockSizes(A, &rbs, &cbs) )             # <<<<<<<<<<<<<<
@@ -28329,10 +29229,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_ERR(6, 840, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetBlockSizes(__pyx_v_A, (&__pyx_v_rbs), (&__pyx_v_cbs))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(6, 846, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":841
+  /* "PETSc/petscmat.pxi":847
  *     cdef PetscInt rbs=1, cbs=1
  *     if blocked: CHKERR( MatGetBlockSizes(A, &rbs, &cbs) )
  *     if rbs < 1: rbs = 1             # <<<<<<<<<<<<<<
@@ -28344,7 +29244,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
     __pyx_v_rbs = 1;
   }
 
-  /* "PETSc/petscmat.pxi":842
+  /* "PETSc/petscmat.pxi":848
  *     if blocked: CHKERR( MatGetBlockSizes(A, &rbs, &cbs) )
  *     if rbs < 1: rbs = 1
  *     if cbs < 1: cbs = 1             # <<<<<<<<<<<<<<
@@ -28356,7 +29256,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
     __pyx_v_cbs = 1;
   }
 
-  /* "PETSc/petscmat.pxi":844
+  /* "PETSc/petscmat.pxi":850
  *     if cbs < 1: cbs = 1
  *     # column pointers, column indices, and values
  *     cdef PetscInt ni=0, *i=NULL             # <<<<<<<<<<<<<<
@@ -28366,7 +29266,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":845
+  /* "PETSc/petscmat.pxi":851
  *     # column pointers, column indices, and values
  *     cdef PetscInt ni=0, *i=NULL
  *     cdef PetscInt nj=0, *j=NULL             # <<<<<<<<<<<<<<
@@ -28376,7 +29276,7 @@ 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":846
+  /* "PETSc/petscmat.pxi":852
  *     cdef PetscInt ni=0, *i=NULL
  *     cdef PetscInt nj=0, *j=NULL
  *     cdef PetscInt nv=0             # <<<<<<<<<<<<<<
@@ -28385,7 +29285,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
  */
   __pyx_v_nv = 0;
 
-  /* "PETSc/petscmat.pxi":847
+  /* "PETSc/petscmat.pxi":853
  *     cdef PetscInt nj=0, *j=NULL
  *     cdef PetscInt nv=0
  *     cdef PetscScalar *v=NULL             # <<<<<<<<<<<<<<
@@ -28394,43 +29294,43 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
  */
   __pyx_v_v = NULL;
 
-  /* "PETSc/petscmat.pxi":848
+  /* "PETSc/petscmat.pxi":854
  *     cdef PetscInt nv=0
  *     cdef PetscScalar *v=NULL
  *     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_ERR(6, 848, __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, 854, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF_SET(__pyx_v_oi, __pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscmat.pxi":849
+  /* "PETSc/petscmat.pxi":855
  *     cdef PetscScalar *v=NULL
  *     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_ERR(6, 849, __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, 855, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF_SET(__pyx_v_oj, __pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscmat.pxi":850
+  /* "PETSc/petscmat.pxi":856
  *     oi = iarray_i(oi, &ni, &i)
  *     oj = iarray_i(oj, &nj, &j)
  *     ov = iarray_s(ov, &nv, &v)             # <<<<<<<<<<<<<<
  *     # row indices
  *     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_ERR(6, 850, __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, 856, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF_SET(__pyx_v_ov, __pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscmat.pxi":852
+  /* "PETSc/petscmat.pxi":858
  *     ov = iarray_s(ov, &nv, &v)
  *     # row indices
  *     cdef PetscInt nm=0, *m=NULL             # <<<<<<<<<<<<<<
@@ -28440,7 +29340,7 @@ 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":853
+  /* "PETSc/petscmat.pxi":859
  *     # row indices
  *     cdef PetscInt nm=0, *m=NULL
  *     cdef PetscInt rs=0, re=ni-1             # <<<<<<<<<<<<<<
@@ -28450,7 +29350,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
   __pyx_v_rs = 0;
   __pyx_v_re = (__pyx_v_ni - 1);
 
-  /* "PETSc/petscmat.pxi":854
+  /* "PETSc/petscmat.pxi":860
  *     cdef PetscInt nm=0, *m=NULL
  *     cdef PetscInt rs=0, re=ni-1
  *     if om is not None:             # <<<<<<<<<<<<<<
@@ -28461,19 +29361,19 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
   __pyx_t_4 = (__pyx_t_1 != 0);
   if (__pyx_t_4) {
 
-    /* "PETSc/petscmat.pxi":855
+    /* "PETSc/petscmat.pxi":861
  *     cdef PetscInt rs=0, re=ni-1
  *     if om is not None:
  *         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_ERR(6, 855, __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, 861, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_om, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "PETSc/petscmat.pxi":854
+    /* "PETSc/petscmat.pxi":860
  *     cdef PetscInt nm=0, *m=NULL
  *     cdef PetscInt rs=0, re=ni-1
  *     if om is not None:             # <<<<<<<<<<<<<<
@@ -28483,7 +29383,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
     goto __pyx_L6;
   }
 
-  /* "PETSc/petscmat.pxi":857
+  /* "PETSc/petscmat.pxi":863
  *         om = iarray_i(om, &nm, &m)
  *     else:
  *         if not local:             # <<<<<<<<<<<<<<
@@ -28494,16 +29394,16 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
     __pyx_t_4 = ((!(__pyx_v_local != 0)) != 0);
     if (__pyx_t_4) {
 
-      /* "PETSc/petscmat.pxi":858
+      /* "PETSc/petscmat.pxi":864
  *     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_ERR(6, 858, __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 == ((int)-1))) __PYX_ERR(6, 864, __pyx_L1_error)
 
-      /* "PETSc/petscmat.pxi":859
+      /* "PETSc/petscmat.pxi":865
  *         if not local:
  *             CHKERR( MatGetOwnershipRange(A, &rs, &re) )
  *             rs //= rbs; re //= rbs             # <<<<<<<<<<<<<<
@@ -28513,7 +29413,7 @@ 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);
 
-      /* "PETSc/petscmat.pxi":857
+      /* "PETSc/petscmat.pxi":863
  *         om = iarray_i(om, &nm, &m)
  *     else:
  *         if not local:             # <<<<<<<<<<<<<<
@@ -28522,7 +29422,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
  */
     }
 
-    /* "PETSc/petscmat.pxi":860
+    /* "PETSc/petscmat.pxi":866
  *             CHKERR( MatGetOwnershipRange(A, &rs, &re) )
  *             rs //= rbs; re //= rbs
  *         nm = re - rs             # <<<<<<<<<<<<<<
@@ -28533,7 +29433,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
   }
   __pyx_L6:;
 
-  /* "PETSc/petscmat.pxi":862
+  /* "PETSc/petscmat.pxi":868
  *         nm = re - rs
  *     # check various sizes
  *     if (ni-1 != nm): raise ValueError(             # <<<<<<<<<<<<<<
@@ -28543,18 +29443,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":864
+    /* "PETSc/petscmat.pxi":870
  *     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_ERR(6, 864, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ni); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 870, __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_ERR(6, 864, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_nm + 1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 870, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 864, __pyx_L1_error)
+    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 870, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_GIVEREF(__pyx_t_3);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3);
@@ -28563,38 +29463,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":863
+    /* "PETSc/petscmat.pxi":869
  *     # 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_ERR(6, 863, __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, 869, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "PETSc/petscmat.pxi":862
+    /* "PETSc/petscmat.pxi":868
  *         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_ERR(6, 862, __pyx_L1_error)
+    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 868, __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_ERR(6, 862, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 868, __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_ERR(6, 862, __pyx_L1_error)
+    __PYX_ERR(6, 868, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":865
+  /* "PETSc/petscmat.pxi":871
  *         "size(I) is %d, expected %d" %
  *         (toInt(ni), toInt(nm+1)) )
  *     if (i[0] != 0):raise ValueError(             # <<<<<<<<<<<<<<
@@ -28604,16 +29504,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":867
+    /* "PETSc/petscmat.pxi":873
  *     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_ERR(6, 867, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_i[0])); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 873, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 867, __pyx_L1_error)
+    __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 873, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_GIVEREF(__pyx_t_5);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
@@ -28622,38 +29522,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":866
+    /* "PETSc/petscmat.pxi":872
  *         (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_ERR(6, 866, __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, 872, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "PETSc/petscmat.pxi":865
+    /* "PETSc/petscmat.pxi":871
  *         "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_ERR(6, 865, __pyx_L1_error)
+    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 871, __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_ERR(6, 865, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_6, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 871, __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_ERR(6, 865, __pyx_L1_error)
+    __PYX_ERR(6, 871, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":868
+  /* "PETSc/petscmat.pxi":874
  *         "I[0] is %d, expected %d" %
  *         (toInt(i[0]), 0) )
  *     if (i[ni-1] != nj): raise ValueError(             # <<<<<<<<<<<<<<
@@ -28663,18 +29563,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":870
+    /* "PETSc/petscmat.pxi":876
  *     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_ERR(6, 870, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nj); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 876, __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_ERR(6, 870, __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, 876, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 870, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 876, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_5);
     PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_5);
@@ -28683,38 +29583,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":869
+    /* "PETSc/petscmat.pxi":875
  *         (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_ERR(6, 869, __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, 875, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "PETSc/petscmat.pxi":868
+    /* "PETSc/petscmat.pxi":874
  *         "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_ERR(6, 868, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 874, __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_ERR(6, 868, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 874, __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_ERR(6, 868, __pyx_L1_error)
+    __PYX_ERR(6, 874, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":871
+  /* "PETSc/petscmat.pxi":877
  *         "size(J) is %d, expected %d" %
  *         (toInt(nj), toInt(i[ni-1])) )
  *     if (nj*rbs*cbs != nv): raise ValueError(             # <<<<<<<<<<<<<<
@@ -28724,18 +29624,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":873
+    /* "PETSc/petscmat.pxi":879
  *     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_ERR(6, 873, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nv); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 879, __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_ERR(6, 873, __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, 879, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 873, __pyx_L1_error)
+    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 879, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_6);
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_6);
@@ -28744,38 +29644,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":872
+    /* "PETSc/petscmat.pxi":878
  *         (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_ERR(6, 872, __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, 878, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-    /* "PETSc/petscmat.pxi":871
+    /* "PETSc/petscmat.pxi":877
  *         "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_ERR(6, 871, __pyx_L1_error)
+    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 877, __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_ERR(6, 871, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 877, __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_ERR(6, 871, __pyx_L1_error)
+    __PYX_ERR(6, 877, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":876
+  /* "PETSc/petscmat.pxi":882
  *     # MatSetValuesXXX function and insert mode
  *     cdef MatSetValuesFcn *setvalues = \
  *          matsetvalues_fcn(blocked, local)             # <<<<<<<<<<<<<<
@@ -28784,17 +29684,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":877
+  /* "PETSc/petscmat.pxi":883
  *     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)-1L))) __PYX_ERR(6, 877, __pyx_L1_error)
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_oaddv); if (unlikely(__pyx_t_7 == ((InsertMode)((InsertMode)-1L)))) __PYX_ERR(6, 883, __pyx_L1_error)
   __pyx_v_addv = __pyx_t_7;
 
-  /* "PETSc/petscmat.pxi":879
+  /* "PETSc/petscmat.pxi":885
  *     cdef PetscInsertMode addv = insertmode(oaddv)
  *     # actual call
  *     cdef PetscInt k=0, l=0             # <<<<<<<<<<<<<<
@@ -28804,7 +29704,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":880
+  /* "PETSc/petscmat.pxi":886
  *     # actual call
  *     cdef PetscInt k=0, l=0
  *     cdef PetscInt irow=0, ncol=0, *icol=NULL             # <<<<<<<<<<<<<<
@@ -28815,7 +29715,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":881
+  /* "PETSc/petscmat.pxi":887
  *     cdef PetscInt k=0, l=0
  *     cdef PetscInt irow=0, ncol=0, *icol=NULL
  *     cdef PetscScalar *sval=NULL             # <<<<<<<<<<<<<<
@@ -28824,7 +29724,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
  */
   __pyx_v_sval = NULL;
 
-  /* "PETSc/petscmat.pxi":882
+  /* "PETSc/petscmat.pxi":888
  *     cdef PetscInt irow=0, ncol=0, *icol=NULL
  *     cdef PetscScalar *sval=NULL
  *     for k from 0 <= k < nm:             # <<<<<<<<<<<<<<
@@ -28834,7 +29734,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":883
+    /* "PETSc/petscmat.pxi":889
  *     cdef PetscScalar *sval=NULL
  *     for k from 0 <= k < nm:
  *         irow = m[k] if m!=NULL else rs+k             # <<<<<<<<<<<<<<
@@ -28848,7 +29748,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
     }
     __pyx_v_irow = __pyx_t_9;
 
-    /* "PETSc/petscmat.pxi":884
+    /* "PETSc/petscmat.pxi":890
  *     for k from 0 <= k < nm:
  *         irow = m[k] if m!=NULL else rs+k
  *         ncol = i[k+1] - i[k]             # <<<<<<<<<<<<<<
@@ -28857,7 +29757,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":885
+    /* "PETSc/petscmat.pxi":891
  *         irow = m[k] if m!=NULL else rs+k
  *         ncol = i[k+1] - i[k]
  *         icol = j + i[k]             # <<<<<<<<<<<<<<
@@ -28866,7 +29766,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":886
+    /* "PETSc/petscmat.pxi":892
  *         ncol = i[k+1] - i[k]
  *         icol = j + i[k]
  *         if blocked:             # <<<<<<<<<<<<<<
@@ -28876,7 +29776,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":887
+      /* "PETSc/petscmat.pxi":893
  *         icol = j + i[k]
  *         if blocked:
  *             sval = v + i[k]*rbs*cbs             # <<<<<<<<<<<<<<
@@ -28885,7 +29785,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":888
+      /* "PETSc/petscmat.pxi":894
  *         if blocked:
  *             sval = v + i[k]*rbs*cbs
  *             for l from 0 <= l < ncol:             # <<<<<<<<<<<<<<
@@ -28895,17 +29795,17 @@ 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":889
+        /* "PETSc/petscmat.pxi":895
  *             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_ERR(6, 889, __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 == ((int)-1))) __PYX_ERR(6, 895, __pyx_L1_error)
       }
 
-      /* "PETSc/petscmat.pxi":886
+      /* "PETSc/petscmat.pxi":892
  *         ncol = i[k+1] - i[k]
  *         icol = j + i[k]
  *         if blocked:             # <<<<<<<<<<<<<<
@@ -28915,7 +29815,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
       goto __pyx_L14;
     }
 
-    /* "PETSc/petscmat.pxi":892
+    /* "PETSc/petscmat.pxi":898
  *                                   &sval[l*rbs*cbs], addv) )
  *         else:
  *             sval = v + i[k]             # <<<<<<<<<<<<<<
@@ -28925,19 +29825,19 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
     /*else*/ {
       __pyx_v_sval = (__pyx_v_v + (__pyx_v_i[__pyx_v_k]));
 
-      /* "PETSc/petscmat.pxi":893
+      /* "PETSc/petscmat.pxi":899
  *         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_ERR(6, 893, __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 == ((int)-1))) __PYX_ERR(6, 899, __pyx_L1_error)
     }
     __pyx_L14:;
   }
 
-  /* "PETSc/petscmat.pxi":894
+  /* "PETSc/petscmat.pxi":900
  *             sval = v + i[k]
  *             CHKERR( setvalues(A, 1, &irow, ncol, icol, sval, addv) )
  *     return 0             # <<<<<<<<<<<<<<
@@ -28947,7 +29847,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":833
+  /* "PETSc/petscmat.pxi":839
  *     return 0
  * 
  * cdef inline int matsetvalues_ijv(PetscMat A,             # <<<<<<<<<<<<<<
@@ -28971,7 +29871,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_ijv(Mat __pyx_v_A
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":896
+/* "PETSc/petscmat.pxi":902
  *     return 0
  * 
  * cdef inline int matsetvalues_csr(PetscMat A,             # <<<<<<<<<<<<<<
@@ -28985,16 +29885,16 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_csr(Mat __pyx_v_A
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("matsetvalues_csr", 0);
 
-  /* "PETSc/petscmat.pxi":900
+  /* "PETSc/petscmat.pxi":906
  *                                  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_ERR(6, 900, __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 == ((int)-1))) __PYX_ERR(6, 906, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":901
+  /* "PETSc/petscmat.pxi":907
  *                                  int blocked, int local) except -1:
  *     matsetvalues_ijv(A, oi, oj, ov, oaddv, None, blocked, local)
  *     return 0             # <<<<<<<<<<<<<<
@@ -29004,7 +29904,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_csr(Mat __pyx_v_A
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":896
+  /* "PETSc/petscmat.pxi":902
  *     return 0
  * 
  * cdef inline int matsetvalues_csr(PetscMat A,             # <<<<<<<<<<<<<<
@@ -29021,7 +29921,7 @@ static CYTHON_INLINE int __pyx_f_8petsc4py_5PETSc_matsetvalues_csr(Mat __pyx_v_A
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":903
+/* "PETSc/petscmat.pxi":909
  *     return 0
  * 
  * cdef inline matgetvalues(PetscMat mat,             # <<<<<<<<<<<<<<
@@ -29050,7 +29950,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_matgetvalues(Mat __pyx_v
   __Pyx_RefNannySetupContext("matgetvalues", 0);
   __Pyx_INCREF(__pyx_v_values);
 
-  /* "PETSc/petscmat.pxi":905
+  /* "PETSc/petscmat.pxi":911
  * cdef inline matgetvalues(PetscMat mat,
  *                          object orows, object ocols, object values):
  *     cdef PetscInt ni=0, nj=0, nv=0             # <<<<<<<<<<<<<<
@@ -29061,7 +29961,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_matgetvalues(Mat __pyx_v
   __pyx_v_nj = 0;
   __pyx_v_nv = 0;
 
-  /* "PETSc/petscmat.pxi":906
+  /* "PETSc/petscmat.pxi":912
  *                          object orows, object ocols, object values):
  *     cdef PetscInt ni=0, nj=0, nv=0
  *     cdef PetscInt *i=NULL, *j=NULL             # <<<<<<<<<<<<<<
@@ -29071,7 +29971,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_matgetvalues(Mat __pyx_v
   __pyx_v_i = NULL;
   __pyx_v_j = NULL;
 
-  /* "PETSc/petscmat.pxi":907
+  /* "PETSc/petscmat.pxi":913
  *     cdef PetscInt ni=0, nj=0, nv=0
  *     cdef PetscInt *i=NULL, *j=NULL
  *     cdef PetscScalar *v=NULL             # <<<<<<<<<<<<<<
@@ -29080,31 +29980,31 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_matgetvalues(Mat __pyx_v
  */
   __pyx_v_v = NULL;
 
-  /* "PETSc/petscmat.pxi":908
+  /* "PETSc/petscmat.pxi":914
  *     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_ERR(6, 908, __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, 914, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_rows = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscmat.pxi":909
+  /* "PETSc/petscmat.pxi":915
  *     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_ERR(6, 909, __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, 915, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_cols = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscmat.pxi":910
+  /* "PETSc/petscmat.pxi":916
  *     cdef ndarray rows = iarray_i(orows, &ni, &i)
  *     cdef ndarray cols = iarray_i(ocols, &nj, &j)
  *     if values is None:             # <<<<<<<<<<<<<<
@@ -29115,37 +30015,37 @@ 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":911
+    /* "PETSc/petscmat.pxi":917
  *     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_ERR(6, 911, __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, 917, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_values, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "PETSc/petscmat.pxi":912
+    /* "PETSc/petscmat.pxi":918
  *     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_ERR(6, 912, __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, 918, __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_ERR(6, 912, __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, 918, __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_ERR(6, 912, __pyx_L1_error)
+    __pyx_t_5 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 918, __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_ERR(6, 912, __pyx_L1_error)
+    if (__Pyx_PyObject_SetAttrStr(__pyx_v_values, __pyx_n_s_shape, __pyx_t_5) < 0) __PYX_ERR(6, 918, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-    /* "PETSc/petscmat.pxi":910
+    /* "PETSc/petscmat.pxi":916
  *     cdef ndarray rows = iarray_i(orows, &ni, &i)
  *     cdef ndarray cols = iarray_i(ocols, &nj, &j)
  *     if values is None:             # <<<<<<<<<<<<<<
@@ -29154,19 +30054,19 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_matgetvalues(Mat __pyx_v
  */
   }
 
-  /* "PETSc/petscmat.pxi":913
+  /* "PETSc/petscmat.pxi":919
  *         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_ERR(6, 913, __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, 919, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF_SET(__pyx_v_values, __pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "PETSc/petscmat.pxi":914
+  /* "PETSc/petscmat.pxi":920
  *         values.shape = rows.shape + cols.shape
  *     values = oarray_s(values, &nv, &v)
  *     if (ni*nj != nv): raise ValueError(             # <<<<<<<<<<<<<<
@@ -29176,20 +30076,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":916
+    /* "PETSc/petscmat.pxi":922
  *     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_ERR(6, 916, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ni); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 922, __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_ERR(6, 916, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nj); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 922, __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_ERR(6, 916, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nv); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 922, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 916, __pyx_L1_error)
+    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 922, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_GIVEREF(__pyx_t_5);
     PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_5);
@@ -29201,47 +30101,47 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_matgetvalues(Mat __pyx_v
     __pyx_t_4 = 0;
     __pyx_t_1 = 0;
 
-    /* "PETSc/petscmat.pxi":915
+    /* "PETSc/petscmat.pxi":921
  *     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_ERR(6, 915, __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, 921, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
 
-    /* "PETSc/petscmat.pxi":914
+    /* "PETSc/petscmat.pxi":920
  *         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_ERR(6, 914, __pyx_L1_error)
+    __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(6, 920, __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_ERR(6, 914, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_6, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 920, __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_ERR(6, 914, __pyx_L1_error)
+    __PYX_ERR(6, 920, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":917
+  /* "PETSc/petscmat.pxi":923
  *         "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_ERR(6, 917, __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 == ((int)-1))) __PYX_ERR(6, 923, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":918
+  /* "PETSc/petscmat.pxi":924
  *         (toInt(ni), toInt(nj), toInt(nv)))
  *     CHKERR( MatGetValues(mat, ni, i, nj, j, v) )
  *     return values             # <<<<<<<<<<<<<<
@@ -29253,7 +30153,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_matgetvalues(Mat __pyx_v
   __pyx_r = __pyx_v_values;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":903
+  /* "PETSc/petscmat.pxi":909
  *     return 0
  * 
  * cdef inline matgetvalues(PetscMat mat,             # <<<<<<<<<<<<<<
@@ -29278,7 +30178,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_matgetvalues(Mat __pyx_v
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":925
+/* "PETSc/petscmat.pxi":931
  *     int MatFactorInfoDefaults(PetscBool,PetscBool,PetscMatFactorInfo*)
  * 
  * cdef inline PetscMatFactorShiftType matfactorshifttype(object st) \             # <<<<<<<<<<<<<<
@@ -29296,7 +30196,7 @@ static CYTHON_INLINE MatFactorShiftType __pyx_f_8petsc4py_5PETSc_matfactorshiftt
   MatFactorShiftType __pyx_t_5;
   __Pyx_RefNannySetupContext("matfactorshifttype", 0);
 
-  /* "PETSc/petscmat.pxi":927
+  /* "PETSc/petscmat.pxi":933
  * cdef inline PetscMatFactorShiftType matfactorshifttype(object st) \
  *     except <PetscMatFactorShiftType>(-1):
  *     if isinstance(st, str):             # <<<<<<<<<<<<<<
@@ -29307,85 +30207,85 @@ static CYTHON_INLINE MatFactorShiftType __pyx_f_8petsc4py_5PETSc_matfactorshiftt
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":928
+    /* "PETSc/petscmat.pxi":934
  *     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_ERR(6, 928, __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, 934, __pyx_L1_error)
     if (__pyx_t_2) {
       __pyx_r = MAT_SHIFT_NONE;
       goto __pyx_L0;
     }
 
-    /* "PETSc/petscmat.pxi":929
+    /* "PETSc/petscmat.pxi":935
  *     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_ERR(6, 929, __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, 935, __pyx_L1_error)
     if (__pyx_t_2) {
       __pyx_r = MAT_SHIFT_NONZERO;
       goto __pyx_L0;
     }
 
-    /* "PETSc/petscmat.pxi":930
+    /* "PETSc/petscmat.pxi":936
  *         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_ERR(6, 930, __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, 936, __pyx_L1_error)
     if (__pyx_t_2) {
       __pyx_r = MAT_SHIFT_POSITIVE_DEFINITE;
       goto __pyx_L0;
     }
 
-    /* "PETSc/petscmat.pxi":931
+    /* "PETSc/petscmat.pxi":937
  *         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_ERR(6, 931, __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, 937, __pyx_L1_error)
     if (__pyx_t_2) {
       __pyx_r = MAT_SHIFT_INBLOCKS;
       goto __pyx_L0;
     }
 
-    /* "PETSc/petscmat.pxi":932
+    /* "PETSc/petscmat.pxi":938
  *         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_ERR(6, 932, __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, 938, __pyx_L1_error)
     if (__pyx_t_2) {
       __pyx_r = MAT_SHIFT_NONZERO;
       goto __pyx_L0;
     }
 
-    /* "PETSc/petscmat.pxi":933
+    /* "PETSc/petscmat.pxi":939
  *         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_ERR(6, 933, __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, 939, __pyx_L1_error)
     if (__pyx_t_2) {
       __pyx_r = MAT_SHIFT_POSITIVE_DEFINITE;
       goto __pyx_L0;
     }
 
-    /* "PETSc/petscmat.pxi":934
+    /* "PETSc/petscmat.pxi":940
  *         if st == "na": return MAT_SHIFT_NONZERO
  *         if st == "pd": return MAT_SHIFT_POSITIVE_DEFINITE
  *         else: raise ValueError("unknown shift type: %s" % st)             # <<<<<<<<<<<<<<
@@ -29393,22 +30293,22 @@ static CYTHON_INLINE MatFactorShiftType __pyx_f_8petsc4py_5PETSc_matfactorshiftt
  * 
  */
     /*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_t_3 = __Pyx_PyString_Format(__pyx_kp_s_unknown_shift_type_s, __pyx_v_st); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 940, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 934, __pyx_L1_error)
+      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 940, __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_ERR(6, 934, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 940, __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_ERR(6, 934, __pyx_L1_error)
+      __PYX_ERR(6, 940, __pyx_L1_error)
     }
 
-    /* "PETSc/petscmat.pxi":927
+    /* "PETSc/petscmat.pxi":933
  * cdef inline PetscMatFactorShiftType matfactorshifttype(object st) \
  *     except <PetscMatFactorShiftType>(-1):
  *     if isinstance(st, str):             # <<<<<<<<<<<<<<
@@ -29417,18 +30317,18 @@ static CYTHON_INLINE MatFactorShiftType __pyx_f_8petsc4py_5PETSc_matfactorshiftt
  */
   }
 
-  /* "PETSc/petscmat.pxi":935
+  /* "PETSc/petscmat.pxi":941
  *         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)__Pyx_PyInt_As_MatFactorShiftType(__pyx_v_st)); if (unlikely(PyErr_Occurred())) __PYX_ERR(6, 935, __pyx_L1_error)
+  __pyx_t_5 = ((MatFactorShiftType)__Pyx_PyInt_As_MatFactorShiftType(__pyx_v_st)); if (unlikely(PyErr_Occurred())) __PYX_ERR(6, 941, __pyx_L1_error)
   __pyx_r = __pyx_t_5;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":925
+  /* "PETSc/petscmat.pxi":931
  *     int MatFactorInfoDefaults(PetscBool,PetscBool,PetscMatFactorInfo*)
  * 
  * cdef inline PetscMatFactorShiftType matfactorshifttype(object st) \             # <<<<<<<<<<<<<<
@@ -29447,7 +30347,7 @@ static CYTHON_INLINE MatFactorShiftType __pyx_f_8petsc4py_5PETSc_matfactorshiftt
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":937
+/* "PETSc/petscmat.pxi":943
  *     return st
  * 
  * cdef int matfactorinfo(PetscBool inc, PetscBool chol, object opts,             # <<<<<<<<<<<<<<
@@ -29479,16 +30379,16 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
   MatFactorShiftType __pyx_t_9;
   __Pyx_RefNannySetupContext("matfactorinfo", 0);
 
-  /* "PETSc/petscmat.pxi":939
+  /* "PETSc/petscmat.pxi":945
  * 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_ERR(6, 939, __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 == ((int)-1))) __PYX_ERR(6, 945, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":940
+  /* "PETSc/petscmat.pxi":946
  *                        PetscMatFactorInfo *info) except -1:
  *     CHKERR( MatFactorInfoDefaults(inc,chol,info) )
  *     if opts is None: return 0             # <<<<<<<<<<<<<<
@@ -29502,40 +30402,40 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscmat.pxi":941
+  /* "PETSc/petscmat.pxi":947
  *     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_ERR(6, 941, __pyx_L1_error)
+  __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 947, __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 *)(&PyDict_Type)), __pyx_t_4, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 941, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_Call(((PyObject *)(&PyDict_Type)), __pyx_t_4, 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_options = ((PyObject*)__pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "PETSc/petscmat.pxi":943
+  /* "PETSc/petscmat.pxi":949
  *     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_ERR(6, 943, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_options, __pyx_n_s_pop); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 949, __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_ERR(6, 943, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__23, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 949, __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":944
+  /* "PETSc/petscmat.pxi":950
  *     #
  *     cdef fill = options.pop('fill', None)
  *     if fill is not None:             # <<<<<<<<<<<<<<
@@ -29546,17 +30446,17 @@ 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":945
+    /* "PETSc/petscmat.pxi":951
  *     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_ERR(6, 945, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_fill); if (unlikely(__pyx_t_6 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(6, 951, __pyx_L1_error)
     __pyx_v_info->fill = __pyx_t_6;
 
-    /* "PETSc/petscmat.pxi":944
+    /* "PETSc/petscmat.pxi":950
  *     #
  *     cdef fill = options.pop('fill', None)
  *     if fill is not None:             # <<<<<<<<<<<<<<
@@ -29565,22 +30465,22 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
  */
   }
 
-  /* "PETSc/petscmat.pxi":947
+  /* "PETSc/petscmat.pxi":953
  *         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_ERR(6, 947, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_options, __pyx_n_s_pop); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 953, __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_ERR(6, 947, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__24, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 953, __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":948
+  /* "PETSc/petscmat.pxi":954
  *     #
  *     cdef zeropivot = options.pop('zeropivot', None)
  *     if zeropivot is not None:             # <<<<<<<<<<<<<<
@@ -29591,17 +30491,17 @@ 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":949
+    /* "PETSc/petscmat.pxi":955
  *     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_ERR(6, 949, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_zeropivot); if (unlikely(__pyx_t_6 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(6, 955, __pyx_L1_error)
     __pyx_v_info->zeropivot = __pyx_t_6;
 
-    /* "PETSc/petscmat.pxi":948
+    /* "PETSc/petscmat.pxi":954
  *     #
  *     cdef zeropivot = options.pop('zeropivot', None)
  *     if zeropivot is not None:             # <<<<<<<<<<<<<<
@@ -29610,22 +30510,22 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
  */
   }
 
-  /* "PETSc/petscmat.pxi":951
+  /* "PETSc/petscmat.pxi":957
  *         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_ERR(6, 951, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_options, __pyx_n_s_pop); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 957, __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_ERR(6, 951, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__25, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 957, __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":952
+  /* "PETSc/petscmat.pxi":958
  *     #
  *     cdef levels = options.pop('levels', None)
  *     if levels is not None:             # <<<<<<<<<<<<<<
@@ -29636,17 +30536,17 @@ 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":953
+    /* "PETSc/petscmat.pxi":959
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(6, 953, __pyx_L1_error)
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_levels); if (unlikely(__pyx_t_7 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(6, 959, __pyx_L1_error)
     __pyx_v_info->levels = ((PetscReal)__pyx_t_7);
 
-    /* "PETSc/petscmat.pxi":952
+    /* "PETSc/petscmat.pxi":958
  *     #
  *     cdef levels = options.pop('levels', None)
  *     if levels is not None:             # <<<<<<<<<<<<<<
@@ -29655,22 +30555,22 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
  */
   }
 
-  /* "PETSc/petscmat.pxi":954
+  /* "PETSc/petscmat.pxi":960
  *     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_ERR(6, 954, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_options, __pyx_n_s_pop); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 960, __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_ERR(6, 954, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__26, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 960, __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":955
+  /* "PETSc/petscmat.pxi":961
  *         info.levels  = <PetscReal>asInt(levels)
  *     cdef diagonal_fill = options.pop('diagonal_fill', None)
  *     if diagonal_fill is not None:             # <<<<<<<<<<<<<<
@@ -29681,17 +30581,17 @@ 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":956
+    /* "PETSc/petscmat.pxi":962
  *     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_ERR(6, 956, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_v_diagonal_fill); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(6, 962, __pyx_L1_error)
     __pyx_v_info->diagonal_fill = ((PetscReal)__pyx_t_3);
 
-    /* "PETSc/petscmat.pxi":955
+    /* "PETSc/petscmat.pxi":961
  *         info.levels  = <PetscReal>asInt(levels)
  *     cdef diagonal_fill = options.pop('diagonal_fill', None)
  *     if diagonal_fill is not None:             # <<<<<<<<<<<<<<
@@ -29700,22 +30600,22 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
  */
   }
 
-  /* "PETSc/petscmat.pxi":958
+  /* "PETSc/petscmat.pxi":964
  *         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_ERR(6, 958, __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__27, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 958, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__27, 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_dt = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "PETSc/petscmat.pxi":959
+  /* "PETSc/petscmat.pxi":965
  *     #
  *     cdef dt = options.pop('dt', None)
  *     if dt is not None:             # <<<<<<<<<<<<<<
@@ -29726,17 +30626,17 @@ 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":960
+    /* "PETSc/petscmat.pxi":966
  *     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_ERR(6, 960, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_dt); if (unlikely(__pyx_t_6 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(6, 966, __pyx_L1_error)
     __pyx_v_info->dt = __pyx_t_6;
 
-    /* "PETSc/petscmat.pxi":959
+    /* "PETSc/petscmat.pxi":965
  *     #
  *     cdef dt = options.pop('dt', None)
  *     if dt is not None:             # <<<<<<<<<<<<<<
@@ -29745,22 +30645,22 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
  */
   }
 
-  /* "PETSc/petscmat.pxi":961
+  /* "PETSc/petscmat.pxi":967
  *     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_ERR(6, 961, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_options, __pyx_n_s_pop); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 967, __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_ERR(6, 961, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__28, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 967, __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":962
+  /* "PETSc/petscmat.pxi":968
  *         info.dt = asReal(dt)
  *     cdef dtcol = options.pop('dtcol', None)
  *     if dtcol is not None:             # <<<<<<<<<<<<<<
@@ -29771,17 +30671,17 @@ 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":963
+    /* "PETSc/petscmat.pxi":969
  *     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_ERR(6, 963, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_dtcol); if (unlikely(__pyx_t_6 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(6, 969, __pyx_L1_error)
     __pyx_v_info->dtcol = __pyx_t_6;
 
-    /* "PETSc/petscmat.pxi":962
+    /* "PETSc/petscmat.pxi":968
  *         info.dt = asReal(dt)
  *     cdef dtcol = options.pop('dtcol', None)
  *     if dtcol is not None:             # <<<<<<<<<<<<<<
@@ -29790,22 +30690,22 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
  */
   }
 
-  /* "PETSc/petscmat.pxi":964
+  /* "PETSc/petscmat.pxi":970
  *     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_ERR(6, 964, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_options, __pyx_n_s_pop); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 970, __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_ERR(6, 964, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__29, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 970, __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":965
+  /* "PETSc/petscmat.pxi":971
  *         info.dtcol = asReal(dtcol)
  *     cdef dtcount = options.pop('dtcount', None)
  *     if dtcount is not None:             # <<<<<<<<<<<<<<
@@ -29816,17 +30716,17 @@ 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":966
+    /* "PETSc/petscmat.pxi":972
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(6, 966, __pyx_L1_error)
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_dtcount); if (unlikely(__pyx_t_7 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(6, 972, __pyx_L1_error)
     __pyx_v_info->dtcount = ((PetscReal)__pyx_t_7);
 
-    /* "PETSc/petscmat.pxi":965
+    /* "PETSc/petscmat.pxi":971
  *         info.dtcol = asReal(dtcol)
  *     cdef dtcount = options.pop('dtcount', None)
  *     if dtcount is not None:             # <<<<<<<<<<<<<<
@@ -29835,7 +30735,7 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
  */
   }
 
-  /* "PETSc/petscmat.pxi":967
+  /* "PETSc/petscmat.pxi":973
  *     if dtcount is not None:
  *         info.dtcount = <PetscReal>asInt(dtcount)
  *     if ((dt is not None) or             # <<<<<<<<<<<<<<
@@ -29850,7 +30750,7 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
     goto __pyx_L12_bool_binop_done;
   }
 
-  /* "PETSc/petscmat.pxi":968
+  /* "PETSc/petscmat.pxi":974
  *         info.dtcount = <PetscReal>asInt(dtcount)
  *     if ((dt is not None) or
  *         (dtcol is not None) or             # <<<<<<<<<<<<<<
@@ -29865,7 +30765,7 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
     goto __pyx_L12_bool_binop_done;
   }
 
-  /* "PETSc/petscmat.pxi":969
+  /* "PETSc/petscmat.pxi":975
  *     if ((dt is not None) or
  *         (dtcol is not None) or
  *         (dtcount is not None)):             # <<<<<<<<<<<<<<
@@ -29877,7 +30777,7 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
   __pyx_t_2 = __pyx_t_8;
   __pyx_L12_bool_binop_done:;
 
-  /* "PETSc/petscmat.pxi":967
+  /* "PETSc/petscmat.pxi":973
  *     if dtcount is not None:
  *         info.dtcount = <PetscReal>asInt(dtcount)
  *     if ((dt is not None) or             # <<<<<<<<<<<<<<
@@ -29886,7 +30786,7 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
  */
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":970
+    /* "PETSc/petscmat.pxi":976
  *         (dtcol is not None) or
  *         (dtcount is not None)):
  *         info.usedt = <PetscReal>PETSC_TRUE             # <<<<<<<<<<<<<<
@@ -29895,7 +30795,7 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
  */
     __pyx_v_info->usedt = ((PetscReal)PETSC_TRUE);
 
-    /* "PETSc/petscmat.pxi":967
+    /* "PETSc/petscmat.pxi":973
  *     if dtcount is not None:
  *         info.dtcount = <PetscReal>asInt(dtcount)
  *     if ((dt is not None) or             # <<<<<<<<<<<<<<
@@ -29904,22 +30804,22 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
  */
   }
 
-  /* "PETSc/petscmat.pxi":972
+  /* "PETSc/petscmat.pxi":978
  *         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_ERR(6, 972, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_options, __pyx_n_s_pop); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 978, __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_ERR(6, 972, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__30, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 978, __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":973
+  /* "PETSc/petscmat.pxi":979
  *     #
  *     cdef shifttype = options.pop('shifttype', None)
  *     if shifttype is not None:             # <<<<<<<<<<<<<<
@@ -29930,17 +30830,17 @@ 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":974
+    /* "PETSc/petscmat.pxi":980
  *     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)-1L))) __PYX_ERR(6, 974, __pyx_L1_error)
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_matfactorshifttype(__pyx_v_shifttype); if (unlikely(__pyx_t_9 == ((MatFactorShiftType)((MatFactorShiftType)-1L)))) __PYX_ERR(6, 980, __pyx_L1_error)
     __pyx_v_info->shifttype = ((PetscReal)__pyx_t_9);
 
-    /* "PETSc/petscmat.pxi":973
+    /* "PETSc/petscmat.pxi":979
  *     #
  *     cdef shifttype = options.pop('shifttype', None)
  *     if shifttype is not None:             # <<<<<<<<<<<<<<
@@ -29949,22 +30849,22 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
  */
   }
 
-  /* "PETSc/petscmat.pxi":975
+  /* "PETSc/petscmat.pxi":981
  *     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_ERR(6, 975, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_options, __pyx_n_s_pop); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 981, __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_ERR(6, 975, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__31, NULL); 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;
   __pyx_v_shiftamount = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "PETSc/petscmat.pxi":976
+  /* "PETSc/petscmat.pxi":982
  *         info.shifttype = <PetscReal>matfactorshifttype(shifttype)
  *     cdef shiftamount = options.pop('shiftamount', None)
  *     if shiftamount is not None:             # <<<<<<<<<<<<<<
@@ -29975,17 +30875,17 @@ 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":977
+    /* "PETSc/petscmat.pxi":983
  *     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_ERR(6, 977, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_shiftamount); if (unlikely(__pyx_t_6 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(6, 983, __pyx_L1_error)
     __pyx_v_info->shiftamount = __pyx_t_6;
 
-    /* "PETSc/petscmat.pxi":976
+    /* "PETSc/petscmat.pxi":982
  *         info.shifttype = <PetscReal>matfactorshifttype(shifttype)
  *     cdef shiftamount = options.pop('shiftamount', None)
  *     if shiftamount is not None:             # <<<<<<<<<<<<<<
@@ -29994,52 +30894,52 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
  */
   }
 
-  /* "PETSc/petscmat.pxi":979
+  /* "PETSc/petscmat.pxi":985
  *         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_ERR(6, 979, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_options); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(6, 985, __pyx_L1_error)
   if (__pyx_t_2) {
 
-    /* "PETSc/petscmat.pxi":981
+    /* "PETSc/petscmat.pxi":987
  *     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_ERR(6, 981, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyDict_Keys(__pyx_v_options); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 987, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PySequence_List(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 981, __pyx_L1_error)
+    __pyx_t_5 = PySequence_List(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 987, __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_ERR(6, 981, __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, 987, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-    /* "PETSc/petscmat.pxi":980
+    /* "PETSc/petscmat.pxi":986
  *     #
  *     if options:
  *         raise ValueError("unknown options: %s"             # <<<<<<<<<<<<<<
  *                          % list(options.keys()))
  *     return 0
  */
-    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 980, __pyx_L1_error)
+    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(6, 986, __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_ERR(6, 980, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 986, __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_ERR(6, 980, __pyx_L1_error)
+    __PYX_ERR(6, 986, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":979
+    /* "PETSc/petscmat.pxi":985
  *         info.shiftamount = asReal(shiftamount)
  *     #
  *     if options:             # <<<<<<<<<<<<<<
@@ -30048,7 +30948,7 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
  */
   }
 
-  /* "PETSc/petscmat.pxi":982
+  /* "PETSc/petscmat.pxi":988
  *         raise ValueError("unknown options: %s"
  *                          % list(options.keys()))
  *     return 0             # <<<<<<<<<<<<<<
@@ -30058,7 +30958,7 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":937
+  /* "PETSc/petscmat.pxi":943
  *     return st
  * 
  * cdef int matfactorinfo(PetscBool inc, PetscBool chol, object opts,             # <<<<<<<<<<<<<<
@@ -30087,7 +30987,7 @@ static int __pyx_f_8petsc4py_5PETSc_matfactorinfo(PetscBool __pyx_v_inc, PetscBo
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":986
+/* "PETSc/petscmat.pxi":992
  * # -----------------------------------------------------------------------------
  * 
  * cdef object mat_getitem(Mat self, object ij):             # <<<<<<<<<<<<<<
@@ -30116,7 +31016,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
   PyObject *__pyx_t_9 = NULL;
   __Pyx_RefNannySetupContext("mat_getitem", 0);
 
-  /* "PETSc/petscmat.pxi":987
+  /* "PETSc/petscmat.pxi":993
  * 
  * cdef object mat_getitem(Mat self, object ij):
  *     cdef PetscInt M=0, N=0             # <<<<<<<<<<<<<<
@@ -30126,7 +31026,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
   __pyx_v_M = 0;
   __pyx_v_N = 0;
 
-  /* "PETSc/petscmat.pxi":988
+  /* "PETSc/petscmat.pxi":994
  * cdef object mat_getitem(Mat self, object ij):
  *     cdef PetscInt M=0, N=0
  *     rows, cols = ij             # <<<<<<<<<<<<<<
@@ -30135,7 +31035,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
  */
   if ((likely(PyTuple_CheckExact(__pyx_v_ij))) || (PyList_CheckExact(__pyx_v_ij))) {
     PyObject* sequence = __pyx_v_ij;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -30143,9 +31043,9 @@ 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_ERR(6, 988, __pyx_L1_error)
+      __PYX_ERR(6, 994, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
@@ -30156,21 +31056,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_ERR(6, 988, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 994, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 988, __pyx_L1_error)
+    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 994, __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_ERR(6, 988, __pyx_L1_error)
+    __pyx_t_3 = PyObject_GetIter(__pyx_v_ij); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 994, __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_ERR(6, 988, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < 0) __PYX_ERR(6, 994, __pyx_L1_error)
     __pyx_t_4 = NULL;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     goto __pyx_L4_unpacking_done;
@@ -30178,7 +31078,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_ERR(6, 988, __pyx_L1_error)
+    __PYX_ERR(6, 994, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_rows = __pyx_t_1;
@@ -30186,7 +31086,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
   __pyx_v_cols = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscmat.pxi":989
+  /* "PETSc/petscmat.pxi":995
  *     cdef PetscInt M=0, N=0
  *     rows, cols = ij
  *     if isinstance(rows, slice):             # <<<<<<<<<<<<<<
@@ -30197,28 +31097,28 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
   __pyx_t_6 = (__pyx_t_5 != 0);
   if (__pyx_t_6) {
 
-    /* "PETSc/petscmat.pxi":990
+    /* "PETSc/petscmat.pxi":996
  *     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_ERR(6, 990, __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 == ((int)-1))) __PYX_ERR(6, 996, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":991
+    /* "PETSc/petscmat.pxi":997
  *     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_ERR(6, 991, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_rows, __pyx_n_s_indices); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 997, __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_ERR(6, 991, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_M); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 997, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_8 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
@@ -30228,24 +31128,44 @@ 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_ERR(6, 991, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 997, __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_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_ERR(6, 991, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_1)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_3};
+        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 997, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_3};
+        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 997, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 997, __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_ERR(6, 997, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
       PyObject* sequence = __pyx_t_2;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -30253,9 +31173,9 @@ 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_ERR(6, 991, __pyx_L1_error)
+        __PYX_ERR(6, 997, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1); 
@@ -30269,17 +31189,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_ERR(6, 991, __pyx_L1_error)
+      __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 997, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 991, __pyx_L1_error)
+      __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 997, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
-      __pyx_t_3 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 991, __pyx_L1_error)
+      __pyx_t_3 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 997, __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_ERR(6, 991, __pyx_L1_error)
+      __pyx_t_8 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 997, __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;
@@ -30289,7 +31209,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_ERR(6, 991, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_8), 3) < 0) __PYX_ERR(6, 997, __pyx_L1_error)
       __pyx_t_4 = NULL;
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       goto __pyx_L7_unpacking_done;
@@ -30297,7 +31217,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_ERR(6, 991, __pyx_L1_error)
+      __PYX_ERR(6, 997, __pyx_L1_error)
       __pyx_L7_unpacking_done:;
     }
     __pyx_v_start = __pyx_t_1;
@@ -30307,19 +31227,19 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
     __pyx_v_stride = __pyx_t_3;
     __pyx_t_3 = 0;
 
-    /* "PETSc/petscmat.pxi":992
+    /* "PETSc/petscmat.pxi":998
  *         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_ERR(6, 992, __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, 998, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF_SET(__pyx_v_rows, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "PETSc/petscmat.pxi":989
+    /* "PETSc/petscmat.pxi":995
  *     cdef PetscInt M=0, N=0
  *     rows, cols = ij
  *     if isinstance(rows, slice):             # <<<<<<<<<<<<<<
@@ -30328,7 +31248,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
  */
   }
 
-  /* "PETSc/petscmat.pxi":993
+  /* "PETSc/petscmat.pxi":999
  *         start, stop, stride = rows.indices(toInt(M))
  *         rows = arange(start, stop, stride)
  *     if isinstance(cols, slice):             # <<<<<<<<<<<<<<
@@ -30339,28 +31259,28 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
   __pyx_t_5 = (__pyx_t_6 != 0);
   if (__pyx_t_5) {
 
-    /* "PETSc/petscmat.pxi":994
+    /* "PETSc/petscmat.pxi":1000
  *         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_ERR(6, 994, __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 == ((int)-1))) __PYX_ERR(6, 1000, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":995
+    /* "PETSc/petscmat.pxi":1001
  *     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_ERR(6, 995, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_cols, __pyx_n_s_indices); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 1001, __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_ERR(6, 995, __pyx_L1_error)
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 1001, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __pyx_t_1 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
       __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
       if (likely(__pyx_t_1)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -30370,24 +31290,44 @@ 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_ERR(6, 995, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1001, __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_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_ERR(6, 995, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_3)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_1, __pyx_t_9};
+        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1001, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_1, __pyx_t_9};
+        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1001, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 1001, __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_ERR(6, 1001, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
       PyObject* sequence = __pyx_t_2;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -30395,9 +31335,9 @@ 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_ERR(6, 995, __pyx_L1_error)
+        __PYX_ERR(6, 1001, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
@@ -30411,17 +31351,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_ERR(6, 995, __pyx_L1_error)
+      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 1001, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 995, __pyx_L1_error)
+      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 1001, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
-      __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 995, __pyx_L1_error)
+      __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 1001, __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_ERR(6, 995, __pyx_L1_error)
+      __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 1001, __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;
@@ -30431,7 +31371,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_ERR(6, 995, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_1), 3) < 0) __PYX_ERR(6, 1001, __pyx_L1_error)
       __pyx_t_4 = NULL;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       goto __pyx_L10_unpacking_done;
@@ -30439,7 +31379,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_ERR(6, 995, __pyx_L1_error)
+      __PYX_ERR(6, 1001, __pyx_L1_error)
       __pyx_L10_unpacking_done:;
     }
     __Pyx_XDECREF_SET(__pyx_v_start, __pyx_t_3);
@@ -30449,19 +31389,19 @@ 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":996
+    /* "PETSc/petscmat.pxi":1002
  *         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_ERR(6, 996, __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, 1002, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF_SET(__pyx_v_cols, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "PETSc/petscmat.pxi":993
+    /* "PETSc/petscmat.pxi":999
  *         start, stop, stride = rows.indices(toInt(M))
  *         rows = arange(start, stop, stride)
  *     if isinstance(cols, slice):             # <<<<<<<<<<<<<<
@@ -30470,7 +31410,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
  */
   }
 
-  /* "PETSc/petscmat.pxi":997
+  /* "PETSc/petscmat.pxi":1003
  *         start, stop, stride = cols.indices(toInt(N))
  *         cols = arange(start, stop, stride)
  *     return matgetvalues(self.mat, rows, cols, None)             # <<<<<<<<<<<<<<
@@ -30478,13 +31418,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_ERR(6, 997, __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, 1003, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":986
+  /* "PETSc/petscmat.pxi":992
  * # -----------------------------------------------------------------------------
  * 
  * cdef object mat_getitem(Mat self, object ij):             # <<<<<<<<<<<<<<
@@ -30512,7 +31452,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_mat_getitem(struct PyPetscMatObject *_
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":1000
+/* "PETSc/petscmat.pxi":1006
  * 
  * 
  * cdef int mat_setitem(Mat self, object ij, object v) except -1:             # <<<<<<<<<<<<<<
@@ -30541,7 +31481,7 @@ static int __pyx_f_8petsc4py_5PETSc_mat_setitem(struct PyPetscMatObject *__pyx_v
   PyObject *__pyx_t_9 = NULL;
   __Pyx_RefNannySetupContext("mat_setitem", 0);
 
-  /* "PETSc/petscmat.pxi":1001
+  /* "PETSc/petscmat.pxi":1007
  * 
  * cdef int mat_setitem(Mat self, object ij, object v) except -1:
  *     cdef PetscInt M=0, N=0             # <<<<<<<<<<<<<<
@@ -30551,7 +31491,7 @@ static int __pyx_f_8petsc4py_5PETSc_mat_setitem(struct PyPetscMatObject *__pyx_v
   __pyx_v_M = 0;
   __pyx_v_N = 0;
 
-  /* "PETSc/petscmat.pxi":1002
+  /* "PETSc/petscmat.pxi":1008
  * cdef int mat_setitem(Mat self, object ij, object v) except -1:
  *     cdef PetscInt M=0, N=0
  *     rows, cols = ij             # <<<<<<<<<<<<<<
@@ -30560,7 +31500,7 @@ static int __pyx_f_8petsc4py_5PETSc_mat_setitem(struct PyPetscMatObject *__pyx_v
  */
   if ((likely(PyTuple_CheckExact(__pyx_v_ij))) || (PyList_CheckExact(__pyx_v_ij))) {
     PyObject* sequence = __pyx_v_ij;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -30568,9 +31508,9 @@ 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_ERR(6, 1002, __pyx_L1_error)
+      __PYX_ERR(6, 1008, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
@@ -30581,21 +31521,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_ERR(6, 1002, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 1008, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1002, __pyx_L1_error)
+    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1008, __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_ERR(6, 1002, __pyx_L1_error)
+    __pyx_t_3 = PyObject_GetIter(__pyx_v_ij); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 1008, __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_ERR(6, 1002, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_3), 2) < 0) __PYX_ERR(6, 1008, __pyx_L1_error)
     __pyx_t_4 = NULL;
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     goto __pyx_L4_unpacking_done;
@@ -30603,7 +31543,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_ERR(6, 1002, __pyx_L1_error)
+    __PYX_ERR(6, 1008, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_rows = __pyx_t_1;
@@ -30611,7 +31551,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":1003
+  /* "PETSc/petscmat.pxi":1009
  *     cdef PetscInt M=0, N=0
  *     rows, cols = ij
  *     if isinstance(rows, slice):             # <<<<<<<<<<<<<<
@@ -30622,28 +31562,28 @@ 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":1004
+    /* "PETSc/petscmat.pxi":1010
  *     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_ERR(6, 1004, __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 == ((int)-1))) __PYX_ERR(6, 1010, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":1005
+    /* "PETSc/petscmat.pxi":1011
  *     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_ERR(6, 1005, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_rows, __pyx_n_s_indices); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 1011, __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_ERR(6, 1005, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_M); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 1011, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_t_8 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_1))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_1))) {
       __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_1);
       if (likely(__pyx_t_8)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
@@ -30653,24 +31593,44 @@ 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_ERR(6, 1005, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_1, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1011, __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_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_ERR(6, 1005, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_1)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_3};
+        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1011, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_1)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_8, __pyx_t_3};
+        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_1, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1011, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_9 = PyTuple_New(1+1); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 1011, __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_ERR(6, 1011, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
       PyObject* sequence = __pyx_t_2;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -30678,9 +31638,9 @@ 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_ERR(6, 1005, __pyx_L1_error)
+        __PYX_ERR(6, 1011, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1); 
@@ -30694,17 +31654,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_ERR(6, 1005, __pyx_L1_error)
+      __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 1011, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 1005, __pyx_L1_error)
+      __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 1011, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_9);
-      __pyx_t_3 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 1005, __pyx_L1_error)
+      __pyx_t_3 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 1011, __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_ERR(6, 1005, __pyx_L1_error)
+      __pyx_t_8 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 1011, __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;
@@ -30714,7 +31674,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_ERR(6, 1005, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_8), 3) < 0) __PYX_ERR(6, 1011, __pyx_L1_error)
       __pyx_t_4 = NULL;
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       goto __pyx_L7_unpacking_done;
@@ -30722,7 +31682,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_ERR(6, 1005, __pyx_L1_error)
+      __PYX_ERR(6, 1011, __pyx_L1_error)
       __pyx_L7_unpacking_done:;
     }
     __pyx_v_start = __pyx_t_1;
@@ -30732,19 +31692,19 @@ 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":1006
+    /* "PETSc/petscmat.pxi":1012
  *         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_ERR(6, 1006, __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, 1012, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF_SET(__pyx_v_rows, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "PETSc/petscmat.pxi":1003
+    /* "PETSc/petscmat.pxi":1009
  *     cdef PetscInt M=0, N=0
  *     rows, cols = ij
  *     if isinstance(rows, slice):             # <<<<<<<<<<<<<<
@@ -30753,7 +31713,7 @@ static int __pyx_f_8petsc4py_5PETSc_mat_setitem(struct PyPetscMatObject *__pyx_v
  */
   }
 
-  /* "PETSc/petscmat.pxi":1007
+  /* "PETSc/petscmat.pxi":1013
  *         start, stop, stride = rows.indices(toInt(M))
  *         rows = arange(start, stop, stride)
  *     if isinstance(cols, slice):             # <<<<<<<<<<<<<<
@@ -30764,28 +31724,28 @@ 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":1008
+    /* "PETSc/petscmat.pxi":1014
  *         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_ERR(6, 1008, __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 == ((int)-1))) __PYX_ERR(6, 1014, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":1009
+    /* "PETSc/petscmat.pxi":1015
  *     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_ERR(6, 1009, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_cols, __pyx_n_s_indices); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 1015, __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_ERR(6, 1009, __pyx_L1_error)
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 1015, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
     __pyx_t_1 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_3))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
       __pyx_t_1 = PyMethod_GET_SELF(__pyx_t_3);
       if (likely(__pyx_t_1)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
@@ -30795,24 +31755,44 @@ 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_ERR(6, 1009, __pyx_L1_error)
+      __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_9); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1015, __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_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_ERR(6, 1009, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_2);
-      __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_3)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_1, __pyx_t_9};
+        __pyx_t_2 = __Pyx_PyFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1015, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_3)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_1, __pyx_t_9};
+        __pyx_t_2 = __Pyx_PyCFunction_FastCall(__pyx_t_3, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_2)) __PYX_ERR(6, 1015, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      } else
+      #endif
+      {
+        __pyx_t_8 = PyTuple_New(1+1); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 1015, __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_ERR(6, 1015, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_2);
+        __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+      }
     }
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
       PyObject* sequence = __pyx_t_2;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -30820,9 +31800,9 @@ 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_ERR(6, 1009, __pyx_L1_error)
+        __PYX_ERR(6, 1015, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
@@ -30836,17 +31816,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_ERR(6, 1009, __pyx_L1_error)
+      __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 1015, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 1009, __pyx_L1_error)
+      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(6, 1015, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
-      __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 1009, __pyx_L1_error)
+      __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) __PYX_ERR(6, 1015, __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_ERR(6, 1009, __pyx_L1_error)
+      __pyx_t_1 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(6, 1015, __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;
@@ -30856,7 +31836,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_ERR(6, 1009, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_4(__pyx_t_1), 3) < 0) __PYX_ERR(6, 1015, __pyx_L1_error)
       __pyx_t_4 = NULL;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
       goto __pyx_L10_unpacking_done;
@@ -30864,7 +31844,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_ERR(6, 1009, __pyx_L1_error)
+      __PYX_ERR(6, 1015, __pyx_L1_error)
       __pyx_L10_unpacking_done:;
     }
     __Pyx_XDECREF_SET(__pyx_v_start, __pyx_t_3);
@@ -30874,19 +31854,19 @@ 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":1010
+    /* "PETSc/petscmat.pxi":1016
  *         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_ERR(6, 1010, __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, 1016, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF_SET(__pyx_v_cols, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "PETSc/petscmat.pxi":1007
+    /* "PETSc/petscmat.pxi":1013
  *         start, stop, stride = rows.indices(toInt(M))
  *         rows = arange(start, stop, stride)
  *     if isinstance(cols, slice):             # <<<<<<<<<<<<<<
@@ -30895,16 +31875,16 @@ static int __pyx_f_8petsc4py_5PETSc_mat_setitem(struct PyPetscMatObject *__pyx_v
  */
   }
 
-  /* "PETSc/petscmat.pxi":1011
+  /* "PETSc/petscmat.pxi":1017
  *         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_ERR(6, 1011, __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 == ((int)-1))) __PYX_ERR(6, 1017, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":1012
+  /* "PETSc/petscmat.pxi":1018
  *         cols = arange(start, stop, stride)
  *     matsetvalues(self.mat, rows, cols, v, None, 0, 0)
  *     return 0             # <<<<<<<<<<<<<<
@@ -30914,7 +31894,7 @@ static int __pyx_f_8petsc4py_5PETSc_mat_setitem(struct PyPetscMatObject *__pyx_v
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":1000
+  /* "PETSc/petscmat.pxi":1006
  * 
  * 
  * cdef int mat_setitem(Mat self, object ij, object v) except -1:             # <<<<<<<<<<<<<<
@@ -30941,7 +31921,7 @@ static int __pyx_f_8petsc4py_5PETSc_mat_setitem(struct PyPetscMatObject *__pyx_v
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":1020
+/* "PETSc/petscmat.pxi":1026
  *    cdef PetscMatStencil stencil
  *    property i:
  *        def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -30968,17 +31948,17 @@ static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_1i___set__(struct __pyx_obj_
   PetscInt __pyx_t_1;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/petscmat.pxi":1021
+  /* "PETSc/petscmat.pxi":1027
  *    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 == -1L && PyErr_Occurred())) __PYX_ERR(6, 1021, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(6, 1027, __pyx_L1_error)
   __pyx_v_self->stencil.i = __pyx_t_1;
 
-  /* "PETSc/petscmat.pxi":1020
+  /* "PETSc/petscmat.pxi":1026
  *    cdef PetscMatStencil stencil
  *    property i:
  *        def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -30997,7 +31977,7 @@ static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_1i___set__(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":1023
+/* "PETSc/petscmat.pxi":1029
  *            self.stencil.i = asInt(value)
  *    property j:
  *        def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -31024,17 +32004,17 @@ static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_1j___set__(struct __pyx_obj_
   PetscInt __pyx_t_1;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/petscmat.pxi":1024
+  /* "PETSc/petscmat.pxi":1030
  *    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 == -1L && PyErr_Occurred())) __PYX_ERR(6, 1024, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(6, 1030, __pyx_L1_error)
   __pyx_v_self->stencil.j = __pyx_t_1;
 
-  /* "PETSc/petscmat.pxi":1023
+  /* "PETSc/petscmat.pxi":1029
  *            self.stencil.i = asInt(value)
  *    property j:
  *        def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -31053,7 +32033,7 @@ static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_1j___set__(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":1026
+/* "PETSc/petscmat.pxi":1032
  *            self.stencil.j = asInt(value)
  *    property k:
  *        def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -31080,17 +32060,17 @@ static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_1k___set__(struct __pyx_obj_
   PetscInt __pyx_t_1;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/petscmat.pxi":1027
+  /* "PETSc/petscmat.pxi":1033
  *    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 == -1L && PyErr_Occurred())) __PYX_ERR(6, 1027, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(6, 1033, __pyx_L1_error)
   __pyx_v_self->stencil.k = __pyx_t_1;
 
-  /* "PETSc/petscmat.pxi":1026
+  /* "PETSc/petscmat.pxi":1032
  *            self.stencil.j = asInt(value)
  *    property k:
  *        def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -31109,7 +32089,7 @@ static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_1k___set__(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":1029
+/* "PETSc/petscmat.pxi":1035
  *            self.stencil.k = asInt(value)
  *    property c:
  *        def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -31136,17 +32116,17 @@ static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_1c___set__(struct __pyx_obj_
   PetscInt __pyx_t_1;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/petscmat.pxi":1030
+  /* "PETSc/petscmat.pxi":1036
  *    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 == -1L && PyErr_Occurred())) __PYX_ERR(6, 1030, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(6, 1036, __pyx_L1_error)
   __pyx_v_self->stencil.c = __pyx_t_1;
 
-  /* "PETSc/petscmat.pxi":1029
+  /* "PETSc/petscmat.pxi":1035
  *            self.stencil.k = asInt(value)
  *    property c:
  *        def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -31165,7 +32145,7 @@ static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_1c___set__(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":1032
+/* "PETSc/petscmat.pxi":1038
  *            self.stencil.c = asInt(value)
  *    property index:
  *        def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -31193,7 +32173,7 @@ static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_5index___set__(struct __pyx_
   PetscInt __pyx_t_1;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/petscmat.pxi":1033
+  /* "PETSc/petscmat.pxi":1039
  *    property index:
  *        def __set__(self, value):
  *            cdef PetscMatStencil *s = &self.stencil             # <<<<<<<<<<<<<<
@@ -31202,7 +32182,7 @@ static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_5index___set__(struct __pyx_
  */
   __pyx_v_s = (&__pyx_v_self->stencil);
 
-  /* "PETSc/petscmat.pxi":1034
+  /* "PETSc/petscmat.pxi":1040
  *        def __set__(self, value):
  *            cdef PetscMatStencil *s = &self.stencil
  *            s.k = s.j = s.i = 0             # <<<<<<<<<<<<<<
@@ -31213,16 +32193,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":1035
+  /* "PETSc/petscmat.pxi":1041
  *            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 == -1L && PyErr_Occurred())) __PYX_ERR(6, 1035, __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 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(6, 1041, __pyx_L1_error)
 
-  /* "PETSc/petscmat.pxi":1032
+  /* "PETSc/petscmat.pxi":1038
  *            self.stencil.c = asInt(value)
  *    property index:
  *        def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -31241,7 +32221,7 @@ static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_5index___set__(struct __pyx_
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":1037
+/* "PETSc/petscmat.pxi":1043
  *            asDims(value, &s.i, &s.j, &s.k)
  *    property field:
  *        def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -31269,7 +32249,7 @@ static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_5field___set__(struct __pyx_
   PetscInt __pyx_t_1;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/petscmat.pxi":1038
+  /* "PETSc/petscmat.pxi":1044
  *    property field:
  *        def __set__(self, value):
  *            cdef PetscMatStencil *s = &self.stencil             # <<<<<<<<<<<<<<
@@ -31278,17 +32258,17 @@ static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_5field___set__(struct __pyx_
  */
   __pyx_v_s = (&__pyx_v_self->stencil);
 
-  /* "PETSc/petscmat.pxi":1039
+  /* "PETSc/petscmat.pxi":1045
  *        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 == -1L && PyErr_Occurred())) __PYX_ERR(6, 1039, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(6, 1045, __pyx_L1_error)
   __pyx_v_s->c = __pyx_t_1;
 
-  /* "PETSc/petscmat.pxi":1037
+  /* "PETSc/petscmat.pxi":1043
  *            asDims(value, &s.i, &s.j, &s.k)
  *    property field:
  *        def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -31307,7 +32287,7 @@ static int __pyx_pf_8petsc4py_5PETSc_12_Mat_Stencil_5field___set__(struct __pyx_
   return __pyx_r;
 }
 
-/* "PETSc/petscmat.pxi":1041
+/* "PETSc/petscmat.pxi":1047
  *            s.c = asInt(value)
  * 
  * cdef matsetvaluestencil(PetscMat A,             # <<<<<<<<<<<<<<
@@ -31329,7 +32309,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_matsetvaluestencil(Mat __pyx_v_A, stru
   __Pyx_RefNannySetupContext("matsetvaluestencil", 0);
   __Pyx_INCREF(__pyx_v_value);
 
-  /* "PETSc/petscmat.pxi":1045
+  /* "PETSc/petscmat.pxi":1051
  *                         PetscInsertMode im, int blocked):
  *     # block size
  *     cdef PetscInt rbs=1, cbs=1             # <<<<<<<<<<<<<<
@@ -31339,7 +32319,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_matsetvaluestencil(Mat __pyx_v_A, stru
   __pyx_v_rbs = 1;
   __pyx_v_cbs = 1;
 
-  /* "PETSc/petscmat.pxi":1046
+  /* "PETSc/petscmat.pxi":1052
  *     # block size
  *     cdef PetscInt rbs=1, cbs=1
  *     if blocked: CHKERR( MatGetBlockSizes(A, &rbs, &cbs) )             # <<<<<<<<<<<<<<
@@ -31348,10 +32328,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_ERR(6, 1046, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetBlockSizes(__pyx_v_A, (&__pyx_v_rbs), (&__pyx_v_cbs))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(6, 1052, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":1047
+  /* "PETSc/petscmat.pxi":1053
  *     cdef PetscInt rbs=1, cbs=1
  *     if blocked: CHKERR( MatGetBlockSizes(A, &rbs, &cbs) )
  *     if rbs < 1: rbs = 1             # <<<<<<<<<<<<<<
@@ -31363,7 +32343,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_matsetvaluestencil(Mat __pyx_v_A, stru
     __pyx_v_rbs = 1;
   }
 
-  /* "PETSc/petscmat.pxi":1048
+  /* "PETSc/petscmat.pxi":1054
  *     if blocked: CHKERR( MatGetBlockSizes(A, &rbs, &cbs) )
  *     if rbs < 1: rbs = 1
  *     if cbs < 1: cbs = 1             # <<<<<<<<<<<<<<
@@ -31375,7 +32355,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_matsetvaluestencil(Mat __pyx_v_A, stru
     __pyx_v_cbs = 1;
   }
 
-  /* "PETSc/petscmat.pxi":1050
+  /* "PETSc/petscmat.pxi":1056
  *     if cbs < 1: cbs = 1
  *     # values
  *     cdef PetscInt    nv = 1             # <<<<<<<<<<<<<<
@@ -31384,7 +32364,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_matsetvaluestencil(Mat __pyx_v_A, stru
  */
   __pyx_v_nv = 1;
 
-  /* "PETSc/petscmat.pxi":1051
+  /* "PETSc/petscmat.pxi":1057
  *     # values
  *     cdef PetscInt    nv = 1
  *     cdef PetscScalar *v = NULL             # <<<<<<<<<<<<<<
@@ -31393,19 +32373,19 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_matsetvaluestencil(Mat __pyx_v_A, stru
  */
   __pyx_v_v = NULL;
 
-  /* "PETSc/petscmat.pxi":1052
+  /* "PETSc/petscmat.pxi":1058
  *     cdef PetscInt    nv = 1
  *     cdef PetscScalar *v = NULL
  *     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_ERR(6, 1052, __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, 1058, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/petscmat.pxi":1053
+  /* "PETSc/petscmat.pxi":1059
  *     cdef PetscScalar *v = NULL
  *     value = iarray_s(value, &nv, &v)
  *     if rbs*cbs != nv: raise ValueError(             # <<<<<<<<<<<<<<
@@ -31415,40 +32395,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":1054
+    /* "PETSc/petscmat.pxi":1060
  *     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_ERR(6, 1054, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nv); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 1060, __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_ERR(6, 1054, __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, 1060, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "PETSc/petscmat.pxi":1053
+    /* "PETSc/petscmat.pxi":1059
  *     cdef PetscScalar *v = NULL
  *     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_ERR(6, 1053, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(6, 1059, __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_ERR(6, 1053, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(6, 1059, __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_ERR(6, 1053, __pyx_L1_error)
+    __PYX_ERR(6, 1059, __pyx_L1_error)
   }
 
-  /* "PETSc/petscmat.pxi":1055
+  /* "PETSc/petscmat.pxi":1061
  *     if rbs*cbs != nv: raise ValueError(
  *         "incompatible array sizes: nv=%d" % toInt(nv) )
  *     if blocked:             # <<<<<<<<<<<<<<
@@ -31458,16 +32438,16 @@ 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":1056
+    /* "PETSc/petscmat.pxi":1062
  *         "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_ERR(6, 1056, __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 == ((int)-1))) __PYX_ERR(6, 1062, __pyx_L1_error)
 
-    /* "PETSc/petscmat.pxi":1055
+    /* "PETSc/petscmat.pxi":1061
  *     if rbs*cbs != nv: raise ValueError(
  *         "incompatible array sizes: nv=%d" % toInt(nv) )
  *     if blocked:             # <<<<<<<<<<<<<<
@@ -31477,7 +32457,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_matsetvaluestencil(Mat __pyx_v_A, stru
     goto __pyx_L7;
   }
 
-  /* "PETSc/petscmat.pxi":1061
+  /* "PETSc/petscmat.pxi":1067
  *                                            v, im) )
  *     else:
  *         CHKERR( MatSetValuesStencil(A,             # <<<<<<<<<<<<<<
@@ -31486,18 +32466,18 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_matsetvaluestencil(Mat __pyx_v_A, stru
  */
   /*else*/ {
 
-    /* "PETSc/petscmat.pxi":1064
+    /* "PETSc/petscmat.pxi":1070
  *                                     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_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 == ((int)-1))) __PYX_ERR(6, 1067, __pyx_L1_error)
   }
   __pyx_L7:;
 
-  /* "PETSc/petscmat.pxi":1065
+  /* "PETSc/petscmat.pxi":1071
  *                                     1, &c.stencil,
  *                                     v, im) )
  *     return 0             # <<<<<<<<<<<<<<
@@ -31509,7 +32489,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_matsetvaluestencil(Mat __pyx_v_A, stru
   __pyx_r = __pyx_int_0;
   goto __pyx_L0;
 
-  /* "PETSc/petscmat.pxi":1041
+  /* "PETSc/petscmat.pxi":1047
  *            s.c = asInt(value)
  * 
  * cdef matsetvaluestencil(PetscMat A,             # <<<<<<<<<<<<<<
@@ -31530,7 +32510,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_matsetvaluestencil(Mat __pyx_v_A, stru
   return __pyx_r;
 }
 
-/* "PETSc/petscksp.pxi":196
+/* "PETSc/petscksp.pxi":197
  * # -----------------------------------------------------------------------------
  * 
  * cdef inline KSP ref_KSP(PetscKSP ksp):             # <<<<<<<<<<<<<<
@@ -31546,14 +32526,14 @@ static CYTHON_INLINE struct PyPetscKSPObject *__pyx_f_8petsc4py_5PETSc_ref_KSP(K
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("ref_KSP", 0);
 
-  /* "PETSc/petscksp.pxi":197
+  /* "PETSc/petscksp.pxi":198
  * 
  * 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 *)__pyx_ptype_8petsc4py_5PETSc_KSP), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 197, __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, 198, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -31561,7 +32541,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":198
+  /* "PETSc/petscksp.pxi":199
  * cdef inline KSP ref_KSP(PetscKSP ksp):
  *     cdef KSP ob = <KSP> KSP()
  *     ob.ksp = ksp             # <<<<<<<<<<<<<<
@@ -31570,7 +32550,7 @@ static CYTHON_INLINE struct PyPetscKSPObject *__pyx_f_8petsc4py_5PETSc_ref_KSP(K
  */
   __pyx_v_ob->ksp = __pyx_v_ksp;
 
-  /* "PETSc/petscksp.pxi":199
+  /* "PETSc/petscksp.pxi":200
  *     cdef KSP ob = <KSP> KSP()
  *     ob.ksp = ksp
  *     PetscINCREF(ob.obj)             # <<<<<<<<<<<<<<
@@ -31579,7 +32559,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":200
+  /* "PETSc/petscksp.pxi":201
  *     ob.ksp = ksp
  *     PetscINCREF(ob.obj)
  *     return ob             # <<<<<<<<<<<<<<
@@ -31591,7 +32571,7 @@ static CYTHON_INLINE struct PyPetscKSPObject *__pyx_f_8petsc4py_5PETSc_ref_KSP(K
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "PETSc/petscksp.pxi":196
+  /* "PETSc/petscksp.pxi":197
  * # -----------------------------------------------------------------------------
  * 
  * cdef inline KSP ref_KSP(PetscKSP ksp):             # <<<<<<<<<<<<<<
@@ -31612,7 +32592,7 @@ static CYTHON_INLINE struct PyPetscKSPObject *__pyx_f_8petsc4py_5PETSc_ref_KSP(K
   return __pyx_r;
 }
 
-/* "PETSc/petscksp.pxi":204
+/* "PETSc/petscksp.pxi":205
  * # -----------------------------------------------------------------------------
  * 
  * cdef int KSP_Converged(             # <<<<<<<<<<<<<<
@@ -31638,34 +32618,34 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Converged(KSP __pyx_v_ksp, PetscInt __py
   int __pyx_t_8;
   KSPConvergedReason __pyx_t_9;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("KSP_Converged", 0);
 
-  /* "PETSc/petscksp.pxi":211
+  /* "PETSc/petscksp.pxi":212
  *     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_ERR(18, 211, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_KSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 212, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Ksp = ((struct PyPetscKSPObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscksp.pxi":212
+  /* "PETSc/petscksp.pxi":213
  *     ) 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), ((char *)"__converged__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 212, __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, 213, __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
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -31673,9 +32653,9 @@ 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_ERR(18, 212, __pyx_L1_error)
+      __PYX_ERR(18, 213, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
@@ -31689,17 +32669,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_ERR(18, 212, __pyx_L1_error)
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(18, 213, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(18, 212, __pyx_L1_error)
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(18, 213, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(18, 212, __pyx_L1_error)
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(18, 213, __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(18, 212, __pyx_L1_error)
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(18, 213, __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;
@@ -31709,7 +32689,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_ERR(18, 212, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(18, 213, __pyx_L1_error)
     __pyx_t_6 = NULL;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     goto __pyx_L4_unpacking_done;
@@ -31717,7 +32697,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_ERR(18, 212, __pyx_L1_error)
+    __PYX_ERR(18, 213, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_converged = __pyx_t_2;
@@ -31727,18 +32707,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":213
+  /* "PETSc/petscksp.pxi":214
  *     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_ERR(18, 213, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_its); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 214, __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_ERR(18, 213, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rnm); if (unlikely(!__pyx_t_4)) __PYX_ERR(18, 214, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(18, 213, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(18, 214, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(((PyObject *)__pyx_v_Ksp));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Ksp));
@@ -31749,31 +32729,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_ERR(18, 213, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(18, 214, __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_ERR(18, 213, __pyx_L1_error)
+  __pyx_t_1 = PyNumber_Add(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 214, __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_ERR(18, 213, __pyx_L1_error)
+    __PYX_ERR(18, 214, __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(18, 213, __pyx_L1_error)
+    __pyx_t_4 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_4)) __PYX_ERR(18, 214, __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(18, 213, __pyx_L1_error)
+    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(18, 214, __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_ERR(18, 213, __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, 214, __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":214
+  /* "PETSc/petscksp.pxi":215
  *     (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             # <<<<<<<<<<<<<<
@@ -31787,7 +32767,7 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Converged(KSP __pyx_v_ksp, PetscInt __py
     goto __pyx_L5;
   }
 
-  /* "PETSc/petscksp.pxi":215
+  /* "PETSc/petscksp.pxi":216
  *     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             # <<<<<<<<<<<<<<
@@ -31801,7 +32781,7 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Converged(KSP __pyx_v_ksp, PetscInt __py
     goto __pyx_L5;
   }
 
-  /* "PETSc/petscksp.pxi":216
+  /* "PETSc/petscksp.pxi":217
  *     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 ?             # <<<<<<<<<<<<<<
@@ -31815,7 +32795,7 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Converged(KSP __pyx_v_ksp, PetscInt __py
     goto __pyx_L5;
   }
 
-  /* "PETSc/petscksp.pxi":217
+  /* "PETSc/petscksp.pxi":218
  *     elif reason is False: r[0] = KSP_CONVERGED_ITERATING
  *     elif reason is True:  r[0] = KSP_CONVERGED_ITS # XXX ?
  *     else:                 r[0] = reason             # <<<<<<<<<<<<<<
@@ -31823,12 +32803,12 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Converged(KSP __pyx_v_ksp, PetscInt __py
  * 
  */
   /*else*/ {
-    __pyx_t_9 = ((KSPConvergedReason)__Pyx_PyInt_As_KSPConvergedReason(__pyx_v_reason)); if (unlikely(PyErr_Occurred())) __PYX_ERR(18, 217, __pyx_L1_error)
+    __pyx_t_9 = ((KSPConvergedReason)__Pyx_PyInt_As_KSPConvergedReason(__pyx_v_reason)); if (unlikely(PyErr_Occurred())) __PYX_ERR(18, 218, __pyx_L1_error)
     (__pyx_v_r[0]) = __pyx_t_9;
   }
   __pyx_L5:;
 
-  /* "PETSc/petscksp.pxi":218
+  /* "PETSc/petscksp.pxi":219
  *     elif reason is True:  r[0] = KSP_CONVERGED_ITS # XXX ?
  *     else:                 r[0] = reason
  *     return 0             # <<<<<<<<<<<<<<
@@ -31838,7 +32818,7 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Converged(KSP __pyx_v_ksp, PetscInt __py
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscksp.pxi":204
+  /* "PETSc/petscksp.pxi":205
  * # -----------------------------------------------------------------------------
  * 
  * cdef int KSP_Converged(             # <<<<<<<<<<<<<<
@@ -31863,12 +32843,12 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Converged(KSP __pyx_v_ksp, PetscInt __py
   __Pyx_XDECREF(__pyx_v_reason);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscksp.pxi":222
+/* "PETSc/petscksp.pxi":223
  * # -----------------------------------------------------------------------------
  * 
  * cdef int KSP_Monitor(             # <<<<<<<<<<<<<<
@@ -31896,35 +32876,35 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Monitor(KSP __pyx_v_ksp, PetscInt __pyx_
   PyObject *__pyx_t_10 = NULL;
   PyObject *(*__pyx_t_11)(PyObject *);
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("KSP_Monitor", 0);
 
-  /* "PETSc/petscksp.pxi":228
+  /* "PETSc/petscksp.pxi":229
  *     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_ERR(18, 228, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_KSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 229, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Ksp = ((struct PyPetscKSPObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscksp.pxi":229
+  /* "PETSc/petscksp.pxi":230
  *     ) 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), ((char *)"__monitor__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 229, __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, 230, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_monitorlist = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscksp.pxi":230
+  /* "PETSc/petscksp.pxi":231
  *     cdef KSP Ksp = ref_KSP(ksp)
  *     cdef object monitorlist = Ksp.get_attr('__monitor__')
  *     if monitorlist is None: return 0             # <<<<<<<<<<<<<<
@@ -31938,7 +32918,7 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Monitor(KSP __pyx_v_ksp, PetscInt __pyx_
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscksp.pxi":231
+  /* "PETSc/petscksp.pxi":232
  *     cdef object monitorlist = Ksp.get_attr('__monitor__')
  *     if monitorlist is None: return 0
  *     for (monitor, args, kargs) in monitorlist:             # <<<<<<<<<<<<<<
@@ -31949,26 +32929,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_ERR(18, 231, __pyx_L1_error)
+    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_monitorlist); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 232, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(18, 231, __pyx_L1_error)
+    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(18, 232, __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_ERR(18, 231, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __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, 232, __pyx_L1_error)
         #else
-        __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_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(18, 232, __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_ERR(18, 231, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __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, 232, __pyx_L1_error)
         #else
-        __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_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(18, 232, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         #endif
       }
@@ -31977,8 +32957,8 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Monitor(KSP __pyx_v_ksp, PetscInt __pyx_
       if (unlikely(!__pyx_t_6)) {
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
-          if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(18, 231, __pyx_L1_error)
+          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
+          else __PYX_ERR(18, 232, __pyx_L1_error)
         }
         break;
       }
@@ -31986,7 +32966,7 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Monitor(KSP __pyx_v_ksp, PetscInt __pyx_
     }
     if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) {
       PyObject* sequence = __pyx_t_6;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -31994,9 +32974,9 @@ 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_ERR(18, 231, __pyx_L1_error)
+        __PYX_ERR(18, 232, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
@@ -32010,17 +32990,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_ERR(18, 231, __pyx_L1_error)
+      __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(18, 232, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(18, 231, __pyx_L1_error)
+      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(18, 232, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
-      __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) __PYX_ERR(18, 231, __pyx_L1_error)
+      __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) __PYX_ERR(18, 232, __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_ERR(18, 231, __pyx_L1_error)
+      __pyx_t_10 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(18, 232, __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;
@@ -32030,7 +33010,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_ERR(18, 231, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 3) < 0) __PYX_ERR(18, 232, __pyx_L1_error)
       __pyx_t_11 = NULL;
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       goto __pyx_L7_unpacking_done;
@@ -32038,7 +33018,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_ERR(18, 231, __pyx_L1_error)
+      __PYX_ERR(18, 232, __pyx_L1_error)
       __pyx_L7_unpacking_done:;
     }
     __Pyx_XDECREF_SET(__pyx_v_monitor, __pyx_t_7);
@@ -32048,18 +33028,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":232
+    /* "PETSc/petscksp.pxi":233
  *     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_ERR(18, 232, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_its); if (unlikely(!__pyx_t_6)) __PYX_ERR(18, 233, __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_ERR(18, 232, __pyx_L1_error)
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rnm); if (unlikely(!__pyx_t_9)) __PYX_ERR(18, 233, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
-    __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(18, 232, __pyx_L1_error)
+    __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(18, 233, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_INCREF(((PyObject *)__pyx_v_Ksp));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_Ksp));
@@ -32070,30 +33050,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_ERR(18, 232, __pyx_L1_error)
+    __pyx_t_9 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_9)) __PYX_ERR(18, 233, __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_ERR(18, 232, __pyx_L1_error)
+    __pyx_t_6 = PyNumber_Add(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_6)) __PYX_ERR(18, 233, __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_ERR(18, 232, __pyx_L1_error)
+      __PYX_ERR(18, 233, __pyx_L1_error)
     }
     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_t_9 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_9)) __PYX_ERR(18, 233, __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_ERR(18, 232, __pyx_L1_error)
+      __pyx_t_9 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(18, 233, __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_ERR(18, 232, __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, 233, __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":231
+    /* "PETSc/petscksp.pxi":232
  *     cdef object monitorlist = Ksp.get_attr('__monitor__')
  *     if monitorlist is None: return 0
  *     for (monitor, args, kargs) in monitorlist:             # <<<<<<<<<<<<<<
@@ -32103,7 +33083,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":233
+  /* "PETSc/petscksp.pxi":234
  *     for (monitor, args, kargs) in monitorlist:
  *         monitor(Ksp, toInt(its), toReal(rnm), *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -32113,7 +33093,7 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Monitor(KSP __pyx_v_ksp, PetscInt __pyx_
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscksp.pxi":222
+  /* "PETSc/petscksp.pxi":223
  * # -----------------------------------------------------------------------------
  * 
  * cdef int KSP_Monitor(             # <<<<<<<<<<<<<<
@@ -32139,12 +33119,12 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_Monitor(KSP __pyx_v_ksp, PetscInt __pyx_
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscksp.pxi":237
+/* "PETSc/petscksp.pxi":238
  * # -----------------------------------------------------------------------------
  * 
  * cdef int KSP_ComputeRHS(             # <<<<<<<<<<<<<<
@@ -32170,47 +33150,47 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_ComputeRHS(KSP __pyx_v_ksp, Vec __pyx_v_
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("KSP_ComputeRHS", 0);
 
-  /* "PETSc/petscksp.pxi":242
+  /* "PETSc/petscksp.pxi":243
  *     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_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_KSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 243, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Ksp = ((struct PyPetscKSPObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscksp.pxi":243
+  /* "PETSc/petscksp.pxi":244
  *     ) 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_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_rhs)); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 244, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Rhs = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscksp.pxi":244
+  /* "PETSc/petscksp.pxi":245
  *     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_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, 245, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscksp.pxi":245
+  /* "PETSc/petscksp.pxi":246
  *     cdef Vec Rhs = ref_Vec(rhs)
  *     cdef object context = Ksp.get_attr('__rhs__')
  *     if context is None and ctx != NULL: context = <object>ctx             # <<<<<<<<<<<<<<
@@ -32234,7 +33214,7 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_ComputeRHS(KSP __pyx_v_ksp, Vec __pyx_v_
     __pyx_t_1 = 0;
   }
 
-  /* "PETSc/petscksp.pxi":246
+  /* "PETSc/petscksp.pxi":247
  *     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             # <<<<<<<<<<<<<<
@@ -32256,12 +33236,12 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_ComputeRHS(KSP __pyx_v_ksp, Vec __pyx_v_
     __pyx_L6_bool_binop_done:;
     if (unlikely(!__pyx_t_2)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(18, 246, __pyx_L1_error)
+      __PYX_ERR(18, 247, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscksp.pxi":247
+  /* "PETSc/petscksp.pxi":248
  *     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             # <<<<<<<<<<<<<<
@@ -32270,7 +33250,7 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_ComputeRHS(KSP __pyx_v_ksp, Vec __pyx_v_
  */
   if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
     PyObject* sequence = __pyx_v_context;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -32278,9 +33258,9 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_ComputeRHS(KSP __pyx_v_ksp, Vec __pyx_v_
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      __PYX_ERR(18, 247, __pyx_L1_error)
+      __PYX_ERR(18, 248, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
@@ -32294,16 +33274,16 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_ComputeRHS(KSP __pyx_v_ksp, 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_ERR(18, 247, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 248, __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_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(18, 248, __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_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(18, 248, __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_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(18, 248, __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;
@@ -32312,7 +33292,7 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_ComputeRHS(KSP __pyx_v_ksp, 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_ERR(18, 247, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(18, 248, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L9_unpacking_done;
@@ -32320,7 +33300,7 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_ComputeRHS(KSP __pyx_v_ksp, Vec __pyx_v_
     __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_ERR(18, 248, __pyx_L1_error)
     __pyx_L9_unpacking_done:;
   }
   __pyx_v_computerhs = __pyx_t_1;
@@ -32330,14 +33310,14 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_ComputeRHS(KSP __pyx_v_ksp, Vec __pyx_v_
   __pyx_v_kargs = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscksp.pxi":248
+  /* "PETSc/petscksp.pxi":249
  *     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_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(18, 249, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(((PyObject *)__pyx_v_Ksp));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Ksp));
@@ -32345,30 +33325,30 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_ComputeRHS(KSP __pyx_v_ksp, Vec __pyx_v_
   __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_t_5 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_5)) __PYX_ERR(18, 249, __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_t_1 = PyNumber_Add(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 249, __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)
+    __PYX_ERR(18, 249, __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_t_5 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_5)) __PYX_ERR(18, 249, __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_t_5 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(18, 249, __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_t_6 = __Pyx_PyObject_Call(__pyx_v_computerhs, __pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(18, 249, __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
+  /* "PETSc/petscksp.pxi":250
  *     (computerhs, args, kargs) = context
  *     computerhs(Ksp, Rhs, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -32378,7 +33358,7 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_ComputeRHS(KSP __pyx_v_ksp, Vec __pyx_v_
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscksp.pxi":237
+  /* "PETSc/petscksp.pxi":238
  * # -----------------------------------------------------------------------------
  * 
  * cdef int KSP_ComputeRHS(             # <<<<<<<<<<<<<<
@@ -32403,12 +33383,12 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_ComputeRHS(KSP __pyx_v_ksp, Vec __pyx_v_
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscksp.pxi":251
+/* "PETSc/petscksp.pxi":252
  *     return 0
  * 
  * cdef int KSP_ComputeOps(             # <<<<<<<<<<<<<<
@@ -32435,59 +33415,59 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_ComputeOps(KSP __pyx_v_ksp, Mat __pyx_v_
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("KSP_ComputeOps", 0);
 
-  /* "PETSc/petscksp.pxi":257
+  /* "PETSc/petscksp.pxi":258
  *     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_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_KSP(__pyx_v_ksp)); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 258, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Ksp = ((struct PyPetscKSPObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscksp.pxi":258
+  /* "PETSc/petscksp.pxi":259
  *     ) 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_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v_A)); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 259, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Amat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscksp.pxi":259
+  /* "PETSc/petscksp.pxi":260
  *     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_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v_B)); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 260, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Bmat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscksp.pxi":260
+  /* "PETSc/petscksp.pxi":261
  *     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_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, 261, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscksp.pxi":261
+  /* "PETSc/petscksp.pxi":262
  *     cdef Mat Bmat = ref_Mat(B)
  *     cdef object context = Ksp.get_attr('__operators__')
  *     if context is None and ctx != NULL: context = <object>ctx             # <<<<<<<<<<<<<<
@@ -32511,7 +33491,7 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_ComputeOps(KSP __pyx_v_ksp, Mat __pyx_v_
     __pyx_t_1 = 0;
   }
 
-  /* "PETSc/petscksp.pxi":262
+  /* "PETSc/petscksp.pxi":263
  *     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             # <<<<<<<<<<<<<<
@@ -32533,12 +33513,12 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_ComputeOps(KSP __pyx_v_ksp, Mat __pyx_v_
     __pyx_L6_bool_binop_done:;
     if (unlikely(!__pyx_t_2)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(18, 262, __pyx_L1_error)
+      __PYX_ERR(18, 263, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscksp.pxi":263
+  /* "PETSc/petscksp.pxi":264
  *     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             # <<<<<<<<<<<<<<
@@ -32547,7 +33527,7 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_ComputeOps(KSP __pyx_v_ksp, Mat __pyx_v_
  */
   if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
     PyObject* sequence = __pyx_v_context;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -32555,9 +33535,9 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_ComputeOps(KSP __pyx_v_ksp, Mat __pyx_v_
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      __PYX_ERR(18, 263, __pyx_L1_error)
+      __PYX_ERR(18, 264, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
@@ -32571,16 +33551,16 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_ComputeOps(KSP __pyx_v_ksp, Mat __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_ERR(18, 263, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 264, __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_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(18, 264, __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_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(18, 264, __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_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(18, 264, __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;
@@ -32589,7 +33569,7 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_ComputeOps(KSP __pyx_v_ksp, Mat __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_ERR(18, 263, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(18, 264, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L9_unpacking_done;
@@ -32597,7 +33577,7 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_ComputeOps(KSP __pyx_v_ksp, Mat __pyx_v_
     __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_ERR(18, 264, __pyx_L1_error)
     __pyx_L9_unpacking_done:;
   }
   __pyx_v_computeops = __pyx_t_1;
@@ -32607,14 +33587,14 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_ComputeOps(KSP __pyx_v_ksp, Mat __pyx_v_
   __pyx_v_kargs = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscksp.pxi":264
+  /* "PETSc/petscksp.pxi":265
  *     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_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(18, 265, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(((PyObject *)__pyx_v_Ksp));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Ksp));
@@ -32625,30 +33605,30 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_ComputeOps(KSP __pyx_v_ksp, Mat __pyx_v_
   __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_t_5 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_5)) __PYX_ERR(18, 265, __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_t_1 = PyNumber_Add(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(18, 265, __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)
+    __PYX_ERR(18, 265, __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_t_5 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_5)) __PYX_ERR(18, 265, __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_t_5 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(18, 265, __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_t_6 = __Pyx_PyObject_Call(__pyx_v_computeops, __pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(18, 265, __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
+  /* "PETSc/petscksp.pxi":266
  *     (computeops, args, kargs) = context
  *     computeops(Ksp, Amat, Bmat, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -32658,7 +33638,7 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_ComputeOps(KSP __pyx_v_ksp, Mat __pyx_v_
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscksp.pxi":251
+  /* "PETSc/petscksp.pxi":252
  *     return 0
  * 
  * cdef int KSP_ComputeOps(             # <<<<<<<<<<<<<<
@@ -32684,12 +33664,12 @@ static int __pyx_f_8petsc4py_5PETSc_KSP_ComputeOps(KSP __pyx_v_ksp, Mat __pyx_v_
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscsnes.pxi":216
+/* "PETSc/petscsnes.pxi":228
  * # -----------------------------------------------------------------------------
  * 
  * cdef inline SNES ref_SNES(PetscSNES snes):             # <<<<<<<<<<<<<<
@@ -32705,14 +33685,14 @@ static CYTHON_INLINE struct PyPetscSNESObject *__pyx_f_8petsc4py_5PETSc_ref_SNES
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("ref_SNES", 0);
 
-  /* "PETSc/petscsnes.pxi":217
+  /* "PETSc/petscsnes.pxi":229
  * 
  * cdef inline SNES ref_SNES(PetscSNES snes):
  *     cdef SNES ob = <SNES> SNES()             # <<<<<<<<<<<<<<
  *     ob.snes = snes
  *     PetscINCREF(ob.obj)
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 229, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -32720,7 +33700,7 @@ static CYTHON_INLINE struct PyPetscSNESObject *__pyx_f_8petsc4py_5PETSc_ref_SNES
   __pyx_v_ob = ((struct PyPetscSNESObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscsnes.pxi":218
+  /* "PETSc/petscsnes.pxi":230
  * cdef inline SNES ref_SNES(PetscSNES snes):
  *     cdef SNES ob = <SNES> SNES()
  *     ob.snes = snes             # <<<<<<<<<<<<<<
@@ -32729,7 +33709,7 @@ static CYTHON_INLINE struct PyPetscSNESObject *__pyx_f_8petsc4py_5PETSc_ref_SNES
  */
   __pyx_v_ob->snes = __pyx_v_snes;
 
-  /* "PETSc/petscsnes.pxi":219
+  /* "PETSc/petscsnes.pxi":231
  *     cdef SNES ob = <SNES> SNES()
  *     ob.snes = snes
  *     PetscINCREF(ob.obj)             # <<<<<<<<<<<<<<
@@ -32738,7 +33718,7 @@ static CYTHON_INLINE struct PyPetscSNESObject *__pyx_f_8petsc4py_5PETSc_ref_SNES
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_ob->__pyx_base.obj);
 
-  /* "PETSc/petscsnes.pxi":220
+  /* "PETSc/petscsnes.pxi":232
  *     ob.snes = snes
  *     PetscINCREF(ob.obj)
  *     return ob             # <<<<<<<<<<<<<<
@@ -32750,7 +33730,7 @@ static CYTHON_INLINE struct PyPetscSNESObject *__pyx_f_8petsc4py_5PETSc_ref_SNES
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "PETSc/petscsnes.pxi":216
+  /* "PETSc/petscsnes.pxi":228
  * # -----------------------------------------------------------------------------
  * 
  * cdef inline SNES ref_SNES(PetscSNES snes):             # <<<<<<<<<<<<<<
@@ -32771,7 +33751,7 @@ static CYTHON_INLINE struct PyPetscSNESObject *__pyx_f_8petsc4py_5PETSc_ref_SNES
   return __pyx_r;
 }
 
-/* "PETSc/petscsnes.pxi":224
+/* "PETSc/petscsnes.pxi":236
  * # -----------------------------------------------------------------------------
  * 
  * cdef int SNES_InitialGuess(             # <<<<<<<<<<<<<<
@@ -32797,47 +33777,47 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_InitialGuess(SNES __pyx_v_snes, Vec __p
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("SNES_InitialGuess", 0);
 
-  /* "PETSc/petscsnes.pxi":229
+  /* "PETSc/petscsnes.pxi":241
  *     void*     ctx,
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef SNES Snes = ref_SNES(snes)             # <<<<<<<<<<<<<<
  *     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_ERR(19, 229, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_SNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 241, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Snes = ((struct PyPetscSNESObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscsnes.pxi":230
+  /* "PETSc/petscsnes.pxi":242
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef SNES Snes = ref_SNES(snes)
  *     cdef Vec  Xvec = ref_Vec(x)             # <<<<<<<<<<<<<<
  *     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_ERR(19, 230, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 242, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Xvec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscsnes.pxi":231
+  /* "PETSc/petscsnes.pxi":243
  *     cdef SNES Snes = ref_SNES(snes)
  *     cdef Vec  Xvec = ref_Vec(x)
  *     cdef object context = Snes.get_attr('__initialguess__')             # <<<<<<<<<<<<<<
  *     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), ((char *)"__initialguess__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 231, __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, 243, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscsnes.pxi":232
+  /* "PETSc/petscsnes.pxi":244
  *     cdef Vec  Xvec = ref_Vec(x)
  *     cdef object context = Snes.get_attr('__initialguess__')
  *     if context is None and ctx != NULL: context = <object>ctx             # <<<<<<<<<<<<<<
@@ -32861,7 +33841,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_InitialGuess(SNES __pyx_v_snes, Vec __p
     __pyx_t_1 = 0;
   }
 
-  /* "PETSc/petscsnes.pxi":233
+  /* "PETSc/petscsnes.pxi":245
  *     cdef object context = Snes.get_attr('__initialguess__')
  *     if context is None and ctx != NULL: context = <object>ctx
  *     assert context is not None and type(context) is tuple # sanity check             # <<<<<<<<<<<<<<
@@ -32883,12 +33863,12 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_InitialGuess(SNES __pyx_v_snes, Vec __p
     __pyx_L6_bool_binop_done:;
     if (unlikely(!__pyx_t_2)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(19, 233, __pyx_L1_error)
+      __PYX_ERR(19, 245, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscsnes.pxi":234
+  /* "PETSc/petscsnes.pxi":246
  *     if context is None and ctx != NULL: context = <object>ctx
  *     assert context is not None and type(context) is tuple # sanity check
  *     (initialguess, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -32897,7 +33877,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_InitialGuess(SNES __pyx_v_snes, Vec __p
  */
   if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
     PyObject* sequence = __pyx_v_context;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -32905,9 +33885,9 @@ 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_ERR(19, 234, __pyx_L1_error)
+      __PYX_ERR(19, 246, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
@@ -32921,16 +33901,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_ERR(19, 234, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 246, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 234, __pyx_L1_error)
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 246, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 234, __pyx_L1_error)
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 246, __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(19, 234, __pyx_L1_error)
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(19, 246, __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;
@@ -32939,7 +33919,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_ERR(19, 234, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(19, 246, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L9_unpacking_done;
@@ -32947,7 +33927,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_ERR(19, 234, __pyx_L1_error)
+    __PYX_ERR(19, 246, __pyx_L1_error)
     __pyx_L9_unpacking_done:;
   }
   __pyx_v_initialguess = __pyx_t_1;
@@ -32957,14 +33937,14 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_InitialGuess(SNES __pyx_v_snes, Vec __p
   __pyx_v_kargs = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscsnes.pxi":235
+  /* "PETSc/petscsnes.pxi":247
  *     assert context is not None and type(context) is tuple # sanity check
  *     (initialguess, args, kargs) = context
  *     initialguess(Snes, Xvec, *args, **kargs)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 235, __pyx_L1_error)
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 247, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(((PyObject *)__pyx_v_Snes));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Snes));
@@ -32972,30 +33952,30 @@ 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_ERR(19, 235, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 247, __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(19, 235, __pyx_L1_error)
+  __pyx_t_1 = PyNumber_Add(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 247, __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(19, 235, __pyx_L1_error)
+    __PYX_ERR(19, 247, __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(19, 235, __pyx_L1_error)
+    __pyx_t_5 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 247, __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(19, 235, __pyx_L1_error)
+    __pyx_t_5 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 247, __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_ERR(19, 235, __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, 247, __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/petscsnes.pxi":236
+  /* "PETSc/petscsnes.pxi":248
  *     (initialguess, args, kargs) = context
  *     initialguess(Snes, Xvec, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -33005,7 +33985,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_InitialGuess(SNES __pyx_v_snes, Vec __p
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscsnes.pxi":224
+  /* "PETSc/petscsnes.pxi":236
  * # -----------------------------------------------------------------------------
  * 
  * cdef int SNES_InitialGuess(             # <<<<<<<<<<<<<<
@@ -33030,12 +34010,12 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_InitialGuess(SNES __pyx_v_snes, Vec __p
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscsnes.pxi":240
+/* "PETSc/petscsnes.pxi":252
  * # -----------------------------------------------------------------------------
  * 
  * cdef int SNES_Function(             # <<<<<<<<<<<<<<
@@ -33062,59 +34042,59 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Function(SNES __pyx_v_snes, Vec __pyx_v
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("SNES_Function", 0);
 
-  /* "PETSc/petscsnes.pxi":246
+  /* "PETSc/petscsnes.pxi":258
  *     void*     ctx,
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef SNES Snes = ref_SNES(snes)             # <<<<<<<<<<<<<<
  *     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_ERR(19, 246, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_SNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 258, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Snes = ((struct PyPetscSNESObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscsnes.pxi":247
+  /* "PETSc/petscsnes.pxi":259
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef SNES Snes = ref_SNES(snes)
  *     cdef Vec  Xvec = ref_Vec(x)             # <<<<<<<<<<<<<<
  *     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_ERR(19, 247, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 259, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Xvec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscsnes.pxi":248
+  /* "PETSc/petscsnes.pxi":260
  *     cdef SNES Snes = ref_SNES(snes)
  *     cdef Vec  Xvec = ref_Vec(x)
  *     cdef Vec  Fvec = ref_Vec(f)             # <<<<<<<<<<<<<<
  *     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_ERR(19, 248, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_f)); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 260, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Fvec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscsnes.pxi":249
+  /* "PETSc/petscsnes.pxi":261
  *     cdef Vec  Xvec = ref_Vec(x)
  *     cdef Vec  Fvec = ref_Vec(f)
  *     cdef object context = Snes.get_attr('__function__')             # <<<<<<<<<<<<<<
  *     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), ((char *)"__function__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 249, __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, 261, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscsnes.pxi":250
+  /* "PETSc/petscsnes.pxi":262
  *     cdef Vec  Fvec = ref_Vec(f)
  *     cdef object context = Snes.get_attr('__function__')
  *     if context is None and ctx != NULL: context = <object>ctx             # <<<<<<<<<<<<<<
@@ -33138,7 +34118,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Function(SNES __pyx_v_snes, Vec __pyx_v
     __pyx_t_1 = 0;
   }
 
-  /* "PETSc/petscsnes.pxi":251
+  /* "PETSc/petscsnes.pxi":263
  *     cdef object context = Snes.get_attr('__function__')
  *     if context is None and ctx != NULL: context = <object>ctx
  *     assert context is not None and type(context) is tuple # sanity check             # <<<<<<<<<<<<<<
@@ -33160,12 +34140,12 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Function(SNES __pyx_v_snes, Vec __pyx_v
     __pyx_L6_bool_binop_done:;
     if (unlikely(!__pyx_t_2)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(19, 251, __pyx_L1_error)
+      __PYX_ERR(19, 263, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscsnes.pxi":252
+  /* "PETSc/petscsnes.pxi":264
  *     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             # <<<<<<<<<<<<<<
@@ -33174,7 +34154,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Function(SNES __pyx_v_snes, Vec __pyx_v
  */
   if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
     PyObject* sequence = __pyx_v_context;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -33182,240 +34162,9 @@ 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_ERR(19, 252, __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(19, 252, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __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_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_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;
-    __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(19, 252, __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(19, 252, __pyx_L1_error)
-    __pyx_L9_unpacking_done:;
-  }
-  __pyx_v_function = __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/petscsnes.pxi":253
- *     assert context is not None and type(context) is tuple # sanity check
- *     (function, args, kargs) = context
- *     function(Snes, Xvec, Fvec, *args, **kargs)             # <<<<<<<<<<<<<<
- *     return 0
- * 
- */
-  __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));
-  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_Snes));
-  __Pyx_INCREF(((PyObject *)__pyx_v_Xvec));
-  __Pyx_GIVEREF(((PyObject *)__pyx_v_Xvec));
-  PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_Xvec));
-  __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_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_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_ERR(19, 253, __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(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_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_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;
-  __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-
-  /* "PETSc/petscsnes.pxi":254
- *     (function, args, kargs) = context
- *     function(Snes, Xvec, Fvec, *args, **kargs)
- *     return 0             # <<<<<<<<<<<<<<
- * 
- * # -----------------------------------------------------------------------------
- */
-  __pyx_r = 0;
-  goto __pyx_L0;
-
-  /* "PETSc/petscsnes.pxi":240
- * # -----------------------------------------------------------------------------
- * 
- * cdef int SNES_Function(             # <<<<<<<<<<<<<<
- *     PetscSNES snes,
- *     PetscVec  x,
- */
-
-  /* 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.SNES_Function", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = PETSC_ERR_PYTHON;
-  __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_Snes);
-  __Pyx_XDECREF((PyObject *)__pyx_v_Xvec);
-  __Pyx_XDECREF((PyObject *)__pyx_v_Fvec);
-  __Pyx_XDECREF(__pyx_v_context);
-  __Pyx_XDECREF(__pyx_v_function);
-  __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":258
- * # -----------------------------------------------------------------------------
- * 
- * cdef int SNES_Update(             # <<<<<<<<<<<<<<
- *     PetscSNES snes,
- *     PetscInt  its,
- */
-
-static int __pyx_f_8petsc4py_5PETSc_SNES_Update(SNES __pyx_v_snes, PetscInt __pyx_v_its) {
-  struct PyPetscSNESObject *__pyx_v_Snes = 0;
-  PyObject *__pyx_v_context = 0;
-  PyObject *__pyx_v_update = 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("SNES_Update", 0);
-
-  /* "PETSc/petscsnes.pxi":262
- *     PetscInt  its,
- *     ) except PETSC_ERR_PYTHON with gil:
- *     cdef SNES Snes = ref_SNES(snes)             # <<<<<<<<<<<<<<
- *     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_ERR(19, 262, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_Snes = ((struct PyPetscSNESObject *)__pyx_t_1);
-  __pyx_t_1 = 0;
-
-  /* "PETSc/petscsnes.pxi":263
- *     ) except PETSC_ERR_PYTHON with gil:
- *     cdef SNES Snes = ref_SNES(snes)
- *     cdef object context = Snes.get_attr('__update__')             # <<<<<<<<<<<<<<
- *     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), ((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;
-
-  /* "PETSc/petscsnes.pxi":264
- *     cdef SNES Snes = ref_SNES(snes)
- *     cdef object context = Snes.get_attr('__update__')
- *     assert context is not None and type(context) is tuple # sanity check             # <<<<<<<<<<<<<<
- *     (update, args, kargs) = context
- *     update(Snes, toInt(its), *args, **kargs)
- */
-  #ifndef CYTHON_WITHOUT_ASSERTIONS
-  if (unlikely(!Py_OptimizeFlag)) {
-    __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_L3_bool_binop_done;
-    }
-    __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_ERR(19, 264, __pyx_L1_error)
     }
-  }
-  #endif
-
-  /* "PETSc/petscsnes.pxi":265
- *     cdef object context = Snes.get_attr('__update__')
- *     assert context is not None and type(context) is tuple # sanity check
- *     (update, args, kargs) = context             # <<<<<<<<<<<<<<
- *     update(Snes, toInt(its), *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(19, 265, __pyx_L1_error)
-    }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
@@ -33429,16 +34178,247 @@ 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_ERR(19, 265, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 264, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 265, __pyx_L1_error)
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 264, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 265, __pyx_L1_error)
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 264, __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(19, 265, __pyx_L1_error)
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(19, 264, __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(19, 264, __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(19, 264, __pyx_L1_error)
+    __pyx_L9_unpacking_done:;
+  }
+  __pyx_v_function = __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/petscsnes.pxi":265
+ *     assert context is not None and type(context) is tuple # sanity check
+ *     (function, args, kargs) = context
+ *     function(Snes, Xvec, Fvec, *args, **kargs)             # <<<<<<<<<<<<<<
+ *     return 0
+ * 
+ */
+  __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 265, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_INCREF(((PyObject *)__pyx_v_Snes));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_Snes));
+  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_Snes));
+  __Pyx_INCREF(((PyObject *)__pyx_v_Xvec));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_Xvec));
+  PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_Xvec));
+  __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 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 265, __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(19, 265, __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(19, 265, __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(19, 265, __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(19, 265, __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_ERR(19, 265, __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/petscsnes.pxi":266
+ *     (function, args, kargs) = context
+ *     function(Snes, Xvec, Fvec, *args, **kargs)
+ *     return 0             # <<<<<<<<<<<<<<
+ * 
+ * # -----------------------------------------------------------------------------
+ */
+  __pyx_r = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/petscsnes.pxi":252
+ * # -----------------------------------------------------------------------------
+ * 
+ * cdef int SNES_Function(             # <<<<<<<<<<<<<<
+ *     PetscSNES snes,
+ *     PetscVec  x,
+ */
+
+  /* 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.SNES_Function", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = PETSC_ERR_PYTHON;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_Snes);
+  __Pyx_XDECREF((PyObject *)__pyx_v_Xvec);
+  __Pyx_XDECREF((PyObject *)__pyx_v_Fvec);
+  __Pyx_XDECREF(__pyx_v_context);
+  __Pyx_XDECREF(__pyx_v_function);
+  __Pyx_XDECREF(__pyx_v_args);
+  __Pyx_XDECREF(__pyx_v_kargs);
+  __Pyx_RefNannyFinishContext();
+  #ifdef WITH_THREAD
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
+  #endif
+  return __pyx_r;
+}
+
+/* "PETSc/petscsnes.pxi":270
+ * # -----------------------------------------------------------------------------
+ * 
+ * cdef int SNES_Update(             # <<<<<<<<<<<<<<
+ *     PetscSNES snes,
+ *     PetscInt  its,
+ */
+
+static int __pyx_f_8petsc4py_5PETSc_SNES_Update(SNES __pyx_v_snes, PetscInt __pyx_v_its) {
+  struct PyPetscSNESObject *__pyx_v_Snes = 0;
+  PyObject *__pyx_v_context = 0;
+  PyObject *__pyx_v_update = 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 = __Pyx_PyGILState_Ensure();
+  #endif
+  __Pyx_RefNannySetupContext("SNES_Update", 0);
+
+  /* "PETSc/petscsnes.pxi":274
+ *     PetscInt  its,
+ *     ) except PETSC_ERR_PYTHON with gil:
+ *     cdef SNES Snes = ref_SNES(snes)             # <<<<<<<<<<<<<<
+ *     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_ERR(19, 274, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_Snes = ((struct PyPetscSNESObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscsnes.pxi":275
+ *     ) except PETSC_ERR_PYTHON with gil:
+ *     cdef SNES Snes = ref_SNES(snes)
+ *     cdef object context = Snes.get_attr('__update__')             # <<<<<<<<<<<<<<
+ *     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), ((char *)"__update__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 275, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_context = __pyx_t_1;
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscsnes.pxi":276
+ *     cdef SNES Snes = ref_SNES(snes)
+ *     cdef object context = Snes.get_attr('__update__')
+ *     assert context is not None and type(context) is tuple # sanity check             # <<<<<<<<<<<<<<
+ *     (update, args, kargs) = context
+ *     update(Snes, toInt(its), *args, **kargs)
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!Py_OptimizeFlag)) {
+    __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_L3_bool_binop_done;
+    }
+    __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_ERR(19, 276, __pyx_L1_error)
+    }
+  }
+  #endif
+
+  /* "PETSc/petscsnes.pxi":277
+ *     cdef object context = Snes.get_attr('__update__')
+ *     assert context is not None and type(context) is tuple # sanity check
+ *     (update, args, kargs) = context             # <<<<<<<<<<<<<<
+ *     update(Snes, toInt(its), *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_PYPY
+    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(19, 277, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    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(19, 277, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 277, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 277, __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(19, 277, __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;
@@ -33447,7 +34427,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_ERR(19, 265, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(19, 277, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L6_unpacking_done;
@@ -33455,7 +34435,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_ERR(19, 265, __pyx_L1_error)
+    __PYX_ERR(19, 277, __pyx_L1_error)
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_update = __pyx_t_1;
@@ -33465,16 +34445,16 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Update(SNES __pyx_v_snes, PetscInt __py
   __pyx_v_kargs = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscsnes.pxi":266
+  /* "PETSc/petscsnes.pxi":278
  *     assert context is not None and type(context) is tuple # sanity check
  *     (update, args, kargs) = context
  *     update(Snes, toInt(its), *args, **kargs)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_its); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 266, __pyx_L1_error)
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_its); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 278, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 266, __pyx_L1_error)
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 278, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(((PyObject *)__pyx_v_Snes));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Snes));
@@ -33482,30 +34462,30 @@ 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_ERR(19, 266, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 278, __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_ERR(19, 266, __pyx_L1_error)
+  __pyx_t_1 = PyNumber_Add(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 278, __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_ERR(19, 266, __pyx_L1_error)
+    __PYX_ERR(19, 278, __pyx_L1_error)
   }
   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_t_6 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 278, __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_ERR(19, 266, __pyx_L1_error)
+    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 278, __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_ERR(19, 266, __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, 278, __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/petscsnes.pxi":267
+  /* "PETSc/petscsnes.pxi":279
  *     (update, args, kargs) = context
  *     update(Snes, toInt(its), *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -33515,7 +34495,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Update(SNES __pyx_v_snes, PetscInt __py
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscsnes.pxi":258
+  /* "PETSc/petscsnes.pxi":270
  * # -----------------------------------------------------------------------------
  * 
  * cdef int SNES_Update(             # <<<<<<<<<<<<<<
@@ -33539,12 +34519,12 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Update(SNES __pyx_v_snes, PetscInt __py
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscsnes.pxi":271
+/* "PETSc/petscsnes.pxi":283
  * # -----------------------------------------------------------------------------
  * 
  * cdef int SNES_Jacobian(             # <<<<<<<<<<<<<<
@@ -33572,71 +34552,71 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Jacobian(SNES __pyx_v_snes, Vec __pyx_v
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("SNES_Jacobian", 0);
 
-  /* "PETSc/petscsnes.pxi":278
+  /* "PETSc/petscsnes.pxi":290
  *     void*     ctx,
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef SNES Snes = ref_SNES(snes)             # <<<<<<<<<<<<<<
  *     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_ERR(19, 278, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_SNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 290, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Snes = ((struct PyPetscSNESObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscsnes.pxi":279
+  /* "PETSc/petscsnes.pxi":291
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef SNES Snes = ref_SNES(snes)
  *     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_ERR(19, 279, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 291, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Xvec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscsnes.pxi":280
+  /* "PETSc/petscsnes.pxi":292
  *     cdef SNES Snes = ref_SNES(snes)
  *     cdef Vec  Xvec = ref_Vec(x)
  *     cdef Mat  Jmat = ref_Mat(J)             # <<<<<<<<<<<<<<
  *     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_ERR(19, 280, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v_J)); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 292, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Jmat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscsnes.pxi":281
+  /* "PETSc/petscsnes.pxi":293
  *     cdef Vec  Xvec = ref_Vec(x)
  *     cdef Mat  Jmat = ref_Mat(J)
  *     cdef Mat  Pmat = ref_Mat(P)             # <<<<<<<<<<<<<<
  *     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_ERR(19, 281, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v_P)); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 293, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Pmat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscsnes.pxi":282
+  /* "PETSc/petscsnes.pxi":294
  *     cdef Mat  Jmat = ref_Mat(J)
  *     cdef Mat  Pmat = ref_Mat(P)
  *     cdef object context = Snes.get_attr('__jacobian__')             # <<<<<<<<<<<<<<
  *     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), ((char *)"__jacobian__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 282, __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, 294, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscsnes.pxi":283
+  /* "PETSc/petscsnes.pxi":295
  *     cdef Mat  Pmat = ref_Mat(P)
  *     cdef object context = Snes.get_attr('__jacobian__')
  *     if context is None and ctx != NULL: context = <object>ctx             # <<<<<<<<<<<<<<
@@ -33660,7 +34640,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Jacobian(SNES __pyx_v_snes, Vec __pyx_v
     __pyx_t_1 = 0;
   }
 
-  /* "PETSc/petscsnes.pxi":284
+  /* "PETSc/petscsnes.pxi":296
  *     cdef object context = Snes.get_attr('__jacobian__')
  *     if context is None and ctx != NULL: context = <object>ctx
  *     assert context is not None and type(context) is tuple # sanity check             # <<<<<<<<<<<<<<
@@ -33682,12 +34662,12 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Jacobian(SNES __pyx_v_snes, Vec __pyx_v
     __pyx_L6_bool_binop_done:;
     if (unlikely(!__pyx_t_2)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(19, 284, __pyx_L1_error)
+      __PYX_ERR(19, 296, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscsnes.pxi":285
+  /* "PETSc/petscsnes.pxi":297
  *     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             # <<<<<<<<<<<<<<
@@ -33696,7 +34676,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Jacobian(SNES __pyx_v_snes, Vec __pyx_v
  */
   if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
     PyObject* sequence = __pyx_v_context;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -33704,9 +34684,9 @@ 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_ERR(19, 285, __pyx_L1_error)
+      __PYX_ERR(19, 297, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
@@ -33720,16 +34700,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_ERR(19, 285, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 297, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 285, __pyx_L1_error)
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 297, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 285, __pyx_L1_error)
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 297, __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(19, 285, __pyx_L1_error)
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(19, 297, __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;
@@ -33738,7 +34718,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_ERR(19, 285, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(19, 297, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L9_unpacking_done;
@@ -33746,7 +34726,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_ERR(19, 285, __pyx_L1_error)
+    __PYX_ERR(19, 297, __pyx_L1_error)
     __pyx_L9_unpacking_done:;
   }
   __pyx_v_jacobian = __pyx_t_1;
@@ -33756,14 +34736,14 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Jacobian(SNES __pyx_v_snes, Vec __pyx_v
   __pyx_v_kargs = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscsnes.pxi":286
+  /* "PETSc/petscsnes.pxi":298
  *     assert context is not None and type(context) is tuple # sanity check
  *     (jacobian, args, kargs) = context
  *     jacobian(Snes, Xvec, Jmat, Pmat, *args, **kargs)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 286, __pyx_L1_error)
+  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 298, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(((PyObject *)__pyx_v_Snes));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Snes));
@@ -33777,30 +34757,30 @@ 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_ERR(19, 286, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 298, __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(19, 286, __pyx_L1_error)
+  __pyx_t_1 = PyNumber_Add(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 298, __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(19, 286, __pyx_L1_error)
+    __PYX_ERR(19, 298, __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(19, 286, __pyx_L1_error)
+    __pyx_t_5 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 298, __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(19, 286, __pyx_L1_error)
+    __pyx_t_5 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 298, __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_ERR(19, 286, __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, 298, __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/petscsnes.pxi":287
+  /* "PETSc/petscsnes.pxi":299
  *     (jacobian, args, kargs) = context
  *     jacobian(Snes, Xvec, Jmat, Pmat, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -33810,7 +34790,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Jacobian(SNES __pyx_v_snes, Vec __pyx_v
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscsnes.pxi":271
+  /* "PETSc/petscsnes.pxi":283
  * # -----------------------------------------------------------------------------
  * 
  * cdef int SNES_Jacobian(             # <<<<<<<<<<<<<<
@@ -33837,12 +34817,12 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Jacobian(SNES __pyx_v_snes, Vec __pyx_v
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscsnes.pxi":291
+/* "PETSc/petscsnes.pxi":303
  * # -----------------------------------------------------------------------------
  * 
  * cdef int SNES_Objective(             # <<<<<<<<<<<<<<
@@ -33870,47 +34850,47 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Objective(SNES __pyx_v_snes, Vec __pyx_
   PyObject *(*__pyx_t_8)(PyObject *);
   PetscReal __pyx_t_9;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("SNES_Objective", 0);
 
-  /* "PETSc/petscsnes.pxi":297
+  /* "PETSc/petscsnes.pxi":309
  *     void*      ctx,
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef SNES Snes = ref_SNES(snes)             # <<<<<<<<<<<<<<
  *     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_ERR(19, 297, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_SNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 309, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Snes = ((struct PyPetscSNESObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscsnes.pxi":298
+  /* "PETSc/petscsnes.pxi":310
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef SNES Snes = ref_SNES(snes)
  *     cdef Vec  Xvec = ref_Vec(x)             # <<<<<<<<<<<<<<
  *     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_ERR(19, 298, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 310, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Xvec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscsnes.pxi":299
+  /* "PETSc/petscsnes.pxi":311
  *     cdef SNES Snes = ref_SNES(snes)
  *     cdef Vec  Xvec = ref_Vec(x)
  *     cdef object context = Snes.get_attr('__objective__')             # <<<<<<<<<<<<<<
  *     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), ((char *)"__objective__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 299, __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, 311, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscsnes.pxi":300
+  /* "PETSc/petscsnes.pxi":312
  *     cdef Vec  Xvec = ref_Vec(x)
  *     cdef object context = Snes.get_attr('__objective__')
  *     if context is None and ctx != NULL: context = <object>ctx             # <<<<<<<<<<<<<<
@@ -33934,7 +34914,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Objective(SNES __pyx_v_snes, Vec __pyx_
     __pyx_t_1 = 0;
   }
 
-  /* "PETSc/petscsnes.pxi":301
+  /* "PETSc/petscsnes.pxi":313
  *     cdef object context = Snes.get_attr('__objective__')
  *     if context is None and ctx != NULL: context = <object>ctx
  *     assert context is not None and type(context) is tuple # sanity check             # <<<<<<<<<<<<<<
@@ -33956,12 +34936,12 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Objective(SNES __pyx_v_snes, Vec __pyx_
     __pyx_L6_bool_binop_done:;
     if (unlikely(!__pyx_t_2)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(19, 301, __pyx_L1_error)
+      __PYX_ERR(19, 313, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscsnes.pxi":302
+  /* "PETSc/petscsnes.pxi":314
  *     if context is None and ctx != NULL: context = <object>ctx
  *     assert context is not None and type(context) is tuple # sanity check
  *     (objective, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -33970,7 +34950,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Objective(SNES __pyx_v_snes, Vec __pyx_
  */
   if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
     PyObject* sequence = __pyx_v_context;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -33978,9 +34958,9 @@ 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_ERR(19, 302, __pyx_L1_error)
+      __PYX_ERR(19, 314, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
@@ -33994,16 +34974,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_ERR(19, 302, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 314, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 302, __pyx_L1_error)
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 314, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 302, __pyx_L1_error)
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 314, __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(19, 302, __pyx_L1_error)
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(19, 314, __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;
@@ -34012,7 +34992,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_ERR(19, 302, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(19, 314, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L9_unpacking_done;
@@ -34020,7 +35000,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_ERR(19, 302, __pyx_L1_error)
+    __PYX_ERR(19, 314, __pyx_L1_error)
     __pyx_L9_unpacking_done:;
   }
   __pyx_v_objective = __pyx_t_1;
@@ -34030,14 +35010,14 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Objective(SNES __pyx_v_snes, Vec __pyx_
   __pyx_v_kargs = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscsnes.pxi":303
+  /* "PETSc/petscsnes.pxi":315
  *     assert context is not None and type(context) is tuple # sanity check
  *     (objective, args, kargs) = context
  *     obj = objective(Snes, Xvec, *args, **kargs)             # <<<<<<<<<<<<<<
  *     o[0] = asReal(obj)
  *     return 0
  */
-  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 303, __pyx_L1_error)
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 315, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(((PyObject *)__pyx_v_Snes));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Snes));
@@ -34045,41 +35025,41 @@ 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_ERR(19, 303, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 315, __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(19, 303, __pyx_L1_error)
+  __pyx_t_1 = PyNumber_Add(__pyx_t_6, __pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 315, __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(19, 303, __pyx_L1_error)
+    __PYX_ERR(19, 315, __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(19, 303, __pyx_L1_error)
+    __pyx_t_5 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 315, __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(19, 303, __pyx_L1_error)
+    __pyx_t_5 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 315, __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_ERR(19, 303, __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, 315, __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_v_obj = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscsnes.pxi":304
+  /* "PETSc/petscsnes.pxi":316
  *     (objective, args, kargs) = context
  *     obj = objective(Snes, Xvec, *args, **kargs)
  *     o[0] = asReal(obj)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-  __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_t_9 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_obj); if (unlikely(__pyx_t_9 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(19, 316, __pyx_L1_error)
   (__pyx_v_o[0]) = __pyx_t_9;
 
-  /* "PETSc/petscsnes.pxi":305
+  /* "PETSc/petscsnes.pxi":317
  *     obj = objective(Snes, Xvec, *args, **kargs)
  *     o[0] = asReal(obj)
  *     return 0             # <<<<<<<<<<<<<<
@@ -34089,7 +35069,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Objective(SNES __pyx_v_snes, Vec __pyx_
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscsnes.pxi":291
+  /* "PETSc/petscsnes.pxi":303
  * # -----------------------------------------------------------------------------
  * 
  * cdef int SNES_Objective(             # <<<<<<<<<<<<<<
@@ -34115,30 +35095,27 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Objective(SNES __pyx_v_snes, Vec __pyx_
   __Pyx_XDECREF(__pyx_v_obj);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscsnes.pxi":309
+/* "PETSc/petscsnes.pxi":321
  * # -----------------------------------------------------------------------------
  * 
- * cdef int SNES_Converged(             # <<<<<<<<<<<<<<
- *     PetscSNES  snes,
- *     PetscInt   iters,
+ * cdef int SNES_NGS(             # <<<<<<<<<<<<<<
+ *     PetscSNES snes,
+ *     PetscVec  x,
  */
 
-static int __pyx_f_8petsc4py_5PETSc_SNES_Converged(SNES __pyx_v_snes, PetscInt __pyx_v_iters, PetscReal __pyx_v_xnorm, PetscReal __pyx_v_gnorm, PetscReal __pyx_v_fnorm, SNESConvergedReason *__pyx_v_r, void *__pyx_v_ctx) {
+static int __pyx_f_8petsc4py_5PETSc_SNES_NGS(SNES __pyx_v_snes, Vec __pyx_v_x, Vec __pyx_v_b, void *__pyx_v_ctx) {
   struct PyPetscSNESObject *__pyx_v_Snes = 0;
-  PyObject *__pyx_v_it = 0;
-  PyObject *__pyx_v_xn = 0;
-  PyObject *__pyx_v_gn = 0;
-  PyObject *__pyx_v_fn = 0;
+  struct PyPetscVecObject *__pyx_v_Xvec = 0;
+  struct PyPetscVecObject *__pyx_v_Bvec = 0;
   PyObject *__pyx_v_context = 0;
-  PyObject *__pyx_v_converged = NULL;
+  PyObject *__pyx_v_ngs = NULL;
   PyObject *__pyx_v_args = NULL;
   PyObject *__pyx_v_kargs = NULL;
-  PyObject *__pyx_v_reason = NULL;
   int __pyx_r;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
@@ -34149,90 +35126,65 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Converged(SNES __pyx_v_snes, PetscInt _
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
-  SNESConvergedReason __pyx_t_9;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
-  __Pyx_RefNannySetupContext("SNES_Converged", 0);
+  __Pyx_RefNannySetupContext("SNES_NGS", 0);
 
-  /* "PETSc/petscsnes.pxi":318
- *     void*      ctx,
+  /* "PETSc/petscsnes.pxi":327
+ *     void*     ctx,
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef SNES Snes = ref_SNES(snes)             # <<<<<<<<<<<<<<
- *     cdef object it = toInt(iters)
- *     cdef object xn = toReal(xnorm)
+ *     cdef Vec  Xvec = ref_Vec(x)
+ *     cdef Vec  Bvec = ref_Vec(b)
  */
-  __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_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_SNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 327, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Snes = ((struct PyPetscSNESObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscsnes.pxi":319
+  /* "PETSc/petscsnes.pxi":328
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef SNES Snes = ref_SNES(snes)
- *     cdef object it = toInt(iters)             # <<<<<<<<<<<<<<
- *     cdef object xn = toReal(xnorm)
- *     cdef object gn = toReal(gnorm)
+ *     cdef Vec  Xvec = ref_Vec(x)             # <<<<<<<<<<<<<<
+ *     cdef Vec  Bvec = ref_Vec(b)
+ *     cdef object context = Snes.get_attr('__ngs__')
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_iters); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 319, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 328, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_it = __pyx_t_1;
+  __pyx_v_Xvec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscsnes.pxi":320
+  /* "PETSc/petscsnes.pxi":329
  *     cdef SNES Snes = ref_SNES(snes)
- *     cdef object it = toInt(iters)
- *     cdef object xn = toReal(xnorm)             # <<<<<<<<<<<<<<
- *     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_ERR(19, 320, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_xn = __pyx_t_1;
-  __pyx_t_1 = 0;
-
-  /* "PETSc/petscsnes.pxi":321
- *     cdef object it = toInt(iters)
- *     cdef object xn = toReal(xnorm)
- *     cdef object gn = toReal(gnorm)             # <<<<<<<<<<<<<<
- *     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_ERR(19, 321, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_gn = __pyx_t_1;
-  __pyx_t_1 = 0;
-
-  /* "PETSc/petscsnes.pxi":322
- *     cdef object xn = toReal(xnorm)
- *     cdef object gn = toReal(gnorm)
- *     cdef object fn = toReal(fnorm)             # <<<<<<<<<<<<<<
- *     cdef object context = Snes.get_attr('__converged__')
+ *     cdef Vec  Xvec = ref_Vec(x)
+ *     cdef Vec  Bvec = ref_Vec(b)             # <<<<<<<<<<<<<<
+ *     cdef object context = Snes.get_attr('__ngs__')
  *     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_ERR(19, 322, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_b)); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 329, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_v_fn = __pyx_t_1;
+  __pyx_v_Bvec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscsnes.pxi":323
- *     cdef object gn = toReal(gnorm)
- *     cdef object fn = toReal(fnorm)
- *     cdef object context = Snes.get_attr('__converged__')             # <<<<<<<<<<<<<<
+  /* "PETSc/petscsnes.pxi":330
+ *     cdef Vec  Xvec = ref_Vec(x)
+ *     cdef Vec  Bvec = ref_Vec(b)
+ *     cdef object context = Snes.get_attr('__ngs__')             # <<<<<<<<<<<<<<
  *     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), ((char *)"__converged__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 323, __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 *)"__ngs__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 330, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscsnes.pxi":324
- *     cdef object fn = toReal(fnorm)
- *     cdef object context = Snes.get_attr('__converged__')
+  /* "PETSc/petscsnes.pxi":331
+ *     cdef Vec  Bvec = ref_Vec(b)
+ *     cdef object context = Snes.get_attr('__ngs__')
  *     if context is None and ctx != NULL: context = <object>ctx             # <<<<<<<<<<<<<<
  *     assert context is not None and type(context) is tuple # sanity check
- *     (converged, args, kargs) = context
+ *     (ngs, args, kargs) = context
  */
   __pyx_t_3 = (__pyx_v_context == Py_None);
   __pyx_t_4 = (__pyx_t_3 != 0);
@@ -34251,12 +35203,12 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Converged(SNES __pyx_v_snes, PetscInt _
     __pyx_t_1 = 0;
   }
 
-  /* "PETSc/petscsnes.pxi":325
- *     cdef object context = Snes.get_attr('__converged__')
+  /* "PETSc/petscsnes.pxi":332
+ *     cdef object context = Snes.get_attr('__ngs__')
  *     if context is None and ctx != NULL: context = <object>ctx
  *     assert context is not None and type(context) is tuple # sanity check             # <<<<<<<<<<<<<<
- *     (converged, args, kargs) = context
- *     reason = converged(Snes, it, (xn, gn, fn), *args, **kargs)
+ *     (ngs, args, kargs) = context
+ *     ngs(Snes, Xvec, Bvec, *args, **kargs)
  */
   #ifndef CYTHON_WITHOUT_ASSERTIONS
   if (unlikely(!Py_OptimizeFlag)) {
@@ -34273,12 +35225,321 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Converged(SNES __pyx_v_snes, PetscInt _
     __pyx_L6_bool_binop_done:;
     if (unlikely(!__pyx_t_2)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(19, 325, __pyx_L1_error)
+      __PYX_ERR(19, 332, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscsnes.pxi":326
+  /* "PETSc/petscsnes.pxi":333
+ *     if context is None and ctx != NULL: context = <object>ctx
+ *     assert context is not None and type(context) is tuple # sanity check
+ *     (ngs, args, kargs) = context             # <<<<<<<<<<<<<<
+ *     ngs(Snes, Xvec, Bvec, *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_PYPY
+    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(19, 333, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    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(19, 333, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 333, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 333, __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(19, 333, __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(19, 333, __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(19, 333, __pyx_L1_error)
+    __pyx_L9_unpacking_done:;
+  }
+  __pyx_v_ngs = __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/petscsnes.pxi":334
+ *     assert context is not None and type(context) is tuple # sanity check
+ *     (ngs, args, kargs) = context
+ *     ngs(Snes, Xvec, Bvec, *args, **kargs)             # <<<<<<<<<<<<<<
+ *     return 0
+ * 
+ */
+  __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 334, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_INCREF(((PyObject *)__pyx_v_Snes));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_Snes));
+  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_Snes));
+  __Pyx_INCREF(((PyObject *)__pyx_v_Xvec));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_Xvec));
+  PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_Xvec));
+  __Pyx_INCREF(((PyObject *)__pyx_v_Bvec));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_Bvec));
+  PyTuple_SET_ITEM(__pyx_t_6, 2, ((PyObject *)__pyx_v_Bvec));
+  __pyx_t_5 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 334, __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(19, 334, __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(19, 334, __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(19, 334, __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(19, 334, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+  }
+  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_ngs, __pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 334, __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/petscsnes.pxi":335
+ *     (ngs, args, kargs) = context
+ *     ngs(Snes, Xvec, Bvec, *args, **kargs)
+ *     return 0             # <<<<<<<<<<<<<<
+ * 
+ * # -----------------------------------------------------------------------------
+ */
+  __pyx_r = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/petscsnes.pxi":321
+ * # -----------------------------------------------------------------------------
+ * 
+ * cdef int SNES_NGS(             # <<<<<<<<<<<<<<
+ *     PetscSNES snes,
+ *     PetscVec  x,
+ */
+
+  /* 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.SNES_NGS", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = PETSC_ERR_PYTHON;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_Snes);
+  __Pyx_XDECREF((PyObject *)__pyx_v_Xvec);
+  __Pyx_XDECREF((PyObject *)__pyx_v_Bvec);
+  __Pyx_XDECREF(__pyx_v_context);
+  __Pyx_XDECREF(__pyx_v_ngs);
+  __Pyx_XDECREF(__pyx_v_args);
+  __Pyx_XDECREF(__pyx_v_kargs);
+  __Pyx_RefNannyFinishContext();
+  #ifdef WITH_THREAD
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
+  #endif
+  return __pyx_r;
+}
+
+/* "PETSc/petscsnes.pxi":339
+ * # -----------------------------------------------------------------------------
+ * 
+ * cdef int SNES_Converged(             # <<<<<<<<<<<<<<
+ *     PetscSNES  snes,
+ *     PetscInt   iters,
+ */
+
+static int __pyx_f_8petsc4py_5PETSc_SNES_Converged(SNES __pyx_v_snes, PetscInt __pyx_v_iters, PetscReal __pyx_v_xnorm, PetscReal __pyx_v_gnorm, PetscReal __pyx_v_fnorm, SNESConvergedReason *__pyx_v_r, void *__pyx_v_ctx) {
+  struct PyPetscSNESObject *__pyx_v_Snes = 0;
+  PyObject *__pyx_v_it = 0;
+  PyObject *__pyx_v_xn = 0;
+  PyObject *__pyx_v_gn = 0;
+  PyObject *__pyx_v_fn = 0;
+  PyObject *__pyx_v_context = 0;
+  PyObject *__pyx_v_converged = NULL;
+  PyObject *__pyx_v_args = NULL;
+  PyObject *__pyx_v_kargs = NULL;
+  PyObject *__pyx_v_reason = 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 *);
+  SNESConvergedReason __pyx_t_9;
+  #ifdef WITH_THREAD
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+  #endif
+  __Pyx_RefNannySetupContext("SNES_Converged", 0);
+
+  /* "PETSc/petscsnes.pxi":348
+ *     void*      ctx,
+ *     ) except PETSC_ERR_PYTHON with gil:
+ *     cdef SNES Snes = ref_SNES(snes)             # <<<<<<<<<<<<<<
+ *     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_ERR(19, 348, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_Snes = ((struct PyPetscSNESObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscsnes.pxi":349
+ *     ) except PETSC_ERR_PYTHON with gil:
+ *     cdef SNES Snes = ref_SNES(snes)
+ *     cdef object it = toInt(iters)             # <<<<<<<<<<<<<<
+ *     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_ERR(19, 349, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_it = __pyx_t_1;
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscsnes.pxi":350
+ *     cdef SNES Snes = ref_SNES(snes)
+ *     cdef object it = toInt(iters)
+ *     cdef object xn = toReal(xnorm)             # <<<<<<<<<<<<<<
+ *     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_ERR(19, 350, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_xn = __pyx_t_1;
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscsnes.pxi":351
+ *     cdef object it = toInt(iters)
+ *     cdef object xn = toReal(xnorm)
+ *     cdef object gn = toReal(gnorm)             # <<<<<<<<<<<<<<
+ *     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_ERR(19, 351, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_gn = __pyx_t_1;
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscsnes.pxi":352
+ *     cdef object xn = toReal(xnorm)
+ *     cdef object gn = toReal(gnorm)
+ *     cdef object fn = toReal(fnorm)             # <<<<<<<<<<<<<<
+ *     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_ERR(19, 352, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_fn = __pyx_t_1;
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscsnes.pxi":353
+ *     cdef object gn = toReal(gnorm)
+ *     cdef object fn = toReal(fnorm)
+ *     cdef object context = Snes.get_attr('__converged__')             # <<<<<<<<<<<<<<
+ *     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), ((char *)"__converged__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 353, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_context = __pyx_t_1;
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscsnes.pxi":354
+ *     cdef object fn = toReal(fnorm)
+ *     cdef object context = Snes.get_attr('__converged__')
+ *     if context is None and ctx != NULL: context = <object>ctx             # <<<<<<<<<<<<<<
+ *     assert context is not None and type(context) is tuple # sanity check
+ *     (converged, 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/petscsnes.pxi":355
+ *     cdef object context = Snes.get_attr('__converged__')
+ *     if context is None and ctx != NULL: context = <object>ctx
+ *     assert context is not None and type(context) is tuple # sanity check             # <<<<<<<<<<<<<<
+ *     (converged, args, kargs) = context
+ *     reason = converged(Snes, it, (xn, gn, fn), *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(19, 355, __pyx_L1_error)
+    }
+  }
+  #endif
+
+  /* "PETSc/petscsnes.pxi":356
  *     if context is None and ctx != NULL: context = <object>ctx
  *     assert context is not None and type(context) is tuple # sanity check
  *     (converged, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -34287,7 +35548,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Converged(SNES __pyx_v_snes, PetscInt _
  */
   if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
     PyObject* sequence = __pyx_v_context;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -34295,9 +35556,9 @@ 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_ERR(19, 326, __pyx_L1_error)
+      __PYX_ERR(19, 356, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
@@ -34311,16 +35572,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_ERR(19, 326, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 356, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 326, __pyx_L1_error)
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 356, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 326, __pyx_L1_error)
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 356, __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(19, 326, __pyx_L1_error)
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(19, 356, __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;
@@ -34329,7 +35590,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_ERR(19, 326, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(19, 356, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L9_unpacking_done;
@@ -34337,7 +35598,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_ERR(19, 326, __pyx_L1_error)
+    __PYX_ERR(19, 356, __pyx_L1_error)
     __pyx_L9_unpacking_done:;
   }
   __pyx_v_converged = __pyx_t_1;
@@ -34347,14 +35608,14 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Converged(SNES __pyx_v_snes, PetscInt _
   __pyx_v_kargs = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscsnes.pxi":327
+  /* "PETSc/petscsnes.pxi":357
  *     assert context is not None and type(context) is tuple # sanity check
  *     (converged, args, kargs) = context
  *     reason = converged(Snes, it, (xn, gn, fn), *args, **kargs)             # <<<<<<<<<<<<<<
  *     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_ERR(19, 327, __pyx_L1_error)
+  __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 357, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(__pyx_v_xn);
   __Pyx_GIVEREF(__pyx_v_xn);
@@ -34365,7 +35626,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_ERR(19, 327, __pyx_L1_error)
+  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 357, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(((PyObject *)__pyx_v_Snes));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Snes));
@@ -34376,31 +35637,31 @@ 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_ERR(19, 327, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 357, __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_ERR(19, 327, __pyx_L1_error)
+  __pyx_t_1 = PyNumber_Add(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 357, __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_ERR(19, 327, __pyx_L1_error)
+    __PYX_ERR(19, 357, __pyx_L1_error)
   }
   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_t_6 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 357, __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_ERR(19, 327, __pyx_L1_error)
+    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 357, __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_ERR(19, 327, __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, 357, __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_v_reason = __pyx_t_5;
   __pyx_t_5 = 0;
 
-  /* "PETSc/petscsnes.pxi":328
+  /* "PETSc/petscsnes.pxi":358
  *     (converged, args, kargs) = context
  *     reason = converged(Snes, it, (xn, gn, fn), *args, **kargs)
  *     if   reason is None:  r[0] = SNES_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
@@ -34414,7 +35675,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Converged(SNES __pyx_v_snes, PetscInt _
     goto __pyx_L10;
   }
 
-  /* "PETSc/petscsnes.pxi":329
+  /* "PETSc/petscsnes.pxi":359
  *     reason = converged(Snes, it, (xn, gn, fn), *args, **kargs)
  *     if   reason is None:  r[0] = SNES_CONVERGED_ITERATING
  *     elif reason is False: r[0] = SNES_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
@@ -34428,7 +35689,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Converged(SNES __pyx_v_snes, PetscInt _
     goto __pyx_L10;
   }
 
-  /* "PETSc/petscsnes.pxi":330
+  /* "PETSc/petscsnes.pxi":360
  *     if   reason is None:  r[0] = SNES_CONVERGED_ITERATING
  *     elif reason is False: r[0] = SNES_CONVERGED_ITERATING
  *     elif reason is True:  r[0] = SNES_CONVERGED_ITS # XXX ?             # <<<<<<<<<<<<<<
@@ -34442,7 +35703,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Converged(SNES __pyx_v_snes, PetscInt _
     goto __pyx_L10;
   }
 
-  /* "PETSc/petscsnes.pxi":331
+  /* "PETSc/petscsnes.pxi":361
  *     elif reason is False: r[0] = SNES_CONVERGED_ITERATING
  *     elif reason is True:  r[0] = SNES_CONVERGED_ITS # XXX ?
  *     else:                 r[0] = reason             # <<<<<<<<<<<<<<
@@ -34450,12 +35711,12 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Converged(SNES __pyx_v_snes, PetscInt _
  * 
  */
   /*else*/ {
-    __pyx_t_9 = ((SNESConvergedReason)__Pyx_PyInt_As_SNESConvergedReason(__pyx_v_reason)); if (unlikely(PyErr_Occurred())) __PYX_ERR(19, 331, __pyx_L1_error)
+    __pyx_t_9 = ((SNESConvergedReason)__Pyx_PyInt_As_SNESConvergedReason(__pyx_v_reason)); if (unlikely(PyErr_Occurred())) __PYX_ERR(19, 361, __pyx_L1_error)
     (__pyx_v_r[0]) = __pyx_t_9;
   }
   __pyx_L10:;
 
-  /* "PETSc/petscsnes.pxi":332
+  /* "PETSc/petscsnes.pxi":362
  *     elif reason is True:  r[0] = SNES_CONVERGED_ITS # XXX ?
  *     else:                 r[0] = reason
  *     return 0             # <<<<<<<<<<<<<<
@@ -34465,7 +35726,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Converged(SNES __pyx_v_snes, PetscInt _
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscsnes.pxi":309
+  /* "PETSc/petscsnes.pxi":339
  * # -----------------------------------------------------------------------------
  * 
  * cdef int SNES_Converged(             # <<<<<<<<<<<<<<
@@ -34494,12 +35755,12 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Converged(SNES __pyx_v_snes, PetscInt _
   __Pyx_XDECREF(__pyx_v_reason);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscsnes.pxi":336
+/* "PETSc/petscsnes.pxi":366
  * # -----------------------------------------------------------------------------
  * 
  * cdef int SNES_Monitor(             # <<<<<<<<<<<<<<
@@ -34529,35 +35790,35 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Monitor(SNES __pyx_v_snes, PetscInt __p
   PyObject *__pyx_t_10 = NULL;
   PyObject *(*__pyx_t_11)(PyObject *);
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("SNES_Monitor", 0);
 
-  /* "PETSc/petscsnes.pxi":342
+  /* "PETSc/petscsnes.pxi":372
  *     void*      ctx,
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef SNES Snes = ref_SNES(snes)             # <<<<<<<<<<<<<<
  *     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_ERR(19, 342, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_SNES(__pyx_v_snes)); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 372, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Snes = ((struct PyPetscSNESObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscsnes.pxi":343
+  /* "PETSc/petscsnes.pxi":373
  *     ) except PETSC_ERR_PYTHON with gil:
  *     cdef SNES Snes = ref_SNES(snes)
  *     cdef object monitorlist = Snes.get_attr('__monitor__')             # <<<<<<<<<<<<<<
  *     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), ((char *)"__monitor__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 343, __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, 373, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_monitorlist = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscsnes.pxi":344
+  /* "PETSc/petscsnes.pxi":374
  *     cdef SNES Snes = ref_SNES(snes)
  *     cdef object monitorlist = Snes.get_attr('__monitor__')
  *     if monitorlist is None: return 0             # <<<<<<<<<<<<<<
@@ -34571,31 +35832,31 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Monitor(SNES __pyx_v_snes, PetscInt __p
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscsnes.pxi":345
+  /* "PETSc/petscsnes.pxi":375
  *     cdef object monitorlist = Snes.get_attr('__monitor__')
  *     if monitorlist is None: return 0
  *     cdef object it = toInt(iters)             # <<<<<<<<<<<<<<
  *     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_ERR(19, 345, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_iters); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 375, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_it = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscsnes.pxi":346
+  /* "PETSc/petscsnes.pxi":376
  *     if monitorlist is None: return 0
  *     cdef object it = toInt(iters)
  *     cdef object rn = toReal(rnorm)             # <<<<<<<<<<<<<<
  *     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_ERR(19, 346, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rnorm); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 376, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_rn = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscsnes.pxi":347
+  /* "PETSc/petscsnes.pxi":377
  *     cdef object it = toInt(iters)
  *     cdef object rn = toReal(rnorm)
  *     for (monitor, args, kargs) in monitorlist:             # <<<<<<<<<<<<<<
@@ -34606,26 +35867,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_ERR(19, 347, __pyx_L1_error)
+    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_monitorlist); if (unlikely(!__pyx_t_1)) __PYX_ERR(19, 377, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 347, __pyx_L1_error)
+    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(19, 377, __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_ERR(19, 347, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __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, 377, __pyx_L1_error)
         #else
-        __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_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 377, __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_ERR(19, 347, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __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, 377, __pyx_L1_error)
         #else
-        __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_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 377, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         #endif
       }
@@ -34634,8 +35895,8 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Monitor(SNES __pyx_v_snes, PetscInt __p
       if (unlikely(!__pyx_t_6)) {
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
-          if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(19, 347, __pyx_L1_error)
+          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
+          else __PYX_ERR(19, 377, __pyx_L1_error)
         }
         break;
       }
@@ -34643,7 +35904,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Monitor(SNES __pyx_v_snes, PetscInt __p
     }
     if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) {
       PyObject* sequence = __pyx_t_6;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -34651,9 +35912,9 @@ 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_ERR(19, 347, __pyx_L1_error)
+        __PYX_ERR(19, 377, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
@@ -34667,17 +35928,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_ERR(19, 347, __pyx_L1_error)
+      __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(19, 377, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(19, 347, __pyx_L1_error)
+      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(19, 377, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
-      __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) __PYX_ERR(19, 347, __pyx_L1_error)
+      __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) __PYX_ERR(19, 377, __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_ERR(19, 347, __pyx_L1_error)
+      __pyx_t_10 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(19, 377, __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;
@@ -34687,7 +35948,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_ERR(19, 347, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 3) < 0) __PYX_ERR(19, 377, __pyx_L1_error)
       __pyx_t_11 = NULL;
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       goto __pyx_L7_unpacking_done;
@@ -34695,7 +35956,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_ERR(19, 347, __pyx_L1_error)
+      __PYX_ERR(19, 377, __pyx_L1_error)
       __pyx_L7_unpacking_done:;
     }
     __Pyx_XDECREF_SET(__pyx_v_monitor, __pyx_t_7);
@@ -34705,14 +35966,14 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Monitor(SNES __pyx_v_snes, PetscInt __p
     __Pyx_XDECREF_SET(__pyx_v_kargs, __pyx_t_9);
     __pyx_t_9 = 0;
 
-    /* "PETSc/petscsnes.pxi":348
+    /* "PETSc/petscsnes.pxi":378
  *     cdef object rn = toReal(rnorm)
  *     for (monitor, args, kargs) in monitorlist:
  *         monitor(Snes, it, rn, *args, **kargs)             # <<<<<<<<<<<<<<
  *     return 0
  * 
  */
-    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 348, __pyx_L1_error)
+    __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(19, 378, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_INCREF(((PyObject *)__pyx_v_Snes));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_Snes));
@@ -34723,30 +35984,30 @@ 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_ERR(19, 348, __pyx_L1_error)
+    __pyx_t_9 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_9)) __PYX_ERR(19, 378, __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_ERR(19, 348, __pyx_L1_error)
+    __pyx_t_8 = PyNumber_Add(__pyx_t_6, __pyx_t_9); if (unlikely(!__pyx_t_8)) __PYX_ERR(19, 378, __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_ERR(19, 348, __pyx_L1_error)
+      __PYX_ERR(19, 378, __pyx_L1_error)
     }
     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_t_9 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_9)) __PYX_ERR(19, 378, __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_ERR(19, 348, __pyx_L1_error)
+      __pyx_t_9 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(19, 378, __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_ERR(19, 348, __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, 378, __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/petscsnes.pxi":347
+    /* "PETSc/petscsnes.pxi":377
  *     cdef object it = toInt(iters)
  *     cdef object rn = toReal(rnorm)
  *     for (monitor, args, kargs) in monitorlist:             # <<<<<<<<<<<<<<
@@ -34756,7 +36017,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Monitor(SNES __pyx_v_snes, PetscInt __p
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/petscsnes.pxi":349
+  /* "PETSc/petscsnes.pxi":379
  *     for (monitor, args, kargs) in monitorlist:
  *         monitor(Snes, it, rn, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -34766,7 +36027,7 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Monitor(SNES __pyx_v_snes, PetscInt __p
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscsnes.pxi":336
+  /* "PETSc/petscsnes.pxi":366
  * # -----------------------------------------------------------------------------
  * 
  * cdef int SNES_Monitor(             # <<<<<<<<<<<<<<
@@ -34794,12 +36055,12 @@ static int __pyx_f_8petsc4py_5PETSc_SNES_Monitor(SNES __pyx_v_snes, PetscInt __p
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscts.pxi":199
+/* "PETSc/petscts.pxi":277
  * # -----------------------------------------------------------------------------
  * 
  * cdef inline TS ref_TS(PetscTS ts):             # <<<<<<<<<<<<<<
@@ -34815,14 +36076,14 @@ static CYTHON_INLINE struct PyPetscTSObject *__pyx_f_8petsc4py_5PETSc_ref_TS(TS
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("ref_TS", 0);
 
-  /* "PETSc/petscts.pxi":200
+  /* "PETSc/petscts.pxi":278
  * 
  * 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 *)__pyx_ptype_8petsc4py_5PETSc_TS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 200, __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, 278, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_t_2 = __pyx_t_1;
   __Pyx_INCREF(__pyx_t_2);
@@ -34830,7 +36091,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":201
+  /* "PETSc/petscts.pxi":279
  * cdef inline TS ref_TS(PetscTS ts):
  *     cdef TS ob = <TS> TS()
  *     ob.ts = ts             # <<<<<<<<<<<<<<
@@ -34839,7 +36100,7 @@ static CYTHON_INLINE struct PyPetscTSObject *__pyx_f_8petsc4py_5PETSc_ref_TS(TS
  */
   __pyx_v_ob->ts = __pyx_v_ts;
 
-  /* "PETSc/petscts.pxi":202
+  /* "PETSc/petscts.pxi":280
  *     cdef TS ob = <TS> TS()
  *     ob.ts = ts
  *     PetscINCREF(ob.obj)             # <<<<<<<<<<<<<<
@@ -34848,7 +36109,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":203
+  /* "PETSc/petscts.pxi":281
  *     ob.ts = ts
  *     PetscINCREF(ob.obj)
  *     return ob             # <<<<<<<<<<<<<<
@@ -34860,7 +36121,7 @@ static CYTHON_INLINE struct PyPetscTSObject *__pyx_f_8petsc4py_5PETSc_ref_TS(TS
   __pyx_r = __pyx_v_ob;
   goto __pyx_L0;
 
-  /* "PETSc/petscts.pxi":199
+  /* "PETSc/petscts.pxi":277
  * # -----------------------------------------------------------------------------
  * 
  * cdef inline TS ref_TS(PetscTS ts):             # <<<<<<<<<<<<<<
@@ -34881,7 +36142,7 @@ static CYTHON_INLINE struct PyPetscTSObject *__pyx_f_8petsc4py_5PETSc_ref_TS(TS
   return __pyx_r;
 }
 
-/* "PETSc/petscts.pxi":207
+/* "PETSc/petscts.pxi":285
  * # -----------------------------------------------------------------------------
  * 
  * cdef int TS_RHSFunction(             # <<<<<<<<<<<<<<
@@ -34908,59 +36169,59 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSFunction(TS __pyx_v_ts, PetscReal __py
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TS_RHSFunction", 0);
 
-  /* "PETSc/petscts.pxi":214
+  /* "PETSc/petscts.pxi":292
  *     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_ERR(20, 214, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 292, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Ts = ((struct PyPetscTSObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":215
+  /* "PETSc/petscts.pxi":293
  *     ) 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_ERR(20, 215, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 293, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Xvec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":216
+  /* "PETSc/petscts.pxi":294
  *     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_ERR(20, 216, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_f)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 294, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Fvec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":217
+  /* "PETSc/petscts.pxi":295
  *     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), ((char *)"__rhsfunction__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 217, __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, 295, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":218
+  /* "PETSc/petscts.pxi":296
  *     cdef Vec Fvec = ref_Vec(f)
  *     cdef object context = Ts.get_attr('__rhsfunction__')
  *     if context is None and ctx != NULL: context = <object>ctx             # <<<<<<<<<<<<<<
@@ -34984,7 +36245,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSFunction(TS __pyx_v_ts, PetscReal __py
     __pyx_t_1 = 0;
   }
 
-  /* "PETSc/petscts.pxi":219
+  /* "PETSc/petscts.pxi":297
  *     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             # <<<<<<<<<<<<<<
@@ -35006,12 +36267,12 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSFunction(TS __pyx_v_ts, PetscReal __py
     __pyx_L6_bool_binop_done:;
     if (unlikely(!__pyx_t_2)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(20, 219, __pyx_L1_error)
+      __PYX_ERR(20, 297, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscts.pxi":220
+  /* "PETSc/petscts.pxi":298
  *     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             # <<<<<<<<<<<<<<
@@ -35020,7 +36281,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSFunction(TS __pyx_v_ts, PetscReal __py
  */
   if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
     PyObject* sequence = __pyx_v_context;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -35028,9 +36289,9 @@ 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_ERR(20, 220, __pyx_L1_error)
+      __PYX_ERR(20, 298, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
@@ -35044,16 +36305,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_ERR(20, 220, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 298, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 220, __pyx_L1_error)
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 298, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 220, __pyx_L1_error)
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 298, __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(20, 220, __pyx_L1_error)
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(20, 298, __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;
@@ -35062,7 +36323,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_ERR(20, 220, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(20, 298, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L9_unpacking_done;
@@ -35070,7 +36331,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_ERR(20, 220, __pyx_L1_error)
+    __PYX_ERR(20, 298, __pyx_L1_error)
     __pyx_L9_unpacking_done:;
   }
   __pyx_v_function = __pyx_t_1;
@@ -35080,16 +36341,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":221
+  /* "PETSc/petscts.pxi":299
  *     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_ERR(20, 221, __pyx_L1_error)
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_t); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 299, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 221, __pyx_L1_error)
+  __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 299, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(((PyObject *)__pyx_v_Ts));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Ts));
@@ -35103,30 +36364,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_ERR(20, 221, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 299, __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_ERR(20, 221, __pyx_L1_error)
+  __pyx_t_1 = PyNumber_Add(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 299, __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_ERR(20, 221, __pyx_L1_error)
+    __PYX_ERR(20, 299, __pyx_L1_error)
   }
   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_t_6 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 299, __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_ERR(20, 221, __pyx_L1_error)
+    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 299, __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_ERR(20, 221, __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, 299, __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":222
+  /* "PETSc/petscts.pxi":300
  *     (function, args, kargs) = context
  *     function(Ts, toReal(t), Xvec, Fvec, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -35136,7 +36397,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSFunction(TS __pyx_v_ts, PetscReal __py
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscts.pxi":207
+  /* "PETSc/petscts.pxi":285
  * # -----------------------------------------------------------------------------
  * 
  * cdef int TS_RHSFunction(             # <<<<<<<<<<<<<<
@@ -35162,12 +36423,12 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSFunction(TS __pyx_v_ts, PetscReal __py
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscts.pxi":224
+/* "PETSc/petscts.pxi":302
  *     return 0
  * 
  * cdef int TS_RHSJacobian(             # <<<<<<<<<<<<<<
@@ -35195,71 +36456,71 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSJacobian(TS __pyx_v_ts, PetscReal __py
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TS_RHSJacobian", 0);
 
-  /* "PETSc/petscts.pxi":232
+  /* "PETSc/petscts.pxi":310
  *     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_ERR(20, 232, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 310, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Ts = ((struct PyPetscTSObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":233
+  /* "PETSc/petscts.pxi":311
  *     ) 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_ERR(20, 233, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 311, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Xvec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":234
+  /* "PETSc/petscts.pxi":312
  *     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_ERR(20, 234, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v_J)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 312, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Jmat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":235
+  /* "PETSc/petscts.pxi":313
  *     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_ERR(20, 235, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v_P)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 313, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Pmat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":236
+  /* "PETSc/petscts.pxi":314
  *     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), ((char *)"__rhsjacobian__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 236, __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, 314, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":237
+  /* "PETSc/petscts.pxi":315
  *     cdef Mat Pmat = ref_Mat(P)
  *     cdef object context = Ts.get_attr('__rhsjacobian__')
  *     if context is None and ctx != NULL: context = <object>ctx             # <<<<<<<<<<<<<<
@@ -35283,7 +36544,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSJacobian(TS __pyx_v_ts, PetscReal __py
     __pyx_t_1 = 0;
   }
 
-  /* "PETSc/petscts.pxi":238
+  /* "PETSc/petscts.pxi":316
  *     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             # <<<<<<<<<<<<<<
@@ -35305,12 +36566,12 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSJacobian(TS __pyx_v_ts, PetscReal __py
     __pyx_L6_bool_binop_done:;
     if (unlikely(!__pyx_t_2)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(20, 238, __pyx_L1_error)
+      __PYX_ERR(20, 316, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscts.pxi":239
+  /* "PETSc/petscts.pxi":317
  *     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             # <<<<<<<<<<<<<<
@@ -35319,7 +36580,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSJacobian(TS __pyx_v_ts, PetscReal __py
  */
   if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
     PyObject* sequence = __pyx_v_context;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -35327,9 +36588,9 @@ 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_ERR(20, 239, __pyx_L1_error)
+      __PYX_ERR(20, 317, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
@@ -35343,16 +36604,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_ERR(20, 239, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 317, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 239, __pyx_L1_error)
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 317, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 239, __pyx_L1_error)
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 317, __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(20, 239, __pyx_L1_error)
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(20, 317, __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;
@@ -35361,7 +36622,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_ERR(20, 239, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(20, 317, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L9_unpacking_done;
@@ -35369,7 +36630,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_ERR(20, 239, __pyx_L1_error)
+    __PYX_ERR(20, 317, __pyx_L1_error)
     __pyx_L9_unpacking_done:;
   }
   __pyx_v_jacobian = __pyx_t_1;
@@ -35379,16 +36640,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":240
+  /* "PETSc/petscts.pxi":318
  *     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_ERR(20, 240, __pyx_L1_error)
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_t); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 318, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_5 = PyTuple_New(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 240, __pyx_L1_error)
+  __pyx_t_5 = PyTuple_New(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 318, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(((PyObject *)__pyx_v_Ts));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Ts));
@@ -35405,30 +36666,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_ERR(20, 240, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 318, __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_ERR(20, 240, __pyx_L1_error)
+  __pyx_t_1 = PyNumber_Add(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 318, __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_ERR(20, 240, __pyx_L1_error)
+    __PYX_ERR(20, 318, __pyx_L1_error)
   }
   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_t_6 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 318, __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_ERR(20, 240, __pyx_L1_error)
+    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 318, __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_ERR(20, 240, __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, 318, __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":241
+  /* "PETSc/petscts.pxi":319
  *     (jacobian, args, kargs) = context
  *     jacobian(Ts, toReal(t), Xvec, Jmat, Pmat, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -35438,7 +36699,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSJacobian(TS __pyx_v_ts, PetscReal __py
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscts.pxi":224
+  /* "PETSc/petscts.pxi":302
  *     return 0
  * 
  * cdef int TS_RHSJacobian(             # <<<<<<<<<<<<<<
@@ -35465,12 +36726,12 @@ static int __pyx_f_8petsc4py_5PETSc_TS_RHSJacobian(TS __pyx_v_ts, PetscReal __py
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscts.pxi":245
+/* "PETSc/petscts.pxi":323
  * # -----------------------------------------------------------------------------
  * 
  * cdef int TS_IFunction(             # <<<<<<<<<<<<<<
@@ -35498,71 +36759,71 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IFunction(TS __pyx_v_ts, PetscReal __pyx_
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TS_IFunction", 0);
 
-  /* "PETSc/petscts.pxi":253
+  /* "PETSc/petscts.pxi":331
  *     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_ERR(20, 253, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 331, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Ts = ((struct PyPetscTSObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":254
+  /* "PETSc/petscts.pxi":332
  *     ) 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_ERR(20, 254, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 332, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Xvec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":255
+  /* "PETSc/petscts.pxi":333
  *     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_ERR(20, 255, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_xdot)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 333, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_XDvec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":256
+  /* "PETSc/petscts.pxi":334
  *     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_ERR(20, 256, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_f)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 334, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Fvec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":257
+  /* "PETSc/petscts.pxi":335
  *     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), ((char *)"__ifunction__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 257, __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, 335, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":258
+  /* "PETSc/petscts.pxi":336
  *     cdef Vec Fvec  = ref_Vec(f)
  *     cdef object context = Ts.get_attr('__ifunction__')
  *     if context is None and ctx != NULL: context = <object>ctx             # <<<<<<<<<<<<<<
@@ -35586,7 +36847,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IFunction(TS __pyx_v_ts, PetscReal __pyx_
     __pyx_t_1 = 0;
   }
 
-  /* "PETSc/petscts.pxi":259
+  /* "PETSc/petscts.pxi":337
  *     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             # <<<<<<<<<<<<<<
@@ -35608,12 +36869,12 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IFunction(TS __pyx_v_ts, PetscReal __pyx_
     __pyx_L6_bool_binop_done:;
     if (unlikely(!__pyx_t_2)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(20, 259, __pyx_L1_error)
+      __PYX_ERR(20, 337, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscts.pxi":260
+  /* "PETSc/petscts.pxi":338
  *     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             # <<<<<<<<<<<<<<
@@ -35622,7 +36883,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IFunction(TS __pyx_v_ts, PetscReal __pyx_
  */
   if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
     PyObject* sequence = __pyx_v_context;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -35630,9 +36891,9 @@ 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_ERR(20, 260, __pyx_L1_error)
+      __PYX_ERR(20, 338, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
@@ -35646,16 +36907,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_ERR(20, 260, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 338, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 260, __pyx_L1_error)
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 338, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 260, __pyx_L1_error)
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 338, __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(20, 260, __pyx_L1_error)
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(20, 338, __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;
@@ -35664,7 +36925,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_ERR(20, 260, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(20, 338, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L9_unpacking_done;
@@ -35672,7 +36933,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_ERR(20, 260, __pyx_L1_error)
+    __PYX_ERR(20, 338, __pyx_L1_error)
     __pyx_L9_unpacking_done:;
   }
   __pyx_v_function = __pyx_t_1;
@@ -35682,16 +36943,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":261
+  /* "PETSc/petscts.pxi":339
  *     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_ERR(20, 261, __pyx_L1_error)
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_t); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 339, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_5 = PyTuple_New(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 261, __pyx_L1_error)
+  __pyx_t_5 = PyTuple_New(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 339, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_INCREF(((PyObject *)__pyx_v_Ts));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Ts));
@@ -35708,30 +36969,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_ERR(20, 261, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 339, __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_ERR(20, 261, __pyx_L1_error)
+  __pyx_t_1 = PyNumber_Add(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 339, __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_ERR(20, 261, __pyx_L1_error)
+    __PYX_ERR(20, 339, __pyx_L1_error)
   }
   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_t_6 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 339, __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_ERR(20, 261, __pyx_L1_error)
+    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 339, __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_ERR(20, 261, __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, 339, __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":262
+  /* "PETSc/petscts.pxi":340
  *     (function, args, kargs) = context
  *     function(Ts, toReal(t), Xvec, XDvec, Fvec, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -35741,7 +37002,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IFunction(TS __pyx_v_ts, PetscReal __pyx_
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscts.pxi":245
+  /* "PETSc/petscts.pxi":323
  * # -----------------------------------------------------------------------------
  * 
  * cdef int TS_IFunction(             # <<<<<<<<<<<<<<
@@ -35768,12 +37029,12 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IFunction(TS __pyx_v_ts, PetscReal __pyx_
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscts.pxi":264
+/* "PETSc/petscts.pxi":342
  *     return 0
  * 
  * cdef int TS_IJacobian(             # <<<<<<<<<<<<<<
@@ -35802,83 +37063,83 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IJacobian(TS __pyx_v_ts, PetscReal __pyx_
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TS_IJacobian", 0);
 
-  /* "PETSc/petscts.pxi":274
+  /* "PETSc/petscts.pxi":352
  *     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_ERR(20, 274, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 352, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Ts = ((struct PyPetscTSObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":275
+  /* "PETSc/petscts.pxi":353
  *     ) 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_ERR(20, 275, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 353, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Xvec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":276
+  /* "PETSc/petscts.pxi":354
  *     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_ERR(20, 276, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_xdot)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 354, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_XDvec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":277
+  /* "PETSc/petscts.pxi":355
  *     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_ERR(20, 277, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v_J)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 355, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Jmat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":278
+  /* "PETSc/petscts.pxi":356
  *     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_ERR(20, 278, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v_P)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 356, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Pmat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":279
+  /* "PETSc/petscts.pxi":357
  *     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), ((char *)"__ijacobian__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 279, __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, 357, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":280
+  /* "PETSc/petscts.pxi":358
  *     cdef Mat  Pmat  = ref_Mat(P)
  *     cdef object context = Ts.get_attr('__ijacobian__')
  *     if context is None and ctx != NULL: context = <object>ctx             # <<<<<<<<<<<<<<
@@ -35902,7 +37163,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IJacobian(TS __pyx_v_ts, PetscReal __pyx_
     __pyx_t_1 = 0;
   }
 
-  /* "PETSc/petscts.pxi":281
+  /* "PETSc/petscts.pxi":359
  *     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             # <<<<<<<<<<<<<<
@@ -35924,12 +37185,12 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IJacobian(TS __pyx_v_ts, PetscReal __pyx_
     __pyx_L6_bool_binop_done:;
     if (unlikely(!__pyx_t_2)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(20, 281, __pyx_L1_error)
+      __PYX_ERR(20, 359, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscts.pxi":282
+  /* "PETSc/petscts.pxi":360
  *     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             # <<<<<<<<<<<<<<
@@ -35938,7 +37199,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IJacobian(TS __pyx_v_ts, PetscReal __pyx_
  */
   if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
     PyObject* sequence = __pyx_v_context;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -35946,9 +37207,9 @@ 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_ERR(20, 282, __pyx_L1_error)
+      __PYX_ERR(20, 360, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
@@ -35962,16 +37223,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_ERR(20, 282, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 360, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 282, __pyx_L1_error)
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 360, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 282, __pyx_L1_error)
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 360, __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(20, 282, __pyx_L1_error)
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(20, 360, __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;
@@ -35980,7 +37241,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_ERR(20, 282, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(20, 360, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L9_unpacking_done;
@@ -35988,7 +37249,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_ERR(20, 282, __pyx_L1_error)
+    __PYX_ERR(20, 360, __pyx_L1_error)
     __pyx_L9_unpacking_done:;
   }
   __pyx_v_jacobian = __pyx_t_1;
@@ -35998,18 +37259,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":283
+  /* "PETSc/petscts.pxi":361
  *     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_ERR(20, 283, __pyx_L1_error)
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_t); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 361, __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_ERR(20, 283, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_a); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 361, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_1 = PyTuple_New(7); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 283, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(7); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 361, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_Ts));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Ts));
@@ -36032,40 +37293,40 @@ 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_ERR(20, 283, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 361, __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_ERR(20, 283, __pyx_L1_error)
+  __pyx_t_6 = PyNumber_Add(__pyx_t_1, __pyx_t_5); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 361, __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_ERR(20, 283, __pyx_L1_error)
+    __PYX_ERR(20, 361, __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(20, 283, __pyx_L1_error)
+    __pyx_t_5 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 361, __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(20, 283, __pyx_L1_error)
+    __pyx_t_5 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 361, __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_ERR(20, 283, __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, 361, __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":284
+  /* "PETSc/petscts.pxi":362
  *     (jacobian, args, kargs) = context
  *     jacobian(Ts, toReal(t), Xvec, XDvec, toReal(a), Jmat, Pmat, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
  * 
- * # -----------------------------------------------------------------------------
+ * cdef int TS_I2Function(
  */
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscts.pxi":264
+  /* "PETSc/petscts.pxi":342
  *     return 0
  * 
  * cdef int TS_IJacobian(             # <<<<<<<<<<<<<<
@@ -36093,12 +37354,679 @@ static int __pyx_f_8petsc4py_5PETSc_TS_IJacobian(TS __pyx_v_ts, PetscReal __pyx_
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
+  #endif
+  return __pyx_r;
+}
+
+/* "PETSc/petscts.pxi":364
+ *     return 0
+ * 
+ * cdef int TS_I2Function(             # <<<<<<<<<<<<<<
+ *     PetscTS   ts,
+ *     PetscReal t,
+ */
+
+static int __pyx_f_8petsc4py_5PETSc_TS_I2Function(TS __pyx_v_ts, PetscReal __pyx_v_t, Vec __pyx_v_x, Vec __pyx_v_xdot, Vec __pyx_v_xdotdot, Vec __pyx_v_f, void *__pyx_v_ctx) {
+  struct PyPetscTSObject *__pyx_v_Ts = 0;
+  struct PyPetscVecObject *__pyx_v_Xvec = 0;
+  struct PyPetscVecObject *__pyx_v_XDvec = 0;
+  struct PyPetscVecObject *__pyx_v_XDDvec = 0;
+  struct PyPetscVecObject *__pyx_v_Fvec = 0;
+  PyObject *__pyx_v_context = 0;
+  PyObject *__pyx_v_function = 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 = __Pyx_PyGILState_Ensure();
+  #endif
+  __Pyx_RefNannySetupContext("TS_I2Function", 0);
+
+  /* "PETSc/petscts.pxi":373
+ *     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_ERR(20, 373, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_Ts = ((struct PyPetscTSObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscts.pxi":374
+ *     ) 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 XDDvec = ref_Vec(xdotdot)
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 374, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_Xvec = ((struct PyPetscVecObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscts.pxi":375
+ *     cdef TS  Ts    = ref_TS(ts)
+ *     cdef Vec Xvec  = ref_Vec(x)
+ *     cdef Vec XDvec = ref_Vec(xdot)             # <<<<<<<<<<<<<<
+ *     cdef Vec XDDvec = ref_Vec(xdotdot)
+ *     cdef Vec Fvec  = ref_Vec(f)
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_xdot)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 375, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_XDvec = ((struct PyPetscVecObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscts.pxi":376
+ *     cdef Vec Xvec  = ref_Vec(x)
+ *     cdef Vec XDvec = ref_Vec(xdot)
+ *     cdef Vec XDDvec = ref_Vec(xdotdot)             # <<<<<<<<<<<<<<
+ *     cdef Vec Fvec  = ref_Vec(f)
+ *     cdef object context = Ts.get_attr('__i2function__')
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_xdotdot)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 376, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_XDDvec = ((struct PyPetscVecObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscts.pxi":377
+ *     cdef Vec XDvec = ref_Vec(xdot)
+ *     cdef Vec XDDvec = ref_Vec(xdotdot)
+ *     cdef Vec Fvec  = ref_Vec(f)             # <<<<<<<<<<<<<<
+ *     cdef object context = Ts.get_attr('__i2function__')
+ *     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_ERR(20, 377, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_Fvec = ((struct PyPetscVecObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscts.pxi":378
+ *     cdef Vec XDDvec = ref_Vec(xdotdot)
+ *     cdef Vec Fvec  = ref_Vec(f)
+ *     cdef object context = Ts.get_attr('__i2function__')             # <<<<<<<<<<<<<<
+ *     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), ((char *)"__i2function__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 378, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_context = __pyx_t_1;
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscts.pxi":379
+ *     cdef Vec Fvec  = ref_Vec(f)
+ *     cdef object context = Ts.get_attr('__i2function__')
+ *     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
+ */
+  __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/petscts.pxi":380
+ *     cdef object context = Ts.get_attr('__i2function__')
+ *     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
+ *     function(Ts, toReal(t), Xvec, XDvec, XDDvec, Fvec, *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(20, 380, __pyx_L1_error)
+    }
+  }
+  #endif
+
+  /* "PETSc/petscts.pxi":381
+ *     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             # <<<<<<<<<<<<<<
+ *     function(Ts, toReal(t), Xvec, XDvec, XDDvec, Fvec, *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_PYPY
+    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(20, 381, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    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(20, 381, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 381, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 381, __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(20, 381, __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(20, 381, __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(20, 381, __pyx_L1_error)
+    __pyx_L9_unpacking_done:;
+  }
+  __pyx_v_function = __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/petscts.pxi":382
+ *     assert context is not None and type(context) is tuple # sanity check
+ *     (function, args, kargs) = context
+ *     function(Ts, toReal(t), Xvec, XDvec, XDDvec, Fvec, *args, **kargs)             # <<<<<<<<<<<<<<
+ *     return 0
+ * 
+ */
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_t); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 382, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __pyx_t_5 = PyTuple_New(6); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 382, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_INCREF(((PyObject *)__pyx_v_Ts));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_Ts));
+  PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_Ts));
+  __Pyx_GIVEREF(__pyx_t_6);
+  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6);
+  __Pyx_INCREF(((PyObject *)__pyx_v_Xvec));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_Xvec));
+  PyTuple_SET_ITEM(__pyx_t_5, 2, ((PyObject *)__pyx_v_Xvec));
+  __Pyx_INCREF(((PyObject *)__pyx_v_XDvec));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_XDvec));
+  PyTuple_SET_ITEM(__pyx_t_5, 3, ((PyObject *)__pyx_v_XDvec));
+  __Pyx_INCREF(((PyObject *)__pyx_v_XDDvec));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_XDDvec));
+  PyTuple_SET_ITEM(__pyx_t_5, 4, ((PyObject *)__pyx_v_XDDvec));
+  __Pyx_INCREF(((PyObject *)__pyx_v_Fvec));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_Fvec));
+  PyTuple_SET_ITEM(__pyx_t_5, 5, ((PyObject *)__pyx_v_Fvec));
+  __pyx_t_6 = 0;
+  __pyx_t_6 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 382, __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_ERR(20, 382, __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_ERR(20, 382, __pyx_L1_error)
+  }
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_6 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 382, __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_ERR(20, 382, __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_ERR(20, 382, __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":383
+ *     (function, args, kargs) = context
+ *     function(Ts, toReal(t), Xvec, XDvec, XDDvec, Fvec, *args, **kargs)
+ *     return 0             # <<<<<<<<<<<<<<
+ * 
+ * cdef int TS_I2Jacobian(
+ */
+  __pyx_r = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/petscts.pxi":364
+ *     return 0
+ * 
+ * cdef int TS_I2Function(             # <<<<<<<<<<<<<<
+ *     PetscTS   ts,
+ *     PetscReal t,
+ */
+
+  /* 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.TS_I2Function", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = PETSC_ERR_PYTHON;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_Ts);
+  __Pyx_XDECREF((PyObject *)__pyx_v_Xvec);
+  __Pyx_XDECREF((PyObject *)__pyx_v_XDvec);
+  __Pyx_XDECREF((PyObject *)__pyx_v_XDDvec);
+  __Pyx_XDECREF((PyObject *)__pyx_v_Fvec);
+  __Pyx_XDECREF(__pyx_v_context);
+  __Pyx_XDECREF(__pyx_v_function);
+  __Pyx_XDECREF(__pyx_v_args);
+  __Pyx_XDECREF(__pyx_v_kargs);
+  __Pyx_RefNannyFinishContext();
+  #ifdef WITH_THREAD
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscts.pxi":288
+/* "PETSc/petscts.pxi":385
+ *     return 0
+ * 
+ * cdef int TS_I2Jacobian(             # <<<<<<<<<<<<<<
+ *     PetscTS   ts,
+ *     PetscReal t,
+ */
+
+static int __pyx_f_8petsc4py_5PETSc_TS_I2Jacobian(TS __pyx_v_ts, PetscReal __pyx_v_t, Vec __pyx_v_x, Vec __pyx_v_xdot, Vec __pyx_v_xdotdot, PetscReal __pyx_v_v, PetscReal __pyx_v_a, Mat __pyx_v_J, Mat __pyx_v_P, void *__pyx_v_ctx) {
+  struct PyPetscTSObject *__pyx_v_Ts = 0;
+  struct PyPetscVecObject *__pyx_v_Xvec = 0;
+  struct PyPetscVecObject *__pyx_v_XDvec = 0;
+  struct PyPetscVecObject *__pyx_v_XDDvec = 0;
+  struct PyPetscMatObject *__pyx_v_Jmat = 0;
+  struct PyPetscMatObject *__pyx_v_Pmat = 0;
+  PyObject *__pyx_v_context = 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;
+  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 = __Pyx_PyGILState_Ensure();
+  #endif
+  __Pyx_RefNannySetupContext("TS_I2Jacobian", 0);
+
+  /* "PETSc/petscts.pxi":397
+ *     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_ERR(20, 397, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_Ts = ((struct PyPetscTSObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscts.pxi":398
+ *     ) 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  XDDvec = ref_Vec(xdotdot)
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 398, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_Xvec = ((struct PyPetscVecObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscts.pxi":399
+ *     cdef TS   Ts    = ref_TS(ts)
+ *     cdef Vec  Xvec  = ref_Vec(x)
+ *     cdef Vec  XDvec = ref_Vec(xdot)             # <<<<<<<<<<<<<<
+ *     cdef Vec  XDDvec = ref_Vec(xdotdot)
+ *     cdef Mat  Jmat  = ref_Mat(J)
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_xdot)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 399, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_XDvec = ((struct PyPetscVecObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscts.pxi":400
+ *     cdef Vec  Xvec  = ref_Vec(x)
+ *     cdef Vec  XDvec = ref_Vec(xdot)
+ *     cdef Vec  XDDvec = ref_Vec(xdotdot)             # <<<<<<<<<<<<<<
+ *     cdef Mat  Jmat  = ref_Mat(J)
+ *     cdef Mat  Pmat  = ref_Mat(P)
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_xdotdot)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 400, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_XDDvec = ((struct PyPetscVecObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscts.pxi":401
+ *     cdef Vec  XDvec = ref_Vec(xdot)
+ *     cdef Vec  XDDvec = ref_Vec(xdotdot)
+ *     cdef Mat  Jmat  = ref_Mat(J)             # <<<<<<<<<<<<<<
+ *     cdef Mat  Pmat  = ref_Mat(P)
+ *     cdef object context = Ts.get_attr('__i2jacobian__')
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v_J)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 401, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_Jmat = ((struct PyPetscMatObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscts.pxi":402
+ *     cdef Vec  XDDvec = ref_Vec(xdotdot)
+ *     cdef Mat  Jmat  = ref_Mat(J)
+ *     cdef Mat  Pmat  = ref_Mat(P)             # <<<<<<<<<<<<<<
+ *     cdef object context = Ts.get_attr('__i2jacobian__')
+ *     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_ERR(20, 402, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_Pmat = ((struct PyPetscMatObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscts.pxi":403
+ *     cdef Mat  Jmat  = ref_Mat(J)
+ *     cdef Mat  Pmat  = ref_Mat(P)
+ *     cdef object context = Ts.get_attr('__i2jacobian__')             # <<<<<<<<<<<<<<
+ *     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), ((char *)"__i2jacobian__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 403, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_context = __pyx_t_1;
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscts.pxi":404
+ *     cdef Mat  Pmat  = ref_Mat(P)
+ *     cdef object context = Ts.get_attr('__i2jacobian__')
+ *     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
+ */
+  __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/petscts.pxi":405
+ *     cdef object context = Ts.get_attr('__i2jacobian__')
+ *     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
+ *     jacobian(Ts, toReal(t), Xvec, XDvec, XDDvec, toReal(v), toReal(a), Jmat, Pmat, *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(20, 405, __pyx_L1_error)
+    }
+  }
+  #endif
+
+  /* "PETSc/petscts.pxi":406
+ *     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             # <<<<<<<<<<<<<<
+ *     jacobian(Ts, toReal(t), Xvec, XDvec, XDDvec, toReal(v), toReal(a), Jmat, Pmat, *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_PYPY
+    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(20, 406, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    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(20, 406, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 406, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 406, __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(20, 406, __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(20, 406, __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(20, 406, __pyx_L1_error)
+    __pyx_L9_unpacking_done:;
+  }
+  __pyx_v_jacobian = __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/petscts.pxi":407
+ *     assert context is not None and type(context) is tuple # sanity check
+ *     (jacobian, args, kargs) = context
+ *     jacobian(Ts, toReal(t), Xvec, XDvec, XDDvec, toReal(v), 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_ERR(20, 407, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_v); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 407, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_a); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 407, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_7 = PyTuple_New(9); if (unlikely(!__pyx_t_7)) __PYX_ERR(20, 407, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __Pyx_INCREF(((PyObject *)__pyx_v_Ts));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_Ts));
+  PyTuple_SET_ITEM(__pyx_t_7, 0, ((PyObject *)__pyx_v_Ts));
+  __Pyx_GIVEREF(__pyx_t_6);
+  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_t_6);
+  __Pyx_INCREF(((PyObject *)__pyx_v_Xvec));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_Xvec));
+  PyTuple_SET_ITEM(__pyx_t_7, 2, ((PyObject *)__pyx_v_Xvec));
+  __Pyx_INCREF(((PyObject *)__pyx_v_XDvec));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_XDvec));
+  PyTuple_SET_ITEM(__pyx_t_7, 3, ((PyObject *)__pyx_v_XDvec));
+  __Pyx_INCREF(((PyObject *)__pyx_v_XDDvec));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_XDDvec));
+  PyTuple_SET_ITEM(__pyx_t_7, 4, ((PyObject *)__pyx_v_XDDvec));
+  __Pyx_GIVEREF(__pyx_t_5);
+  PyTuple_SET_ITEM(__pyx_t_7, 5, __pyx_t_5);
+  __Pyx_GIVEREF(__pyx_t_1);
+  PyTuple_SET_ITEM(__pyx_t_7, 6, __pyx_t_1);
+  __Pyx_INCREF(((PyObject *)__pyx_v_Jmat));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_Jmat));
+  PyTuple_SET_ITEM(__pyx_t_7, 7, ((PyObject *)__pyx_v_Jmat));
+  __Pyx_INCREF(((PyObject *)__pyx_v_Pmat));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_Pmat));
+  PyTuple_SET_ITEM(__pyx_t_7, 8, ((PyObject *)__pyx_v_Pmat));
+  __pyx_t_6 = 0;
+  __pyx_t_5 = 0;
+  __pyx_t_1 = 0;
+  __pyx_t_1 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 407, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_5 = PyNumber_Add(__pyx_t_7, __pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 407, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 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(20, 407, __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(20, 407, __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(20, 407, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+  }
+  __pyx_t_7 = __Pyx_PyObject_Call(__pyx_v_jacobian, __pyx_t_5, __pyx_t_1); if (unlikely(!__pyx_t_7)) __PYX_ERR(20, 407, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+
+  /* "PETSc/petscts.pxi":408
+ *     (jacobian, args, kargs) = context
+ *     jacobian(Ts, toReal(t), Xvec, XDvec, XDDvec, toReal(v), toReal(a), Jmat, Pmat, *args, **kargs)
+ *     return 0             # <<<<<<<<<<<<<<
+ * 
+ * # -----------------------------------------------------------------------------
+ */
+  __pyx_r = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/petscts.pxi":385
+ *     return 0
+ * 
+ * cdef int TS_I2Jacobian(             # <<<<<<<<<<<<<<
+ *     PetscTS   ts,
+ *     PetscReal t,
+ */
+
+  /* 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.TS_I2Jacobian", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = PETSC_ERR_PYTHON;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_Ts);
+  __Pyx_XDECREF((PyObject *)__pyx_v_Xvec);
+  __Pyx_XDECREF((PyObject *)__pyx_v_XDvec);
+  __Pyx_XDECREF((PyObject *)__pyx_v_XDDvec);
+  __Pyx_XDECREF((PyObject *)__pyx_v_Jmat);
+  __Pyx_XDECREF((PyObject *)__pyx_v_Pmat);
+  __Pyx_XDECREF(__pyx_v_context);
+  __Pyx_XDECREF(__pyx_v_jacobian);
+  __Pyx_XDECREF(__pyx_v_args);
+  __Pyx_XDECREF(__pyx_v_kargs);
+  __Pyx_RefNannyFinishContext();
+  #ifdef WITH_THREAD
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
+  #endif
+  return __pyx_r;
+}
+
+/* "PETSc/petscts.pxi":412
  * # -----------------------------------------------------------------------------
  * 
  * cdef int TS_Monitor(             # <<<<<<<<<<<<<<
@@ -36127,47 +38055,47 @@ static int __pyx_f_8petsc4py_5PETSc_TS_Monitor(TS __pyx_v_ts, PetscInt __pyx_v_s
   PyObject *__pyx_t_10 = NULL;
   PyObject *(*__pyx_t_11)(PyObject *);
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TS_Monitor", 0);
 
-  /* "PETSc/petscts.pxi":295
+  /* "PETSc/petscts.pxi":419
  *     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_ERR(20, 295, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 419, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Ts = ((struct PyPetscTSObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":296
+  /* "PETSc/petscts.pxi":420
  *     ) 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_ERR(20, 296, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_u)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 420, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Vu = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":297
+  /* "PETSc/petscts.pxi":421
  *     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), ((char *)"__monitor__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 297, __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, 421, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_monitorlist = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":298
+  /* "PETSc/petscts.pxi":422
  *     cdef Vec Vu = ref_Vec(u)
  *     cdef object monitorlist = Ts.get_attr('__monitor__')
  *     if monitorlist is None: return 0             # <<<<<<<<<<<<<<
@@ -36181,7 +38109,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_Monitor(TS __pyx_v_ts, PetscInt __pyx_v_s
     goto __pyx_L0;
   }
 
-  /* "PETSc/petscts.pxi":299
+  /* "PETSc/petscts.pxi":423
  *     cdef object monitorlist = Ts.get_attr('__monitor__')
  *     if monitorlist is None: return 0
  *     for (monitor, args, kargs) in monitorlist:             # <<<<<<<<<<<<<<
@@ -36192,26 +38120,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_ERR(20, 299, __pyx_L1_error)
+    __pyx_t_4 = -1; __pyx_t_1 = PyObject_GetIter(__pyx_v_monitorlist); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 423, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 299, __pyx_L1_error)
+    __pyx_t_5 = Py_TYPE(__pyx_t_1)->tp_iternext; if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 423, __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_ERR(20, 299, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __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, 423, __pyx_L1_error)
         #else
-        __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_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 423, __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_ERR(20, 299, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __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, 423, __pyx_L1_error)
         #else
-        __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_t_6 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 423, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
         #endif
       }
@@ -36220,8 +38148,8 @@ static int __pyx_f_8petsc4py_5PETSc_TS_Monitor(TS __pyx_v_ts, PetscInt __pyx_v_s
       if (unlikely(!__pyx_t_6)) {
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
-          if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(20, 299, __pyx_L1_error)
+          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
+          else __PYX_ERR(20, 423, __pyx_L1_error)
         }
         break;
       }
@@ -36229,7 +38157,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_Monitor(TS __pyx_v_ts, PetscInt __pyx_v_s
     }
     if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) {
       PyObject* sequence = __pyx_t_6;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -36237,9 +38165,9 @@ 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_ERR(20, 299, __pyx_L1_error)
+        __PYX_ERR(20, 423, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
@@ -36253,17 +38181,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_ERR(20, 299, __pyx_L1_error)
+      __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(20, 423, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(20, 299, __pyx_L1_error)
+      __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(20, 423, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
-      __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) __PYX_ERR(20, 299, __pyx_L1_error)
+      __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) __PYX_ERR(20, 423, __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_ERR(20, 299, __pyx_L1_error)
+      __pyx_t_10 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(20, 423, __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;
@@ -36273,7 +38201,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_ERR(20, 299, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_11(__pyx_t_10), 3) < 0) __PYX_ERR(20, 423, __pyx_L1_error)
       __pyx_t_11 = NULL;
       __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
       goto __pyx_L7_unpacking_done;
@@ -36281,7 +38209,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_ERR(20, 299, __pyx_L1_error)
+      __PYX_ERR(20, 423, __pyx_L1_error)
       __pyx_L7_unpacking_done:;
     }
     __Pyx_XDECREF_SET(__pyx_v_monitor, __pyx_t_7);
@@ -36291,18 +38219,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":300
+    /* "PETSc/petscts.pxi":424
  *     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_ERR(20, 300, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_step); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 424, __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_ERR(20, 300, __pyx_L1_error)
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_time); if (unlikely(!__pyx_t_9)) __PYX_ERR(20, 424, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_9);
-    __pyx_t_8 = PyTuple_New(4); if (unlikely(!__pyx_t_8)) __PYX_ERR(20, 300, __pyx_L1_error)
+    __pyx_t_8 = PyTuple_New(4); if (unlikely(!__pyx_t_8)) __PYX_ERR(20, 424, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_INCREF(((PyObject *)__pyx_v_Ts));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_Ts));
@@ -36316,30 +38244,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_ERR(20, 300, __pyx_L1_error)
+    __pyx_t_9 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_9)) __PYX_ERR(20, 424, __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_ERR(20, 300, __pyx_L1_error)
+    __pyx_t_6 = PyNumber_Add(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 424, __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_ERR(20, 300, __pyx_L1_error)
+      __PYX_ERR(20, 424, __pyx_L1_error)
     }
     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_t_9 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_9)) __PYX_ERR(20, 424, __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_ERR(20, 300, __pyx_L1_error)
+      __pyx_t_9 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(20, 424, __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_ERR(20, 300, __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, 424, __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":299
+    /* "PETSc/petscts.pxi":423
  *     cdef object monitorlist = Ts.get_attr('__monitor__')
  *     if monitorlist is None: return 0
  *     for (monitor, args, kargs) in monitorlist:             # <<<<<<<<<<<<<<
@@ -36349,7 +38277,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":301
+  /* "PETSc/petscts.pxi":425
  *     for (monitor, args, kargs) in monitorlist:
  *         monitor(Ts, toInt(step), toReal(time), Vu, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -36359,7 +38287,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":288
+  /* "PETSc/petscts.pxi":412
  * # -----------------------------------------------------------------------------
  * 
  * cdef int TS_Monitor(             # <<<<<<<<<<<<<<
@@ -36386,12 +38314,12 @@ static int __pyx_f_8petsc4py_5PETSc_TS_Monitor(TS __pyx_v_ts, PetscInt __pyx_v_s
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscts.pxi":305
+/* "PETSc/petscts.pxi":429
  * # -----------------------------------------------------------------------------
  * 
  * cdef int TS_PreStep(             # <<<<<<<<<<<<<<
@@ -36413,34 +38341,34 @@ static int __pyx_f_8petsc4py_5PETSc_TS_PreStep(TS __pyx_v_ts) {
   PyObject *__pyx_t_5 = NULL;
   PyObject *(*__pyx_t_6)(PyObject *);
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TS_PreStep", 0);
 
-  /* "PETSc/petscts.pxi":308
+  /* "PETSc/petscts.pxi":432
  *     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_ERR(20, 308, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 432, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Ts = ((struct PyPetscTSObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":309
+  /* "PETSc/petscts.pxi":433
  *     ) 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), ((char *)"__prestep__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 309, __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, 433, __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
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -36448,9 +38376,9 @@ 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_ERR(20, 309, __pyx_L1_error)
+      __PYX_ERR(20, 433, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
@@ -36464,17 +38392,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_ERR(20, 309, __pyx_L1_error)
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 433, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 309, __pyx_L1_error)
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 433, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(20, 309, __pyx_L1_error)
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(20, 433, __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(20, 309, __pyx_L1_error)
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 433, __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;
@@ -36484,7 +38412,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_ERR(20, 309, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(20, 433, __pyx_L1_error)
     __pyx_t_6 = NULL;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     goto __pyx_L4_unpacking_done;
@@ -36492,7 +38420,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_ERR(20, 309, __pyx_L1_error)
+    __PYX_ERR(20, 433, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_prestep = __pyx_t_2;
@@ -36502,42 +38430,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":310
+  /* "PETSc/petscts.pxi":434
  *     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_ERR(20, 310, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 434, __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_ERR(20, 310, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(20, 434, __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(20, 310, __pyx_L1_error)
+  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 434, __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(20, 310, __pyx_L1_error)
+    __PYX_ERR(20, 434, __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(20, 310, __pyx_L1_error)
+    __pyx_t_4 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_4)) __PYX_ERR(20, 434, __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(20, 310, __pyx_L1_error)
+    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(20, 434, __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_ERR(20, 310, __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, 434, __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":311
+  /* "PETSc/petscts.pxi":435
  *     (prestep, args, kargs) = Ts.get_attr('__prestep__')
  *     prestep(Ts, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -36547,7 +38475,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_PreStep(TS __pyx_v_ts) {
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscts.pxi":305
+  /* "PETSc/petscts.pxi":429
  * # -----------------------------------------------------------------------------
  * 
  * cdef int TS_PreStep(             # <<<<<<<<<<<<<<
@@ -36571,12 +38499,12 @@ static int __pyx_f_8petsc4py_5PETSc_TS_PreStep(TS __pyx_v_ts) {
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscts.pxi":313
+/* "PETSc/petscts.pxi":437
  *     return 0
  * 
  * cdef int TS_PostStep(             # <<<<<<<<<<<<<<
@@ -36598,34 +38526,34 @@ static int __pyx_f_8petsc4py_5PETSc_TS_PostStep(TS __pyx_v_ts) {
   PyObject *__pyx_t_5 = NULL;
   PyObject *(*__pyx_t_6)(PyObject *);
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TS_PostStep", 0);
 
-  /* "PETSc/petscts.pxi":316
+  /* "PETSc/petscts.pxi":440
  *     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_ERR(20, 316, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 440, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_Ts = ((struct PyPetscTSObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscts.pxi":317
+  /* "PETSc/petscts.pxi":441
  *     ) 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), ((char *)"__poststep__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 317, __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, 441, __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
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -36633,9 +38561,9 @@ 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_ERR(20, 317, __pyx_L1_error)
+      __PYX_ERR(20, 441, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
@@ -36649,17 +38577,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_ERR(20, 317, __pyx_L1_error)
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(20, 441, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 317, __pyx_L1_error)
+    __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 441, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(20, 317, __pyx_L1_error)
+    __pyx_t_4 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_4)) __PYX_ERR(20, 441, __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(20, 317, __pyx_L1_error)
+    __pyx_t_5 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 441, __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;
@@ -36669,7 +38597,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_ERR(20, 317, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_5), 3) < 0) __PYX_ERR(20, 441, __pyx_L1_error)
     __pyx_t_6 = NULL;
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     goto __pyx_L4_unpacking_done;
@@ -36677,7 +38605,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_ERR(20, 317, __pyx_L1_error)
+    __PYX_ERR(20, 441, __pyx_L1_error)
     __pyx_L4_unpacking_done:;
   }
   __pyx_v_poststep = __pyx_t_2;
@@ -36687,42 +38615,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":318
+  /* "PETSc/petscts.pxi":442
  *     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_ERR(20, 318, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 442, __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_ERR(20, 318, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(20, 442, __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(20, 318, __pyx_L1_error)
+  __pyx_t_3 = PyNumber_Add(__pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(20, 442, __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(20, 318, __pyx_L1_error)
+    __PYX_ERR(20, 442, __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(20, 318, __pyx_L1_error)
+    __pyx_t_4 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_4)) __PYX_ERR(20, 442, __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(20, 318, __pyx_L1_error)
+    __pyx_t_4 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(20, 442, __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_ERR(20, 318, __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, 442, __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":319
+  /* "PETSc/petscts.pxi":443
  *     (poststep, args, kargs) = Ts.get_attr('__poststep__')
  *     poststep(Ts, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -36732,7 +38660,7 @@ static int __pyx_f_8petsc4py_5PETSc_TS_PostStep(TS __pyx_v_ts) {
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscts.pxi":313
+  /* "PETSc/petscts.pxi":437
  *     return 0
  * 
  * cdef int TS_PostStep(             # <<<<<<<<<<<<<<
@@ -36756,7 +38684,1337 @@ static int __pyx_f_8petsc4py_5PETSc_TS_PostStep(TS __pyx_v_ts) {
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
+  #endif
+  return __pyx_r;
+}
+
+/* "PETSc/petscts.pxi":447
+ * # -----------------------------------------------------------------------------
+ * 
+ * cdef int TSAdjoint_CostIntegrand(             # <<<<<<<<<<<<<<
+ *     PetscTS   ts,
+ *     PetscReal t,
+ */
+
+static int __pyx_f_8petsc4py_5PETSc_TSAdjoint_CostIntegrand(TS __pyx_v_ts, PetscReal __pyx_v_t, Vec __pyx_v_y, Vec __pyx_v_r, void *__pyx_v_ctx) {
+  struct PyPetscTSObject *__pyx_v_Ts = 0;
+  struct PyPetscVecObject *__pyx_v_Yvec = 0;
+  struct PyPetscVecObject *__pyx_v_Rvec = 0;
+  PyObject *__pyx_v_context = 0;
+  PyObject *__pyx_v_rfunction = NULL;
+  CYTHON_UNUSED PyObject *__pyx_v__ = 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 *);
+  PyObject *__pyx_t_9 = NULL;
+  PyObject *__pyx_t_10 = NULL;
+  PyObject *__pyx_t_11 = NULL;
+  #ifdef WITH_THREAD
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+  #endif
+  __Pyx_RefNannySetupContext("TSAdjoint_CostIntegrand", 0);
+
+  /* "PETSc/petscts.pxi":454
+ *     void*     ctx,
+ *     ) except PETSC_ERR_PYTHON with gil:
+ *     cdef TS  Ts   = ref_TS(ts)             # <<<<<<<<<<<<<<
+ *     cdef Vec Yvec = ref_Vec(y)
+ *     cdef Vec Rvec = ref_Vec(r)
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 454, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_Ts = ((struct PyPetscTSObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscts.pxi":455
+ *     ) except PETSC_ERR_PYTHON with gil:
+ *     cdef TS  Ts   = ref_TS(ts)
+ *     cdef Vec Yvec = ref_Vec(y)             # <<<<<<<<<<<<<<
+ *     cdef Vec Rvec = ref_Vec(r)
+ *     cdef object context = Ts.get_attr('__costintegrand__')
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_y)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 455, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_Yvec = ((struct PyPetscVecObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscts.pxi":456
+ *     cdef TS  Ts   = ref_TS(ts)
+ *     cdef Vec Yvec = ref_Vec(y)
+ *     cdef Vec Rvec = ref_Vec(r)             # <<<<<<<<<<<<<<
+ *     cdef object context = Ts.get_attr('__costintegrand__')
+ *     if context is None and ctx != NULL: context = <object>ctx
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_r)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 456, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_Rvec = ((struct PyPetscVecObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscts.pxi":457
+ *     cdef Vec Yvec = ref_Vec(y)
+ *     cdef Vec Rvec = ref_Vec(r)
+ *     cdef object context = Ts.get_attr('__costintegrand__')             # <<<<<<<<<<<<<<
+ *     if context is None and ctx != NULL: context = <object>ctx
+ *     ((rfunction, _, _), args, kargs) = context
+ */
+  __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 *)"__costintegrand__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 457, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_context = __pyx_t_1;
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscts.pxi":458
+ *     cdef Vec Rvec = ref_Vec(r)
+ *     cdef object context = Ts.get_attr('__costintegrand__')
+ *     if context is None and ctx != NULL: context = <object>ctx             # <<<<<<<<<<<<<<
+ *     ((rfunction, _, _), args, kargs) = context
+ *     rfunction(Ts, toReal(t), Yvec, Rvec, *args, **kargs)
+ */
+  __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/petscts.pxi":459
+ *     cdef object context = Ts.get_attr('__costintegrand__')
+ *     if context is None and ctx != NULL: context = <object>ctx
+ *     ((rfunction, _, _), args, kargs) = context             # <<<<<<<<<<<<<<
+ *     rfunction(Ts, toReal(t), Yvec, Rvec, *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_PYPY
+    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(20, 459, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    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(20, 459, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 459, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 459, __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(20, 459, __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_L6_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_L6_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_L6_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_6);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(20, 459, __pyx_L1_error)
+    __pyx_t_8 = NULL;
+    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    goto __pyx_L7_unpacking_done;
+    __pyx_L6_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+    __pyx_t_8 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(20, 459, __pyx_L1_error)
+    __pyx_L7_unpacking_done:;
+  }
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    #if !CYTHON_COMPILING_IN_PYPY
+    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(20, 459, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1); 
+      __pyx_t_10 = PyTuple_GET_ITEM(sequence, 2); 
+    } else {
+      __pyx_t_7 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_9 = PyList_GET_ITEM(sequence, 1); 
+      __pyx_t_10 = PyList_GET_ITEM(sequence, 2); 
+    }
+    __Pyx_INCREF(__pyx_t_7);
+    __Pyx_INCREF(__pyx_t_9);
+    __Pyx_INCREF(__pyx_t_10);
+    #else
+    __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(20, 459, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_7);
+    __pyx_t_9 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(20, 459, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_9);
+    __pyx_t_10 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_10)) __PYX_ERR(20, 459, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_10);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_11 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_11)) __PYX_ERR(20, 459, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_11);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_8 = Py_TYPE(__pyx_t_11)->tp_iternext;
+    index = 0; __pyx_t_7 = __pyx_t_8(__pyx_t_11); if (unlikely(!__pyx_t_7)) goto __pyx_L8_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_7);
+    index = 1; __pyx_t_9 = __pyx_t_8(__pyx_t_11); if (unlikely(!__pyx_t_9)) goto __pyx_L8_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_9);
+    index = 2; __pyx_t_10 = __pyx_t_8(__pyx_t_11); if (unlikely(!__pyx_t_10)) goto __pyx_L8_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_10);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_11), 3) < 0) __PYX_ERR(20, 459, __pyx_L1_error)
+    __pyx_t_8 = NULL;
+    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+    goto __pyx_L9_unpacking_done;
+    __pyx_L8_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+    __pyx_t_8 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(20, 459, __pyx_L1_error)
+    __pyx_L9_unpacking_done:;
+  }
+  __pyx_v_rfunction = __pyx_t_7;
+  __pyx_t_7 = 0;
+  __pyx_v__ = __pyx_t_9;
+  __pyx_t_9 = 0;
+  __Pyx_DECREF_SET(__pyx_v__, __pyx_t_10);
+  __pyx_t_10 = 0;
+  __pyx_v_args = __pyx_t_5;
+  __pyx_t_5 = 0;
+  __pyx_v_kargs = __pyx_t_6;
+  __pyx_t_6 = 0;
+
+  /* "PETSc/petscts.pxi":460
+ *     if context is None and ctx != NULL: context = <object>ctx
+ *     ((rfunction, _, _), args, kargs) = context
+ *     rfunction(Ts, toReal(t), Yvec, Rvec, *args, **kargs)             # <<<<<<<<<<<<<<
+ *     return 0
+ * 
+ */
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_t); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 460, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 460, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_INCREF(((PyObject *)__pyx_v_Ts));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_Ts));
+  PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_Ts));
+  __Pyx_GIVEREF(__pyx_t_6);
+  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6);
+  __Pyx_INCREF(((PyObject *)__pyx_v_Yvec));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_Yvec));
+  PyTuple_SET_ITEM(__pyx_t_5, 2, ((PyObject *)__pyx_v_Yvec));
+  __Pyx_INCREF(((PyObject *)__pyx_v_Rvec));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_Rvec));
+  PyTuple_SET_ITEM(__pyx_t_5, 3, ((PyObject *)__pyx_v_Rvec));
+  __pyx_t_6 = 0;
+  __pyx_t_6 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 460, __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_ERR(20, 460, __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_ERR(20, 460, __pyx_L1_error)
+  }
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_6 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 460, __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_ERR(20, 460, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+  }
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_rfunction, __pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 460, __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":461
+ *     ((rfunction, _, _), args, kargs) = context
+ *     rfunction(Ts, toReal(t), Yvec, Rvec, *args, **kargs)
+ *     return 0             # <<<<<<<<<<<<<<
+ * 
+ * cdef int TSAdjoint_CostIntegrand_DY(
+ */
+  __pyx_r = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/petscts.pxi":447
+ * # -----------------------------------------------------------------------------
+ * 
+ * cdef int TSAdjoint_CostIntegrand(             # <<<<<<<<<<<<<<
+ *     PetscTS   ts,
+ *     PetscReal t,
+ */
+
+  /* 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_XDECREF(__pyx_t_9);
+  __Pyx_XDECREF(__pyx_t_10);
+  __Pyx_XDECREF(__pyx_t_11);
+  __Pyx_AddTraceback("petsc4py.PETSc.TSAdjoint_CostIntegrand", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = PETSC_ERR_PYTHON;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_Ts);
+  __Pyx_XDECREF((PyObject *)__pyx_v_Yvec);
+  __Pyx_XDECREF((PyObject *)__pyx_v_Rvec);
+  __Pyx_XDECREF(__pyx_v_context);
+  __Pyx_XDECREF(__pyx_v_rfunction);
+  __Pyx_XDECREF(__pyx_v__);
+  __Pyx_XDECREF(__pyx_v_args);
+  __Pyx_XDECREF(__pyx_v_kargs);
+  __Pyx_RefNannyFinishContext();
+  #ifdef WITH_THREAD
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
+  #endif
+  return __pyx_r;
+}
+
+/* "PETSc/petscts.pxi":463
+ *     return 0
+ * 
+ * cdef int TSAdjoint_CostIntegrand_DY(             # <<<<<<<<<<<<<<
+ *     PetscTS   ts,
+ *     PetscReal t,
+ */
+
+static int __pyx_f_8petsc4py_5PETSc_TSAdjoint_CostIntegrand_DY(TS __pyx_v_ts, PetscReal __pyx_v_t, Vec __pyx_v_y, Vec *__pyx_v_drdy, void *__pyx_v_ctx) {
+  struct PyPetscTSObject *__pyx_v_Ts = 0;
+  struct PyPetscVecObject *__pyx_v_Yvec = 0;
+  PetscInt __pyx_v_i;
+  PetscInt __pyx_v_n;
+  PyObject *__pyx_v_vecs = 0;
+  PyObject *__pyx_v_context = 0;
+  CYTHON_UNUSED PyObject *__pyx_v__ = NULL;
+  PyObject *__pyx_v_drdyfunction = 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;
+  PetscInt __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  int __pyx_t_5;
+  int __pyx_t_6;
+  int __pyx_t_7;
+  PyObject *__pyx_t_8 = NULL;
+  PyObject *__pyx_t_9 = NULL;
+  PyObject *(*__pyx_t_10)(PyObject *);
+  PyObject *__pyx_t_11 = NULL;
+  PyObject *__pyx_t_12 = NULL;
+  PyObject *__pyx_t_13 = NULL;
+  #ifdef WITH_THREAD
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+  #endif
+  __Pyx_RefNannySetupContext("TSAdjoint_CostIntegrand_DY", 0);
+
+  /* "PETSc/petscts.pxi":470
+ *     void*     ctx,
+ *     ) except PETSC_ERR_PYTHON with gil:
+ *     cdef TS  Ts   = ref_TS(ts)             # <<<<<<<<<<<<<<
+ *     cdef Vec Yvec = ref_Vec(y)
+ *     cdef PetscInt i = 0, n = 0
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 470, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_Ts = ((struct PyPetscTSObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscts.pxi":471
+ *     ) except PETSC_ERR_PYTHON with gil:
+ *     cdef TS  Ts   = ref_TS(ts)
+ *     cdef Vec Yvec = ref_Vec(y)             # <<<<<<<<<<<<<<
+ *     cdef PetscInt i = 0, n = 0
+ *     CHKERR( TSGetCostGradients(ts, &n, NULL, NULL) )
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_y)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 471, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_Yvec = ((struct PyPetscVecObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscts.pxi":472
+ *     cdef TS  Ts   = ref_TS(ts)
+ *     cdef Vec Yvec = ref_Vec(y)
+ *     cdef PetscInt i = 0, n = 0             # <<<<<<<<<<<<<<
+ *     CHKERR( TSGetCostGradients(ts, &n, NULL, NULL) )
+ *     cdef list vecs = [ref_Vec(drdy[i]) for i from 0 <= i < n]
+ */
+  __pyx_v_i = 0;
+  __pyx_v_n = 0;
+
+  /* "PETSc/petscts.pxi":473
+ *     cdef Vec Yvec = ref_Vec(y)
+ *     cdef PetscInt i = 0, n = 0
+ *     CHKERR( TSGetCostGradients(ts, &n, NULL, NULL) )             # <<<<<<<<<<<<<<
+ *     cdef list vecs = [ref_Vec(drdy[i]) for i from 0 <= i < n]
+ *     cdef object context = Ts.get_attr('__costintegrand__')
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetCostGradients(__pyx_v_ts, (&__pyx_v_n), NULL, NULL)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(20, 473, __pyx_L1_error)
+
+  /* "PETSc/petscts.pxi":474
+ *     cdef PetscInt i = 0, n = 0
+ *     CHKERR( TSGetCostGradients(ts, &n, NULL, NULL) )
+ *     cdef list vecs = [ref_Vec(drdy[i]) for i from 0 <= i < n]             # <<<<<<<<<<<<<<
+ *     cdef object context = Ts.get_attr('__costintegrand__')
+ *     if context is None and ctx != NULL: context = <object>ctx
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 474, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __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_Vec((__pyx_v_drdy[__pyx_v_i]))); if (unlikely(!__pyx_t_4)) __PYX_ERR(20, 474, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) __PYX_ERR(20, 474, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  }
+  __pyx_v_vecs = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscts.pxi":475
+ *     CHKERR( TSGetCostGradients(ts, &n, NULL, NULL) )
+ *     cdef list vecs = [ref_Vec(drdy[i]) for i from 0 <= i < n]
+ *     cdef object context = Ts.get_attr('__costintegrand__')             # <<<<<<<<<<<<<<
+ *     if context is None and ctx != NULL: context = <object>ctx
+ *     ((_, drdyfunction, _), args, kargs) = context
+ */
+  __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 *)"__costintegrand__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 475, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_context = __pyx_t_1;
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscts.pxi":476
+ *     cdef list vecs = [ref_Vec(drdy[i]) for i from 0 <= i < n]
+ *     cdef object context = Ts.get_attr('__costintegrand__')
+ *     if context is None and ctx != NULL: context = <object>ctx             # <<<<<<<<<<<<<<
+ *     ((_, drdyfunction, _), args, kargs) = context
+ *     drdyfunction(Ts, toReal(t), Yvec, vecs, *args, **kargs)
+ */
+  __pyx_t_6 = (__pyx_v_context == Py_None);
+  __pyx_t_7 = (__pyx_t_6 != 0);
+  if (__pyx_t_7) {
+  } else {
+    __pyx_t_5 = __pyx_t_7;
+    goto __pyx_L6_bool_binop_done;
+  }
+  __pyx_t_7 = ((__pyx_v_ctx != NULL) != 0);
+  __pyx_t_5 = __pyx_t_7;
+  __pyx_L6_bool_binop_done:;
+  if (__pyx_t_5) {
+    __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/petscts.pxi":477
+ *     cdef object context = Ts.get_attr('__costintegrand__')
+ *     if context is None and ctx != NULL: context = <object>ctx
+ *     ((_, drdyfunction, _), args, kargs) = context             # <<<<<<<<<<<<<<
+ *     drdyfunction(Ts, toReal(t), Yvec, vecs, *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_PYPY
+    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(20, 477, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
+      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 2); 
+    } else {
+      __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
+      __pyx_t_8 = PyList_GET_ITEM(sequence, 2); 
+    }
+    __Pyx_INCREF(__pyx_t_1);
+    __Pyx_INCREF(__pyx_t_4);
+    __Pyx_INCREF(__pyx_t_8);
+    #else
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 477, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(20, 477, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_8 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_8)) __PYX_ERR(20, 477, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_8);
+    #endif
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_9 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_9)) __PYX_ERR(20, 477, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_9);
+    __pyx_t_10 = Py_TYPE(__pyx_t_9)->tp_iternext;
+    index = 0; __pyx_t_1 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_1)) goto __pyx_L8_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_1);
+    index = 1; __pyx_t_4 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_4)) goto __pyx_L8_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_4);
+    index = 2; __pyx_t_8 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L8_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_8);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 3) < 0) __PYX_ERR(20, 477, __pyx_L1_error)
+    __pyx_t_10 = NULL;
+    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+    goto __pyx_L9_unpacking_done;
+    __pyx_L8_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+    __pyx_t_10 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(20, 477, __pyx_L1_error)
+    __pyx_L9_unpacking_done:;
+  }
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    #if !CYTHON_COMPILING_IN_PYPY
+    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(20, 477, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); 
+      __pyx_t_12 = PyTuple_GET_ITEM(sequence, 2); 
+    } else {
+      __pyx_t_9 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_11 = PyList_GET_ITEM(sequence, 1); 
+      __pyx_t_12 = PyList_GET_ITEM(sequence, 2); 
+    }
+    __Pyx_INCREF(__pyx_t_9);
+    __Pyx_INCREF(__pyx_t_11);
+    __Pyx_INCREF(__pyx_t_12);
+    #else
+    __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(20, 477, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_9);
+    __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(20, 477, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_11);
+    __pyx_t_12 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_12)) __PYX_ERR(20, 477, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_12);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_13 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_13)) __PYX_ERR(20, 477, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_13);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_10 = Py_TYPE(__pyx_t_13)->tp_iternext;
+    index = 0; __pyx_t_9 = __pyx_t_10(__pyx_t_13); if (unlikely(!__pyx_t_9)) goto __pyx_L10_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_9);
+    index = 1; __pyx_t_11 = __pyx_t_10(__pyx_t_13); if (unlikely(!__pyx_t_11)) goto __pyx_L10_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_11);
+    index = 2; __pyx_t_12 = __pyx_t_10(__pyx_t_13); if (unlikely(!__pyx_t_12)) goto __pyx_L10_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_12);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_13), 3) < 0) __PYX_ERR(20, 477, __pyx_L1_error)
+    __pyx_t_10 = NULL;
+    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+    goto __pyx_L11_unpacking_done;
+    __pyx_L10_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+    __pyx_t_10 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(20, 477, __pyx_L1_error)
+    __pyx_L11_unpacking_done:;
+  }
+  __pyx_v__ = __pyx_t_9;
+  __pyx_t_9 = 0;
+  __pyx_v_drdyfunction = __pyx_t_11;
+  __pyx_t_11 = 0;
+  __Pyx_DECREF_SET(__pyx_v__, __pyx_t_12);
+  __pyx_t_12 = 0;
+  __pyx_v_args = __pyx_t_4;
+  __pyx_t_4 = 0;
+  __pyx_v_kargs = __pyx_t_8;
+  __pyx_t_8 = 0;
+
+  /* "PETSc/petscts.pxi":478
+ *     if context is None and ctx != NULL: context = <object>ctx
+ *     ((_, drdyfunction, _), args, kargs) = context
+ *     drdyfunction(Ts, toReal(t), Yvec, vecs, *args, **kargs)             # <<<<<<<<<<<<<<
+ *     return 0
+ * 
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_t); if (unlikely(!__pyx_t_8)) __PYX_ERR(20, 478, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(20, 478, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_INCREF(((PyObject *)__pyx_v_Ts));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_Ts));
+  PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_Ts));
+  __Pyx_GIVEREF(__pyx_t_8);
+  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_8);
+  __Pyx_INCREF(((PyObject *)__pyx_v_Yvec));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_Yvec));
+  PyTuple_SET_ITEM(__pyx_t_4, 2, ((PyObject *)__pyx_v_Yvec));
+  __Pyx_INCREF(__pyx_v_vecs);
+  __Pyx_GIVEREF(__pyx_v_vecs);
+  PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_v_vecs);
+  __pyx_t_8 = 0;
+  __pyx_t_8 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_8)) __PYX_ERR(20, 478, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  __pyx_t_1 = PyNumber_Add(__pyx_t_4, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 478, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  if (unlikely(__pyx_v_kargs == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
+    __PYX_ERR(20, 478, __pyx_L1_error)
+  }
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_8 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_8)) __PYX_ERR(20, 478, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_8);
+  } else {
+    __pyx_t_8 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(20, 478, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_8);
+  }
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_drdyfunction, __pyx_t_1, __pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(20, 478, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+  /* "PETSc/petscts.pxi":479
+ *     ((_, drdyfunction, _), args, kargs) = context
+ *     drdyfunction(Ts, toReal(t), Yvec, vecs, *args, **kargs)
+ *     return 0             # <<<<<<<<<<<<<<
+ * 
+ * cdef int TSAdjoint_CostIntegrand_DP(
+ */
+  __pyx_r = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/petscts.pxi":463
+ *     return 0
+ * 
+ * cdef int TSAdjoint_CostIntegrand_DY(             # <<<<<<<<<<<<<<
+ *     PetscTS   ts,
+ *     PetscReal t,
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_8);
+  __Pyx_XDECREF(__pyx_t_9);
+  __Pyx_XDECREF(__pyx_t_11);
+  __Pyx_XDECREF(__pyx_t_12);
+  __Pyx_XDECREF(__pyx_t_13);
+  __Pyx_AddTraceback("petsc4py.PETSc.TSAdjoint_CostIntegrand_DY", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = PETSC_ERR_PYTHON;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_Ts);
+  __Pyx_XDECREF((PyObject *)__pyx_v_Yvec);
+  __Pyx_XDECREF(__pyx_v_vecs);
+  __Pyx_XDECREF(__pyx_v_context);
+  __Pyx_XDECREF(__pyx_v__);
+  __Pyx_XDECREF(__pyx_v_drdyfunction);
+  __Pyx_XDECREF(__pyx_v_args);
+  __Pyx_XDECREF(__pyx_v_kargs);
+  __Pyx_RefNannyFinishContext();
+  #ifdef WITH_THREAD
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
+  #endif
+  return __pyx_r;
+}
+
+/* "PETSc/petscts.pxi":481
+ *     return 0
+ * 
+ * cdef int TSAdjoint_CostIntegrand_DP(             # <<<<<<<<<<<<<<
+ *     PetscTS   ts,
+ *     PetscReal t,
+ */
+
+static int __pyx_f_8petsc4py_5PETSc_TSAdjoint_CostIntegrand_DP(TS __pyx_v_ts, PetscReal __pyx_v_t, Vec __pyx_v_y, Vec *__pyx_v_drdp, void *__pyx_v_ctx) {
+  struct PyPetscTSObject *__pyx_v_Ts = 0;
+  struct PyPetscVecObject *__pyx_v_Yvec = 0;
+  PetscInt __pyx_v_i;
+  PetscInt __pyx_v_n;
+  PyObject *__pyx_v_vecs = 0;
+  PyObject *__pyx_v_context = 0;
+  CYTHON_UNUSED PyObject *__pyx_v__ = NULL;
+  PyObject *__pyx_v_drdpfunction = 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;
+  PetscInt __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  int __pyx_t_5;
+  int __pyx_t_6;
+  int __pyx_t_7;
+  PyObject *__pyx_t_8 = NULL;
+  PyObject *__pyx_t_9 = NULL;
+  PyObject *(*__pyx_t_10)(PyObject *);
+  PyObject *__pyx_t_11 = NULL;
+  PyObject *__pyx_t_12 = NULL;
+  PyObject *__pyx_t_13 = NULL;
+  #ifdef WITH_THREAD
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+  #endif
+  __Pyx_RefNannySetupContext("TSAdjoint_CostIntegrand_DP", 0);
+
+  /* "PETSc/petscts.pxi":488
+ *     void*     ctx,
+ *     ) except PETSC_ERR_PYTHON with gil:
+ *     cdef TS  Ts   = ref_TS(ts)             # <<<<<<<<<<<<<<
+ *     cdef Vec Yvec = ref_Vec(y)
+ *     cdef PetscInt i = 0, n = 0
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_TS(__pyx_v_ts)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 488, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_Ts = ((struct PyPetscTSObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscts.pxi":489
+ *     ) except PETSC_ERR_PYTHON with gil:
+ *     cdef TS  Ts   = ref_TS(ts)
+ *     cdef Vec Yvec = ref_Vec(y)             # <<<<<<<<<<<<<<
+ *     cdef PetscInt i = 0, n = 0
+ *     CHKERR( TSGetCostGradients(ts, &n, NULL, NULL) )
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_y)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 489, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_Yvec = ((struct PyPetscVecObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscts.pxi":490
+ *     cdef TS  Ts   = ref_TS(ts)
+ *     cdef Vec Yvec = ref_Vec(y)
+ *     cdef PetscInt i = 0, n = 0             # <<<<<<<<<<<<<<
+ *     CHKERR( TSGetCostGradients(ts, &n, NULL, NULL) )
+ *     cdef list vecs = [ref_Vec(drdp[i]) for i from 0 <= i < n]
+ */
+  __pyx_v_i = 0;
+  __pyx_v_n = 0;
+
+  /* "PETSc/petscts.pxi":491
+ *     cdef Vec Yvec = ref_Vec(y)
+ *     cdef PetscInt i = 0, n = 0
+ *     CHKERR( TSGetCostGradients(ts, &n, NULL, NULL) )             # <<<<<<<<<<<<<<
+ *     cdef list vecs = [ref_Vec(drdp[i]) for i from 0 <= i < n]
+ *     cdef object context = Ts.get_attr('__costintegrand__')
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetCostGradients(__pyx_v_ts, (&__pyx_v_n), NULL, NULL)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(20, 491, __pyx_L1_error)
+
+  /* "PETSc/petscts.pxi":492
+ *     cdef PetscInt i = 0, n = 0
+ *     CHKERR( TSGetCostGradients(ts, &n, NULL, NULL) )
+ *     cdef list vecs = [ref_Vec(drdp[i]) for i from 0 <= i < n]             # <<<<<<<<<<<<<<
+ *     cdef object context = Ts.get_attr('__costintegrand__')
+ *     if context is None and ctx != NULL: context = <object>ctx
+ */
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 492, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __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_Vec((__pyx_v_drdp[__pyx_v_i]))); if (unlikely(!__pyx_t_4)) __PYX_ERR(20, 492, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_4))) __PYX_ERR(20, 492, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  }
+  __pyx_v_vecs = ((PyObject*)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscts.pxi":493
+ *     CHKERR( TSGetCostGradients(ts, &n, NULL, NULL) )
+ *     cdef list vecs = [ref_Vec(drdp[i]) for i from 0 <= i < n]
+ *     cdef object context = Ts.get_attr('__costintegrand__')             # <<<<<<<<<<<<<<
+ *     if context is None and ctx != NULL: context = <object>ctx
+ *     ((_, _, drdpfunction), args, kargs) = context
+ */
+  __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 *)"__costintegrand__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 493, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_context = __pyx_t_1;
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscts.pxi":494
+ *     cdef list vecs = [ref_Vec(drdp[i]) for i from 0 <= i < n]
+ *     cdef object context = Ts.get_attr('__costintegrand__')
+ *     if context is None and ctx != NULL: context = <object>ctx             # <<<<<<<<<<<<<<
+ *     ((_, _, drdpfunction), args, kargs) = context
+ *     drdpfunction(Ts, toReal(t), Yvec, vecs, *args, **kargs)
+ */
+  __pyx_t_6 = (__pyx_v_context == Py_None);
+  __pyx_t_7 = (__pyx_t_6 != 0);
+  if (__pyx_t_7) {
+  } else {
+    __pyx_t_5 = __pyx_t_7;
+    goto __pyx_L6_bool_binop_done;
+  }
+  __pyx_t_7 = ((__pyx_v_ctx != NULL) != 0);
+  __pyx_t_5 = __pyx_t_7;
+  __pyx_L6_bool_binop_done:;
+  if (__pyx_t_5) {
+    __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/petscts.pxi":495
+ *     cdef object context = Ts.get_attr('__costintegrand__')
+ *     if context is None and ctx != NULL: context = <object>ctx
+ *     ((_, _, drdpfunction), args, kargs) = context             # <<<<<<<<<<<<<<
+ *     drdpfunction(Ts, toReal(t), Yvec, vecs, *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_PYPY
+    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(20, 495, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
+      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 2); 
+    } else {
+      __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
+      __pyx_t_8 = PyList_GET_ITEM(sequence, 2); 
+    }
+    __Pyx_INCREF(__pyx_t_1);
+    __Pyx_INCREF(__pyx_t_4);
+    __Pyx_INCREF(__pyx_t_8);
+    #else
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 495, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(20, 495, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_8 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_8)) __PYX_ERR(20, 495, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_8);
+    #endif
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_9 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_9)) __PYX_ERR(20, 495, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_9);
+    __pyx_t_10 = Py_TYPE(__pyx_t_9)->tp_iternext;
+    index = 0; __pyx_t_1 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_1)) goto __pyx_L8_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_1);
+    index = 1; __pyx_t_4 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_4)) goto __pyx_L8_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_4);
+    index = 2; __pyx_t_8 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L8_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_8);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 3) < 0) __PYX_ERR(20, 495, __pyx_L1_error)
+    __pyx_t_10 = NULL;
+    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+    goto __pyx_L9_unpacking_done;
+    __pyx_L8_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+    __pyx_t_10 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(20, 495, __pyx_L1_error)
+    __pyx_L9_unpacking_done:;
+  }
+  if ((likely(PyTuple_CheckExact(__pyx_t_1))) || (PyList_CheckExact(__pyx_t_1))) {
+    PyObject* sequence = __pyx_t_1;
+    #if !CYTHON_COMPILING_IN_PYPY
+    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(20, 495, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); 
+      __pyx_t_12 = PyTuple_GET_ITEM(sequence, 2); 
+    } else {
+      __pyx_t_9 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_11 = PyList_GET_ITEM(sequence, 1); 
+      __pyx_t_12 = PyList_GET_ITEM(sequence, 2); 
+    }
+    __Pyx_INCREF(__pyx_t_9);
+    __Pyx_INCREF(__pyx_t_11);
+    __Pyx_INCREF(__pyx_t_12);
+    #else
+    __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(20, 495, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_9);
+    __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(20, 495, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_11);
+    __pyx_t_12 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_12)) __PYX_ERR(20, 495, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_12);
+    #endif
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_13 = PyObject_GetIter(__pyx_t_1); if (unlikely(!__pyx_t_13)) __PYX_ERR(20, 495, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_13);
+    __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+    __pyx_t_10 = Py_TYPE(__pyx_t_13)->tp_iternext;
+    index = 0; __pyx_t_9 = __pyx_t_10(__pyx_t_13); if (unlikely(!__pyx_t_9)) goto __pyx_L10_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_9);
+    index = 1; __pyx_t_11 = __pyx_t_10(__pyx_t_13); if (unlikely(!__pyx_t_11)) goto __pyx_L10_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_11);
+    index = 2; __pyx_t_12 = __pyx_t_10(__pyx_t_13); if (unlikely(!__pyx_t_12)) goto __pyx_L10_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_12);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_13), 3) < 0) __PYX_ERR(20, 495, __pyx_L1_error)
+    __pyx_t_10 = NULL;
+    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+    goto __pyx_L11_unpacking_done;
+    __pyx_L10_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
+    __pyx_t_10 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(20, 495, __pyx_L1_error)
+    __pyx_L11_unpacking_done:;
+  }
+  __pyx_v__ = __pyx_t_9;
+  __pyx_t_9 = 0;
+  __Pyx_DECREF_SET(__pyx_v__, __pyx_t_11);
+  __pyx_t_11 = 0;
+  __pyx_v_drdpfunction = __pyx_t_12;
+  __pyx_t_12 = 0;
+  __pyx_v_args = __pyx_t_4;
+  __pyx_t_4 = 0;
+  __pyx_v_kargs = __pyx_t_8;
+  __pyx_t_8 = 0;
+
+  /* "PETSc/petscts.pxi":496
+ *     if context is None and ctx != NULL: context = <object>ctx
+ *     ((_, _, drdpfunction), args, kargs) = context
+ *     drdpfunction(Ts, toReal(t), Yvec, vecs, *args, **kargs)             # <<<<<<<<<<<<<<
+ *     return 0
+ * 
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_t); if (unlikely(!__pyx_t_8)) __PYX_ERR(20, 496, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(20, 496, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_INCREF(((PyObject *)__pyx_v_Ts));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_Ts));
+  PyTuple_SET_ITEM(__pyx_t_4, 0, ((PyObject *)__pyx_v_Ts));
+  __Pyx_GIVEREF(__pyx_t_8);
+  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_8);
+  __Pyx_INCREF(((PyObject *)__pyx_v_Yvec));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_Yvec));
+  PyTuple_SET_ITEM(__pyx_t_4, 2, ((PyObject *)__pyx_v_Yvec));
+  __Pyx_INCREF(__pyx_v_vecs);
+  __Pyx_GIVEREF(__pyx_v_vecs);
+  PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_v_vecs);
+  __pyx_t_8 = 0;
+  __pyx_t_8 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_8)) __PYX_ERR(20, 496, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  __pyx_t_1 = PyNumber_Add(__pyx_t_4, __pyx_t_8); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 496, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  if (unlikely(__pyx_v_kargs == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
+    __PYX_ERR(20, 496, __pyx_L1_error)
+  }
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_8 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_8)) __PYX_ERR(20, 496, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_8);
+  } else {
+    __pyx_t_8 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(20, 496, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_8);
+  }
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_v_drdpfunction, __pyx_t_1, __pyx_t_8); if (unlikely(!__pyx_t_4)) __PYX_ERR(20, 496, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+  /* "PETSc/petscts.pxi":497
+ *     ((_, _, drdpfunction), args, kargs) = context
+ *     drdpfunction(Ts, toReal(t), Yvec, vecs, *args, **kargs)
+ *     return 0             # <<<<<<<<<<<<<<
+ * 
+ * cdef int TSAdjoint_RHSJacobian(
+ */
+  __pyx_r = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/petscts.pxi":481
+ *     return 0
+ * 
+ * cdef int TSAdjoint_CostIntegrand_DP(             # <<<<<<<<<<<<<<
+ *     PetscTS   ts,
+ *     PetscReal t,
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_8);
+  __Pyx_XDECREF(__pyx_t_9);
+  __Pyx_XDECREF(__pyx_t_11);
+  __Pyx_XDECREF(__pyx_t_12);
+  __Pyx_XDECREF(__pyx_t_13);
+  __Pyx_AddTraceback("petsc4py.PETSc.TSAdjoint_CostIntegrand_DP", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = PETSC_ERR_PYTHON;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_Ts);
+  __Pyx_XDECREF((PyObject *)__pyx_v_Yvec);
+  __Pyx_XDECREF(__pyx_v_vecs);
+  __Pyx_XDECREF(__pyx_v_context);
+  __Pyx_XDECREF(__pyx_v__);
+  __Pyx_XDECREF(__pyx_v_drdpfunction);
+  __Pyx_XDECREF(__pyx_v_args);
+  __Pyx_XDECREF(__pyx_v_kargs);
+  __Pyx_RefNannyFinishContext();
+  #ifdef WITH_THREAD
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
+  #endif
+  return __pyx_r;
+}
+
+/* "PETSc/petscts.pxi":499
+ *     return 0
+ * 
+ * cdef int TSAdjoint_RHSJacobian(             # <<<<<<<<<<<<<<
+ *     PetscTS   ts,
+ *     PetscReal t,
+ */
+
+static int __pyx_f_8petsc4py_5PETSc_TSAdjoint_RHSJacobian(TS __pyx_v_ts, PetscReal __pyx_v_t, Vec __pyx_v_x, Mat __pyx_v_J, void *__pyx_v_ctx) {
+  struct PyPetscTSObject *__pyx_v_Ts = 0;
+  struct PyPetscVecObject *__pyx_v_Xvec = 0;
+  struct PyPetscMatObject *__pyx_v_Jmat = 0;
+  PyObject *__pyx_v_context = 0;
+  PyObject *__pyx_v_adjointjacobian = 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 = __Pyx_PyGILState_Ensure();
+  #endif
+  __Pyx_RefNannySetupContext("TSAdjoint_RHSJacobian", 0);
+
+  /* "PETSc/petscts.pxi":506
+ *     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_ERR(20, 506, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_Ts = ((struct PyPetscTSObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscts.pxi":507
+ *     ) 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 object context = Ts.get_attr('__adjointrhsjacobian__')
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_x)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 507, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_Xvec = ((struct PyPetscVecObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscts.pxi":508
+ *     cdef TS  Ts   = ref_TS(ts)
+ *     cdef Vec Xvec = ref_Vec(x)
+ *     cdef Mat Jmat = ref_Mat(J)             # <<<<<<<<<<<<<<
+ *     cdef object context = Ts.get_attr('__adjointrhsjacobian__')
+ *     if context is None and ctx != NULL: context = <object>ctx
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Mat(__pyx_v_J)); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 508, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_Jmat = ((struct PyPetscMatObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscts.pxi":509
+ *     cdef Vec Xvec = ref_Vec(x)
+ *     cdef Mat Jmat = ref_Mat(J)
+ *     cdef object context = Ts.get_attr('__adjointrhsjacobian__')             # <<<<<<<<<<<<<<
+ *     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), ((char *)"__adjointrhsjacobian__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(20, 509, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_context = __pyx_t_1;
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscts.pxi":510
+ *     cdef Mat Jmat = ref_Mat(J)
+ *     cdef object context = Ts.get_attr('__adjointrhsjacobian__')
+ *     if context is None and ctx != NULL: context = <object>ctx             # <<<<<<<<<<<<<<
+ *     assert context is not None and type(context) is tuple # sanity check
+ *     (adjointjacobian, 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/petscts.pxi":511
+ *     cdef object context = Ts.get_attr('__adjointrhsjacobian__')
+ *     if context is None and ctx != NULL: context = <object>ctx
+ *     assert context is not None and type(context) is tuple # sanity check             # <<<<<<<<<<<<<<
+ *     (adjointjacobian, args, kargs) = context
+ *     adjointjacobian(Ts, toReal(t), Xvec, Jmat, *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(20, 511, __pyx_L1_error)
+    }
+  }
+  #endif
+
+  /* "PETSc/petscts.pxi":512
+ *     if context is None and ctx != NULL: context = <object>ctx
+ *     assert context is not None and type(context) is tuple # sanity check
+ *     (adjointjacobian, args, kargs) = context             # <<<<<<<<<<<<<<
+ *     adjointjacobian(Ts, toReal(t), Xvec, Jmat, *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_PYPY
+    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(20, 512, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    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(20, 512, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 512, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 512, __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(20, 512, __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(20, 512, __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(20, 512, __pyx_L1_error)
+    __pyx_L9_unpacking_done:;
+  }
+  __pyx_v_adjointjacobian = __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/petscts.pxi":513
+ *     assert context is not None and type(context) is tuple # sanity check
+ *     (adjointjacobian, args, kargs) = context
+ *     adjointjacobian(Ts, toReal(t), Xvec, Jmat, *args, **kargs)             # <<<<<<<<<<<<<<
+ *     return 0
+ * 
+ */
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_t); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 513, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __pyx_t_5 = PyTuple_New(4); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 513, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_INCREF(((PyObject *)__pyx_v_Ts));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_Ts));
+  PyTuple_SET_ITEM(__pyx_t_5, 0, ((PyObject *)__pyx_v_Ts));
+  __Pyx_GIVEREF(__pyx_t_6);
+  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6);
+  __Pyx_INCREF(((PyObject *)__pyx_v_Xvec));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_Xvec));
+  PyTuple_SET_ITEM(__pyx_t_5, 2, ((PyObject *)__pyx_v_Xvec));
+  __Pyx_INCREF(((PyObject *)__pyx_v_Jmat));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_Jmat));
+  PyTuple_SET_ITEM(__pyx_t_5, 3, ((PyObject *)__pyx_v_Jmat));
+  __pyx_t_6 = 0;
+  __pyx_t_6 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 513, __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_ERR(20, 513, __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_ERR(20, 513, __pyx_L1_error)
+  }
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_6 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_6)) __PYX_ERR(20, 513, __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_ERR(20, 513, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+  }
+  __pyx_t_5 = __Pyx_PyObject_Call(__pyx_v_adjointjacobian, __pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_5)) __PYX_ERR(20, 513, __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":514
+ *     (adjointjacobian, args, kargs) = context
+ *     adjointjacobian(Ts, toReal(t), Xvec, Jmat, *args, **kargs)
+ *     return 0             # <<<<<<<<<<<<<<
+ * 
+ * # -----------------------------------------------------------------------------
+ */
+  __pyx_r = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/petscts.pxi":499
+ *     return 0
+ * 
+ * cdef int TSAdjoint_RHSJacobian(             # <<<<<<<<<<<<<<
+ *     PetscTS   ts,
+ *     PetscReal t,
+ */
+
+  /* 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.TSAdjoint_RHSJacobian", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = PETSC_ERR_PYTHON;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_Ts);
+  __Pyx_XDECREF((PyObject *)__pyx_v_Xvec);
+  __Pyx_XDECREF((PyObject *)__pyx_v_Jmat);
+  __Pyx_XDECREF(__pyx_v_context);
+  __Pyx_XDECREF(__pyx_v_adjointjacobian);
+  __Pyx_XDECREF(__pyx_v_args);
+  __Pyx_XDECREF(__pyx_v_kargs);
+  __Pyx_RefNannyFinishContext();
+  #ifdef WITH_THREAD
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
@@ -36868,7 +40126,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Objective(Tao __pyx_v__tao, Vec __pyx_v_
   PyObject *(*__pyx_t_6)(PyObject *);
   PetscReal __pyx_t_7;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TAO_Objective", 0);
 
@@ -36907,7 +40165,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Objective(Tao __pyx_v__tao, Vec __pyx_v_
   __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
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -36917,7 +40175,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Objective(Tao __pyx_v__tao, Vec __pyx_v_
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
       __PYX_ERR(21, 168, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
@@ -36984,7 +40242,7 @@ 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_ERR(21, 169, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_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_ERR(21, 169, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
@@ -37015,7 +40273,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Objective(Tao __pyx_v__tao, Vec __pyx_v_
  *     return 0
  * 
  */
-  __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_t_7 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_retv); if (unlikely(__pyx_t_7 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(21, 170, __pyx_L1_error)
   (__pyx_v__f[0]) = __pyx_t_7;
 
   /* "PETSc/petsctao.pxi":171
@@ -37054,7 +40312,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Objective(Tao __pyx_v__tao, Vec __pyx_v_
   __Pyx_XDECREF(__pyx_v_retv);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
@@ -37083,7 +40341,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_SeparableObjective(Tao __pyx_v__tao, Vec
   PyObject *__pyx_t_5 = NULL;
   PyObject *(*__pyx_t_6)(PyObject *);
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TAO_SeparableObjective", 0);
 
@@ -37134,7 +40392,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_SeparableObjective(Tao __pyx_v__tao, Vec
   __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
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -37144,7 +40402,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_SeparableObjective(Tao __pyx_v__tao, Vec
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
       __PYX_ERR(21, 180, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
@@ -37214,7 +40472,7 @@ 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_ERR(21, 181, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_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_ERR(21, 181, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
@@ -37273,7 +40531,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_SeparableObjective(Tao __pyx_v__tao, Vec
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
@@ -37302,7 +40560,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Gradient(Tao __pyx_v__tao, Vec __pyx_v__
   PyObject *__pyx_t_5 = NULL;
   PyObject *(*__pyx_t_6)(PyObject *);
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TAO_Gradient", 0);
 
@@ -37353,7 +40611,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Gradient(Tao __pyx_v__tao, Vec __pyx_v__
   __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
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -37363,7 +40621,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Gradient(Tao __pyx_v__tao, Vec __pyx_v__
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
       __PYX_ERR(21, 191, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
@@ -37433,7 +40691,7 @@ 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_ERR(21, 192, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_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_ERR(21, 192, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
@@ -37492,7 +40750,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Gradient(Tao __pyx_v__tao, Vec __pyx_v__
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
@@ -37523,7 +40781,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_ObjGrad(Tao __pyx_v__tao, Vec __pyx_v__x
   PyObject *(*__pyx_t_6)(PyObject *);
   PetscReal __pyx_t_7;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TAO_ObjGrad", 0);
 
@@ -37574,7 +40832,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_ObjGrad(Tao __pyx_v__tao, Vec __pyx_v__x
   __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
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -37584,7 +40842,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_ObjGrad(Tao __pyx_v__tao, Vec __pyx_v__x
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
       __PYX_ERR(21, 203, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
@@ -37654,7 +40912,7 @@ 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_ERR(21, 204, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_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_ERR(21, 204, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
@@ -37685,7 +40943,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_ObjGrad(Tao __pyx_v__tao, Vec __pyx_v__x
  *     return 0
  * 
  */
-  __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_t_7 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_retv); if (unlikely(__pyx_t_7 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(21, 205, __pyx_L1_error)
   (__pyx_v__f[0]) = __pyx_t_7;
 
   /* "PETSc/petsctao.pxi":206
@@ -37725,7 +40983,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_ObjGrad(Tao __pyx_v__tao, Vec __pyx_v__x
   __Pyx_XDECREF(__pyx_v_retv);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
@@ -37754,7 +41012,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Constraints(Tao __pyx_v__tao, Vec __pyx_
   PyObject *__pyx_t_5 = NULL;
   PyObject *(*__pyx_t_6)(PyObject *);
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TAO_Constraints", 0);
 
@@ -37805,7 +41063,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Constraints(Tao __pyx_v__tao, Vec __pyx_
   __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
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -37815,7 +41073,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Constraints(Tao __pyx_v__tao, Vec __pyx_
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
       __PYX_ERR(21, 215, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
@@ -37885,7 +41143,7 @@ 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_ERR(21, 216, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_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_ERR(21, 216, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
@@ -37944,7 +41202,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Constraints(Tao __pyx_v__tao, Vec __pyx_
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
@@ -37973,7 +41231,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_VarBounds(Tao __pyx_v__tao, Vec __pyx_v_
   PyObject *__pyx_t_5 = NULL;
   PyObject *(*__pyx_t_6)(PyObject *);
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TAO_VarBounds", 0);
 
@@ -38024,7 +41282,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_VarBounds(Tao __pyx_v__tao, Vec __pyx_v_
   __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
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -38034,7 +41292,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_VarBounds(Tao __pyx_v__tao, Vec __pyx_v_
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
       __PYX_ERR(21, 226, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
@@ -38104,7 +41362,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_VarBounds(Tao __pyx_v__tao, Vec __pyx_v_
   __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_t_4 = __Pyx_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_ERR(21, 227, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
@@ -38163,7 +41421,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_VarBounds(Tao __pyx_v__tao, Vec __pyx_v_
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
@@ -38193,7 +41451,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Hessian(Tao __pyx_v__tao, Vec __pyx_v__x
   PyObject *__pyx_t_5 = NULL;
   PyObject *(*__pyx_t_6)(PyObject *);
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TAO_Hessian", 0);
 
@@ -38256,7 +41514,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Hessian(Tao __pyx_v__tao, Vec __pyx_v__x
   __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
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -38266,7 +41524,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Hessian(Tao __pyx_v__tao, Vec __pyx_v__x
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
       __PYX_ERR(21, 239, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
@@ -38339,7 +41597,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Hessian(Tao __pyx_v__tao, Vec __pyx_v__x
   __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_ERR(21, 240, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_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_ERR(21, 240, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
@@ -38399,7 +41657,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Hessian(Tao __pyx_v__tao, Vec __pyx_v__x
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
@@ -38429,7 +41687,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Jacobian(Tao __pyx_v__tao, Vec __pyx_v__
   PyObject *__pyx_t_5 = NULL;
   PyObject *(*__pyx_t_6)(PyObject *);
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TAO_Jacobian", 0);
 
@@ -38492,7 +41750,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Jacobian(Tao __pyx_v__tao, Vec __pyx_v__
   __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
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -38502,7 +41760,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Jacobian(Tao __pyx_v__tao, Vec __pyx_v__
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
       __PYX_ERR(21, 252, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
@@ -38575,7 +41833,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Jacobian(Tao __pyx_v__tao, Vec __pyx_v__
   __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_ERR(21, 253, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_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_ERR(21, 253, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
@@ -38635,7 +41893,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Jacobian(Tao __pyx_v__tao, Vec __pyx_v__
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
@@ -38666,7 +41924,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_JacobianState(Tao __pyx_v__tao, Vec __py
   PyObject *__pyx_t_5 = NULL;
   PyObject *(*__pyx_t_6)(PyObject *);
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TAO_JacobianState", 0);
 
@@ -38741,7 +41999,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_JacobianState(Tao __pyx_v__tao, Vec __py
   __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
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -38751,7 +42009,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_JacobianState(Tao __pyx_v__tao, Vec __py
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
       __PYX_ERR(21, 267, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
@@ -38827,7 +42085,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_JacobianState(Tao __pyx_v__tao, Vec __py
   __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_t_4 = __Pyx_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);
@@ -38888,7 +42146,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_JacobianState(Tao __pyx_v__tao, Vec __py
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
@@ -38917,7 +42175,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_JacobianDesign(Tao __pyx_v__tao, Vec __p
   PyObject *__pyx_t_5 = NULL;
   PyObject *(*__pyx_t_6)(PyObject *);
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TAO_JacobianDesign", 0);
 
@@ -38968,7 +42226,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_JacobianDesign(Tao __pyx_v__tao, Vec __p
   __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
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -38978,7 +42236,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_JacobianDesign(Tao __pyx_v__tao, Vec __p
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
       __PYX_ERR(21, 278, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
@@ -39048,7 +42306,7 @@ 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_ERR(21, 279, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_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_ERR(21, 279, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
@@ -39107,7 +42365,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_JacobianDesign(Tao __pyx_v__tao, Vec __p
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
@@ -39142,7 +42400,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Converged(Tao __pyx_v__tao, CYTHON_UNUSE
   int __pyx_t_11;
   TaoConvergedReason __pyx_t_12;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TAO_Converged", 0);
 
@@ -39153,8 +42411,8 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Converged(Tao __pyx_v__tao, CYTHON_UNUSE
  *     # 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_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)
+  __pyx_t_1 = TaoDefaultConvergenceTest(__pyx_v__tao, NULL); if (unlikely(__pyx_t_1 == ((int)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 == ((int)-1))) __PYX_ERR(21, 285, __pyx_L1_error)
 
   /* "PETSc/petsctao.pxi":287
  *     CHKERR( TaoDefaultConvergenceTest(_tao, NULL) )
@@ -39179,7 +42437,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Converged(Tao __pyx_v__tao, CYTHON_UNUSE
   __Pyx_GOTREF(__pyx_t_3);
   if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
     PyObject* sequence = __pyx_t_3;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -39189,7 +42447,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Converged(Tao __pyx_v__tao, CYTHON_UNUSE
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
       __PYX_ERR(21, 288, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
@@ -39253,7 +42511,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Converged(Tao __pyx_v__tao, CYTHON_UNUSE
   __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_ERR(21, 289, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_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_ERR(21, 289, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
@@ -39434,7 +42692,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Converged(Tao __pyx_v__tao, CYTHON_UNUSE
  *     return 0
  * 
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetConvergedReason(__pyx_v__tao, __pyx_v_creason)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(21, 301, __pyx_L1_error)
 
   /* "PETSc/petsctao.pxi":302
  *         assert creason <= TAO_CONVERGED_USER
@@ -39471,7 +42729,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Converged(Tao __pyx_v__tao, CYTHON_UNUSE
   __Pyx_XDECREF(__pyx_v_reason);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
@@ -39504,7 +42762,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Monitor(Tao __pyx_v__tao, CYTHON_UNUSED
   PyObject *__pyx_t_10 = NULL;
   PyObject *(*__pyx_t_11)(PyObject *);
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("TAO_Monitor", 0);
 
@@ -39565,7 +42823,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Monitor(Tao __pyx_v__tao, CYTHON_UNUSED
     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
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         __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_ERR(21, 309, __pyx_L1_error)
@@ -39573,7 +42831,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Monitor(Tao __pyx_v__tao, CYTHON_UNUSED
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         __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_ERR(21, 309, __pyx_L1_error)
@@ -39585,7 +42843,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Monitor(Tao __pyx_v__tao, CYTHON_UNUSED
       if (unlikely(!__pyx_t_6)) {
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
-          if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
+          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
           else __PYX_ERR(21, 309, __pyx_L1_error)
         }
         break;
@@ -39594,7 +42852,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Monitor(Tao __pyx_v__tao, CYTHON_UNUSED
     }
     if ((likely(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) {
       PyObject* sequence = __pyx_t_6;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -39604,7 +42862,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Monitor(Tao __pyx_v__tao, CYTHON_UNUSED
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
         __PYX_ERR(21, 309, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
@@ -39668,7 +42926,7 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Monitor(Tao __pyx_v__tao, CYTHON_UNUSED
     __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_ERR(21, 310, __pyx_L1_error)
+    __pyx_t_9 = __Pyx_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_ERR(21, 310, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
@@ -39737,12 +42995,12 @@ static int __pyx_f_8petsc4py_5PETSc_TAO_Monitor(Tao __pyx_v__tao, CYTHON_UNUSED
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscdm.pxi":108
+/* "PETSc/petscdm.pxi":125
  * # --------------------------------------------------------------------
  * 
  * cdef inline PetscDMBoundaryType asBoundaryType(object boundary) \             # <<<<<<<<<<<<<<
@@ -39760,7 +43018,7 @@ static CYTHON_INLINE DMBoundaryType __pyx_f_8petsc4py_5PETSc_asBoundaryType(PyOb
   DMBoundaryType __pyx_t_5;
   __Pyx_RefNannySetupContext("asBoundaryType", 0);
 
-  /* "PETSc/petscdm.pxi":110
+  /* "PETSc/petscdm.pxi":127
  * cdef inline PetscDMBoundaryType asBoundaryType(object boundary) \
  *     except <PetscDMBoundaryType>(-1):
  *     if boundary is None:             # <<<<<<<<<<<<<<
@@ -39771,7 +43029,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":111
+    /* "PETSc/petscdm.pxi":128
  *     except <PetscDMBoundaryType>(-1):
  *     if boundary is None:
  *         return DM_BOUNDARY_NONE             # <<<<<<<<<<<<<<
@@ -39781,7 +43039,7 @@ static CYTHON_INLINE DMBoundaryType __pyx_f_8petsc4py_5PETSc_asBoundaryType(PyOb
     __pyx_r = DM_BOUNDARY_NONE;
     goto __pyx_L0;
 
-    /* "PETSc/petscdm.pxi":110
+    /* "PETSc/petscdm.pxi":127
  * cdef inline PetscDMBoundaryType asBoundaryType(object boundary) \
  *     except <PetscDMBoundaryType>(-1):
  *     if boundary is None:             # <<<<<<<<<<<<<<
@@ -39790,7 +43048,7 @@ static CYTHON_INLINE DMBoundaryType __pyx_f_8petsc4py_5PETSc_asBoundaryType(PyOb
  */
   }
 
-  /* "PETSc/petscdm.pxi":112
+  /* "PETSc/petscdm.pxi":129
  *     if boundary is None:
  *         return DM_BOUNDARY_NONE
  *     if isinstance(boundary, str):             # <<<<<<<<<<<<<<
@@ -39801,17 +43059,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":113
+    /* "PETSc/petscdm.pxi":130
  *         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_ERR(22, 113, __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, 130, __pyx_L1_error)
     if (__pyx_t_1) {
 
-      /* "PETSc/petscdm.pxi":114
+      /* "PETSc/petscdm.pxi":131
  *     if isinstance(boundary, str):
  *         if boundary == 'none':
  *             return DM_BOUNDARY_NONE             # <<<<<<<<<<<<<<
@@ -39821,7 +43079,7 @@ static CYTHON_INLINE DMBoundaryType __pyx_f_8petsc4py_5PETSc_asBoundaryType(PyOb
       __pyx_r = DM_BOUNDARY_NONE;
       goto __pyx_L0;
 
-      /* "PETSc/petscdm.pxi":113
+      /* "PETSc/petscdm.pxi":130
  *         return DM_BOUNDARY_NONE
  *     if isinstance(boundary, str):
  *         if boundary == 'none':             # <<<<<<<<<<<<<<
@@ -39830,17 +43088,17 @@ static CYTHON_INLINE DMBoundaryType __pyx_f_8petsc4py_5PETSc_asBoundaryType(PyOb
  */
     }
 
-    /* "PETSc/petscdm.pxi":115
+    /* "PETSc/petscdm.pxi":132
  *         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_ERR(22, 115, __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, 132, __pyx_L1_error)
     if (__pyx_t_1) {
 
-      /* "PETSc/petscdm.pxi":116
+      /* "PETSc/petscdm.pxi":133
  *             return DM_BOUNDARY_NONE
  *         elif boundary == 'ghosted':
  *             return DM_BOUNDARY_GHOSTED             # <<<<<<<<<<<<<<
@@ -39850,7 +43108,7 @@ static CYTHON_INLINE DMBoundaryType __pyx_f_8petsc4py_5PETSc_asBoundaryType(PyOb
       __pyx_r = DM_BOUNDARY_GHOSTED;
       goto __pyx_L0;
 
-      /* "PETSc/petscdm.pxi":115
+      /* "PETSc/petscdm.pxi":132
  *         if boundary == 'none':
  *             return DM_BOUNDARY_NONE
  *         elif boundary == 'ghosted':             # <<<<<<<<<<<<<<
@@ -39859,17 +43117,17 @@ static CYTHON_INLINE DMBoundaryType __pyx_f_8petsc4py_5PETSc_asBoundaryType(PyOb
  */
     }
 
-    /* "PETSc/petscdm.pxi":117
+    /* "PETSc/petscdm.pxi":134
  *         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_ERR(22, 117, __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, 134, __pyx_L1_error)
     if (__pyx_t_1) {
 
-      /* "PETSc/petscdm.pxi":118
+      /* "PETSc/petscdm.pxi":135
  *             return DM_BOUNDARY_GHOSTED
  *         elif boundary == 'mirror':
  *             return DM_BOUNDARY_MIRROR             # <<<<<<<<<<<<<<
@@ -39879,7 +43137,7 @@ static CYTHON_INLINE DMBoundaryType __pyx_f_8petsc4py_5PETSc_asBoundaryType(PyOb
       __pyx_r = DM_BOUNDARY_MIRROR;
       goto __pyx_L0;
 
-      /* "PETSc/petscdm.pxi":117
+      /* "PETSc/petscdm.pxi":134
  *         elif boundary == 'ghosted':
  *             return DM_BOUNDARY_GHOSTED
  *         elif boundary == 'mirror':             # <<<<<<<<<<<<<<
@@ -39888,17 +43146,17 @@ static CYTHON_INLINE DMBoundaryType __pyx_f_8petsc4py_5PETSc_asBoundaryType(PyOb
  */
     }
 
-    /* "PETSc/petscdm.pxi":119
+    /* "PETSc/petscdm.pxi":136
  *         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_ERR(22, 119, __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, 136, __pyx_L1_error)
     if (__pyx_t_1) {
 
-      /* "PETSc/petscdm.pxi":120
+      /* "PETSc/petscdm.pxi":137
  *             return DM_BOUNDARY_MIRROR
  *         elif boundary == 'periodic':
  *             return DM_BOUNDARY_PERIODIC             # <<<<<<<<<<<<<<
@@ -39908,7 +43166,7 @@ static CYTHON_INLINE DMBoundaryType __pyx_f_8petsc4py_5PETSc_asBoundaryType(PyOb
       __pyx_r = DM_BOUNDARY_PERIODIC;
       goto __pyx_L0;
 
-      /* "PETSc/petscdm.pxi":119
+      /* "PETSc/petscdm.pxi":136
  *         elif boundary == 'mirror':
  *             return DM_BOUNDARY_MIRROR
  *         elif boundary == 'periodic':             # <<<<<<<<<<<<<<
@@ -39917,17 +43175,17 @@ static CYTHON_INLINE DMBoundaryType __pyx_f_8petsc4py_5PETSc_asBoundaryType(PyOb
  */
     }
 
-    /* "PETSc/petscdm.pxi":121
+    /* "PETSc/petscdm.pxi":138
  *         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_ERR(22, 121, __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, 138, __pyx_L1_error)
     if (__pyx_t_1) {
 
-      /* "PETSc/petscdm.pxi":122
+      /* "PETSc/petscdm.pxi":139
  *             return DM_BOUNDARY_PERIODIC
  *         elif boundary == 'twist':
  *             return DM_BOUNDARY_TWIST             # <<<<<<<<<<<<<<
@@ -39937,7 +43195,7 @@ static CYTHON_INLINE DMBoundaryType __pyx_f_8petsc4py_5PETSc_asBoundaryType(PyOb
       __pyx_r = DM_BOUNDARY_TWIST;
       goto __pyx_L0;
 
-      /* "PETSc/petscdm.pxi":121
+      /* "PETSc/petscdm.pxi":138
  *         elif boundary == 'periodic':
  *             return DM_BOUNDARY_PERIODIC
  *         elif boundary == 'twist':             # <<<<<<<<<<<<<<
@@ -39946,7 +43204,7 @@ static CYTHON_INLINE DMBoundaryType __pyx_f_8petsc4py_5PETSc_asBoundaryType(PyOb
  */
     }
 
-    /* "PETSc/petscdm.pxi":124
+    /* "PETSc/petscdm.pxi":141
  *             return DM_BOUNDARY_TWIST
  *         else:
  *             raise ValueError("unknown boundary type: %s" % boundary)             # <<<<<<<<<<<<<<
@@ -39954,22 +43212,22 @@ static CYTHON_INLINE DMBoundaryType __pyx_f_8petsc4py_5PETSc_asBoundaryType(PyOb
  * 
  */
     /*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_t_3 = __Pyx_PyString_Format(__pyx_kp_s_unknown_boundary_type_s, __pyx_v_boundary); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 141, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
-      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(22, 124, __pyx_L1_error)
+      __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(22, 141, __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_ERR(22, 124, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_4, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 141, __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_ERR(22, 124, __pyx_L1_error)
+      __PYX_ERR(22, 141, __pyx_L1_error)
     }
 
-    /* "PETSc/petscdm.pxi":112
+    /* "PETSc/petscdm.pxi":129
  *     if boundary is None:
  *         return DM_BOUNDARY_NONE
  *     if isinstance(boundary, str):             # <<<<<<<<<<<<<<
@@ -39978,18 +43236,18 @@ static CYTHON_INLINE DMBoundaryType __pyx_f_8petsc4py_5PETSc_asBoundaryType(PyOb
  */
   }
 
-  /* "PETSc/petscdm.pxi":125
+  /* "PETSc/petscdm.pxi":142
  *         else:
  *             raise ValueError("unknown boundary type: %s" % boundary)
  *     return boundary             # <<<<<<<<<<<<<<
  * 
  * cdef inline PetscInt asBoundary(object boundary,
  */
-  __pyx_t_5 = ((DMBoundaryType)__Pyx_PyInt_As_DMBoundaryType(__pyx_v_boundary)); if (unlikely(PyErr_Occurred())) __PYX_ERR(22, 125, __pyx_L1_error)
+  __pyx_t_5 = ((DMBoundaryType)__Pyx_PyInt_As_DMBoundaryType(__pyx_v_boundary)); if (unlikely(PyErr_Occurred())) __PYX_ERR(22, 142, __pyx_L1_error)
   __pyx_r = __pyx_t_5;
   goto __pyx_L0;
 
-  /* "PETSc/petscdm.pxi":108
+  /* "PETSc/petscdm.pxi":125
  * # --------------------------------------------------------------------
  * 
  * cdef inline PetscDMBoundaryType asBoundaryType(object boundary) \             # <<<<<<<<<<<<<<
@@ -40008,7 +43266,7 @@ static CYTHON_INLINE DMBoundaryType __pyx_f_8petsc4py_5PETSc_asBoundaryType(PyOb
   return __pyx_r;
 }
 
-/* "PETSc/petscdm.pxi":127
+/* "PETSc/petscdm.pxi":144
  *     return boundary
  * 
  * cdef inline PetscInt asBoundary(object boundary,             # <<<<<<<<<<<<<<
@@ -40036,7 +43294,7 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
   __Pyx_RefNannySetupContext("asBoundary", 0);
   __Pyx_INCREF(__pyx_v_boundary);
 
-  /* "PETSc/petscdm.pxi":131
+  /* "PETSc/petscdm.pxi":148
  *                                 PetscDMBoundaryType *_y,
  *                                 PetscDMBoundaryType *_z) except? -1:
  *     cdef PetscInt dim = PETSC_DECIDE             # <<<<<<<<<<<<<<
@@ -40045,7 +43303,7 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
  */
   __pyx_v_dim = PETSC_DECIDE;
 
-  /* "PETSc/petscdm.pxi":132
+  /* "PETSc/petscdm.pxi":149
  *                                 PetscDMBoundaryType *_z) except? -1:
  *     cdef PetscInt dim = PETSC_DECIDE
  *     cdef object x=None, y=None, z=None             # <<<<<<<<<<<<<<
@@ -40059,7 +43317,7 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
   __Pyx_INCREF(Py_None);
   __pyx_v_z = Py_None;
 
-  /* "PETSc/petscdm.pxi":133
+  /* "PETSc/petscdm.pxi":150
  *     cdef PetscInt dim = PETSC_DECIDE
  *     cdef object x=None, y=None, z=None
  *     if (boundary is None or             # <<<<<<<<<<<<<<
@@ -40074,7 +43332,7 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
     goto __pyx_L4_bool_binop_done;
   }
 
-  /* "PETSc/petscdm.pxi":134
+  /* "PETSc/petscdm.pxi":151
  *     cdef object x=None, y=None, z=None
  *     if (boundary is None or
  *         isinstance(boundary, str) or             # <<<<<<<<<<<<<<
@@ -40089,7 +43347,7 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
     goto __pyx_L4_bool_binop_done;
   }
 
-  /* "PETSc/petscdm.pxi":135
+  /* "PETSc/petscdm.pxi":152
  *     if (boundary is None or
  *         isinstance(boundary, str) or
  *         isinstance(boundary, int)):             # <<<<<<<<<<<<<<
@@ -40101,7 +43359,7 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
   __pyx_t_1 = __pyx_t_3;
   __pyx_L4_bool_binop_done:;
 
-  /* "PETSc/petscdm.pxi":133
+  /* "PETSc/petscdm.pxi":150
  *     cdef PetscInt dim = PETSC_DECIDE
  *     cdef object x=None, y=None, z=None
  *     if (boundary is None or             # <<<<<<<<<<<<<<
@@ -40110,19 +43368,19 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
  */
   if (__pyx_t_1) {
 
-    /* "PETSc/petscdm.pxi":136
+    /* "PETSc/petscdm.pxi":153
  *         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)-1L))) __PYX_ERR(22, 136, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asBoundaryType(__pyx_v_boundary); if (unlikely(__pyx_t_4 == ((DMBoundaryType)((DMBoundaryType)-1L)))) __PYX_ERR(22, 153, __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
+    /* "PETSc/petscdm.pxi":150
  *     cdef PetscInt dim = PETSC_DECIDE
  *     cdef object x=None, y=None, z=None
  *     if (boundary is None or             # <<<<<<<<<<<<<<
@@ -40132,7 +43390,7 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
     goto __pyx_L3;
   }
 
-  /* "PETSc/petscdm.pxi":138
+  /* "PETSc/petscdm.pxi":155
  *         _x[0] = _y[0] = _z[0] = asBoundaryType(boundary)
  *     else:
  *         boundary = tuple(boundary)             # <<<<<<<<<<<<<<
@@ -40140,43 +43398,45 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
  *         if   dim == 0: pass
  */
   /*else*/ {
-    __pyx_t_5 = PySequence_Tuple(__pyx_v_boundary); if (unlikely(!__pyx_t_5)) __PYX_ERR(22, 138, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PySequence_Tuple(__pyx_v_boundary); if (unlikely(!__pyx_t_5)) __PYX_ERR(22, 155, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF_SET(__pyx_v_boundary, __pyx_t_5);
     __pyx_t_5 = 0;
 
-    /* "PETSc/petscdm.pxi":139
+    /* "PETSc/petscdm.pxi":156
  *     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_ERR(22, 139, __pyx_L1_error)
+    __pyx_t_6 = PyObject_Length(__pyx_v_boundary); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(22, 156, __pyx_L1_error)
     __pyx_v_dim = ((PetscInt)__pyx_t_6);
 
-    /* "PETSc/petscdm.pxi":140
+    /* "PETSc/petscdm.pxi":157
  *         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;
+    __pyx_t_1 = ((__pyx_v_dim == 0) != 0);
+    if (__pyx_t_1) {
+      goto __pyx_L7;
+    }
 
-      /* "PETSc/petscdm.pxi":141
+    /* "PETSc/petscdm.pxi":158
  *         dim = <PetscInt>len(boundary)
  *         if   dim == 0: pass
  *         elif dim == 1: (x,) = boundary             # <<<<<<<<<<<<<<
  *         elif dim == 2: (x, y) = boundary
  *         elif dim == 3: (x, y, z) = boundary
  */
-      case 1:
+    __pyx_t_1 = ((__pyx_v_dim == 1) != 0);
+    if (__pyx_t_1) {
       if ((likely(PyTuple_CheckExact(__pyx_v_boundary))) || (PyList_CheckExact(__pyx_v_boundary))) {
         PyObject* sequence = __pyx_v_boundary;
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if !CYTHON_COMPILING_IN_PYPY
         Py_ssize_t size = Py_SIZE(sequence);
         #else
         Py_ssize_t size = PySequence_Size(sequence);
@@ -40184,9 +43444,9 @@ 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_ERR(22, 141, __pyx_L1_error)
+          __PYX_ERR(22, 158, __pyx_L1_error)
         }
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         if (likely(PyTuple_CheckExact(sequence))) {
           __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
         } else {
@@ -40194,42 +43454,44 @@ 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_ERR(22, 141, __pyx_L1_error)
+        __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(22, 158, __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_ERR(22, 141, __pyx_L1_error)
+        __pyx_t_7 = PyObject_GetIter(__pyx_v_boundary); if (unlikely(!__pyx_t_7)) __PYX_ERR(22, 158, __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;
+        index = 0; __pyx_t_5 = __pyx_t_8(__pyx_t_7); if (unlikely(!__pyx_t_5)) goto __pyx_L8_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_5);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 1) < 0) __PYX_ERR(22, 141, __pyx_L1_error)
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 1) < 0) __PYX_ERR(22, 158, __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:;
+        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(22, 141, __pyx_L1_error)
-        __pyx_L8_unpacking_done:;
+        __PYX_ERR(22, 158, __pyx_L1_error)
+        __pyx_L9_unpacking_done:;
       }
       __Pyx_DECREF_SET(__pyx_v_x, __pyx_t_5);
       __pyx_t_5 = 0;
-      break;
+      goto __pyx_L7;
+    }
 
-      /* "PETSc/petscdm.pxi":142
+    /* "PETSc/petscdm.pxi":159
  *         if   dim == 0: pass
  *         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)
  */
-      case 2:
+    __pyx_t_1 = ((__pyx_v_dim == 2) != 0);
+    if (__pyx_t_1) {
       if ((likely(PyTuple_CheckExact(__pyx_v_boundary))) || (PyList_CheckExact(__pyx_v_boundary))) {
         PyObject* sequence = __pyx_v_boundary;
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if !CYTHON_COMPILING_IN_PYPY
         Py_ssize_t size = Py_SIZE(sequence);
         #else
         Py_ssize_t size = PySequence_Size(sequence);
@@ -40237,9 +43499,9 @@ 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_ERR(22, 142, __pyx_L1_error)
+          __PYX_ERR(22, 159, __pyx_L1_error)
         }
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         if (likely(PyTuple_CheckExact(sequence))) {
           __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
           __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); 
@@ -40250,48 +43512,50 @@ 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_ERR(22, 142, __pyx_L1_error)
+        __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(22, 159, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
-        __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(22, 142, __pyx_L1_error)
+        __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(22, 159, __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_ERR(22, 142, __pyx_L1_error)
+        __pyx_t_9 = PyObject_GetIter(__pyx_v_boundary); if (unlikely(!__pyx_t_9)) __PYX_ERR(22, 159, __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;
+        index = 0; __pyx_t_5 = __pyx_t_8(__pyx_t_9); if (unlikely(!__pyx_t_5)) goto __pyx_L10_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;
+        index = 1; __pyx_t_7 = __pyx_t_8(__pyx_t_9); if (unlikely(!__pyx_t_7)) goto __pyx_L10_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_7);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_9), 2) < 0) __PYX_ERR(22, 142, __pyx_L1_error)
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_9), 2) < 0) __PYX_ERR(22, 159, __pyx_L1_error)
         __pyx_t_8 = NULL;
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-        goto __pyx_L10_unpacking_done;
-        __pyx_L9_unpacking_failed:;
+        goto __pyx_L11_unpacking_done;
+        __pyx_L10_unpacking_failed:;
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         __pyx_t_8 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        __PYX_ERR(22, 142, __pyx_L1_error)
-        __pyx_L10_unpacking_done:;
+        __PYX_ERR(22, 159, __pyx_L1_error)
+        __pyx_L11_unpacking_done:;
       }
       __Pyx_DECREF_SET(__pyx_v_x, __pyx_t_5);
       __pyx_t_5 = 0;
       __Pyx_DECREF_SET(__pyx_v_y, __pyx_t_7);
       __pyx_t_7 = 0;
-      break;
+      goto __pyx_L7;
+    }
 
-      /* "PETSc/petscdm.pxi":143
+    /* "PETSc/petscdm.pxi":160
  *         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)
  */
-      case 3:
+    __pyx_t_1 = ((__pyx_v_dim == 3) != 0);
+    if (__pyx_t_1) {
       if ((likely(PyTuple_CheckExact(__pyx_v_boundary))) || (PyList_CheckExact(__pyx_v_boundary))) {
         PyObject* sequence = __pyx_v_boundary;
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if !CYTHON_COMPILING_IN_PYPY
         Py_ssize_t size = Py_SIZE(sequence);
         #else
         Py_ssize_t size = PySequence_Size(sequence);
@@ -40299,9 +43563,9 @@ 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_ERR(22, 143, __pyx_L1_error)
+          __PYX_ERR(22, 160, __pyx_L1_error)
         }
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         if (likely(PyTuple_CheckExact(sequence))) {
           __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); 
           __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
@@ -40315,34 +43579,34 @@ 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_ERR(22, 143, __pyx_L1_error)
+        __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(22, 160, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
-        __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(22, 143, __pyx_L1_error)
+        __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(22, 160, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_5);
-        __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) __PYX_ERR(22, 143, __pyx_L1_error)
+        __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) __PYX_ERR(22, 160, __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_ERR(22, 143, __pyx_L1_error)
+        __pyx_t_10 = PyObject_GetIter(__pyx_v_boundary); if (unlikely(!__pyx_t_10)) __PYX_ERR(22, 160, __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;
+        index = 0; __pyx_t_7 = __pyx_t_8(__pyx_t_10); if (unlikely(!__pyx_t_7)) goto __pyx_L12_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_7);
-        index = 1; __pyx_t_5 = __pyx_t_8(__pyx_t_10); if (unlikely(!__pyx_t_5)) goto __pyx_L11_unpacking_failed;
+        index = 1; __pyx_t_5 = __pyx_t_8(__pyx_t_10); if (unlikely(!__pyx_t_5)) goto __pyx_L12_unpacking_failed;
         __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;
+        index = 2; __pyx_t_9 = __pyx_t_8(__pyx_t_10); if (unlikely(!__pyx_t_9)) goto __pyx_L12_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_9);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_10), 3) < 0) __PYX_ERR(22, 143, __pyx_L1_error)
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_10), 3) < 0) __PYX_ERR(22, 160, __pyx_L1_error)
         __pyx_t_8 = NULL;
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
-        goto __pyx_L12_unpacking_done;
-        __pyx_L11_unpacking_failed:;
+        goto __pyx_L13_unpacking_done;
+        __pyx_L12_unpacking_failed:;
         __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
         __pyx_t_8 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        __PYX_ERR(22, 143, __pyx_L1_error)
-        __pyx_L12_unpacking_done:;
+        __PYX_ERR(22, 160, __pyx_L1_error)
+        __pyx_L13_unpacking_done:;
       }
       __Pyx_DECREF_SET(__pyx_v_x, __pyx_t_7);
       __pyx_t_7 = 0;
@@ -40350,11 +43614,10 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
       __pyx_t_5 = 0;
       __Pyx_DECREF_SET(__pyx_v_z, __pyx_t_9);
       __pyx_t_9 = 0;
-      break;
-      default: break;
     }
+    __pyx_L7:;
 
-    /* "PETSc/petscdm.pxi":144
+    /* "PETSc/petscdm.pxi":161
  *         elif dim == 2: (x, y) = boundary
  *         elif dim == 3: (x, y, z) = boundary
  *         if dim >= 1: _x[0] = asBoundaryType(x)             # <<<<<<<<<<<<<<
@@ -40363,11 +43626,11 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
  */
     __pyx_t_1 = ((__pyx_v_dim >= 1) != 0);
     if (__pyx_t_1) {
-      __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_t_4 = __pyx_f_8petsc4py_5PETSc_asBoundaryType(__pyx_v_x); if (unlikely(__pyx_t_4 == ((DMBoundaryType)((DMBoundaryType)-1L)))) __PYX_ERR(22, 161, __pyx_L1_error)
       (__pyx_v__x[0]) = __pyx_t_4;
     }
 
-    /* "PETSc/petscdm.pxi":145
+    /* "PETSc/petscdm.pxi":162
  *         elif dim == 3: (x, y, z) = boundary
  *         if dim >= 1: _x[0] = asBoundaryType(x)
  *         if dim >= 2: _y[0] = asBoundaryType(y)             # <<<<<<<<<<<<<<
@@ -40376,11 +43639,11 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
  */
     __pyx_t_1 = ((__pyx_v_dim >= 2) != 0);
     if (__pyx_t_1) {
-      __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_t_4 = __pyx_f_8petsc4py_5PETSc_asBoundaryType(__pyx_v_y); if (unlikely(__pyx_t_4 == ((DMBoundaryType)((DMBoundaryType)-1L)))) __PYX_ERR(22, 162, __pyx_L1_error)
       (__pyx_v__y[0]) = __pyx_t_4;
     }
 
-    /* "PETSc/petscdm.pxi":146
+    /* "PETSc/petscdm.pxi":163
  *         if dim >= 1: _x[0] = asBoundaryType(x)
  *         if dim >= 2: _y[0] = asBoundaryType(y)
  *         if dim >= 3: _z[0] = asBoundaryType(z)             # <<<<<<<<<<<<<<
@@ -40389,13 +43652,13 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
  */
     __pyx_t_1 = ((__pyx_v_dim >= 3) != 0);
     if (__pyx_t_1) {
-      __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_t_4 = __pyx_f_8petsc4py_5PETSc_asBoundaryType(__pyx_v_z); if (unlikely(__pyx_t_4 == ((DMBoundaryType)((DMBoundaryType)-1L)))) __PYX_ERR(22, 163, __pyx_L1_error)
       (__pyx_v__z[0]) = __pyx_t_4;
     }
   }
   __pyx_L3:;
 
-  /* "PETSc/petscdm.pxi":147
+  /* "PETSc/petscdm.pxi":164
  *         if dim >= 2: _y[0] = asBoundaryType(y)
  *         if dim >= 3: _z[0] = asBoundaryType(z)
  *     return dim             # <<<<<<<<<<<<<<
@@ -40405,7 +43668,7 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
   __pyx_r = __pyx_v_dim;
   goto __pyx_L0;
 
-  /* "PETSc/petscdm.pxi":127
+  /* "PETSc/petscdm.pxi":144
  *     return boundary
  * 
  * cdef inline PetscInt asBoundary(object boundary,             # <<<<<<<<<<<<<<
@@ -40430,7 +43693,7 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
   return __pyx_r;
 }
 
-/* "PETSc/petscdm.pxi":149
+/* "PETSc/petscdm.pxi":166
  *     return dim
  * 
  * cdef inline object toBoundary(PetscInt dim,             # <<<<<<<<<<<<<<
@@ -40441,108 +43704,110 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asBoundary(PyObject *__py
 static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toBoundary(PetscInt __pyx_v_dim, DMBoundaryType __pyx_v_x, DMBoundaryType __pyx_v_y, DMBoundaryType __pyx_v_z) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("toBoundary", 0);
 
-  /* "PETSc/petscdm.pxi":153
+  /* "PETSc/petscdm.pxi":170
  *                               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_t_1 = ((__pyx_v_dim == 0) != 0);
+  if (__pyx_t_1) {
     __Pyx_XDECREF(__pyx_r);
     __Pyx_INCREF(__pyx_empty_tuple);
     __pyx_r = __pyx_empty_tuple;
     goto __pyx_L0;
-    break;
+  }
 
-    /* "PETSc/petscdm.pxi":154
+  /* "PETSc/petscdm.pxi":171
  *                               PetscDMBoundaryType z):
  *     if   dim == 0: return ()
  *     elif dim == 1: return (x,)             # <<<<<<<<<<<<<<
  *     elif dim == 2: return (x, y)
  *     elif dim == 3: return (x, y, z)
  */
-    case 1:
+  __pyx_t_1 = ((__pyx_v_dim == 1) != 0);
+  if (__pyx_t_1) {
     __Pyx_XDECREF(__pyx_r);
-    __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_ERR(22, 154, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyInt_From_DMBoundaryType(__pyx_v_x); if (unlikely(!__pyx_t_2)) __PYX_ERR(22, 171, __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_r = __pyx_t_2;
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 171, __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_r = __pyx_t_3;
+    __pyx_t_3 = 0;
     goto __pyx_L0;
-    break;
+  }
 
-    /* "PETSc/petscdm.pxi":155
+  /* "PETSc/petscdm.pxi":172
  *     if   dim == 0: return ()
  *     elif dim == 1: return (x,)
  *     elif dim == 2: return (x, y)             # <<<<<<<<<<<<<<
  *     elif dim == 3: return (x, y, z)
  * 
  */
-    case 2:
+  __pyx_t_1 = ((__pyx_v_dim == 2) != 0);
+  if (__pyx_t_1) {
     __Pyx_XDECREF(__pyx_r);
-    __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 = __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_ERR(22, 155, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyInt_From_DMBoundaryType(__pyx_v_x); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 172, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_2 = __Pyx_PyInt_From_DMBoundaryType(__pyx_v_y); if (unlikely(!__pyx_t_2)) __PYX_ERR(22, 172, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(22, 172, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GIVEREF(__pyx_t_3);
+    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_2);
-    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
-    __Pyx_GIVEREF(__pyx_t_1);
-    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
-    __pyx_t_2 = 0;
-    __pyx_t_1 = 0;
-    __pyx_r = __pyx_t_3;
+    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
     __pyx_t_3 = 0;
+    __pyx_t_2 = 0;
+    __pyx_r = __pyx_t_4;
+    __pyx_t_4 = 0;
     goto __pyx_L0;
-    break;
+  }
 
-    /* "PETSc/petscdm.pxi":156
+  /* "PETSc/petscdm.pxi":173
  *     elif dim == 1: return (x,)
  *     elif dim == 2: return (x, y)
  *     elif dim == 3: return (x, y, z)             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-    case 3:
+  __pyx_t_1 = ((__pyx_v_dim == 3) != 0);
+  if (__pyx_t_1) {
     __Pyx_XDECREF(__pyx_r);
-    __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 = __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 = __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_ERR(22, 156, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyInt_From_DMBoundaryType(__pyx_v_x); if (unlikely(!__pyx_t_4)) __PYX_ERR(22, 173, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __Pyx_GIVEREF(__pyx_t_3);
-    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
-    __Pyx_GIVEREF(__pyx_t_1);
-    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
+    __pyx_t_2 = __Pyx_PyInt_From_DMBoundaryType(__pyx_v_y); if (unlikely(!__pyx_t_2)) __PYX_ERR(22, 173, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = __Pyx_PyInt_From_DMBoundaryType(__pyx_v_z); if (unlikely(!__pyx_t_3)) __PYX_ERR(22, 173, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(22, 173, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_GIVEREF(__pyx_t_4);
+    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
     __Pyx_GIVEREF(__pyx_t_2);
-    PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_2);
-    __pyx_t_3 = 0;
-    __pyx_t_1 = 0;
-    __pyx_t_2 = 0;
-    __pyx_r = __pyx_t_4;
+    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2);
+    __Pyx_GIVEREF(__pyx_t_3);
+    PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3);
     __pyx_t_4 = 0;
+    __pyx_t_2 = 0;
+    __pyx_t_3 = 0;
+    __pyx_r = __pyx_t_5;
+    __pyx_t_5 = 0;
     goto __pyx_L0;
-    break;
-    default: break;
   }
 
-  /* "PETSc/petscdm.pxi":149
+  /* "PETSc/petscdm.pxi":166
  *     return dim
  * 
  * cdef inline object toBoundary(PetscInt dim,             # <<<<<<<<<<<<<<
@@ -40554,10 +43819,10 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toBoundary(PetscInt __py
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
   __Pyx_AddTraceback("petsc4py.PETSc.toBoundary", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
@@ -40694,6 +43959,7 @@ static CYTHON_INLINE DMDAStencilType __pyx_f_8petsc4py_5PETSc_asStencil(PyObject
 static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toStencil(DMDAStencilType __pyx_v_stype) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
   __Pyx_RefNannySetupContext("toStencil", 0);
 
   /* "PETSc/petscdmda.pxi":97
@@ -40703,28 +43969,27 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toStencil(DMDAStencilTyp
  *     elif stype == DMDA_STENCIL_BOX:  return "box"
  * 
  */
-  switch (__pyx_v_stype) {
-    case DMDA_STENCIL_STAR:
+  __pyx_t_1 = ((__pyx_v_stype == DMDA_STENCIL_STAR) != 0);
+  if (__pyx_t_1) {
     __Pyx_XDECREF(__pyx_r);
     __Pyx_INCREF(__pyx_n_s_star);
     __pyx_r = __pyx_n_s_star;
     goto __pyx_L0;
-    break;
+  }
 
-    /* "PETSc/petscdmda.pxi":98
+  /* "PETSc/petscdmda.pxi":98
  * 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) \
  */
-    case DMDA_STENCIL_BOX:
+  __pyx_t_1 = ((__pyx_v_stype == DMDA_STENCIL_BOX) != 0);
+  if (__pyx_t_1) {
     __Pyx_XDECREF(__pyx_r);
     __Pyx_INCREF(__pyx_n_s_box);
     __pyx_r = __pyx_n_s_box;
     goto __pyx_L0;
-    break;
-    default: break;
   }
 
   /* "PETSc/petscdmda.pxi":96
@@ -41076,11 +44341,11 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asDims(PyObject *__pyx_v_
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   Py_ssize_t __pyx_t_2;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *(*__pyx_t_4)(PyObject *);
-  PyObject *__pyx_t_5 = NULL;
+  int __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *(*__pyx_t_5)(PyObject *);
   PyObject *__pyx_t_6 = NULL;
-  int __pyx_t_7;
+  PyObject *__pyx_t_7 = NULL;
   PetscInt __pyx_t_8;
   __Pyx_RefNannySetupContext("asDims", 0);
   __Pyx_INCREF(__pyx_v_dims);
@@ -41115,7 +44380,7 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asDims(PyObject *__pyx_v_
  *     dim = <PetscInt>len(dims)
  *     if   dim == 0: pass
  */
-  __pyx_t_1 = PySequence_Tuple(__pyx_v_dims); if (unlikely(!__pyx_t_1)) __PYX_ERR(7, 130, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_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;
@@ -41127,7 +44392,7 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asDims(PyObject *__pyx_v_
  *     if   dim == 0: pass
  *     elif dim == 1: M, = dims
  */
-  __pyx_t_2 = PyObject_Length(__pyx_v_dims); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(7, 131, __pyx_L1_error)
+  __pyx_t_2 = PyObject_Length(__pyx_v_dims); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(7, 131, __pyx_L1_error)
   __pyx_v_dim = ((PetscInt)__pyx_t_2);
 
   /* "PETSc/petscdmda.pxi":132
@@ -41137,21 +44402,23 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asDims(PyObject *__pyx_v_
  *     elif dim == 1: M, = dims
  *     elif dim == 2: M, N = dims
  */
-  switch (__pyx_v_dim) {
-    case 0:
-    break;
+  __pyx_t_3 = ((__pyx_v_dim == 0) != 0);
+  if (__pyx_t_3) {
+    goto __pyx_L3;
+  }
 
-    /* "PETSc/petscdmda.pxi":133
+  /* "PETSc/petscdmda.pxi":133
  *     dim = <PetscInt>len(dims)
  *     if   dim == 0: pass
  *     elif dim == 1: M, = dims             # <<<<<<<<<<<<<<
  *     elif dim == 2: M, N = dims
  *     elif dim == 3: M, N, P = dims
  */
-    case 1:
+  __pyx_t_3 = ((__pyx_v_dim == 1) != 0);
+  if (__pyx_t_3) {
     if ((likely(PyTuple_CheckExact(__pyx_v_dims))) || (PyList_CheckExact(__pyx_v_dims))) {
       PyObject* sequence = __pyx_v_dims;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -41161,7 +44428,7 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asDims(PyObject *__pyx_v_
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
         __PYX_ERR(7, 133, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
       } else {
@@ -41174,37 +44441,39 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asDims(PyObject *__pyx_v_
       #endif
     } else {
       Py_ssize_t index = -1;
-      __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_t_4 = PyObject_GetIter(__pyx_v_dims); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 133, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __pyx_t_5 = Py_TYPE(__pyx_t_4)->tp_iternext;
+      index = 0; __pyx_t_1 = __pyx_t_5(__pyx_t_4); if (unlikely(!__pyx_t_1)) goto __pyx_L4_unpacking_failed;
       __Pyx_GOTREF(__pyx_t_1);
-      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;
-      __pyx_L3_unpacking_failed:;
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
-      __pyx_t_4 = NULL;
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_4), 1) < 0) __PYX_ERR(7, 133, __pyx_L1_error)
+      __pyx_t_5 = NULL;
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      goto __pyx_L5_unpacking_done;
+      __pyx_L4_unpacking_failed:;
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __pyx_t_5 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
       __PYX_ERR(7, 133, __pyx_L1_error)
-      __pyx_L4_unpacking_done:;
+      __pyx_L5_unpacking_done:;
     }
     __Pyx_DECREF_SET(__pyx_v_M, __pyx_t_1);
     __pyx_t_1 = 0;
-    break;
+    goto __pyx_L3;
+  }
 
-    /* "PETSc/petscdmda.pxi":134
+  /* "PETSc/petscdmda.pxi":134
  *     if   dim == 0: pass
  *     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)
  */
-    case 2:
+  __pyx_t_3 = ((__pyx_v_dim == 2) != 0);
+  if (__pyx_t_3) {
     if ((likely(PyTuple_CheckExact(__pyx_v_dims))) || (PyList_CheckExact(__pyx_v_dims))) {
       PyObject* sequence = __pyx_v_dims;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -41214,59 +44483,61 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asDims(PyObject *__pyx_v_
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
         __PYX_ERR(7, 134, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
-        __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+        __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
       } else {
         __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
-        __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+        __pyx_t_4 = PyList_GET_ITEM(sequence, 1); 
       }
       __Pyx_INCREF(__pyx_t_1);
-      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(__pyx_t_4);
       #else
       __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_ERR(7, 134, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
+      __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 134, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
       #endif
     } else {
       Py_ssize_t index = -1;
-      __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_t_6 = PyObject_GetIter(__pyx_v_dims); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 134, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_6);
+      __pyx_t_5 = Py_TYPE(__pyx_t_6)->tp_iternext;
+      index = 0; __pyx_t_1 = __pyx_t_5(__pyx_t_6); if (unlikely(!__pyx_t_1)) goto __pyx_L6_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_ERR(7, 134, __pyx_L1_error)
-      __pyx_t_4 = NULL;
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      goto __pyx_L6_unpacking_done;
-      __pyx_L5_unpacking_failed:;
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-      __pyx_t_4 = NULL;
+      index = 1; __pyx_t_4 = __pyx_t_5(__pyx_t_6); if (unlikely(!__pyx_t_4)) goto __pyx_L6_unpacking_failed;
+      __Pyx_GOTREF(__pyx_t_4);
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_6), 2) < 0) __PYX_ERR(7, 134, __pyx_L1_error)
+      __pyx_t_5 = NULL;
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      goto __pyx_L7_unpacking_done;
+      __pyx_L6_unpacking_failed:;
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __pyx_t_5 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
       __PYX_ERR(7, 134, __pyx_L1_error)
-      __pyx_L6_unpacking_done:;
+      __pyx_L7_unpacking_done:;
     }
     __Pyx_DECREF_SET(__pyx_v_M, __pyx_t_1);
     __pyx_t_1 = 0;
-    __Pyx_DECREF_SET(__pyx_v_N, __pyx_t_3);
-    __pyx_t_3 = 0;
-    break;
+    __Pyx_DECREF_SET(__pyx_v_N, __pyx_t_4);
+    __pyx_t_4 = 0;
+    goto __pyx_L3;
+  }
 
-    /* "PETSc/petscdmda.pxi":135
+  /* "PETSc/petscdmda.pxi":135
  *     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)
  */
-    case 3:
+  __pyx_t_3 = ((__pyx_v_dim == 3) != 0);
+  if (__pyx_t_3) {
     if ((likely(PyTuple_CheckExact(__pyx_v_dims))) || (PyList_CheckExact(__pyx_v_dims))) {
       PyObject* sequence = __pyx_v_dims;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -41276,58 +44547,57 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asDims(PyObject *__pyx_v_
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
         __PYX_ERR(7, 135, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
-        __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0); 
+        __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
-        __pyx_t_5 = PyTuple_GET_ITEM(sequence, 2); 
+        __pyx_t_6 = PyTuple_GET_ITEM(sequence, 2); 
       } else {
-        __pyx_t_3 = PyList_GET_ITEM(sequence, 0); 
+        __pyx_t_4 = PyList_GET_ITEM(sequence, 0); 
         __pyx_t_1 = PyList_GET_ITEM(sequence, 1); 
-        __pyx_t_5 = PyList_GET_ITEM(sequence, 2); 
+        __pyx_t_6 = PyList_GET_ITEM(sequence, 2); 
       }
-      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(__pyx_t_4);
       __Pyx_INCREF(__pyx_t_1);
-      __Pyx_INCREF(__pyx_t_5);
+      __Pyx_INCREF(__pyx_t_6);
       #else
-      __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_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 135, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
       __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_ERR(7, 135, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_5);
+      __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(7, 135, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_6);
       #endif
     } else {
       Py_ssize_t index = -1;
-      __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;
-      __Pyx_GOTREF(__pyx_t_3);
-      index = 1; __pyx_t_1 = __pyx_t_4(__pyx_t_6); if (unlikely(!__pyx_t_1)) goto __pyx_L7_unpacking_failed;
+      __pyx_t_7 = PyObject_GetIter(__pyx_v_dims); if (unlikely(!__pyx_t_7)) __PYX_ERR(7, 135, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_7);
+      __pyx_t_5 = Py_TYPE(__pyx_t_7)->tp_iternext;
+      index = 0; __pyx_t_4 = __pyx_t_5(__pyx_t_7); if (unlikely(!__pyx_t_4)) goto __pyx_L8_unpacking_failed;
+      __Pyx_GOTREF(__pyx_t_4);
+      index = 1; __pyx_t_1 = __pyx_t_5(__pyx_t_7); if (unlikely(!__pyx_t_1)) goto __pyx_L8_unpacking_failed;
       __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_ERR(7, 135, __pyx_L1_error)
-      __pyx_t_4 = NULL;
-      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-      goto __pyx_L8_unpacking_done;
-      __pyx_L7_unpacking_failed:;
-      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
-      __pyx_t_4 = NULL;
+      index = 2; __pyx_t_6 = __pyx_t_5(__pyx_t_7); if (unlikely(!__pyx_t_6)) goto __pyx_L8_unpacking_failed;
+      __Pyx_GOTREF(__pyx_t_6);
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_5(__pyx_t_7), 3) < 0) __PYX_ERR(7, 135, __pyx_L1_error)
+      __pyx_t_5 = 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_5 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
       __PYX_ERR(7, 135, __pyx_L1_error)
-      __pyx_L8_unpacking_done:;
+      __pyx_L9_unpacking_done:;
     }
-    __Pyx_DECREF_SET(__pyx_v_M, __pyx_t_3);
-    __pyx_t_3 = 0;
+    __Pyx_DECREF_SET(__pyx_v_M, __pyx_t_4);
+    __pyx_t_4 = 0;
     __Pyx_DECREF_SET(__pyx_v_N, __pyx_t_1);
     __pyx_t_1 = 0;
-    __Pyx_DECREF_SET(__pyx_v_P, __pyx_t_5);
-    __pyx_t_5 = 0;
-    break;
-    default: break;
+    __Pyx_DECREF_SET(__pyx_v_P, __pyx_t_6);
+    __pyx_t_6 = 0;
   }
+  __pyx_L3:;
 
   /* "PETSc/petscdmda.pxi":136
  *     elif dim == 2: M, N = dims
@@ -41336,9 +44606,9 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asDims(PyObject *__pyx_v_
  *     if dim >= 2: _N[0] = asInt(N)
  *     if dim >= 3: _P[0] = asInt(P)
  */
-  __pyx_t_7 = ((__pyx_v_dim >= 1) != 0);
-  if (__pyx_t_7) {
-    __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_t_3 = ((__pyx_v_dim >= 1) != 0);
+  if (__pyx_t_3) {
+    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_M); if (unlikely(__pyx_t_8 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(7, 136, __pyx_L1_error)
     (__pyx_v__M[0]) = __pyx_t_8;
   }
 
@@ -41349,9 +44619,9 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asDims(PyObject *__pyx_v_
  *     if dim >= 3: _P[0] = asInt(P)
  *     return dim
  */
-  __pyx_t_7 = ((__pyx_v_dim >= 2) != 0);
-  if (__pyx_t_7) {
-    __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_t_3 = ((__pyx_v_dim >= 2) != 0);
+  if (__pyx_t_3) {
+    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_N); if (unlikely(__pyx_t_8 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(7, 137, __pyx_L1_error)
     (__pyx_v__N[0]) = __pyx_t_8;
   }
 
@@ -41362,9 +44632,9 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asDims(PyObject *__pyx_v_
  *     return dim
  * 
  */
-  __pyx_t_7 = ((__pyx_v_dim >= 3) != 0);
-  if (__pyx_t_7) {
-    __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_t_3 = ((__pyx_v_dim >= 3) != 0);
+  if (__pyx_t_3) {
+    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_P); if (unlikely(__pyx_t_8 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(7, 138, __pyx_L1_error)
     (__pyx_v__P[0]) = __pyx_t_8;
   }
 
@@ -41389,9 +44659,9 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asDims(PyObject *__pyx_v_
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_4);
   __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_7);
   __Pyx_AddTraceback("petsc4py.PETSc.asDims", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = -1L;
   __pyx_L0:;
@@ -41414,10 +44684,11 @@ static CYTHON_INLINE PetscInt __pyx_f_8petsc4py_5PETSc_asDims(PyObject *__pyx_v_
 static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toDims(PetscInt __pyx_v_dim, PetscInt __pyx_v_M, PetscInt __pyx_v_N, PetscInt __pyx_v_P) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("toDims", 0);
 
   /* "PETSc/petscdmda.pxi":145
@@ -41427,92 +44698,93 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toDims(PetscInt __pyx_v_
  *     elif dim == 1: return (toInt(M),)
  *     elif dim == 2: return (toInt(M), toInt(N))
  */
-  switch (__pyx_v_dim) {
-    case 0:
+  __pyx_t_1 = ((__pyx_v_dim == 0) != 0);
+  if (__pyx_t_1) {
     __Pyx_XDECREF(__pyx_r);
     __Pyx_INCREF(__pyx_empty_tuple);
     __pyx_r = __pyx_empty_tuple;
     goto __pyx_L0;
-    break;
+  }
 
-    /* "PETSc/petscdmda.pxi":146
+  /* "PETSc/petscdmda.pxi":146
  *                          PetscInt P):
  *     if   dim == 0: return ()
  *     elif dim == 1: return (toInt(M),)             # <<<<<<<<<<<<<<
  *     elif dim == 2: return (toInt(M), toInt(N))
  *     elif dim == 3: return (toInt(M), toInt(N), toInt(P))
  */
-    case 1:
+  __pyx_t_1 = ((__pyx_v_dim == 1) != 0);
+  if (__pyx_t_1) {
     __Pyx_XDECREF(__pyx_r);
-    __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_ERR(7, 146, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_M); 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);
-    __pyx_t_1 = 0;
-    __pyx_r = ((PyObject*)__pyx_t_2);
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 146, __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_r = ((PyObject*)__pyx_t_3);
+    __pyx_t_3 = 0;
     goto __pyx_L0;
-    break;
+  }
 
-    /* "PETSc/petscdmda.pxi":147
+  /* "PETSc/petscdmda.pxi":147
  *     if   dim == 0: return ()
  *     elif dim == 1: return (toInt(M),)
  *     elif dim == 2: return (toInt(M), toInt(N))             # <<<<<<<<<<<<<<
  *     elif dim == 3: return (toInt(M), toInt(N), toInt(P))
  * 
  */
-    case 2:
+  __pyx_t_1 = ((__pyx_v_dim == 2) != 0);
+  if (__pyx_t_1) {
     __Pyx_XDECREF(__pyx_r);
-    __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_ERR(7, 147, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 147, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_M); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 147, __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_ERR(7, 147, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 147, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_GIVEREF(__pyx_t_3);
+    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3);
     __Pyx_GIVEREF(__pyx_t_2);
-    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_2);
-    __Pyx_GIVEREF(__pyx_t_1);
-    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1);
-    __pyx_t_2 = 0;
-    __pyx_t_1 = 0;
-    __pyx_r = ((PyObject*)__pyx_t_3);
+    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
     __pyx_t_3 = 0;
+    __pyx_t_2 = 0;
+    __pyx_r = ((PyObject*)__pyx_t_4);
+    __pyx_t_4 = 0;
     goto __pyx_L0;
-    break;
+  }
 
-    /* "PETSc/petscdmda.pxi":148
+  /* "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))             # <<<<<<<<<<<<<<
  * 
  * cdef inline tuple asOwnershipRanges(object ownership_ranges,
  */
-    case 3:
+  __pyx_t_1 = ((__pyx_v_dim == 3) != 0);
+  if (__pyx_t_1) {
     __Pyx_XDECREF(__pyx_r);
-    __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_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_ERR(7, 148, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 148, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_M); 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);
-    __Pyx_GIVEREF(__pyx_t_1);
-    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1);
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_2)) __PYX_ERR(7, 148, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_P); if (unlikely(!__pyx_t_3)) __PYX_ERR(7, 148, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 148, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_GIVEREF(__pyx_t_4);
+    PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
     __Pyx_GIVEREF(__pyx_t_2);
-    PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_2);
-    __pyx_t_3 = 0;
-    __pyx_t_1 = 0;
-    __pyx_t_2 = 0;
-    __pyx_r = ((PyObject*)__pyx_t_4);
+    PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_2);
+    __Pyx_GIVEREF(__pyx_t_3);
+    PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_t_3);
     __pyx_t_4 = 0;
+    __pyx_t_2 = 0;
+    __pyx_t_3 = 0;
+    __pyx_r = ((PyObject*)__pyx_t_5);
+    __pyx_t_5 = 0;
     goto __pyx_L0;
-    break;
-    default: break;
   }
 
   /* "PETSc/petscdmda.pxi":141
@@ -41527,10 +44799,10 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toDims(PetscInt __pyx_v_
   __pyx_r = ((PyObject*)Py_None); __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_XDECREF(__pyx_t_5);
   __Pyx_AddTraceback("petsc4py.PETSc.toDims", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = 0;
   __pyx_L0:;
@@ -41581,7 +44853,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_asOwnershipRanges(PyObje
  *     cdef PetscInt nlx=0, nly=0, nlz=0
  *     if dim == PETSC_DECIDE: dim = rdim
  */
-  __pyx_t_2 = PyObject_Length(__pyx_v_ranges); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(7, 157, __pyx_L1_error)
+  __pyx_t_2 = PyObject_Length(__pyx_v_ranges); if (unlikely(__pyx_t_2 == ((Py_ssize_t)-1))) __PYX_ERR(7, 157, __pyx_L1_error)
   __pyx_v_rdim = ((PetscInt)__pyx_t_2);
 
   /* "PETSc/petscdmda.pxi":158
@@ -41940,7 +45212,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_asOwnershipRanges(PyObje
  *         elif p[0] != nlz: raise ValueError(
  *             "ownership range size %d and number or processors %d" %
  *              (toInt(nlz), toInt(p[0])))             # <<<<<<<<<<<<<<
- *     return ranges
+ *     return tuple(ranges)
  * 
  */
       __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nlz); if (unlikely(!__pyx_t_5)) __PYX_ERR(7, 180, __pyx_L1_error)
@@ -41961,7 +45233,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_asOwnershipRanges(PyObje
  *         elif p[0] != nlz: raise ValueError(
  *             "ownership range size %d and number or processors %d" %             # <<<<<<<<<<<<<<
  *              (toInt(nlz), toInt(p[0])))
- *     return ranges
+ *     return tuple(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_ERR(7, 179, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
@@ -42000,14 +45272,15 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_asOwnershipRanges(PyObje
   /* "PETSc/petscdmda.pxi":181
  *             "ownership range size %d and number or processors %d" %
  *              (toInt(nlz), toInt(p[0])))
- *     return ranges             # <<<<<<<<<<<<<<
+ *     return tuple(ranges)             # <<<<<<<<<<<<<<
  * 
  * 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_ERR(7, 181, __pyx_L1_error)
-  __Pyx_INCREF(__pyx_v_ranges);
-  __pyx_r = ((PyObject*)__pyx_v_ranges);
+  __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_ranges); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 181, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_r = ((PyObject*)__pyx_t_4);
+  __pyx_t_4 = 0;
   goto __pyx_L0;
 
   /* "PETSc/petscdmda.pxi":150
@@ -42033,7 +45306,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_asOwnershipRanges(PyObje
 }
 
 /* "PETSc/petscdmda.pxi":183
- *     return ranges
+ *     return tuple(ranges)
  * 
  * cdef inline tuple toOwnershipRanges(PetscInt dim,             # <<<<<<<<<<<<<<
  *                                     PetscInt m, PetscInt n, PetscInt p,
@@ -42086,7 +45359,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toOwnershipRanges(PetscI
  */
     __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_ERR(7, 191, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_ranges, __pyx_t_2); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(7, 191, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
     /* "PETSc/petscdmda.pxi":190
@@ -42117,7 +45390,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toOwnershipRanges(PetscI
  */
     __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_ERR(7, 193, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_ranges, __pyx_t_2); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(7, 193, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
     /* "PETSc/petscdmda.pxi":192
@@ -42144,7 +45417,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toOwnershipRanges(PetscI
   goto __pyx_L0;
 
   /* "PETSc/petscdmda.pxi":183
- *     return ranges
+ *     return tuple(ranges)
  * 
  * cdef inline tuple toOwnershipRanges(PetscInt dim,             # <<<<<<<<<<<<<<
  *                                     PetscInt m, PetscInt n, PetscInt p,
@@ -42167,7 +45440,7 @@ static CYTHON_INLINE PyObject *__pyx_f_8petsc4py_5PETSc_toOwnershipRanges(PetscI
 /* "PETSc/petscdmda.pxi":205
  *     cdef readonly ndarray array
  * 
- *     def __cinit__(self, DMDA da not None, Vec vec not None, bint DOF=False):             # <<<<<<<<<<<<<<
+ *     def __cinit__(self, DMDA da, Vec vec, bint DOF=False):             # <<<<<<<<<<<<<<
  *         #
  *         cdef PetscInt dim=0, dof=0
  */
@@ -42189,8 +45462,11 @@ static int __pyx_pw_8petsc4py_5PETSc_15_DMDA_Vec_array_1__cinit__(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -42199,11 +45475,13 @@ static int __pyx_pw_8petsc4py_5PETSc_15_DMDA_Vec_array_1__cinit__(PyObject *__py
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_da)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(7, 205, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_DOF);
@@ -42216,6 +45494,7 @@ static int __pyx_pw_8petsc4py_5PETSc_15_DMDA_Vec_array_1__cinit__(PyObject *__py
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -42295,7 +45574,7 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
   /* "PETSc/petscdmda.pxi":207
- *     def __cinit__(self, DMDA da not None, Vec vec not None, bint DOF=False):
+ *     def __cinit__(self, DMDA da, Vec vec, bint DOF=False):
  *         #
  *         cdef PetscInt dim=0, dof=0             # <<<<<<<<<<<<<<
  *         CHKERR( DMDAGetInfo(da.dm,
@@ -42311,7 +45590,7 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
  *                             &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_ERR(7, 208, __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 == ((int)-1))) __PYX_ERR(7, 208, __pyx_L1_error)
 
   /* "PETSc/petscdmda.pxi":211
  *                             &dim, NULL, NULL, NULL, NULL, NULL, NULL,
@@ -42342,7 +45621,7 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
  *                                &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_ERR(7, 213, __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 == ((int)-1))) __PYX_ERR(7, 213, __pyx_L1_error)
 
   /* "PETSc/petscdmda.pxi":216
  *                                &lxs, &lys, &lzs,
@@ -42373,7 +45652,7 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
  *                                     &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_ERR(7, 218, __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 == ((int)-1))) __PYX_ERR(7, 218, __pyx_L1_error)
 
   /* "PETSc/petscdmda.pxi":222
  *                                     &gxm, &gym, &gzm) )
@@ -42391,7 +45670,7 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
  *         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_ERR(7, 223, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetLocalSize(__pyx_v_vec->vec, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(7, 223, __pyx_L1_error)
 
   /* "PETSc/petscdmda.pxi":225
  *         CHKERR( VecGetLocalSize(vec.vec, &n) )
@@ -42774,7 +46053,7 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array___cinit__(struct __pyx_ob
   /* "PETSc/petscdmda.pxi":205
  *     cdef readonly ndarray array
  * 
- *     def __cinit__(self, DMDA da not None, Vec vec not None, bint DOF=False):             # <<<<<<<<<<<<<<
+ *     def __cinit__(self, DMDA da, Vec vec, bint DOF=False):             # <<<<<<<<<<<<<<
  *         #
  *         cdef PetscInt dim=0, dof=0
  */
@@ -42823,7 +46102,7 @@ static int __pyx_f_8petsc4py_5PETSc_15_DMDA_Vec_array_acquire(struct __pyx_obj_8
  *         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_ERR(7, 254, __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 == ((int)-1))) __PYX_ERR(7, 254, __pyx_L1_error)
 
   /* "PETSc/petscdmda.pxi":255
  *     cdef int acquire(self) except -1:
@@ -42937,7 +46216,7 @@ static int __pyx_f_8petsc4py_5PETSc_15_DMDA_Vec_array_release(struct __pyx_obj_8
  *         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_ERR(7, 262, __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 == ((int)-1))) __PYX_ERR(7, 262, __pyx_L1_error)
 
   /* "PETSc/petscdmda.pxi":263
  *     cdef int release(self) except -1:
@@ -43016,7 +46295,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_2__getitem__(struct
  *         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_ERR(7, 269, __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 == ((int)-1))) __PYX_ERR(7, 269, __pyx_L1_error)
 
   /* "PETSc/petscdmda.pxi":270
  *     def __getitem__(self, index):
@@ -43105,7 +46384,7 @@ static int __pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_4__setitem__(struct __pyx
  *         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_ERR(7, 274, __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 == ((int)-1))) __PYX_ERR(7, 274, __pyx_L1_error)
 
   /* "PETSc/petscdmda.pxi":275
  *     def __setitem__(self, index, value):
@@ -43191,7 +46470,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_6__enter__(struct _
  *         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_ERR(7, 281, __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 == ((int)-1))) __PYX_ERR(7, 281, __pyx_L1_error)
 
   /* "PETSc/petscdmda.pxi":282
  *     def __enter__(self):
@@ -43263,7 +46542,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_8__exit__(struct __
  *         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_ERR(7, 285, __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 == ((int)-1))) __PYX_ERR(7, 285, __pyx_L1_error)
 
   /* "PETSc/petscdmda.pxi":286
  *     def __exit__(self, *exc):
@@ -43432,7 +46711,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_15_DMDA_Vec_array_7strides___get__(st
  *     cdef readonly tuple shape, strides
  *     cdef readonly ndarray array             # <<<<<<<<<<<<<<
  * 
- *     def __cinit__(self, DMDA da not None, Vec vec not None, bint DOF=False):
+ *     def __cinit__(self, DMDA da, Vec vec, bint DOF=False):
  */
 
 /* Python wrapper */
@@ -43558,7 +46837,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_adjust_index_exp(PyObject *__pyx_v_sta
     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
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         __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_ERR(7, 293, __pyx_L1_error)
@@ -43566,7 +46845,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_adjust_index_exp(PyObject *__pyx_v_sta
         #endif
       } else {
         if (__pyx_t_5 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         __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_ERR(7, 293, __pyx_L1_error)
@@ -43578,7 +46857,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_adjust_index_exp(PyObject *__pyx_v_sta
       if (unlikely(!__pyx_t_7)) {
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
-          if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
+          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
           else __PYX_ERR(7, 293, __pyx_L1_error)
         }
         break;
@@ -43628,7 +46907,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_adjust_index_exp(PyObject *__pyx_v_sta
  *      return index
  * 
  */
-  __pyx_t_4 = PySequence_Tuple(__pyx_v_index); if (unlikely(!__pyx_t_4)) __PYX_ERR(7, 295, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_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;
@@ -43900,7 +47179,6 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_adjust_index(PyObject *__pyx_v_lbound,
  */
     }
     __pyx_L8_error:;
-    __Pyx_PyThreadState_assign
     __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
 
     /* "PETSc/petscdmda.pxi":312
@@ -43943,21 +47221,18 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_adjust_index(PyObject *__pyx_v_lbound,
  *         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);
@@ -43992,7 +47267,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_adjust_index(PyObject *__pyx_v_lbound,
 /* "PETSc/petscdmcomposite.pxi":27
  *     cdef object access
  * 
- *     def __cinit__(self, DM dm, Vec gvec not None, locs=None):             # <<<<<<<<<<<<<<
+ *     def __cinit__(self, DM dm, Vec gvec, locs=None):             # <<<<<<<<<<<<<<
  *         self.dm = dm.dm
  *         CHKERR( PetscINCREF(<PetscObject*>&self.dm) )
  */
@@ -44015,8 +47290,11 @@ static int __pyx_pw_8petsc4py_5PETSc_19_DMComposite_access_1__cinit__(PyObject *
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -44025,11 +47303,13 @@ static int __pyx_pw_8petsc4py_5PETSc_19_DMComposite_access_1__cinit__(PyObject *
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_dm)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(23, 27, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_locs);
@@ -44042,6 +47322,7 @@ static int __pyx_pw_8petsc4py_5PETSc_19_DMComposite_access_1__cinit__(PyObject *
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -44060,7 +47341,7 @@ static int __pyx_pw_8petsc4py_5PETSc_19_DMComposite_access_1__cinit__(PyObject *
   __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_ERR(23, 27, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dm), __pyx_ptype_8petsc4py_5PETSc_DM, 0, "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);
 
@@ -44088,7 +47369,7 @@ static int __pyx_pf_8petsc4py_5PETSc_19_DMComposite_access___cinit__(struct __py
 
   /* "PETSc/petscdmcomposite.pxi":28
  * 
- *     def __cinit__(self, DM dm, Vec gvec not None, locs=None):
+ *     def __cinit__(self, DM dm, Vec gvec, locs=None):
  *         self.dm = dm.dm             # <<<<<<<<<<<<<<
  *         CHKERR( PetscINCREF(<PetscObject*>&self.dm) )
  *         self.gvec = gvec.vec
@@ -44097,13 +47378,13 @@ static int __pyx_pf_8petsc4py_5PETSc_19_DMComposite_access___cinit__(struct __py
   __pyx_v_self->dm = __pyx_t_1;
 
   /* "PETSc/petscdmcomposite.pxi":29
- *     def __cinit__(self, DM dm, Vec gvec not None, locs=None):
+ *     def __cinit__(self, DM dm, Vec gvec, locs=None):
  *         self.dm = dm.dm
  *         CHKERR( PetscINCREF(<PetscObject*>&self.dm) )             # <<<<<<<<<<<<<<
  *         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_ERR(23, 29, __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 == ((int)-1))) __PYX_ERR(23, 29, __pyx_L1_error)
 
   /* "PETSc/petscdmcomposite.pxi":30
  *         self.dm = dm.dm
@@ -44122,7 +47403,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_ERR(23, 31, __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 == ((int)-1))) __PYX_ERR(23, 31, __pyx_L1_error)
 
   /* "PETSc/petscdmcomposite.pxi":32
  *         self.gvec = gvec.vec
@@ -44142,7 +47423,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_ERR(23, 33, __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 == ((int)-1))) __PYX_ERR(23, 33, __pyx_L1_error)
 
     /* "PETSc/petscdmcomposite.pxi":34
  *         if locs is None:
@@ -44217,7 +47498,7 @@ static int __pyx_pf_8petsc4py_5PETSc_19_DMComposite_access___cinit__(struct __py
   /* "PETSc/petscdmcomposite.pxi":27
  *     cdef object access
  * 
- *     def __cinit__(self, DM dm, Vec gvec not None, locs=None):             # <<<<<<<<<<<<<<
+ *     def __cinit__(self, DM dm, Vec gvec, locs=None):             # <<<<<<<<<<<<<<
  *         self.dm = dm.dm
  *         CHKERR( PetscINCREF(<PetscObject*>&self.dm) )
  */
@@ -44267,7 +47548,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_ERR(23, 40, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDestroy((&__pyx_v_self->dm))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(23, 40, __pyx_L1_error)
 
   /* "PETSc/petscdmcomposite.pxi":41
  *     def __dealloc__(self):
@@ -44276,7 +47557,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_ERR(23, 41, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecDestroy((&__pyx_v_self->gvec))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(23, 41, __pyx_L1_error)
 
   /* "PETSc/petscdmcomposite.pxi":39
  *         self.access   = None
@@ -44289,7 +47570,7 @@ static void __pyx_pf_8petsc4py_5PETSc_19_DMComposite_access_2__dealloc__(struct
   /* function exit code */
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_WriteUnraisable("petsc4py.PETSc._DMComposite_access.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 0, 0);
+  __Pyx_WriteUnraisable("petsc4py.PETSc._DMComposite_access.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
 }
@@ -44348,7 +47629,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_ERR(23, 45, __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 == ((int)-1))) __PYX_ERR(23, 45, __pyx_L1_error)
 
   /* "PETSc/petscdmcomposite.pxi":46
  *         cdef Py_ssize_t i, n = self.nlocs
@@ -44380,7 +47661,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_ERR(23, 47, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_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;
@@ -44475,7 +47756,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_ERR(23, 52, __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 == ((int)-1))) __PYX_ERR(23, 52, __pyx_L1_error)
 
   /* "PETSc/petscdmcomposite.pxi":53
  *         for i from 0 <= i < n: (<Vec>self.access[i]).vec = NULL
@@ -44509,7 +47790,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_19_DMComposite_access_6__exit__(struc
   return __pyx_r;
 }
 
-/* "PETSc/petscdmshell.pxi":50
+/* "PETSc/petscdmshell.pxi":68
  *     int DMShellSetCreateSubDM(PetscDM,PetscDMShellCreateSubDM)
  * 
  * cdef int DMSHELL_CreateGlobalVector(             # <<<<<<<<<<<<<<
@@ -44536,27 +47817,27 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateGlobalVector(DM __pyx_v_dm, Ve
   PyObject *(*__pyx_t_8)(PyObject *);
   Vec __pyx_t_9;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("DMSHELL_CreateGlobalVector", 0);
 
-  /* "PETSc/petscdmshell.pxi":53
+  /* "PETSc/petscdmshell.pxi":71
  *     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_ERR(8, 53, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 71, __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, 53, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 71, __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, 53, __pyx_L1_error)
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 71, __pyx_L1_error)
   __pyx_v_Dm = ((struct PyPetscDMObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":55
+  /* "PETSc/petscdmshell.pxi":73
  *     cdef DM Dm = subtype_DM(dm)()
  *     cdef Vec vec
  *     Dm.dm = dm             # <<<<<<<<<<<<<<
@@ -44565,7 +47846,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateGlobalVector(DM __pyx_v_dm, Ve
  */
   __pyx_v_Dm->dm = __pyx_v_dm;
 
-  /* "PETSc/petscdmshell.pxi":56
+  /* "PETSc/petscdmshell.pxi":74
  *     cdef Vec vec
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)             # <<<<<<<<<<<<<<
@@ -44574,19 +47855,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":57
+  /* "PETSc/petscdmshell.pxi":75
  *     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), ((char *)"__create_global_vector__")); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 57, __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, 75, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_context = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":58
+  /* "PETSc/petscdmshell.pxi":76
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__create_global_vector__')
  *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
@@ -44608,12 +47889,12 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateGlobalVector(DM __pyx_v_dm, Ve
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(8, 58, __pyx_L1_error)
+      __PYX_ERR(8, 76, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscdmshell.pxi":59
+  /* "PETSc/petscdmshell.pxi":77
  *     context = Dm.get_attr('__create_global_vector__')
  *     assert context is not None and type(context) is tuple
  *     (create_gvec, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -44622,7 +47903,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateGlobalVector(DM __pyx_v_dm, Ve
  */
   if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
     PyObject* sequence = __pyx_v_context;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -44630,9 +47911,9 @@ 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_ERR(8, 59, __pyx_L1_error)
+      __PYX_ERR(8, 77, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
@@ -44646,16 +47927,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_ERR(8, 59, __pyx_L1_error)
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 77, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 59, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 77, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 59, __pyx_L1_error)
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 77, __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, 59, __pyx_L1_error)
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 77, __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;
@@ -44664,7 +47945,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_ERR(8, 59, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(8, 77, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L6_unpacking_done;
@@ -44672,7 +47953,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_ERR(8, 59, __pyx_L1_error)
+    __PYX_ERR(8, 77, __pyx_L1_error)
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_create_gvec = __pyx_t_2;
@@ -44682,44 +47963,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":60
+  /* "PETSc/petscdmshell.pxi":78
  *     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_ERR(8, 60, __pyx_L1_error)
+  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 78, __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_ERR(8, 60, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 78, __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, 60, __pyx_L1_error)
+  __pyx_t_2 = PyNumber_Add(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 78, __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, 60, __pyx_L1_error)
+    __PYX_ERR(8, 78, __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, 60, __pyx_L1_error)
+    __pyx_t_1 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 78, __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, 60, __pyx_L1_error)
+    __pyx_t_1 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 78, __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_ERR(8, 60, __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, 78, __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_ERR(8, 60, __pyx_L1_error)
+  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(8, 78, __pyx_L1_error)
   __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscdmshell.pxi":61
+  /* "PETSc/petscdmshell.pxi":79
  *     (create_gvec, args, kargs) = context
  *     vec = create_gvec(Dm, *args, **kargs)
  *     PetscINCREF(vec.obj)             # <<<<<<<<<<<<<<
@@ -44728,7 +48009,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":62
+  /* "PETSc/petscdmshell.pxi":80
  *     vec = create_gvec(Dm, *args, **kargs)
  *     PetscINCREF(vec.obj)
  *     v[0] = vec.vec             # <<<<<<<<<<<<<<
@@ -44738,7 +48019,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":63
+  /* "PETSc/petscdmshell.pxi":81
  *     PetscINCREF(vec.obj)
  *     v[0] = vec.vec
  *     return 0             # <<<<<<<<<<<<<<
@@ -44748,7 +48029,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateGlobalVector(DM __pyx_v_dm, Ve
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmshell.pxi":50
+  /* "PETSc/petscdmshell.pxi":68
  *     int DMShellSetCreateSubDM(PetscDM,PetscDMShellCreateSubDM)
  * 
  * cdef int DMSHELL_CreateGlobalVector(             # <<<<<<<<<<<<<<
@@ -44773,12 +48054,12 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateGlobalVector(DM __pyx_v_dm, Ve
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscdmshell.pxi":65
+/* "PETSc/petscdmshell.pxi":83
  *     return 0
  * 
  * cdef int DMSHELL_CreateLocalVector(             # <<<<<<<<<<<<<<
@@ -44805,27 +48086,27 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateLocalVector(DM __pyx_v_dm, Vec
   PyObject *(*__pyx_t_8)(PyObject *);
   Vec __pyx_t_9;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("DMSHELL_CreateLocalVector", 0);
 
-  /* "PETSc/petscdmshell.pxi":68
+  /* "PETSc/petscdmshell.pxi":86
  *     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_ERR(8, 68, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 86, __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, 68, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 86, __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, 68, __pyx_L1_error)
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 86, __pyx_L1_error)
   __pyx_v_Dm = ((struct PyPetscDMObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":70
+  /* "PETSc/petscdmshell.pxi":88
  *     cdef DM Dm = subtype_DM(dm)()
  *     cdef Vec vec
  *     Dm.dm = dm             # <<<<<<<<<<<<<<
@@ -44834,7 +48115,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateLocalVector(DM __pyx_v_dm, Vec
  */
   __pyx_v_Dm->dm = __pyx_v_dm;
 
-  /* "PETSc/petscdmshell.pxi":71
+  /* "PETSc/petscdmshell.pxi":89
  *     cdef Vec vec
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)             # <<<<<<<<<<<<<<
@@ -44843,19 +48124,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":72
+  /* "PETSc/petscdmshell.pxi":90
  *     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), ((char *)"__create_local_vector__")); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 72, __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, 90, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_context = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":73
+  /* "PETSc/petscdmshell.pxi":91
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__create_local_vector__')
  *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
@@ -44877,12 +48158,12 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateLocalVector(DM __pyx_v_dm, Vec
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(8, 73, __pyx_L1_error)
+      __PYX_ERR(8, 91, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscdmshell.pxi":74
+  /* "PETSc/petscdmshell.pxi":92
  *     context = Dm.get_attr('__create_local_vector__')
  *     assert context is not None and type(context) is tuple
  *     (create_lvec, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -44891,7 +48172,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateLocalVector(DM __pyx_v_dm, Vec
  */
   if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
     PyObject* sequence = __pyx_v_context;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -44899,9 +48180,9 @@ 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_ERR(8, 74, __pyx_L1_error)
+      __PYX_ERR(8, 92, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
@@ -44915,16 +48196,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_ERR(8, 74, __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_ERR(8, 74, __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_ERR(8, 74, __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_ERR(8, 74, __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;
@@ -44933,7 +48214,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_ERR(8, 74, __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;
@@ -44941,7 +48222,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_ERR(8, 74, __pyx_L1_error)
+    __PYX_ERR(8, 92, __pyx_L1_error)
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_create_lvec = __pyx_t_2;
@@ -44951,44 +48232,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":75
+  /* "PETSc/petscdmshell.pxi":93
  *     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_ERR(8, 75, __pyx_L1_error)
+  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 93, __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_ERR(8, 75, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 93, __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, 75, __pyx_L1_error)
+  __pyx_t_2 = PyNumber_Add(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 93, __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, 75, __pyx_L1_error)
+    __PYX_ERR(8, 93, __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, 75, __pyx_L1_error)
+    __pyx_t_1 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 93, __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, 75, __pyx_L1_error)
+    __pyx_t_1 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 93, __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_ERR(8, 75, __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, 93, __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_ERR(8, 75, __pyx_L1_error)
+  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(8, 93, __pyx_L1_error)
   __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscdmshell.pxi":76
+  /* "PETSc/petscdmshell.pxi":94
  *     (create_lvec, args, kargs) = context
  *     vec = create_lvec(Dm, *args, **kargs)
  *     PetscINCREF(vec.obj)             # <<<<<<<<<<<<<<
@@ -44997,7 +48278,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":77
+  /* "PETSc/petscdmshell.pxi":95
  *     vec = create_lvec(Dm, *args, **kargs)
  *     PetscINCREF(vec.obj)
  *     v[0] = vec.vec             # <<<<<<<<<<<<<<
@@ -45007,7 +48288,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":78
+  /* "PETSc/petscdmshell.pxi":96
  *     PetscINCREF(vec.obj)
  *     v[0] = vec.vec
  *     return 0             # <<<<<<<<<<<<<<
@@ -45017,7 +48298,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateLocalVector(DM __pyx_v_dm, Vec
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmshell.pxi":65
+  /* "PETSc/petscdmshell.pxi":83
  *     return 0
  * 
  * cdef int DMSHELL_CreateLocalVector(             # <<<<<<<<<<<<<<
@@ -45042,12 +48323,12 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateLocalVector(DM __pyx_v_dm, Vec
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscdmshell.pxi":80
+/* "PETSc/petscdmshell.pxi":98
  *     return 0
  * 
  * cdef int DMSHELL_GlobalToLocalBegin(             # <<<<<<<<<<<<<<
@@ -45074,51 +48355,51 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalBegin(DM __pyx_v_dm, Ve
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("DMSHELL_GlobalToLocalBegin", 0);
 
-  /* "PETSc/petscdmshell.pxi":85
+  /* "PETSc/petscdmshell.pxi":103
  *     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_ERR(8, 85, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 103, __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, 85, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 103, __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, 85, __pyx_L1_error)
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 103, __pyx_L1_error)
   __pyx_v_Dm = ((struct PyPetscDMObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":86
+  /* "PETSc/petscdmshell.pxi":104
  *     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_ERR(8, 86, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_g)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 104, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_gvec = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":87
+  /* "PETSc/petscdmshell.pxi":105
  *     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_ERR(8, 87, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_l)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 105, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_lvec = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":88
+  /* "PETSc/petscdmshell.pxi":106
  *     cdef Vec gvec = ref_Vec(g)
  *     cdef Vec lvec = ref_Vec(l)
  *     Dm.dm = dm             # <<<<<<<<<<<<<<
@@ -45127,7 +48408,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalBegin(DM __pyx_v_dm, Ve
  */
   __pyx_v_Dm->dm = __pyx_v_dm;
 
-  /* "PETSc/petscdmshell.pxi":89
+  /* "PETSc/petscdmshell.pxi":107
  *     cdef Vec lvec = ref_Vec(l)
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)             # <<<<<<<<<<<<<<
@@ -45136,19 +48417,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":90
+  /* "PETSc/petscdmshell.pxi":108
  *     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), ((char *)"__g2l_begin__")); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 90, __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, 108, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_context = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":91
+  /* "PETSc/petscdmshell.pxi":109
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__g2l_begin__')
  *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
@@ -45170,12 +48451,12 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalBegin(DM __pyx_v_dm, Ve
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(8, 91, __pyx_L1_error)
+      __PYX_ERR(8, 109, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscdmshell.pxi":92
+  /* "PETSc/petscdmshell.pxi":110
  *     context = Dm.get_attr('__g2l_begin__')
  *     assert context is not None and type(context) is tuple
  *     (begin, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -45184,7 +48465,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalBegin(DM __pyx_v_dm, Ve
  */
   if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
     PyObject* sequence = __pyx_v_context;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -45192,9 +48473,9 @@ 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_ERR(8, 92, __pyx_L1_error)
+      __PYX_ERR(8, 110, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
@@ -45208,16 +48489,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_ERR(8, 92, __pyx_L1_error)
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 110, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 92, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 110, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 92, __pyx_L1_error)
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 110, __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, 92, __pyx_L1_error)
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 110, __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;
@@ -45226,7 +48507,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_ERR(8, 92, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(8, 110, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L6_unpacking_done;
@@ -45234,7 +48515,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_ERR(8, 92, __pyx_L1_error)
+    __PYX_ERR(8, 110, __pyx_L1_error)
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_begin = __pyx_t_2;
@@ -45244,16 +48525,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":93
+  /* "PETSc/petscdmshell.pxi":111
  *     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 = __Pyx_PyInt_From_InsertMode(__pyx_v_mode); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 93, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyInt_From_InsertMode(__pyx_v_mode); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 111, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 93, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 111, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_Dm));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Dm));
@@ -45267,30 +48548,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_ERR(8, 93, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 111, __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_ERR(8, 93, __pyx_L1_error)
+  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 111, __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_ERR(8, 93, __pyx_L1_error)
+    __PYX_ERR(8, 111, __pyx_L1_error)
   }
   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_t_6 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 111, __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_ERR(8, 93, __pyx_L1_error)
+    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 111, __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_ERR(8, 93, __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, 111, __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":94
+  /* "PETSc/petscdmshell.pxi":112
  *     (begin, args, kargs) = context
  *     begin(Dm, gvec, mode, lvec, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -45300,7 +48581,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalBegin(DM __pyx_v_dm, Ve
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmshell.pxi":80
+  /* "PETSc/petscdmshell.pxi":98
  *     return 0
  * 
  * cdef int DMSHELL_GlobalToLocalBegin(             # <<<<<<<<<<<<<<
@@ -45326,12 +48607,12 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalBegin(DM __pyx_v_dm, Ve
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscdmshell.pxi":96
+/* "PETSc/petscdmshell.pxi":114
  *     return 0
  * 
  * cdef int DMSHELL_GlobalToLocalEnd(             # <<<<<<<<<<<<<<
@@ -45358,51 +48639,51 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalEnd(DM __pyx_v_dm, Vec
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("DMSHELL_GlobalToLocalEnd", 0);
 
-  /* "PETSc/petscdmshell.pxi":101
+  /* "PETSc/petscdmshell.pxi":119
  *     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_ERR(8, 101, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 119, __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, 101, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 119, __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, 101, __pyx_L1_error)
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 119, __pyx_L1_error)
   __pyx_v_Dm = ((struct PyPetscDMObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":102
+  /* "PETSc/petscdmshell.pxi":120
  *     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_ERR(8, 102, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_g)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 120, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_gvec = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":103
+  /* "PETSc/petscdmshell.pxi":121
  *     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_ERR(8, 103, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_l)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 121, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_lvec = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":104
+  /* "PETSc/petscdmshell.pxi":122
  *     cdef Vec gvec = ref_Vec(g)
  *     cdef Vec lvec = ref_Vec(l)
  *     Dm.dm = dm             # <<<<<<<<<<<<<<
@@ -45411,7 +48692,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalEnd(DM __pyx_v_dm, Vec
  */
   __pyx_v_Dm->dm = __pyx_v_dm;
 
-  /* "PETSc/petscdmshell.pxi":105
+  /* "PETSc/petscdmshell.pxi":123
  *     cdef Vec lvec = ref_Vec(l)
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)             # <<<<<<<<<<<<<<
@@ -45420,19 +48701,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":106
+  /* "PETSc/petscdmshell.pxi":124
  *     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), ((char *)"__g2l_end__")); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 106, __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, 124, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_context = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":107
+  /* "PETSc/petscdmshell.pxi":125
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__g2l_end__')
  *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
@@ -45454,12 +48735,12 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalEnd(DM __pyx_v_dm, Vec
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(8, 107, __pyx_L1_error)
+      __PYX_ERR(8, 125, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscdmshell.pxi":108
+  /* "PETSc/petscdmshell.pxi":126
  *     context = Dm.get_attr('__g2l_end__')
  *     assert context is not None and type(context) is tuple
  *     (end, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -45468,7 +48749,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalEnd(DM __pyx_v_dm, Vec
  */
   if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
     PyObject* sequence = __pyx_v_context;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -45476,9 +48757,9 @@ 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_ERR(8, 108, __pyx_L1_error)
+      __PYX_ERR(8, 126, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
@@ -45492,16 +48773,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_ERR(8, 108, __pyx_L1_error)
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 126, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 108, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 126, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 108, __pyx_L1_error)
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 126, __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, 108, __pyx_L1_error)
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 126, __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;
@@ -45510,7 +48791,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_ERR(8, 108, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(8, 126, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L6_unpacking_done;
@@ -45518,7 +48799,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_ERR(8, 108, __pyx_L1_error)
+    __PYX_ERR(8, 126, __pyx_L1_error)
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_end = __pyx_t_2;
@@ -45528,16 +48809,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":109
+  /* "PETSc/petscdmshell.pxi":127
  *     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 = __Pyx_PyInt_From_InsertMode(__pyx_v_mode); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 109, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyInt_From_InsertMode(__pyx_v_mode); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 127, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 109, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 127, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_Dm));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Dm));
@@ -45551,30 +48832,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_ERR(8, 109, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 127, __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_ERR(8, 109, __pyx_L1_error)
+  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 127, __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_ERR(8, 109, __pyx_L1_error)
+    __PYX_ERR(8, 127, __pyx_L1_error)
   }
   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_t_6 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 127, __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_ERR(8, 109, __pyx_L1_error)
+    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 127, __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_ERR(8, 109, __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, 127, __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":110
+  /* "PETSc/petscdmshell.pxi":128
  *     (end, args, kargs) = context
  *     end(Dm, gvec, mode, lvec, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -45584,7 +48865,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalEnd(DM __pyx_v_dm, Vec
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmshell.pxi":96
+  /* "PETSc/petscdmshell.pxi":114
  *     return 0
  * 
  * cdef int DMSHELL_GlobalToLocalEnd(             # <<<<<<<<<<<<<<
@@ -45610,12 +48891,12 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_GlobalToLocalEnd(DM __pyx_v_dm, Vec
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscdmshell.pxi":112
+/* "PETSc/petscdmshell.pxi":130
  *     return 0
  * 
  * cdef int DMSHELL_LocalToGlobalBegin(             # <<<<<<<<<<<<<<
@@ -45642,51 +48923,51 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalBegin(DM __pyx_v_dm, Ve
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("DMSHELL_LocalToGlobalBegin", 0);
 
-  /* "PETSc/petscdmshell.pxi":117
+  /* "PETSc/petscdmshell.pxi":135
  *     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_ERR(8, 117, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 135, __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, 117, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 135, __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, 117, __pyx_L1_error)
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 135, __pyx_L1_error)
   __pyx_v_Dm = ((struct PyPetscDMObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":118
+  /* "PETSc/petscdmshell.pxi":136
  *     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_ERR(8, 118, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_g)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 136, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_gvec = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":119
+  /* "PETSc/petscdmshell.pxi":137
  *     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_ERR(8, 119, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_l)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 137, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_lvec = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":120
+  /* "PETSc/petscdmshell.pxi":138
  *     cdef Vec gvec = ref_Vec(g)
  *     cdef Vec lvec = ref_Vec(l)
  *     Dm.dm = dm             # <<<<<<<<<<<<<<
@@ -45695,7 +48976,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalBegin(DM __pyx_v_dm, Ve
  */
   __pyx_v_Dm->dm = __pyx_v_dm;
 
-  /* "PETSc/petscdmshell.pxi":121
+  /* "PETSc/petscdmshell.pxi":139
  *     cdef Vec lvec = ref_Vec(l)
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)             # <<<<<<<<<<<<<<
@@ -45704,19 +48985,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":122
+  /* "PETSc/petscdmshell.pxi":140
  *     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), ((char *)"__l2g_begin__")); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 122, __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, 140, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_context = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":123
+  /* "PETSc/petscdmshell.pxi":141
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__l2g_begin__')
  *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
@@ -45738,12 +49019,12 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalBegin(DM __pyx_v_dm, Ve
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(8, 123, __pyx_L1_error)
+      __PYX_ERR(8, 141, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscdmshell.pxi":124
+  /* "PETSc/petscdmshell.pxi":142
  *     context = Dm.get_attr('__l2g_begin__')
  *     assert context is not None and type(context) is tuple
  *     (begin, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -45752,7 +49033,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalBegin(DM __pyx_v_dm, Ve
  */
   if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
     PyObject* sequence = __pyx_v_context;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -45760,9 +49041,9 @@ 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_ERR(8, 124, __pyx_L1_error)
+      __PYX_ERR(8, 142, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
@@ -45776,16 +49057,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_ERR(8, 124, __pyx_L1_error)
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 142, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 124, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 142, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 124, __pyx_L1_error)
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 142, __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, 124, __pyx_L1_error)
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 142, __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;
@@ -45794,7 +49075,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_ERR(8, 124, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(8, 142, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L6_unpacking_done;
@@ -45802,7 +49083,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_ERR(8, 124, __pyx_L1_error)
+    __PYX_ERR(8, 142, __pyx_L1_error)
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_begin = __pyx_t_2;
@@ -45812,16 +49093,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":125
+  /* "PETSc/petscdmshell.pxi":143
  *     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 = __Pyx_PyInt_From_InsertMode(__pyx_v_mode); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 125, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyInt_From_InsertMode(__pyx_v_mode); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 143, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 125, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 143, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_Dm));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Dm));
@@ -45835,30 +49116,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_ERR(8, 125, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 143, __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_ERR(8, 125, __pyx_L1_error)
+  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 143, __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_ERR(8, 125, __pyx_L1_error)
+    __PYX_ERR(8, 143, __pyx_L1_error)
   }
   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_t_6 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 143, __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_ERR(8, 125, __pyx_L1_error)
+    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 143, __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_ERR(8, 125, __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, 143, __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":126
+  /* "PETSc/petscdmshell.pxi":144
  *     (begin, args, kargs) = context
  *     begin(Dm, gvec, mode, lvec, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -45868,7 +49149,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalBegin(DM __pyx_v_dm, Ve
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmshell.pxi":112
+  /* "PETSc/petscdmshell.pxi":130
  *     return 0
  * 
  * cdef int DMSHELL_LocalToGlobalBegin(             # <<<<<<<<<<<<<<
@@ -45894,12 +49175,12 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalBegin(DM __pyx_v_dm, Ve
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscdmshell.pxi":128
+/* "PETSc/petscdmshell.pxi":146
  *     return 0
  * 
  * cdef int DMSHELL_LocalToGlobalEnd(             # <<<<<<<<<<<<<<
@@ -45926,51 +49207,51 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalEnd(DM __pyx_v_dm, Vec
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("DMSHELL_LocalToGlobalEnd", 0);
 
-  /* "PETSc/petscdmshell.pxi":133
+  /* "PETSc/petscdmshell.pxi":151
  *     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_ERR(8, 133, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 151, __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, 133, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 151, __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, 133, __pyx_L1_error)
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 151, __pyx_L1_error)
   __pyx_v_Dm = ((struct PyPetscDMObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":134
+  /* "PETSc/petscdmshell.pxi":152
  *     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_ERR(8, 134, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_g)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 152, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_gvec = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":135
+  /* "PETSc/petscdmshell.pxi":153
  *     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_ERR(8, 135, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_l)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 153, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_lvec = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":136
+  /* "PETSc/petscdmshell.pxi":154
  *     cdef Vec gvec = ref_Vec(g)
  *     cdef Vec lvec = ref_Vec(l)
  *     Dm.dm = dm             # <<<<<<<<<<<<<<
@@ -45979,7 +49260,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalEnd(DM __pyx_v_dm, Vec
  */
   __pyx_v_Dm->dm = __pyx_v_dm;
 
-  /* "PETSc/petscdmshell.pxi":137
+  /* "PETSc/petscdmshell.pxi":155
  *     cdef Vec lvec = ref_Vec(l)
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)             # <<<<<<<<<<<<<<
@@ -45988,19 +49269,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":138
+  /* "PETSc/petscdmshell.pxi":156
  *     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), ((char *)"__l2g_end__")); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 138, __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, 156, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_context = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":139
+  /* "PETSc/petscdmshell.pxi":157
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__l2g_end__')
  *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
@@ -46022,12 +49303,12 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalEnd(DM __pyx_v_dm, Vec
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(8, 139, __pyx_L1_error)
+      __PYX_ERR(8, 157, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscdmshell.pxi":140
+  /* "PETSc/petscdmshell.pxi":158
  *     context = Dm.get_attr('__l2g_end__')
  *     assert context is not None and type(context) is tuple
  *     (end, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -46036,7 +49317,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalEnd(DM __pyx_v_dm, Vec
  */
   if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
     PyObject* sequence = __pyx_v_context;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -46044,9 +49325,9 @@ 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_ERR(8, 140, __pyx_L1_error)
+      __PYX_ERR(8, 158, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
@@ -46060,16 +49341,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_ERR(8, 140, __pyx_L1_error)
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 158, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 140, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 158, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 140, __pyx_L1_error)
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 158, __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, 140, __pyx_L1_error)
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 158, __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;
@@ -46078,7 +49359,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_ERR(8, 140, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(8, 158, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L6_unpacking_done;
@@ -46086,7 +49367,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_ERR(8, 140, __pyx_L1_error)
+    __PYX_ERR(8, 158, __pyx_L1_error)
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_end = __pyx_t_2;
@@ -46096,16 +49377,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":141
+  /* "PETSc/petscdmshell.pxi":159
  *     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 = __Pyx_PyInt_From_InsertMode(__pyx_v_mode); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 141, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyInt_From_InsertMode(__pyx_v_mode); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 159, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 141, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 159, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_Dm));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Dm));
@@ -46119,30 +49400,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_ERR(8, 141, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 159, __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_ERR(8, 141, __pyx_L1_error)
+  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 159, __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_ERR(8, 141, __pyx_L1_error)
+    __PYX_ERR(8, 159, __pyx_L1_error)
   }
   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_t_6 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 159, __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_ERR(8, 141, __pyx_L1_error)
+    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 159, __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_ERR(8, 141, __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, 159, __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":142
+  /* "PETSc/petscdmshell.pxi":160
  *     (end, args, kargs) = context
  *     end(Dm, gvec, mode, lvec, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -46152,7 +49433,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalEnd(DM __pyx_v_dm, Vec
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmshell.pxi":128
+  /* "PETSc/petscdmshell.pxi":146
  *     return 0
  * 
  * cdef int DMSHELL_LocalToGlobalEnd(             # <<<<<<<<<<<<<<
@@ -46178,12 +49459,12 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToGlobalEnd(DM __pyx_v_dm, Vec
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscdmshell.pxi":144
+/* "PETSc/petscdmshell.pxi":162
  *     return 0
  * 
  * cdef int DMSHELL_LocalToLocalBegin(             # <<<<<<<<<<<<<<
@@ -46210,51 +49491,51 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalBegin(DM __pyx_v_dm, Vec
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("DMSHELL_LocalToLocalBegin", 0);
 
-  /* "PETSc/petscdmshell.pxi":149
+  /* "PETSc/petscdmshell.pxi":167
  *     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_ERR(8, 149, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 167, __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, 149, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 167, __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, 149, __pyx_L1_error)
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 167, __pyx_L1_error)
   __pyx_v_Dm = ((struct PyPetscDMObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":150
+  /* "PETSc/petscdmshell.pxi":168
  *     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_ERR(8, 150, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_g)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 168, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_gvec = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":151
+  /* "PETSc/petscdmshell.pxi":169
  *     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_ERR(8, 151, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_l)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 169, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_lvec = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":152
+  /* "PETSc/petscdmshell.pxi":170
  *     cdef Vec gvec = ref_Vec(g)
  *     cdef Vec lvec = ref_Vec(l)
  *     Dm.dm = dm             # <<<<<<<<<<<<<<
@@ -46263,7 +49544,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalBegin(DM __pyx_v_dm, Vec
  */
   __pyx_v_Dm->dm = __pyx_v_dm;
 
-  /* "PETSc/petscdmshell.pxi":153
+  /* "PETSc/petscdmshell.pxi":171
  *     cdef Vec lvec = ref_Vec(l)
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)             # <<<<<<<<<<<<<<
@@ -46272,19 +49553,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":154
+  /* "PETSc/petscdmshell.pxi":172
  *     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), ((char *)"__l2l_begin__")); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 154, __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, 172, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_context = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":155
+  /* "PETSc/petscdmshell.pxi":173
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__l2l_begin__')
  *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
@@ -46306,12 +49587,12 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalBegin(DM __pyx_v_dm, Vec
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(8, 155, __pyx_L1_error)
+      __PYX_ERR(8, 173, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscdmshell.pxi":156
+  /* "PETSc/petscdmshell.pxi":174
  *     context = Dm.get_attr('__l2l_begin__')
  *     assert context is not None and type(context) is tuple
  *     (begin, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -46320,7 +49601,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalBegin(DM __pyx_v_dm, Vec
  */
   if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
     PyObject* sequence = __pyx_v_context;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -46328,9 +49609,9 @@ 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_ERR(8, 156, __pyx_L1_error)
+      __PYX_ERR(8, 174, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
@@ -46344,16 +49625,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_ERR(8, 156, __pyx_L1_error)
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 174, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 156, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 174, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 156, __pyx_L1_error)
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 174, __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, 156, __pyx_L1_error)
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 174, __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;
@@ -46362,7 +49643,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_ERR(8, 156, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(8, 174, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L6_unpacking_done;
@@ -46370,7 +49651,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_ERR(8, 156, __pyx_L1_error)
+    __PYX_ERR(8, 174, __pyx_L1_error)
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_begin = __pyx_t_2;
@@ -46380,16 +49661,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":157
+  /* "PETSc/petscdmshell.pxi":175
  *     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 = __Pyx_PyInt_From_InsertMode(__pyx_v_mode); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 157, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyInt_From_InsertMode(__pyx_v_mode); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 175, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 157, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 175, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_Dm));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Dm));
@@ -46403,30 +49684,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_ERR(8, 157, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 175, __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_ERR(8, 157, __pyx_L1_error)
+  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 175, __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_ERR(8, 157, __pyx_L1_error)
+    __PYX_ERR(8, 175, __pyx_L1_error)
   }
   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_t_6 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 175, __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_ERR(8, 157, __pyx_L1_error)
+    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 175, __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_ERR(8, 157, __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, 175, __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":158
+  /* "PETSc/petscdmshell.pxi":176
  *     (begin, args, kargs) = context
  *     begin(Dm, gvec, mode, lvec, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -46436,7 +49717,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalBegin(DM __pyx_v_dm, Vec
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmshell.pxi":144
+  /* "PETSc/petscdmshell.pxi":162
  *     return 0
  * 
  * cdef int DMSHELL_LocalToLocalBegin(             # <<<<<<<<<<<<<<
@@ -46462,12 +49743,12 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalBegin(DM __pyx_v_dm, Vec
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscdmshell.pxi":160
+/* "PETSc/petscdmshell.pxi":178
  *     return 0
  * 
  * cdef int DMSHELL_LocalToLocalEnd(             # <<<<<<<<<<<<<<
@@ -46494,51 +49775,51 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalEnd(DM __pyx_v_dm, Vec _
   PyObject *__pyx_t_7 = NULL;
   PyObject *(*__pyx_t_8)(PyObject *);
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("DMSHELL_LocalToLocalEnd", 0);
 
-  /* "PETSc/petscdmshell.pxi":165
+  /* "PETSc/petscdmshell.pxi":183
  *     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_ERR(8, 165, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 183, __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, 165, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 183, __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, 165, __pyx_L1_error)
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 183, __pyx_L1_error)
   __pyx_v_Dm = ((struct PyPetscDMObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":166
+  /* "PETSc/petscdmshell.pxi":184
  *     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_ERR(8, 166, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_g)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 184, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_gvec = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":167
+  /* "PETSc/petscdmshell.pxi":185
  *     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_ERR(8, 167, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_l)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 185, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_lvec = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":168
+  /* "PETSc/petscdmshell.pxi":186
  *     cdef Vec gvec = ref_Vec(g)
  *     cdef Vec lvec = ref_Vec(l)
  *     Dm.dm = dm             # <<<<<<<<<<<<<<
@@ -46547,7 +49828,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalEnd(DM __pyx_v_dm, Vec _
  */
   __pyx_v_Dm->dm = __pyx_v_dm;
 
-  /* "PETSc/petscdmshell.pxi":169
+  /* "PETSc/petscdmshell.pxi":187
  *     cdef Vec lvec = ref_Vec(l)
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)             # <<<<<<<<<<<<<<
@@ -46556,19 +49837,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":170
+  /* "PETSc/petscdmshell.pxi":188
  *     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), ((char *)"__l2l_end__")); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 170, __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, 188, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_context = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":171
+  /* "PETSc/petscdmshell.pxi":189
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__l2l_end__')
  *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
@@ -46590,12 +49871,12 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalEnd(DM __pyx_v_dm, Vec _
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(8, 171, __pyx_L1_error)
+      __PYX_ERR(8, 189, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscdmshell.pxi":172
+  /* "PETSc/petscdmshell.pxi":190
  *     context = Dm.get_attr('__l2l_end__')
  *     assert context is not None and type(context) is tuple
  *     (end, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -46604,7 +49885,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalEnd(DM __pyx_v_dm, Vec _
  */
   if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
     PyObject* sequence = __pyx_v_context;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -46612,9 +49893,9 @@ 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_ERR(8, 172, __pyx_L1_error)
+      __PYX_ERR(8, 190, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
@@ -46628,16 +49909,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_ERR(8, 172, __pyx_L1_error)
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 190, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 172, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 190, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 172, __pyx_L1_error)
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 190, __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, 172, __pyx_L1_error)
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 190, __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;
@@ -46646,7 +49927,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_ERR(8, 172, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(8, 190, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L6_unpacking_done;
@@ -46654,7 +49935,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_ERR(8, 172, __pyx_L1_error)
+    __PYX_ERR(8, 190, __pyx_L1_error)
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_end = __pyx_t_2;
@@ -46664,16 +49945,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":173
+  /* "PETSc/petscdmshell.pxi":191
  *     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 = __Pyx_PyInt_From_InsertMode(__pyx_v_mode); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 173, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PyInt_From_InsertMode(__pyx_v_mode); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 191, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 173, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 191, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_Dm));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Dm));
@@ -46687,30 +49968,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_ERR(8, 173, __pyx_L1_error)
+  __pyx_t_6 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 191, __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_ERR(8, 173, __pyx_L1_error)
+  __pyx_t_2 = PyNumber_Add(__pyx_t_1, __pyx_t_6); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 191, __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_ERR(8, 173, __pyx_L1_error)
+    __PYX_ERR(8, 191, __pyx_L1_error)
   }
   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_t_6 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 191, __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_ERR(8, 173, __pyx_L1_error)
+    __pyx_t_6 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 191, __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_ERR(8, 173, __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, 191, __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":174
+  /* "PETSc/petscdmshell.pxi":192
  *     (end, args, kargs) = context
  *     end(Dm, gvec, mode, lvec, *args, **kargs)
  *     return 0             # <<<<<<<<<<<<<<
@@ -46720,7 +50001,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalEnd(DM __pyx_v_dm, Vec _
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmshell.pxi":160
+  /* "PETSc/petscdmshell.pxi":178
  *     return 0
  * 
  * cdef int DMSHELL_LocalToLocalEnd(             # <<<<<<<<<<<<<<
@@ -46746,12 +50027,12 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_LocalToLocalEnd(DM __pyx_v_dm, Vec _
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscdmshell.pxi":176
+/* "PETSc/petscdmshell.pxi":194
  *     return 0
  * 
  * cdef int DMSHELL_CreateMatrix(             # <<<<<<<<<<<<<<
@@ -46778,27 +50059,27 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateMatrix(DM __pyx_v_dm, Mat *__p
   PyObject *(*__pyx_t_8)(PyObject *);
   Mat __pyx_t_9;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("DMSHELL_CreateMatrix", 0);
 
-  /* "PETSc/petscdmshell.pxi":179
+  /* "PETSc/petscdmshell.pxi":197
  *     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_ERR(8, 179, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 197, __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, 179, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 197, __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, 179, __pyx_L1_error)
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 197, __pyx_L1_error)
   __pyx_v_Dm = ((struct PyPetscDMObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":182
+  /* "PETSc/petscdmshell.pxi":200
  *     cdef Mat mat
  * 
  *     Dm.dm = dm             # <<<<<<<<<<<<<<
@@ -46807,7 +50088,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":183
+  /* "PETSc/petscdmshell.pxi":201
  * 
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)             # <<<<<<<<<<<<<<
@@ -46816,19 +50097,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":184
+  /* "PETSc/petscdmshell.pxi":202
  *     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), ((char *)"__create_matrix__")); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 184, __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, 202, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_context = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":185
+  /* "PETSc/petscdmshell.pxi":203
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__create_matrix__')
  *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
@@ -46850,12 +50131,12 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateMatrix(DM __pyx_v_dm, Mat *__p
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(8, 185, __pyx_L1_error)
+      __PYX_ERR(8, 203, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscdmshell.pxi":186
+  /* "PETSc/petscdmshell.pxi":204
  *     context = Dm.get_attr('__create_matrix__')
  *     assert context is not None and type(context) is tuple
  *     (matrix, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -46864,7 +50145,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateMatrix(DM __pyx_v_dm, Mat *__p
  */
   if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
     PyObject* sequence = __pyx_v_context;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -46872,9 +50153,9 @@ 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_ERR(8, 186, __pyx_L1_error)
+      __PYX_ERR(8, 204, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
@@ -46888,16 +50169,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_ERR(8, 186, __pyx_L1_error)
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 204, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 186, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 204, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 186, __pyx_L1_error)
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 204, __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, 186, __pyx_L1_error)
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 204, __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;
@@ -46906,7 +50187,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_ERR(8, 186, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(8, 204, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L6_unpacking_done;
@@ -46914,7 +50195,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_ERR(8, 186, __pyx_L1_error)
+    __PYX_ERR(8, 204, __pyx_L1_error)
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_matrix = __pyx_t_2;
@@ -46924,44 +50205,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":187
+  /* "PETSc/petscdmshell.pxi":205
  *     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_ERR(8, 187, __pyx_L1_error)
+  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 205, __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_ERR(8, 187, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 205, __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, 187, __pyx_L1_error)
+  __pyx_t_2 = PyNumber_Add(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 205, __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, 187, __pyx_L1_error)
+    __PYX_ERR(8, 205, __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, 187, __pyx_L1_error)
+    __pyx_t_1 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 205, __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, 187, __pyx_L1_error)
+    __pyx_t_1 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 205, __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_ERR(8, 187, __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, 205, __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_ERR(8, 187, __pyx_L1_error)
+  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(8, 205, __pyx_L1_error)
   __pyx_v_mat = ((struct PyPetscMatObject *)__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscdmshell.pxi":188
+  /* "PETSc/petscdmshell.pxi":206
  *     (matrix, args, kargs) = context
  *     mat = matrix(Dm, *args, **kargs)
  *     PetscINCREF(mat.obj)             # <<<<<<<<<<<<<<
@@ -46970,7 +50251,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":189
+  /* "PETSc/petscdmshell.pxi":207
  *     mat = matrix(Dm, *args, **kargs)
  *     PetscINCREF(mat.obj)
  *     cmat[0] = mat.mat             # <<<<<<<<<<<<<<
@@ -46980,7 +50261,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":190
+  /* "PETSc/petscdmshell.pxi":208
  *     PetscINCREF(mat.obj)
  *     cmat[0] = mat.mat
  *     return 0             # <<<<<<<<<<<<<<
@@ -46990,7 +50271,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateMatrix(DM __pyx_v_dm, Mat *__p
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmshell.pxi":176
+  /* "PETSc/petscdmshell.pxi":194
  *     return 0
  * 
  * cdef int DMSHELL_CreateMatrix(             # <<<<<<<<<<<<<<
@@ -47015,12 +50296,12 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateMatrix(DM __pyx_v_dm, Mat *__p
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscdmshell.pxi":192
+/* "PETSc/petscdmshell.pxi":210
  *     return 0
  * 
  * cdef int DMSHELL_Coarsen(             # <<<<<<<<<<<<<<
@@ -47048,39 +50329,39 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Coarsen(DM __pyx_v_dm, MPI_Comm __py
   PyObject *(*__pyx_t_8)(PyObject *);
   DM __pyx_t_9;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("DMSHELL_Coarsen", 0);
 
-  /* "PETSc/petscdmshell.pxi":196
+  /* "PETSc/petscdmshell.pxi":214
  *     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_ERR(8, 196, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 214, __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, 196, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 214, __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, 196, __pyx_L1_error)
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 214, __pyx_L1_error)
   __pyx_v_Dm = ((struct PyPetscDMObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":198
+  /* "PETSc/petscdmshell.pxi":216
  *     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_ERR(8, 198, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_new_Comm(__pyx_v_comm)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 216, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_Comm = ((struct PyPetscCommObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":199
+  /* "PETSc/petscdmshell.pxi":217
  *     cdef DM Dmc
  *     cdef Comm Comm = new_Comm(comm)
  *     Dm.dm = dm             # <<<<<<<<<<<<<<
@@ -47089,7 +50370,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":200
+  /* "PETSc/petscdmshell.pxi":218
  *     cdef Comm Comm = new_Comm(comm)
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)             # <<<<<<<<<<<<<<
@@ -47098,19 +50379,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":201
+  /* "PETSc/petscdmshell.pxi":219
  *     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), ((char *)"__coarsen__")); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 201, __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, 219, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_context = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":202
+  /* "PETSc/petscdmshell.pxi":220
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__coarsen__')
  *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
@@ -47132,12 +50413,12 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Coarsen(DM __pyx_v_dm, MPI_Comm __py
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(8, 202, __pyx_L1_error)
+      __PYX_ERR(8, 220, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscdmshell.pxi":203
+  /* "PETSc/petscdmshell.pxi":221
  *     context = Dm.get_attr('__coarsen__')
  *     assert context is not None and type(context) is tuple
  *     (coarsen, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -47146,7 +50427,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Coarsen(DM __pyx_v_dm, MPI_Comm __py
  */
   if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
     PyObject* sequence = __pyx_v_context;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -47154,9 +50435,9 @@ 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_ERR(8, 203, __pyx_L1_error)
+      __PYX_ERR(8, 221, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
@@ -47170,16 +50451,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_ERR(8, 203, __pyx_L1_error)
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 221, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 203, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 221, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 203, __pyx_L1_error)
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 221, __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, 203, __pyx_L1_error)
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 221, __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;
@@ -47188,7 +50469,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_ERR(8, 203, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(8, 221, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L6_unpacking_done;
@@ -47196,7 +50477,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_ERR(8, 203, __pyx_L1_error)
+    __PYX_ERR(8, 221, __pyx_L1_error)
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_coarsen = __pyx_t_2;
@@ -47206,14 +50487,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":204
+  /* "PETSc/petscdmshell.pxi":222
  *     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_ERR(8, 204, __pyx_L1_error)
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 222, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(((PyObject *)__pyx_v_Dm));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Dm));
@@ -47221,32 +50502,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_ERR(8, 204, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 222, __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, 204, __pyx_L1_error)
+  __pyx_t_2 = PyNumber_Add(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 222, __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, 204, __pyx_L1_error)
+    __PYX_ERR(8, 222, __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, 204, __pyx_L1_error)
+    __pyx_t_1 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 222, __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, 204, __pyx_L1_error)
+    __pyx_t_1 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 222, __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_ERR(8, 204, __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, 222, __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_ERR(8, 204, __pyx_L1_error)
+  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 222, __pyx_L1_error)
   __pyx_v_Dmc = ((struct PyPetscDMObject *)__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscdmshell.pxi":205
+  /* "PETSc/petscdmshell.pxi":223
  *     (coarsen, args, kargs) = context
  *     Dmc = coarsen(Dm, Comm, *args, **kargs)
  *     PetscINCREF(Dmc.obj)             # <<<<<<<<<<<<<<
@@ -47255,7 +50536,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":206
+  /* "PETSc/petscdmshell.pxi":224
  *     Dmc = coarsen(Dm, Comm, *args, **kargs)
  *     PetscINCREF(Dmc.obj)
  *     dmc[0] = Dmc.dm             # <<<<<<<<<<<<<<
@@ -47265,7 +50546,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":207
+  /* "PETSc/petscdmshell.pxi":225
  *     PetscINCREF(Dmc.obj)
  *     dmc[0] = Dmc.dm
  *     return 0             # <<<<<<<<<<<<<<
@@ -47275,7 +50556,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":192
+  /* "PETSc/petscdmshell.pxi":210
  *     return 0
  * 
  * cdef int DMSHELL_Coarsen(             # <<<<<<<<<<<<<<
@@ -47301,12 +50582,12 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Coarsen(DM __pyx_v_dm, MPI_Comm __py
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscdmshell.pxi":209
+/* "PETSc/petscdmshell.pxi":227
  *     return 0
  * 
  * cdef int DMSHELL_Refine(             # <<<<<<<<<<<<<<
@@ -47334,39 +50615,39 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Refine(DM __pyx_v_dm, MPI_Comm __pyx
   PyObject *(*__pyx_t_8)(PyObject *);
   DM __pyx_t_9;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("DMSHELL_Refine", 0);
 
-  /* "PETSc/petscdmshell.pxi":213
+  /* "PETSc/petscdmshell.pxi":231
  *     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_ERR(8, 213, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); 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_ERR(8, 213, __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_ERR(8, 213, __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_Dm = ((struct PyPetscDMObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":215
+  /* "PETSc/petscdmshell.pxi":233
  *     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_ERR(8, 215, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_new_Comm(__pyx_v_comm)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 233, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_Comm = ((struct PyPetscCommObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":216
+  /* "PETSc/petscdmshell.pxi":234
  *     cdef DM Dmf
  *     cdef Comm Comm = new_Comm(comm)
  *     Dm.dm = dm             # <<<<<<<<<<<<<<
@@ -47375,7 +50656,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":217
+  /* "PETSc/petscdmshell.pxi":235
  *     cdef Comm Comm = new_Comm(comm)
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)             # <<<<<<<<<<<<<<
@@ -47384,19 +50665,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":218
+  /* "PETSc/petscdmshell.pxi":236
  *     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), ((char *)"__refine__")); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 218, __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, 236, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_context = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":219
+  /* "PETSc/petscdmshell.pxi":237
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__refine__')
  *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
@@ -47418,12 +50699,12 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Refine(DM __pyx_v_dm, MPI_Comm __pyx
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(8, 219, __pyx_L1_error)
+      __PYX_ERR(8, 237, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscdmshell.pxi":220
+  /* "PETSc/petscdmshell.pxi":238
  *     context = Dm.get_attr('__refine__')
  *     assert context is not None and type(context) is tuple
  *     (refine, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -47432,7 +50713,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Refine(DM __pyx_v_dm, MPI_Comm __pyx
  */
   if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
     PyObject* sequence = __pyx_v_context;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -47440,9 +50721,9 @@ 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_ERR(8, 220, __pyx_L1_error)
+      __PYX_ERR(8, 238, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
@@ -47456,16 +50737,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_ERR(8, 220, __pyx_L1_error)
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 238, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 220, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 238, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 220, __pyx_L1_error)
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 238, __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, 220, __pyx_L1_error)
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 238, __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;
@@ -47474,7 +50755,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_ERR(8, 220, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(8, 238, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L6_unpacking_done;
@@ -47482,7 +50763,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_ERR(8, 220, __pyx_L1_error)
+    __PYX_ERR(8, 238, __pyx_L1_error)
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_refine = __pyx_t_2;
@@ -47492,14 +50773,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":221
+  /* "PETSc/petscdmshell.pxi":239
  *     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_ERR(8, 221, __pyx_L1_error)
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 239, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(((PyObject *)__pyx_v_Dm));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Dm));
@@ -47507,32 +50788,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_ERR(8, 221, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 239, __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, 221, __pyx_L1_error)
+  __pyx_t_2 = PyNumber_Add(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 239, __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, 221, __pyx_L1_error)
+    __PYX_ERR(8, 239, __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, 221, __pyx_L1_error)
+    __pyx_t_1 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 239, __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, 221, __pyx_L1_error)
+    __pyx_t_1 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 239, __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_ERR(8, 221, __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, 239, __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_ERR(8, 221, __pyx_L1_error)
+  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 239, __pyx_L1_error)
   __pyx_v_Dmf = ((struct PyPetscDMObject *)__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscdmshell.pxi":222
+  /* "PETSc/petscdmshell.pxi":240
  *     (refine, args, kargs) = context
  *     Dmf = refine(Dm, Comm, *args, **kargs)
  *     PetscINCREF(Dmf.obj)             # <<<<<<<<<<<<<<
@@ -47541,7 +50822,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":223
+  /* "PETSc/petscdmshell.pxi":241
  *     Dmf = refine(Dm, Comm, *args, **kargs)
  *     PetscINCREF(Dmf.obj)
  *     dmf[0] = Dmf.dm             # <<<<<<<<<<<<<<
@@ -47551,7 +50832,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":224
+  /* "PETSc/petscdmshell.pxi":242
  *     PetscINCREF(Dmf.obj)
  *     dmf[0] = Dmf.dm
  *     return 0             # <<<<<<<<<<<<<<
@@ -47561,7 +50842,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":209
+  /* "PETSc/petscdmshell.pxi":227
  *     return 0
  * 
  * cdef int DMSHELL_Refine(             # <<<<<<<<<<<<<<
@@ -47587,12 +50868,12 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_Refine(DM __pyx_v_dm, MPI_Comm __pyx
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscdmshell.pxi":226
+/* "PETSc/petscdmshell.pxi":244
  *     return 0
  * 
  * cdef int DMSHELL_CreateInterpolation(             # <<<<<<<<<<<<<<
@@ -47622,43 +50903,43 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
   Mat __pyx_t_9;
   Vec __pyx_t_10;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("DMSHELL_CreateInterpolation", 0);
 
-  /* "PETSc/petscdmshell.pxi":231
+  /* "PETSc/petscdmshell.pxi":249
  *     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_ERR(8, 231, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dmc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 249, __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, 231, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 249, __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, 231, __pyx_L1_error)
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 249, __pyx_L1_error)
   __pyx_v_Dmc = ((struct PyPetscDMObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":232
+  /* "PETSc/petscdmshell.pxi":250
  *     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_ERR(8, 232, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dmf)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 250, __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_ERR(8, 232, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 250, __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(8, 232, __pyx_L1_error)
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 250, __pyx_L1_error)
   __pyx_v_Dmf = ((struct PyPetscDMObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscdmshell.pxi":235
+  /* "PETSc/petscdmshell.pxi":253
  *     cdef Mat mat
  *     cdef Vec vec
  *     Dmc.dm = dmc             # <<<<<<<<<<<<<<
@@ -47667,7 +50948,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
  */
   __pyx_v_Dmc->dm = __pyx_v_dmc;
 
-  /* "PETSc/petscdmshell.pxi":236
+  /* "PETSc/petscdmshell.pxi":254
  *     cdef Vec vec
  *     Dmc.dm = dmc
  *     PetscINCREF(Dmc.obj)             # <<<<<<<<<<<<<<
@@ -47676,7 +50957,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":237
+  /* "PETSc/petscdmshell.pxi":255
  *     Dmc.dm = dmc
  *     PetscINCREF(Dmc.obj)
  *     Dmf.dm = dmf             # <<<<<<<<<<<<<<
@@ -47685,7 +50966,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
  */
   __pyx_v_Dmf->dm = __pyx_v_dmf;
 
-  /* "PETSc/petscdmshell.pxi":238
+  /* "PETSc/petscdmshell.pxi":256
  *     PetscINCREF(Dmc.obj)
  *     Dmf.dm = dmf
  *     PetscINCREF(Dmf.obj)             # <<<<<<<<<<<<<<
@@ -47694,19 +50975,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":239
+  /* "PETSc/petscdmshell.pxi":257
  *     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), ((char *)"__create_interpolation__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 239, __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, 257, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscdmshell.pxi":240
+  /* "PETSc/petscdmshell.pxi":258
  *     PetscINCREF(Dmf.obj)
  *     context = Dmc.get_attr('__create_interpolation__')
  *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
@@ -47728,12 +51009,12 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(8, 240, __pyx_L1_error)
+      __PYX_ERR(8, 258, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscdmshell.pxi":241
+  /* "PETSc/petscdmshell.pxi":259
  *     context = Dmc.get_attr('__create_interpolation__')
  *     assert context is not None and type(context) is tuple
  *     (interpolation, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -47742,7 +51023,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
  */
   if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
     PyObject* sequence = __pyx_v_context;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -47750,9 +51031,9 @@ 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_ERR(8, 241, __pyx_L1_error)
+      __PYX_ERR(8, 259, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
@@ -47766,16 +51047,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_ERR(8, 241, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 259, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 241, __pyx_L1_error)
+    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 259, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 241, __pyx_L1_error)
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 259, __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, 241, __pyx_L1_error)
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 259, __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;
@@ -47784,7 +51065,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_ERR(8, 241, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(8, 259, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L6_unpacking_done;
@@ -47792,7 +51073,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_ERR(8, 241, __pyx_L1_error)
+    __PYX_ERR(8, 259, __pyx_L1_error)
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_interpolation = __pyx_t_1;
@@ -47802,14 +51083,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":242
+  /* "PETSc/petscdmshell.pxi":260
  *     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_ERR(8, 242, __pyx_L1_error)
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 260, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(((PyObject *)__pyx_v_Dmc));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Dmc));
@@ -47817,30 +51098,30 @@ 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_ERR(8, 242, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 260, __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_ERR(8, 242, __pyx_L1_error)
+  __pyx_t_1 = PyNumber_Add(__pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 260, __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_ERR(8, 242, __pyx_L1_error)
+    __PYX_ERR(8, 260, __pyx_L1_error)
   }
   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_t_2 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 260, __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_ERR(8, 242, __pyx_L1_error)
+    __pyx_t_2 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 260, __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_ERR(8, 242, __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, 260, __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(PyTuple_CheckExact(__pyx_t_6))) || (PyList_CheckExact(__pyx_t_6))) {
     PyObject* sequence = __pyx_t_6;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -47848,9 +51129,9 @@ 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_ERR(8, 242, __pyx_L1_error)
+      __PYX_ERR(8, 260, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
@@ -47861,15 +51142,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_ERR(8, 242, __pyx_L1_error)
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 260, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 242, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 260, __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_ERR(8, 242, __pyx_L1_error)
+    __pyx_t_7 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 260, __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;
@@ -47877,7 +51158,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_ERR(8, 242, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(8, 260, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L8_unpacking_done;
@@ -47885,17 +51166,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_ERR(8, 242, __pyx_L1_error)
+    __PYX_ERR(8, 260, __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_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)
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(8, 260, __pyx_L1_error)
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(8, 260, __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":243
+  /* "PETSc/petscdmshell.pxi":261
  *     (interpolation, args, kargs) = context
  *     mat, vec = interpolation(Dmc, Dmf, *args, **kargs)
  *     PetscINCREF(mat.obj)             # <<<<<<<<<<<<<<
@@ -47904,7 +51185,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":244
+  /* "PETSc/petscdmshell.pxi":262
  *     mat, vec = interpolation(Dmc, Dmf, *args, **kargs)
  *     PetscINCREF(mat.obj)
  *     cmat[0] = mat.mat             # <<<<<<<<<<<<<<
@@ -47914,7 +51195,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":245
+  /* "PETSc/petscdmshell.pxi":263
  *     PetscINCREF(mat.obj)
  *     cmat[0] = mat.mat
  *     if vec is None:             # <<<<<<<<<<<<<<
@@ -47925,7 +51206,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":246
+    /* "PETSc/petscdmshell.pxi":264
  *     cmat[0] = mat.mat
  *     if vec is None:
  *         cvec[0] = NULL             # <<<<<<<<<<<<<<
@@ -47934,7 +51215,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
  */
     (__pyx_v_cvec[0]) = NULL;
 
-    /* "PETSc/petscdmshell.pxi":245
+    /* "PETSc/petscdmshell.pxi":263
  *     PetscINCREF(mat.obj)
  *     cmat[0] = mat.mat
  *     if vec is None:             # <<<<<<<<<<<<<<
@@ -47944,7 +51225,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
     goto __pyx_L9;
   }
 
-  /* "PETSc/petscdmshell.pxi":248
+  /* "PETSc/petscdmshell.pxi":266
  *         cvec[0] = NULL
  *     else:
  *         PetscINCREF(vec.obj)             # <<<<<<<<<<<<<<
@@ -47954,7 +51235,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
   /*else*/ {
     __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_vec->__pyx_base.obj);
 
-    /* "PETSc/petscdmshell.pxi":249
+    /* "PETSc/petscdmshell.pxi":267
  *     else:
  *         PetscINCREF(vec.obj)
  *         cvec[0] = vec.vec             # <<<<<<<<<<<<<<
@@ -47966,7 +51247,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
   }
   __pyx_L9:;
 
-  /* "PETSc/petscdmshell.pxi":250
+  /* "PETSc/petscdmshell.pxi":268
  *         PetscINCREF(vec.obj)
  *         cvec[0] = vec.vec
  *     return 0             # <<<<<<<<<<<<<<
@@ -47976,7 +51257,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmshell.pxi":226
+  /* "PETSc/petscdmshell.pxi":244
  *     return 0
  * 
  * cdef int DMSHELL_CreateInterpolation(             # <<<<<<<<<<<<<<
@@ -48003,12 +51284,12 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInterpolation(DM __pyx_v_dmc,
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscdmshell.pxi":252
+/* "PETSc/petscdmshell.pxi":270
  *     return 0
  * 
  * cdef int DMSHELL_CreateInjection(             # <<<<<<<<<<<<<<
@@ -48036,43 +51317,43 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInjection(DM __pyx_v_dmc, DM _
   PyObject *(*__pyx_t_8)(PyObject *);
   Mat __pyx_t_9;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("DMSHELL_CreateInjection", 0);
 
-  /* "PETSc/petscdmshell.pxi":256
+  /* "PETSc/petscdmshell.pxi":274
  *     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_ERR(8, 256, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dmc)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 274, __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, 256, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 274, __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, 256, __pyx_L1_error)
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 274, __pyx_L1_error)
   __pyx_v_Dmc = ((struct PyPetscDMObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":257
+  /* "PETSc/petscdmshell.pxi":275
  *     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_ERR(8, 257, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dmf)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 275, __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_ERR(8, 257, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 275, __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(8, 257, __pyx_L1_error)
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 275, __pyx_L1_error)
   __pyx_v_Dmf = ((struct PyPetscDMObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscdmshell.pxi":259
+  /* "PETSc/petscdmshell.pxi":277
  *     cdef DM Dmf = subtype_DM(dmf)()
  *     cdef Mat mat
  *     Dmc.dm = dmc             # <<<<<<<<<<<<<<
@@ -48081,7 +51362,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInjection(DM __pyx_v_dmc, DM _
  */
   __pyx_v_Dmc->dm = __pyx_v_dmc;
 
-  /* "PETSc/petscdmshell.pxi":260
+  /* "PETSc/petscdmshell.pxi":278
  *     cdef Mat mat
  *     Dmc.dm = dmc
  *     PetscINCREF(Dmc.obj)             # <<<<<<<<<<<<<<
@@ -48090,7 +51371,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":261
+  /* "PETSc/petscdmshell.pxi":279
  *     Dmc.dm = dmc
  *     PetscINCREF(Dmc.obj)
  *     Dmf.dm = dmf             # <<<<<<<<<<<<<<
@@ -48099,7 +51380,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInjection(DM __pyx_v_dmc, DM _
  */
   __pyx_v_Dmf->dm = __pyx_v_dmf;
 
-  /* "PETSc/petscdmshell.pxi":262
+  /* "PETSc/petscdmshell.pxi":280
  *     PetscINCREF(Dmc.obj)
  *     Dmf.dm = dmf
  *     PetscINCREF(Dmf.obj)             # <<<<<<<<<<<<<<
@@ -48108,19 +51389,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":263
+  /* "PETSc/petscdmshell.pxi":281
  *     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), ((char *)"__create_injection__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 263, __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, 281, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_context = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/petscdmshell.pxi":264
+  /* "PETSc/petscdmshell.pxi":282
  *     PetscINCREF(Dmf.obj)
  *     context = Dmc.get_attr('__create_injection__')
  *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
@@ -48142,12 +51423,12 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInjection(DM __pyx_v_dmc, DM _
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(8, 264, __pyx_L1_error)
+      __PYX_ERR(8, 282, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscdmshell.pxi":265
+  /* "PETSc/petscdmshell.pxi":283
  *     context = Dmc.get_attr('__create_injection__')
  *     assert context is not None and type(context) is tuple
  *     (injection, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -48156,7 +51437,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInjection(DM __pyx_v_dmc, DM _
  */
   if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
     PyObject* sequence = __pyx_v_context;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -48164,9 +51445,9 @@ 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_ERR(8, 265, __pyx_L1_error)
+      __PYX_ERR(8, 283, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
@@ -48180,16 +51461,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_ERR(8, 265, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 283, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 265, __pyx_L1_error)
+    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 283, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 265, __pyx_L1_error)
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 283, __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, 265, __pyx_L1_error)
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 283, __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;
@@ -48198,7 +51479,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_ERR(8, 265, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(8, 283, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L6_unpacking_done;
@@ -48206,7 +51487,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_ERR(8, 265, __pyx_L1_error)
+    __PYX_ERR(8, 283, __pyx_L1_error)
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_injection = __pyx_t_1;
@@ -48216,14 +51497,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":266
+  /* "PETSc/petscdmshell.pxi":284
  *     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_ERR(8, 266, __pyx_L1_error)
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 284, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(((PyObject *)__pyx_v_Dmc));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_Dmc));
@@ -48231,32 +51512,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_ERR(8, 266, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 284, __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_ERR(8, 266, __pyx_L1_error)
+  __pyx_t_1 = PyNumber_Add(__pyx_t_6, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 284, __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_ERR(8, 266, __pyx_L1_error)
+    __PYX_ERR(8, 284, __pyx_L1_error)
   }
   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_t_2 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 284, __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_ERR(8, 266, __pyx_L1_error)
+    __pyx_t_2 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 284, __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_ERR(8, 266, __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, 284, __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_ERR(8, 266, __pyx_L1_error)
+  if (!(likely(((__pyx_t_6) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(8, 284, __pyx_L1_error)
   __pyx_v_mat = ((struct PyPetscMatObject *)__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscdmshell.pxi":267
+  /* "PETSc/petscdmshell.pxi":285
  *     (injection, args, kargs) = context
  *     mat = injection(Dmc, Dmf, *args, **kargs)
  *     PetscINCREF(mat.obj)             # <<<<<<<<<<<<<<
@@ -48265,7 +51546,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":268
+  /* "PETSc/petscdmshell.pxi":286
  *     mat = injection(Dmc, Dmf, *args, **kargs)
  *     PetscINCREF(mat.obj)
  *     cmat[0] = mat.mat             # <<<<<<<<<<<<<<
@@ -48275,17 +51556,17 @@ 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":269
+  /* "PETSc/petscdmshell.pxi":287
  *     PetscINCREF(mat.obj)
  *     cmat[0] = mat.mat
  *     return 0             # <<<<<<<<<<<<<<
  * 
- * cdef int DMSHELL_CreateFieldDecomposition(
+ * cdef int DMSHELL_CreateRestriction(
  */
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmshell.pxi":252
+  /* "PETSc/petscdmshell.pxi":270
  *     return 0
  * 
  * cdef int DMSHELL_CreateInjection(             # <<<<<<<<<<<<<<
@@ -48311,12 +51592,320 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateInjection(DM __pyx_v_dmc, DM _
   __Pyx_XDECREF(__pyx_v_kargs);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
+  #endif
+  return __pyx_r;
+}
+
+/* "PETSc/petscdmshell.pxi":289
+ *     return 0
+ * 
+ * cdef int DMSHELL_CreateRestriction(             # <<<<<<<<<<<<<<
+ *     PetscDM dmf,
+ *     PetscDM dmc,
+ */
+
+static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateRestriction(DM __pyx_v_dmf, DM __pyx_v_dmc, Mat *__pyx_v_cmat) {
+  struct PyPetscDMObject *__pyx_v_Dmf = 0;
+  struct PyPetscDMObject *__pyx_v_Dmc = 0;
+  struct PyPetscMatObject *__pyx_v_mat = 0;
+  PyObject *__pyx_v_context = NULL;
+  PyObject *__pyx_v_restriction = 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;
+  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 *);
+  Mat __pyx_t_9;
+  #ifdef WITH_THREAD
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+  #endif
+  __Pyx_RefNannySetupContext("DMSHELL_CreateRestriction", 0);
+
+  /* "PETSc/petscdmshell.pxi":293
+ *     PetscDM dmc,
+ *     PetscMat *cmat) except PETSC_ERR_PYTHON with gil:
+ *     cdef DM Dmf = subtype_DM(dmf)()             # <<<<<<<<<<<<<<
+ *     cdef DM Dmc = subtype_DM(dmc)()
+ *     cdef Mat mat
+ */
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dmf)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 293, __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, 293, __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, 293, __pyx_L1_error)
+  __pyx_v_Dmf = ((struct PyPetscDMObject *)__pyx_t_2);
+  __pyx_t_2 = 0;
+
+  /* "PETSc/petscdmshell.pxi":294
+ *     PetscMat *cmat) except PETSC_ERR_PYTHON with gil:
+ *     cdef DM Dmf = subtype_DM(dmf)()
+ *     cdef DM Dmc = subtype_DM(dmc)()             # <<<<<<<<<<<<<<
+ *     cdef Mat mat
+ *     Dmf.dm = dmf
+ */
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dmc)); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 294, __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_ERR(8, 294, __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(8, 294, __pyx_L1_error)
+  __pyx_v_Dmc = ((struct PyPetscDMObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscdmshell.pxi":296
+ *     cdef DM Dmc = subtype_DM(dmc)()
+ *     cdef Mat mat
+ *     Dmf.dm = dmf             # <<<<<<<<<<<<<<
+ *     PetscINCREF(Dmf.obj)
+ *     Dmc.dm = dmc
+ */
+  __pyx_v_Dmf->dm = __pyx_v_dmf;
+
+  /* "PETSc/petscdmshell.pxi":297
+ *     cdef Mat mat
+ *     Dmf.dm = dmf
+ *     PetscINCREF(Dmf.obj)             # <<<<<<<<<<<<<<
+ *     Dmc.dm = dmc
+ *     PetscINCREF(Dmc.obj)
+ */
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_Dmf->__pyx_base.obj);
+
+  /* "PETSc/petscdmshell.pxi":298
+ *     Dmf.dm = dmf
+ *     PetscINCREF(Dmf.obj)
+ *     Dmc.dm = dmc             # <<<<<<<<<<<<<<
+ *     PetscINCREF(Dmc.obj)
+ *     context = Dmf.get_attr('__create_restriction__')
+ */
+  __pyx_v_Dmc->dm = __pyx_v_dmc;
+
+  /* "PETSc/petscdmshell.pxi":299
+ *     PetscINCREF(Dmf.obj)
+ *     Dmc.dm = dmc
+ *     PetscINCREF(Dmc.obj)             # <<<<<<<<<<<<<<
+ *     context = Dmf.get_attr('__create_restriction__')
+ *     assert context is not None and type(context) is tuple
+ */
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_Dmc->__pyx_base.obj);
+
+  /* "PETSc/petscdmshell.pxi":300
+ *     Dmc.dm = dmc
+ *     PetscINCREF(Dmc.obj)
+ *     context = Dmf.get_attr('__create_restriction__')             # <<<<<<<<<<<<<<
+ *     assert context is not None and type(context) is tuple
+ *     (restriction, args, kargs) = context
+ */
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_Dmf->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Dmf), ((char *)"__create_restriction__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 300, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_context = __pyx_t_1;
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscdmshell.pxi":301
+ *     PetscINCREF(Dmc.obj)
+ *     context = Dmf.get_attr('__create_restriction__')
+ *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
+ *     (restriction, args, kargs) = context
+ *     mat = restriction(Dmf, Dmc, *args, **kargs)
+ */
+  #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, 301, __pyx_L1_error)
+    }
+  }
+  #endif
+
+  /* "PETSc/petscdmshell.pxi":302
+ *     context = Dmf.get_attr('__create_restriction__')
+ *     assert context is not None and type(context) is tuple
+ *     (restriction, args, kargs) = context             # <<<<<<<<<<<<<<
+ *     mat = restriction(Dmf, Dmc, *args, **kargs)
+ *     PetscINCREF(mat.obj)
+ */
+  if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
+    PyObject* sequence = __pyx_v_context;
+    #if !CYTHON_COMPILING_IN_PYPY
+    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, 302, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
+      __pyx_t_6 = PyTuple_GET_ITEM(sequence, 2); 
+    } else {
+      __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
+      __pyx_t_6 = PyList_GET_ITEM(sequence, 2); 
+    }
+    __Pyx_INCREF(__pyx_t_1);
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_6);
+    #else
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 302, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 302, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 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_ERR(8, 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_L5_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_L5_unpacking_failed;
+    __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_ERR(8, 302, __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, 302, __pyx_L1_error)
+    __pyx_L6_unpacking_done:;
+  }
+  __pyx_v_restriction = __pyx_t_1;
+  __pyx_t_1 = 0;
+  __pyx_v_args = __pyx_t_2;
+  __pyx_t_2 = 0;
+  __pyx_v_kargs = __pyx_t_6;
+  __pyx_t_6 = 0;
+
+  /* "PETSc/petscdmshell.pxi":303
+ *     assert context is not None and type(context) is tuple
+ *     (restriction, args, kargs) = context
+ *     mat = restriction(Dmf, Dmc, *args, **kargs)             # <<<<<<<<<<<<<<
+ *     PetscINCREF(mat.obj)
+ *     cmat[0] = mat.mat
+ */
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 303, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_INCREF(((PyObject *)__pyx_v_Dmf));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_Dmf));
+  PyTuple_SET_ITEM(__pyx_t_6, 0, ((PyObject *)__pyx_v_Dmf));
+  __Pyx_INCREF(((PyObject *)__pyx_v_Dmc));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_Dmc));
+  PyTuple_SET_ITEM(__pyx_t_6, 1, ((PyObject *)__pyx_v_Dmc));
+  __pyx_t_2 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 303, __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_ERR(8, 303, __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_ERR(8, 303, __pyx_L1_error)
+  }
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_2 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 303, __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_ERR(8, 303, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+  }
+  __pyx_t_6 = __Pyx_PyObject_Call(__pyx_v_restriction, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 303, __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_ERR(8, 303, __pyx_L1_error)
+  __pyx_v_mat = ((struct PyPetscMatObject *)__pyx_t_6);
+  __pyx_t_6 = 0;
+
+  /* "PETSc/petscdmshell.pxi":304
+ *     (restriction, args, kargs) = context
+ *     mat = restriction(Dmf, Dmc, *args, **kargs)
+ *     PetscINCREF(mat.obj)             # <<<<<<<<<<<<<<
+ *     cmat[0] = mat.mat
+ *     return 0
+ */
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_mat->__pyx_base.obj);
+
+  /* "PETSc/petscdmshell.pxi":305
+ *     mat = restriction(Dmf, Dmc, *args, **kargs)
+ *     PetscINCREF(mat.obj)
+ *     cmat[0] = mat.mat             # <<<<<<<<<<<<<<
+ *     return 0
+ * 
+ */
+  __pyx_t_9 = __pyx_v_mat->mat;
+  (__pyx_v_cmat[0]) = __pyx_t_9;
+
+  /* "PETSc/petscdmshell.pxi":306
+ *     PetscINCREF(mat.obj)
+ *     cmat[0] = mat.mat
+ *     return 0             # <<<<<<<<<<<<<<
+ * 
+ * cdef int DMSHELL_CreateFieldDecomposition(
+ */
+  __pyx_r = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/petscdmshell.pxi":289
+ *     return 0
+ * 
+ * cdef int DMSHELL_CreateRestriction(             # <<<<<<<<<<<<<<
+ *     PetscDM dmf,
+ *     PetscDM dmc,
+ */
+
+  /* function exit code */
+  __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_CreateRestriction", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = PETSC_ERR_PYTHON;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_Dmf);
+  __Pyx_XDECREF((PyObject *)__pyx_v_Dmc);
+  __Pyx_XDECREF((PyObject *)__pyx_v_mat);
+  __Pyx_XDECREF(__pyx_v_context);
+  __Pyx_XDECREF(__pyx_v_restriction);
+  __Pyx_XDECREF(__pyx_v_args);
+  __Pyx_XDECREF(__pyx_v_kargs);
+  __Pyx_RefNannyFinishContext();
+  #ifdef WITH_THREAD
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscdmshell.pxi":271
+/* "PETSc/petscdmshell.pxi":308
  *     return 0
  * 
  * cdef int DMSHELL_CreateFieldDecomposition(             # <<<<<<<<<<<<<<
@@ -48352,27 +51941,27 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
   IS __pyx_t_13;
   DM __pyx_t_14;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("DMSHELL_CreateFieldDecomposition", 0);
 
-  /* "PETSc/petscdmshell.pxi":277
+  /* "PETSc/petscdmshell.pxi":314
  *     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_ERR(8, 277, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_dm)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 314, __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, 277, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 314, __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, 277, __pyx_L1_error)
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 314, __pyx_L1_error)
   __pyx_v_Dm = ((struct PyPetscDMObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":279
+  /* "PETSc/petscdmshell.pxi":316
  *     cdef DM Dm = subtype_DM(dm)()
  *     cdef int i
  *     cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
@@ -48381,7 +51970,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/petscdmshell.pxi":280
+  /* "PETSc/petscdmshell.pxi":317
  *     cdef int i
  *     cdef const_char *cname = NULL
  *     Dm.dm = dm             # <<<<<<<<<<<<<<
@@ -48390,7 +51979,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
  */
   __pyx_v_Dm->dm = __pyx_v_dm;
 
-  /* "PETSc/petscdmshell.pxi":281
+  /* "PETSc/petscdmshell.pxi":318
  *     cdef const_char *cname = NULL
  *     Dm.dm = dm
  *     PetscINCREF(Dm.obj)             # <<<<<<<<<<<<<<
@@ -48399,19 +51988,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":282
+  /* "PETSc/petscdmshell.pxi":319
  *     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), ((char *)"__create_field_decomp__")); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 282, __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, 319, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_context = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":283
+  /* "PETSc/petscdmshell.pxi":320
  *     PetscINCREF(Dm.obj)
  *     context = Dm.get_attr('__create_field_decomp__')
  *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
@@ -48433,12 +52022,12 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(8, 283, __pyx_L1_error)
+      __PYX_ERR(8, 320, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscdmshell.pxi":284
+  /* "PETSc/petscdmshell.pxi":321
  *     context = Dm.get_attr('__create_field_decomp__')
  *     assert context is not None and type(context) is tuple
  *     (decomp, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -48447,7 +52036,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
  */
   if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
     PyObject* sequence = __pyx_v_context;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -48455,9 +52044,9 @@ 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_ERR(8, 284, __pyx_L1_error)
+      __PYX_ERR(8, 321, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
@@ -48471,16 +52060,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_ERR(8, 284, __pyx_L1_error)
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 321, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 284, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 321, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 284, __pyx_L1_error)
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 321, __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, 284, __pyx_L1_error)
+    __pyx_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 321, __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;
@@ -48489,7 +52078,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_ERR(8, 284, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(8, 321, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L6_unpacking_done;
@@ -48497,7 +52086,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_ERR(8, 284, __pyx_L1_error)
+    __PYX_ERR(8, 321, __pyx_L1_error)
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_decomp = __pyx_t_2;
@@ -48507,42 +52096,42 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
   __pyx_v_kargs = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscdmshell.pxi":285
+  /* "PETSc/petscdmshell.pxi":322
  *     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_ERR(8, 285, __pyx_L1_error)
+  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 322, __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_ERR(8, 285, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 322, __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, 285, __pyx_L1_error)
+  __pyx_t_2 = PyNumber_Add(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 322, __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, 285, __pyx_L1_error)
+    __PYX_ERR(8, 322, __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, 285, __pyx_L1_error)
+    __pyx_t_1 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 322, __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, 285, __pyx_L1_error)
+    __pyx_t_1 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 322, __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_ERR(8, 285, __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, 322, __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
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -48550,9 +52139,9 @@ 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_ERR(8, 285, __pyx_L1_error)
+      __PYX_ERR(8, 322, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
@@ -48566,17 +52155,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_ERR(8, 285, __pyx_L1_error)
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 322, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 285, __pyx_L1_error)
+    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 322, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_7 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 285, __pyx_L1_error)
+    __pyx_t_7 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 322, __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_ERR(8, 285, __pyx_L1_error)
+    __pyx_t_9 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_9)) __PYX_ERR(8, 322, __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;
@@ -48586,7 +52175,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_ERR(8, 285, __pyx_L1_error)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_9), 3) < 0) __PYX_ERR(8, 322, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     goto __pyx_L8_unpacking_done;
@@ -48594,7 +52183,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_ERR(8, 285, __pyx_L1_error)
+    __PYX_ERR(8, 322, __pyx_L1_error)
     __pyx_L8_unpacking_done:;
   }
   __pyx_v_names = __pyx_t_1;
@@ -48604,7 +52193,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":287
+  /* "PETSc/petscdmshell.pxi":324
  *     names, ises, dms = decomp(Dm, *args, **kargs)
  * 
  *     if clen != NULL:             # <<<<<<<<<<<<<<
@@ -48614,7 +52203,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":288
+    /* "PETSc/petscdmshell.pxi":325
  * 
  *     if clen != NULL:
  *         if names is not None:             # <<<<<<<<<<<<<<
@@ -48625,17 +52214,17 @@ 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":289
+      /* "PETSc/petscdmshell.pxi":326
  *     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_ERR(8, 289, __pyx_L1_error)
+      __pyx_t_10 = PyObject_Length(__pyx_v_names); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(8, 326, __pyx_L1_error)
       (__pyx_v_clen[0]) = ((PetscInt)__pyx_t_10);
 
-      /* "PETSc/petscdmshell.pxi":288
+      /* "PETSc/petscdmshell.pxi":325
  * 
  *     if clen != NULL:
  *         if names is not None:             # <<<<<<<<<<<<<<
@@ -48645,7 +52234,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
       goto __pyx_L10;
     }
 
-    /* "PETSc/petscdmshell.pxi":290
+    /* "PETSc/petscdmshell.pxi":327
  *         if names is not None:
  *             clen[0] = <PetscInt>len(names)
  *         elif ises is not None:             # <<<<<<<<<<<<<<
@@ -48656,17 +52245,17 @@ 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":291
+      /* "PETSc/petscdmshell.pxi":328
  *             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_ERR(8, 291, __pyx_L1_error)
+      __pyx_t_10 = PyObject_Length(__pyx_v_ises); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(8, 328, __pyx_L1_error)
       (__pyx_v_clen[0]) = ((PetscInt)__pyx_t_10);
 
-      /* "PETSc/petscdmshell.pxi":290
+      /* "PETSc/petscdmshell.pxi":327
  *         if names is not None:
  *             clen[0] = <PetscInt>len(names)
  *         elif ises is not None:             # <<<<<<<<<<<<<<
@@ -48676,7 +52265,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
       goto __pyx_L10;
     }
 
-    /* "PETSc/petscdmshell.pxi":292
+    /* "PETSc/petscdmshell.pxi":329
  *         elif ises is not None:
  *             clen[0] = <PetscInt>len(ises)
  *         elif dms is not None:             # <<<<<<<<<<<<<<
@@ -48687,17 +52276,17 @@ 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":293
+      /* "PETSc/petscdmshell.pxi":330
  *             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_ERR(8, 293, __pyx_L1_error)
+      __pyx_t_10 = PyObject_Length(__pyx_v_dms); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(8, 330, __pyx_L1_error)
       (__pyx_v_clen[0]) = ((PetscInt)__pyx_t_10);
 
-      /* "PETSc/petscdmshell.pxi":292
+      /* "PETSc/petscdmshell.pxi":329
  *         elif ises is not None:
  *             clen[0] = <PetscInt>len(ises)
  *         elif dms is not None:             # <<<<<<<<<<<<<<
@@ -48707,7 +52296,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
       goto __pyx_L10;
     }
 
-    /* "PETSc/petscdmshell.pxi":295
+    /* "PETSc/petscdmshell.pxi":332
  *             clen[0] = <PetscInt>len(dms)
  *         else:
  *             clen[0] = 0             # <<<<<<<<<<<<<<
@@ -48719,7 +52308,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
     }
     __pyx_L10:;
 
-    /* "PETSc/petscdmshell.pxi":287
+    /* "PETSc/petscdmshell.pxi":324
  *     names, ises, dms = decomp(Dm, *args, **kargs)
  * 
  *     if clen != NULL:             # <<<<<<<<<<<<<<
@@ -48728,7 +52317,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
  */
   }
 
-  /* "PETSc/petscdmshell.pxi":297
+  /* "PETSc/petscdmshell.pxi":334
  *             clen[0] = 0
  * 
  *     if namelist != NULL and names is not None:             # <<<<<<<<<<<<<<
@@ -48747,53 +52336,53 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
   __pyx_L12_bool_binop_done:;
   if (__pyx_t_4) {
 
-    /* "PETSc/petscdmshell.pxi":298
+    /* "PETSc/petscdmshell.pxi":335
  * 
  *     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_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)
+    __pyx_t_10 = PyObject_Length(__pyx_v_names); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(8, 335, __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 == ((int)-1))) __PYX_ERR(8, 335, __pyx_L1_error)
 
-    /* "PETSc/petscdmshell.pxi":299
+    /* "PETSc/petscdmshell.pxi":336
  *     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_ERR(8, 299, __pyx_L1_error)
+    __pyx_t_10 = PyObject_Length(__pyx_v_names); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(8, 336, __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":337
  *         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)) __PYX_ERR(8, 300, __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, 337, __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_ERR(8, 300, __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, 337, __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_ERR(8, 300, __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, 337, __pyx_L1_error)
       __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-      /* "PETSc/petscdmshell.pxi":301
+      /* "PETSc/petscdmshell.pxi":338
  *         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_ERR(8, 301, __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 == ((int)-1))) __PYX_ERR(8, 338, __pyx_L1_error)
     }
 
-    /* "PETSc/petscdmshell.pxi":297
+    /* "PETSc/petscdmshell.pxi":334
  *             clen[0] = 0
  * 
  *     if namelist != NULL and names is not None:             # <<<<<<<<<<<<<<
@@ -48802,7 +52391,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
  */
   }
 
-  /* "PETSc/petscdmshell.pxi":303
+  /* "PETSc/petscdmshell.pxi":340
  *             CHKERR( PetscStrallocpy(cname, &(namelist[0][i])) )
  * 
  *     if islist != NULL and ises is not None:             # <<<<<<<<<<<<<<
@@ -48821,56 +52410,56 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
   __pyx_L17_bool_binop_done:;
   if (__pyx_t_4) {
 
-    /* "PETSc/petscdmshell.pxi":304
+    /* "PETSc/petscdmshell.pxi":341
  * 
  *     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_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)
+    __pyx_t_10 = PyObject_Length(__pyx_v_ises); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(8, 341, __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 == ((int)-1))) __PYX_ERR(8, 341, __pyx_L1_error)
 
-    /* "PETSc/petscdmshell.pxi":305
+    /* "PETSc/petscdmshell.pxi":342
  *     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_ERR(8, 305, __pyx_L1_error)
+    __pyx_t_10 = PyObject_Length(__pyx_v_ises); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(8, 342, __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":343
  *         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)) __PYX_ERR(8, 306, __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, 343, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      if (!(likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_8petsc4py_5PETSc_IS)))) __PYX_ERR(8, 306, __pyx_L1_error)
+      if (!(likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_8petsc4py_5PETSc_IS)))) __PYX_ERR(8, 343, __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":307
+      /* "PETSc/petscdmshell.pxi":344
  *         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)) __PYX_ERR(8, 307, __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, 344, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      if (!(likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_8petsc4py_5PETSc_IS)))) __PYX_ERR(8, 307, __pyx_L1_error)
+      if (!(likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_8petsc4py_5PETSc_IS)))) __PYX_ERR(8, 344, __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;
     }
 
-    /* "PETSc/petscdmshell.pxi":303
+    /* "PETSc/petscdmshell.pxi":340
  *             CHKERR( PetscStrallocpy(cname, &(namelist[0][i])) )
  * 
  *     if islist != NULL and ises is not None:             # <<<<<<<<<<<<<<
@@ -48879,7 +52468,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
  */
   }
 
-  /* "PETSc/petscdmshell.pxi":309
+  /* "PETSc/petscdmshell.pxi":346
  *             PetscINCREF((<IS?>ises[i]).obj)
  * 
  *     if dmlist != NULL and dms is not None:             # <<<<<<<<<<<<<<
@@ -48898,56 +52487,56 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
   __pyx_L22_bool_binop_done:;
   if (__pyx_t_4) {
 
-    /* "PETSc/petscdmshell.pxi":310
+    /* "PETSc/petscdmshell.pxi":347
  * 
  *     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_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)
+    __pyx_t_10 = PyObject_Length(__pyx_v_dms); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(8, 347, __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 == ((int)-1))) __PYX_ERR(8, 347, __pyx_L1_error)
 
-    /* "PETSc/petscdmshell.pxi":311
+    /* "PETSc/petscdmshell.pxi":348
  *     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_ERR(8, 311, __pyx_L1_error)
+    __pyx_t_10 = PyObject_Length(__pyx_v_dms); if (unlikely(__pyx_t_10 == ((Py_ssize_t)-1))) __PYX_ERR(8, 348, __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":312
+      /* "PETSc/petscdmshell.pxi":349
  *         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)) __PYX_ERR(8, 312, __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, 349, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      if (!(likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_8petsc4py_5PETSc_DM)))) __PYX_ERR(8, 312, __pyx_L1_error)
+      if (!(likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_8petsc4py_5PETSc_DM)))) __PYX_ERR(8, 349, __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":313
+      /* "PETSc/petscdmshell.pxi":350
  *         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)) __PYX_ERR(8, 313, __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, 350, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
-      if (!(likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_8petsc4py_5PETSc_DM)))) __PYX_ERR(8, 313, __pyx_L1_error)
+      if (!(likely(__Pyx_TypeTest(__pyx_t_7, __pyx_ptype_8petsc4py_5PETSc_DM)))) __PYX_ERR(8, 350, __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;
     }
 
-    /* "PETSc/petscdmshell.pxi":309
+    /* "PETSc/petscdmshell.pxi":346
  *             PetscINCREF((<IS?>ises[i]).obj)
  * 
  *     if dmlist != NULL and dms is not None:             # <<<<<<<<<<<<<<
@@ -48956,17 +52545,17 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
  */
   }
 
-  /* "PETSc/petscdmshell.pxi":314
+  /* "PETSc/petscdmshell.pxi":351
  *             dmlist[0][i] = (<DM?>dms[i]).dm
  *             PetscINCREF((<DM?>dms[i]).obj)
  *     return 0             # <<<<<<<<<<<<<<
  * 
- * cdef int DMSHELL_CreateSubDM(
+ * cdef int DMSHELL_CreateDomainDecomposition(
  */
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/petscdmshell.pxi":271
+  /* "PETSc/petscdmshell.pxi":308
  *     return 0
  * 
  * cdef int DMSHELL_CreateFieldDecomposition(             # <<<<<<<<<<<<<<
@@ -48994,12 +52583,1400 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateFieldDecomposition(DM __pyx_v_
   __Pyx_XDECREF(__pyx_v_dms);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
+  #endif
+  return __pyx_r;
+}
+
+/* "PETSc/petscdmshell.pxi":353
+ *     return 0
+ * 
+ * cdef int DMSHELL_CreateDomainDecomposition(             # <<<<<<<<<<<<<<
+ *     PetscDM dm,
+ *     PetscInt *clen,
+ */
+
+static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateDomainDecomposition(DM __pyx_v_dm, PetscInt *__pyx_v_clen, char ***__pyx_v_namelist, IS **__pyx_v_innerislist, IS **__pyx_v_outerislist, DM **__pyx_v_dmlist) {
+  struct PyPetscDMObject *__pyx_v_Dm = 0;
+  int __pyx_v_i;
+  const char *__pyx_v_cname;
+  PyObject *__pyx_v_context = NULL;
+  PyObject *__pyx_v_decomp = NULL;
+  PyObject *__pyx_v_args = NULL;
+  PyObject *__pyx_v_kargs = NULL;
+  PyObject *__pyx_v_names = NULL;
+  PyObject *__pyx_v_innerises = NULL;
+  PyObject *__pyx_v_outerises = NULL;
+  PyObject *__pyx_v_dms = 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 *);
+  PyObject *__pyx_t_9 = NULL;
+  PyObject *__pyx_t_10 = NULL;
+  Py_ssize_t __pyx_t_11;
+  int __pyx_t_12;
+  int __pyx_t_13;
+  IS __pyx_t_14;
+  DM __pyx_t_15;
+  #ifdef WITH_THREAD
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+  #endif
+  __Pyx_RefNannySetupContext("DMSHELL_CreateDomainDecomposition", 0);
+
+  /* "PETSc/petscdmshell.pxi":360
+ *     PetscIS **outerislist,
+ *     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_ERR(8, 360, __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, 360, __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, 360, __pyx_L1_error)
+  __pyx_v_Dm = ((struct PyPetscDMObject *)__pyx_t_2);
+  __pyx_t_2 = 0;
+
+  /* "PETSc/petscdmshell.pxi":362
+ *     cdef DM Dm = subtype_DM(dm)()
+ *     cdef int i
+ *     cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
+ *     Dm.dm = dm
+ *     PetscINCREF(Dm.obj)
+ */
+  __pyx_v_cname = NULL;
+
+  /* "PETSc/petscdmshell.pxi":363
+ *     cdef int i
+ *     cdef const_char *cname = NULL
+ *     Dm.dm = dm             # <<<<<<<<<<<<<<
+ *     PetscINCREF(Dm.obj)
+ *     context = Dm.get_attr('__create_domain_decomp__')
+ */
+  __pyx_v_Dm->dm = __pyx_v_dm;
+
+  /* "PETSc/petscdmshell.pxi":364
+ *     cdef const_char *cname = NULL
+ *     Dm.dm = dm
+ *     PetscINCREF(Dm.obj)             # <<<<<<<<<<<<<<
+ *     context = Dm.get_attr('__create_domain_decomp__')
+ *     assert context is not None and type(context) is tuple
+ */
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_Dm->__pyx_base.obj);
+
+  /* "PETSc/petscdmshell.pxi":365
+ *     Dm.dm = dm
+ *     PetscINCREF(Dm.obj)
+ *     context = Dm.get_attr('__create_domain_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), ((char *)"__create_domain_decomp__")); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 365, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_v_context = __pyx_t_2;
+  __pyx_t_2 = 0;
+
+  /* "PETSc/petscdmshell.pxi":366
+ *     PetscINCREF(Dm.obj)
+ *     context = Dm.get_attr('__create_domain_decomp__')
+ *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
+ *     (decomp, args, kargs) = context
+ *     names, innerises, outerises, dms = decomp(Dm, *args, **kargs)
+ */
+  #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, 366, __pyx_L1_error)
+    }
+  }
+  #endif
+
+  /* "PETSc/petscdmshell.pxi":367
+ *     context = Dm.get_attr('__create_domain_decomp__')
+ *     assert context is not None and type(context) is tuple
+ *     (decomp, args, kargs) = context             # <<<<<<<<<<<<<<
+ *     names, innerises, outerises, dms = decomp(Dm, *args, **kargs)
+ * 
+ */
+  if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
+    PyObject* sequence = __pyx_v_context;
+    #if !CYTHON_COMPILING_IN_PYPY
+    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, 367, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    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, 367, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 367, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 367, __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, 367, __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, 367, __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, 367, __pyx_L1_error)
+    __pyx_L6_unpacking_done:;
+  }
+  __pyx_v_decomp = __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":368
+ *     assert context is not None and type(context) is tuple
+ *     (decomp, args, kargs) = context
+ *     names, innerises, outerises, dms = decomp(Dm, *args, **kargs)             # <<<<<<<<<<<<<<
+ * 
+ *     if clen != NULL:
+ */
+  __pyx_t_6 = PyTuple_New(1); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 368, __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 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 368, __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, 368, __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, 368, __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, 368, __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, 368, __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_ERR(8, 368, __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_PYPY
+    Py_ssize_t size = Py_SIZE(sequence);
+    #else
+    Py_ssize_t size = PySequence_Size(sequence);
+    #endif
+    if (unlikely(size != 4)) {
+      if (size > 4) __Pyx_RaiseTooManyValuesError(4);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(8, 368, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
+      __pyx_t_7 = PyTuple_GET_ITEM(sequence, 2); 
+      __pyx_t_9 = PyTuple_GET_ITEM(sequence, 3); 
+    } else {
+      __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
+      __pyx_t_7 = PyList_GET_ITEM(sequence, 2); 
+      __pyx_t_9 = PyList_GET_ITEM(sequence, 3); 
+    }
+    __Pyx_INCREF(__pyx_t_1);
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_7);
+    __Pyx_INCREF(__pyx_t_9);
+    #else
+    {
+      Py_ssize_t i;
+      PyObject** temps[4] = {&__pyx_t_1,&__pyx_t_2,&__pyx_t_7,&__pyx_t_9};
+      for (i=0; i < 4; i++) {
+        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(8, 368, __pyx_L1_error)
+        __Pyx_GOTREF(item);
+        *(temps[i]) = item;
+      }
+    }
+    #endif
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    PyObject** temps[4] = {&__pyx_t_1,&__pyx_t_2,&__pyx_t_7,&__pyx_t_9};
+    __pyx_t_10 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_10)) __PYX_ERR(8, 368, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_10);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __pyx_t_8 = Py_TYPE(__pyx_t_10)->tp_iternext;
+    for (index=0; index < 4; index++) {
+      PyObject* item = __pyx_t_8(__pyx_t_10); if (unlikely(!item)) goto __pyx_L7_unpacking_failed;
+      __Pyx_GOTREF(item);
+      *(temps[index]) = item;
+    }
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_10), 4) < 0) __PYX_ERR(8, 368, __pyx_L1_error)
+    __pyx_t_8 = NULL;
+    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+    goto __pyx_L8_unpacking_done;
+    __pyx_L7_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_10); __pyx_t_10 = 0;
+    __pyx_t_8 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(8, 368, __pyx_L1_error)
+    __pyx_L8_unpacking_done:;
+  }
+  __pyx_v_names = __pyx_t_1;
+  __pyx_t_1 = 0;
+  __pyx_v_innerises = __pyx_t_2;
+  __pyx_t_2 = 0;
+  __pyx_v_outerises = __pyx_t_7;
+  __pyx_t_7 = 0;
+  __pyx_v_dms = __pyx_t_9;
+  __pyx_t_9 = 0;
+
+  /* "PETSc/petscdmshell.pxi":370
+ *     names, innerises, outerises, dms = decomp(Dm, *args, **kargs)
+ * 
+ *     if clen != NULL:             # <<<<<<<<<<<<<<
+ *         if names is not None:
+ *             clen[0] = <PetscInt>len(names)
+ */
+  __pyx_t_3 = ((__pyx_v_clen != NULL) != 0);
+  if (__pyx_t_3) {
+
+    /* "PETSc/petscdmshell.pxi":371
+ * 
+ *     if clen != NULL:
+ *         if names is not None:             # <<<<<<<<<<<<<<
+ *             clen[0] = <PetscInt>len(names)
+ *         elif innerises is not None:
+ */
+    __pyx_t_3 = (__pyx_v_names != Py_None);
+    __pyx_t_4 = (__pyx_t_3 != 0);
+    if (__pyx_t_4) {
+
+      /* "PETSc/petscdmshell.pxi":372
+ *     if clen != NULL:
+ *         if names is not None:
+ *             clen[0] = <PetscInt>len(names)             # <<<<<<<<<<<<<<
+ *         elif innerises is not None:
+ *             clen[0] = <PetscInt>len(innerises)
+ */
+      __pyx_t_11 = PyObject_Length(__pyx_v_names); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(8, 372, __pyx_L1_error)
+      (__pyx_v_clen[0]) = ((PetscInt)__pyx_t_11);
+
+      /* "PETSc/petscdmshell.pxi":371
+ * 
+ *     if clen != NULL:
+ *         if names is not None:             # <<<<<<<<<<<<<<
+ *             clen[0] = <PetscInt>len(names)
+ *         elif innerises is not None:
+ */
+      goto __pyx_L10;
+    }
+
+    /* "PETSc/petscdmshell.pxi":373
+ *         if names is not None:
+ *             clen[0] = <PetscInt>len(names)
+ *         elif innerises is not None:             # <<<<<<<<<<<<<<
+ *             clen[0] = <PetscInt>len(innerises)
+ *         elif outerises is not None:
+ */
+    __pyx_t_4 = (__pyx_v_innerises != Py_None);
+    __pyx_t_3 = (__pyx_t_4 != 0);
+    if (__pyx_t_3) {
+
+      /* "PETSc/petscdmshell.pxi":374
+ *             clen[0] = <PetscInt>len(names)
+ *         elif innerises is not None:
+ *             clen[0] = <PetscInt>len(innerises)             # <<<<<<<<<<<<<<
+ *         elif outerises is not None:
+ *             clen[0] = <PetscInt>len(outerises)
+ */
+      __pyx_t_11 = PyObject_Length(__pyx_v_innerises); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(8, 374, __pyx_L1_error)
+      (__pyx_v_clen[0]) = ((PetscInt)__pyx_t_11);
+
+      /* "PETSc/petscdmshell.pxi":373
+ *         if names is not None:
+ *             clen[0] = <PetscInt>len(names)
+ *         elif innerises is not None:             # <<<<<<<<<<<<<<
+ *             clen[0] = <PetscInt>len(innerises)
+ *         elif outerises is not None:
+ */
+      goto __pyx_L10;
+    }
+
+    /* "PETSc/petscdmshell.pxi":375
+ *         elif innerises is not None:
+ *             clen[0] = <PetscInt>len(innerises)
+ *         elif outerises is not None:             # <<<<<<<<<<<<<<
+ *             clen[0] = <PetscInt>len(outerises)
+ *         elif dms is not None:
+ */
+    __pyx_t_3 = (__pyx_v_outerises != Py_None);
+    __pyx_t_4 = (__pyx_t_3 != 0);
+    if (__pyx_t_4) {
+
+      /* "PETSc/petscdmshell.pxi":376
+ *             clen[0] = <PetscInt>len(innerises)
+ *         elif outerises is not None:
+ *             clen[0] = <PetscInt>len(outerises)             # <<<<<<<<<<<<<<
+ *         elif dms is not None:
+ *             clen[0] = <PetscInt>len(dms)
+ */
+      __pyx_t_11 = PyObject_Length(__pyx_v_outerises); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(8, 376, __pyx_L1_error)
+      (__pyx_v_clen[0]) = ((PetscInt)__pyx_t_11);
+
+      /* "PETSc/petscdmshell.pxi":375
+ *         elif innerises is not None:
+ *             clen[0] = <PetscInt>len(innerises)
+ *         elif outerises is not None:             # <<<<<<<<<<<<<<
+ *             clen[0] = <PetscInt>len(outerises)
+ *         elif dms is not None:
+ */
+      goto __pyx_L10;
+    }
+
+    /* "PETSc/petscdmshell.pxi":377
+ *         elif outerises is not None:
+ *             clen[0] = <PetscInt>len(outerises)
+ *         elif dms is not None:             # <<<<<<<<<<<<<<
+ *             clen[0] = <PetscInt>len(dms)
+ *         else:
+ */
+    __pyx_t_4 = (__pyx_v_dms != Py_None);
+    __pyx_t_3 = (__pyx_t_4 != 0);
+    if (__pyx_t_3) {
+
+      /* "PETSc/petscdmshell.pxi":378
+ *             clen[0] = <PetscInt>len(outerises)
+ *         elif dms is not None:
+ *             clen[0] = <PetscInt>len(dms)             # <<<<<<<<<<<<<<
+ *         else:
+ *             clen[0] = 0
+ */
+      __pyx_t_11 = PyObject_Length(__pyx_v_dms); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(8, 378, __pyx_L1_error)
+      (__pyx_v_clen[0]) = ((PetscInt)__pyx_t_11);
+
+      /* "PETSc/petscdmshell.pxi":377
+ *         elif outerises is not None:
+ *             clen[0] = <PetscInt>len(outerises)
+ *         elif dms is not None:             # <<<<<<<<<<<<<<
+ *             clen[0] = <PetscInt>len(dms)
+ *         else:
+ */
+      goto __pyx_L10;
+    }
+
+    /* "PETSc/petscdmshell.pxi":380
+ *             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:;
+
+    /* "PETSc/petscdmshell.pxi":370
+ *     names, innerises, outerises, dms = decomp(Dm, *args, **kargs)
+ * 
+ *     if clen != NULL:             # <<<<<<<<<<<<<<
+ *         if names is not None:
+ *             clen[0] = <PetscInt>len(names)
+ */
+  }
+
+  /* "PETSc/petscdmshell.pxi":382
+ *             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_t_4 = ((__pyx_v_namelist != NULL) != 0);
+  if (__pyx_t_4) {
+  } else {
+    __pyx_t_3 = __pyx_t_4;
+    goto __pyx_L12_bool_binop_done;
+  }
+  __pyx_t_4 = (__pyx_v_names != Py_None);
+  __pyx_t_5 = (__pyx_t_4 != 0);
+  __pyx_t_3 = __pyx_t_5;
+  __pyx_L12_bool_binop_done:;
+  if (__pyx_t_3) {
+
+    /* "PETSc/petscdmshell.pxi":383
+ * 
+ *     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_11 = PyObject_Length(__pyx_v_names); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(8, 383, __pyx_L1_error)
+    __pyx_t_12 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscMalloc((__pyx_t_11 * (sizeof(char **))), __pyx_v_namelist)); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(8, 383, __pyx_L1_error)
+
+    /* "PETSc/petscdmshell.pxi":384
+ *     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_11 = PyObject_Length(__pyx_v_names); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(8, 384, __pyx_L1_error)
+    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
+      __pyx_v_i = __pyx_t_12;
+
+      /* "PETSc/petscdmshell.pxi":385
+ *         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)) __PYX_ERR(8, 385, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_6);
+      __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_t_6, (&__pyx_v_cname)); if (unlikely(!__pyx_t_9)) __PYX_ERR(8, 385, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_9);
+      __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+      if (unlikely(__Pyx_SetItemInt(__pyx_v_names, __pyx_v_i, __pyx_t_9, int, 1, __Pyx_PyInt_From_int, 0, 1, 1) < 0)) __PYX_ERR(8, 385, __pyx_L1_error)
+      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+
+      /* "PETSc/petscdmshell.pxi":386
+ *         for i in range(len(names)):
+ *             names[i] = str2bytes(names[i], &cname)
+ *             CHKERR( PetscStrallocpy(cname, &(namelist[0][i])) )             # <<<<<<<<<<<<<<
+ * 
+ *     if innerislist != NULL and innerises is not None:
+ */
+      __pyx_t_13 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscStrallocpy(__pyx_v_cname, (&((__pyx_v_namelist[0])[__pyx_v_i])))); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(8, 386, __pyx_L1_error)
+    }
+
+    /* "PETSc/petscdmshell.pxi":382
+ *             clen[0] = 0
+ * 
+ *     if namelist != NULL and names is not None:             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscMalloc(len(names)*sizeof(char**), namelist) )
+ *         for i in range(len(names)):
+ */
+  }
+
+  /* "PETSc/petscdmshell.pxi":388
+ *             CHKERR( PetscStrallocpy(cname, &(namelist[0][i])) )
+ * 
+ *     if innerislist != NULL and innerises is not None:             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscMalloc(len(innerises)*sizeof(PetscIS), innerislist) )
+ *         for i in range(len(innerises)):
+ */
+  __pyx_t_5 = ((__pyx_v_innerislist != NULL) != 0);
+  if (__pyx_t_5) {
+  } else {
+    __pyx_t_3 = __pyx_t_5;
+    goto __pyx_L17_bool_binop_done;
+  }
+  __pyx_t_5 = (__pyx_v_innerises != Py_None);
+  __pyx_t_4 = (__pyx_t_5 != 0);
+  __pyx_t_3 = __pyx_t_4;
+  __pyx_L17_bool_binop_done:;
+  if (__pyx_t_3) {
+
+    /* "PETSc/petscdmshell.pxi":389
+ * 
+ *     if innerislist != NULL and innerises is not None:
+ *         CHKERR( PetscMalloc(len(innerises)*sizeof(PetscIS), innerislist) )             # <<<<<<<<<<<<<<
+ *         for i in range(len(innerises)):
+ *             innerislist[0][i] = (<IS?>innerises[i]).iset
+ */
+    __pyx_t_11 = PyObject_Length(__pyx_v_innerises); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(8, 389, __pyx_L1_error)
+    __pyx_t_12 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscMalloc((__pyx_t_11 * (sizeof(IS))), __pyx_v_innerislist)); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(8, 389, __pyx_L1_error)
+
+    /* "PETSc/petscdmshell.pxi":390
+ *     if innerislist != NULL and innerises is not None:
+ *         CHKERR( PetscMalloc(len(innerises)*sizeof(PetscIS), innerislist) )
+ *         for i in range(len(innerises)):             # <<<<<<<<<<<<<<
+ *             innerislist[0][i] = (<IS?>innerises[i]).iset
+ *             PetscINCREF((<IS?>innerises[i]).obj)
+ */
+    __pyx_t_11 = PyObject_Length(__pyx_v_innerises); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(8, 390, __pyx_L1_error)
+    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
+      __pyx_v_i = __pyx_t_12;
+
+      /* "PETSc/petscdmshell.pxi":391
+ *         CHKERR( PetscMalloc(len(innerises)*sizeof(PetscIS), innerislist) )
+ *         for i in range(len(innerises)):
+ *             innerislist[0][i] = (<IS?>innerises[i]).iset             # <<<<<<<<<<<<<<
+ *             PetscINCREF((<IS?>innerises[i]).obj)
+ * 
+ */
+      __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_innerises, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(8, 391, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_9);
+      if (!(likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_8petsc4py_5PETSc_IS)))) __PYX_ERR(8, 391, __pyx_L1_error)
+      __pyx_t_14 = ((struct PyPetscISObject *)__pyx_t_9)->iset;
+      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      ((__pyx_v_innerislist[0])[__pyx_v_i]) = __pyx_t_14;
+
+      /* "PETSc/petscdmshell.pxi":392
+ *         for i in range(len(innerises)):
+ *             innerislist[0][i] = (<IS?>innerises[i]).iset
+ *             PetscINCREF((<IS?>innerises[i]).obj)             # <<<<<<<<<<<<<<
+ * 
+ *     if outerislist != NULL and outerises is not None:
+ */
+      __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_innerises, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(8, 392, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_9);
+      if (!(likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_8petsc4py_5PETSc_IS)))) __PYX_ERR(8, 392, __pyx_L1_error)
+      __pyx_f_8petsc4py_5PETSc_PetscINCREF(((struct PyPetscISObject *)__pyx_t_9)->__pyx_base.obj);
+      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+    }
+
+    /* "PETSc/petscdmshell.pxi":388
+ *             CHKERR( PetscStrallocpy(cname, &(namelist[0][i])) )
+ * 
+ *     if innerislist != NULL and innerises is not None:             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscMalloc(len(innerises)*sizeof(PetscIS), innerislist) )
+ *         for i in range(len(innerises)):
+ */
+  }
+
+  /* "PETSc/petscdmshell.pxi":394
+ *             PetscINCREF((<IS?>innerises[i]).obj)
+ * 
+ *     if outerislist != NULL and outerises is not None:             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscMalloc(len(outerises)*sizeof(PetscIS), outerislist) )
+ *         for i in range(len(outerises)):
+ */
+  __pyx_t_4 = ((__pyx_v_outerislist != NULL) != 0);
+  if (__pyx_t_4) {
+  } else {
+    __pyx_t_3 = __pyx_t_4;
+    goto __pyx_L22_bool_binop_done;
+  }
+  __pyx_t_4 = (__pyx_v_outerises != Py_None);
+  __pyx_t_5 = (__pyx_t_4 != 0);
+  __pyx_t_3 = __pyx_t_5;
+  __pyx_L22_bool_binop_done:;
+  if (__pyx_t_3) {
+
+    /* "PETSc/petscdmshell.pxi":395
+ * 
+ *     if outerislist != NULL and outerises is not None:
+ *         CHKERR( PetscMalloc(len(outerises)*sizeof(PetscIS), outerislist) )             # <<<<<<<<<<<<<<
+ *         for i in range(len(outerises)):
+ *             outerislist[0][i] = (<IS?>outerises[i]).iset
+ */
+    __pyx_t_11 = PyObject_Length(__pyx_v_outerises); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(8, 395, __pyx_L1_error)
+    __pyx_t_12 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscMalloc((__pyx_t_11 * (sizeof(IS))), __pyx_v_outerislist)); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(8, 395, __pyx_L1_error)
+
+    /* "PETSc/petscdmshell.pxi":396
+ *     if outerislist != NULL and outerises is not None:
+ *         CHKERR( PetscMalloc(len(outerises)*sizeof(PetscIS), outerislist) )
+ *         for i in range(len(outerises)):             # <<<<<<<<<<<<<<
+ *             outerislist[0][i] = (<IS?>outerises[i]).iset
+ *             PetscINCREF((<IS?>outerises[i]).obj)
+ */
+    __pyx_t_11 = PyObject_Length(__pyx_v_outerises); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(8, 396, __pyx_L1_error)
+    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
+      __pyx_v_i = __pyx_t_12;
+
+      /* "PETSc/petscdmshell.pxi":397
+ *         CHKERR( PetscMalloc(len(outerises)*sizeof(PetscIS), outerislist) )
+ *         for i in range(len(outerises)):
+ *             outerislist[0][i] = (<IS?>outerises[i]).iset             # <<<<<<<<<<<<<<
+ *             PetscINCREF((<IS?>outerises[i]).obj)
+ * 
+ */
+      __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_outerises, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(8, 397, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_9);
+      if (!(likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_8petsc4py_5PETSc_IS)))) __PYX_ERR(8, 397, __pyx_L1_error)
+      __pyx_t_14 = ((struct PyPetscISObject *)__pyx_t_9)->iset;
+      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      ((__pyx_v_outerislist[0])[__pyx_v_i]) = __pyx_t_14;
+
+      /* "PETSc/petscdmshell.pxi":398
+ *         for i in range(len(outerises)):
+ *             outerislist[0][i] = (<IS?>outerises[i]).iset
+ *             PetscINCREF((<IS?>outerises[i]).obj)             # <<<<<<<<<<<<<<
+ * 
+ *     if dmlist != NULL and dms is not None:
+ */
+      __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_outerises, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(8, 398, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_9);
+      if (!(likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_8petsc4py_5PETSc_IS)))) __PYX_ERR(8, 398, __pyx_L1_error)
+      __pyx_f_8petsc4py_5PETSc_PetscINCREF(((struct PyPetscISObject *)__pyx_t_9)->__pyx_base.obj);
+      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+    }
+
+    /* "PETSc/petscdmshell.pxi":394
+ *             PetscINCREF((<IS?>innerises[i]).obj)
+ * 
+ *     if outerislist != NULL and outerises is not None:             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscMalloc(len(outerises)*sizeof(PetscIS), outerislist) )
+ *         for i in range(len(outerises)):
+ */
+  }
+
+  /* "PETSc/petscdmshell.pxi":400
+ *             PetscINCREF((<IS?>outerises[i]).obj)
+ * 
+ *     if dmlist != NULL and dms is not None:             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscMalloc(len(dms)*sizeof(PetscDM), dmlist) )
+ *         for i in range(len(dms)):
+ */
+  __pyx_t_5 = ((__pyx_v_dmlist != NULL) != 0);
+  if (__pyx_t_5) {
+  } else {
+    __pyx_t_3 = __pyx_t_5;
+    goto __pyx_L27_bool_binop_done;
+  }
+  __pyx_t_5 = (__pyx_v_dms != Py_None);
+  __pyx_t_4 = (__pyx_t_5 != 0);
+  __pyx_t_3 = __pyx_t_4;
+  __pyx_L27_bool_binop_done:;
+  if (__pyx_t_3) {
+
+    /* "PETSc/petscdmshell.pxi":401
+ * 
+ *     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_11 = PyObject_Length(__pyx_v_dms); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(8, 401, __pyx_L1_error)
+    __pyx_t_12 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscMalloc((__pyx_t_11 * (sizeof(DM))), __pyx_v_dmlist)); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(8, 401, __pyx_L1_error)
+
+    /* "PETSc/petscdmshell.pxi":402
+ *     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_11 = PyObject_Length(__pyx_v_dms); if (unlikely(__pyx_t_11 == ((Py_ssize_t)-1))) __PYX_ERR(8, 402, __pyx_L1_error)
+    for (__pyx_t_12 = 0; __pyx_t_12 < __pyx_t_11; __pyx_t_12+=1) {
+      __pyx_v_i = __pyx_t_12;
+
+      /* "PETSc/petscdmshell.pxi":403
+ *         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_9 = __Pyx_GetItemInt(__pyx_v_dms, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(8, 403, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_9);
+      if (!(likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_8petsc4py_5PETSc_DM)))) __PYX_ERR(8, 403, __pyx_L1_error)
+      __pyx_t_15 = ((struct PyPetscDMObject *)__pyx_t_9)->dm;
+      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+      ((__pyx_v_dmlist[0])[__pyx_v_i]) = __pyx_t_15;
+
+      /* "PETSc/petscdmshell.pxi":404
+ *         for i in range(len(dms)):
+ *             dmlist[0][i] = (<DM?>dms[i]).dm
+ *             PetscINCREF((<DM?>dms[i]).obj)             # <<<<<<<<<<<<<<
+ *     return 0
+ * 
+ */
+      __pyx_t_9 = __Pyx_GetItemInt(__pyx_v_dms, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_9)) __PYX_ERR(8, 404, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_9);
+      if (!(likely(__Pyx_TypeTest(__pyx_t_9, __pyx_ptype_8petsc4py_5PETSc_DM)))) __PYX_ERR(8, 404, __pyx_L1_error)
+      __pyx_f_8petsc4py_5PETSc_PetscINCREF(((struct PyPetscDMObject *)__pyx_t_9)->__pyx_base.obj);
+      __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+    }
+
+    /* "PETSc/petscdmshell.pxi":400
+ *             PetscINCREF((<IS?>outerises[i]).obj)
+ * 
+ *     if dmlist != NULL and dms is not None:             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscMalloc(len(dms)*sizeof(PetscDM), dmlist) )
+ *         for i in range(len(dms)):
+ */
+  }
+
+  /* "PETSc/petscdmshell.pxi":405
+ *             dmlist[0][i] = (<DM?>dms[i]).dm
+ *             PetscINCREF((<DM?>dms[i]).obj)
+ *     return 0             # <<<<<<<<<<<<<<
+ * 
+ * cdef int DMSHELL_CreateDomainDecompositionScatters(
+ */
+  __pyx_r = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/petscdmshell.pxi":353
+ *     return 0
+ * 
+ * cdef int DMSHELL_CreateDomainDecomposition(             # <<<<<<<<<<<<<<
+ *     PetscDM dm,
+ *     PetscInt *clen,
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_XDECREF(__pyx_t_9);
+  __Pyx_XDECREF(__pyx_t_10);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMSHELL_CreateDomainDecomposition", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = PETSC_ERR_PYTHON;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_Dm);
+  __Pyx_XDECREF(__pyx_v_context);
+  __Pyx_XDECREF(__pyx_v_decomp);
+  __Pyx_XDECREF(__pyx_v_args);
+  __Pyx_XDECREF(__pyx_v_kargs);
+  __Pyx_XDECREF(__pyx_v_names);
+  __Pyx_XDECREF(__pyx_v_innerises);
+  __Pyx_XDECREF(__pyx_v_outerises);
+  __Pyx_XDECREF(__pyx_v_dms);
+  __Pyx_RefNannyFinishContext();
+  #ifdef WITH_THREAD
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
+  #endif
+  return __pyx_r;
+}
+
+/* "PETSc/petscdmshell.pxi":407
+ *     return 0
+ * 
+ * cdef int DMSHELL_CreateDomainDecompositionScatters(             # <<<<<<<<<<<<<<
+ *     PetscDM dm,
+ *     PetscInt clen,
+ */
+
+static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateDomainDecompositionScatters(DM __pyx_v_dm, PetscInt __pyx_v_clen, DM *__pyx_v_subdms, VecScatter **__pyx_v_iscat, VecScatter **__pyx_v_oscat, VecScatter **__pyx_v_gscat) {
+  struct PyPetscDMObject *__pyx_v_Dm = 0;
+  int __pyx_v_i;
+  CYTHON_UNUSED const char *__pyx_v_cname;
+  struct PyPetscDMObject *__pyx_v_subdm = 0;
+  PyObject *__pyx_v_psubdms = NULL;
+  PyObject *__pyx_v_context = NULL;
+  PyObject *__pyx_v_scatters = NULL;
+  PyObject *__pyx_v_args = NULL;
+  PyObject *__pyx_v_kargs = NULL;
+  PyObject *__pyx_v_iscatter = NULL;
+  PyObject *__pyx_v_oscatter = NULL;
+  PyObject *__pyx_v_gscatter = NULL;
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PetscInt __pyx_t_3;
+  int __pyx_t_4;
+  int __pyx_t_5;
+  int __pyx_t_6;
+  int __pyx_t_7;
+  PyObject *__pyx_t_8 = NULL;
+  PyObject *__pyx_t_9 = NULL;
+  PyObject *(*__pyx_t_10)(PyObject *);
+  PyObject *__pyx_t_11 = NULL;
+  Py_ssize_t __pyx_t_12;
+  int __pyx_t_13;
+  VecScatter __pyx_t_14;
+  #ifdef WITH_THREAD
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+  #endif
+  __Pyx_RefNannySetupContext("DMSHELL_CreateDomainDecompositionScatters", 0);
+
+  /* "PETSc/petscdmshell.pxi":415
+ *     PetscScatter** gscat) 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_ERR(8, 415, __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, 415, __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, 415, __pyx_L1_error)
+  __pyx_v_Dm = ((struct PyPetscDMObject *)__pyx_t_2);
+  __pyx_t_2 = 0;
+
+  /* "PETSc/petscdmshell.pxi":417
+ *     cdef DM Dm = subtype_DM(dm)()
+ *     cdef int i
+ *     cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
+ *     cdef DM subdm = None
+ * 
+ */
+  __pyx_v_cname = NULL;
+
+  /* "PETSc/petscdmshell.pxi":418
+ *     cdef int i
+ *     cdef const_char *cname = NULL
+ *     cdef DM subdm = None             # <<<<<<<<<<<<<<
+ * 
+ *     Dm.dm = dm
+ */
+  __Pyx_INCREF(Py_None);
+  __pyx_v_subdm = ((struct PyPetscDMObject *)Py_None);
+
+  /* "PETSc/petscdmshell.pxi":420
+ *     cdef DM subdm = None
+ * 
+ *     Dm.dm = dm             # <<<<<<<<<<<<<<
+ *     PetscINCREF(Dm.obj)
+ * 
+ */
+  __pyx_v_Dm->dm = __pyx_v_dm;
+
+  /* "PETSc/petscdmshell.pxi":421
+ * 
+ *     Dm.dm = dm
+ *     PetscINCREF(Dm.obj)             # <<<<<<<<<<<<<<
+ * 
+ *     psubdms = []
+ */
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_Dm->__pyx_base.obj);
+
+  /* "PETSc/petscdmshell.pxi":423
+ *     PetscINCREF(Dm.obj)
+ * 
+ *     psubdms = []             # <<<<<<<<<<<<<<
+ *     for i from 0 <= i < clen:
+ *         subdm = subtype_DM(subdms[i])()
+ */
+  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 423, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_v_psubdms = ((PyObject*)__pyx_t_2);
+  __pyx_t_2 = 0;
+
+  /* "PETSc/petscdmshell.pxi":424
+ * 
+ *     psubdms = []
+ *     for i from 0 <= i < clen:             # <<<<<<<<<<<<<<
+ *         subdm = subtype_DM(subdms[i])()
+ *         subdm.dm = subdms[i]
+ */
+  __pyx_t_3 = __pyx_v_clen;
+  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {
+
+    /* "PETSc/petscdmshell.pxi":425
+ *     psubdms = []
+ *     for i from 0 <= i < clen:
+ *         subdm = subtype_DM(subdms[i])()             # <<<<<<<<<<<<<<
+ *         subdm.dm = subdms[i]
+ *         PetscINCREF(subdm.obj)
+ */
+    __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM((__pyx_v_subdms[__pyx_v_i]))); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 425, __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_ERR(8, 425, __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(8, 425, __pyx_L1_error)
+    __Pyx_DECREF_SET(__pyx_v_subdm, ((struct PyPetscDMObject *)__pyx_t_1));
+    __pyx_t_1 = 0;
+
+    /* "PETSc/petscdmshell.pxi":426
+ *     for i from 0 <= i < clen:
+ *         subdm = subtype_DM(subdms[i])()
+ *         subdm.dm = subdms[i]             # <<<<<<<<<<<<<<
+ *         PetscINCREF(subdm.obj)
+ *         psubdms.append(subdm)
+ */
+    __pyx_v_subdm->dm = (__pyx_v_subdms[__pyx_v_i]);
+
+    /* "PETSc/petscdmshell.pxi":427
+ *         subdm = subtype_DM(subdms[i])()
+ *         subdm.dm = subdms[i]
+ *         PetscINCREF(subdm.obj)             # <<<<<<<<<<<<<<
+ *         psubdms.append(subdm)
+ * 
+ */
+    __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_subdm->__pyx_base.obj);
+
+    /* "PETSc/petscdmshell.pxi":428
+ *         subdm.dm = subdms[i]
+ *         PetscINCREF(subdm.obj)
+ *         psubdms.append(subdm)             # <<<<<<<<<<<<<<
+ * 
+ *     context = Dm.get_attr('__create_domain_decomp_scatters__')
+ */
+    __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_psubdms, ((PyObject *)__pyx_v_subdm)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(8, 428, __pyx_L1_error)
+  }
+
+  /* "PETSc/petscdmshell.pxi":430
+ *         psubdms.append(subdm)
+ * 
+ *     context = Dm.get_attr('__create_domain_decomp_scatters__')             # <<<<<<<<<<<<<<
+ *     assert context is not None and type(context) is tuple
+ *     (scatters, args, kargs) = context
+ */
+  __pyx_t_1 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__pyx_v_Dm->__pyx_base.__pyx_vtab)->__pyx_base.get_attr(((struct PyPetscObjectObject *)__pyx_v_Dm), ((char *)"__create_domain_decomp_scatters__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 430, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_context = __pyx_t_1;
+  __pyx_t_1 = 0;
+
+  /* "PETSc/petscdmshell.pxi":431
+ * 
+ *     context = Dm.get_attr('__create_domain_decomp_scatters__')
+ *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
+ *     (scatters, args, kargs) = context
+ *     (iscatter, oscatter, gscatter) = scatters(Dm, psubdms, *args, **kargs)
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!Py_OptimizeFlag)) {
+    __pyx_t_6 = (__pyx_v_context != Py_None);
+    __pyx_t_7 = (__pyx_t_6 != 0);
+    if (__pyx_t_7) {
+    } else {
+      __pyx_t_5 = __pyx_t_7;
+      goto __pyx_L5_bool_binop_done;
+    }
+    __pyx_t_7 = (((PyObject *)Py_TYPE(__pyx_v_context)) == ((PyObject *)(&PyTuple_Type)));
+    __pyx_t_6 = (__pyx_t_7 != 0);
+    __pyx_t_5 = __pyx_t_6;
+    __pyx_L5_bool_binop_done:;
+    if (unlikely(!__pyx_t_5)) {
+      PyErr_SetNone(PyExc_AssertionError);
+      __PYX_ERR(8, 431, __pyx_L1_error)
+    }
+  }
+  #endif
+
+  /* "PETSc/petscdmshell.pxi":432
+ *     context = Dm.get_attr('__create_domain_decomp_scatters__')
+ *     assert context is not None and type(context) is tuple
+ *     (scatters, args, kargs) = context             # <<<<<<<<<<<<<<
+ *     (iscatter, oscatter, gscatter) = scatters(Dm, psubdms, *args, **kargs)
+ * 
+ */
+  if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
+    PyObject* sequence = __pyx_v_context;
+    #if !CYTHON_COMPILING_IN_PYPY
+    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, 432, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
+      __pyx_t_8 = PyTuple_GET_ITEM(sequence, 2); 
+    } else {
+      __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 1); 
+      __pyx_t_8 = PyList_GET_ITEM(sequence, 2); 
+    }
+    __Pyx_INCREF(__pyx_t_1);
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_8);
+    #else
+    __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 432, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 432, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_8 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_8)) __PYX_ERR(8, 432, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_8);
+    #endif
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_9 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_9)) __PYX_ERR(8, 432, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_9);
+    __pyx_t_10 = Py_TYPE(__pyx_t_9)->tp_iternext;
+    index = 0; __pyx_t_1 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_1)) goto __pyx_L7_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_1);
+    index = 1; __pyx_t_2 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_2)) goto __pyx_L7_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 2; __pyx_t_8 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L7_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_8);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 3) < 0) __PYX_ERR(8, 432, __pyx_L1_error)
+    __pyx_t_10 = NULL;
+    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+    goto __pyx_L8_unpacking_done;
+    __pyx_L7_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
+    __pyx_t_10 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(8, 432, __pyx_L1_error)
+    __pyx_L8_unpacking_done:;
+  }
+  __pyx_v_scatters = __pyx_t_1;
+  __pyx_t_1 = 0;
+  __pyx_v_args = __pyx_t_2;
+  __pyx_t_2 = 0;
+  __pyx_v_kargs = __pyx_t_8;
+  __pyx_t_8 = 0;
+
+  /* "PETSc/petscdmshell.pxi":433
+ *     assert context is not None and type(context) is tuple
+ *     (scatters, args, kargs) = context
+ *     (iscatter, oscatter, gscatter) = scatters(Dm, psubdms, *args, **kargs)             # <<<<<<<<<<<<<<
+ * 
+ *     assert len(iscatter) == clen
+ */
+  __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(8, 433, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  __Pyx_INCREF(((PyObject *)__pyx_v_Dm));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_Dm));
+  PyTuple_SET_ITEM(__pyx_t_8, 0, ((PyObject *)__pyx_v_Dm));
+  __Pyx_INCREF(__pyx_v_psubdms);
+  __Pyx_GIVEREF(__pyx_v_psubdms);
+  PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_v_psubdms);
+  __pyx_t_2 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 433, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_1 = PyNumber_Add(__pyx_t_8, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 433, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (unlikely(__pyx_v_kargs == Py_None)) {
+    PyErr_SetString(PyExc_TypeError, "argument after ** must be a mapping, not NoneType");
+    __PYX_ERR(8, 433, __pyx_L1_error)
+  }
+  if (likely(PyDict_CheckExact(__pyx_v_kargs))) {
+    __pyx_t_2 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 433, __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_ERR(8, 433, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+  }
+  __pyx_t_8 = __Pyx_PyObject_Call(__pyx_v_scatters, __pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_8)) __PYX_ERR(8, 433, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_8);
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) {
+    PyObject* sequence = __pyx_t_8;
+    #if !CYTHON_COMPILING_IN_PYPY
+    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, 433, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
+      __pyx_t_9 = PyTuple_GET_ITEM(sequence, 2); 
+    } else {
+      __pyx_t_2 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_1 = PyList_GET_ITEM(sequence, 1); 
+      __pyx_t_9 = PyList_GET_ITEM(sequence, 2); 
+    }
+    __Pyx_INCREF(__pyx_t_2);
+    __Pyx_INCREF(__pyx_t_1);
+    __Pyx_INCREF(__pyx_t_9);
+    #else
+    __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 433, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_2);
+    __pyx_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 433, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) __PYX_ERR(8, 433, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_9);
+    #endif
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    __pyx_t_11 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_11)) __PYX_ERR(8, 433, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_11);
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+    __pyx_t_10 = Py_TYPE(__pyx_t_11)->tp_iternext;
+    index = 0; __pyx_t_2 = __pyx_t_10(__pyx_t_11); if (unlikely(!__pyx_t_2)) goto __pyx_L9_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_2);
+    index = 1; __pyx_t_1 = __pyx_t_10(__pyx_t_11); if (unlikely(!__pyx_t_1)) goto __pyx_L9_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_1);
+    index = 2; __pyx_t_9 = __pyx_t_10(__pyx_t_11); if (unlikely(!__pyx_t_9)) goto __pyx_L9_unpacking_failed;
+    __Pyx_GOTREF(__pyx_t_9);
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_11), 3) < 0) __PYX_ERR(8, 433, __pyx_L1_error)
+    __pyx_t_10 = NULL;
+    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+    goto __pyx_L10_unpacking_done;
+    __pyx_L9_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
+    __pyx_t_10 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(8, 433, __pyx_L1_error)
+    __pyx_L10_unpacking_done:;
+  }
+  __pyx_v_iscatter = __pyx_t_2;
+  __pyx_t_2 = 0;
+  __pyx_v_oscatter = __pyx_t_1;
+  __pyx_t_1 = 0;
+  __pyx_v_gscatter = __pyx_t_9;
+  __pyx_t_9 = 0;
+
+  /* "PETSc/petscdmshell.pxi":435
+ *     (iscatter, oscatter, gscatter) = scatters(Dm, psubdms, *args, **kargs)
+ * 
+ *     assert len(iscatter) == clen             # <<<<<<<<<<<<<<
+ *     assert len(oscatter) == clen
+ *     assert len(gscatter) == clen
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!Py_OptimizeFlag)) {
+    __pyx_t_12 = PyObject_Length(__pyx_v_iscatter); if (unlikely(__pyx_t_12 == ((Py_ssize_t)-1))) __PYX_ERR(8, 435, __pyx_L1_error)
+    if (unlikely(!((__pyx_t_12 == __pyx_v_clen) != 0))) {
+      PyErr_SetNone(PyExc_AssertionError);
+      __PYX_ERR(8, 435, __pyx_L1_error)
+    }
+  }
+  #endif
+
+  /* "PETSc/petscdmshell.pxi":436
+ * 
+ *     assert len(iscatter) == clen
+ *     assert len(oscatter) == clen             # <<<<<<<<<<<<<<
+ *     assert len(gscatter) == clen
+ * 
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!Py_OptimizeFlag)) {
+    __pyx_t_12 = PyObject_Length(__pyx_v_oscatter); if (unlikely(__pyx_t_12 == ((Py_ssize_t)-1))) __PYX_ERR(8, 436, __pyx_L1_error)
+    if (unlikely(!((__pyx_t_12 == __pyx_v_clen) != 0))) {
+      PyErr_SetNone(PyExc_AssertionError);
+      __PYX_ERR(8, 436, __pyx_L1_error)
+    }
+  }
+  #endif
+
+  /* "PETSc/petscdmshell.pxi":437
+ *     assert len(iscatter) == clen
+ *     assert len(oscatter) == clen
+ *     assert len(gscatter) == clen             # <<<<<<<<<<<<<<
+ * 
+ *     CHKERR ( PetscMalloc(clen*sizeof(PetscScatter), iscat) )
+ */
+  #ifndef CYTHON_WITHOUT_ASSERTIONS
+  if (unlikely(!Py_OptimizeFlag)) {
+    __pyx_t_12 = PyObject_Length(__pyx_v_gscatter); if (unlikely(__pyx_t_12 == ((Py_ssize_t)-1))) __PYX_ERR(8, 437, __pyx_L1_error)
+    if (unlikely(!((__pyx_t_12 == __pyx_v_clen) != 0))) {
+      PyErr_SetNone(PyExc_AssertionError);
+      __PYX_ERR(8, 437, __pyx_L1_error)
+    }
+  }
+  #endif
+
+  /* "PETSc/petscdmshell.pxi":439
+ *     assert len(gscatter) == clen
+ * 
+ *     CHKERR ( PetscMalloc(clen*sizeof(PetscScatter), iscat) )             # <<<<<<<<<<<<<<
+ *     CHKERR ( PetscMalloc(clen*sizeof(PetscScatter), oscat) )
+ *     CHKERR ( PetscMalloc(clen*sizeof(PetscScatter), gscat) )
+ */
+  __pyx_t_13 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscMalloc((__pyx_v_clen * (sizeof(VecScatter))), __pyx_v_iscat)); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(8, 439, __pyx_L1_error)
+
+  /* "PETSc/petscdmshell.pxi":440
+ * 
+ *     CHKERR ( PetscMalloc(clen*sizeof(PetscScatter), iscat) )
+ *     CHKERR ( PetscMalloc(clen*sizeof(PetscScatter), oscat) )             # <<<<<<<<<<<<<<
+ *     CHKERR ( PetscMalloc(clen*sizeof(PetscScatter), gscat) )
+ * 
+ */
+  __pyx_t_13 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscMalloc((__pyx_v_clen * (sizeof(VecScatter))), __pyx_v_oscat)); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(8, 440, __pyx_L1_error)
+
+  /* "PETSc/petscdmshell.pxi":441
+ *     CHKERR ( PetscMalloc(clen*sizeof(PetscScatter), iscat) )
+ *     CHKERR ( PetscMalloc(clen*sizeof(PetscScatter), oscat) )
+ *     CHKERR ( PetscMalloc(clen*sizeof(PetscScatter), gscat) )             # <<<<<<<<<<<<<<
+ * 
+ *     for i in range(clen):
+ */
+  __pyx_t_13 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscMalloc((__pyx_v_clen * (sizeof(VecScatter))), __pyx_v_gscat)); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(8, 441, __pyx_L1_error)
+
+  /* "PETSc/petscdmshell.pxi":443
+ *     CHKERR ( PetscMalloc(clen*sizeof(PetscScatter), gscat) )
+ * 
+ *     for i in range(clen):             # <<<<<<<<<<<<<<
+ *         iscat[0][i] = (<Scatter?>iscatter[i]).sct
+ *         PetscINCREF((<Scatter?>iscatter[i]).obj)
+ */
+  __pyx_t_3 = __pyx_v_clen;
+  for (__pyx_t_13 = 0; __pyx_t_13 < __pyx_t_3; __pyx_t_13+=1) {
+    __pyx_v_i = __pyx_t_13;
+
+    /* "PETSc/petscdmshell.pxi":444
+ * 
+ *     for i in range(clen):
+ *         iscat[0][i] = (<Scatter?>iscatter[i]).sct             # <<<<<<<<<<<<<<
+ *         PetscINCREF((<Scatter?>iscatter[i]).obj)
+ * 
+ */
+    __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_iscatter, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(8, 444, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_8);
+    if (!(likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_8petsc4py_5PETSc_Scatter)))) __PYX_ERR(8, 444, __pyx_L1_error)
+    __pyx_t_14 = ((struct PyPetscScatterObject *)__pyx_t_8)->sct;
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+    ((__pyx_v_iscat[0])[__pyx_v_i]) = __pyx_t_14;
+
+    /* "PETSc/petscdmshell.pxi":445
+ *     for i in range(clen):
+ *         iscat[0][i] = (<Scatter?>iscatter[i]).sct
+ *         PetscINCREF((<Scatter?>iscatter[i]).obj)             # <<<<<<<<<<<<<<
+ * 
+ *         oscat[0][i] = (<Scatter?>oscatter[i]).sct
+ */
+    __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_iscatter, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(8, 445, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_8);
+    if (!(likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_8petsc4py_5PETSc_Scatter)))) __PYX_ERR(8, 445, __pyx_L1_error)
+    __pyx_f_8petsc4py_5PETSc_PetscINCREF(((struct PyPetscScatterObject *)__pyx_t_8)->__pyx_base.obj);
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+    /* "PETSc/petscdmshell.pxi":447
+ *         PetscINCREF((<Scatter?>iscatter[i]).obj)
+ * 
+ *         oscat[0][i] = (<Scatter?>oscatter[i]).sct             # <<<<<<<<<<<<<<
+ *         PetscINCREF((<Scatter?>oscatter[i]).obj)
+ * 
+ */
+    __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_oscatter, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(8, 447, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_8);
+    if (!(likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_8petsc4py_5PETSc_Scatter)))) __PYX_ERR(8, 447, __pyx_L1_error)
+    __pyx_t_14 = ((struct PyPetscScatterObject *)__pyx_t_8)->sct;
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+    ((__pyx_v_oscat[0])[__pyx_v_i]) = __pyx_t_14;
+
+    /* "PETSc/petscdmshell.pxi":448
+ * 
+ *         oscat[0][i] = (<Scatter?>oscatter[i]).sct
+ *         PetscINCREF((<Scatter?>oscatter[i]).obj)             # <<<<<<<<<<<<<<
+ * 
+ *         gscat[0][i] = (<Scatter?>gscatter[i]).sct
+ */
+    __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_oscatter, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(8, 448, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_8);
+    if (!(likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_8petsc4py_5PETSc_Scatter)))) __PYX_ERR(8, 448, __pyx_L1_error)
+    __pyx_f_8petsc4py_5PETSc_PetscINCREF(((struct PyPetscScatterObject *)__pyx_t_8)->__pyx_base.obj);
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+    /* "PETSc/petscdmshell.pxi":450
+ *         PetscINCREF((<Scatter?>oscatter[i]).obj)
+ * 
+ *         gscat[0][i] = (<Scatter?>gscatter[i]).sct             # <<<<<<<<<<<<<<
+ *         PetscINCREF((<Scatter?>gscatter[i]).obj)
+ * 
+ */
+    __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_gscatter, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(8, 450, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_8);
+    if (!(likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_8petsc4py_5PETSc_Scatter)))) __PYX_ERR(8, 450, __pyx_L1_error)
+    __pyx_t_14 = ((struct PyPetscScatterObject *)__pyx_t_8)->sct;
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+    ((__pyx_v_gscat[0])[__pyx_v_i]) = __pyx_t_14;
+
+    /* "PETSc/petscdmshell.pxi":451
+ * 
+ *         gscat[0][i] = (<Scatter?>gscatter[i]).sct
+ *         PetscINCREF((<Scatter?>gscatter[i]).obj)             # <<<<<<<<<<<<<<
+ * 
+ *     return 0
+ */
+    __pyx_t_8 = __Pyx_GetItemInt(__pyx_v_gscatter, __pyx_v_i, int, 1, __Pyx_PyInt_From_int, 0, 1, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(8, 451, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_8);
+    if (!(likely(__Pyx_TypeTest(__pyx_t_8, __pyx_ptype_8petsc4py_5PETSc_Scatter)))) __PYX_ERR(8, 451, __pyx_L1_error)
+    __pyx_f_8petsc4py_5PETSc_PetscINCREF(((struct PyPetscScatterObject *)__pyx_t_8)->__pyx_base.obj);
+    __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  }
+
+  /* "PETSc/petscdmshell.pxi":453
+ *         PetscINCREF((<Scatter?>gscatter[i]).obj)
+ * 
+ *     return 0             # <<<<<<<<<<<<<<
+ * 
+ * cdef int DMSHELL_CreateSubDM(
+ */
+  __pyx_r = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/petscdmshell.pxi":407
+ *     return 0
+ * 
+ * cdef int DMSHELL_CreateDomainDecompositionScatters(             # <<<<<<<<<<<<<<
+ *     PetscDM dm,
+ *     PetscInt clen,
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_8);
+  __Pyx_XDECREF(__pyx_t_9);
+  __Pyx_XDECREF(__pyx_t_11);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMSHELL_CreateDomainDecompositionScatters", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = PETSC_ERR_PYTHON;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_Dm);
+  __Pyx_XDECREF((PyObject *)__pyx_v_subdm);
+  __Pyx_XDECREF(__pyx_v_psubdms);
+  __Pyx_XDECREF(__pyx_v_context);
+  __Pyx_XDECREF(__pyx_v_scatters);
+  __Pyx_XDECREF(__pyx_v_args);
+  __Pyx_XDECREF(__pyx_v_kargs);
+  __Pyx_XDECREF(__pyx_v_iscatter);
+  __Pyx_XDECREF(__pyx_v_oscatter);
+  __Pyx_XDECREF(__pyx_v_gscatter);
+  __Pyx_RefNannyFinishContext();
+  #ifdef WITH_THREAD
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/petscdmshell.pxi":316
+/* "PETSc/petscdmshell.pxi":455
  *     return 0
  * 
  * cdef int DMSHELL_CreateSubDM(             # <<<<<<<<<<<<<<
@@ -49029,27 +54006,27 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateSubDM(DM __pyx_v_cdm, PetscInt
   IS __pyx_t_9;
   DM __pyx_t_10;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("DMSHELL_CreateSubDM", 0);
 
-  /* "PETSc/petscdmshell.pxi":322
+  /* "PETSc/petscdmshell.pxi":461
  *     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_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_cdm)); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 461, __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_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 461, __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)
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 461, __pyx_L1_error)
   __pyx_v_dm = ((struct PyPetscDMObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":325
+  /* "PETSc/petscdmshell.pxi":464
  *     cdef IS iset
  *     cdef DM subdm
  *     dm.dm = cdm             # <<<<<<<<<<<<<<
@@ -49058,7 +54035,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateSubDM(DM __pyx_v_cdm, PetscInt
  */
   __pyx_v_dm->dm = __pyx_v_cdm;
 
-  /* "PETSc/petscdmshell.pxi":326
+  /* "PETSc/petscdmshell.pxi":465
  *     cdef DM subdm
  *     dm.dm = cdm
  *     PetscINCREF(dm.obj)             # <<<<<<<<<<<<<<
@@ -49067,19 +54044,19 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateSubDM(DM __pyx_v_cdm, PetscInt
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_dm->__pyx_base.obj);
 
-  /* "PETSc/petscdmshell.pxi":327
+  /* "PETSc/petscdmshell.pxi":466
  *     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_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, 466, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_context = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/petscdmshell.pxi":328
+  /* "PETSc/petscdmshell.pxi":467
  *     PetscINCREF(dm.obj)
  *     context = dm.get_attr('__create_subdm__')
  *     assert context is not None and type(context) is tuple             # <<<<<<<<<<<<<<
@@ -49101,12 +54078,12 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateSubDM(DM __pyx_v_cdm, PetscInt
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(8, 328, __pyx_L1_error)
+      __PYX_ERR(8, 467, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/petscdmshell.pxi":329
+  /* "PETSc/petscdmshell.pxi":468
  *     context = dm.get_attr('__create_subdm__')
  *     assert context is not None and type(context) is tuple
  *     (create_subdm, args, kargs) = context             # <<<<<<<<<<<<<<
@@ -49115,7 +54092,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateSubDM(DM __pyx_v_cdm, PetscInt
  */
   if ((likely(PyTuple_CheckExact(__pyx_v_context))) || (PyList_CheckExact(__pyx_v_context))) {
     PyObject* sequence = __pyx_v_context;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -49123,9 +54100,9 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateSubDM(DM __pyx_v_cdm, PetscInt
     if (unlikely(size != 3)) {
       if (size > 3) __Pyx_RaiseTooManyValuesError(3);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      __PYX_ERR(8, 329, __pyx_L1_error)
+      __PYX_ERR(8, 468, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 1); 
@@ -49139,16 +54116,16 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateSubDM(DM __pyx_v_cdm, PetscInt
     __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_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 468, __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_t_1 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 468, __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_t_6 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 468, __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_t_7 = PyObject_GetIter(__pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 468, __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;
@@ -49157,7 +54134,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateSubDM(DM __pyx_v_cdm, PetscInt
     __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)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 3) < 0) __PYX_ERR(8, 468, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L6_unpacking_done;
@@ -49165,7 +54142,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateSubDM(DM __pyx_v_cdm, PetscInt
     __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_ERR(8, 468, __pyx_L1_error)
     __pyx_L6_unpacking_done:;
   }
   __pyx_v_create_subdm = __pyx_t_2;
@@ -49175,26 +54152,26 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateSubDM(DM __pyx_v_cdm, PetscInt
   __pyx_v_kargs = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscdmshell.pxi":331
+  /* "PETSc/petscdmshell.pxi":470
  *     (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_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_numFields, __pyx_v_cfields)); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 470, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __pyx_v_fields = ((PyArrayObject *)__pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "PETSc/petscdmshell.pxi":333
+  /* "PETSc/petscdmshell.pxi":472
  *     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_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 472, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_INCREF(((PyObject *)__pyx_v_dm));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_dm));
@@ -49202,30 +54179,30 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateSubDM(DM __pyx_v_cdm, PetscInt
   __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_t_1 = __Pyx_PySequence_Tuple(__pyx_v_args); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 472, __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_t_2 = PyNumber_Add(__pyx_t_6, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 472, __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)
+    __PYX_ERR(8, 472, __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_t_1 = PyDict_Copy(__pyx_v_kargs); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 472, __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_t_1 = PyObject_CallFunctionObjArgs((PyObject*)&PyDict_Type, __pyx_v_kargs, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 472, __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_t_6 = __Pyx_PyObject_Call(__pyx_v_create_subdm, __pyx_t_2, __pyx_t_1); if (unlikely(!__pyx_t_6)) __PYX_ERR(8, 472, __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
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -49233,9 +54210,9 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateSubDM(DM __pyx_v_cdm, PetscInt
     if (unlikely(size != 2)) {
       if (size > 2) __Pyx_RaiseTooManyValuesError(2);
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-      __PYX_ERR(8, 333, __pyx_L1_error)
+      __PYX_ERR(8, 472, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
@@ -49246,15 +54223,15 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateSubDM(DM __pyx_v_cdm, PetscInt
     __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_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(8, 472, __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_t_2 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(8, 472, __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_t_7 = PyObject_GetIter(__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(8, 472, __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;
@@ -49262,7 +54239,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateSubDM(DM __pyx_v_cdm, PetscInt
     __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)
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_8(__pyx_t_7), 2) < 0) __PYX_ERR(8, 472, __pyx_L1_error)
     __pyx_t_8 = NULL;
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
     goto __pyx_L8_unpacking_done;
@@ -49270,17 +54247,17 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateSubDM(DM __pyx_v_cdm, PetscInt
     __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_ERR(8, 472, __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)
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_IS))))) __PYX_ERR(8, 472, __pyx_L1_error)
+  if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(8, 472, __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
+  /* "PETSc/petscdmshell.pxi":474
  *     iset, subdm = create_subdm(dm, fields, *args, **kargs)
  * 
  *     PetscINCREF(iset.obj)             # <<<<<<<<<<<<<<
@@ -49289,7 +54266,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateSubDM(DM __pyx_v_cdm, PetscInt
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_iset->__pyx_base.obj);
 
-  /* "PETSc/petscdmshell.pxi":336
+  /* "PETSc/petscdmshell.pxi":475
  * 
  *     PetscINCREF(iset.obj)
  *     PetscINCREF(subdm.obj)             # <<<<<<<<<<<<<<
@@ -49298,7 +54275,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateSubDM(DM __pyx_v_cdm, PetscInt
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_subdm->__pyx_base.obj);
 
-  /* "PETSc/petscdmshell.pxi":337
+  /* "PETSc/petscdmshell.pxi":476
  *     PetscINCREF(iset.obj)
  *     PetscINCREF(subdm.obj)
  *     ciset[0] = iset.iset             # <<<<<<<<<<<<<<
@@ -49307,7 +54284,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateSubDM(DM __pyx_v_cdm, PetscInt
   __pyx_t_9 = __pyx_v_iset->iset;
   (__pyx_v_ciset[0]) = __pyx_t_9;
 
-  /* "PETSc/petscdmshell.pxi":338
+  /* "PETSc/petscdmshell.pxi":477
  *     PetscINCREF(subdm.obj)
  *     ciset[0] = iset.iset
  *     csubdm[0] = subdm.dm             # <<<<<<<<<<<<<<
@@ -49315,7 +54292,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateSubDM(DM __pyx_v_cdm, PetscInt
   __pyx_t_10 = __pyx_v_subdm->dm;
   (__pyx_v_csubdm[0]) = __pyx_t_10;
 
-  /* "PETSc/petscdmshell.pxi":316
+  /* "PETSc/petscdmshell.pxi":455
  *     return 0
  * 
  * cdef int DMSHELL_CreateSubDM(             # <<<<<<<<<<<<<<
@@ -49344,7 +54321,7 @@ static int __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateSubDM(DM __pyx_v_cdm, PetscInt
   __Pyx_XDECREF((PyObject *)__pyx_v_fields);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
@@ -49375,7 +54352,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5Error_1__init__(PyObject *__pyx_self
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -49384,6 +54363,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5Error_1__init__(PyObject *__pyx_self
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_self)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ierr);
@@ -49396,6 +54376,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5Error_1__init__(PyObject *__pyx_self
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -49430,7 +54411,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error___init__(CYTHON_UNUSED PyObjec
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
-  Py_ssize_t __pyx_t_5;
+  int __pyx_t_5;
   PyObject *__pyx_t_6 = NULL;
   __Pyx_RefNannySetupContext("__init__", 0);
 
@@ -49459,7 +54440,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error___init__(CYTHON_UNUSED PyObjec
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_t_4 = NULL;
   __pyx_t_5 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
     __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_4)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -49469,20 +54450,40 @@ 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_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;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_2)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_self, __pyx_t_3};
+    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_4, __pyx_v_self, __pyx_t_3};
+    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_5, 2+__pyx_t_5); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  } else
+  #endif
+  {
+    __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;
+    }
+    __Pyx_INCREF(__pyx_v_self);
+    __Pyx_GIVEREF(__pyx_v_self);
+    PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_v_self);
+    __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_ERR(1, 9, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   }
-  __Pyx_INCREF(__pyx_v_self);
-  __Pyx_GIVEREF(__pyx_v_self);
-  PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_5, __pyx_v_self);
-  __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_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;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
@@ -49536,6 +54537,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5Error_3__nonzero__(PyObject *__pyx_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -49649,6 +54651,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5Error_5__repr__(PyObject *__pyx_self
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -49752,6 +54755,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5Error_7__str__(PyObject *__pyx_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -49871,7 +54875,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error_6__str__(CYTHON_UNUSED PyObjec
   __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_ERR(1, 23, __pyx_L1_error)
+  __pyx_t_4 = PyObject_Length(__pyx_t_2); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-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;
@@ -49919,7 +54923,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error_6__str__(CYTHON_UNUSED PyObjec
     if (likely(!__pyx_t_6)) {
       if (likely(PyList_CheckExact(__pyx_t_3))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         __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_ERR(1, 25, __pyx_L1_error)
@@ -49927,7 +54931,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error_6__str__(CYTHON_UNUSED PyObjec
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         __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_ERR(1, 25, __pyx_L1_error)
@@ -49939,7 +54943,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5Error_6__str__(CYTHON_UNUSED PyObjec
       if (unlikely(!__pyx_t_2)) {
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
-          if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
+          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
           else __PYX_ERR(1, 25, __pyx_L1_error)
         }
         break;
@@ -49984,7 +54988,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_ERR(1, 27, __pyx_L1_error)
+    __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_tblist, __pyx_v_tbline); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 27, __pyx_L1_error)
 
     /* "PETSc/Error.pyx":25
  *         width, rank = len(str(csize-1)), crank
@@ -50059,6 +55063,7 @@ static int __pyx_pw_8petsc4py_5PETSc_7Options_1__init__(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -50076,6 +55081,7 @@ static int __pyx_pw_8petsc4py_5PETSc_7Options_1__init__(PyObject *__pyx_v_self,
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -50183,7 +55189,7 @@ static void __pyx_pf_8petsc4py_5PETSc_7Options_2__dealloc__(struct __pyx_obj_8pe
  * 
  *     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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsDestroy((&__pyx_v_self->opt))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(24, 14, __pyx_L1_error)
 
   /* "PETSc/Options.pyx":12
  *         self.prefix  = prefix
@@ -50196,7 +55202,7 @@ static void __pyx_pf_8petsc4py_5PETSc_7Options_2__dealloc__(struct __pyx_obj_8pe
   /* function exit code */
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_WriteUnraisable("petsc4py.PETSc.Options.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 0, 0);
+  __Pyx_WriteUnraisable("petsc4py.PETSc.Options.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
 }
@@ -50242,7 +55248,7 @@ static int __pyx_pf_8petsc4py_5PETSc_7Options_4__contains__(struct __pyx_obj_8pe
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -50255,15 +55261,33 @@ static int __pyx_pf_8petsc4py_5PETSc_7Options_4__contains__(struct __pyx_obj_8pe
     __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_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_ERR(24, 17, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_item};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 17, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_item};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 17, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __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_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_ERR(24, 17, __pyx_L1_error)
@@ -50333,7 +55357,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_6__getitem__(struct __pyx_ob
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -50346,15 +55370,33 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_6__getitem__(struct __pyx_ob
     __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_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_ERR(24, 20, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_item};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 20, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_item};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 20, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __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_ERR(24, 20, __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_r = __pyx_t_1;
@@ -50410,7 +55452,7 @@ static int __pyx_pf_8petsc4py_5PETSc_7Options_8__setitem__(struct __pyx_obj_8pet
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
-  Py_ssize_t __pyx_t_4;
+  int __pyx_t_4;
   PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("__setitem__", 0);
 
@@ -50425,7 +55467,7 @@ static int __pyx_pf_8petsc4py_5PETSc_7Options_8__setitem__(struct __pyx_obj_8pet
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   __pyx_t_4 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -50435,20 +55477,38 @@ static int __pyx_pf_8petsc4py_5PETSc_7Options_8__setitem__(struct __pyx_obj_8pet
       __pyx_t_4 = 1;
     }
   }
-  __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;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_2)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_item, __pyx_v_value};
+    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 23, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_GOTREF(__pyx_t_1);
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_item, __pyx_v_value};
+    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 23, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_GOTREF(__pyx_t_1);
+  } else
+  #endif
+  {
+    __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;
+    }
+    __Pyx_INCREF(__pyx_v_item);
+    __Pyx_GIVEREF(__pyx_v_item);
+    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_item);
+    __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_ERR(24, 23, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
-  __Pyx_INCREF(__pyx_v_item);
-  __Pyx_GIVEREF(__pyx_v_item);
-  PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_item);
-  __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_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;
 
@@ -50515,7 +55575,7 @@ static int __pyx_pf_8petsc4py_5PETSc_7Options_10__delitem__(struct __pyx_obj_8pe
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -50528,15 +55588,33 @@ static int __pyx_pf_8petsc4py_5PETSc_7Options_10__delitem__(struct __pyx_obj_8pe
     __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_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_ERR(24, 26, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_item};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 26, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_item};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(24, 26, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __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_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;
@@ -50785,7 +55863,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_12create(struct __pyx_obj_8p
  *         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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsCreate((&__pyx_v_self->opt))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(24, 39, __pyx_L1_error)
 
   /* "PETSc/Options.pyx":40
  *         if self.opt != NULL: return
@@ -50870,7 +55948,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_14destroy(struct __pyx_obj_8
  *         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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsDestroy((&__pyx_v_self->opt))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(24, 44, __pyx_L1_error)
 
   /* "PETSc/Options.pyx":45
  *         if self.opt == NULL: return
@@ -50955,7 +56033,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_16clear(struct __pyx_obj_8pe
  *         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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsClear(__pyx_v_self->opt)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(24, 49, __pyx_L1_error)
 
   /* "PETSc/Options.pyx":50
  *         if self.opt == NULL: return
@@ -51012,6 +56090,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_19view(PyObject *__pyx_v_sel
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -51029,6 +56108,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_19view(PyObject *__pyx_v_sel
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -51095,7 +56175,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_18view(struct __pyx_obj_8pet
  * 
  *     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)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsView(__pyx_v_self->opt, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(24, 55, __pyx_L1_error)
 
   /* "PETSc/Options.pyx":52
  *         return self
@@ -51155,7 +56235,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_20setFromOptions(struct __py
  *     #
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsSetFromOptions(__pyx_v_self->opt)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(24, 58, __pyx_L1_error)
 
   /* "PETSc/Options.pyx":57
  *         CHKERR( PetscOptionsView(self.opt, vwr) )
@@ -51201,6 +56281,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_23prefixPush(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -51284,7 +56365,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_22prefixPush(struct __pyx_ob
  * 
  *     def prefixPop(self):
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsPrefixPush(__pyx_v_self->opt, __pyx_v_cprefix)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(24, 65, __pyx_L1_error)
 
   /* "PETSc/Options.pyx":61
  *     #
@@ -51346,7 +56427,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_24prefixPop(struct __pyx_obj
  *     #
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsPrefixPop(__pyx_v_self->opt)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(24, 68, __pyx_L1_error)
 
   /* "PETSc/Options.pyx":67
  *         CHKERR( PetscOptionsPrefixPush(self.opt, cprefix) )
@@ -51392,6 +56473,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_27hasName(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -51476,7 +56558,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_26hasName(struct __pyx_obj_8
  *         tmp = getpair(self.prefix, name, &pr, &nm)
  *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
  *         CHKERR( PetscOptionsHasName(self.opt, pr, nm, &flag) )
- *         return <bint> flag
+ *         return toBool(flag)
  */
   __pyx_v_flag = PETSC_FALSE;
 
@@ -51484,20 +56566,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_26hasName(struct __pyx_obj_8
  *         tmp = getpair(self.prefix, name, &pr, &nm)
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( PetscOptionsHasName(self.opt, pr, nm, &flag) )             # <<<<<<<<<<<<<<
- *         return <bint> flag
+ *         return toBool(flag)
  * 
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(24, 76, __pyx_L1_error)
 
   /* "PETSc/Options.pyx":77
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( PetscOptionsHasName(self.opt, pr, nm, &flag) )
- *         return <bint> flag             # <<<<<<<<<<<<<<
+ *         return toBool(flag)             # <<<<<<<<<<<<<<
  * 
  *     def setValue(self, name, value):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(24, 77, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toBool(__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;
@@ -51525,7 +56607,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_26hasName(struct __pyx_obj_8
 }
 
 /* "PETSc/Options.pyx":79
- *         return <bint> flag
+ *         return toBool(flag)
  * 
  *     def setValue(self, name, value):             # <<<<<<<<<<<<<<
  *         cdef const_char *pr = NULL
@@ -51549,7 +56631,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_29setValue(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -51558,6 +56642,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_29setValue(PyObject *__pyx_v
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_value)) != 0)) kw_args--;
         else {
@@ -51732,7 +56817,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_28setValue(struct __pyx_obj_
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
     __pyx_t_2 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
       __pyx_t_2 = PyMethod_GET_SELF(__pyx_t_4);
       if (likely(__pyx_t_2)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -51850,10 +56935,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_28setValue(struct __pyx_obj_
  * 
  *     def delValue(self, name):
  */
-  __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)
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsSetValue(__pyx_v_self->opt, __pyx_v_key, __pyx_v_val)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(24, 95, __pyx_L1_error)
 
   /* "PETSc/Options.pyx":79
- *         return <bint> flag
+ *         return toBool(flag)
  * 
  *     def setValue(self, name, value):             # <<<<<<<<<<<<<<
  *         cdef const_char *pr = NULL
@@ -51902,6 +56987,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_31delValue(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -52072,7 +57158,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_30delValue(struct __pyx_obj_
  * 
  *     #
  */
-  __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)
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsClearValue(__pyx_v_self->opt, __pyx_v_key)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(24, 107, __pyx_L1_error)
 
   /* "PETSc/Options.pyx":97
  *         CHKERR( PetscOptionsSetValue(self.opt, key, val) )
@@ -52125,7 +57211,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_33getBool(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -52134,6 +57222,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_33getBool(PyObject *__pyx_v_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_default);
@@ -52146,6 +57235,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_33getBool(PyObject *__pyx_v_
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -52239,7 +57329,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_35getInt(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -52248,6 +57340,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_35getInt(PyObject *__pyx_v_s
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_default);
@@ -52260,6 +57353,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_35getInt(PyObject *__pyx_v_s
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -52353,7 +57447,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_37getReal(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -52362,6 +57458,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_37getReal(PyObject *__pyx_v_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_default);
@@ -52374,6 +57471,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_37getReal(PyObject *__pyx_v_
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -52467,7 +57565,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_39getScalar(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -52476,6 +57576,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_39getScalar(PyObject *__pyx_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_default);
@@ -52488,6 +57589,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_39getScalar(PyObject *__pyx_
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -52581,7 +57683,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_41getString(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -52590,6 +57694,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_41getString(PyObject *__pyx_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_default);
@@ -52602,6 +57707,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Options_41getString(PyObject *__pyx_
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -52720,7 +57826,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_42getAll(struct __pyx_obj_8p
  *         options = bytes2str(allopts)
  *         CHKERR( PetscFree(allopts) )
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscOptionsGetAll(__pyx_v_self->opt, (&__pyx_v_allopts))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(24, 128, __pyx_L1_error)
 
   /* "PETSc/Options.pyx":129
  *         cdef char *allopts = NULL
@@ -52741,7 +57847,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_42getAll(struct __pyx_obj_8p
  *         return parseopt(options, self.prefix)
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscFree(__pyx_v_allopts)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(24, 130, __pyx_L1_error)
 
   /* "PETSc/Options.pyx":131
  *         options = bytes2str(allopts)
@@ -52784,16 +57890,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Options_42getAll(struct __pyx_obj_8p
 /* "PETSc/Sys.pyx":6
  * 
  *     @classmethod
- *     def getVersion(cls, patch=False, devel=False,             # <<<<<<<<<<<<<<
- *                    date=False, author=False):
- *         cdef int cmajor = PETSC_VERSION_MAJOR
+ *     def getVersion(cls, devel=False, date=False, author=False):             # <<<<<<<<<<<<<<
+ *         cdef char cversion[256]
+ *         cdef PetscInt major=0, minor=0, micro=0, release=0
  */
 
 /* Python wrapper */
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_1getVersion(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Sys_getVersion[] = "Sys.getVersion(type cls, patch=False, devel=False, date=False, author=False)";
+static char __pyx_doc_8petsc4py_5PETSc_3Sys_getVersion[] = "Sys.getVersion(type cls, devel=False, date=False, author=False)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_1getVersion(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_patch = 0;
   PyObject *__pyx_v_devel = 0;
   PyObject *__pyx_v_date = 0;
   PyObject *__pyx_v_author = 0;
@@ -52801,28 +57906,21 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_1getVersion(PyObject *__pyx_v_cl
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getVersion (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_patch,&__pyx_n_s_devel,&__pyx_n_s_date,&__pyx_n_s_author,0};
-    PyObject* values[4] = {0,0,0,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_devel,&__pyx_n_s_date,&__pyx_n_s_author,0};
+    PyObject* values[3] = {0,0,0};
     values[0] = ((PyObject *)Py_False);
     values[1] = ((PyObject *)Py_False);
-
-    /* "PETSc/Sys.pyx":7
- *     @classmethod
- *     def getVersion(cls, patch=False, devel=False,
- *                    date=False, author=False):             # <<<<<<<<<<<<<<
- *         cdef int cmajor = PETSC_VERSION_MAJOR
- *         cdef int cminor = PETSC_VERSION_MINOR
- */
     values[2] = ((PyObject *)Py_False);
-    values[3] = ((PyObject *)Py_False);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
-        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -52830,23 +57928,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_1getVersion(PyObject *__pyx_v_cl
       switch (pos_args) {
         case  0:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_patch);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_devel);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_devel);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_date);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_date);
-          if (value) { values[2] = value; kw_args--; }
-        }
-        case  3:
-        if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_author);
-          if (value) { values[3] = value; kw_args--; }
+          if (value) { values[2] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
@@ -52854,460 +57949,480 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_1getVersion(PyObject *__pyx_v_cl
       }
     } 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);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_patch = values[0];
-    __pyx_v_devel = values[1];
-    __pyx_v_date = values[2];
-    __pyx_v_author = values[3];
+    __pyx_v_devel = values[0];
+    __pyx_v_date = values[1];
+    __pyx_v_author = values[2];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getVersion", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 6, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getVersion", 0, 0, 3, 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(((PyTypeObject*)__pyx_v_cls), __pyx_v_patch, __pyx_v_devel, __pyx_v_date, __pyx_v_author);
-
-  /* "PETSc/Sys.pyx":6
- * 
- *     @classmethod
- *     def getVersion(cls, patch=False, devel=False,             # <<<<<<<<<<<<<<
- *                    date=False, author=False):
- *         cdef int cmajor = PETSC_VERSION_MAJOR
- */
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Sys_getVersion(((PyTypeObject*)__pyx_v_cls), __pyx_v_devel, __pyx_v_date, __pyx_v_author);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-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;
-  int __pyx_v_cpatch;
-  int __pyx_v_cdevel;
-  const char *__pyx_v_cdate;
-  const char *__pyx_v_cauthorinfo;
-  PyObject *__pyx_v_version = NULL;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_getVersion(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_devel, PyObject *__pyx_v_date, PyObject *__pyx_v_author) {
+  char __pyx_v_cversion[0x100];
+  PetscInt __pyx_v_major;
+  PetscInt __pyx_v_minor;
+  PetscInt __pyx_v_micro;
+  PetscInt __pyx_v_release;
   PyObject *__pyx_v_out = NULL;
+  PyObject *__pyx_v_version = NULL;
+  PyObject *__pyx_v_vstr = NULL;
   PyObject *__pyx_v_s = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
-  int __pyx_t_5;
+  PyObject *__pyx_t_5 = NULL;
   int __pyx_t_6;
   int __pyx_t_7;
-  Py_ssize_t __pyx_t_8;
-  PyObject *(*__pyx_t_9)(PyObject *);
-  PyObject *__pyx_t_10 = NULL;
+  int __pyx_t_8;
+  Py_ssize_t __pyx_t_9;
+  PyObject *(*__pyx_t_10)(PyObject *);
+  PyObject *__pyx_t_11 = NULL;
   __Pyx_RefNannySetupContext("getVersion", 0);
   __Pyx_INCREF(__pyx_v_date);
   __Pyx_INCREF(__pyx_v_author);
 
   /* "PETSc/Sys.pyx":8
- *     def getVersion(cls, patch=False, devel=False,
- *                    date=False, author=False):
- *         cdef int cmajor = PETSC_VERSION_MAJOR             # <<<<<<<<<<<<<<
- *         cdef int cminor = PETSC_VERSION_MINOR
- *         cdef int cmicro = PETSC_VERSION_SUBMINOR
+ *     def getVersion(cls, devel=False, date=False, author=False):
+ *         cdef char cversion[256]
+ *         cdef PetscInt major=0, minor=0, micro=0, release=0             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscGetVersion(cversion, sizeof(cversion)) )
+ *         CHKERR( PetscGetVersionNumber(&major, &minor, &micro, &release) )
  */
-  __pyx_v_cmajor = PETSC_VERSION_MAJOR;
+  __pyx_v_major = 0;
+  __pyx_v_minor = 0;
+  __pyx_v_micro = 0;
+  __pyx_v_release = 0;
 
   /* "PETSc/Sys.pyx":9
- *                    date=False, author=False):
- *         cdef int cmajor = PETSC_VERSION_MAJOR
- *         cdef int cminor = PETSC_VERSION_MINOR             # <<<<<<<<<<<<<<
- *         cdef int cmicro = PETSC_VERSION_SUBMINOR
- *         cdef int cpatch = PETSC_VERSION_PATCH
+ *         cdef char cversion[256]
+ *         cdef PetscInt major=0, minor=0, micro=0, release=0
+ *         CHKERR( PetscGetVersion(cversion, sizeof(cversion)) )             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscGetVersionNumber(&major, &minor, &micro, &release) )
+ *         out = version = (toInt(major), toInt(minor), toInt(micro))
  */
-  __pyx_v_cminor = PETSC_VERSION_MINOR;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscGetVersion(__pyx_v_cversion, (sizeof(__pyx_v_cversion)))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(25, 9, __pyx_L1_error)
 
   /* "PETSc/Sys.pyx":10
- *         cdef int cmajor = PETSC_VERSION_MAJOR
- *         cdef int cminor = PETSC_VERSION_MINOR
- *         cdef int cmicro = PETSC_VERSION_SUBMINOR             # <<<<<<<<<<<<<<
- *         cdef int cpatch = PETSC_VERSION_PATCH
- *         cdef int cdevel = not PETSC_VERSION_RELEASE
+ *         cdef PetscInt major=0, minor=0, micro=0, release=0
+ *         CHKERR( PetscGetVersion(cversion, sizeof(cversion)) )
+ *         CHKERR( PetscGetVersionNumber(&major, &minor, &micro, &release) )             # <<<<<<<<<<<<<<
+ *         out = version = (toInt(major), toInt(minor), toInt(micro))
+ *         if devel or date or author:
  */
-  __pyx_v_cmicro = PETSC_VERSION_SUBMINOR;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscGetVersionNumber((&__pyx_v_major), (&__pyx_v_minor), (&__pyx_v_micro), (&__pyx_v_release))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(25, 10, __pyx_L1_error)
 
   /* "PETSc/Sys.pyx":11
- *         cdef int cminor = PETSC_VERSION_MINOR
- *         cdef int cmicro = PETSC_VERSION_SUBMINOR
- *         cdef int cpatch = PETSC_VERSION_PATCH             # <<<<<<<<<<<<<<
- *         cdef int cdevel = not PETSC_VERSION_RELEASE
- *         cdef const_char *cdate = PETSC_VERSION_DATE
+ *         CHKERR( PetscGetVersion(cversion, sizeof(cversion)) )
+ *         CHKERR( PetscGetVersionNumber(&major, &minor, &micro, &release) )
+ *         out = version = (toInt(major), toInt(minor), toInt(micro))             # <<<<<<<<<<<<<<
+ *         if devel or date or author:
+ *             out = [version]
  */
-  __pyx_v_cpatch = PETSC_VERSION_PATCH;
-
-  /* "PETSc/Sys.pyx":12
- *         cdef int cmicro = PETSC_VERSION_SUBMINOR
- *         cdef int cpatch = PETSC_VERSION_PATCH
- *         cdef int cdevel = not PETSC_VERSION_RELEASE             # <<<<<<<<<<<<<<
- *         cdef const_char *cdate = PETSC_VERSION_DATE
- *         cdef const_char *cauthorinfo = PETSC_AUTHOR_INFO
- */
-  __pyx_v_cdevel = (!PETSC_VERSION_RELEASE);
-
-  /* "PETSc/Sys.pyx":13
- *         cdef int cpatch = PETSC_VERSION_PATCH
- *         cdef int cdevel = not PETSC_VERSION_RELEASE
- *         cdef const_char *cdate = PETSC_VERSION_DATE             # <<<<<<<<<<<<<<
- *         cdef const_char *cauthorinfo = PETSC_AUTHOR_INFO
- *         version = (cmajor, cminor, cmicro)
- */
-  __pyx_v_cdate = PETSC_VERSION_DATE;
-
-  /* "PETSc/Sys.pyx":14
- *         cdef int cdevel = not PETSC_VERSION_RELEASE
- *         cdef const_char *cdate = PETSC_VERSION_DATE
- *         cdef const_char *cauthorinfo = PETSC_AUTHOR_INFO             # <<<<<<<<<<<<<<
- *         version = (cmajor, cminor, cmicro)
- *         out = version
- */
-  __pyx_v_cauthorinfo = PETSC_AUTHOR_INFO;
-
-  /* "PETSc/Sys.pyx":15
- *         cdef const_char *cdate = PETSC_VERSION_DATE
- *         cdef const_char *cauthorinfo = PETSC_AUTHOR_INFO
- *         version = (cmajor, cminor, cmicro)             # <<<<<<<<<<<<<<
- *         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_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_ERR(25, 15, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_major); if (unlikely(!__pyx_t_2)) __PYX_ERR(25, 11, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyInt_From_int(__pyx_v_cmicro); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 15, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_minor); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 11, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(25, 15, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_micro); if (unlikely(!__pyx_t_4)) __PYX_ERR(25, 11, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __Pyx_GIVEREF(__pyx_t_1);
-  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_1);
+  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(25, 11, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_2);
-  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_2);
+  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
   __Pyx_GIVEREF(__pyx_t_3);
-  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3);
-  __pyx_t_1 = 0;
+  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_v_version = __pyx_t_4;
   __pyx_t_4 = 0;
+  __Pyx_INCREF(__pyx_t_5);
+  __pyx_v_out = __pyx_t_5;
+  __Pyx_INCREF(__pyx_t_5);
+  __pyx_v_version = __pyx_t_5;
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/Sys.pyx":16
- *         cdef const_char *cauthorinfo = PETSC_AUTHOR_INFO
- *         version = (cmajor, cminor, cmicro)
- *         out = version             # <<<<<<<<<<<<<<
- *         if patch or devel or date or author:
- *             out = [version]
- */
-  __Pyx_INCREF(__pyx_v_version);
-  __pyx_v_out = __pyx_v_version;
-
-  /* "PETSc/Sys.pyx":17
- *         version = (cmajor, cminor, cmicro)
- *         out = version
- *         if patch or devel or date or author:             # <<<<<<<<<<<<<<
+  /* "PETSc/Sys.pyx":12
+ *         CHKERR( PetscGetVersionNumber(&major, &minor, &micro, &release) )
+ *         out = version = (toInt(major), toInt(minor), toInt(micro))
+ *         if devel or date or author:             # <<<<<<<<<<<<<<
  *             out = [version]
- *             if patch:
+ *             if devel:
  */
-  __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_ERR(25, 17, __pyx_L1_error)
-  if (!__pyx_t_6) {
+  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_devel); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(25, 12, __pyx_L1_error)
+  if (!__pyx_t_7) {
   } else {
-    __pyx_t_5 = __pyx_t_6;
+    __pyx_t_6 = __pyx_t_7;
     goto __pyx_L4_bool_binop_done;
   }
-  __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) {
+  __pyx_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_date); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(25, 12, __pyx_L1_error)
+  if (!__pyx_t_7) {
   } else {
-    __pyx_t_5 = __pyx_t_6;
+    __pyx_t_6 = __pyx_t_7;
     goto __pyx_L4_bool_binop_done;
   }
-  __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_t_7 = __Pyx_PyObject_IsTrue(__pyx_v_author); if (unlikely(__pyx_t_7 < 0)) __PYX_ERR(25, 12, __pyx_L1_error)
+  __pyx_t_6 = __pyx_t_7;
   __pyx_L4_bool_binop_done:;
-  if (__pyx_t_5) {
+  if (__pyx_t_6) {
 
-    /* "PETSc/Sys.pyx":18
- *         out = version
- *         if patch or devel or date or author:
+    /* "PETSc/Sys.pyx":13
+ *         out = version = (toInt(major), toInt(minor), toInt(micro))
+ *         if devel or date or author:
  *             out = [version]             # <<<<<<<<<<<<<<
- *             if patch:
- *                 out.append(cpatch)
+ *             if devel:
+ *                 out.append(not <bint>release)
  */
-    __pyx_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(25, 18, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_4);
+    __pyx_t_5 = PyList_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(25, 13, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
     __Pyx_INCREF(__pyx_v_version);
     __Pyx_GIVEREF(__pyx_v_version);
-    PyList_SET_ITEM(__pyx_t_4, 0, __pyx_v_version);
-    __Pyx_DECREF_SET(__pyx_v_out, __pyx_t_4);
-    __pyx_t_4 = 0;
+    PyList_SET_ITEM(__pyx_t_5, 0, __pyx_v_version);
+    __Pyx_DECREF_SET(__pyx_v_out, __pyx_t_5);
+    __pyx_t_5 = 0;
 
-    /* "PETSc/Sys.pyx":19
- *         if patch or devel or date or author:
+    /* "PETSc/Sys.pyx":14
+ *         if devel or date or author:
  *             out = [version]
- *             if patch:             # <<<<<<<<<<<<<<
- *                 out.append(cpatch)
- *             if devel:
+ *             if devel:             # <<<<<<<<<<<<<<
+ *                 out.append(not <bint>release)
+ *             if date:
  */
-    __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) {
+    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_devel); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(25, 14, __pyx_L1_error)
+    if (__pyx_t_6) {
 
-      /* "PETSc/Sys.pyx":20
+      /* "PETSc/Sys.pyx":15
  *             out = [version]
- *             if patch:
- *                 out.append(cpatch)             # <<<<<<<<<<<<<<
  *             if devel:
- *                 out.append(<bint>cdevel)
+ *                 out.append(not <bint>release)             # <<<<<<<<<<<<<<
+ *             if date:
+ *                 vstr = bytes2str(cversion)
  */
-      __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_ERR(25, 20, __pyx_L1_error)
-      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __pyx_t_5 = __Pyx_PyBool_FromLong((!((__pyx_v_release != 0) != 0))); if (unlikely(!__pyx_t_5)) __PYX_ERR(25, 15, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      __pyx_t_8 = __Pyx_PyObject_Append(__pyx_v_out, __pyx_t_5); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(25, 15, __pyx_L1_error)
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-      /* "PETSc/Sys.pyx":19
- *         if patch or devel or date or author:
+      /* "PETSc/Sys.pyx":14
+ *         if devel or date or author:
  *             out = [version]
- *             if patch:             # <<<<<<<<<<<<<<
- *                 out.append(cpatch)
- *             if devel:
- */
-    }
-
-    /* "PETSc/Sys.pyx":21
- *             if patch:
- *                 out.append(cpatch)
  *             if devel:             # <<<<<<<<<<<<<<
- *                 out.append(<bint>cdevel)
+ *                 out.append(not <bint>release)
  *             if date:
  */
-    __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
- *                 out.append(cpatch)
+    /* "PETSc/Sys.pyx":16
  *             if devel:
- *                 out.append(<bint>cdevel)             # <<<<<<<<<<<<<<
+ *                 out.append(not <bint>release)
+ *             if date:             # <<<<<<<<<<<<<<
+ *                 vstr = bytes2str(cversion)
+ *                 if release != 0:
+ */
+    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_date); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(25, 16, __pyx_L1_error)
+    if (__pyx_t_6) {
+
+      /* "PETSc/Sys.pyx":17
+ *                 out.append(not <bint>release)
  *             if date:
- *                 date = bytes2str(cdate)
+ *                 vstr = bytes2str(cversion)             # <<<<<<<<<<<<<<
+ *                 if release != 0:
+ *                     date = vstr.split(",", 1)[-1].strip()
  */
-      __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_ERR(25, 22, __pyx_L1_error)
-      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cversion); if (unlikely(!__pyx_t_5)) __PYX_ERR(25, 17, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      __pyx_v_vstr = __pyx_t_5;
+      __pyx_t_5 = 0;
 
-      /* "PETSc/Sys.pyx":21
- *             if patch:
- *                 out.append(cpatch)
- *             if devel:             # <<<<<<<<<<<<<<
- *                 out.append(<bint>cdevel)
+      /* "PETSc/Sys.pyx":18
  *             if date:
+ *                 vstr = bytes2str(cversion)
+ *                 if release != 0:             # <<<<<<<<<<<<<<
+ *                     date = vstr.split(",", 1)[-1].strip()
+ *                 else:
  */
-    }
+      __pyx_t_6 = ((__pyx_v_release != 0) != 0);
+      if (__pyx_t_6) {
 
-    /* "PETSc/Sys.pyx":23
- *             if devel:
- *                 out.append(<bint>cdevel)
- *             if date:             # <<<<<<<<<<<<<<
- *                 date = bytes2str(cdate)
- *                 out.append(date)
+        /* "PETSc/Sys.pyx":19
+ *                 vstr = bytes2str(cversion)
+ *                 if release != 0:
+ *                     date = vstr.split(",", 1)[-1].strip()             # <<<<<<<<<<<<<<
+ *                 else:
+ *                     date = vstr.split("GIT Date:")[-1].strip()
  */
-    __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) {
+        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_v_vstr, __pyx_n_s_split); if (unlikely(!__pyx_t_4)) __PYX_ERR(25, 19, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_4);
+        __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__34, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 19, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __pyx_t_4 = __Pyx_GetItemInt(__pyx_t_3, -1L, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(25, 19, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_4);
+        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_t_4, __pyx_n_s_strip); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 19, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __pyx_t_4 = NULL;
+        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_3))) {
+          __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
+          if (likely(__pyx_t_4)) {
+            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
+            __Pyx_INCREF(__pyx_t_4);
+            __Pyx_INCREF(function);
+            __Pyx_DECREF_SET(__pyx_t_3, function);
+          }
+        }
+        if (__pyx_t_4) {
+          __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_3, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(25, 19, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+        } else {
+          __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(25, 19, __pyx_L1_error)
+        }
+        __Pyx_GOTREF(__pyx_t_5);
+        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+        __Pyx_DECREF_SET(__pyx_v_date, __pyx_t_5);
+        __pyx_t_5 = 0;
 
-      /* "PETSc/Sys.pyx":24
- *                 out.append(<bint>cdevel)
+        /* "PETSc/Sys.pyx":18
  *             if date:
- *                 date = bytes2str(cdate)             # <<<<<<<<<<<<<<
+ *                 vstr = bytes2str(cversion)
+ *                 if release != 0:             # <<<<<<<<<<<<<<
+ *                     date = vstr.split(",", 1)[-1].strip()
+ *                 else:
+ */
+        goto __pyx_L9;
+      }
+
+      /* "PETSc/Sys.pyx":21
+ *                     date = vstr.split(",", 1)[-1].strip()
+ *                 else:
+ *                     date = vstr.split("GIT Date:")[-1].strip()             # <<<<<<<<<<<<<<
  *                 out.append(date)
  *             if author:
  */
-      __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;
+      /*else*/ {
+        __pyx_t_3 = __Pyx_PyObject_GetAttrStr(__pyx_v_vstr, __pyx_n_s_split); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 21, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_3);
+        __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_tuple__35, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(25, 21, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_4);
+        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+        __pyx_t_3 = __Pyx_GetItemInt(__pyx_t_4, -1L, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 21, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_3);
+        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_3, __pyx_n_s_strip); if (unlikely(!__pyx_t_4)) __PYX_ERR(25, 21, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_4);
+        __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+        __pyx_t_3 = NULL;
+        if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_4))) {
+          __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_4);
+          if (likely(__pyx_t_3)) {
+            PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
+            __Pyx_INCREF(__pyx_t_3);
+            __Pyx_INCREF(function);
+            __Pyx_DECREF_SET(__pyx_t_4, function);
+          }
+        }
+        if (__pyx_t_3) {
+          __pyx_t_5 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(25, 21, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+        } else {
+          __pyx_t_5 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(25, 21, __pyx_L1_error)
+        }
+        __Pyx_GOTREF(__pyx_t_5);
+        __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __Pyx_DECREF_SET(__pyx_v_date, __pyx_t_5);
+        __pyx_t_5 = 0;
+      }
+      __pyx_L9:;
 
-      /* "PETSc/Sys.pyx":25
- *             if date:
- *                 date = bytes2str(cdate)
+      /* "PETSc/Sys.pyx":22
+ *                 else:
+ *                     date = vstr.split("GIT Date:")[-1].strip()
  *                 out.append(date)             # <<<<<<<<<<<<<<
  *             if author:
- *                 author = bytes2str(cauthorinfo).split('\n')
+ *                 author = bytes2str(PETSC_AUTHOR_INFO).split('\n')
  */
-      __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)
+      __pyx_t_8 = __Pyx_PyObject_Append(__pyx_v_out, __pyx_v_date); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(25, 22, __pyx_L1_error)
 
-      /* "PETSc/Sys.pyx":23
+      /* "PETSc/Sys.pyx":16
  *             if devel:
- *                 out.append(<bint>cdevel)
+ *                 out.append(not <bint>release)
  *             if date:             # <<<<<<<<<<<<<<
- *                 date = bytes2str(cdate)
- *                 out.append(date)
+ *                 vstr = bytes2str(cversion)
+ *                 if release != 0:
  */
     }
 
-    /* "PETSc/Sys.pyx":26
- *                 date = bytes2str(cdate)
+    /* "PETSc/Sys.pyx":23
+ *                     date = vstr.split("GIT Date:")[-1].strip()
  *                 out.append(date)
  *             if author:             # <<<<<<<<<<<<<<
- *                 author = bytes2str(cauthorinfo).split('\n')
- *                 author = [s.strip() for s in author if s]
+ *                 author = bytes2str(PETSC_AUTHOR_INFO).split('\n')
+ *                 author = tuple([s.strip() for s in author if s])
  */
-    __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) {
+    __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_author); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(25, 23, __pyx_L1_error)
+    if (__pyx_t_6) {
 
-      /* "PETSc/Sys.pyx":27
+      /* "PETSc/Sys.pyx":24
  *                 out.append(date)
  *             if author:
- *                 author = bytes2str(cauthorinfo).split('\n')             # <<<<<<<<<<<<<<
- *                 author = [s.strip() for s in author if s]
+ *                 author = bytes2str(PETSC_AUTHOR_INFO).split('\n')             # <<<<<<<<<<<<<<
+ *                 author = tuple([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_ERR(25, 27, __pyx_L1_error)
+      __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_bytes2str(PETSC_AUTHOR_INFO); if (unlikely(!__pyx_t_5)) __PYX_ERR(25, 24, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_split); if (unlikely(!__pyx_t_4)) __PYX_ERR(25, 24, __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_ERR(25, 27, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__36, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(25, 24, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_5);
       __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_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);
-      __pyx_t_4 = 0;
+      __Pyx_DECREF_SET(__pyx_v_author, __pyx_t_5);
+      __pyx_t_5 = 0;
 
-      /* "PETSc/Sys.pyx":28
+      /* "PETSc/Sys.pyx":25
  *             if author:
- *                 author = bytes2str(cauthorinfo).split('\n')
- *                 author = [s.strip() for s in author if s]             # <<<<<<<<<<<<<<
+ *                 author = bytes2str(PETSC_AUTHOR_INFO).split('\n')
+ *                 author = tuple([s.strip() for s in author if s])             # <<<<<<<<<<<<<<
  *                 out.append(author)
  *         return tuple(out)
  */
-      __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(25, 28, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_4);
+      __pyx_t_5 = PyList_New(0); if (unlikely(!__pyx_t_5)) __PYX_ERR(25, 25, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_5);
       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;
+        __pyx_t_4 = __pyx_v_author; __Pyx_INCREF(__pyx_t_4); __pyx_t_9 = 0;
+        __pyx_t_10 = NULL;
       } else {
-        __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_ERR(25, 28, __pyx_L1_error)
+        __pyx_t_9 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_author); if (unlikely(!__pyx_t_4)) __PYX_ERR(25, 25, __pyx_L1_error)
+        __Pyx_GOTREF(__pyx_t_4);
+        __pyx_t_10 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_10)) __PYX_ERR(25, 25, __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_ERR(25, 28, __pyx_L1_error)
+        if (likely(!__pyx_t_10)) {
+          if (likely(PyList_CheckExact(__pyx_t_4))) {
+            if (__pyx_t_9 >= PyList_GET_SIZE(__pyx_t_4)) break;
+            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+            __pyx_t_3 = PyList_GET_ITEM(__pyx_t_4, __pyx_t_9); __Pyx_INCREF(__pyx_t_3); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(25, 25, __pyx_L1_error)
             #else
-            __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);
+            __pyx_t_3 = PySequence_ITEM(__pyx_t_4, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 25, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_3);
             #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_ERR(25, 28, __pyx_L1_error)
+            if (__pyx_t_9 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
+            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+            __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_9); __Pyx_INCREF(__pyx_t_3); __pyx_t_9++; if (unlikely(0 < 0)) __PYX_ERR(25, 25, __pyx_L1_error)
             #else
-            __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);
+            __pyx_t_3 = PySequence_ITEM(__pyx_t_4, __pyx_t_9); __pyx_t_9++; if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 25, __pyx_L1_error)
+            __Pyx_GOTREF(__pyx_t_3);
             #endif
           }
         } else {
-          __pyx_t_2 = __pyx_t_9(__pyx_t_3);
-          if (unlikely(!__pyx_t_2)) {
+          __pyx_t_3 = __pyx_t_10(__pyx_t_4);
+          if (unlikely(!__pyx_t_3)) {
             PyObject* exc_type = PyErr_Occurred();
             if (exc_type) {
-              if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-              else __PYX_ERR(25, 28, __pyx_L1_error)
+              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
+              else __PYX_ERR(25, 25, __pyx_L1_error)
             }
             break;
           }
-          __Pyx_GOTREF(__pyx_t_2);
+          __Pyx_GOTREF(__pyx_t_3);
         }
-        __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_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_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))) {
-            __pyx_t_10 = PyMethod_GET_SELF(__pyx_t_1);
-            if (likely(__pyx_t_10)) {
-              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_1);
-              __Pyx_INCREF(__pyx_t_10);
+        __Pyx_XDECREF_SET(__pyx_v_s, __pyx_t_3);
+        __pyx_t_3 = 0;
+        __pyx_t_6 = __Pyx_PyObject_IsTrue(__pyx_v_s); if (unlikely(__pyx_t_6 < 0)) __PYX_ERR(25, 25, __pyx_L1_error)
+        if (__pyx_t_6) {
+          __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_s, __pyx_n_s_strip); if (unlikely(!__pyx_t_2)) __PYX_ERR(25, 25, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_2);
+          __pyx_t_11 = NULL;
+          if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
+            __pyx_t_11 = PyMethod_GET_SELF(__pyx_t_2);
+            if (likely(__pyx_t_11)) {
+              PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+              __Pyx_INCREF(__pyx_t_11);
               __Pyx_INCREF(function);
-              __Pyx_DECREF_SET(__pyx_t_1, function);
+              __Pyx_DECREF_SET(__pyx_t_2, function);
             }
           }
-          if (__pyx_t_10) {
-            __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;
+          if (__pyx_t_11) {
+            __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_11); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 25, __pyx_L1_error)
+            __Pyx_DECREF(__pyx_t_11); __pyx_t_11 = 0;
           } else {
-            __pyx_t_2 = __Pyx_PyObject_CallNoArg(__pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(25, 28, __pyx_L1_error)
+            __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 25, __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_ERR(25, 28, __pyx_L1_error)
+          __Pyx_GOTREF(__pyx_t_3);
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+          if (unlikely(__Pyx_ListComp_Append(__pyx_t_5, (PyObject*)__pyx_t_3))) __PYX_ERR(25, 25, __pyx_L1_error)
+          __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
         }
       }
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+      __pyx_t_4 = PyList_AsTuple(((PyObject*)__pyx_t_5)); if (unlikely(!__pyx_t_4)) __PYX_ERR(25, 25, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
       __Pyx_DECREF_SET(__pyx_v_author, __pyx_t_4);
       __pyx_t_4 = 0;
 
-      /* "PETSc/Sys.pyx":29
- *                 author = bytes2str(cauthorinfo).split('\n')
- *                 author = [s.strip() for s in author if s]
+      /* "PETSc/Sys.pyx":26
+ *                 author = bytes2str(PETSC_AUTHOR_INFO).split('\n')
+ *                 author = tuple([s.strip() for s in author if s])
  *                 out.append(author)             # <<<<<<<<<<<<<<
  *         return tuple(out)
  * 
  */
-      __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)
+      __pyx_t_8 = __Pyx_PyObject_Append(__pyx_v_out, __pyx_v_author); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(25, 26, __pyx_L1_error)
 
-      /* "PETSc/Sys.pyx":26
- *                 date = bytes2str(cdate)
+      /* "PETSc/Sys.pyx":23
+ *                     date = vstr.split("GIT Date:")[-1].strip()
  *                 out.append(date)
  *             if author:             # <<<<<<<<<<<<<<
- *                 author = bytes2str(cauthorinfo).split('\n')
- *                 author = [s.strip() for s in author if s]
+ *                 author = bytes2str(PETSC_AUTHOR_INFO).split('\n')
+ *                 author = tuple([s.strip() for s in author if s])
  */
     }
 
-    /* "PETSc/Sys.pyx":17
- *         version = (cmajor, cminor, cmicro)
- *         out = version
- *         if patch or devel or date or author:             # <<<<<<<<<<<<<<
+    /* "PETSc/Sys.pyx":12
+ *         CHKERR( PetscGetVersionNumber(&major, &minor, &micro, &release) )
+ *         out = version = (toInt(major), toInt(minor), toInt(micro))
+ *         if devel or date or author:             # <<<<<<<<<<<<<<
  *             out = [version]
- *             if patch:
+ *             if devel:
  */
   }
 
-  /* "PETSc/Sys.pyx":30
- *                 author = [s.strip() for s in author if s]
+  /* "PETSc/Sys.pyx":27
+ *                 author = tuple([s.strip() for s in author if s])
  *                 out.append(author)
  *         return tuple(out)             # <<<<<<<<<<<<<<
  * 
  *     @classmethod
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = PySequence_Tuple(__pyx_v_out); if (unlikely(!__pyx_t_4)) __PYX_ERR(25, 30, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PySequence_Tuple(__pyx_v_out); if (unlikely(!__pyx_t_4)) __PYX_ERR(25, 27, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_r = __pyx_t_4;
   __pyx_t_4 = 0;
@@ -53316,23 +58431,24 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_getVersion(CYTHON_UNUSED PyTypeO
   /* "PETSc/Sys.pyx":6
  * 
  *     @classmethod
- *     def getVersion(cls, patch=False, devel=False,             # <<<<<<<<<<<<<<
- *                    date=False, author=False):
- *         cdef int cmajor = PETSC_VERSION_MAJOR
+ *     def getVersion(cls, devel=False, date=False, author=False):             # <<<<<<<<<<<<<<
+ *         cdef char cversion[256]
+ *         cdef PetscInt major=0, minor=0, micro=0, release=0
  */
 
   /* 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_10);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_XDECREF(__pyx_t_11);
   __Pyx_AddTraceback("petsc4py.PETSc.Sys.getVersion", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF(__pyx_v_version);
   __Pyx_XDECREF(__pyx_v_out);
+  __Pyx_XDECREF(__pyx_v_version);
+  __Pyx_XDECREF(__pyx_v_vstr);
   __Pyx_XDECREF(__pyx_v_s);
   __Pyx_XDECREF(__pyx_v_date);
   __Pyx_XDECREF(__pyx_v_author);
@@ -53341,12 +58457,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_getVersion(CYTHON_UNUSED PyTypeO
   return __pyx_r;
 }
 
-/* "PETSc/Sys.pyx":33
+/* "PETSc/Sys.pyx":30
  * 
  *     @classmethod
  *     def getVersionInfo(cls):             # <<<<<<<<<<<<<<
- *         cdef int cmajor = PETSC_VERSION_MAJOR
- *         cdef int cminor = PETSC_VERSION_MINOR
+ *         version, dev, date, author = cls.getVersion(True, True, True)
+ *         return dict(major      = version[0],
  */
 
 /* Python wrapper */
@@ -53366,306 +58482,213 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_3getVersionInfo(PyObject *__pyx_
   return __pyx_r;
 }
 
-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;
-  int __pyx_v_cpatch;
-  int __pyx_v_crelease;
-  const char *__pyx_v_cdate;
-  const char *__pyx_v_cauthorinfo;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_2getVersionInfo(PyTypeObject *__pyx_v_cls) {
+  PyObject *__pyx_v_version = NULL;
+  PyObject *__pyx_v_dev = NULL;
+  PyObject *__pyx_v_date = NULL;
   PyObject *__pyx_v_author = NULL;
-  PyObject *__pyx_v_s = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
-  Py_ssize_t __pyx_t_3;
-  PyObject *(*__pyx_t_4)(PyObject *);
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
-  int __pyx_t_6;
-  PyObject *__pyx_t_7 = NULL;
-  PyObject *__pyx_t_8 = NULL;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *(*__pyx_t_7)(PyObject *);
+  int __pyx_t_8;
   __Pyx_RefNannySetupContext("getVersionInfo", 0);
 
-  /* "PETSc/Sys.pyx":34
+  /* "PETSc/Sys.pyx":31
  *     @classmethod
  *     def getVersionInfo(cls):
- *         cdef int cmajor = PETSC_VERSION_MAJOR             # <<<<<<<<<<<<<<
- *         cdef int cminor = PETSC_VERSION_MINOR
- *         cdef int cmicro = PETSC_VERSION_SUBMINOR
- */
-  __pyx_v_cmajor = PETSC_VERSION_MAJOR;
-
-  /* "PETSc/Sys.pyx":35
- *     def getVersionInfo(cls):
- *         cdef int cmajor = PETSC_VERSION_MAJOR
- *         cdef int cminor = PETSC_VERSION_MINOR             # <<<<<<<<<<<<<<
- *         cdef int cmicro = PETSC_VERSION_SUBMINOR
- *         cdef int cpatch = PETSC_VERSION_PATCH
- */
-  __pyx_v_cminor = PETSC_VERSION_MINOR;
-
-  /* "PETSc/Sys.pyx":36
- *         cdef int cmajor = PETSC_VERSION_MAJOR
- *         cdef int cminor = PETSC_VERSION_MINOR
- *         cdef int cmicro = PETSC_VERSION_SUBMINOR             # <<<<<<<<<<<<<<
- *         cdef int cpatch = PETSC_VERSION_PATCH
- *         cdef int crelease = PETSC_VERSION_RELEASE
- */
-  __pyx_v_cmicro = PETSC_VERSION_SUBMINOR;
-
-  /* "PETSc/Sys.pyx":37
- *         cdef int cminor = PETSC_VERSION_MINOR
- *         cdef int cmicro = PETSC_VERSION_SUBMINOR
- *         cdef int cpatch = PETSC_VERSION_PATCH             # <<<<<<<<<<<<<<
- *         cdef int crelease = PETSC_VERSION_RELEASE
- *         cdef const_char *cdate = PETSC_VERSION_DATE
- */
-  __pyx_v_cpatch = PETSC_VERSION_PATCH;
-
-  /* "PETSc/Sys.pyx":38
- *         cdef int cmicro = PETSC_VERSION_SUBMINOR
- *         cdef int cpatch = PETSC_VERSION_PATCH
- *         cdef int crelease = PETSC_VERSION_RELEASE             # <<<<<<<<<<<<<<
- *         cdef const_char *cdate = PETSC_VERSION_DATE
- *         cdef const_char *cauthorinfo = PETSC_AUTHOR_INFO
- */
-  __pyx_v_crelease = PETSC_VERSION_RELEASE;
-
-  /* "PETSc/Sys.pyx":39
- *         cdef int cpatch = PETSC_VERSION_PATCH
- *         cdef int crelease = PETSC_VERSION_RELEASE
- *         cdef const_char *cdate = PETSC_VERSION_DATE             # <<<<<<<<<<<<<<
- *         cdef const_char *cauthorinfo = PETSC_AUTHOR_INFO
- *         author = bytes2str(cauthorinfo).split('\n')
- */
-  __pyx_v_cdate = PETSC_VERSION_DATE;
-
-  /* "PETSc/Sys.pyx":40
- *         cdef int crelease = PETSC_VERSION_RELEASE
- *         cdef const_char *cdate = PETSC_VERSION_DATE
- *         cdef const_char *cauthorinfo = PETSC_AUTHOR_INFO             # <<<<<<<<<<<<<<
- *         author = bytes2str(cauthorinfo).split('\n')
- *         author = [s.strip() for s in author if s]
+ *         version, dev, date, author = cls.getVersion(True, True, True)             # <<<<<<<<<<<<<<
+ *         return dict(major      = version[0],
+ *                     minor      = version[1],
  */
-  __pyx_v_cauthorinfo = PETSC_AUTHOR_INFO;
-
-  /* "PETSc/Sys.pyx":41
- *         cdef const_char *cdate = PETSC_VERSION_DATE
- *         cdef const_char *cauthorinfo = PETSC_AUTHOR_INFO
- *         author = bytes2str(cauthorinfo).split('\n')             # <<<<<<<<<<<<<<
- *         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_ERR(25, 41, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_cls), __pyx_n_s_getVersion); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 31, __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_ERR(25, 41, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__37, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(25, 31, __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_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;
-  __pyx_t_1 = 0;
-
-  /* "PETSc/Sys.pyx":42
- *         cdef const_char *cauthorinfo = PETSC_AUTHOR_INFO
- *         author = bytes2str(cauthorinfo).split('\n')
- *         author = [s.strip() for s in author if s]             # <<<<<<<<<<<<<<
- *         return dict(major      = cmajor,
- *                     minor      = cminor,
- */
-  __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_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_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_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_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_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_ERR(25, 42, __pyx_L1_error)
-        __Pyx_GOTREF(__pyx_t_5);
-        #endif
-      }
+  if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
+    PyObject* sequence = __pyx_t_2;
+    #if !CYTHON_COMPILING_IN_PYPY
+    Py_ssize_t size = Py_SIZE(sequence);
+    #else
+    Py_ssize_t size = PySequence_Size(sequence);
+    #endif
+    if (unlikely(size != 4)) {
+      if (size > 4) __Pyx_RaiseTooManyValuesError(4);
+      else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+      __PYX_ERR(25, 31, __pyx_L1_error)
+    }
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    if (likely(PyTuple_CheckExact(sequence))) {
+      __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
+      __pyx_t_4 = PyTuple_GET_ITEM(sequence, 2); 
+      __pyx_t_5 = PyTuple_GET_ITEM(sequence, 3); 
     } else {
-      __pyx_t_5 = __pyx_t_4(__pyx_t_2);
-      if (unlikely(!__pyx_t_5)) {
-        PyObject* exc_type = PyErr_Occurred();
-        if (exc_type) {
-          if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(25, 42, __pyx_L1_error)
-        }
-        break;
-      }
-      __Pyx_GOTREF(__pyx_t_5);
+      __pyx_t_1 = PyList_GET_ITEM(sequence, 0); 
+      __pyx_t_3 = PyList_GET_ITEM(sequence, 1); 
+      __pyx_t_4 = PyList_GET_ITEM(sequence, 2); 
+      __pyx_t_5 = PyList_GET_ITEM(sequence, 3); 
     }
-    __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_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_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))) {
-        __pyx_t_8 = PyMethod_GET_SELF(__pyx_t_7);
-        if (likely(__pyx_t_8)) {
-          PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_7);
-          __Pyx_INCREF(__pyx_t_8);
-          __Pyx_INCREF(function);
-          __Pyx_DECREF_SET(__pyx_t_7, function);
-        }
-      }
-      if (__pyx_t_8) {
-        __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_ERR(25, 42, __pyx_L1_error)
+    __Pyx_INCREF(__pyx_t_1);
+    __Pyx_INCREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_t_4);
+    __Pyx_INCREF(__pyx_t_5);
+    #else
+    {
+      Py_ssize_t i;
+      PyObject** temps[4] = {&__pyx_t_1,&__pyx_t_3,&__pyx_t_4,&__pyx_t_5};
+      for (i=0; i < 4; i++) {
+        PyObject* item = PySequence_ITEM(sequence, i); if (unlikely(!item)) __PYX_ERR(25, 31, __pyx_L1_error)
+        __Pyx_GOTREF(item);
+        *(temps[i]) = item;
       }
-      __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_ERR(25, 42, __pyx_L1_error)
-      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     }
+    #endif
+    __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  } else {
+    Py_ssize_t index = -1;
+    PyObject** temps[4] = {&__pyx_t_1,&__pyx_t_3,&__pyx_t_4,&__pyx_t_5};
+    __pyx_t_6 = PyObject_GetIter(__pyx_t_2); if (unlikely(!__pyx_t_6)) __PYX_ERR(25, 31, __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;
+    for (index=0; index < 4; index++) {
+      PyObject* item = __pyx_t_7(__pyx_t_6); if (unlikely(!item)) goto __pyx_L3_unpacking_failed;
+      __Pyx_GOTREF(item);
+      *(temps[index]) = item;
+    }
+    if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 4) < 0) __PYX_ERR(25, 31, __pyx_L1_error)
+    __pyx_t_7 = NULL;
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    goto __pyx_L4_unpacking_done;
+    __pyx_L3_unpacking_failed:;
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+    __pyx_t_7 = NULL;
+    if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
+    __PYX_ERR(25, 31, __pyx_L1_error)
+    __pyx_L4_unpacking_done:;
   }
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __Pyx_DECREF_SET(__pyx_v_author, __pyx_t_1);
+  __pyx_v_version = __pyx_t_1;
   __pyx_t_1 = 0;
+  __pyx_v_dev = __pyx_t_3;
+  __pyx_t_3 = 0;
+  __pyx_v_date = __pyx_t_4;
+  __pyx_t_4 = 0;
+  __pyx_v_author = __pyx_t_5;
+  __pyx_t_5 = 0;
 
-  /* "PETSc/Sys.pyx":43
- *         author = bytes2str(cauthorinfo).split('\n')
- *         author = [s.strip() for s in author if s]
- *         return dict(major      = cmajor,             # <<<<<<<<<<<<<<
- *                     minor      = cminor,
- *                     subminor   = cmicro,
+  /* "PETSc/Sys.pyx":32
+ *     def getVersionInfo(cls):
+ *         version, dev, date, author = cls.getVersion(True, True, True)
+ *         return dict(major      = version[0],             # <<<<<<<<<<<<<<
+ *                     minor      = version[1],
+ *                     subminor   = version[2],
  */
   __Pyx_XDECREF(__pyx_r);
-  __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_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_ERR(25, 43, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-
-  /* "PETSc/Sys.pyx":44
- *         author = [s.strip() for s in author if s]
- *         return dict(major      = cmajor,
- *                     minor      = cminor,             # <<<<<<<<<<<<<<
- *                     subminor   = cmicro,
- *                     patch      = cpatch,
- */
-  __pyx_t_2 = __Pyx_PyInt_From_int(__pyx_v_cminor); if (unlikely(!__pyx_t_2)) __PYX_ERR(25, 44, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(6); if (unlikely(!__pyx_t_2)) __PYX_ERR(25, 32, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  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;
+  __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_version, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(25, 32, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_major, __pyx_t_5) < 0) __PYX_ERR(25, 32, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/Sys.pyx":45
- *         return dict(major      = cmajor,
- *                     minor      = cminor,
- *                     subminor   = cmicro,             # <<<<<<<<<<<<<<
- *                     patch      = cpatch,
- *                     release    = <bint>crelease,
+  /* "PETSc/Sys.pyx":33
+ *         version, dev, date, author = cls.getVersion(True, True, True)
+ *         return dict(major      = version[0],
+ *                     minor      = version[1],             # <<<<<<<<<<<<<<
+ *                     subminor   = version[2],
+ *                     release    = not dev,
  */
-  __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_ERR(25, 43, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_version, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(25, 33, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_minor, __pyx_t_5) < 0) __PYX_ERR(25, 32, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/Sys.pyx":46
- *                     minor      = cminor,
- *                     subminor   = cmicro,
- *                     patch      = cpatch,             # <<<<<<<<<<<<<<
- *                     release    = <bint>crelease,
- *                     date       = bytes2str(cdate),
+  /* "PETSc/Sys.pyx":34
+ *         return dict(major      = version[0],
+ *                     minor      = version[1],
+ *                     subminor   = version[2],             # <<<<<<<<<<<<<<
+ *                     release    = not dev,
+ *                     date       = date,
  */
-  __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_ERR(25, 43, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_version, 2, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(25, 34, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_subminor, __pyx_t_5) < 0) __PYX_ERR(25, 32, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/Sys.pyx":47
- *                     subminor   = cmicro,
- *                     patch      = cpatch,
- *                     release    = <bint>crelease,             # <<<<<<<<<<<<<<
- *                     date       = bytes2str(cdate),
+  /* "PETSc/Sys.pyx":35
+ *                     minor      = version[1],
+ *                     subminor   = version[2],
+ *                     release    = not dev,             # <<<<<<<<<<<<<<
+ *                     date       = date,
  *                     authorinfo = author)
  */
-  __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_ERR(25, 43, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_8 = __Pyx_PyObject_IsTrue(__pyx_v_dev); if (unlikely(__pyx_t_8 < 0)) __PYX_ERR(25, 35, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyBool_FromLong((!__pyx_t_8)); if (unlikely(!__pyx_t_5)) __PYX_ERR(25, 35, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_release, __pyx_t_5) < 0) __PYX_ERR(25, 32, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/Sys.pyx":48
- *                     patch      = cpatch,
- *                     release    = <bint>crelease,
- *                     date       = bytes2str(cdate),             # <<<<<<<<<<<<<<
+  /* "PETSc/Sys.pyx":36
+ *                     subminor   = version[2],
+ *                     release    = not dev,
+ *                     date       = date,             # <<<<<<<<<<<<<<
  *                     authorinfo = author)
  * 
  */
-  __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_ERR(25, 43, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_date, __pyx_v_date) < 0) __PYX_ERR(25, 32, __pyx_L1_error)
 
-  /* "PETSc/Sys.pyx":49
- *                     release    = <bint>crelease,
- *                     date       = bytes2str(cdate),
+  /* "PETSc/Sys.pyx":37
+ *                     release    = not dev,
+ *                     date       = date,
  *                     authorinfo = author)             # <<<<<<<<<<<<<<
  * 
  *     # --- xxx ---
  */
-  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;
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_authorinfo, __pyx_v_author) < 0) __PYX_ERR(25, 32, __pyx_L1_error)
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Sys.pyx":33
+  /* "PETSc/Sys.pyx":30
  * 
  *     @classmethod
  *     def getVersionInfo(cls):             # <<<<<<<<<<<<<<
- *         cdef int cmajor = PETSC_VERSION_MAJOR
- *         cdef int cminor = PETSC_VERSION_MINOR
+ *         version, dev, date, author = cls.getVersion(True, True, True)
+ *         return dict(major      = version[0],
  */
 
   /* 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_XDECREF(__pyx_t_7);
-  __Pyx_XDECREF(__pyx_t_8);
+  __Pyx_XDECREF(__pyx_t_6);
   __Pyx_AddTraceback("petsc4py.PETSc.Sys.getVersionInfo", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_version);
+  __Pyx_XDECREF(__pyx_v_dev);
+  __Pyx_XDECREF(__pyx_v_date);
   __Pyx_XDECREF(__pyx_v_author);
-  __Pyx_XDECREF(__pyx_v_s);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/Sys.pyx":54
+/* "PETSc/Sys.pyx":42
  * 
  *     @classmethod
  *     def isInitialized(cls):             # <<<<<<<<<<<<<<
- *         return <bint>PetscInitializeCalled
+ *         return toBool(PetscInitializeCalled)
  * 
  */
 
@@ -53692,25 +58715,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_4isInitialized(CYTHON_UNUSED PyT
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("isInitialized", 0);
 
-  /* "PETSc/Sys.pyx":55
+  /* "PETSc/Sys.pyx":43
  *     @classmethod
  *     def isInitialized(cls):
- *         return <bint>PetscInitializeCalled             # <<<<<<<<<<<<<<
+ *         return toBool(PetscInitializeCalled)             # <<<<<<<<<<<<<<
  * 
  *     @classmethod
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_PetscBool(PetscInitializeCalled); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 55, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toBool(PetscInitializeCalled); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 43, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Sys.pyx":54
+  /* "PETSc/Sys.pyx":42
  * 
  *     @classmethod
  *     def isInitialized(cls):             # <<<<<<<<<<<<<<
- *         return <bint>PetscInitializeCalled
+ *         return toBool(PetscInitializeCalled)
  * 
  */
 
@@ -53725,11 +58748,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_4isInitialized(CYTHON_UNUSED PyT
   return __pyx_r;
 }
 
-/* "PETSc/Sys.pyx":58
+/* "PETSc/Sys.pyx":46
  * 
  *     @classmethod
  *     def isFinalized(cls):             # <<<<<<<<<<<<<<
- *         return <bint>PetscFinalizeCalled
+ *         return toBool(PetscFinalizeCalled)
  * 
  */
 
@@ -53756,25 +58779,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_6isFinalized(CYTHON_UNUSED PyTyp
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("isFinalized", 0);
 
-  /* "PETSc/Sys.pyx":59
+  /* "PETSc/Sys.pyx":47
  *     @classmethod
  *     def isFinalized(cls):
- *         return <bint>PetscFinalizeCalled             # <<<<<<<<<<<<<<
+ *         return toBool(PetscFinalizeCalled)             # <<<<<<<<<<<<<<
  * 
  *     # --- xxx ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_PetscBool(PetscFinalizeCalled); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 59, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toBool(PetscFinalizeCalled); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 47, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Sys.pyx":58
+  /* "PETSc/Sys.pyx":46
  * 
  *     @classmethod
  *     def isFinalized(cls):             # <<<<<<<<<<<<<<
- *         return <bint>PetscFinalizeCalled
+ *         return toBool(PetscFinalizeCalled)
  * 
  */
 
@@ -53789,7 +58812,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_6isFinalized(CYTHON_UNUSED PyTyp
   return __pyx_r;
 }
 
-/* "PETSc/Sys.pyx":64
+/* "PETSc/Sys.pyx":52
  * 
  *     @classmethod
  *     def getDefaultComm(cls):             # <<<<<<<<<<<<<<
@@ -53821,19 +58844,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_8getDefaultComm(CYTHON_UNUSED Py
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("getDefaultComm", 0);
 
-  /* "PETSc/Sys.pyx":65
+  /* "PETSc/Sys.pyx":53
  *     @classmethod
  *     def getDefaultComm(cls):
  *         cdef Comm comm = Comm()             # <<<<<<<<<<<<<<
  *         comm.comm = PETSC_COMM_DEFAULT
  *         return comm
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 53, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_comm = ((struct PyPetscCommObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Sys.pyx":66
+  /* "PETSc/Sys.pyx":54
  *     def getDefaultComm(cls):
  *         cdef Comm comm = Comm()
  *         comm.comm = PETSC_COMM_DEFAULT             # <<<<<<<<<<<<<<
@@ -53842,7 +58865,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_8getDefaultComm(CYTHON_UNUSED Py
  */
   __pyx_v_comm->comm = __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT;
 
-  /* "PETSc/Sys.pyx":67
+  /* "PETSc/Sys.pyx":55
  *         cdef Comm comm = Comm()
  *         comm.comm = PETSC_COMM_DEFAULT
  *         return comm             # <<<<<<<<<<<<<<
@@ -53854,7 +58877,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_8getDefaultComm(CYTHON_UNUSED Py
   __pyx_r = ((PyObject *)__pyx_v_comm);
   goto __pyx_L0;
 
-  /* "PETSc/Sys.pyx":64
+  /* "PETSc/Sys.pyx":52
  * 
  *     @classmethod
  *     def getDefaultComm(cls):             # <<<<<<<<<<<<<<
@@ -53874,7 +58897,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_8getDefaultComm(CYTHON_UNUSED Py
   return __pyx_r;
 }
 
-/* "PETSc/Sys.pyx":70
+/* "PETSc/Sys.pyx":58
  * 
  *     @classmethod
  *     def setDefaultComm(cls, comm):             # <<<<<<<<<<<<<<
@@ -53898,6 +58921,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_11setDefaultComm(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -53908,7 +58932,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_ERR(25, 70, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDefaultComm") < 0)) __PYX_ERR(25, 58, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -53919,7 +58943,7 @@ 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_ERR(25, 70, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setDefaultComm", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 58, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Sys.setDefaultComm", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -53941,17 +58965,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_10setDefaultComm(CYTHON_UNUSED P
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("setDefaultComm", 0);
 
-  /* "PETSc/Sys.pyx":71
+  /* "PETSc/Sys.pyx":59
  *     @classmethod
  *     def setDefaultComm(cls, comm):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_WORLD)             # <<<<<<<<<<<<<<
  *         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_ERR(25, 71, __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, 59, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Sys.pyx":72
+  /* "PETSc/Sys.pyx":60
  *     def setDefaultComm(cls, comm):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_WORLD)
  *         if ccomm == MPI_COMM_NULL:             # <<<<<<<<<<<<<<
@@ -53961,20 +58985,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_10setDefaultComm(CYTHON_UNUSED P
   __pyx_t_2 = ((__pyx_v_ccomm == MPI_COMM_NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Sys.pyx":73
+    /* "PETSc/Sys.pyx":61
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_WORLD)
  *         if ccomm == MPI_COMM_NULL:
  *             raise ValueError("null communicator")             # <<<<<<<<<<<<<<
  *         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_ERR(25, 73, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__38, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 61, __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, 73, __pyx_L1_error)
+    __PYX_ERR(25, 61, __pyx_L1_error)
 
-    /* "PETSc/Sys.pyx":72
+    /* "PETSc/Sys.pyx":60
  *     def setDefaultComm(cls, comm):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_WORLD)
  *         if ccomm == MPI_COMM_NULL:             # <<<<<<<<<<<<<<
@@ -53983,7 +59007,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_10setDefaultComm(CYTHON_UNUSED P
  */
   }
 
-  /* "PETSc/Sys.pyx":75
+  /* "PETSc/Sys.pyx":63
  *             raise ValueError("null communicator")
  *         global PETSC_COMM_DEFAULT
  *         PETSC_COMM_DEFAULT = ccomm             # <<<<<<<<<<<<<<
@@ -53992,7 +59016,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_10setDefaultComm(CYTHON_UNUSED P
  */
   __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT = __pyx_v_ccomm;
 
-  /* "PETSc/Sys.pyx":70
+  /* "PETSc/Sys.pyx":58
  * 
  *     @classmethod
  *     def setDefaultComm(cls, comm):             # <<<<<<<<<<<<<<
@@ -54013,7 +59037,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_10setDefaultComm(CYTHON_UNUSED P
   return __pyx_r;
 }
 
-/* "PETSc/Sys.pyx":80
+/* "PETSc/Sys.pyx":68
  * 
  *     @classmethod
  *     def Print(cls, *args, **kargs):             # <<<<<<<<<<<<<<
@@ -54064,64 +59088,64 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_12Print(CYTHON_UNUSED PyTypeObje
   __Pyx_RefNannySetupContext("Print", 0);
   __Pyx_INCREF(__pyx_v_args);
 
-  /* "PETSc/Sys.pyx":81
+  /* "PETSc/Sys.pyx":69
  *     @classmethod
  *     def Print(cls, *args, **kargs):
  *         cdef object comm = kargs.get('comm', None)             # <<<<<<<<<<<<<<
  *         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_ERR(25, 81, __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, 69, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_comm = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/Sys.pyx":82
+  /* "PETSc/Sys.pyx":70
  *     def Print(cls, *args, **kargs):
  *         cdef object comm = kargs.get('comm', None)
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         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_ERR(25, 82, __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, 70, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_2;
 
-  /* "PETSc/Sys.pyx":83
+  /* "PETSc/Sys.pyx":71
  *         cdef object comm = kargs.get('comm', None)
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef object sep = kargs.get('sep', ' ')             # <<<<<<<<<<<<<<
  *         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_ERR(25, 83, __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, 71, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_sep = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/Sys.pyx":84
+  /* "PETSc/Sys.pyx":72
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef object sep = kargs.get('sep', ' ')
  *         cdef object end = kargs.get('end', '\n')             # <<<<<<<<<<<<<<
  *         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_ERR(25, 84, __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, 72, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_end = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/Sys.pyx":85
+  /* "PETSc/Sys.pyx":73
  *         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)
  */
-  __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_3 = __pyx_f_8petsc4py_5PETSc_comm_rank(__pyx_v_ccomm); if (unlikely(__pyx_t_3 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(25, 73, __pyx_L1_error)
   __pyx_t_4 = ((__pyx_t_3 == 0) != 0);
   if (__pyx_t_4) {
 
-    /* "PETSc/Sys.pyx":86
+    /* "PETSc/Sys.pyx":74
  *         cdef object end = kargs.get('end', '\n')
  *         if comm_rank(ccomm) == 0:
  *             if not args: args = ('',)             # <<<<<<<<<<<<<<
@@ -54131,19 +59155,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_12Print(CYTHON_UNUSED PyTypeObje
     __pyx_t_4 = (__pyx_v_args != Py_None) && (PyTuple_GET_SIZE(__pyx_v_args) != 0);
     __pyx_t_5 = ((!__pyx_t_4) != 0);
     if (__pyx_t_5) {
-      __Pyx_INCREF(__pyx_tuple__36);
-      __Pyx_DECREF_SET(__pyx_v_args, __pyx_tuple__36);
+      __Pyx_INCREF(__pyx_tuple__39);
+      __Pyx_DECREF_SET(__pyx_v_args, __pyx_tuple__39);
     }
 
-    /* "PETSc/Sys.pyx":87
+    /* "PETSc/Sys.pyx":75
  *         if comm_rank(ccomm) == 0:
  *             if not args: args = ('',)
  *             format = ['%s', sep] * len(args)             # <<<<<<<<<<<<<<
  *             format[-1] = end
  *             message = ''.join(format) % args
  */
-    __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_t_6 = PyTuple_GET_SIZE(__pyx_v_args); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(25, 75, __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, 75, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     { Py_ssize_t __pyx_temp;
       for (__pyx_temp=0; __pyx_temp < __pyx_t_6; __pyx_temp++) {
@@ -54158,31 +59182,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_12Print(CYTHON_UNUSED PyTypeObje
     __pyx_v_format = ((PyObject*)__pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "PETSc/Sys.pyx":88
+    /* "PETSc/Sys.pyx":76
  *             if not args: args = ('',)
  *             format = ['%s', sep] * len(args)
  *             format[-1] = end             # <<<<<<<<<<<<<<
  *             message = ''.join(format) % args
  *         else:
  */
-    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)
+    if (unlikely(__Pyx_SetItemInt(__pyx_v_format, -1L, __pyx_v_end, long, 1, __Pyx_PyInt_From_long, 1, 1, 1) < 0)) __PYX_ERR(25, 76, __pyx_L1_error)
 
-    /* "PETSc/Sys.pyx":89
+    /* "PETSc/Sys.pyx":77
  *             format = ['%s', sep] * len(args)
  *             format[-1] = end
  *             message = ''.join(format) % args             # <<<<<<<<<<<<<<
  *         else:
  *             message = ''
  */
-    __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_t_1 = __Pyx_PyString_Join(__pyx_kp_s__10, __pyx_v_format); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 77, __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_ERR(25, 89, __pyx_L1_error)
+    __pyx_t_7 = PyNumber_Remainder(__pyx_t_1, __pyx_v_args); if (unlikely(!__pyx_t_7)) __PYX_ERR(25, 77, __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
+    /* "PETSc/Sys.pyx":73
  *         cdef object sep = kargs.get('sep', ' ')
  *         cdef object end = kargs.get('end', '\n')
  *         if comm_rank(ccomm) == 0:             # <<<<<<<<<<<<<<
@@ -54192,7 +59216,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_12Print(CYTHON_UNUSED PyTypeObje
     goto __pyx_L3;
   }
 
-  /* "PETSc/Sys.pyx":91
+  /* "PETSc/Sys.pyx":79
  *             message = ''.join(format) % args
  *         else:
  *             message = ''             # <<<<<<<<<<<<<<
@@ -54205,7 +59229,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_12Print(CYTHON_UNUSED PyTypeObje
   }
   __pyx_L3:;
 
-  /* "PETSc/Sys.pyx":92
+  /* "PETSc/Sys.pyx":80
  *         else:
  *             message = ''
  *         cdef const_char *m = NULL             # <<<<<<<<<<<<<<
@@ -54214,28 +59238,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_12Print(CYTHON_UNUSED PyTypeObje
  */
   __pyx_v_m = NULL;
 
-  /* "PETSc/Sys.pyx":93
+  /* "PETSc/Sys.pyx":81
  *             message = ''
  *         cdef const_char *m = NULL
  *         message = str2bytes(message, &m)             # <<<<<<<<<<<<<<
  *         CHKERR( PetscPrintf(ccomm, m) )
  * 
  */
-  __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_t_7 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_message, (&__pyx_v_m)); if (unlikely(!__pyx_t_7)) __PYX_ERR(25, 81, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_7);
   __Pyx_DECREF_SET(__pyx_v_message, __pyx_t_7);
   __pyx_t_7 = 0;
 
-  /* "PETSc/Sys.pyx":94
+  /* "PETSc/Sys.pyx":82
  *         cdef const_char *m = NULL
  *         message = str2bytes(message, &m)
  *         CHKERR( PetscPrintf(ccomm, m) )             # <<<<<<<<<<<<<<
  * 
  *     @classmethod
  */
-  __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)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPrintf(__pyx_v_ccomm, __pyx_v_m)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(25, 82, __pyx_L1_error)
 
-  /* "PETSc/Sys.pyx":80
+  /* "PETSc/Sys.pyx":68
  * 
  *     @classmethod
  *     def Print(cls, *args, **kargs):             # <<<<<<<<<<<<<<
@@ -54263,7 +59287,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_12Print(CYTHON_UNUSED PyTypeObje
   return __pyx_r;
 }
 
-/* "PETSc/Sys.pyx":97
+/* "PETSc/Sys.pyx":85
  * 
  *     @classmethod
  *     def syncPrint(cls, *args, **kargs):             # <<<<<<<<<<<<<<
@@ -54315,65 +59339,65 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_14syncPrint(CYTHON_UNUSED PyType
   __Pyx_RefNannySetupContext("syncPrint", 0);
   __Pyx_INCREF(__pyx_v_args);
 
-  /* "PETSc/Sys.pyx":98
+  /* "PETSc/Sys.pyx":86
  *     @classmethod
  *     def syncPrint(cls, *args, **kargs):
  *         cdef object comm = kargs.get('comm', None)             # <<<<<<<<<<<<<<
  *         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_ERR(25, 98, __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, 86, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_comm = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/Sys.pyx":99
+  /* "PETSc/Sys.pyx":87
  *     def syncPrint(cls, *args, **kargs):
  *         cdef object comm = kargs.get('comm', None)
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         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_ERR(25, 99, __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, 87, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_2;
 
-  /* "PETSc/Sys.pyx":100
+  /* "PETSc/Sys.pyx":88
  *         cdef object comm = kargs.get('comm', None)
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef object sep = kargs.get('sep', ' ')             # <<<<<<<<<<<<<<
  *         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_ERR(25, 100, __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, 88, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_sep = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/Sys.pyx":101
+  /* "PETSc/Sys.pyx":89
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef object sep = kargs.get('sep', ' ')
  *         cdef object end = kargs.get('end', '\n')             # <<<<<<<<<<<<<<
  *         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_ERR(25, 101, __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, 89, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_end = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/Sys.pyx":102
+  /* "PETSc/Sys.pyx":90
  *         cdef object sep = kargs.get('sep', ' ')
  *         cdef object end = kargs.get('end', '\n')
  *         cdef object flush = kargs.get('flush', False)             # <<<<<<<<<<<<<<
  *         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_ERR(25, 102, __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, 90, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_flush = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/Sys.pyx":103
+  /* "PETSc/Sys.pyx":91
  *         cdef object end = kargs.get('end', '\n')
  *         cdef object flush = kargs.get('flush', False)
  *         if not args: args = ('',)             # <<<<<<<<<<<<<<
@@ -54383,19 +59407,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_14syncPrint(CYTHON_UNUSED PyType
   __pyx_t_3 = (__pyx_v_args != Py_None) && (PyTuple_GET_SIZE(__pyx_v_args) != 0);
   __pyx_t_4 = ((!__pyx_t_3) != 0);
   if (__pyx_t_4) {
-    __Pyx_INCREF(__pyx_tuple__37);
-    __Pyx_DECREF_SET(__pyx_v_args, __pyx_tuple__37);
+    __Pyx_INCREF(__pyx_tuple__40);
+    __Pyx_DECREF_SET(__pyx_v_args, __pyx_tuple__40);
   }
 
-  /* "PETSc/Sys.pyx":104
+  /* "PETSc/Sys.pyx":92
  *         cdef object flush = kargs.get('flush', False)
  *         if not args: args = ('',)
  *         format = ['%s', sep] * len(args)             # <<<<<<<<<<<<<<
  *         format[-1] = end
  *         message = ''.join(format) % args
  */
-  __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_t_5 = PyTuple_GET_SIZE(__pyx_v_args); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(25, 92, __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, 92, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   { Py_ssize_t __pyx_temp;
     for (__pyx_temp=0; __pyx_temp < __pyx_t_5; __pyx_temp++) {
@@ -54410,31 +59434,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_14syncPrint(CYTHON_UNUSED PyType
   __pyx_v_format = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Sys.pyx":105
+  /* "PETSc/Sys.pyx":93
  *         if not args: args = ('',)
  *         format = ['%s', sep] * len(args)
  *         format[-1] = end             # <<<<<<<<<<<<<<
  *         message = ''.join(format) % args
  *         cdef const_char *m = NULL
  */
-  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)
+  if (unlikely(__Pyx_SetItemInt(__pyx_v_format, -1L, __pyx_v_end, long, 1, __Pyx_PyInt_From_long, 1, 1, 1) < 0)) __PYX_ERR(25, 93, __pyx_L1_error)
 
-  /* "PETSc/Sys.pyx":106
+  /* "PETSc/Sys.pyx":94
  *         format = ['%s', sep] * len(args)
  *         format[-1] = end
  *         message = ''.join(format) % args             # <<<<<<<<<<<<<<
  *         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_ERR(25, 106, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyString_Join(__pyx_kp_s__10, __pyx_v_format); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 94, __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_ERR(25, 106, __pyx_L1_error)
+  __pyx_t_6 = PyNumber_Remainder(__pyx_t_1, __pyx_v_args); if (unlikely(!__pyx_t_6)) __PYX_ERR(25, 94, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_message = __pyx_t_6;
   __pyx_t_6 = 0;
 
-  /* "PETSc/Sys.pyx":107
+  /* "PETSc/Sys.pyx":95
  *         format[-1] = end
  *         message = ''.join(format) % args
  *         cdef const_char *m = NULL             # <<<<<<<<<<<<<<
@@ -54443,40 +59467,40 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_14syncPrint(CYTHON_UNUSED PyType
  */
   __pyx_v_m = NULL;
 
-  /* "PETSc/Sys.pyx":108
+  /* "PETSc/Sys.pyx":96
  *         message = ''.join(format) % args
  *         cdef const_char *m = NULL
  *         message = str2bytes(message, &m)             # <<<<<<<<<<<<<<
  *         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_ERR(25, 108, __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, 96, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_DECREF_SET(__pyx_v_message, __pyx_t_6);
   __pyx_t_6 = 0;
 
-  /* "PETSc/Sys.pyx":109
+  /* "PETSc/Sys.pyx":97
  *         cdef const_char *m = NULL
  *         message = str2bytes(message, &m)
  *         CHKERR( PetscSynchronizedPrintf(ccomm, m) )             # <<<<<<<<<<<<<<
  *         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_ERR(25, 109, __pyx_L1_error)
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSynchronizedPrintf(__pyx_v_ccomm, __pyx_v_m)); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(25, 97, __pyx_L1_error)
 
-  /* "PETSc/Sys.pyx":110
+  /* "PETSc/Sys.pyx":98
  *         message = str2bytes(message, &m)
  *         CHKERR( PetscSynchronizedPrintf(ccomm, m) )
  *         if flush: CHKERR( PetscSynchronizedFlush(ccomm, PETSC_STDOUT) )             # <<<<<<<<<<<<<<
  * 
  *     @classmethod
  */
-  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_flush); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(25, 110, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_flush); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(25, 98, __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_ERR(25, 110, __pyx_L1_error)
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSynchronizedFlush(__pyx_v_ccomm, PETSC_STDOUT)); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(25, 98, __pyx_L1_error)
   }
 
-  /* "PETSc/Sys.pyx":97
+  /* "PETSc/Sys.pyx":85
  * 
  *     @classmethod
  *     def syncPrint(cls, *args, **kargs):             # <<<<<<<<<<<<<<
@@ -54505,7 +59529,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_14syncPrint(CYTHON_UNUSED PyType
   return __pyx_r;
 }
 
-/* "PETSc/Sys.pyx":113
+/* "PETSc/Sys.pyx":101
  * 
  *     @classmethod
  *     def syncFlush(cls, comm=None):             # <<<<<<<<<<<<<<
@@ -54530,6 +59554,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_17syncFlush(PyObject *__pyx_v_cl
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -54542,11 +59567,12 @@ 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_ERR(25, 113, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "syncFlush") < 0)) __PYX_ERR(25, 101, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -54555,7 +59581,7 @@ 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_ERR(25, 113, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("syncFlush", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 101, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Sys.syncFlush", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -54576,26 +59602,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_16syncFlush(CYTHON_UNUSED PyType
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("syncFlush", 0);
 
-  /* "PETSc/Sys.pyx":114
+  /* "PETSc/Sys.pyx":102
  *     @classmethod
  *     def syncFlush(cls, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         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_ERR(25, 114, __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, 102, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Sys.pyx":115
+  /* "PETSc/Sys.pyx":103
  *     def syncFlush(cls, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         CHKERR( PetscSynchronizedFlush(ccomm, PETSC_STDOUT) )             # <<<<<<<<<<<<<<
  * 
  *     # --- xxx ---
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSynchronizedFlush(__pyx_v_ccomm, PETSC_STDOUT)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(25, 103, __pyx_L1_error)
 
-  /* "PETSc/Sys.pyx":113
+  /* "PETSc/Sys.pyx":101
  * 
  *     @classmethod
  *     def syncFlush(cls, comm=None):             # <<<<<<<<<<<<<<
@@ -54615,7 +59641,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_16syncFlush(CYTHON_UNUSED PyType
   return __pyx_r;
 }
 
-/* "PETSc/Sys.pyx":120
+/* "PETSc/Sys.pyx":108
  * 
  *     @classmethod
  *     def splitOwnership(cls, size, bsize=None, comm=None):             # <<<<<<<<<<<<<<
@@ -54643,8 +59669,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_19splitOwnership(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -54653,11 +59682,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_19splitOwnership(PyObject *__pyx
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_bsize);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -54665,12 +59696,14 @@ 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_ERR(25, 120, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "splitOwnership") < 0)) __PYX_ERR(25, 108, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -54682,7 +59715,7 @@ 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_ERR(25, 120, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("splitOwnership", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 108, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Sys.splitOwnership", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -54710,17 +59743,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_18splitOwnership(CYTHON_UNUSED P
   PyObject *__pyx_t_6 = NULL;
   __Pyx_RefNannySetupContext("splitOwnership", 0);
 
-  /* "PETSc/Sys.pyx":121
+  /* "PETSc/Sys.pyx":109
  *     @classmethod
  *     def splitOwnership(cls, size, bsize=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         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_ERR(25, 121, __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, 109, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Sys.pyx":122
+  /* "PETSc/Sys.pyx":110
  *     def splitOwnership(cls, size, bsize=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscInt bs=0, n=0, N=0             # <<<<<<<<<<<<<<
@@ -54731,16 +59764,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_18splitOwnership(CYTHON_UNUSED P
   __pyx_v_n = 0;
   __pyx_v_N = 0;
 
-  /* "PETSc/Sys.pyx":123
+  /* "PETSc/Sys.pyx":111
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscInt bs=0, n=0, N=0
  *         Sys_Sizes(size, bsize, &bs, &n, &N)             # <<<<<<<<<<<<<<
  *         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_ERR(25, 123, __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 == ((int)-1))) __PYX_ERR(25, 111, __pyx_L1_error)
 
-  /* "PETSc/Sys.pyx":124
+  /* "PETSc/Sys.pyx":112
  *         cdef PetscInt bs=0, n=0, N=0
  *         Sys_Sizes(size, bsize, &bs, &n, &N)
  *         if bs == PETSC_DECIDE: bs = 1             # <<<<<<<<<<<<<<
@@ -54752,7 +59785,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_18splitOwnership(CYTHON_UNUSED P
     __pyx_v_bs = 1;
   }
 
-  /* "PETSc/Sys.pyx":125
+  /* "PETSc/Sys.pyx":113
  *         Sys_Sizes(size, bsize, &bs, &n, &N)
  *         if bs == PETSC_DECIDE: bs = 1
  *         if n > 0: n = n // bs             # <<<<<<<<<<<<<<
@@ -54764,7 +59797,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_18splitOwnership(CYTHON_UNUSED P
     __pyx_v_n = (__pyx_v_n / __pyx_v_bs);
   }
 
-  /* "PETSc/Sys.pyx":126
+  /* "PETSc/Sys.pyx":114
  *         if bs == PETSC_DECIDE: bs = 1
  *         if n > 0: n = n // bs
  *         if N > 0: N = N // bs             # <<<<<<<<<<<<<<
@@ -54776,16 +59809,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_18splitOwnership(CYTHON_UNUSED P
     __pyx_v_N = (__pyx_v_N / __pyx_v_bs);
   }
 
-  /* "PETSc/Sys.pyx":127
+  /* "PETSc/Sys.pyx":115
  *         if n > 0: n = n // bs
  *         if N > 0: N = N // bs
  *         CHKERR( PetscSplitOwnership(ccomm, &n, &N) )             # <<<<<<<<<<<<<<
  *         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_ERR(25, 127, __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 == ((int)-1))) __PYX_ERR(25, 115, __pyx_L1_error)
 
-  /* "PETSc/Sys.pyx":128
+  /* "PETSc/Sys.pyx":116
  *         if N > 0: N = N // bs
  *         CHKERR( PetscSplitOwnership(ccomm, &n, &N) )
  *         n = n * bs             # <<<<<<<<<<<<<<
@@ -54794,7 +59827,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_18splitOwnership(CYTHON_UNUSED P
  */
   __pyx_v_n = (__pyx_v_n * __pyx_v_bs);
 
-  /* "PETSc/Sys.pyx":129
+  /* "PETSc/Sys.pyx":117
  *         CHKERR( PetscSplitOwnership(ccomm, &n, &N) )
  *         n = n * bs
  *         N = N * bs             # <<<<<<<<<<<<<<
@@ -54803,7 +59836,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_18splitOwnership(CYTHON_UNUSED P
  */
   __pyx_v_N = (__pyx_v_N * __pyx_v_bs);
 
-  /* "PETSc/Sys.pyx":130
+  /* "PETSc/Sys.pyx":118
  *         n = n * bs
  *         N = N * bs
  *         return (toInt(n), toInt(N))             # <<<<<<<<<<<<<<
@@ -54811,11 +59844,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_ERR(25, 130, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_4)) __PYX_ERR(25, 118, __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_ERR(25, 130, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_N); if (unlikely(!__pyx_t_5)) __PYX_ERR(25, 118, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(25, 130, __pyx_L1_error)
+  __pyx_t_6 = PyTuple_New(2); if (unlikely(!__pyx_t_6)) __PYX_ERR(25, 118, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_4);
   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_4);
@@ -54827,7 +59860,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_18splitOwnership(CYTHON_UNUSED P
   __pyx_t_6 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Sys.pyx":120
+  /* "PETSc/Sys.pyx":108
  * 
  *     @classmethod
  *     def splitOwnership(cls, size, bsize=None, comm=None):             # <<<<<<<<<<<<<<
@@ -54848,7 +59881,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_18splitOwnership(CYTHON_UNUSED P
   return __pyx_r;
 }
 
-/* "PETSc/Sys.pyx":133
+/* "PETSc/Sys.pyx":121
  * 
  *     @classmethod
  *     def sleep(cls, seconds=1):             # <<<<<<<<<<<<<<
@@ -54873,6 +59906,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_21sleep(PyObject *__pyx_v_cls, P
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -54885,11 +59919,12 @@ 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_ERR(25, 133, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "sleep") < 0)) __PYX_ERR(25, 121, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -54898,7 +59933,7 @@ 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_ERR(25, 133, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("sleep", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 121, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Sys.sleep", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -54918,26 +59953,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_20sleep(CYTHON_UNUSED PyTypeObje
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("sleep", 0);
 
-  /* "PETSc/Sys.pyx":134
+  /* "PETSc/Sys.pyx":122
  *     @classmethod
  *     def sleep(cls, seconds=1):
  *         cdef int s = seconds             # <<<<<<<<<<<<<<
  *         CHKERR( PetscSleep(s) )
  * 
  */
-  __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_t_1 = __Pyx_PyInt_As_int(__pyx_v_seconds); if (unlikely((__pyx_t_1 == (int)-1) && PyErr_Occurred())) __PYX_ERR(25, 122, __pyx_L1_error)
   __pyx_v_s = __pyx_t_1;
 
-  /* "PETSc/Sys.pyx":135
+  /* "PETSc/Sys.pyx":123
  *     def sleep(cls, seconds=1):
  *         cdef int s = seconds
  *         CHKERR( PetscSleep(s) )             # <<<<<<<<<<<<<<
  * 
  *     # --- xxx ---
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSleep(__pyx_v_s)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(25, 123, __pyx_L1_error)
 
-  /* "PETSc/Sys.pyx":133
+  /* "PETSc/Sys.pyx":121
  * 
  *     @classmethod
  *     def sleep(cls, seconds=1):             # <<<<<<<<<<<<<<
@@ -54957,7 +59992,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_20sleep(CYTHON_UNUSED PyTypeObje
   return __pyx_r;
 }
 
-/* "PETSc/Sys.pyx":140
+/* "PETSc/Sys.pyx":128
  * 
  *     @classmethod
  *     def pushErrorHandler(cls, errhandler):             # <<<<<<<<<<<<<<
@@ -54981,6 +60016,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_23pushErrorHandler(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -54991,7 +60027,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_ERR(25, 140, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pushErrorHandler") < 0)) __PYX_ERR(25, 128, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -55002,7 +60038,7 @@ 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_ERR(25, 140, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("pushErrorHandler", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 128, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Sys.pushErrorHandler", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -55025,7 +60061,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("pushErrorHandler", 0);
 
-  /* "PETSc/Sys.pyx":141
+  /* "PETSc/Sys.pyx":129
  *     @classmethod
  *     def pushErrorHandler(cls, errhandler):
  *         cdef PetscErrorHandlerFunction handler = NULL             # <<<<<<<<<<<<<<
@@ -55034,17 +60070,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
  */
   __pyx_v_handler = NULL;
 
-  /* "PETSc/Sys.pyx":142
+  /* "PETSc/Sys.pyx":130
  *     def pushErrorHandler(cls, errhandler):
  *         cdef PetscErrorHandlerFunction handler = NULL
  *         if errhandler == "python":             # <<<<<<<<<<<<<<
  *             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_ERR(25, 142, __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, 130, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "PETSc/Sys.pyx":143
+    /* "PETSc/Sys.pyx":131
  *         cdef PetscErrorHandlerFunction handler = NULL
  *         if errhandler == "python":
  *             handler = <PetscErrorHandlerFunction> \             # <<<<<<<<<<<<<<
@@ -55053,7 +60089,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
  */
     __pyx_v_handler = ((PetscErrorHandlerFunction)__pyx_f_8petsc4py_5PETSc_PetscPythonErrorHandler);
 
-    /* "PETSc/Sys.pyx":142
+    /* "PETSc/Sys.pyx":130
  *     def pushErrorHandler(cls, errhandler):
  *         cdef PetscErrorHandlerFunction handler = NULL
  *         if errhandler == "python":             # <<<<<<<<<<<<<<
@@ -55063,17 +60099,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
     goto __pyx_L3;
   }
 
-  /* "PETSc/Sys.pyx":145
+  /* "PETSc/Sys.pyx":133
  *             handler = <PetscErrorHandlerFunction> \
  *                       PetscPythonErrorHandler
  *         elif errhandler == "debugger":             # <<<<<<<<<<<<<<
  *             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_ERR(25, 145, __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, 133, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "PETSc/Sys.pyx":146
+    /* "PETSc/Sys.pyx":134
  *                       PetscPythonErrorHandler
  *         elif errhandler == "debugger":
  *             handler = PetscAttachDebuggerErrorHandler             # <<<<<<<<<<<<<<
@@ -55082,7 +60118,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
  */
     __pyx_v_handler = PetscAttachDebuggerErrorHandler;
 
-    /* "PETSc/Sys.pyx":145
+    /* "PETSc/Sys.pyx":133
  *             handler = <PetscErrorHandlerFunction> \
  *                       PetscPythonErrorHandler
  *         elif errhandler == "debugger":             # <<<<<<<<<<<<<<
@@ -55092,17 +60128,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
     goto __pyx_L3;
   }
 
-  /* "PETSc/Sys.pyx":147
+  /* "PETSc/Sys.pyx":135
  *         elif errhandler == "debugger":
  *             handler = PetscAttachDebuggerErrorHandler
  *         elif errhandler == "emacs":             # <<<<<<<<<<<<<<
  *             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_ERR(25, 147, __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, 135, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "PETSc/Sys.pyx":148
+    /* "PETSc/Sys.pyx":136
  *             handler = PetscAttachDebuggerErrorHandler
  *         elif errhandler == "emacs":
  *             handler = PetscEmacsClientErrorHandler             # <<<<<<<<<<<<<<
@@ -55111,7 +60147,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
  */
     __pyx_v_handler = PetscEmacsClientErrorHandler;
 
-    /* "PETSc/Sys.pyx":147
+    /* "PETSc/Sys.pyx":135
  *         elif errhandler == "debugger":
  *             handler = PetscAttachDebuggerErrorHandler
  *         elif errhandler == "emacs":             # <<<<<<<<<<<<<<
@@ -55121,17 +60157,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
     goto __pyx_L3;
   }
 
-  /* "PETSc/Sys.pyx":149
+  /* "PETSc/Sys.pyx":137
  *         elif errhandler == "emacs":
  *             handler = PetscEmacsClientErrorHandler
  *         elif errhandler == "traceback":             # <<<<<<<<<<<<<<
  *             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_ERR(25, 149, __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, 137, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "PETSc/Sys.pyx":150
+    /* "PETSc/Sys.pyx":138
  *             handler = PetscEmacsClientErrorHandler
  *         elif errhandler == "traceback":
  *             handler = PetscTraceBackErrorHandler             # <<<<<<<<<<<<<<
@@ -55140,7 +60176,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
  */
     __pyx_v_handler = PetscTraceBackErrorHandler;
 
-    /* "PETSc/Sys.pyx":149
+    /* "PETSc/Sys.pyx":137
  *         elif errhandler == "emacs":
  *             handler = PetscEmacsClientErrorHandler
  *         elif errhandler == "traceback":             # <<<<<<<<<<<<<<
@@ -55150,17 +60186,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
     goto __pyx_L3;
   }
 
-  /* "PETSc/Sys.pyx":151
+  /* "PETSc/Sys.pyx":139
  *         elif errhandler == "traceback":
  *             handler = PetscTraceBackErrorHandler
  *         elif errhandler == "ignore":             # <<<<<<<<<<<<<<
  *             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_ERR(25, 151, __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, 139, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "PETSc/Sys.pyx":152
+    /* "PETSc/Sys.pyx":140
  *             handler = PetscTraceBackErrorHandler
  *         elif errhandler == "ignore":
  *             handler = PetscIgnoreErrorHandler             # <<<<<<<<<<<<<<
@@ -55169,7 +60205,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
  */
     __pyx_v_handler = PetscIgnoreErrorHandler;
 
-    /* "PETSc/Sys.pyx":151
+    /* "PETSc/Sys.pyx":139
  *         elif errhandler == "traceback":
  *             handler = PetscTraceBackErrorHandler
  *         elif errhandler == "ignore":             # <<<<<<<<<<<<<<
@@ -55179,17 +60215,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
     goto __pyx_L3;
   }
 
-  /* "PETSc/Sys.pyx":153
+  /* "PETSc/Sys.pyx":141
  *         elif errhandler == "ignore":
  *             handler = PetscIgnoreErrorHandler
  *         elif errhandler == "mpiabort":             # <<<<<<<<<<<<<<
  *             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_ERR(25, 153, __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, 141, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "PETSc/Sys.pyx":154
+    /* "PETSc/Sys.pyx":142
  *             handler = PetscIgnoreErrorHandler
  *         elif errhandler == "mpiabort":
  *             handler = PetscMPIAbortErrorHandler             # <<<<<<<<<<<<<<
@@ -55198,7 +60234,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
  */
     __pyx_v_handler = PetscMPIAbortErrorHandler;
 
-    /* "PETSc/Sys.pyx":153
+    /* "PETSc/Sys.pyx":141
  *         elif errhandler == "ignore":
  *             handler = PetscIgnoreErrorHandler
  *         elif errhandler == "mpiabort":             # <<<<<<<<<<<<<<
@@ -55208,17 +60244,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
     goto __pyx_L3;
   }
 
-  /* "PETSc/Sys.pyx":155
+  /* "PETSc/Sys.pyx":143
  *         elif errhandler == "mpiabort":
  *             handler = PetscMPIAbortErrorHandler
  *         elif errhandler == "abort":             # <<<<<<<<<<<<<<
  *             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_ERR(25, 155, __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, 143, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "PETSc/Sys.pyx":156
+    /* "PETSc/Sys.pyx":144
  *             handler = PetscMPIAbortErrorHandler
  *         elif errhandler == "abort":
  *             handler = PetscAbortErrorHandler             # <<<<<<<<<<<<<<
@@ -55227,7 +60263,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
  */
     __pyx_v_handler = PetscAbortErrorHandler;
 
-    /* "PETSc/Sys.pyx":155
+    /* "PETSc/Sys.pyx":143
  *         elif errhandler == "mpiabort":
  *             handler = PetscMPIAbortErrorHandler
  *         elif errhandler == "abort":             # <<<<<<<<<<<<<<
@@ -55237,7 +60273,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
     goto __pyx_L3;
   }
 
-  /* "PETSc/Sys.pyx":158
+  /* "PETSc/Sys.pyx":146
  *             handler = PetscAbortErrorHandler
  *         else:
  *             raise ValueError(             # <<<<<<<<<<<<<<
@@ -55246,47 +60282,47 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
  */
   /*else*/ {
 
-    /* "PETSc/Sys.pyx":159
+    /* "PETSc/Sys.pyx":147
  *         else:
  *             raise ValueError(
  *                 "unknown error handler: %s" % errhandler)             # <<<<<<<<<<<<<<
  *         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_ERR(25, 159, __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, 147, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
 
-    /* "PETSc/Sys.pyx":158
+    /* "PETSc/Sys.pyx":146
  *             handler = PetscAbortErrorHandler
  *         else:
  *             raise ValueError(             # <<<<<<<<<<<<<<
  *                 "unknown error handler: %s" % errhandler)
  *         CHKERR( PetscPushErrorHandler(handler, NULL) )
  */
-    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 158, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 146, __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_ERR(25, 158, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(25, 146, __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_ERR(25, 158, __pyx_L1_error)
+    __PYX_ERR(25, 146, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/Sys.pyx":160
+  /* "PETSc/Sys.pyx":148
  *             raise ValueError(
  *                 "unknown error handler: %s" % errhandler)
  *         CHKERR( PetscPushErrorHandler(handler, NULL) )             # <<<<<<<<<<<<<<
  * 
  * 
  */
-  __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)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPushErrorHandler(__pyx_v_handler, NULL)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(25, 148, __pyx_L1_error)
 
-  /* "PETSc/Sys.pyx":140
+  /* "PETSc/Sys.pyx":128
  * 
  *     @classmethod
  *     def pushErrorHandler(cls, errhandler):             # <<<<<<<<<<<<<<
@@ -55308,7 +60344,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_22pushErrorHandler(CYTHON_UNUSED
   return __pyx_r;
 }
 
-/* "PETSc/Sys.pyx":164
+/* "PETSc/Sys.pyx":152
  * 
  *     @classmethod
  *     def popErrorHandler(cls):             # <<<<<<<<<<<<<<
@@ -55339,16 +60375,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_24popErrorHandler(CYTHON_UNUSED
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("popErrorHandler", 0);
 
-  /* "PETSc/Sys.pyx":165
+  /* "PETSc/Sys.pyx":153
  *     @classmethod
  *     def popErrorHandler(cls):
  *         CHKERR( PetscPopErrorHandler() )             # <<<<<<<<<<<<<<
  * 
  *     @classmethod
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPopErrorHandler()); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(25, 165, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPopErrorHandler()); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(25, 153, __pyx_L1_error)
 
-  /* "PETSc/Sys.pyx":164
+  /* "PETSc/Sys.pyx":152
  * 
  *     @classmethod
  *     def popErrorHandler(cls):             # <<<<<<<<<<<<<<
@@ -55368,7 +60404,67 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_24popErrorHandler(CYTHON_UNUSED
   return __pyx_r;
 }
 
-/* "PETSc/Sys.pyx":168
+/* "PETSc/Sys.pyx":156
+ * 
+ *     @classmethod
+ *     def popSignalHandler(cls):             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscPopSignalHandler() )
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_27popSignalHandler(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Sys_26popSignalHandler[] = "Sys.popSignalHandler(type cls)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_27popSignalHandler(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("popSignalHandler (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("popSignalHandler", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "popSignalHandler", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Sys_26popSignalHandler(((PyTypeObject*)__pyx_v_cls));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_26popSignalHandler(CYTHON_UNUSED PyTypeObject *__pyx_v_cls) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("popSignalHandler", 0);
+
+  /* "PETSc/Sys.pyx":157
+ *     @classmethod
+ *     def popSignalHandler(cls):
+ *         CHKERR( PetscPopSignalHandler() )             # <<<<<<<<<<<<<<
+ * 
+ *     @classmethod
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPopSignalHandler()); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(25, 157, __pyx_L1_error)
+
+  /* "PETSc/Sys.pyx":156
+ * 
+ *     @classmethod
+ *     def popSignalHandler(cls):             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscPopSignalHandler() )
+ * 
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Sys.popSignalHandler", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Sys.pyx":160
  * 
  *     @classmethod
  *     def infoAllow(cls, flag):             # <<<<<<<<<<<<<<
@@ -55377,9 +60473,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_24popErrorHandler(CYTHON_UNUSED
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_29infoAllow(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Sys_28infoAllow[] = "Sys.infoAllow(type cls, flag)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_29infoAllow(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_flag = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -55392,6 +60488,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_27infoAllow(PyObject *__pyx_v_cl
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -55402,7 +60499,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_27infoAllow(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, "infoAllow") < 0)) __PYX_ERR(25, 168, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "infoAllow") < 0)) __PYX_ERR(25, 160, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -55413,20 +60510,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_27infoAllow(PyObject *__pyx_v_cl
   }
   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_RaiseArgtupleInvalid("infoAllow", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 160, __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);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Sys_28infoAllow(((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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_28infoAllow(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_flag) {
   PetscBool __pyx_v_tval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -55434,7 +60531,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_26infoAllow(CYTHON_UNUSED PyType
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("infoAllow", 0);
 
-  /* "PETSc/Sys.pyx":169
+  /* "PETSc/Sys.pyx":161
  *     @classmethod
  *     def infoAllow(cls, flag):
  *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -55443,28 +60540,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_26infoAllow(CYTHON_UNUSED PyType
  */
   __pyx_v_tval = PETSC_FALSE;
 
-  /* "PETSc/Sys.pyx":170
+  /* "PETSc/Sys.pyx":162
  *     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)
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_flag); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(25, 162, __pyx_L1_error)
   if (__pyx_t_1) {
     __pyx_v_tval = PETSC_TRUE;
   }
 
-  /* "PETSc/Sys.pyx":171
+  /* "PETSc/Sys.pyx":163
  *         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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscInfoAllow(__pyx_v_tval, NULL)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(25, 163, __pyx_L1_error)
 
-  /* "PETSc/Sys.pyx":168
+  /* "PETSc/Sys.pyx":160
  * 
  *     @classmethod
  *     def infoAllow(cls, flag):             # <<<<<<<<<<<<<<
@@ -55484,7 +60581,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_26infoAllow(CYTHON_UNUSED PyType
   return __pyx_r;
 }
 
-/* "PETSc/Sys.pyx":174
+/* "PETSc/Sys.pyx":166
  * 
  *     @classmethod
  *     def registerCitation(cls, citation):             # <<<<<<<<<<<<<<
@@ -55493,9 +60590,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_26infoAllow(CYTHON_UNUSED PyType
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_31registerCitation(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Sys_30registerCitation[] = "Sys.registerCitation(type cls, citation)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_31registerCitation(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_citation = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -55508,6 +60605,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_29registerCitation(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -55518,7 +60616,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_29registerCitation(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, "registerCitation") < 0)) __PYX_ERR(25, 174, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "registerCitation") < 0)) __PYX_ERR(25, 166, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -55529,22 +60627,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Sys_29registerCitation(PyObject *__p
   }
   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_RaiseArgtupleInvalid("registerCitation", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(25, 166, __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);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Sys_30registerCitation(((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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_30registerCitation(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_citation) {
   const char *__pyx_v_cit;
-  PetscBool __pyx_v_set;
+  PetscBool __pyx_v_flag;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -55554,74 +60652,78 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_28registerCitation(CYTHON_UNUSED
   __Pyx_RefNannySetupContext("registerCitation", 0);
   __Pyx_INCREF(__pyx_v_citation);
 
-  /* "PETSc/Sys.pyx":175
+  /* "PETSc/Sys.pyx":167
  *     @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_1 = __Pyx_PyObject_IsTrue(__pyx_v_citation); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(25, 167, __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_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__41, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 167, __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)
+    __PYX_ERR(25, 167, __pyx_L1_error)
   }
 
-  /* "PETSc/Sys.pyx":176
+  /* "PETSc/Sys.pyx":168
  *     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)
+ *         cdef PetscBool flag = get_citation(citation)
  */
   __pyx_v_cit = NULL;
 
-  /* "PETSc/Sys.pyx":177
+  /* "PETSc/Sys.pyx":169
  *         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) )
+ *         cdef PetscBool flag = get_citation(citation)
+ *         CHKERR( PetscCitationsRegister(cit, &flag) )
  */
-  __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_t_3 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_citation, (&__pyx_v_cit)); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 169, __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
+  /* "PETSc/Sys.pyx":170
  *         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 PetscBool flag = get_citation(citation)             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscCitationsRegister(cit, &flag) )
+ *         set_citation(citation, toBool(flag))
  */
-  __pyx_v_set = __pyx_f_8petsc4py_5PETSc_get_citation(__pyx_v_citation);
+  __pyx_v_flag = __pyx_f_8petsc4py_5PETSc_get_citation(__pyx_v_citation);
 
-  /* "PETSc/Sys.pyx":179
+  /* "PETSc/Sys.pyx":171
  *         citation = str2bytes(citation, &cit)
- *         cdef PetscBool set = get_citation(citation)
- *         CHKERR( PetscCitationsRegister(cit, &set) )             # <<<<<<<<<<<<<<
- *         set_citation(citation, <bint>set)
+ *         cdef PetscBool flag = get_citation(citation)
+ *         CHKERR( PetscCitationsRegister(cit, &flag) )             # <<<<<<<<<<<<<<
+ *         set_citation(citation, toBool(flag))
  * 
  */
-  __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)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscCitationsRegister(__pyx_v_cit, (&__pyx_v_flag))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(25, 171, __pyx_L1_error)
 
-  /* "PETSc/Sys.pyx":180
- *         cdef PetscBool set = get_citation(citation)
- *         CHKERR( PetscCitationsRegister(cit, &set) )
- *         set_citation(citation, <bint>set)             # <<<<<<<<<<<<<<
+  /* "PETSc/Sys.pyx":172
+ *         cdef PetscBool flag = get_citation(citation)
+ *         CHKERR( PetscCitationsRegister(cit, &flag) )
+ *         set_citation(citation, toBool(flag))             # <<<<<<<<<<<<<<
  * 
  * 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_t_3 = __pyx_f_8petsc4py_5PETSc_toBool(__pyx_v_flag); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 172, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(25, 172, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_set_citation(__pyx_v_citation, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 172, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/Sys.pyx":174
+  /* "PETSc/Sys.pyx":166
  * 
  *     @classmethod
  *     def registerCitation(cls, citation):             # <<<<<<<<<<<<<<
@@ -55643,7 +60745,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Sys_28registerCitation(CYTHON_UNUSED
   return __pyx_r;
 }
 
-/* "PETSc/Sys.pyx":184
+/* "PETSc/Sys.pyx":176
  * cdef dict citations_registry = { }
  * 
  * cdef PetscBool get_citation(object citation):             # <<<<<<<<<<<<<<
@@ -55660,7 +60762,7 @@ static PetscBool __pyx_f_8petsc4py_5PETSc_get_citation(PyObject *__pyx_v_citatio
   PetscBool __pyx_t_3;
   __Pyx_RefNannySetupContext("get_citation", 0);
 
-  /* "PETSc/Sys.pyx":185
+  /* "PETSc/Sys.pyx":177
  * 
  * cdef PetscBool get_citation(object citation):
  *     cdef bint is_set = citations_registry.get(citation)             # <<<<<<<<<<<<<<
@@ -55668,16 +60770,16 @@ static PetscBool __pyx_f_8petsc4py_5PETSc_get_citation(PyObject *__pyx_v_citatio
  * 
  */
   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)
+    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
+    __PYX_ERR(25, 177, __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_t_1 = __Pyx_PyDict_GetItemDefault(__pyx_v_8petsc4py_5PETSc_citations_registry, __pyx_v_citation, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 177, __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_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely((__pyx_t_2 == (int)-1) && PyErr_Occurred())) __PYX_ERR(25, 177, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_is_set = __pyx_t_2;
 
-  /* "PETSc/Sys.pyx":186
+  /* "PETSc/Sys.pyx":178
  * cdef PetscBool get_citation(object citation):
  *     cdef bint is_set = citations_registry.get(citation)
  *     return PETSC_TRUE if is_set else PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -55692,7 +60794,7 @@ static PetscBool __pyx_f_8petsc4py_5PETSc_get_citation(PyObject *__pyx_v_citatio
   __pyx_r = __pyx_t_3;
   goto __pyx_L0;
 
-  /* "PETSc/Sys.pyx":184
+  /* "PETSc/Sys.pyx":176
  * cdef dict citations_registry = { }
  * 
  * cdef PetscBool get_citation(object citation):             # <<<<<<<<<<<<<<
@@ -55703,14 +60805,14 @@ static PetscBool __pyx_f_8petsc4py_5PETSc_get_citation(PyObject *__pyx_v_citatio
   /* 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_WriteUnraisable("petsc4py.PETSc.get_citation", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
   __pyx_r = (PetscBool) 0;
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/Sys.pyx":188
+/* "PETSc/Sys.pyx":180
  *     return PETSC_TRUE if is_set else PETSC_FALSE
  * 
  * cdef set_citation(object citation, bint is_set):             # <<<<<<<<<<<<<<
@@ -55724,23 +60826,23 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_set_citation(PyObject *__pyx_v_citatio
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("set_citation", 0);
 
-  /* "PETSc/Sys.pyx":189
+  /* "PETSc/Sys.pyx":181
  * 
  * 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_t_1 = __Pyx_PyBool_FromLong(__pyx_v_is_set); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 181, __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)
+    __PYX_ERR(25, 181, __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)
+  if (unlikely(PyDict_SetItem(__pyx_v_8petsc4py_5PETSc_citations_registry, __pyx_v_citation, __pyx_t_1) < 0)) __PYX_ERR(25, 181, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/Sys.pyx":188
+  /* "PETSc/Sys.pyx":180
  *     return PETSC_TRUE if is_set else PETSC_FALSE
  * 
  * cdef set_citation(object citation, bint is_set):             # <<<<<<<<<<<<<<
@@ -55785,6 +60887,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_1Stage(PyObject *__pyx_v_cls, Py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -55842,7 +60945,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_Stage(CYTHON_UNUSED PyTypeObject
   __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__39, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 7, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__42, 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;
@@ -55914,7 +61017,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_Stage(CYTHON_UNUSED PyTypeObject
  *         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_ERR(26, 13, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStageFindId(__pyx_v_cname, (&__pyx_v_stageid))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(26, 13, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":14
  *         if stage is not None: return stage
@@ -55933,7 +61036,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_Stage(CYTHON_UNUSED PyTypeObject
  *         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_ERR(26, 15, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStageRegister(__pyx_v_cname, (&__pyx_v_stageid))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(26, 15, __pyx_L1_error)
 
     /* "PETSc/Log.pyx":14
  *         if stage is not None: return stage
@@ -56013,6 +61116,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_3Class(PyObject *__pyx_v_cls, Py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -56070,7 +61174,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_2Class(CYTHON_UNUSED PyTypeObjec
   __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__40, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 21, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__43, 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;
@@ -56142,7 +61246,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_2Class(CYTHON_UNUSED PyTypeObjec
  *         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_ERR(26, 27, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogClassFindId(__pyx_v_cname, (&__pyx_v_classid))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(26, 27, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":28
  *         if klass is not None: return klass
@@ -56161,7 +61265,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_2Class(CYTHON_UNUSED PyTypeObjec
  *         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_ERR(26, 29, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscClassIdRegister(__pyx_v_cname, (&__pyx_v_classid))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(26, 29, __pyx_L1_error)
 
     /* "PETSc/Log.pyx":28
  *         if klass is not None: return klass
@@ -56243,7 +61347,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_5Event(PyObject *__pyx_v_cls, Py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -56252,6 +61358,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_5Event(PyObject *__pyx_v_cls, Py
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_klass);
@@ -56264,6 +61371,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_5Event(PyObject *__pyx_v_cls, Py
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -56312,7 +61420,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_4Event(CYTHON_UNUSED PyTypeObjec
   __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__41, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 35, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__44, 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;
@@ -56368,7 +61476,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_4Event(CYTHON_UNUSED PyTypeObjec
   __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_ERR(26, 40, __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;
   }
 
@@ -56407,7 +61515,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_4Event(CYTHON_UNUSED PyTypeObjec
  *         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_ERR(26, 43, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventFindId(__pyx_v_cname, (&__pyx_v_eventid))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(26, 43, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":44
  *         if event is not None: return event
@@ -56426,7 +61534,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_4Event(CYTHON_UNUSED PyTypeObjec
  *         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_ERR(26, 45, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventRegister(__pyx_v_cname, __pyx_v_classid, (&__pyx_v_eventid))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(26, 45, __pyx_L1_error)
 
     /* "PETSc/Log.pyx":44
  *         if event is not None: return event
@@ -56507,6 +61615,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_7begin(PyObject *__pyx_v_cls, Py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -56524,6 +61633,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_7begin(PyObject *__pyx_v_cls, Py
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -56561,7 +61671,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_6begin(CYTHON_UNUSED PyTypeObjec
  */
   __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_ERR(26, 51, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogAllBegin()); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(26, 51, __pyx_L1_error)
     goto __pyx_L3;
   }
 
@@ -56573,7 +61683,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_6begin(CYTHON_UNUSED PyTypeObjec
  *     @classmethod
  */
   /*else*/ {
-    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogDefaultBegin()); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(26, 52, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogDefaultBegin()); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(26, 52, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -56622,6 +61732,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_9view(PyObject *__pyx_v_cls, PyO
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -56639,6 +61750,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_9view(PyObject *__pyx_v_cls, PyO
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -56717,7 +61829,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_8view(CYTHON_UNUSED PyTypeObject
  * 
  *     @classmethod
  */
-  __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)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogView(__pyx_v_vwr)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(26, 59, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":55
  * 
@@ -56777,7 +61889,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_10destroy(CYTHON_UNUSED PyTypeOb
  * 
  *     @classmethod
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogDestroy()); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(26, 63, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogDestroy()); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(26, 63, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":62
  * 
@@ -56823,6 +61935,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_13logFlops(PyObject *__pyx_v_cls
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -56872,7 +61985,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_12logFlops(CYTHON_UNUSED PyTypeO
  *         CHKERR( PetscLogFlops(cflops) )
  * 
  */
-  __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_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
@@ -56882,7 +61995,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_12logFlops(CYTHON_UNUSED PyTypeO
  * 
  *     @classmethod
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogFlops(__pyx_v_cflops)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(26, 68, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":66
  * 
@@ -56928,6 +62041,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Log_15addFlops(PyObject *__pyx_v_cls
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -56977,7 +62091,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_14addFlops(CYTHON_UNUSED PyTypeO
  *         CHKERR( PetscLogFlops(cflops) )
  * 
  */
-  __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_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
@@ -56987,7 +62101,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_14addFlops(CYTHON_UNUSED PyTypeO
  * 
  *     @classmethod
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogFlops(__pyx_v_cflops)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(26, 73, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":71
  * 
@@ -57058,7 +62172,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_16getFlops(CYTHON_UNUSED PyTypeO
  *         return cflops
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscGetFlops((&__pyx_v_cflops))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(26, 78, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":79
  *         cdef PetscLogDouble cflops=0
@@ -57142,7 +62256,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_18getTime(CYTHON_UNUSED PyTypeOb
  *         return wctime
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscTime((&__pyx_v_wctime))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(26, 84, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":85
  *         cdef PetscLogDouble wctime=0
@@ -57226,7 +62340,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Log_20getCPUTime(CYTHON_UNUSED PyTyp
  *         return cputime
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscGetCPUTime((&__pyx_v_cputime))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(26, 90, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":91
  *         cdef PetscLogDouble cputime=0
@@ -57416,7 +62530,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_4__enter__(struct __pyx_obj
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -57571,7 +62685,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_ERR(26, 115, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStagePush(__pyx_v_self->id)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(26, 115, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":114
  *     #
@@ -57640,7 +62754,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_10pop(struct __pyx_obj_8pet
  * 
  *     #
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStagePop()); if (unlikely(__pyx_t_1 == -1)) __PYX_ERR(26, 119, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStagePop()); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(26, 119, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":117
  *         CHKERR( PetscLogStagePush(self.id) )
@@ -57711,7 +62825,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_12getName(struct __pyx_obj_
  *         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_ERR(26, 125, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStageFindName(__pyx_v_self->id, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(26, 125, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":126
  *         cdef const_char *cval = NULL
@@ -57786,7 +62900,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_4name___get__(struct __pyx_
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -57872,7 +62986,7 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogStage_4name_2__set__(struct __pyx_obj_8
  * 
  *     #
  */
-  __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_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__45, 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;
@@ -57933,7 +63047,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_14activate(struct __pyx_obj
  * 
  *     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_ERR(26, 138, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStageSetActive(__pyx_v_self->id, PETSC_TRUE)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(26, 138, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":137
  *     #
@@ -57993,7 +63107,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_16deactivate(struct __pyx_o
  * 
  *     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_ERR(26, 141, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStageSetActive(__pyx_v_self->id, PETSC_FALSE)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(26, 141, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":140
  *         CHKERR( PetscLogStageSetActive(self.id, PETSC_TRUE) )
@@ -58019,8 +63133,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_16deactivate(struct __pyx_o
  *         CHKERR( PetscLogStageSetActive(self.id, PETSC_FALSE) )
  * 
  *     def getActive(self):             # <<<<<<<<<<<<<<
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( PetscLogStageGetActive(self.id, &tval) )
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( PetscLogStageGetActive(self.id, &flag) )
  */
 
 /* Python wrapper */
@@ -58041,7 +63155,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogStage_19getActive(PyObject *__pyx
 }
 
 static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_18getActive(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self) {
-  PetscBool __pyx_v_tval;
+  PetscBool __pyx_v_flag;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -58051,30 +63165,30 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_18getActive(struct __pyx_ob
   /* "PETSc/Log.pyx":144
  * 
  *     def getActive(self):
- *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( PetscLogStageGetActive(self.id, &tval) )
- *         return <bint> tval
+ *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscLogStageGetActive(self.id, &flag) )
+ *         return toBool(flag)
  */
-  __pyx_v_tval = PETSC_FALSE;
+  __pyx_v_flag = PETSC_FALSE;
 
   /* "PETSc/Log.pyx":145
  *     def getActive(self):
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( PetscLogStageGetActive(self.id, &tval) )             # <<<<<<<<<<<<<<
- *         return <bint> tval
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( PetscLogStageGetActive(self.id, &flag) )             # <<<<<<<<<<<<<<
+ *         return toBool(flag)
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStageGetActive(__pyx_v_self->id, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(26, 145, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":146
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( PetscLogStageGetActive(self.id, &tval) )
- *         return <bint> tval             # <<<<<<<<<<<<<<
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( PetscLogStageGetActive(self.id, &flag) )
+ *         return toBool(flag)             # <<<<<<<<<<<<<<
  * 
  *     def setActive(self, flag):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_tval); if (unlikely(!__pyx_t_2)) __PYX_ERR(26, 146, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toBool(__pyx_v_flag); 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;
@@ -58084,8 +63198,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_18getActive(struct __pyx_ob
  *         CHKERR( PetscLogStageSetActive(self.id, PETSC_FALSE) )
  * 
  *     def getActive(self):             # <<<<<<<<<<<<<<
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( PetscLogStageGetActive(self.id, &tval) )
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( PetscLogStageGetActive(self.id, &flag) )
  */
 
   /* function exit code */
@@ -58100,7 +63214,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_18getActive(struct __pyx_ob
 }
 
 /* "PETSc/Log.pyx":148
- *         return <bint> tval
+ *         return toBool(flag)
  * 
  *     def setActive(self, flag):             # <<<<<<<<<<<<<<
  *         cdef PetscBool tval = PETSC_FALSE
@@ -58123,6 +63237,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogStage_21setActive(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -58193,10 +63308,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_20setActive(struct __pyx_ob
  * 
  *     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_ERR(26, 151, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStageSetActive(__pyx_v_self->id, __pyx_v_tval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(26, 151, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":148
- *         return <bint> tval
+ *         return toBool(flag)
  * 
  *     def setActive(self, flag):             # <<<<<<<<<<<<<<
  *         cdef PetscBool tval = PETSC_FALSE
@@ -58255,7 +63370,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_6active___get__(struct __py
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -58337,7 +63452,7 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogStage_6active_2__set__(struct __pyx_obj
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -58350,15 +63465,33 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogStage_6active_2__set__(struct __pyx_obj
     __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_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_ERR(26, 157, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 157, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 157, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __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_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;
@@ -58390,8 +63523,8 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogStage_6active_2__set__(struct __pyx_obj
  *     #
  * 
  *     def getVisible(self):             # <<<<<<<<<<<<<<
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( PetscLogStageGetVisible(self.id, &tval) )
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( PetscLogStageGetVisible(self.id, &flag) )
  */
 
 /* Python wrapper */
@@ -58412,7 +63545,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogStage_23getVisible(PyObject *__py
 }
 
 static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_22getVisible(struct __pyx_obj_8petsc4py_5PETSc_LogStage *__pyx_v_self) {
-  PetscBool __pyx_v_tval;
+  PetscBool __pyx_v_flag;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -58422,30 +63555,30 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_22getVisible(struct __pyx_o
   /* "PETSc/Log.pyx":162
  * 
  *     def getVisible(self):
- *         cdef PetscBool tval = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( PetscLogStageGetVisible(self.id, &tval) )
- *         return <bint> tval
+ *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscLogStageGetVisible(self.id, &flag) )
+ *         return toBool(flag)
  */
-  __pyx_v_tval = PETSC_FALSE;
+  __pyx_v_flag = PETSC_FALSE;
 
   /* "PETSc/Log.pyx":163
  *     def getVisible(self):
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( PetscLogStageGetVisible(self.id, &tval) )             # <<<<<<<<<<<<<<
- *         return <bint> tval
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( PetscLogStageGetVisible(self.id, &flag) )             # <<<<<<<<<<<<<<
+ *         return toBool(flag)
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStageGetVisible(__pyx_v_self->id, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(26, 163, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":164
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( PetscLogStageGetVisible(self.id, &tval) )
- *         return <bint> tval             # <<<<<<<<<<<<<<
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( PetscLogStageGetVisible(self.id, &flag) )
+ *         return toBool(flag)             # <<<<<<<<<<<<<<
  * 
  *     def setVisible(self, flag):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_tval); if (unlikely(!__pyx_t_2)) __PYX_ERR(26, 164, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toBool(__pyx_v_flag); 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;
@@ -58455,8 +63588,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_22getVisible(struct __pyx_o
  *     #
  * 
  *     def getVisible(self):             # <<<<<<<<<<<<<<
- *         cdef PetscBool tval = PETSC_FALSE
- *         CHKERR( PetscLogStageGetVisible(self.id, &tval) )
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( PetscLogStageGetVisible(self.id, &flag) )
  */
 
   /* function exit code */
@@ -58471,7 +63604,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_22getVisible(struct __pyx_o
 }
 
 /* "PETSc/Log.pyx":166
- *         return <bint> tval
+ *         return toBool(flag)
  * 
  *     def setVisible(self, flag):             # <<<<<<<<<<<<<<
  *         cdef PetscBool tval = PETSC_FALSE
@@ -58494,6 +63627,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogStage_25setVisible(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -58564,10 +63698,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_24setVisible(struct __pyx_o
  * 
  *     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_ERR(26, 169, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogStageSetVisible(__pyx_v_self->id, __pyx_v_tval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(26, 169, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":166
- *         return <bint> tval
+ *         return toBool(flag)
  * 
  *     def setVisible(self, flag):             # <<<<<<<<<<<<<<
  *         cdef PetscBool tval = PETSC_FALSE
@@ -58626,7 +63760,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogStage_7visible___get__(struct __p
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -58708,7 +63842,7 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogStage_7visible_2__set__(struct __pyx_ob
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -58721,15 +63855,33 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogStage_7visible_2__set__(struct __pyx_ob
     __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_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_ERR(26, 175, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 175, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 175, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __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_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;
@@ -58824,7 +63976,7 @@ 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");
+    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
     __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_ERR(26, 181, __pyx_L1_error)
@@ -59095,7 +64247,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_4getName(struct __pyx_obj_8
  *         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_ERR(26, 205, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogClassFindName(__pyx_v_self->id, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(26, 205, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":206
  *         cdef const_char *cval = NULL
@@ -59170,7 +64322,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_4name___get__(struct __pyx_
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -59256,7 +64408,7 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogClass_4name_2__set__(struct __pyx_obj_8
  * 
  *     #
  */
-  __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_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__46, 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;
@@ -59317,7 +64469,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_6activate(struct __pyx_obj_
  * 
  *     def deactivate(self):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventActivateClass(__pyx_v_self->id)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(26, 218, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":217
  *     #
@@ -59377,7 +64529,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_8deactivate(struct __pyx_ob
  * 
  *     def getActive(self):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventDeactivateClass(__pyx_v_self->id)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(26, 221, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":220
  *         CHKERR( PetscLogClassActivate(self.id) )
@@ -59489,6 +64641,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogClass_13setActive(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -59547,7 +64700,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_12setActive(struct __pyx_ob
  *         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_ERR(26, 229, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventActivateClass(__pyx_v_self->id)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(26, 229, __pyx_L1_error)
 
     /* "PETSc/Log.pyx":228
  * 
@@ -59567,7 +64720,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_12setActive(struct __pyx_ob
  *     property active:
  */
   /*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_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventDeactivateClass(__pyx_v_self->id)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(26, 231, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -59631,7 +64784,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogClass_6active___get__(struct __py
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -59713,7 +64866,7 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogClass_6active_2__set__(struct __pyx_obj
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -59726,15 +64879,33 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogClass_6active_2__set__(struct __pyx_obj
     __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_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_ERR(26, 237, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 237, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 237, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __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_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;
@@ -59829,7 +65000,7 @@ 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");
+    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
     __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_ERR(26, 243, __pyx_L1_error)
@@ -60094,7 +65265,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_4__enter__(struct __pyx_obj
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -60191,7 +65362,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_6__exit__(struct __pyx_obj_
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -60274,7 +65445,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_8begin(struct __pyx_obj_8pe
  *         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_ERR(26, 274, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_event_args2objs(__pyx_v_objs, __pyx_v_o); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(26, 274, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":275
  *         cdef PetscObject o[4]
@@ -60283,7 +65454,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_8begin(struct __pyx_obj_8pe
  * 
  *     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_ERR(26, 275, __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 == ((int)-1))) __PYX_ERR(26, 275, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":272
  *     #
@@ -60346,7 +65517,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_10end(struct __pyx_obj_8pet
  *         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_ERR(26, 279, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_event_args2objs(__pyx_v_objs, __pyx_v_o); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(26, 279, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":280
  *         cdef PetscObject o[4]
@@ -60355,7 +65526,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_10end(struct __pyx_obj_8pet
  * 
  *     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_ERR(26, 280, __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 == ((int)-1))) __PYX_ERR(26, 280, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":277
  *         CHKERR( PetscLogEventBegin(self.id, o[0], o[1], o[2], o[3]) )
@@ -60414,6 +65585,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_13barrierBegin(PyObject *__
       switch (pos_args) {
         default:
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
       }
       kw_args = PyDict_Size(__pyx_kwds);
@@ -60432,6 +65604,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_13barrierBegin(PyObject *__
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         default:
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
       }
     }
@@ -60474,7 +65647,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_12barrierBegin(struct __pyx
  *         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_ERR(26, 284, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_event_args2objs(__pyx_v_objs, __pyx_v_o); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(26, 284, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":285
  *         cdef PetscObject o[4]
@@ -60505,7 +65678,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_12barrierBegin(struct __pyx
  * 
  *     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_ERR(26, 287, __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 == ((int)-1))) __PYX_ERR(26, 287, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":282
  *         CHKERR( PetscLogEventEnd(self.id, o[0], o[1], o[2], o[3]) )
@@ -60564,6 +65737,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_15barrierEnd(PyObject *__py
       switch (pos_args) {
         default:
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
       }
       kw_args = PyDict_Size(__pyx_kwds);
@@ -60582,6 +65756,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_15barrierEnd(PyObject *__py
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         default:
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
       }
     }
@@ -60624,7 +65799,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_14barrierEnd(struct __pyx_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_ERR(26, 291, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_event_args2objs(__pyx_v_objs, __pyx_v_o); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(26, 291, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":292
  *         cdef PetscObject o[4]
@@ -60655,7 +65830,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_14barrierEnd(struct __pyx_o
  * 
  *     #
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(26, 294, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":289
  *         CHKERR( PetscLogEventBarrierBegin(self.id, o[0], o[1], o[2], o[3], ccomm) )
@@ -60726,7 +65901,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_16getName(struct __pyx_obj_
  *         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_ERR(26, 300, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventFindName(__pyx_v_self->id, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(26, 300, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":301
  *         cdef const_char *cval = NULL
@@ -60801,7 +65976,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_4name___get__(struct __pyx_
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -60887,7 +66062,7 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogEvent_4name_2__set__(struct __pyx_obj_8
  * 
  *     #
  */
-  __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_t_1 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__47, 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;
@@ -60948,7 +66123,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_18activate(struct __pyx_obj
  * 
  *     def deactivate(self):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventActivate(__pyx_v_self->id)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(26, 313, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":312
  *     #
@@ -61008,7 +66183,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_20deactivate(struct __pyx_o
  * 
  *     def getActive(self):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventDeactivate(__pyx_v_self->id)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(26, 316, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":315
  *         CHKERR( PetscLogEventActivate(self.id) )
@@ -61120,6 +66295,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_25setActive(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -61178,7 +66354,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_24setActive(struct __pyx_ob
  *         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_ERR(26, 324, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventActivate(__pyx_v_self->id)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(26, 324, __pyx_L1_error)
 
     /* "PETSc/Log.pyx":323
  * 
@@ -61198,7 +66374,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_24setActive(struct __pyx_ob
  *     property active:
  */
   /*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_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventDeactivate(__pyx_v_self->id)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(26, 326, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -61262,7 +66438,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_6active___get__(struct __py
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -61344,7 +66520,7 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogEvent_6active_2__set__(struct __pyx_obj
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -61357,15 +66533,33 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogEvent_6active_2__set__(struct __pyx_obj
     __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_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_ERR(26, 332, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 332, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 332, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __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_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;
@@ -61483,6 +66677,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_29setActiveAll(PyObject *__
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -61553,7 +66748,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_28setActiveAll(struct __pyx
  * 
  *     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_ERR(26, 341, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscLogEventSetActiveAll(__pyx_v_self->id, __pyx_v_tval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(26, 341, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":338
  *         raise NotImplementedError
@@ -61614,7 +66809,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_10active_all___get__(struct
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -61696,7 +66891,7 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogEvent_10active_all_2__set__(struct __py
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -61709,15 +66904,33 @@ static int __pyx_pf_8petsc4py_5PETSc_8LogEvent_10active_all_2__set__(struct __py
     __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_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_ERR(26, 347, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 347, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 347, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __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_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;
@@ -61770,6 +66983,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_31getPerfInfo(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -61787,6 +67001,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_8LogEvent_31getPerfInfo(PyObject *__p
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -61839,7 +67054,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_30getPerfInfo(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 == -1L && PyErr_Occurred())) __PYX_ERR(26, 354, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_stage); if (unlikely(__pyx_t_3 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(26, 354, __pyx_L1_error)
     __pyx_v_cstage = __pyx_t_3;
   }
 
@@ -61850,7 +67065,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_8LogEvent_30getPerfInfo(struct __pyx_
  *         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_ERR(26, 355, __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 == ((int)-1))) __PYX_ERR(26, 355, __pyx_L1_error)
 
   /* "PETSc/Log.pyx":356
  *         if stage is not None: cstage = asInt(stage)
@@ -61952,7 +67167,7 @@ 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");
+    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "get");
     __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_ERR(26, 361, __pyx_L1_error)
@@ -62086,6 +67301,7 @@ static int __pyx_pw_8petsc4py_5PETSc_4Comm_1__cinit__(PyObject *__pyx_v_self, Py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -62103,6 +67319,7 @@ static int __pyx_pw_8petsc4py_5PETSc_4Comm_1__cinit__(PyObject *__pyx_v_self, Py
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -62260,7 +67477,7 @@ 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_ERR(9, 17, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_PetscCommDEALLOC((&__pyx_v_self->comm))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(9, 17, __pyx_L1_error)
 
     /* "PETSc/Comm.pyx":16
  * 
@@ -62313,7 +67530,7 @@ static void __pyx_pf_8petsc4py_5PETSc_4Comm_2__dealloc__(struct PyPetscCommObjec
   /* function exit code */
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_WriteUnraisable("petsc4py.PETSc.Comm.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 0, 0);
+  __Pyx_WriteUnraisable("petsc4py.PETSc.Comm.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
 }
@@ -62395,17 +67612,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_4__richcmp__(PyObject *__pyx_v_
  *         cdef Comm s = self
  *         cdef Comm o = other
  */
-  switch (__pyx_v_op) {
-    case 2:
-    case 3:
-    __pyx_t_1 = 0;
-    break;
-    default:
-    __pyx_t_1 = 1;
-    break;
+  __pyx_t_2 = ((__pyx_v_op != 2) != 0);
+  if (__pyx_t_2) {
+  } else {
+    __pyx_t_1 = __pyx_t_2;
+    goto __pyx_L6_bool_binop_done;
   }
+  __pyx_t_2 = ((__pyx_v_op != 3) != 0);
+  __pyx_t_1 = __pyx_t_2;
+  __pyx_L6_bool_binop_done:;
   if (__pyx_t_1) {
-    __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_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__48, 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;
@@ -62487,11 +67704,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_4__richcmp__(PyObject *__pyx_v_
   if (__pyx_t_2) {
   } else {
     __pyx_t_1 = __pyx_t_2;
-    goto __pyx_L7_bool_binop_done;
+    goto __pyx_L9_bool_binop_done;
   }
   __pyx_t_2 = ((__pyx_v_comm2 != MPI_COMM_NULL) != 0);
   __pyx_t_1 = __pyx_t_2;
-  __pyx_L7_bool_binop_done:;
+  __pyx_L9_bool_binop_done:;
   if (__pyx_t_1) {
 
     /* "PETSc/Comm.pyx":33
@@ -62501,7 +67718,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_ERR(9, 33, __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 == ((int)-1))) __PYX_ERR(9, 33, __pyx_L1_error)
 
     /* "PETSc/Comm.pyx":34
  *         if comm1 != MPI_COMM_NULL and comm2 != MPI_COMM_NULL:
@@ -62520,14 +67737,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_4__richcmp__(PyObject *__pyx_v_
         __Pyx_GOTREF(__pyx_t_6);
         __pyx_t_3 = __pyx_t_6;
         __pyx_t_6 = 0;
-        goto __pyx_L10_bool_binop_done;
+        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_ERR(9, 34, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __pyx_t_3 = __pyx_t_6;
       __pyx_t_6 = 0;
-      __pyx_L10_bool_binop_done:;
+      __pyx_L12_bool_binop_done:;
       __pyx_r = __pyx_t_3;
       __pyx_t_3 = 0;
       goto __pyx_L0;
@@ -62549,14 +67766,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_4__richcmp__(PyObject *__pyx_v_
         __Pyx_GOTREF(__pyx_t_6);
         __pyx_t_3 = __pyx_t_6;
         __pyx_t_6 = 0;
-        goto __pyx_L12_bool_binop_done;
+        goto __pyx_L14_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_ERR(9, 35, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __pyx_t_3 = __pyx_t_6;
       __pyx_t_6 = 0;
-      __pyx_L12_bool_binop_done:;
+      __pyx_L14_bool_binop_done:;
       __pyx_r = __pyx_t_3;
       __pyx_t_3 = 0;
       goto __pyx_L0;
@@ -62742,7 +67959,7 @@ 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__46, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 48, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__49, 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;
@@ -62764,7 +67981,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_ERR(9, 49, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscCommDestroy((&__pyx_v_self->comm))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(9, 49, __pyx_L1_error)
 
   /* "PETSc/Comm.pyx":50
  *             raise ValueError("communicator not owned")
@@ -62872,7 +68089,7 @@ 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__47, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 56, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__50, 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;
@@ -62903,7 +68120,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_ERR(9, 58, __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 == ((int)-1))) __PYX_ERR(9, 58, __pyx_L1_error)
 
   /* "PETSc/Comm.pyx":59
  *         cdef MPI_Comm newcomm = MPI_COMM_NULL
@@ -62914,7 +68131,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_10duplicate(struct PyPetscCommO
  */
   __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
   __pyx_t_4 = ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))); __pyx_t_5 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_4))) {
+  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
     __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
     if (likely(__pyx_t_5)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -63052,7 +68269,7 @@ 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__48, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 67, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__51, 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;
@@ -63168,7 +68385,7 @@ 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__49, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 74, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__52, 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;
@@ -63283,7 +68500,7 @@ 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__50, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(9, 81, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__53, 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;
@@ -63368,7 +68585,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_4size___get__(struct PyPetscCom
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -63450,7 +68667,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4Comm_4rank___get__(struct PyPetscCom
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -63811,7 +69028,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_ERR(10, 12, __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 == ((int)-1))) __PYX_ERR(10, 12, __pyx_L1_error)
 
   /* "PETSc/Object.pyx":13
  *     def __dealloc__(self):
@@ -63833,7 +69050,7 @@ static void __pyx_pf_8petsc4py_5PETSc_6Object_2__dealloc__(struct PyPetscObjectO
   /* function exit code */
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_WriteUnraisable("petsc4py.PETSc.Object.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 0, 0);
+  __Pyx_WriteUnraisable("petsc4py.PETSc.Object.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
 }
@@ -63926,46 +69143,46 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4__richcmp__(PyObject *__pyx_
  *         elif op == 3: return (s.obj[0] != o.obj[0])
  *         else: raise TypeError("only '==' and '!='")
  */
-  switch (__pyx_v_op) {
-    case 2:
+  __pyx_t_1 = ((__pyx_v_op == 2) != 0);
+  if (__pyx_t_1) {
     __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_ERR(10, 19, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
-    break;
+  }
 
-    /* "PETSc/Object.pyx":20
+  /* "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 '!='")
  * 
  */
-    case 3:
+  __pyx_t_1 = ((__pyx_v_op == 3) != 0);
+  if (__pyx_t_1) {
     __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_ERR(10, 20, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
-    break;
-    default:
+  }
 
-    /* "PETSc/Object.pyx":21
+  /* "PETSc/Object.pyx":21
  *         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 '!='")             # <<<<<<<<<<<<<<
  * 
  *     def __nonzero__(self):
  */
-    __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)
+  /*else*/ {
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__54, 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_ERR(10, 21, __pyx_L1_error)
-    break;
   }
 
   /* "PETSc/Object.pyx":15
@@ -64085,7 +69302,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_8__copy__(struct PyPetscObjec
  */
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -64132,7 +69349,7 @@ 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_ERR(10, 30, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectReference(__pyx_v_o)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(10, 30, __pyx_L1_error)
 
     /* "PETSc/Object.pyx":29
  *         cdef Object obj = type(self)()
@@ -64157,7 +69374,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_8__copy__(struct PyPetscObjec
  *         obj.obj[0] = o
  *         return obj             # <<<<<<<<<<<<<<
  * 
- *     def __deepcopy__(self, dict memo not None):
+ *     def __deepcopy__(self, dict memo):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_obj));
@@ -64189,7 +69406,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_8__copy__(struct PyPetscObjec
 /* "PETSc/Object.pyx":34
  *         return obj
  * 
- *     def __deepcopy__(self, dict memo not None):             # <<<<<<<<<<<<<<
+ *     def __deepcopy__(self, dict memo):             # <<<<<<<<<<<<<<
  *         cdef object obj_copy = None
  *         try:
  */
@@ -64210,6 +69427,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_11__deepcopy__(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -64264,7 +69482,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_10__deepcopy__(struct PyPetsc
 
   /* "PETSc/Object.pyx":35
  * 
- *     def __deepcopy__(self, dict memo not None):
+ *     def __deepcopy__(self, dict memo):
  *         cdef object obj_copy = None             # <<<<<<<<<<<<<<
  *         try:
  *             obj_copy = self.copy
@@ -64273,7 +69491,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_10__deepcopy__(struct PyPetsc
   __pyx_v_obj_copy = Py_None;
 
   /* "PETSc/Object.pyx":36
- *     def __deepcopy__(self, dict memo not None):
+ *     def __deepcopy__(self, dict memo):
  *         cdef object obj_copy = None
  *         try:             # <<<<<<<<<<<<<<
  *             obj_copy = self.copy
@@ -64301,7 +69519,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_10__deepcopy__(struct PyPetsc
       __pyx_t_4 = 0;
 
       /* "PETSc/Object.pyx":36
- *     def __deepcopy__(self, dict memo not None):
+ *     def __deepcopy__(self, dict memo):
  *         cdef object obj_copy = None
  *         try:             # <<<<<<<<<<<<<<
  *             obj_copy = self.copy
@@ -64311,9 +69529,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_10__deepcopy__(struct PyPetsc
     __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;
+    goto __pyx_L8_try_end;
     __pyx_L3_error:;
-    __Pyx_PyThreadState_assign
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
 
     /* "PETSc/Object.pyx":38
@@ -64345,19 +69562,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_10__deepcopy__(struct PyPetsc
     __pyx_L5_except_error:;
 
     /* "PETSc/Object.pyx":36
- *     def __deepcopy__(self, dict memo not None):
+ *     def __deepcopy__(self, dict memo):
  *         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);
     __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
     goto __pyx_L1_error;
-    __pyx_L10_try_end:;
+    __pyx_L8_try_end:;
   }
 
   /* "PETSc/Object.pyx":40
@@ -64379,7 +69595,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_10__deepcopy__(struct PyPetsc
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(__pyx_v_obj_copy);
   __pyx_t_6 = __pyx_v_obj_copy; __pyx_t_4 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_6))) {
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_6))) {
     __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_6);
     if (likely(__pyx_t_4)) {
       PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
@@ -64403,7 +69619,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_10__deepcopy__(struct PyPetsc
   /* "PETSc/Object.pyx":34
  *         return obj
  * 
- *     def __deepcopy__(self, dict memo not None):             # <<<<<<<<<<<<<<
+ *     def __deepcopy__(self, dict memo):             # <<<<<<<<<<<<<<
  *         cdef object obj_copy = None
  *         try:
  */
@@ -64588,6 +69804,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_13view(PyObject *__pyx_v_self
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -64605,6 +69822,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_13view(PyObject *__pyx_v_self
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -64671,7 +69889,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_12view(struct PyPetscObjectOb
  * 
  *     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_ERR(10, 59, __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 == ((int)-1))) __PYX_ERR(10, 59, __pyx_L1_error)
 
   /* "PETSc/Object.pyx":56
  *     #
@@ -64731,7 +69949,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_14destroy(struct PyPetscObjec
  *         return self
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectDestroy((&(__pyx_v_self->obj[0])))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(10, 62, __pyx_L1_error)
 
   /* "PETSc/Object.pyx":63
  *     def destroy(self):
@@ -64812,7 +70030,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_16getType(struct PyPetscObjec
  *         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_ERR(10, 67, __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 == ((int)-1))) __PYX_ERR(10, 67, __pyx_L1_error)
 
   /* "PETSc/Object.pyx":68
  *         cdef const_char *cval = NULL
@@ -64871,6 +70089,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_19setOptionsPrefix(PyObject *
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -64942,7 +70161,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_18setOptionsPrefix(struct PyP
  * 
  *     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_ERR(10, 75, __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 == ((int)-1))) __PYX_ERR(10, 75, __pyx_L1_error)
 
   /* "PETSc/Object.pyx":72
  *     #
@@ -65015,7 +70234,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_20getOptionsPrefix(struct PyP
  *         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_ERR(10, 79, __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 == ((int)-1))) __PYX_ERR(10, 79, __pyx_L1_error)
 
   /* "PETSc/Object.pyx":80
  *         cdef const_char *cval = NULL
@@ -65086,9 +70305,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_22setFromOptions(struct PyPet
  *     def setFromOptions(self):
  *         CHKERR( PetscObjectSetFromOptions(self.obj[0]) )             # <<<<<<<<<<<<<<
  * 
- *     #
+ *     def viewFromOptions(self, name, Object prefix=None):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectSetFromOptions((__pyx_v_self->obj[0]))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(10, 83, __pyx_L1_error)
 
   /* "PETSc/Object.pyx":82
  *         return bytes2str(cval)
@@ -65110,7 +70329,174 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_22setFromOptions(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":87
+/* "PETSc/Object.pyx":85
+ *         CHKERR( PetscObjectSetFromOptions(self.obj[0]) )
+ * 
+ *     def viewFromOptions(self, name, Object prefix=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscObject pobj = NULL
+ *         cdef const_char *cval = NULL
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_25viewFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Object_24viewFromOptions[] = "Object.viewFromOptions(self, name, Object prefix=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_25viewFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_name = 0;
+  struct PyPetscObjectObject *__pyx_v_prefix = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("viewFromOptions (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,&__pyx_n_s_prefix,0};
+    PyObject* values[2] = {0,0};
+    values[1] = (PyObject *)((struct PyPetscObjectObject *)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);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        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;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_prefix);
+          if (value) { values[1] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "viewFromOptions") < 0)) __PYX_ERR(10, 85, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_name = values[0];
+    __pyx_v_prefix = ((struct PyPetscObjectObject *)values[1]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("viewFromOptions", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(10, 85, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Object.viewFromOptions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_prefix), __pyx_ptype_8petsc4py_5PETSc_Object, 1, "prefix", 0))) __PYX_ERR(10, 85, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_24viewFromOptions(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_v_name, __pyx_v_prefix);
+
+  /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_24viewFromOptions(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_name, struct PyPetscObjectObject *__pyx_v_prefix) {
+  PetscObject __pyx_v_pobj;
+  const char *__pyx_v_cval;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscObject __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("viewFromOptions", 0);
+  __Pyx_INCREF(__pyx_v_name);
+
+  /* "PETSc/Object.pyx":86
+ * 
+ *     def viewFromOptions(self, name, Object prefix=None):
+ *         cdef PetscObject pobj = NULL             # <<<<<<<<<<<<<<
+ *         cdef const_char *cval = NULL
+ *         pobj = prefix.obj[0] if prefix is not None else NULL
+ */
+  __pyx_v_pobj = NULL;
+
+  /* "PETSc/Object.pyx":87
+ *     def viewFromOptions(self, name, Object prefix=None):
+ *         cdef PetscObject pobj = NULL
+ *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
+ *         pobj = prefix.obj[0] if prefix is not None else NULL
+ *         name = str2bytes(name, &cval)
+ */
+  __pyx_v_cval = NULL;
+
+  /* "PETSc/Object.pyx":88
+ *         cdef PetscObject pobj = NULL
+ *         cdef const_char *cval = NULL
+ *         pobj = prefix.obj[0] if prefix is not None else NULL             # <<<<<<<<<<<<<<
+ *         name = str2bytes(name, &cval)
+ *         CHKERR( PetscObjectViewFromOptions(self.obj[0], pobj, cval) )
+ */
+  __pyx_t_2 = (((PyObject *)__pyx_v_prefix) != Py_None);
+  if ((__pyx_t_2 != 0)) {
+    __pyx_t_1 = (__pyx_v_prefix->obj[0]);
+  } else {
+    __pyx_t_1 = NULL;
+  }
+  __pyx_v_pobj = __pyx_t_1;
+
+  /* "PETSc/Object.pyx":89
+ *         cdef const_char *cval = NULL
+ *         pobj = prefix.obj[0] if prefix is not None else NULL
+ *         name = str2bytes(name, &cval)             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscObjectViewFromOptions(self.obj[0], pobj, cval) )
+ * 
+ */
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cval)); if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 89, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_3);
+  __pyx_t_3 = 0;
+
+  /* "PETSc/Object.pyx":90
+ *         pobj = prefix.obj[0] if prefix is not None else NULL
+ *         name = str2bytes(name, &cval)
+ *         CHKERR( PetscObjectViewFromOptions(self.obj[0], pobj, cval) )             # <<<<<<<<<<<<<<
+ * 
+ *     #
+ */
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectViewFromOptions((__pyx_v_self->obj[0]), __pyx_v_pobj, __pyx_v_cval)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(10, 90, __pyx_L1_error)
+
+  /* "PETSc/Object.pyx":85
+ *         CHKERR( PetscObjectSetFromOptions(self.obj[0]) )
+ * 
+ *     def viewFromOptions(self, name, Object prefix=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscObject pobj = NULL
+ *         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_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.Object.viewFromOptions", __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/Object.pyx":94
  *     #
  * 
  *     def getComm(self):             # <<<<<<<<<<<<<<
@@ -65119,23 +70505,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_22setFromOptions(struct PyPet
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_25getComm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Object_24getComm[] = "Object.getComm(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_25getComm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_27getComm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Object_26getComm[] = "Object.getComm(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_27getComm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getComm (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getComm", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getComm", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_24getComm(((struct PyPetscObjectObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_26getComm(((struct PyPetscObjectObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_24getComm(struct PyPetscObjectObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_26getComm(struct PyPetscObjectObject *__pyx_v_self) {
   struct PyPetscCommObject *__pyx_v_comm = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -65143,28 +70529,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_24getComm(struct PyPetscObjec
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getComm", 0);
 
-  /* "PETSc/Object.pyx":88
+  /* "PETSc/Object.pyx":95
  * 
  *     def getComm(self):
  *         cdef Comm comm = Comm()             # <<<<<<<<<<<<<<
  *         CHKERR( PetscObjectGetComm(self.obj[0], &comm.comm) )
  *         return comm
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 95, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_comm = ((struct PyPetscCommObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Object.pyx":89
+  /* "PETSc/Object.pyx":96
  *     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_ERR(10, 89, __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 == ((int)-1))) __PYX_ERR(10, 96, __pyx_L1_error)
 
-  /* "PETSc/Object.pyx":90
+  /* "PETSc/Object.pyx":97
  *         cdef Comm comm = Comm()
  *         CHKERR( PetscObjectGetComm(self.obj[0], &comm.comm) )
  *         return comm             # <<<<<<<<<<<<<<
@@ -65176,7 +70562,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_24getComm(struct PyPetscObjec
   __pyx_r = ((PyObject *)__pyx_v_comm);
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":87
+  /* "PETSc/Object.pyx":94
  *     #
  * 
  *     def getComm(self):             # <<<<<<<<<<<<<<
@@ -65196,7 +70582,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_24getComm(struct PyPetscObjec
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":92
+/* "PETSc/Object.pyx":99
  *         return comm
  * 
  *     def getName(self):             # <<<<<<<<<<<<<<
@@ -65205,23 +70591,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_24getComm(struct PyPetscObjec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_27getName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Object_26getName[] = "Object.getName(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_27getName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_29getName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Object_28getName[] = "Object.getName(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_29getName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getName (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getName", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getName", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_26getName(((struct PyPetscObjectObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_28getName(((struct PyPetscObjectObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_26getName(struct PyPetscObjectObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_28getName(struct PyPetscObjectObject *__pyx_v_self) {
   const char *__pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -65229,7 +70615,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_26getName(struct PyPetscObjec
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getName", 0);
 
-  /* "PETSc/Object.pyx":93
+  /* "PETSc/Object.pyx":100
  * 
  *     def getName(self):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -65238,16 +70624,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_26getName(struct PyPetscObjec
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Object.pyx":94
+  /* "PETSc/Object.pyx":101
  *     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_ERR(10, 94, __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 == ((int)-1))) __PYX_ERR(10, 101, __pyx_L1_error)
 
-  /* "PETSc/Object.pyx":95
+  /* "PETSc/Object.pyx":102
  *         cdef const_char *cval = NULL
  *         CHKERR( PetscObjectGetName(self.obj[0], &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -65255,13 +70641,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_ERR(10, 95, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 102, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":92
+  /* "PETSc/Object.pyx":99
  *         return comm
  * 
  *     def getName(self):             # <<<<<<<<<<<<<<
@@ -65280,7 +70666,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_26getName(struct PyPetscObjec
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":97
+/* "PETSc/Object.pyx":104
  *         return bytes2str(cval)
  * 
  *     def setName(self, name):             # <<<<<<<<<<<<<<
@@ -65289,9 +70675,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_26getName(struct PyPetscObjec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_29setName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_31setName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Object_30setName[] = "Object.setName(self, name)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_31setName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -65304,6 +70690,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_29setName(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -65314,7 +70701,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_ERR(10, 97, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setName") < 0)) __PYX_ERR(10, 104, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -65325,20 +70712,20 @@ 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_ERR(10, 97, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setName", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(10, 104, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Object.setName", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_28setName(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_v_name);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_30setName(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_v_name);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_28setName(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_name) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_30setName(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_name) {
   const char *__pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -65347,7 +70734,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_28setName(struct PyPetscObjec
   __Pyx_RefNannySetupContext("setName", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/Object.pyx":98
+  /* "PETSc/Object.pyx":105
  * 
  *     def setName(self, name):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -65356,28 +70743,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_28setName(struct PyPetscObjec
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Object.pyx":99
+  /* "PETSc/Object.pyx":106
  *     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_ERR(10, 99, __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, 106, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Object.pyx":100
+  /* "PETSc/Object.pyx":107
  *         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_ERR(10, 100, __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 == ((int)-1))) __PYX_ERR(10, 107, __pyx_L1_error)
 
-  /* "PETSc/Object.pyx":97
+  /* "PETSc/Object.pyx":104
  *         return bytes2str(cval)
  * 
  *     def setName(self, name):             # <<<<<<<<<<<<<<
@@ -65399,7 +70786,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_28setName(struct PyPetscObjec
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":102
+/* "PETSc/Object.pyx":109
  *         CHKERR( PetscObjectSetName(self.obj[0], cval) )
  * 
  *     def getClassId(self):             # <<<<<<<<<<<<<<
@@ -65408,23 +70795,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_28setName(struct PyPetscObjec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_31getClassId(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Object_30getClassId[] = "Object.getClassId(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_31getClassId(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_33getClassId(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Object_32getClassId[] = "Object.getClassId(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_33getClassId(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getClassId (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getClassId", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getClassId", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_30getClassId(((struct PyPetscObjectObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_32getClassId(((struct PyPetscObjectObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_30getClassId(struct PyPetscObjectObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_32getClassId(struct PyPetscObjectObject *__pyx_v_self) {
   PetscClassId __pyx_v_classid;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -65432,7 +70819,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_30getClassId(struct PyPetscOb
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getClassId", 0);
 
-  /* "PETSc/Object.pyx":103
+  /* "PETSc/Object.pyx":110
  * 
  *     def getClassId(self):
  *         cdef PetscClassId classid = 0             # <<<<<<<<<<<<<<
@@ -65441,16 +70828,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_30getClassId(struct PyPetscOb
  */
   __pyx_v_classid = 0;
 
-  /* "PETSc/Object.pyx":104
+  /* "PETSc/Object.pyx":111
  *     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_ERR(10, 104, __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 == ((int)-1))) __PYX_ERR(10, 111, __pyx_L1_error)
 
-  /* "PETSc/Object.pyx":105
+  /* "PETSc/Object.pyx":112
  *         cdef PetscClassId classid = 0
  *         CHKERR( PetscObjectGetClassId(self.obj[0], &classid) )
  *         return <long>classid             # <<<<<<<<<<<<<<
@@ -65458,13 +70845,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_ERR(10, 105, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_long(((long)__pyx_v_classid)); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 112, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":102
+  /* "PETSc/Object.pyx":109
  *         CHKERR( PetscObjectSetName(self.obj[0], cval) )
  * 
  *     def getClassId(self):             # <<<<<<<<<<<<<<
@@ -65483,7 +70870,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_30getClassId(struct PyPetscOb
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":107
+/* "PETSc/Object.pyx":114
  *         return <long>classid
  * 
  *     def getClassName(self):             # <<<<<<<<<<<<<<
@@ -65492,23 +70879,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_30getClassId(struct PyPetscOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_33getClassName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Object_32getClassName[] = "Object.getClassName(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_33getClassName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_35getClassName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Object_34getClassName[] = "Object.getClassName(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_35getClassName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getClassName (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getClassName", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getClassName", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_32getClassName(((struct PyPetscObjectObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_34getClassName(((struct PyPetscObjectObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_32getClassName(struct PyPetscObjectObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_34getClassName(struct PyPetscObjectObject *__pyx_v_self) {
   const char *__pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -65516,7 +70903,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_32getClassName(struct PyPetsc
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getClassName", 0);
 
-  /* "PETSc/Object.pyx":108
+  /* "PETSc/Object.pyx":115
  * 
  *     def getClassName(self):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -65525,16 +70912,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_32getClassName(struct PyPetsc
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Object.pyx":109
+  /* "PETSc/Object.pyx":116
  *     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_ERR(10, 109, __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 == ((int)-1))) __PYX_ERR(10, 116, __pyx_L1_error)
 
-  /* "PETSc/Object.pyx":110
+  /* "PETSc/Object.pyx":117
  *         cdef const_char *cval = NULL
  *         CHKERR( PetscObjectGetClassName(self.obj[0], &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -65542,13 +70929,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_ERR(10, 110, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 117, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":107
+  /* "PETSc/Object.pyx":114
  *         return <long>classid
  * 
  *     def getClassName(self):             # <<<<<<<<<<<<<<
@@ -65567,7 +70954,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_32getClassName(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":112
+/* "PETSc/Object.pyx":119
  *         return bytes2str(cval)
  * 
  *     def getRefCount(self):             # <<<<<<<<<<<<<<
@@ -65576,23 +70963,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_32getClassName(struct PyPetsc
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_35getRefCount(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Object_34getRefCount[] = "Object.getRefCount(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_35getRefCount(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_37getRefCount(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Object_36getRefCount[] = "Object.getRefCount(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_37getRefCount(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getRefCount (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getRefCount", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getRefCount", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_34getRefCount(((struct PyPetscObjectObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_36getRefCount(((struct PyPetscObjectObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_34getRefCount(struct PyPetscObjectObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_36getRefCount(struct PyPetscObjectObject *__pyx_v_self) {
   PetscInt __pyx_v_refcnt;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -65601,7 +70988,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_34getRefCount(struct PyPetscO
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("getRefCount", 0);
 
-  /* "PETSc/Object.pyx":113
+  /* "PETSc/Object.pyx":120
  * 
  *     def getRefCount(self):
  *         if self.obj[0] == NULL: return 0             # <<<<<<<<<<<<<<
@@ -65616,7 +71003,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_34getRefCount(struct PyPetscO
     goto __pyx_L0;
   }
 
-  /* "PETSc/Object.pyx":114
+  /* "PETSc/Object.pyx":121
  *     def getRefCount(self):
  *         if self.obj[0] == NULL: return 0
  *         cdef PetscInt refcnt = 0             # <<<<<<<<<<<<<<
@@ -65625,16 +71012,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_34getRefCount(struct PyPetscO
  */
   __pyx_v_refcnt = 0;
 
-  /* "PETSc/Object.pyx":115
+  /* "PETSc/Object.pyx":122
  *         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_ERR(10, 115, __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 == ((int)-1))) __PYX_ERR(10, 122, __pyx_L1_error)
 
-  /* "PETSc/Object.pyx":116
+  /* "PETSc/Object.pyx":123
  *         cdef PetscInt refcnt = 0
  *         CHKERR( PetscObjectGetReference(self.obj[0], &refcnt) )
  *         return toInt(refcnt)             # <<<<<<<<<<<<<<
@@ -65642,13 +71029,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_ERR(10, 116, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_refcnt); if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 123, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":112
+  /* "PETSc/Object.pyx":119
  *         return bytes2str(cval)
  * 
  *     def getRefCount(self):             # <<<<<<<<<<<<<<
@@ -65667,18 +71054,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_34getRefCount(struct PyPetscO
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":120
+/* "PETSc/Object.pyx":127
  *     # --- general support ---
  * 
- *     def compose(self, name, Object obj):             # <<<<<<<<<<<<<<
+ *     def compose(self, name, Object obj or None):             # <<<<<<<<<<<<<<
  *         cdef const_char *cval = NULL
  *         cdef PetscObject cobj = NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_37compose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Object_36compose[] = "Object.compose(self, name, Object obj)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_37compose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_39compose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Object_38compose[] = "Object.compose(self, name, Object obj)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_39compose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
   struct PyPetscObjectObject *__pyx_v_obj = 0;
   PyObject *__pyx_r = 0;
@@ -65692,7 +71079,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_37compose(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -65701,14 +71090,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_37compose(PyObject *__pyx_v_s
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(10, 120, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("compose", 1, 2, 2, 1); __PYX_ERR(10, 127, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "compose") < 0)) __PYX_ERR(10, 120, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "compose") < 0)) __PYX_ERR(10, 127, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -65721,14 +71111,14 @@ 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_ERR(10, 120, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("compose", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(10, 127, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_8petsc4py_5PETSc_Object, 1, "obj", 0))) __PYX_ERR(10, 127, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_38compose(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_v_name, __pyx_v_obj);
 
   /* function exit code */
   goto __pyx_L0;
@@ -65739,7 +71129,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_37compose(PyObject *__pyx_v_s
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_36compose(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_name, struct PyPetscObjectObject *__pyx_v_obj) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_38compose(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_name, struct PyPetscObjectObject *__pyx_v_obj) {
   const char *__pyx_v_cval;
   PetscObject __pyx_v_cobj;
   PyObject *__pyx_r = NULL;
@@ -65751,17 +71141,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_36compose(struct PyPetscObjec
   __Pyx_RefNannySetupContext("compose", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/Object.pyx":121
+  /* "PETSc/Object.pyx":128
  * 
- *     def compose(self, name, Object obj):
+ *     def compose(self, name, Object obj or None):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
  *         cdef PetscObject cobj = NULL
  *         name = str2bytes(name, &cval)
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Object.pyx":122
- *     def compose(self, name, Object obj):
+  /* "PETSc/Object.pyx":129
+ *     def compose(self, name, Object obj or None):
  *         cdef const_char *cval = NULL
  *         cdef PetscObject cobj = NULL             # <<<<<<<<<<<<<<
  *         name = str2bytes(name, &cval)
@@ -65769,19 +71159,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_36compose(struct PyPetscObjec
  */
   __pyx_v_cobj = NULL;
 
-  /* "PETSc/Object.pyx":123
+  /* "PETSc/Object.pyx":130
  *         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_ERR(10, 123, __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":124
+  /* "PETSc/Object.pyx":131
  *         cdef PetscObject cobj = NULL
  *         name = str2bytes(name, &cval)
  *         if obj is not None: cobj = obj.obj[0]             # <<<<<<<<<<<<<<
@@ -65794,19 +71184,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_36compose(struct PyPetscObjec
     __pyx_v_cobj = (__pyx_v_obj->obj[0]);
   }
 
-  /* "PETSc/Object.pyx":125
+  /* "PETSc/Object.pyx":132
  *         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_ERR(10, 125, __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 == ((int)-1))) __PYX_ERR(10, 132, __pyx_L1_error)
 
-  /* "PETSc/Object.pyx":120
+  /* "PETSc/Object.pyx":127
  *     # --- general support ---
  * 
- *     def compose(self, name, Object obj):             # <<<<<<<<<<<<<<
+ *     def compose(self, name, Object obj or None):             # <<<<<<<<<<<<<<
  *         cdef const_char *cval = NULL
  *         cdef PetscObject cobj = NULL
  */
@@ -65825,7 +71215,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_36compose(struct PyPetscObjec
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":127
+/* "PETSc/Object.pyx":134
  *         CHKERR( PetscObjectCompose(self.obj[0], cval, cobj) )
  * 
  *     def query(self, name):             # <<<<<<<<<<<<<<
@@ -65834,9 +71224,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_36compose(struct PyPetscObjec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_39query(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_41query(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Object_40query[] = "Object.query(self, name)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_41query(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -65849,6 +71239,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_39query(PyObject *__pyx_v_sel
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -65859,7 +71250,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_ERR(10, 127, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "query") < 0)) __PYX_ERR(10, 134, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -65870,20 +71261,20 @@ 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_ERR(10, 127, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("query", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(10, 134, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Object.query", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_38query(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_v_name);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_40query(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_v_name);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_38query(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_name) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_40query(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_name) {
   const char *__pyx_v_cval;
   PetscObject __pyx_v_cobj;
   struct PyPetscObjectObject *__pyx_v_obj = 0;
@@ -65896,7 +71287,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_38query(struct PyPetscObjectO
   __Pyx_RefNannySetupContext("query", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/Object.pyx":128
+  /* "PETSc/Object.pyx":135
  * 
  *     def query(self, name):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -65905,7 +71296,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_38query(struct PyPetscObjectO
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Object.pyx":129
+  /* "PETSc/Object.pyx":136
  *     def query(self, name):
  *         cdef const_char *cval = NULL
  *         cdef PetscObject cobj = NULL             # <<<<<<<<<<<<<<
@@ -65914,28 +71305,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_38query(struct PyPetscObjectO
  */
   __pyx_v_cobj = NULL;
 
-  /* "PETSc/Object.pyx":130
+  /* "PETSc/Object.pyx":137
  *         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_ERR(10, 130, __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, 137, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Object.pyx":131
+  /* "PETSc/Object.pyx":138
  *         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_ERR(10, 131, __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 == ((int)-1))) __PYX_ERR(10, 138, __pyx_L1_error)
 
-  /* "PETSc/Object.pyx":132
+  /* "PETSc/Object.pyx":139
  *         name = str2bytes(name, &cval)
  *         CHKERR( PetscObjectQuery(self.obj[0], cval, &cobj) )
  *         if cobj == NULL: return None             # <<<<<<<<<<<<<<
@@ -65950,23 +71341,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_38query(struct PyPetscObjectO
     goto __pyx_L0;
   }
 
-  /* "PETSc/Object.pyx":133
+  /* "PETSc/Object.pyx":140
  *         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_ERR(10, 133, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_Object(__pyx_v_cobj)); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 140, __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_ERR(10, 133, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(10, 140, __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_ERR(10, 133, __pyx_L1_error)
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_8petsc4py_5PETSc_Object))))) __PYX_ERR(10, 140, __pyx_L1_error)
   __pyx_v_obj = ((struct PyPetscObjectObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "PETSc/Object.pyx":134
+  /* "PETSc/Object.pyx":141
  *         if cobj == NULL: return None
  *         cdef Object obj = subtype_Object(cobj)()
  *         obj.obj[0] = cobj             # <<<<<<<<<<<<<<
@@ -65975,7 +71366,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_38query(struct PyPetscObjectO
  */
   (__pyx_v_obj->obj[0]) = __pyx_v_cobj;
 
-  /* "PETSc/Object.pyx":135
+  /* "PETSc/Object.pyx":142
  *         cdef Object obj = subtype_Object(cobj)()
  *         obj.obj[0] = cobj
  *         PetscINCREF(obj.obj)             # <<<<<<<<<<<<<<
@@ -65984,7 +71375,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_38query(struct PyPetscObjectO
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_obj->obj);
 
-  /* "PETSc/Object.pyx":136
+  /* "PETSc/Object.pyx":143
  *         obj.obj[0] = cobj
  *         PetscINCREF(obj.obj)
  *         return obj             # <<<<<<<<<<<<<<
@@ -65996,7 +71387,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_38query(struct PyPetscObjectO
   __pyx_r = ((PyObject *)__pyx_v_obj);
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":127
+  /* "PETSc/Object.pyx":134
  *         CHKERR( PetscObjectCompose(self.obj[0], cval, cobj) )
  * 
  *     def query(self, name):             # <<<<<<<<<<<<<<
@@ -66018,7 +71409,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_38query(struct PyPetscObjectO
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":138
+/* "PETSc/Object.pyx":145
  *         return obj
  * 
  *     def incRef(self):             # <<<<<<<<<<<<<<
@@ -66027,23 +71418,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_38query(struct PyPetscObjectO
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_41incRef(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Object_40incRef[] = "Object.incRef(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_41incRef(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_43incRef(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Object_42incRef[] = "Object.incRef(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_43incRef(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("incRef (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("incRef", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "incRef", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_40incRef(((struct PyPetscObjectObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_42incRef(((struct PyPetscObjectObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_40incRef(struct PyPetscObjectObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_42incRef(struct PyPetscObjectObject *__pyx_v_self) {
   PetscObject __pyx_v_obj;
   PetscInt __pyx_v_refct;
   PyObject *__pyx_r = NULL;
@@ -66053,7 +71444,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_40incRef(struct PyPetscObject
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("incRef", 0);
 
-  /* "PETSc/Object.pyx":139
+  /* "PETSc/Object.pyx":146
  * 
  *     def incRef(self):
  *         cdef PetscObject obj = self.obj[0]             # <<<<<<<<<<<<<<
@@ -66062,7 +71453,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_40incRef(struct PyPetscObject
  */
   __pyx_v_obj = (__pyx_v_self->obj[0]);
 
-  /* "PETSc/Object.pyx":140
+  /* "PETSc/Object.pyx":147
  *     def incRef(self):
  *         cdef PetscObject obj = self.obj[0]
  *         cdef PetscInt refct = 0             # <<<<<<<<<<<<<<
@@ -66071,7 +71462,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_40incRef(struct PyPetscObject
  */
   __pyx_v_refct = 0;
 
-  /* "PETSc/Object.pyx":141
+  /* "PETSc/Object.pyx":148
  *         cdef PetscObject obj = self.obj[0]
  *         cdef PetscInt refct = 0
  *         if obj != NULL:             # <<<<<<<<<<<<<<
@@ -66081,25 +71472,25 @@ 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":142
+    /* "PETSc/Object.pyx":149
  *         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_ERR(10, 142, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectReference(__pyx_v_obj)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(10, 149, __pyx_L1_error)
 
-    /* "PETSc/Object.pyx":143
+    /* "PETSc/Object.pyx":150
  *         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_ERR(10, 143, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetReference(__pyx_v_obj, (&__pyx_v_refct))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(10, 150, __pyx_L1_error)
 
-    /* "PETSc/Object.pyx":141
+    /* "PETSc/Object.pyx":148
  *         cdef PetscObject obj = self.obj[0]
  *         cdef PetscInt refct = 0
  *         if obj != NULL:             # <<<<<<<<<<<<<<
@@ -66108,7 +71499,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_40incRef(struct PyPetscObject
  */
   }
 
-  /* "PETSc/Object.pyx":144
+  /* "PETSc/Object.pyx":151
  *             CHKERR( PetscObjectReference(obj) )
  *             CHKERR( PetscObjectGetReference(obj, &refct) )
  *         return (<long>refct)             # <<<<<<<<<<<<<<
@@ -66116,13 +71507,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_ERR(10, 144, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_long(((long)__pyx_v_refct)); if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 151, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":138
+  /* "PETSc/Object.pyx":145
  *         return obj
  * 
  *     def incRef(self):             # <<<<<<<<<<<<<<
@@ -66141,7 +71532,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_40incRef(struct PyPetscObject
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":146
+/* "PETSc/Object.pyx":153
  *         return (<long>refct)
  * 
  *     def decRef(self):             # <<<<<<<<<<<<<<
@@ -66150,23 +71541,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_40incRef(struct PyPetscObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_43decRef(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Object_42decRef[] = "Object.decRef(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_43decRef(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_45decRef(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Object_44decRef[] = "Object.decRef(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_45decRef(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("decRef (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("decRef", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "decRef", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_42decRef(((struct PyPetscObjectObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_44decRef(((struct PyPetscObjectObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_42decRef(struct PyPetscObjectObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_44decRef(struct PyPetscObjectObject *__pyx_v_self) {
   PetscObject __pyx_v_obj;
   PetscInt __pyx_v_refct;
   PyObject *__pyx_r = NULL;
@@ -66176,7 +71567,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_42decRef(struct PyPetscObject
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("decRef", 0);
 
-  /* "PETSc/Object.pyx":147
+  /* "PETSc/Object.pyx":154
  * 
  *     def decRef(self):
  *         cdef PetscObject obj = self.obj[0]             # <<<<<<<<<<<<<<
@@ -66185,7 +71576,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_42decRef(struct PyPetscObject
  */
   __pyx_v_obj = (__pyx_v_self->obj[0]);
 
-  /* "PETSc/Object.pyx":148
+  /* "PETSc/Object.pyx":155
  *     def decRef(self):
  *         cdef PetscObject obj = self.obj[0]
  *         cdef PetscInt refct = 0             # <<<<<<<<<<<<<<
@@ -66194,7 +71585,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_42decRef(struct PyPetscObject
  */
   __pyx_v_refct = 0;
 
-  /* "PETSc/Object.pyx":149
+  /* "PETSc/Object.pyx":156
  *         cdef PetscObject obj = self.obj[0]
  *         cdef PetscInt refct = 0
  *         if obj != NULL:             # <<<<<<<<<<<<<<
@@ -66204,25 +71595,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":150
+    /* "PETSc/Object.pyx":157
  *         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_ERR(10, 150, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetReference(__pyx_v_obj, (&__pyx_v_refct))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(10, 157, __pyx_L1_error)
 
-    /* "PETSc/Object.pyx":151
+    /* "PETSc/Object.pyx":158
  *         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_ERR(10, 151, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectDereference(__pyx_v_obj)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(10, 158, __pyx_L1_error)
 
-    /* "PETSc/Object.pyx":152
+    /* "PETSc/Object.pyx":159
  *             CHKERR( PetscObjectGetReference(obj, &refct) )
  *             CHKERR( PetscObjectDereference(obj) )
  *             if refct == 1: self.obj[0] = NULL             # <<<<<<<<<<<<<<
@@ -66234,7 +71625,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_42decRef(struct PyPetscObject
       (__pyx_v_self->obj[0]) = NULL;
     }
 
-    /* "PETSc/Object.pyx":153
+    /* "PETSc/Object.pyx":160
  *             CHKERR( PetscObjectDereference(obj) )
  *             if refct == 1: self.obj[0] = NULL
  *             refct -= 1             # <<<<<<<<<<<<<<
@@ -66243,7 +71634,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_42decRef(struct PyPetscObject
  */
     __pyx_v_refct = (__pyx_v_refct - 1);
 
-    /* "PETSc/Object.pyx":149
+    /* "PETSc/Object.pyx":156
  *         cdef PetscObject obj = self.obj[0]
  *         cdef PetscInt refct = 0
  *         if obj != NULL:             # <<<<<<<<<<<<<<
@@ -66252,7 +71643,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_42decRef(struct PyPetscObject
  */
   }
 
-  /* "PETSc/Object.pyx":154
+  /* "PETSc/Object.pyx":161
  *             if refct == 1: self.obj[0] = NULL
  *             refct -= 1
  *         return (<long>refct)             # <<<<<<<<<<<<<<
@@ -66260,13 +71651,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_ERR(10, 154, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_long(((long)__pyx_v_refct)); if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 161, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":146
+  /* "PETSc/Object.pyx":153
  *         return (<long>refct)
  * 
  *     def decRef(self):             # <<<<<<<<<<<<<<
@@ -66285,7 +71676,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_42decRef(struct PyPetscObject
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":156
+/* "PETSc/Object.pyx":163
  *         return (<long>refct)
  * 
  *     def getAttr(self, name):             # <<<<<<<<<<<<<<
@@ -66294,9 +71685,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_42decRef(struct PyPetscObject
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_45getAttr(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_47getAttr(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Object_46getAttr[] = "Object.getAttr(self, name)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_47getAttr(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -66309,6 +71700,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_45getAttr(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -66319,7 +71711,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_ERR(10, 156, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getAttr") < 0)) __PYX_ERR(10, 163, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -66330,20 +71722,20 @@ 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_ERR(10, 156, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getAttr", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(10, 163, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Object.getAttr", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_44getAttr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_v_name);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_46getAttr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_v_name);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_44getAttr(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_name) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_46getAttr(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_name) {
   const char *__pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -66351,7 +71743,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_44getAttr(struct PyPetscObjec
   __Pyx_RefNannySetupContext("getAttr", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/Object.pyx":157
+  /* "PETSc/Object.pyx":164
  * 
  *     def getAttr(self, name):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -66360,19 +71752,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_44getAttr(struct PyPetscObjec
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Object.pyx":158
+  /* "PETSc/Object.pyx":165
  *     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_ERR(10, 158, __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, 165, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Object.pyx":159
+  /* "PETSc/Object.pyx":166
  *         cdef const_char *cval = NULL
  *         name = str2bytes(name, &cval)
  *         return self.get_attr(<char*>cval)             # <<<<<<<<<<<<<<
@@ -66380,13 +71772,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_ERR(10, 159, __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, 166, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":156
+  /* "PETSc/Object.pyx":163
  *         return (<long>refct)
  * 
  *     def getAttr(self, name):             # <<<<<<<<<<<<<<
@@ -66406,7 +71798,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_44getAttr(struct PyPetscObjec
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":161
+/* "PETSc/Object.pyx":168
  *         return self.get_attr(<char*>cval)
  * 
  *     def setAttr(self, name, attr):             # <<<<<<<<<<<<<<
@@ -66415,9 +71807,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_44getAttr(struct PyPetscObjec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_47setAttr(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Object_46setAttr[] = "Object.setAttr(self, name, attr)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_47setAttr(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_49setAttr(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Object_48setAttr[] = "Object.setAttr(self, name, attr)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_49setAttr(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_v_attr = 0;
   PyObject *__pyx_r = 0;
@@ -66431,7 +71823,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_47setAttr(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -66440,14 +71834,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_47setAttr(PyObject *__pyx_v_s
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(10, 161, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setAttr", 1, 2, 2, 1); __PYX_ERR(10, 168, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setAttr") < 0)) __PYX_ERR(10, 161, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setAttr") < 0)) __PYX_ERR(10, 168, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -66460,20 +71855,20 @@ 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_ERR(10, 161, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setAttr", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(10, 168, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Object.setAttr", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_46setAttr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_v_name, __pyx_v_attr);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_48setAttr(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_v_name, __pyx_v_attr);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_46setAttr(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_attr) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_48setAttr(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_attr) {
   const char *__pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -66481,7 +71876,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_46setAttr(struct PyPetscObjec
   __Pyx_RefNannySetupContext("setAttr", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/Object.pyx":162
+  /* "PETSc/Object.pyx":169
  * 
  *     def setAttr(self, name, attr):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -66490,30 +71885,30 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_46setAttr(struct PyPetscObjec
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Object.pyx":163
+  /* "PETSc/Object.pyx":170
  *     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_ERR(10, 163, __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, 170, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Object.pyx":164
+  /* "PETSc/Object.pyx":171
  *         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_ERR(10, 164, __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, 171, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/Object.pyx":161
+  /* "PETSc/Object.pyx":168
  *         return self.get_attr(<char*>cval)
  * 
  *     def setAttr(self, name, attr):             # <<<<<<<<<<<<<<
@@ -66535,7 +71930,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_46setAttr(struct PyPetscObjec
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":166
+/* "PETSc/Object.pyx":173
  *         self.set_attr(<char*>cval, attr)
  * 
  *     def getDict(self):             # <<<<<<<<<<<<<<
@@ -66544,29 +71939,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_46setAttr(struct PyPetscObjec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_49getDict(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Object_48getDict[] = "Object.getDict(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_49getDict(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_51getDict(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Object_50getDict[] = "Object.getDict(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_51getDict(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getDict (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getDict", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getDict", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_48getDict(((struct PyPetscObjectObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_50getDict(((struct PyPetscObjectObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_48getDict(struct PyPetscObjectObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_50getDict(struct PyPetscObjectObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("getDict", 0);
 
-  /* "PETSc/Object.pyx":167
+  /* "PETSc/Object.pyx":174
  * 
  *     def getDict(self):
  *         return self.get_dict()             # <<<<<<<<<<<<<<
@@ -66574,13 +71969,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_ERR(10, 167, __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, 174, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":166
+  /* "PETSc/Object.pyx":173
  *         self.set_attr(<char*>cval, attr)
  * 
  *     def getDict(self):             # <<<<<<<<<<<<<<
@@ -66599,7 +71994,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_48getDict(struct PyPetscObjec
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":169
+/* "PETSc/Object.pyx":176
  *         return self.get_dict()
  * 
  *     def stateIncrease(self):             # <<<<<<<<<<<<<<
@@ -66608,28 +72003,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_48getDict(struct PyPetscObjec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_51stateIncrease(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Object_50stateIncrease[] = "Object.stateIncrease(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_51stateIncrease(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_53stateIncrease(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Object_52stateIncrease[] = "Object.stateIncrease(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_53stateIncrease(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("stateIncrease (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("stateIncrease", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "stateIncrease", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_50stateIncrease(((struct PyPetscObjectObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_52stateIncrease(((struct PyPetscObjectObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_50stateIncrease(struct PyPetscObjectObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_52stateIncrease(struct PyPetscObjectObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("stateIncrease", 0);
 
-  /* "PETSc/Object.pyx":170
+  /* "PETSc/Object.pyx":177
  * 
  *     def stateIncrease(self):
  *         PetscINCSTATE(self.obj)             # <<<<<<<<<<<<<<
@@ -66638,7 +72033,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_50stateIncrease(struct PyPets
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCSTATE(__pyx_v_self->obj);
 
-  /* "PETSc/Object.pyx":169
+  /* "PETSc/Object.pyx":176
  *         return self.get_dict()
  * 
  *     def stateIncrease(self):             # <<<<<<<<<<<<<<
@@ -66653,7 +72048,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_50stateIncrease(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":174
+/* "PETSc/Object.pyx":181
  *     # --- tab level ---
  * 
  *     def incrementTabLevel(self, tab, Object parent=None):             # <<<<<<<<<<<<<<
@@ -66662,9 +72057,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_50stateIncrease(struct PyPets
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_53incrementTabLevel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Object_52incrementTabLevel[] = "Object.incrementTabLevel(self, tab, Object parent=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_53incrementTabLevel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_55incrementTabLevel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Object_54incrementTabLevel[] = "Object.incrementTabLevel(self, tab, Object parent=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_55incrementTabLevel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_tab = 0;
   struct PyPetscObjectObject *__pyx_v_parent = 0;
   PyObject *__pyx_r = 0;
@@ -66679,7 +72074,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_53incrementTabLevel(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -66688,6 +72085,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_53incrementTabLevel(PyObject
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_tab)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_parent);
@@ -66695,11 +72093,12 @@ 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_ERR(10, 174, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "incrementTabLevel") < 0)) __PYX_ERR(10, 181, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -66710,14 +72109,14 @@ 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_ERR(10, 174, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("incrementTabLevel", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(10, 181, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_parent), __pyx_ptype_8petsc4py_5PETSc_Object, 1, "parent", 0))) __PYX_ERR(10, 181, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_54incrementTabLevel(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_v_tab, __pyx_v_parent);
 
   /* function exit code */
   goto __pyx_L0;
@@ -66728,7 +72127,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_53incrementTabLevel(PyObject
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_52incrementTabLevel(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_tab, struct PyPetscObjectObject *__pyx_v_parent) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_54incrementTabLevel(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_tab, struct PyPetscObjectObject *__pyx_v_parent) {
   PetscInt __pyx_v_ctab;
   PetscObject __pyx_v_cobj;
   PyObject *__pyx_r = NULL;
@@ -66739,17 +72138,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_52incrementTabLevel(struct Py
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("incrementTabLevel", 0);
 
-  /* "PETSc/Object.pyx":175
+  /* "PETSc/Object.pyx":182
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(10, 175, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_tab); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(10, 182, __pyx_L1_error)
   __pyx_v_ctab = __pyx_t_1;
 
-  /* "PETSc/Object.pyx":176
+  /* "PETSc/Object.pyx":183
  *     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]             # <<<<<<<<<<<<<<
@@ -66764,16 +72163,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_52incrementTabLevel(struct Py
   }
   __pyx_v_cobj = __pyx_t_2;
 
-  /* "PETSc/Object.pyx":177
+  /* "PETSc/Object.pyx":184
  *         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_ERR(10, 177, __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 == ((int)-1))) __PYX_ERR(10, 184, __pyx_L1_error)
 
-  /* "PETSc/Object.pyx":174
+  /* "PETSc/Object.pyx":181
  *     # --- tab level ---
  * 
  *     def incrementTabLevel(self, tab, Object parent=None):             # <<<<<<<<<<<<<<
@@ -66793,7 +72192,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_52incrementTabLevel(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":179
+/* "PETSc/Object.pyx":186
  *         CHKERR( PetscObjectIncrementTabLevel(self.obj[0], cobj, ctab) )
  * 
  *     def setTabLevel(self, level):             # <<<<<<<<<<<<<<
@@ -66802,9 +72201,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_52incrementTabLevel(struct Py
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_55setTabLevel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_57setTabLevel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Object_56setTabLevel[] = "Object.setTabLevel(self, level)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_57setTabLevel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_level = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -66817,6 +72216,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_55setTabLevel(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -66827,7 +72227,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_ERR(10, 179, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTabLevel") < 0)) __PYX_ERR(10, 186, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -66838,20 +72238,20 @@ 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_ERR(10, 179, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setTabLevel", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(10, 186, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Object.setTabLevel", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_54setTabLevel(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_v_level);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_56setTabLevel(((struct PyPetscObjectObject *)__pyx_v_self), __pyx_v_level);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_54setTabLevel(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_level) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_56setTabLevel(struct PyPetscObjectObject *__pyx_v_self, PyObject *__pyx_v_level) {
   PetscInt __pyx_v_clevel;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -66859,26 +72259,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_54setTabLevel(struct PyPetscO
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setTabLevel", 0);
 
-  /* "PETSc/Object.pyx":180
+  /* "PETSc/Object.pyx":187
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(10, 180, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(10, 187, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
-  /* "PETSc/Object.pyx":181
+  /* "PETSc/Object.pyx":188
  *     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_ERR(10, 181, __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 == ((int)-1))) __PYX_ERR(10, 188, __pyx_L1_error)
 
-  /* "PETSc/Object.pyx":179
+  /* "PETSc/Object.pyx":186
  *         CHKERR( PetscObjectIncrementTabLevel(self.obj[0], cobj, ctab) )
  * 
  *     def setTabLevel(self, level):             # <<<<<<<<<<<<<<
@@ -66898,7 +72298,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_54setTabLevel(struct PyPetscO
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":183
+/* "PETSc/Object.pyx":190
  *         CHKERR( PetscObjectSetTabLevel(self.obj[0], clevel) )
  * 
  *     def getTabLevel(self):             # <<<<<<<<<<<<<<
@@ -66907,23 +72307,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_54setTabLevel(struct PyPetscO
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_57getTabLevel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Object_56getTabLevel[] = "Object.getTabLevel(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_57getTabLevel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_59getTabLevel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Object_58getTabLevel[] = "Object.getTabLevel(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Object_59getTabLevel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getTabLevel (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getTabLevel", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getTabLevel", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_56getTabLevel(((struct PyPetscObjectObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Object_58getTabLevel(((struct PyPetscObjectObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_56getTabLevel(struct PyPetscObjectObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_58getTabLevel(struct PyPetscObjectObject *__pyx_v_self) {
   PetscInt __pyx_v_clevel;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -66931,7 +72331,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_56getTabLevel(struct PyPetscO
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getTabLevel", 0);
 
-  /* "PETSc/Object.pyx":184
+  /* "PETSc/Object.pyx":191
  * 
  *     def getTabLevel(self):
  *         cdef PetscInt clevel = 0             # <<<<<<<<<<<<<<
@@ -66940,16 +72340,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_56getTabLevel(struct PyPetscO
  */
   __pyx_v_clevel = 0;
 
-  /* "PETSc/Object.pyx":185
+  /* "PETSc/Object.pyx":192
  *     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_ERR(10, 185, __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 == ((int)-1))) __PYX_ERR(10, 192, __pyx_L1_error)
 
-  /* "PETSc/Object.pyx":186
+  /* "PETSc/Object.pyx":193
  *         cdef PetscInt clevel = 0
  *         CHKERR( PetscObjectGetTabLevel(self.obj[0], &clevel) )
  *         return toInt(clevel)             # <<<<<<<<<<<<<<
@@ -66957,13 +72357,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_ERR(10, 186, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_clevel); if (unlikely(!__pyx_t_2)) __PYX_ERR(10, 193, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":183
+  /* "PETSc/Object.pyx":190
  *         CHKERR( PetscObjectSetTabLevel(self.obj[0], clevel) )
  * 
  *     def getTabLevel(self):             # <<<<<<<<<<<<<<
@@ -66982,7 +72382,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_56getTabLevel(struct PyPetscO
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":191
+/* "PETSc/Object.pyx":198
  * 
  *     property type:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -67011,7 +72411,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4type___get__(struct PyPetscO
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Object.pyx":192
+  /* "PETSc/Object.pyx":199
  *     property type:
  *         def __get__(self):
  *             return self.getType()             # <<<<<<<<<<<<<<
@@ -67019,10 +72419,10 @@ 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_ERR(10, 192, __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, 199, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -67032,10 +72432,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_ERR(10, 192, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 199, __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(10, 192, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 199, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -67043,7 +72443,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4type___get__(struct PyPetscO
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":191
+  /* "PETSc/Object.pyx":198
  * 
  *     property type:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -67064,7 +72464,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4type___get__(struct PyPetscO
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":193
+/* "PETSc/Object.pyx":200
  *         def __get__(self):
  *             return self.getType()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -67094,17 +72494,17 @@ static int __pyx_pf_8petsc4py_5PETSc_6Object_4type_2__set__(struct PyPetscObject
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/Object.pyx":194
+  /* "PETSc/Object.pyx":201
  *             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_ERR(10, 194, __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, 201, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -67114,23 +72514,41 @@ 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_ERR(10, 194, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 201, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(10, 194, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 201, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 201, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(10, 201, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 201, __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":193
+  /* "PETSc/Object.pyx":200
  *         def __get__(self):
  *             return self.getType()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -67153,7 +72571,7 @@ static int __pyx_pf_8petsc4py_5PETSc_6Object_4type_2__set__(struct PyPetscObject
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":197
+/* "PETSc/Object.pyx":204
  * 
  *     property prefix:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -67182,7 +72600,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_6prefix___get__(struct PyPets
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Object.pyx":198
+  /* "PETSc/Object.pyx":205
  *     property prefix:
  *         def __get__(self):
  *             return self.getOptionsPrefix()             # <<<<<<<<<<<<<<
@@ -67190,10 +72608,10 @@ 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_ERR(10, 198, __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, 205, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -67203,10 +72621,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_ERR(10, 198, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 205, __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(10, 198, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 205, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -67214,7 +72632,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_6prefix___get__(struct PyPets
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":197
+  /* "PETSc/Object.pyx":204
  * 
  *     property prefix:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -67235,7 +72653,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_6prefix___get__(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":199
+/* "PETSc/Object.pyx":206
  *         def __get__(self):
  *             return self.getOptionsPrefix()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -67265,17 +72683,17 @@ static int __pyx_pf_8petsc4py_5PETSc_6Object_6prefix_2__set__(struct PyPetscObje
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/Object.pyx":200
+  /* "PETSc/Object.pyx":207
  *             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_ERR(10, 200, __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, 207, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -67285,23 +72703,41 @@ 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_ERR(10, 200, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 207, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(10, 200, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 207, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 207, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(10, 207, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 207, __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":199
+  /* "PETSc/Object.pyx":206
  *         def __get__(self):
  *             return self.getOptionsPrefix()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -67324,7 +72760,7 @@ static int __pyx_pf_8petsc4py_5PETSc_6Object_6prefix_2__set__(struct PyPetscObje
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":203
+/* "PETSc/Object.pyx":210
  * 
  *     property comm:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -67353,7 +72789,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4comm___get__(struct PyPetscO
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Object.pyx":204
+  /* "PETSc/Object.pyx":211
  *     property comm:
  *         def __get__(self):
  *             return self.getComm()             # <<<<<<<<<<<<<<
@@ -67361,10 +72797,10 @@ 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_ERR(10, 204, __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, 211, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -67374,10 +72810,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_ERR(10, 204, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 211, __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(10, 204, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 211, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -67385,7 +72821,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4comm___get__(struct PyPetscO
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":203
+  /* "PETSc/Object.pyx":210
  * 
  *     property comm:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -67406,7 +72842,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4comm___get__(struct PyPetscO
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":207
+/* "PETSc/Object.pyx":214
  * 
  *     property name:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -67435,7 +72871,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4name___get__(struct PyPetscO
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Object.pyx":208
+  /* "PETSc/Object.pyx":215
  *     property name:
  *         def __get__(self):
  *             return self.getName()             # <<<<<<<<<<<<<<
@@ -67443,10 +72879,10 @@ 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_ERR(10, 208, __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, 215, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -67456,10 +72892,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_ERR(10, 208, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 215, __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(10, 208, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 215, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -67467,7 +72903,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4name___get__(struct PyPetscO
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":207
+  /* "PETSc/Object.pyx":214
  * 
  *     property name:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -67488,7 +72924,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_4name___get__(struct PyPetscO
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":209
+/* "PETSc/Object.pyx":216
  *         def __get__(self):
  *             return self.getName()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -67518,17 +72954,17 @@ static int __pyx_pf_8petsc4py_5PETSc_6Object_4name_2__set__(struct PyPetscObject
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/Object.pyx":210
+  /* "PETSc/Object.pyx":217
  *             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_ERR(10, 210, __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, 217, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -67538,23 +72974,41 @@ 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_ERR(10, 210, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 217, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(10, 210, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 217, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 217, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(10, 217, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 217, __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":209
+  /* "PETSc/Object.pyx":216
  *         def __get__(self):
  *             return self.getName()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -67577,7 +73031,7 @@ static int __pyx_pf_8petsc4py_5PETSc_6Object_4name_2__set__(struct PyPetscObject
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":213
+/* "PETSc/Object.pyx":220
  * 
  *     property classid:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -67606,7 +73060,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_7classid___get__(struct PyPet
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Object.pyx":214
+  /* "PETSc/Object.pyx":221
  *     property classid:
  *         def __get__(self):
  *             return self.getClassId()             # <<<<<<<<<<<<<<
@@ -67614,10 +73068,10 @@ 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_ERR(10, 214, __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, 221, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -67627,10 +73081,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_ERR(10, 214, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 221, __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(10, 214, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 221, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -67638,7 +73092,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_7classid___get__(struct PyPet
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":213
+  /* "PETSc/Object.pyx":220
  * 
  *     property classid:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -67659,7 +73113,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_7classid___get__(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":217
+/* "PETSc/Object.pyx":224
  * 
  *     property klass:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -67688,7 +73142,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_5klass___get__(struct PyPetsc
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Object.pyx":218
+  /* "PETSc/Object.pyx":225
  *     property klass:
  *         def __get__(self):
  *             return self.getClassName()             # <<<<<<<<<<<<<<
@@ -67696,10 +73150,10 @@ 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_ERR(10, 218, __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, 225, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -67709,10 +73163,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_ERR(10, 218, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 225, __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(10, 218, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 225, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -67720,7 +73174,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_5klass___get__(struct PyPetsc
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":217
+  /* "PETSc/Object.pyx":224
  * 
  *     property klass:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -67741,7 +73195,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_5klass___get__(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":221
+/* "PETSc/Object.pyx":228
  * 
  *     property refcount:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -67770,7 +73224,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_8refcount___get__(struct PyPe
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Object.pyx":222
+  /* "PETSc/Object.pyx":229
  *     property refcount:
  *         def __get__(self):
  *             return self.getRefCount()             # <<<<<<<<<<<<<<
@@ -67778,10 +73232,10 @@ 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_ERR(10, 222, __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, 229, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -67791,10 +73245,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_ERR(10, 222, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 229, __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(10, 222, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 229, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -67802,7 +73256,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_8refcount___get__(struct PyPe
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":221
+  /* "PETSc/Object.pyx":228
  * 
  *     property refcount:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -67823,7 +73277,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_8refcount___get__(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":227
+/* "PETSc/Object.pyx":234
  * 
  *     property handle:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -67851,7 +73305,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_6handle___get__(struct PyPets
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Object.pyx":228
+  /* "PETSc/Object.pyx":235
  *     property handle:
  *         def __get__(self):
  *             cdef PetscObject obj = self.obj[0]             # <<<<<<<<<<<<<<
@@ -67860,7 +73314,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_6handle___get__(struct PyPets
  */
   __pyx_v_obj = (__pyx_v_self->obj[0]);
 
-  /* "PETSc/Object.pyx":229
+  /* "PETSc/Object.pyx":236
  *         def __get__(self):
  *             cdef PetscObject obj = self.obj[0]
  *             return PyLong_FromVoidPtr(<void*>obj)             # <<<<<<<<<<<<<<
@@ -67868,13 +73322,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_ERR(10, 229, __pyx_L1_error)
+  __pyx_t_1 = PyLong_FromVoidPtr(((void *)__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":227
+  /* "PETSc/Object.pyx":234
  * 
  *     property handle:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -67893,7 +73347,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_6handle___get__(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":234
+/* "PETSc/Object.pyx":241
  * 
  *     property fortran:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -67921,7 +73375,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_7fortran___get__(struct PyPet
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Object.pyx":235
+  /* "PETSc/Object.pyx":242
  *     property fortran:
  *         def __get__(self):
  *             cdef PetscObject obj = self.obj[0]             # <<<<<<<<<<<<<<
@@ -67930,7 +73384,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Object_7fortran___get__(struct PyPet
  */
   __pyx_v_obj = (__pyx_v_self->obj[0]);
 
-  /* "PETSc/Object.pyx":236
+  /* "PETSc/Object.pyx":243
  *         def __get__(self):
  *             cdef PetscObject obj = self.obj[0]
  *             return Object_toFortran(obj)             # <<<<<<<<<<<<<<
@@ -67938,13 +73392,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_ERR(10, 236, __pyx_L1_error)
+  __pyx_t_1 = PyInt_FromSsize_t(__pyx_f_8petsc4py_5PETSc_Object_toFortran(__pyx_v_obj)); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 243, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":234
+  /* "PETSc/Object.pyx":241
  * 
  *     property fortran:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -68184,7 +73638,7 @@ static CYTHON_INLINE void __pyx_f_8petsc4py_5PETSc_TypeEnableGC(PyTypeObject *__
   __Pyx_RefNannyFinishContext();
 }
 
-/* "PETSc/Object.pyx":245
+/* "PETSc/Object.pyx":252
  * __type_registry__ = type_registry
  * 
  * cdef int PyPetscType_Register(int classid, type cls) except -1:             # <<<<<<<<<<<<<<
@@ -68204,19 +73658,19 @@ static int __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(int __pyx_v_classid, Py
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("PyPetscType_Register", 0);
 
-  /* "PETSc/Object.pyx":247
+  /* "PETSc/Object.pyx":254
  * 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_ERR(10, 247, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_long(((long)__pyx_v_classid)); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 254, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_key = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/Object.pyx":248
+  /* "PETSc/Object.pyx":255
  *     global type_registry
  *     cdef object key = <long>classid
  *     cdef object value = cls             # <<<<<<<<<<<<<<
@@ -68226,7 +73680,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":249
+  /* "PETSc/Object.pyx":256
  *     cdef object key = <long>classid
  *     cdef object value = cls
  *     cdef const_char *dummy = NULL             # <<<<<<<<<<<<<<
@@ -68235,7 +73689,7 @@ static int __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(int __pyx_v_classid, Py
  */
   __pyx_v_dummy = NULL;
 
-  /* "PETSc/Object.pyx":250
+  /* "PETSc/Object.pyx":257
  *     cdef object value = cls
  *     cdef const_char *dummy = NULL
  *     if key not in type_registry:             # <<<<<<<<<<<<<<
@@ -68244,13 +73698,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_ERR(10, 250, __pyx_L1_error)
+    __PYX_ERR(10, 257, __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_2 = (__Pyx_PyDict_ContainsTF(__pyx_v_key, __pyx_v_8petsc4py_5PETSc_type_registry, Py_NE)); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(10, 257, __pyx_L1_error)
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Object.pyx":251
+    /* "PETSc/Object.pyx":258
  *     cdef const_char *dummy = NULL
  *     if key not in type_registry:
  *         type_registry[key] = cls             # <<<<<<<<<<<<<<
@@ -68259,36 +73713,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_ERR(10, 251, __pyx_L1_error)
+      __PYX_ERR(10, 258, __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)
+    if (unlikely(PyDict_SetItem(__pyx_v_8petsc4py_5PETSc_type_registry, __pyx_v_key, ((PyObject *)__pyx_v_cls)) < 0)) __PYX_ERR(10, 258, __pyx_L1_error)
 
-    /* "PETSc/Object.pyx":252
+    /* "PETSc/Object.pyx":259
  *     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_ERR(10, 252, __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, 259, __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_ERR(10, 252, __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, 259, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "PETSc/Object.pyx":253
+    /* "PETSc/Object.pyx":260
  *         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_ERR(10, 252, __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, 259, __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":254
+    /* "PETSc/Object.pyx":261
  *         reg_LogClass(str2bytes(cls.__name__, &dummy),
  *                      <PetscLogClass>classid)
  *         TypeEnableGC(<PyTypeObject*>cls)             # <<<<<<<<<<<<<<
@@ -68297,7 +73751,7 @@ static int __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(int __pyx_v_classid, Py
  */
     __pyx_f_8petsc4py_5PETSc_TypeEnableGC(((PyTypeObject *)__pyx_v_cls));
 
-    /* "PETSc/Object.pyx":250
+    /* "PETSc/Object.pyx":257
  *     cdef object value = cls
  *     cdef const_char *dummy = NULL
  *     if key not in type_registry:             # <<<<<<<<<<<<<<
@@ -68307,7 +73761,7 @@ static int __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(int __pyx_v_classid, Py
     goto __pyx_L3;
   }
 
-  /* "PETSc/Object.pyx":256
+  /* "PETSc/Object.pyx":263
  *         TypeEnableGC(<PyTypeObject*>cls)
  *     else:
  *         value = type_registry[key]             # <<<<<<<<<<<<<<
@@ -68317,14 +73771,14 @@ static int __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(int __pyx_v_classid, Py
   /*else*/ {
     if (unlikely(__pyx_v_8petsc4py_5PETSc_type_registry == Py_None)) {
       PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-      __PYX_ERR(10, 256, __pyx_L1_error)
+      __PYX_ERR(10, 263, __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_t_1 = __Pyx_PyDict_GetItem(__pyx_v_8petsc4py_5PETSc_type_registry, __pyx_v_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 263, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_value, __pyx_t_1);
     __pyx_t_1 = 0;
 
-    /* "PETSc/Object.pyx":257
+    /* "PETSc/Object.pyx":264
  *     else:
  *         value = type_registry[key]
  *         if cls is not value:             # <<<<<<<<<<<<<<
@@ -68335,14 +73789,14 @@ static int __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(int __pyx_v_classid, Py
     __pyx_t_2 = (__pyx_t_3 != 0);
     if (__pyx_t_2) {
 
-      /* "PETSc/Object.pyx":260
+      /* "PETSc/Object.pyx":267
  *             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_ERR(10, 260, __pyx_L1_error)
+      __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 267, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_INCREF(__pyx_v_key);
       __Pyx_GIVEREF(__pyx_v_key);
@@ -68353,30 +73807,30 @@ 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_ERR(10, 260, __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, 267, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-      /* "PETSc/Object.pyx":258
+      /* "PETSc/Object.pyx":265
  *         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_ERR(10, 258, __pyx_L1_error)
+      __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 265, __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_ERR(10, 258, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(10, 265, __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_ERR(10, 258, __pyx_L1_error)
+      __PYX_ERR(10, 265, __pyx_L1_error)
 
-      /* "PETSc/Object.pyx":257
+      /* "PETSc/Object.pyx":264
  *     else:
  *         value = type_registry[key]
  *         if cls is not value:             # <<<<<<<<<<<<<<
@@ -68387,7 +73841,7 @@ static int __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(int __pyx_v_classid, Py
   }
   __pyx_L3:;
 
-  /* "PETSc/Object.pyx":261
+  /* "PETSc/Object.pyx":268
  *                 "key: %d, cannot register: %s, " \
  *                 "already registered: %s" % (key, cls, value))
  *     return 0             # <<<<<<<<<<<<<<
@@ -68397,7 +73851,7 @@ static int __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(int __pyx_v_classid, Py
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":245
+  /* "PETSc/Object.pyx":252
  * __type_registry__ = type_registry
  * 
  * cdef int PyPetscType_Register(int classid, type cls) except -1:             # <<<<<<<<<<<<<<
@@ -68418,7 +73872,7 @@ static int __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(int __pyx_v_classid, Py
   return __pyx_r;
 }
 
-/* "PETSc/Object.pyx":263
+/* "PETSc/Object.pyx":270
  *     return 0
  * 
  * cdef type PyPetscType_Lookup(int classid):             # <<<<<<<<<<<<<<
@@ -68440,19 +73894,19 @@ static PyTypeObject *__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup(int __pyx_v_cla
   PyObject *__pyx_t_7 = NULL;
   __Pyx_RefNannySetupContext("PyPetscType_Lookup", 0);
 
-  /* "PETSc/Object.pyx":265
+  /* "PETSc/Object.pyx":272
  * 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_ERR(10, 265, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_long(((long)__pyx_v_classid)); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 272, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_key = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/Object.pyx":266
+  /* "PETSc/Object.pyx":273
  *     global type_registry
  *     cdef object key = <long>classid
  *     cdef type cls = Object             # <<<<<<<<<<<<<<
@@ -68462,7 +73916,7 @@ static PyTypeObject *__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup(int __pyx_v_cla
   __Pyx_INCREF(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Object));
   __pyx_v_cls = __pyx_ptype_8petsc4py_5PETSc_Object;
 
-  /* "PETSc/Object.pyx":267
+  /* "PETSc/Object.pyx":274
  *     cdef object key = <long>classid
  *     cdef type cls = Object
  *     try:             # <<<<<<<<<<<<<<
@@ -68478,7 +73932,7 @@ static PyTypeObject *__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup(int __pyx_v_cla
     __Pyx_XGOTREF(__pyx_t_4);
     /*try:*/ {
 
-      /* "PETSc/Object.pyx":268
+      /* "PETSc/Object.pyx":275
  *     cdef type cls = Object
  *     try:
  *         cls = type_registry[key]             # <<<<<<<<<<<<<<
@@ -68487,15 +73941,15 @@ static PyTypeObject *__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup(int __pyx_v_cla
  */
       if (unlikely(__pyx_v_8petsc4py_5PETSc_type_registry == Py_None)) {
         PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
-        __PYX_ERR(10, 268, __pyx_L3_error)
+        __PYX_ERR(10, 275, __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_t_1 = __Pyx_PyDict_GetItem(__pyx_v_8petsc4py_5PETSc_type_registry, __pyx_v_key); if (unlikely(!__pyx_t_1)) __PYX_ERR(10, 275, __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_ERR(10, 268, __pyx_L3_error)
+      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, 275, __pyx_L3_error)
       __Pyx_DECREF_SET(__pyx_v_cls, ((PyTypeObject*)__pyx_t_1));
       __pyx_t_1 = 0;
 
-      /* "PETSc/Object.pyx":267
+      /* "PETSc/Object.pyx":274
  *     cdef object key = <long>classid
  *     cdef type cls = Object
  *     try:             # <<<<<<<<<<<<<<
@@ -68506,12 +73960,11 @@ static PyTypeObject *__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup(int __pyx_v_cla
     __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;
+    goto __pyx_L8_try_end;
     __pyx_L3_error:;
-    __Pyx_PyThreadState_assign
     __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "PETSc/Object.pyx":269
+    /* "PETSc/Object.pyx":276
  *     try:
  *         cls = type_registry[key]
  *     except KeyError:             # <<<<<<<<<<<<<<
@@ -68521,12 +73974,12 @@ static PyTypeObject *__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup(int __pyx_v_cla
     __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_ERR(10, 269, __pyx_L5_except_error)
+      if (__Pyx_GetException(&__pyx_t_1, &__pyx_t_6, &__pyx_t_7) < 0) __PYX_ERR(10, 276, __pyx_L5_except_error)
       __Pyx_GOTREF(__pyx_t_1);
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_GOTREF(__pyx_t_7);
 
-      /* "PETSc/Object.pyx":270
+      /* "PETSc/Object.pyx":277
  *         cls = type_registry[key]
  *     except KeyError:
  *         cls = Object             # <<<<<<<<<<<<<<
@@ -68543,29 +73996,27 @@ static PyTypeObject *__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup(int __pyx_v_cla
     goto __pyx_L5_except_error;
     __pyx_L5_except_error:;
 
-    /* "PETSc/Object.pyx":267
+    /* "PETSc/Object.pyx":274
  *     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);
     __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
-    __pyx_L10_try_end:;
+    __pyx_L8_try_end:;
   }
 
-  /* "PETSc/Object.pyx":271
+  /* "PETSc/Object.pyx":278
  *     except KeyError:
  *         cls = Object
  *     return cls             # <<<<<<<<<<<<<<
@@ -68577,7 +74028,7 @@ static PyTypeObject *__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup(int __pyx_v_cla
   __pyx_r = __pyx_v_cls;
   goto __pyx_L0;
 
-  /* "PETSc/Object.pyx":263
+  /* "PETSc/Object.pyx":270
  *     return 0
  * 
  * cdef type PyPetscType_Lookup(int classid):             # <<<<<<<<<<<<<<
@@ -68600,7 +74051,7 @@ static PyTypeObject *__pyx_f_8petsc4py_5PETSc_PyPetscType_Lookup(int __pyx_v_cla
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":83
+/* "PETSc/Viewer.pyx":82
  *     #
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -68629,7 +74080,7 @@ static int __pyx_pf_8petsc4py_5PETSc_6Viewer___cinit__(struct PyPetscViewerObjec
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "PETSc/Viewer.pyx":84
+  /* "PETSc/Viewer.pyx":83
  * 
  *     def __cinit__(self):
  *         self.obj = <PetscObject*> &self.vwr             # <<<<<<<<<<<<<<
@@ -68638,7 +74089,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":85
+  /* "PETSc/Viewer.pyx":84
  *     def __cinit__(self):
  *         self.obj = <PetscObject*> &self.vwr
  *         self.vwr = NULL             # <<<<<<<<<<<<<<
@@ -68647,7 +74098,7 @@ static int __pyx_pf_8petsc4py_5PETSc_6Viewer___cinit__(struct PyPetscViewerObjec
  */
   __pyx_v_self->vwr = NULL;
 
-  /* "PETSc/Viewer.pyx":83
+  /* "PETSc/Viewer.pyx":82
  *     #
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -68661,7 +74112,7 @@ static int __pyx_pf_8petsc4py_5PETSc_6Viewer___cinit__(struct PyPetscViewerObjec
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":87
+/* "PETSc/Viewer.pyx":86
  *         self.vwr = NULL
  * 
  *     def __call__(self, Object obj):             # <<<<<<<<<<<<<<
@@ -68684,6 +74135,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_3__call__(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -68694,7 +74146,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_ERR(27, 87, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__call__") < 0)) __PYX_ERR(27, 86, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -68705,13 +74157,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_ERR(27, 87, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__call__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 86, __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_ERR(27, 87, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_obj), __pyx_ptype_8petsc4py_5PETSc_Object, 0, "obj", 0))) __PYX_ERR(27, 86, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_2__call__(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_obj);
 
   /* function exit code */
@@ -68729,7 +74181,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_2__call__(struct PyPetscViewe
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("__call__", 0);
 
-  /* "PETSc/Viewer.pyx":88
+  /* "PETSc/Viewer.pyx":87
  * 
  *     def __call__(self, Object obj):
  *         assert obj.obj != NULL             # <<<<<<<<<<<<<<
@@ -68740,21 +74192,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_ERR(27, 88, __pyx_L1_error)
+      __PYX_ERR(27, 87, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/Viewer.pyx":89
+  /* "PETSc/Viewer.pyx":88
  *     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_ERR(27, 89, __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 == ((int)-1))) __PYX_ERR(27, 88, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":87
+  /* "PETSc/Viewer.pyx":86
  *         self.vwr = NULL
  * 
  *     def __call__(self, Object obj):             # <<<<<<<<<<<<<<
@@ -68774,7 +74226,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_2__call__(struct PyPetscViewe
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":93
+/* "PETSc/Viewer.pyx":92
  *     #
  * 
  *     def view(self, obj=None):             # <<<<<<<<<<<<<<
@@ -68799,6 +74251,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_5view(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -68811,11 +74264,12 @@ 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_ERR(27, 93, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(27, 92, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -68824,7 +74278,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_ERR(27, 93, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 92, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Viewer.view", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -68845,7 +74299,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_4view(struct PyPetscViewerObj
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("view", 0);
 
-  /* "PETSc/Viewer.pyx":94
+  /* "PETSc/Viewer.pyx":93
  * 
  *     def view(self, obj=None):
  *         if obj is None:             # <<<<<<<<<<<<<<
@@ -68856,16 +74310,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_4view(struct PyPetscViewerObj
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Viewer.pyx":95
+    /* "PETSc/Viewer.pyx":94
  *     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_ERR(27, 95, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerView(__pyx_v_self->vwr, NULL)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(27, 94, __pyx_L1_error)
 
-    /* "PETSc/Viewer.pyx":94
+    /* "PETSc/Viewer.pyx":93
  * 
  *     def view(self, obj=None):
  *         if obj is None:             # <<<<<<<<<<<<<<
@@ -68875,7 +74329,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_4view(struct PyPetscViewerObj
     goto __pyx_L3;
   }
 
-  /* "PETSc/Viewer.pyx":96
+  /* "PETSc/Viewer.pyx":95
  *         if obj is None:
  *             CHKERR( PetscViewerView(self.vwr, NULL) )
  *         elif isinstance(obj, Viewer):             # <<<<<<<<<<<<<<
@@ -68886,17 +74340,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_4view(struct PyPetscViewerObj
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/Viewer.pyx":97
+    /* "PETSc/Viewer.pyx":96
  *             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_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)
+    if (!(likely(__Pyx_TypeTest(__pyx_v_obj, __pyx_ptype_8petsc4py_5PETSc_Viewer)))) __PYX_ERR(27, 96, __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 == ((int)-1))) __PYX_ERR(27, 96, __pyx_L1_error)
 
-    /* "PETSc/Viewer.pyx":96
+    /* "PETSc/Viewer.pyx":95
  *         if obj is None:
  *             CHKERR( PetscViewerView(self.vwr, NULL) )
  *         elif isinstance(obj, Viewer):             # <<<<<<<<<<<<<<
@@ -68906,7 +74360,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_4view(struct PyPetscViewerObj
     goto __pyx_L3;
   }
 
-  /* "PETSc/Viewer.pyx":99
+  /* "PETSc/Viewer.pyx":98
  *             CHKERR( PetscViewerView(self.vwr, (<Viewer?>obj).vwr) )
  *         else:
  *             assert (<Object?>obj).obj != NULL             # <<<<<<<<<<<<<<
@@ -68916,27 +74370,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_4view(struct PyPetscViewerObj
   /*else*/ {
     #ifndef CYTHON_WITHOUT_ASSERTIONS
     if (unlikely(!Py_OptimizeFlag)) {
-      if (!(likely(__Pyx_TypeTest(__pyx_v_obj, __pyx_ptype_8petsc4py_5PETSc_Object)))) __PYX_ERR(27, 99, __pyx_L1_error)
+      if (!(likely(__Pyx_TypeTest(__pyx_v_obj, __pyx_ptype_8petsc4py_5PETSc_Object)))) __PYX_ERR(27, 98, __pyx_L1_error)
       if (unlikely(!((((struct PyPetscObjectObject *)__pyx_v_obj)->obj != NULL) != 0))) {
         PyErr_SetNone(PyExc_AssertionError);
-        __PYX_ERR(27, 99, __pyx_L1_error)
+        __PYX_ERR(27, 98, __pyx_L1_error)
       }
     }
     #endif
 
-    /* "PETSc/Viewer.pyx":100
+    /* "PETSc/Viewer.pyx":99
  *         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_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)
+    if (!(likely(__Pyx_TypeTest(__pyx_v_obj, __pyx_ptype_8petsc4py_5PETSc_Object)))) __PYX_ERR(27, 99, __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 == ((int)-1))) __PYX_ERR(27, 99, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/Viewer.pyx":93
+  /* "PETSc/Viewer.pyx":92
  *     #
  * 
  *     def view(self, obj=None):             # <<<<<<<<<<<<<<
@@ -68956,7 +74410,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_4view(struct PyPetscViewerObj
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":102
+/* "PETSc/Viewer.pyx":101
  *             CHKERR( PetscObjectView((<Object?>obj).obj[0], self.vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -68987,16 +74441,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_6destroy(struct PyPetscViewer
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("destroy", 0);
 
-  /* "PETSc/Viewer.pyx":103
+  /* "PETSc/Viewer.pyx":102
  * 
  *     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_ERR(27, 103, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerDestroy((&__pyx_v_self->vwr))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(27, 102, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":104
+  /* "PETSc/Viewer.pyx":103
  *     def destroy(self):
  *         CHKERR( PetscViewerDestroy(&self.vwr) )
  *         return self             # <<<<<<<<<<<<<<
@@ -69008,7 +74462,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_6destroy(struct PyPetscViewer
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":102
+  /* "PETSc/Viewer.pyx":101
  *             CHKERR( PetscObjectView((<Object?>obj).obj[0], self.vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -69026,7 +74480,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_6destroy(struct PyPetscViewer
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":106
+/* "PETSc/Viewer.pyx":105
  *         return self
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
@@ -69051,6 +74505,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_9create(PyObject *__pyx_v_sel
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -69063,11 +74518,12 @@ 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_ERR(27, 106, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(27, 105, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -69076,7 +74532,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_ERR(27, 106, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 105, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Viewer.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -69098,17 +74554,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_8create(struct PyPetscViewerO
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("create", 0);
 
-  /* "PETSc/Viewer.pyx":107
+  /* "PETSc/Viewer.pyx":106
  * 
  *     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_ERR(27, 107, __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, 106, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Viewer.pyx":108
+  /* "PETSc/Viewer.pyx":107
  *     def create(self, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscViewer newvwr = NULL             # <<<<<<<<<<<<<<
@@ -69117,16 +74573,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_8create(struct PyPetscViewerO
  */
   __pyx_v_newvwr = NULL;
 
-  /* "PETSc/Viewer.pyx":109
+  /* "PETSc/Viewer.pyx":108
  *         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_ERR(27, 109, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerCreate(__pyx_v_ccomm, (&__pyx_v_newvwr))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(27, 108, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":110
+  /* "PETSc/Viewer.pyx":109
  *         cdef PetscViewer newvwr = NULL
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr             # <<<<<<<<<<<<<<
@@ -69136,7 +74592,7 @@ 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":111
+  /* "PETSc/Viewer.pyx":110
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr
  *         return self             # <<<<<<<<<<<<<<
@@ -69148,7 +74604,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_8create(struct PyPetscViewerO
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":106
+  /* "PETSc/Viewer.pyx":105
  *         return self
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
@@ -69166,7 +74622,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_8create(struct PyPetscViewerO
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":113
+/* "PETSc/Viewer.pyx":112
  *         return self
  * 
  *     def createASCII(self, name, mode=None, comm=None):             # <<<<<<<<<<<<<<
@@ -69194,8 +74650,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_11createASCII(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -69204,11 +74663,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_11createASCII(PyObject *__pyx
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mode);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -69216,12 +74677,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_11createASCII(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createASCII") < 0)) __PYX_ERR(27, 113, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createASCII") < 0)) __PYX_ERR(27, 112, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -69233,7 +74696,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_11createASCII(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createASCII", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 113, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createASCII", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 112, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Viewer.createASCII", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -69262,17 +74725,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_10createASCII(struct PyPetscV
   __Pyx_RefNannySetupContext("createASCII", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/Viewer.pyx":114
+  /* "PETSc/Viewer.pyx":113
  * 
  *     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_ERR(27, 114, __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, 113, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Viewer.pyx":115
+  /* "PETSc/Viewer.pyx":114
  *     def createASCII(self, name, mode=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
@@ -69281,19 +74744,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_10createASCII(struct PyPetscV
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/Viewer.pyx":116
+  /* "PETSc/Viewer.pyx":115
  *         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_ERR(27, 116, __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, 115, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Viewer.pyx":117
+  /* "PETSc/Viewer.pyx":116
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  *         cdef PetscFileMode cmode = PETSC_FILE_MODE_WRITE             # <<<<<<<<<<<<<<
@@ -69302,7 +74765,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_10createASCII(struct PyPetscV
  */
   __pyx_v_cmode = FILE_MODE_WRITE;
 
-  /* "PETSc/Viewer.pyx":118
+  /* "PETSc/Viewer.pyx":117
  *         name = str2bytes(name, &cname)
  *         cdef PetscFileMode cmode = PETSC_FILE_MODE_WRITE
  *         if mode is not None: filemode(mode)             # <<<<<<<<<<<<<<
@@ -69312,10 +74775,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_10createASCII(struct PyPetscV
   __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)-1L))) __PYX_ERR(27, 118, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_filemode(__pyx_v_mode); if (unlikely(__pyx_t_5 == ((PetscFileMode)((PetscFileMode)-1L)))) __PYX_ERR(27, 117, __pyx_L1_error)
   }
 
-  /* "PETSc/Viewer.pyx":119
+  /* "PETSc/Viewer.pyx":118
  *         cdef PetscFileMode cmode = PETSC_FILE_MODE_WRITE
  *         if mode is not None: filemode(mode)
  *         cdef PetscViewer newvwr = NULL             # <<<<<<<<<<<<<<
@@ -69324,16 +74787,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_10createASCII(struct PyPetscV
  */
   __pyx_v_newvwr = NULL;
 
-  /* "PETSc/Viewer.pyx":120
+  /* "PETSc/Viewer.pyx":119
  *         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_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)
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerCreate(__pyx_v_ccomm, (&__pyx_v_newvwr))); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(27, 119, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":121
+  /* "PETSc/Viewer.pyx":120
  *         cdef PetscViewer newvwr = NULL
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr             # <<<<<<<<<<<<<<
@@ -69343,34 +74806,34 @@ 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":122
+  /* "PETSc/Viewer.pyx":121
  *         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_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)
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerSetType(__pyx_v_self->vwr, PETSCVIEWERASCII)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(27, 121, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":123
+  /* "PETSc/Viewer.pyx":122
  *         PetscCLEAR(self.obj); self.vwr = newvwr
  *         CHKERR( PetscViewerSetType(self.vwr, PETSCVIEWERASCII) )
  *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )             # <<<<<<<<<<<<<<
  *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )
  *         return self
  */
-  __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)
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetMode(__pyx_v_self->vwr, __pyx_v_cmode)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(27, 122, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":124
+  /* "PETSc/Viewer.pyx":123
  *         CHKERR( PetscViewerSetType(self.vwr, PETSCVIEWERASCII) )
  *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )
  *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __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)
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetName(__pyx_v_self->vwr, __pyx_v_cname)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(27, 123, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":125
+  /* "PETSc/Viewer.pyx":124
  *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )
  *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )
  *         return self             # <<<<<<<<<<<<<<
@@ -69382,7 +74845,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_10createASCII(struct PyPetscV
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":113
+  /* "PETSc/Viewer.pyx":112
  *         return self
  * 
  *     def createASCII(self, name, mode=None, comm=None):             # <<<<<<<<<<<<<<
@@ -69402,7 +74865,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_10createASCII(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":127
+/* "PETSc/Viewer.pyx":126
  *         return self
  * 
  *     def createBinary(self, name, mode=None, comm=None):             # <<<<<<<<<<<<<<
@@ -69430,8 +74893,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_13createBinary(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -69440,11 +74906,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_13createBinary(PyObject *__py
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mode);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -69452,12 +74920,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_13createBinary(PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createBinary") < 0)) __PYX_ERR(27, 127, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createBinary") < 0)) __PYX_ERR(27, 126, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -69469,7 +74939,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_13createBinary(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createBinary", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 127, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createBinary", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 126, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Viewer.createBinary", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -69496,17 +74966,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_12createBinary(struct PyPetsc
   __Pyx_RefNannySetupContext("createBinary", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/Viewer.pyx":128
+  /* "PETSc/Viewer.pyx":127
  * 
  *     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_ERR(27, 128, __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, 127, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Viewer.pyx":129
+  /* "PETSc/Viewer.pyx":128
  *     def createBinary(self, name, mode=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
@@ -69515,29 +74985,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_12createBinary(struct PyPetsc
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/Viewer.pyx":130
+  /* "PETSc/Viewer.pyx":129
  *         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_ERR(27, 130, __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, 129, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Viewer.pyx":131
+  /* "PETSc/Viewer.pyx":130
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  *         cdef PetscFileMode cmode = filemode(mode)             # <<<<<<<<<<<<<<
  *         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)-1L))) __PYX_ERR(27, 131, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_filemode(__pyx_v_mode); if (unlikely(__pyx_t_3 == ((PetscFileMode)((PetscFileMode)-1L)))) __PYX_ERR(27, 130, __pyx_L1_error)
   __pyx_v_cmode = __pyx_t_3;
 
-  /* "PETSc/Viewer.pyx":132
+  /* "PETSc/Viewer.pyx":131
  *         name = str2bytes(name, &cname)
  *         cdef PetscFileMode cmode = filemode(mode)
  *         cdef PetscViewer newvwr = NULL             # <<<<<<<<<<<<<<
@@ -69546,16 +75016,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_12createBinary(struct PyPetsc
  */
   __pyx_v_newvwr = NULL;
 
-  /* "PETSc/Viewer.pyx":133
+  /* "PETSc/Viewer.pyx":132
  *         cdef PetscFileMode cmode = filemode(mode)
  *         cdef PetscViewer newvwr = NULL
  *         CHKERR( PetscViewerBinaryOpen(ccomm, cname, cmode, &newvwr) )             # <<<<<<<<<<<<<<
  *         PetscCLEAR(self.obj); self.vwr = newvwr
  *         return self
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(27, 132, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":134
+  /* "PETSc/Viewer.pyx":133
  *         cdef PetscViewer newvwr = NULL
  *         CHKERR( PetscViewerBinaryOpen(ccomm, cname, cmode, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr             # <<<<<<<<<<<<<<
@@ -69565,7 +75035,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_12createBinary(struct PyPetsc
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->vwr = __pyx_v_newvwr;
 
-  /* "PETSc/Viewer.pyx":135
+  /* "PETSc/Viewer.pyx":134
  *         CHKERR( PetscViewerBinaryOpen(ccomm, cname, cmode, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr
  *         return self             # <<<<<<<<<<<<<<
@@ -69577,7 +75047,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_12createBinary(struct PyPetsc
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":127
+  /* "PETSc/Viewer.pyx":126
  *         return self
  * 
  *     def createBinary(self, name, mode=None, comm=None):             # <<<<<<<<<<<<<<
@@ -69597,7 +75067,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_12createBinary(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":137
+/* "PETSc/Viewer.pyx":136
  *         return self
  * 
  *     def createMPIIO(self, name, mode=None, comm=None):             # <<<<<<<<<<<<<<
@@ -69625,8 +75095,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_15createMPIIO(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -69635,11 +75108,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_15createMPIIO(PyObject *__pyx
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mode);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -69647,12 +75122,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_15createMPIIO(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createMPIIO") < 0)) __PYX_ERR(27, 137, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createMPIIO") < 0)) __PYX_ERR(27, 136, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -69664,7 +75141,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_15createMPIIO(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createMPIIO", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 137, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createMPIIO", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 136, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Viewer.createMPIIO", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -69691,17 +75168,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_14createMPIIO(struct PyPetscV
   __Pyx_RefNannySetupContext("createMPIIO", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/Viewer.pyx":138
+  /* "PETSc/Viewer.pyx":137
  * 
  *     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_ERR(27, 138, __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, 137, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Viewer.pyx":139
+  /* "PETSc/Viewer.pyx":138
  *     def createMPIIO(self, name, mode=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
@@ -69710,29 +75187,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_14createMPIIO(struct PyPetscV
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/Viewer.pyx":140
+  /* "PETSc/Viewer.pyx":139
  *         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_ERR(27, 140, __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, 139, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Viewer.pyx":141
+  /* "PETSc/Viewer.pyx":140
  *         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)-1L))) __PYX_ERR(27, 141, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_filemode(__pyx_v_mode); if (unlikely(__pyx_t_3 == ((PetscFileMode)((PetscFileMode)-1L)))) __PYX_ERR(27, 140, __pyx_L1_error)
   __pyx_v_cmode = __pyx_t_3;
 
-  /* "PETSc/Viewer.pyx":142
+  /* "PETSc/Viewer.pyx":141
  *         name = str2bytes(name, &cname)
  *         cdef PetscFileMode cmode = filemode(mode)
  *         cdef PetscViewer newvwr = NULL             # <<<<<<<<<<<<<<
@@ -69741,16 +75218,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_14createMPIIO(struct PyPetscV
  */
   __pyx_v_newvwr = NULL;
 
-  /* "PETSc/Viewer.pyx":143
+  /* "PETSc/Viewer.pyx":142
  *         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_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)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerCreate(__pyx_v_ccomm, (&__pyx_v_newvwr))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(27, 142, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":144
+  /* "PETSc/Viewer.pyx":143
  *         cdef PetscViewer newvwr = NULL
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr             # <<<<<<<<<<<<<<
@@ -69760,43 +75237,43 @@ 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":145
+  /* "PETSc/Viewer.pyx":144
  *         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_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)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerSetType(__pyx_v_self->vwr, PETSCVIEWERBINARY)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(27, 144, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":146
+  /* "PETSc/Viewer.pyx":145
  *         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_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)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerBinarySetUseMPIIO(__pyx_v_self->vwr, PETSC_TRUE)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(27, 145, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":147
+  /* "PETSc/Viewer.pyx":146
  *         CHKERR( PetscViewerSetType(self.vwr, PETSCVIEWERBINARY) )
  *         CHKERR( PetscViewerBinarySetUseMPIIO(self.vwr, PETSC_TRUE) )
  *         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_ERR(27, 147, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetMode(__pyx_v_self->vwr, __pyx_v_cmode)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(27, 146, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":148
+  /* "PETSc/Viewer.pyx":147
  *         CHKERR( PetscViewerBinarySetUseMPIIO(self.vwr, PETSC_TRUE) )
  *         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_ERR(27, 148, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetName(__pyx_v_self->vwr, __pyx_v_cname)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(27, 147, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":149
+  /* "PETSc/Viewer.pyx":148
  *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )
  *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )
  *         return self             # <<<<<<<<<<<<<<
@@ -69808,7 +75285,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_14createMPIIO(struct PyPetscV
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":137
+  /* "PETSc/Viewer.pyx":136
  *         return self
  * 
  *     def createMPIIO(self, name, mode=None, comm=None):             # <<<<<<<<<<<<<<
@@ -69828,7 +75305,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_14createMPIIO(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":151
+/* "PETSc/Viewer.pyx":150
  *         return self
  * 
  *     def createVTK(self, name, mode=None, comm=None):             # <<<<<<<<<<<<<<
@@ -69856,8 +75333,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_17createVTK(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -69866,11 +75346,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_17createVTK(PyObject *__pyx_v
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mode);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -69878,12 +75360,14 @@ 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_ERR(27, 151, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createVTK") < 0)) __PYX_ERR(27, 150, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -69895,7 +75379,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_ERR(27, 151, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createVTK", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 150, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Viewer.createVTK", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -69922,17 +75406,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_16createVTK(struct PyPetscVie
   __Pyx_RefNannySetupContext("createVTK", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/Viewer.pyx":152
+  /* "PETSc/Viewer.pyx":151
  * 
  *     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_ERR(27, 152, __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, 151, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Viewer.pyx":153
+  /* "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             # <<<<<<<<<<<<<<
@@ -69941,29 +75425,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_16createVTK(struct PyPetscVie
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/Viewer.pyx":154
+  /* "PETSc/Viewer.pyx":153
  *         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_ERR(27, 154, __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, 153, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Viewer.pyx":155
+  /* "PETSc/Viewer.pyx":154
  *         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)-1L))) __PYX_ERR(27, 155, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_filemode(__pyx_v_mode); if (unlikely(__pyx_t_3 == ((PetscFileMode)((PetscFileMode)-1L)))) __PYX_ERR(27, 154, __pyx_L1_error)
   __pyx_v_cmode = __pyx_t_3;
 
-  /* "PETSc/Viewer.pyx":156
+  /* "PETSc/Viewer.pyx":155
  *         name = str2bytes(name, &cname)
  *         cdef PetscFileMode cmode = filemode(mode)
  *         cdef PetscViewer newvwr = NULL             # <<<<<<<<<<<<<<
@@ -69972,16 +75456,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_16createVTK(struct PyPetscVie
  */
   __pyx_v_newvwr = NULL;
 
-  /* "PETSc/Viewer.pyx":157
+  /* "PETSc/Viewer.pyx":156
  *         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_ERR(27, 157, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerCreate(__pyx_v_ccomm, (&__pyx_v_newvwr))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(27, 156, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":158
+  /* "PETSc/Viewer.pyx":157
  *         cdef PetscViewer newvwr = NULL
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr             # <<<<<<<<<<<<<<
@@ -69991,34 +75475,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":159
+  /* "PETSc/Viewer.pyx":158
  *         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_ERR(27, 159, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerSetType(__pyx_v_self->vwr, PETSCVIEWERVTK)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(27, 158, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":160
+  /* "PETSc/Viewer.pyx":159
  *         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_ERR(27, 160, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetMode(__pyx_v_self->vwr, __pyx_v_cmode)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(27, 159, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":161
+  /* "PETSc/Viewer.pyx":160
  *         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_ERR(27, 161, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetName(__pyx_v_self->vwr, __pyx_v_cname)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(27, 160, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":162
+  /* "PETSc/Viewer.pyx":161
  *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )
  *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )
  *         return self             # <<<<<<<<<<<<<<
@@ -70030,7 +75514,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_16createVTK(struct PyPetscVie
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":151
+  /* "PETSc/Viewer.pyx":150
  *         return self
  * 
  *     def createVTK(self, name, mode=None, comm=None):             # <<<<<<<<<<<<<<
@@ -70050,7 +75534,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_16createVTK(struct PyPetscVie
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":164
+/* "PETSc/Viewer.pyx":163
  *         return self
  * 
  *     def createHDF5(self, name, mode=None, comm=None):             # <<<<<<<<<<<<<<
@@ -70078,8 +75562,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_19createHDF5(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -70088,11 +75575,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_19createHDF5(PyObject *__pyx_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mode);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -70100,12 +75589,14 @@ 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_ERR(27, 164, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createHDF5") < 0)) __PYX_ERR(27, 163, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -70117,7 +75608,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_ERR(27, 164, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createHDF5", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 163, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Viewer.createHDF5", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -70144,17 +75635,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_18createHDF5(struct PyPetscVi
   __Pyx_RefNannySetupContext("createHDF5", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/Viewer.pyx":165
+  /* "PETSc/Viewer.pyx":164
  * 
  *     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_ERR(27, 165, __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, 164, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Viewer.pyx":166
+  /* "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             # <<<<<<<<<<<<<<
@@ -70163,29 +75654,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_18createHDF5(struct PyPetscVi
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/Viewer.pyx":167
+  /* "PETSc/Viewer.pyx":166
  *         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_ERR(27, 167, __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, 166, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Viewer.pyx":168
+  /* "PETSc/Viewer.pyx":167
  *         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)-1L))) __PYX_ERR(27, 168, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_filemode(__pyx_v_mode); if (unlikely(__pyx_t_3 == ((PetscFileMode)((PetscFileMode)-1L)))) __PYX_ERR(27, 167, __pyx_L1_error)
   __pyx_v_cmode = __pyx_t_3;
 
-  /* "PETSc/Viewer.pyx":169
+  /* "PETSc/Viewer.pyx":168
  *         name = str2bytes(name, &cname)
  *         cdef PetscFileMode cmode = filemode(mode)
  *         cdef PetscViewer newvwr = NULL             # <<<<<<<<<<<<<<
@@ -70194,16 +75685,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_18createHDF5(struct PyPetscVi
  */
   __pyx_v_newvwr = NULL;
 
-  /* "PETSc/Viewer.pyx":170
+  /* "PETSc/Viewer.pyx":169
  *         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_ERR(27, 170, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerCreate(__pyx_v_ccomm, (&__pyx_v_newvwr))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(27, 169, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":171
+  /* "PETSc/Viewer.pyx":170
  *         cdef PetscViewer newvwr = NULL
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr             # <<<<<<<<<<<<<<
@@ -70213,46 +75704,46 @@ 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":172
+  /* "PETSc/Viewer.pyx":171
  *         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_ERR(27, 172, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerSetType(__pyx_v_self->vwr, PETSCVIEWERHDF5)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(27, 171, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":173
+  /* "PETSc/Viewer.pyx":172
  *         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_ERR(27, 173, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetMode(__pyx_v_self->vwr, __pyx_v_cmode)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(27, 172, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":174
+  /* "PETSc/Viewer.pyx":173
  *         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_ERR(27, 174, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetName(__pyx_v_self->vwr, __pyx_v_cname)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(27, 173, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":175
+  /* "PETSc/Viewer.pyx":174
  *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )
  *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )
  *         return self             # <<<<<<<<<<<<<<
  * 
- *     def createNetCDF(self, name, mode=None, comm=None):
+ *     def createDraw(self, display=None, title=None,
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":164
+  /* "PETSc/Viewer.pyx":163
  *         return self
  * 
  *     def createHDF5(self, name, mode=None, comm=None):             # <<<<<<<<<<<<<<
@@ -70272,229 +75763,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_18createHDF5(struct PyPetscVi
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":177
- *         return self
- * 
- *     def createNetCDF(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_21createNetCDF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Viewer_20createNetCDF[] = "Viewer.createNetCDF(self, name, mode=None, comm=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_21createNetCDF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
-  PyObject *__pyx_v_name = 0;
-  PyObject *__pyx_v_mode = 0;
-  PyObject *__pyx_v_comm = 0;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("createNetCDF (wrapper)", 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);
-    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_name)) != 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--; }
-        }
-        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, "createNetCDF") < 0)) __PYX_ERR(27, 177, __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_name = values[0];
-    __pyx_v_mode = values[1];
-    __pyx_v_comm = values[2];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_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();
-  return NULL;
-  __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_20createNetCDF(((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_20createNetCDF(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;
-  PetscViewer __pyx_v_newvwr;
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  MPI_Comm __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  PetscFileMode __pyx_t_3;
-  int __pyx_t_4;
-  __Pyx_RefNannySetupContext("createNetCDF", 0);
-  __Pyx_INCREF(__pyx_v_name);
-
-  /* "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_ERR(27, 178, __pyx_L1_error)
-  __pyx_v_ccomm = __pyx_t_1;
-
-  /* "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             # <<<<<<<<<<<<<<
- *         name = str2bytes(name, &cname)
- *         cdef PetscFileMode cmode = filemode(mode)
- */
-  __pyx_v_cname = NULL;
-
-  /* "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_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":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)-1L))) __PYX_ERR(27, 181, __pyx_L1_error)
-  __pyx_v_cmode = __pyx_t_3;
-
-  /* "PETSc/Viewer.pyx":182
- *         name = str2bytes(name, &cname)
- *         cdef PetscFileMode cmode = filemode(mode)
- *         cdef PetscViewer newvwr = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
- *         PetscCLEAR(self.obj); self.vwr = newvwr
- */
-  __pyx_v_newvwr = NULL;
-
-  /* "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_ERR(27, 183, __pyx_L1_error)
-
-  /* "PETSc/Viewer.pyx":184
- *         cdef PetscViewer newvwr = NULL
- *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
- *         PetscCLEAR(self.obj); self.vwr = newvwr             # <<<<<<<<<<<<<<
- *         CHKERR( PetscViewerSetType(self.vwr, PETSCVIEWERNETCDF) )
- *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )
- */
-  __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
-  __pyx_v_self->vwr = __pyx_v_newvwr;
-
-  /* "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_ERR(27, 185, __pyx_L1_error)
-
-  /* "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_ERR(27, 186, __pyx_L1_error)
-
-  /* "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_ERR(27, 187, __pyx_L1_error)
-
-  /* "PETSc/Viewer.pyx":188
- *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )
- *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )
- *         return self             # <<<<<<<<<<<<<<
- * 
- *     def createDraw(self, display=None, title=None,
- */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_self));
-  __pyx_r = ((PyObject *)__pyx_v_self);
-  goto __pyx_L0;
-
-  /* "PETSc/Viewer.pyx":177
- *         return self
- * 
- *     def createNetCDF(self, name, mode=None, comm=None):             # <<<<<<<<<<<<<<
- *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
- *         cdef const_char *cname = NULL
- */
-
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("petsc4py.PETSc.Viewer.createNetCDF", __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/Viewer.pyx":190
+/* "PETSc/Viewer.pyx":176
  *         return self
  * 
  *     def createDraw(self, display=None, title=None,             # <<<<<<<<<<<<<<
@@ -70503,9 +75772,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_20createNetCDF(struct PyPetsc
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_23createDraw(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Viewer_22createDraw[] = "Viewer.createDraw(self, display=None, title=None, position=None, size=None, comm=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_23createDraw(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_21createDraw(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_20createDraw[] = "Viewer.createDraw(self, display=None, title=None, position=None, size=None, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_21createDraw(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;
@@ -70520,7 +75789,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_23createDraw(PyObject *__pyx_
     values[0] = ((PyObject *)Py_None);
     values[1] = ((PyObject *)Py_None);
 
-    /* "PETSc/Viewer.pyx":191
+    /* "PETSc/Viewer.pyx":177
  * 
  *     def createDraw(self, display=None, title=None,
  *                    position=None, size=None, comm=None):             # <<<<<<<<<<<<<<
@@ -70535,10 +75804,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_23createDraw(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -70549,21 +75823,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_23createDraw(PyObject *__pyx_
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_display);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_title);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_position);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_size);
           if (value) { values[3] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  4:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -70571,15 +75849,20 @@ 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_ERR(27, 190, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createDraw") < 0)) __PYX_ERR(27, 176, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -70592,15 +75875,15 @@ 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_ERR(27, 190, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createDraw", 0, 0, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 176, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Viewer.createDraw", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __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);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_20createDraw(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_display, __pyx_v_title, __pyx_v_position, __pyx_v_size, __pyx_v_comm);
 
-  /* "PETSc/Viewer.pyx":190
+  /* "PETSc/Viewer.pyx":176
  *         return self
  * 
  *     def createDraw(self, display=None, title=None,             # <<<<<<<<<<<<<<
@@ -70613,7 +75896,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_23createDraw(PyObject *__pyx_
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_20createDraw(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) {
   MPI_Comm __pyx_v_ccomm;
   const char *__pyx_v_cdisplay;
   const char *__pyx_v_ctitle;
@@ -70640,17 +75923,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
   __Pyx_INCREF(__pyx_v_display);
   __Pyx_INCREF(__pyx_v_title);
 
-  /* "PETSc/Viewer.pyx":192
+  /* "PETSc/Viewer.pyx":178
  *     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_ERR(27, 192, __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":193
+  /* "PETSc/Viewer.pyx":179
  *                    position=None, size=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cdisplay = NULL             # <<<<<<<<<<<<<<
@@ -70659,7 +75942,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
  */
   __pyx_v_cdisplay = NULL;
 
-  /* "PETSc/Viewer.pyx":194
+  /* "PETSc/Viewer.pyx":180
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cdisplay = NULL
  *         cdef const_char *ctitle = NULL             # <<<<<<<<<<<<<<
@@ -70668,31 +75951,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
  */
   __pyx_v_ctitle = NULL;
 
-  /* "PETSc/Viewer.pyx":195
+  /* "PETSc/Viewer.pyx":181
  *         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_ERR(27, 195, __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, 181, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_display, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Viewer.pyx":196
+  /* "PETSc/Viewer.pyx":182
  *         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_ERR(27, 196, __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, 182, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_title, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Viewer.pyx":198
+  /* "PETSc/Viewer.pyx":184
  *         title = str2bytes(title, &ctitle)
  *         cdef int x, y, h, w
  *         x = y = h = w = PETSC_DECIDE             # <<<<<<<<<<<<<<
@@ -70704,7 +75987,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
   __pyx_v_h = PETSC_DECIDE;
   __pyx_v_w = PETSC_DECIDE;
 
-  /* "PETSc/Viewer.pyx":199
+  /* "PETSc/Viewer.pyx":185
  *         cdef int x, y, h, w
  *         x = y = h = w = PETSC_DECIDE
  *         if position not in (None, PETSC_DECIDE):             # <<<<<<<<<<<<<<
@@ -70713,19 +75996,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_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_t_4 = PyObject_RichCompare(__pyx_t_2, Py_None, Py_NE); __Pyx_XGOTREF(__pyx_t_4); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 185, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(27, 185, __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_ERR(27, 199, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyInt_From_int(PETSC_DECIDE); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 185, __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_ERR(27, 199, __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, 185, __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_ERR(27, 199, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(27, 185, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   __pyx_t_3 = __pyx_t_5;
   __pyx_L4_bool_binop_done:;
@@ -70733,7 +76016,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":200
+    /* "PETSc/Viewer.pyx":186
  *         x = y = h = w = PETSC_DECIDE
  *         if position not in (None, PETSC_DECIDE):
  *             x, y = position             # <<<<<<<<<<<<<<
@@ -70742,7 +76025,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
  */
     if ((likely(PyTuple_CheckExact(__pyx_v_position))) || (PyList_CheckExact(__pyx_v_position))) {
       PyObject* sequence = __pyx_v_position;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -70750,9 +76033,9 @@ 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_ERR(27, 200, __pyx_L1_error)
+        __PYX_ERR(27, 186, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_6 = PyTuple_GET_ITEM(sequence, 1); 
@@ -70763,21 +76046,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_ERR(27, 200, __pyx_L1_error)
+      __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 186, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
-      __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(27, 200, __pyx_L1_error)
+      __pyx_t_6 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_6)) __PYX_ERR(27, 186, __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_ERR(27, 200, __pyx_L1_error)
+      __pyx_t_4 = PyObject_GetIter(__pyx_v_position); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 186, __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_ERR(27, 200, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_4), 2) < 0) __PYX_ERR(27, 186, __pyx_L1_error)
       __pyx_t_7 = NULL;
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       goto __pyx_L7_unpacking_done;
@@ -70785,17 +76068,17 @@ 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_ERR(27, 200, __pyx_L1_error)
+      __PYX_ERR(27, 186, __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_ERR(27, 200, __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, 186, __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_ERR(27, 200, __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, 186, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
     __pyx_v_x = __pyx_t_8;
     __pyx_v_y = __pyx_t_9;
 
-    /* "PETSc/Viewer.pyx":199
+    /* "PETSc/Viewer.pyx":185
  *         cdef int x, y, h, w
  *         x = y = h = w = PETSC_DECIDE
  *         if position not in (None, PETSC_DECIDE):             # <<<<<<<<<<<<<<
@@ -70804,7 +76087,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
  */
   }
 
-  /* "PETSc/Viewer.pyx":201
+  /* "PETSc/Viewer.pyx":187
  *         if position not in (None, PETSC_DECIDE):
  *             x, y = position
  *         if size not in (None, PETSC_DECIDE):             # <<<<<<<<<<<<<<
@@ -70813,19 +76096,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_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_t_2 = PyObject_RichCompare(__pyx_t_6, Py_None, Py_NE); __Pyx_XGOTREF(__pyx_t_2); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 187, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_2); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(27, 187, __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_ERR(27, 201, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_int(PETSC_DECIDE); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 187, __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_ERR(27, 201, __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, 187, __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_ERR(27, 201, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_4); if (unlikely(__pyx_t_3 < 0)) __PYX_ERR(27, 187, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_t_5 = __pyx_t_3;
   __pyx_L9_bool_binop_done:;
@@ -70833,7 +76116,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":202
+    /* "PETSc/Viewer.pyx":188
  *             x, y = position
  *         if size not in (None, PETSC_DECIDE):
  *             try:             # <<<<<<<<<<<<<<
@@ -70849,7 +76132,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
       __Pyx_XGOTREF(__pyx_t_12);
       /*try:*/ {
 
-        /* "PETSc/Viewer.pyx":203
+        /* "PETSc/Viewer.pyx":189
  *         if size not in (None, PETSC_DECIDE):
  *             try:
  *                 w, h = size             # <<<<<<<<<<<<<<
@@ -70858,7 +76141,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
  */
         if ((likely(PyTuple_CheckExact(__pyx_v_size))) || (PyList_CheckExact(__pyx_v_size))) {
           PyObject* sequence = __pyx_v_size;
-          #if CYTHON_COMPILING_IN_CPYTHON
+          #if !CYTHON_COMPILING_IN_PYPY
           Py_ssize_t size = Py_SIZE(sequence);
           #else
           Py_ssize_t size = PySequence_Size(sequence);
@@ -70866,9 +76149,9 @@ 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_ERR(27, 203, __pyx_L11_error)
+            __PYX_ERR(27, 189, __pyx_L11_error)
           }
-          #if CYTHON_COMPILING_IN_CPYTHON
+          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
           if (likely(PyTuple_CheckExact(sequence))) {
             __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); 
             __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1); 
@@ -70879,39 +76162,39 @@ 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_ERR(27, 203, __pyx_L11_error)
+          __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(27, 189, __pyx_L11_error)
           __Pyx_GOTREF(__pyx_t_6);
-          __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 203, __pyx_L11_error)
+          __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 189, __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_ERR(27, 203, __pyx_L11_error)
+          __pyx_t_2 = PyObject_GetIter(__pyx_v_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 189, __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;
+          index = 0; __pyx_t_6 = __pyx_t_7(__pyx_t_2); if (unlikely(!__pyx_t_6)) goto __pyx_L17_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;
+          index = 1; __pyx_t_4 = __pyx_t_7(__pyx_t_2); if (unlikely(!__pyx_t_4)) goto __pyx_L17_unpacking_failed;
           __Pyx_GOTREF(__pyx_t_4);
-          if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_2), 2) < 0) __PYX_ERR(27, 203, __pyx_L11_error)
+          if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_2), 2) < 0) __PYX_ERR(27, 189, __pyx_L11_error)
           __pyx_t_7 = NULL;
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-          goto __pyx_L20_unpacking_done;
-          __pyx_L19_unpacking_failed:;
+          goto __pyx_L18_unpacking_done;
+          __pyx_L17_unpacking_failed:;
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
           __pyx_t_7 = NULL;
           if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-          __PYX_ERR(27, 203, __pyx_L11_error)
-          __pyx_L20_unpacking_done:;
+          __PYX_ERR(27, 189, __pyx_L11_error)
+          __pyx_L18_unpacking_done:;
         }
-        __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_t_9 = __Pyx_PyInt_As_int(__pyx_t_6); if (unlikely((__pyx_t_9 == (int)-1) && PyErr_Occurred())) __PYX_ERR(27, 189, __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_ERR(27, 203, __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, 189, __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
+        /* "PETSc/Viewer.pyx":188
  *             x, y = position
  *         if size not in (None, PETSC_DECIDE):
  *             try:             # <<<<<<<<<<<<<<
@@ -70922,14 +76205,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
       __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;
+      goto __pyx_L16_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":204
+      /* "PETSc/Viewer.pyx":190
  *             try:
  *                 w, h = size
  *             except TypeError:             # <<<<<<<<<<<<<<
@@ -70939,19 +76221,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
       __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_ERR(27, 204, __pyx_L13_except_error)
+        if (__Pyx_GetException(&__pyx_t_4, &__pyx_t_6, &__pyx_t_2) < 0) __PYX_ERR(27, 190, __pyx_L13_except_error)
         __Pyx_GOTREF(__pyx_t_4);
         __Pyx_GOTREF(__pyx_t_6);
         __Pyx_GOTREF(__pyx_t_2);
 
-        /* "PETSc/Viewer.pyx":205
+        /* "PETSc/Viewer.pyx":191
  *                 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_ERR(27, 205, __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, 191, __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;
@@ -70962,29 +76244,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
       goto __pyx_L13_except_error;
       __pyx_L13_except_error:;
 
-      /* "PETSc/Viewer.pyx":202
+      /* "PETSc/Viewer.pyx":188
  *             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:;
+      __pyx_L16_try_end:;
     }
 
-    /* "PETSc/Viewer.pyx":201
+    /* "PETSc/Viewer.pyx":187
  *         if position not in (None, PETSC_DECIDE):
  *             x, y = position
  *         if size not in (None, PETSC_DECIDE):             # <<<<<<<<<<<<<<
@@ -70993,7 +76273,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
  */
   }
 
-  /* "PETSc/Viewer.pyx":206
+  /* "PETSc/Viewer.pyx":192
  *             except TypeError:
  *                 w = h = size
  *         cdef PetscViewer newvwr = NULL             # <<<<<<<<<<<<<<
@@ -71002,16 +76282,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
  */
   __pyx_v_newvwr = NULL;
 
-  /* "PETSc/Viewer.pyx":207
+  /* "PETSc/Viewer.pyx":193
  *                 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_ERR(27, 207, __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 == ((int)-1))) __PYX_ERR(27, 193, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":209
+  /* "PETSc/Viewer.pyx":195
  *         CHKERR( PetscViewerDrawOpen(ccomm, cdisplay, ctitle,
  *                                     x, y, w, h, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr             # <<<<<<<<<<<<<<
@@ -71021,7 +76301,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":210
+  /* "PETSc/Viewer.pyx":196
  *                                     x, y, w, h, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr
  *         return self             # <<<<<<<<<<<<<<
@@ -71033,7 +76313,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":190
+  /* "PETSc/Viewer.pyx":176
  *         return self
  * 
  *     def createDraw(self, display=None, title=None,             # <<<<<<<<<<<<<<
@@ -71056,7 +76336,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":212
+/* "PETSc/Viewer.pyx":198
  *         return self
  * 
  *     def setType(self, vwr_type):             # <<<<<<<<<<<<<<
@@ -71065,9 +76345,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22createDraw(struct PyPetscVi
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_25setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_23setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_22setType[] = "Viewer.setType(self, vwr_type)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_23setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_vwr_type = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -71080,6 +76360,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_25setType(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -71090,7 +76371,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_ERR(27, 212, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) __PYX_ERR(27, 198, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -71101,20 +76382,20 @@ 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_ERR(27, 212, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 198, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Viewer.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_24setType(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_vwr_type);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_22setType(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_vwr_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_24setType(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_vwr_type) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_22setType(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_vwr_type) {
   const char* __pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -71123,7 +76404,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_24setType(struct PyPetscViewe
   __Pyx_RefNannySetupContext("setType", 0);
   __Pyx_INCREF(__pyx_v_vwr_type);
 
-  /* "PETSc/Viewer.pyx":213
+  /* "PETSc/Viewer.pyx":199
  * 
  *     def setType(self, vwr_type):
  *         cdef PetscViewerType cval = NULL             # <<<<<<<<<<<<<<
@@ -71132,28 +76413,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_24setType(struct PyPetscViewe
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Viewer.pyx":214
+  /* "PETSc/Viewer.pyx":200
  *     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_ERR(27, 214, __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, 200, __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":215
+  /* "PETSc/Viewer.pyx":201
  *         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_ERR(27, 215, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerSetType(__pyx_v_self->vwr, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(27, 201, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":212
+  /* "PETSc/Viewer.pyx":198
  *         return self
  * 
  *     def setType(self, vwr_type):             # <<<<<<<<<<<<<<
@@ -71175,7 +76456,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_24setType(struct PyPetscViewe
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":217
+/* "PETSc/Viewer.pyx":203
  *         CHKERR( PetscViewerSetType(self.vwr, cval) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
@@ -71184,23 +76465,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_24setType(struct PyPetscViewe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_27getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_6Viewer_26getType[] = "Viewer.getType(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_27getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_25getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_24getType[] = "Viewer.getType(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_25getType(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_6Viewer_26getType(((struct PyPetscViewerObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_24getType(((struct PyPetscViewerObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_26getType(struct PyPetscViewerObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_24getType(struct PyPetscViewerObject *__pyx_v_self) {
   const char* __pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -71208,7 +76489,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_26getType(struct PyPetscViewe
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getType", 0);
 
-  /* "PETSc/Viewer.pyx":218
+  /* "PETSc/Viewer.pyx":204
  * 
  *     def getType(self):
  *         cdef PetscViewerType cval = NULL             # <<<<<<<<<<<<<<
@@ -71217,16 +76498,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_26getType(struct PyPetscViewe
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Viewer.pyx":219
+  /* "PETSc/Viewer.pyx":205
  *     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_ERR(27, 219, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerGetType(__pyx_v_self->vwr, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(27, 205, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":220
+  /* "PETSc/Viewer.pyx":206
  *         cdef PetscViewerType cval = NULL
  *         CHKERR( PetscViewerGetType(self.vwr, &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -71234,13 +76515,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_26getType(struct PyPetscViewe
  *     def getFormat(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 220, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 206, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":217
+  /* "PETSc/Viewer.pyx":203
  *         CHKERR( PetscViewerSetType(self.vwr, cval) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
@@ -71259,7 +76540,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_26getType(struct PyPetscViewe
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":222
+/* "PETSc/Viewer.pyx":208
  *         return bytes2str(cval)
  * 
  *     def getFormat(self):             # <<<<<<<<<<<<<<
@@ -71268,23 +76549,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_26getType(struct PyPetscViewe
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_27getFormat(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_26getFormat[] = "Viewer.getFormat(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_27getFormat(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_28getFormat(((struct PyPetscViewerObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_26getFormat(((struct PyPetscViewerObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_28getFormat(struct PyPetscViewerObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_26getFormat(struct PyPetscViewerObject *__pyx_v_self) {
   PetscViewerFormat __pyx_v_format;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -71292,7 +76573,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_28getFormat(struct PyPetscVie
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getFormat", 0);
 
-  /* "PETSc/Viewer.pyx":223
+  /* "PETSc/Viewer.pyx":209
  * 
  *     def getFormat(self):
  *         cdef PetscViewerFormat format = PETSC_VIEWER_DEFAULT             # <<<<<<<<<<<<<<
@@ -71301,16 +76582,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_28getFormat(struct PyPetscVie
  */
   __pyx_v_format = PETSC_VIEWER_DEFAULT;
 
-  /* "PETSc/Viewer.pyx":224
+  /* "PETSc/Viewer.pyx":210
  *     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_ERR(27, 224, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerGetFormat(__pyx_v_self->vwr, (&__pyx_v_format))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(27, 210, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":225
+  /* "PETSc/Viewer.pyx":211
  *         cdef PetscViewerFormat format = PETSC_VIEWER_DEFAULT
  *         CHKERR( PetscViewerGetFormat(self.vwr, &format) )
  *         return format             # <<<<<<<<<<<<<<
@@ -71318,13 +76599,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_28getFormat(struct PyPetscVie
  *     def pushFormat(self, format):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PetscViewerFormat(__pyx_v_format); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 225, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_PetscViewerFormat(__pyx_v_format); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 211, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":222
+  /* "PETSc/Viewer.pyx":208
  *         return bytes2str(cval)
  * 
  *     def getFormat(self):             # <<<<<<<<<<<<<<
@@ -71343,7 +76624,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_28getFormat(struct PyPetscVie
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":227
+/* "PETSc/Viewer.pyx":213
  *         return format
  * 
  *     def pushFormat(self, format):             # <<<<<<<<<<<<<<
@@ -71352,9 +76633,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_28getFormat(struct PyPetscVie
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_29pushFormat(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_28pushFormat[] = "Viewer.pushFormat(self, format)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_29pushFormat(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_format = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -71367,6 +76648,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_31pushFormat(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -71377,7 +76659,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_31pushFormat(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_ERR(27, 227, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pushFormat") < 0)) __PYX_ERR(27, 213, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -71388,37 +76670,37 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_31pushFormat(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("pushFormat", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 227, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("pushFormat", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 213, __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_30pushFormat(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_format);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_28pushFormat(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_format);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_30pushFormat(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_format) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_28pushFormat(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_format) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PetscViewerFormat __pyx_t_1;
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("pushFormat", 0);
 
-  /* "PETSc/Viewer.pyx":228
+  /* "PETSc/Viewer.pyx":214
  * 
  *     def pushFormat(self, format):
  *         CHKERR( PetscViewerPushFormat(self.vwr, format) )             # <<<<<<<<<<<<<<
  * 
  *     def popFormat(self):
  */
-  __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)
+  __pyx_t_1 = ((PetscViewerFormat)__Pyx_PyInt_As_PetscViewerFormat(__pyx_v_format)); if (unlikely(PyErr_Occurred())) __PYX_ERR(27, 214, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerPushFormat(__pyx_v_self->vwr, __pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(27, 214, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":227
+  /* "PETSc/Viewer.pyx":213
  *         return format
  * 
  *     def pushFormat(self, format):             # <<<<<<<<<<<<<<
@@ -71438,7 +76720,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_30pushFormat(struct PyPetscVi
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":230
+/* "PETSc/Viewer.pyx":216
  *         CHKERR( PetscViewerPushFormat(self.vwr, format) )
  * 
  *     def popFormat(self):             # <<<<<<<<<<<<<<
@@ -71447,38 +76729,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_30pushFormat(struct PyPetscVi
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_31popFormat(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_30popFormat[] = "Viewer.popFormat(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_31popFormat(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_32popFormat(((struct PyPetscViewerObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_30popFormat(((struct PyPetscViewerObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_32popFormat(struct PyPetscViewerObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_30popFormat(struct PyPetscViewerObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("popFormat", 0);
 
-  /* "PETSc/Viewer.pyx":231
+  /* "PETSc/Viewer.pyx":217
  * 
  *     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_ERR(27, 231, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerPopFormat(__pyx_v_self->vwr)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(27, 217, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":230
+  /* "PETSc/Viewer.pyx":216
  *         CHKERR( PetscViewerPushFormat(self.vwr, format) )
  * 
  *     def popFormat(self):             # <<<<<<<<<<<<<<
@@ -71498,7 +76780,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_32popFormat(struct PyPetscVie
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":234
+/* "PETSc/Viewer.pyx":220
  * 
  *     @classmethod
  *     def STDOUT(cls, comm=None):             # <<<<<<<<<<<<<<
@@ -71507,9 +76789,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_32popFormat(struct PyPetscVie
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_33STDOUT(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_32STDOUT[] = "Viewer.STDOUT(type cls, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_33STDOUT(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_comm = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -71523,6 +76805,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_35STDOUT(PyObject *__pyx_v_cl
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -71535,11 +76818,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_35STDOUT(PyObject *__pyx_v_cl
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "STDOUT") < 0)) __PYX_ERR(27, 234, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "STDOUT") < 0)) __PYX_ERR(27, 220, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -71548,20 +76832,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_35STDOUT(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_ERR(27, 234, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("STDOUT", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 220, __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_34STDOUT(((PyTypeObject*)__pyx_v_cls), __pyx_v_comm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_32STDOUT(((PyTypeObject*)__pyx_v_cls), __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_34STDOUT(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_32STDOUT(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;
@@ -71571,39 +76855,39 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_34STDOUT(CYTHON_UNUSED PyType
   PetscViewer __pyx_t_3;
   __Pyx_RefNannySetupContext("STDOUT", 0);
 
-  /* "PETSc/Viewer.pyx":235
+  /* "PETSc/Viewer.pyx":221
  *     @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_ERR(27, 235, __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, 221, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Viewer.pyx":236
+  /* "PETSc/Viewer.pyx":222
  *     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 *)__pyx_ptype_8petsc4py_5PETSc_Viewer), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 236, __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, 222, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_viewer = ((struct PyPetscViewerObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Viewer.pyx":237
+  /* "PETSc/Viewer.pyx":223
  *         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_ERR(27, 237, __pyx_L1_error)
+  __pyx_t_3 = PETSC_VIEWER_STDOUT_(__pyx_v_ccomm); if (unlikely(__pyx_t_3 == ((PetscViewer)NULL) && PyErr_Occurred())) __PYX_ERR(27, 223, __pyx_L1_error)
   __pyx_v_viewer->vwr = __pyx_t_3;
 
-  /* "PETSc/Viewer.pyx":238
+  /* "PETSc/Viewer.pyx":224
  *         cdef Viewer viewer = Viewer()
  *         viewer.vwr = PETSC_VIEWER_STDOUT_(ccomm)
  *         PetscINCREF(viewer.obj)             # <<<<<<<<<<<<<<
@@ -71612,7 +76896,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_34STDOUT(CYTHON_UNUSED PyType
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_viewer->__pyx_base.obj);
 
-  /* "PETSc/Viewer.pyx":239
+  /* "PETSc/Viewer.pyx":225
  *         viewer.vwr = PETSC_VIEWER_STDOUT_(ccomm)
  *         PetscINCREF(viewer.obj)
  *         return viewer             # <<<<<<<<<<<<<<
@@ -71624,7 +76908,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_34STDOUT(CYTHON_UNUSED PyType
   __pyx_r = ((PyObject *)__pyx_v_viewer);
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":234
+  /* "PETSc/Viewer.pyx":220
  * 
  *     @classmethod
  *     def STDOUT(cls, comm=None):             # <<<<<<<<<<<<<<
@@ -71644,7 +76928,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_34STDOUT(CYTHON_UNUSED PyType
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":242
+/* "PETSc/Viewer.pyx":228
  * 
  *     @classmethod
  *     def STDERR(cls, comm=None):             # <<<<<<<<<<<<<<
@@ -71653,9 +76937,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_34STDOUT(CYTHON_UNUSED PyType
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_35STDERR(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_34STDERR[] = "Viewer.STDERR(type cls, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_35STDERR(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_comm = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -71669,6 +76953,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_37STDERR(PyObject *__pyx_v_cl
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -71681,11 +76966,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_37STDERR(PyObject *__pyx_v_cl
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "STDERR") < 0)) __PYX_ERR(27, 242, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "STDERR") < 0)) __PYX_ERR(27, 228, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -71694,20 +76980,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_37STDERR(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_ERR(27, 242, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("STDERR", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 228, __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_36STDERR(((PyTypeObject*)__pyx_v_cls), __pyx_v_comm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_34STDERR(((PyTypeObject*)__pyx_v_cls), __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_36STDERR(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_34STDERR(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;
@@ -71717,39 +77003,39 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_36STDERR(CYTHON_UNUSED PyType
   PetscViewer __pyx_t_3;
   __Pyx_RefNannySetupContext("STDERR", 0);
 
-  /* "PETSc/Viewer.pyx":243
+  /* "PETSc/Viewer.pyx":229
  *     @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_ERR(27, 243, __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, 229, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Viewer.pyx":244
+  /* "PETSc/Viewer.pyx":230
  *     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 *)__pyx_ptype_8petsc4py_5PETSc_Viewer), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 244, __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, 230, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_viewer = ((struct PyPetscViewerObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Viewer.pyx":245
+  /* "PETSc/Viewer.pyx":231
  *         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_ERR(27, 245, __pyx_L1_error)
+  __pyx_t_3 = PETSC_VIEWER_STDERR_(__pyx_v_ccomm); if (unlikely(__pyx_t_3 == ((PetscViewer)NULL) && PyErr_Occurred())) __PYX_ERR(27, 231, __pyx_L1_error)
   __pyx_v_viewer->vwr = __pyx_t_3;
 
-  /* "PETSc/Viewer.pyx":246
+  /* "PETSc/Viewer.pyx":232
  *         cdef Viewer viewer = Viewer()
  *         viewer.vwr = PETSC_VIEWER_STDERR_(ccomm)
  *         PetscINCREF(viewer.obj)             # <<<<<<<<<<<<<<
@@ -71758,7 +77044,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_36STDERR(CYTHON_UNUSED PyType
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_viewer->__pyx_base.obj);
 
-  /* "PETSc/Viewer.pyx":247
+  /* "PETSc/Viewer.pyx":233
  *         viewer.vwr = PETSC_VIEWER_STDERR_(ccomm)
  *         PetscINCREF(viewer.obj)
  *         return viewer             # <<<<<<<<<<<<<<
@@ -71770,7 +77056,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_36STDERR(CYTHON_UNUSED PyType
   __pyx_r = ((PyObject *)__pyx_v_viewer);
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":242
+  /* "PETSc/Viewer.pyx":228
  * 
  *     @classmethod
  *     def STDERR(cls, comm=None):             # <<<<<<<<<<<<<<
@@ -71790,7 +77076,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_36STDERR(CYTHON_UNUSED PyType
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":250
+/* "PETSc/Viewer.pyx":236
  * 
  *     @classmethod
  *     def ASCII(cls, name, comm=None):             # <<<<<<<<<<<<<<
@@ -71799,9 +77085,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_36STDERR(CYTHON_UNUSED PyType
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_37ASCII(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_36ASCII[] = "Viewer.ASCII(type cls, name, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_37ASCII(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_v_comm = 0;
   PyObject *__pyx_r = 0;
@@ -71816,7 +77102,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_39ASCII(PyObject *__pyx_v_cls
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -71825,6 +77113,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_39ASCII(PyObject *__pyx_v_cls
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -71832,11 +77121,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_39ASCII(PyObject *__pyx_v_cls
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ASCII") < 0)) __PYX_ERR(27, 250, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ASCII") < 0)) __PYX_ERR(27, 236, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -71847,20 +77137,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_39ASCII(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_ERR(27, 250, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("ASCII", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 236, __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_38ASCII(((PyTypeObject*)__pyx_v_cls), __pyx_v_name, __pyx_v_comm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_36ASCII(((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_38ASCII(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_name, PyObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_36ASCII(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;
@@ -71872,17 +77162,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_38ASCII(CYTHON_UNUSED PyTypeO
   __Pyx_RefNannySetupContext("ASCII", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/Viewer.pyx":251
+  /* "PETSc/Viewer.pyx":237
  *     @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_ERR(27, 251, __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, 237, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Viewer.pyx":252
+  /* "PETSc/Viewer.pyx":238
  *     def ASCII(cls, name, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
@@ -71891,40 +77181,40 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_38ASCII(CYTHON_UNUSED PyTypeO
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/Viewer.pyx":253
+  /* "PETSc/Viewer.pyx":239
  *         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_ERR(27, 253, __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, 239, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Viewer.pyx":254
+  /* "PETSc/Viewer.pyx":240
  *         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 *)__pyx_ptype_8petsc4py_5PETSc_Viewer), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 254, __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, 240, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_viewer = ((struct PyPetscViewerObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Viewer.pyx":255
+  /* "PETSc/Viewer.pyx":241
  *         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_ERR(27, 255, __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 == ((int)-1))) __PYX_ERR(27, 241, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":256
+  /* "PETSc/Viewer.pyx":242
  *         cdef Viewer viewer = Viewer()
  *         CHKERR( PetscViewerASCIIOpen(ccomm, cname, &viewer.vwr) )
  *         return viewer             # <<<<<<<<<<<<<<
@@ -71936,7 +77226,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_38ASCII(CYTHON_UNUSED PyTypeO
   __pyx_r = ((PyObject *)__pyx_v_viewer);
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":250
+  /* "PETSc/Viewer.pyx":236
  * 
  *     @classmethod
  *     def ASCII(cls, name, comm=None):             # <<<<<<<<<<<<<<
@@ -71957,7 +77247,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_38ASCII(CYTHON_UNUSED PyTypeO
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":259
+/* "PETSc/Viewer.pyx":245
  * 
  *     @classmethod
  *     def BINARY(cls, comm=None):             # <<<<<<<<<<<<<<
@@ -71966,9 +77256,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_38ASCII(CYTHON_UNUSED PyTypeO
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_39BINARY(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_38BINARY[] = "Viewer.BINARY(type cls, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_39BINARY(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_comm = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -71982,6 +77272,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_41BINARY(PyObject *__pyx_v_cl
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -71994,11 +77285,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_41BINARY(PyObject *__pyx_v_cl
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "BINARY") < 0)) __PYX_ERR(27, 259, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "BINARY") < 0)) __PYX_ERR(27, 245, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -72007,20 +77299,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_41BINARY(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_ERR(27, 259, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("BINARY", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 245, __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_40BINARY(((PyTypeObject*)__pyx_v_cls), __pyx_v_comm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_38BINARY(((PyTypeObject*)__pyx_v_cls), __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_40BINARY(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_38BINARY(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;
@@ -72030,39 +77322,39 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_40BINARY(CYTHON_UNUSED PyType
   PetscViewer __pyx_t_3;
   __Pyx_RefNannySetupContext("BINARY", 0);
 
-  /* "PETSc/Viewer.pyx":260
+  /* "PETSc/Viewer.pyx":246
  *     @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_ERR(27, 260, __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, 246, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Viewer.pyx":261
+  /* "PETSc/Viewer.pyx":247
  *     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 *)__pyx_ptype_8petsc4py_5PETSc_Viewer), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 261, __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, 247, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_viewer = ((struct PyPetscViewerObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Viewer.pyx":262
+  /* "PETSc/Viewer.pyx":248
  *         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_ERR(27, 262, __pyx_L1_error)
+  __pyx_t_3 = PETSC_VIEWER_BINARY_(__pyx_v_ccomm); if (unlikely(__pyx_t_3 == ((PetscViewer)NULL) && PyErr_Occurred())) __PYX_ERR(27, 248, __pyx_L1_error)
   __pyx_v_viewer->vwr = __pyx_t_3;
 
-  /* "PETSc/Viewer.pyx":263
+  /* "PETSc/Viewer.pyx":249
  *         cdef Viewer viewer = Viewer()
  *         viewer.vwr = PETSC_VIEWER_BINARY_(ccomm)
  *         PetscINCREF(viewer.obj)             # <<<<<<<<<<<<<<
@@ -72071,7 +77363,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_40BINARY(CYTHON_UNUSED PyType
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_viewer->__pyx_base.obj);
 
-  /* "PETSc/Viewer.pyx":264
+  /* "PETSc/Viewer.pyx":250
  *         viewer.vwr = PETSC_VIEWER_BINARY_(ccomm)
  *         PetscINCREF(viewer.obj)
  *         return viewer             # <<<<<<<<<<<<<<
@@ -72083,7 +77375,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_40BINARY(CYTHON_UNUSED PyType
   __pyx_r = ((PyObject *)__pyx_v_viewer);
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":259
+  /* "PETSc/Viewer.pyx":245
  * 
  *     @classmethod
  *     def BINARY(cls, comm=None):             # <<<<<<<<<<<<<<
@@ -72103,7 +77395,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_40BINARY(CYTHON_UNUSED PyType
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":267
+/* "PETSc/Viewer.pyx":253
  * 
  *     @classmethod
  *     def DRAW(cls, comm=None):             # <<<<<<<<<<<<<<
@@ -72112,9 +77404,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_40BINARY(CYTHON_UNUSED PyType
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_41DRAW(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_40DRAW[] = "Viewer.DRAW(type cls, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_41DRAW(PyObject *__pyx_v_cls, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_comm = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -72128,6 +77420,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_43DRAW(PyObject *__pyx_v_cls,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -72140,11 +77433,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_43DRAW(PyObject *__pyx_v_cls,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "DRAW") < 0)) __PYX_ERR(27, 267, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "DRAW") < 0)) __PYX_ERR(27, 253, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -72153,20 +77447,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_43DRAW(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_ERR(27, 267, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("DRAW", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 253, __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_42DRAW(((PyTypeObject*)__pyx_v_cls), __pyx_v_comm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_40DRAW(((PyTypeObject*)__pyx_v_cls), __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_42DRAW(CYTHON_UNUSED PyTypeObject *__pyx_v_cls, PyObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_40DRAW(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;
@@ -72176,39 +77470,39 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_42DRAW(CYTHON_UNUSED PyTypeOb
   PetscViewer __pyx_t_3;
   __Pyx_RefNannySetupContext("DRAW", 0);
 
-  /* "PETSc/Viewer.pyx":268
+  /* "PETSc/Viewer.pyx":254
  *     @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_ERR(27, 268, __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, 254, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Viewer.pyx":269
+  /* "PETSc/Viewer.pyx":255
  *     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 *)__pyx_ptype_8petsc4py_5PETSc_Viewer), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 269, __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, 255, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_viewer = ((struct PyPetscViewerObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Viewer.pyx":270
+  /* "PETSc/Viewer.pyx":256
  *         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_ERR(27, 270, __pyx_L1_error)
+  __pyx_t_3 = PETSC_VIEWER_DRAW_(__pyx_v_ccomm); if (unlikely(__pyx_t_3 == ((PetscViewer)NULL) && PyErr_Occurred())) __PYX_ERR(27, 256, __pyx_L1_error)
   __pyx_v_viewer->vwr = __pyx_t_3;
 
-  /* "PETSc/Viewer.pyx":271
+  /* "PETSc/Viewer.pyx":257
  *         cdef Viewer viewer = Viewer()
  *         viewer.vwr = PETSC_VIEWER_DRAW_(ccomm)
  *         PetscINCREF(viewer.obj)             # <<<<<<<<<<<<<<
@@ -72217,19 +77511,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_42DRAW(CYTHON_UNUSED PyTypeOb
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_viewer->__pyx_base.obj);
 
-  /* "PETSc/Viewer.pyx":272
+  /* "PETSc/Viewer.pyx":258
  *         viewer.vwr = PETSC_VIEWER_DRAW_(ccomm)
  *         PetscINCREF(viewer.obj)
  *         return viewer             # <<<<<<<<<<<<<<
  * 
- *     # --- methods specific to file viewers ---
+ *     # --- ASCII viewers ---
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_viewer));
   __pyx_r = ((PyObject *)__pyx_v_viewer);
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":267
+  /* "PETSc/Viewer.pyx":253
  * 
  *     @classmethod
  *     def DRAW(cls, comm=None):             # <<<<<<<<<<<<<<
@@ -72249,7 +77543,995 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_42DRAW(CYTHON_UNUSED PyTypeOb
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":276
+/* "PETSc/Viewer.pyx":262
+ *     # --- ASCII viewers ---
+ * 
+ *     def setASCIITab(self, tabs):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ctabs = asInt(tabs)
+ *         CHKERR( PetscViewerASCIISetTab(self.vwr, ctabs) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_43setASCIITab(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_42setASCIITab[] = "Viewer.setASCIITab(self, tabs)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_43setASCIITab(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_tabs = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setASCIITab (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_tabs,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);
+        CYTHON_FALLTHROUGH;
+        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_tabs)) != 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, "setASCIITab") < 0)) __PYX_ERR(27, 262, __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_tabs = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setASCIITab", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 262, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Viewer.setASCIITab", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_42setASCIITab(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_tabs);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_42setASCIITab(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_tabs) {
+  PetscInt __pyx_v_ctabs;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setASCIITab", 0);
+
+  /* "PETSc/Viewer.pyx":263
+ * 
+ *     def setASCIITab(self, tabs):
+ *         cdef PetscInt ctabs = asInt(tabs)             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscViewerASCIISetTab(self.vwr, ctabs) )
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_tabs); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(27, 263, __pyx_L1_error)
+  __pyx_v_ctabs = __pyx_t_1;
+
+  /* "PETSc/Viewer.pyx":264
+ *     def setASCIITab(self, tabs):
+ *         cdef PetscInt ctabs = asInt(tabs)
+ *         CHKERR( PetscViewerASCIISetTab(self.vwr, ctabs) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getASCIITab(self):
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerASCIISetTab(__pyx_v_self->vwr, __pyx_v_ctabs)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(27, 264, __pyx_L1_error)
+
+  /* "PETSc/Viewer.pyx":262
+ *     # --- ASCII viewers ---
+ * 
+ *     def setASCIITab(self, tabs):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ctabs = asInt(tabs)
+ *         CHKERR( PetscViewerASCIISetTab(self.vwr, ctabs) )
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Viewer.setASCIITab", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Viewer.pyx":266
+ *         CHKERR( PetscViewerASCIISetTab(self.vwr, ctabs) )
+ * 
+ *     def getASCIITab(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt tabs = 0
+ *         CHKERR( PetscViewerASCIIGetTab(self.vwr, &tabs) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_45getASCIITab(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_44getASCIITab[] = "Viewer.getASCIITab(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_45getASCIITab(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getASCIITab (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getASCIITab", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getASCIITab", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_44getASCIITab(((struct PyPetscViewerObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_44getASCIITab(struct PyPetscViewerObject *__pyx_v_self) {
+  PetscInt __pyx_v_tabs;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getASCIITab", 0);
+
+  /* "PETSc/Viewer.pyx":267
+ * 
+ *     def getASCIITab(self):
+ *         cdef PetscInt tabs = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscViewerASCIIGetTab(self.vwr, &tabs) )
+ *         return toInt(tabs)
+ */
+  __pyx_v_tabs = 0;
+
+  /* "PETSc/Viewer.pyx":268
+ *     def getASCIITab(self):
+ *         cdef PetscInt tabs = 0
+ *         CHKERR( PetscViewerASCIIGetTab(self.vwr, &tabs) )             # <<<<<<<<<<<<<<
+ *         return toInt(tabs)
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerASCIIGetTab(__pyx_v_self->vwr, (&__pyx_v_tabs))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(27, 268, __pyx_L1_error)
+
+  /* "PETSc/Viewer.pyx":269
+ *         cdef PetscInt tabs = 0
+ *         CHKERR( PetscViewerASCIIGetTab(self.vwr, &tabs) )
+ *         return toInt(tabs)             # <<<<<<<<<<<<<<
+ * 
+ *     def addASCIITab(self, tabs):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_tabs); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 269, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/Viewer.pyx":266
+ *         CHKERR( PetscViewerASCIISetTab(self.vwr, ctabs) )
+ * 
+ *     def getASCIITab(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt tabs = 0
+ *         CHKERR( PetscViewerASCIIGetTab(self.vwr, &tabs) )
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.Viewer.getASCIITab", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Viewer.pyx":271
+ *         return toInt(tabs)
+ * 
+ *     def addASCIITab(self, tabs):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ctabs = asInt(tabs)
+ *         CHKERR( PetscViewerASCIIAddTab(self.vwr, ctabs) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_47addASCIITab(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_46addASCIITab[] = "Viewer.addASCIITab(self, tabs)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_47addASCIITab(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_tabs = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("addASCIITab (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_tabs,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);
+        CYTHON_FALLTHROUGH;
+        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_tabs)) != 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, "addASCIITab") < 0)) __PYX_ERR(27, 271, __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_tabs = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("addASCIITab", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 271, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Viewer.addASCIITab", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_46addASCIITab(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_tabs);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_46addASCIITab(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_tabs) {
+  PetscInt __pyx_v_ctabs;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("addASCIITab", 0);
+
+  /* "PETSc/Viewer.pyx":272
+ * 
+ *     def addASCIITab(self, tabs):
+ *         cdef PetscInt ctabs = asInt(tabs)             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscViewerASCIIAddTab(self.vwr, ctabs) )
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_tabs); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(27, 272, __pyx_L1_error)
+  __pyx_v_ctabs = __pyx_t_1;
+
+  /* "PETSc/Viewer.pyx":273
+ *     def addASCIITab(self, tabs):
+ *         cdef PetscInt ctabs = asInt(tabs)
+ *         CHKERR( PetscViewerASCIIAddTab(self.vwr, ctabs) )             # <<<<<<<<<<<<<<
+ * 
+ *     def subtractASCIITab(self, tabs):
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerASCIIAddTab(__pyx_v_self->vwr, __pyx_v_ctabs)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(27, 273, __pyx_L1_error)
+
+  /* "PETSc/Viewer.pyx":271
+ *         return toInt(tabs)
+ * 
+ *     def addASCIITab(self, tabs):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ctabs = asInt(tabs)
+ *         CHKERR( PetscViewerASCIIAddTab(self.vwr, ctabs) )
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Viewer.addASCIITab", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Viewer.pyx":275
+ *         CHKERR( PetscViewerASCIIAddTab(self.vwr, ctabs) )
+ * 
+ *     def subtractASCIITab(self, tabs):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ctabs = asInt(tabs)
+ *         CHKERR( PetscViewerASCIISubtractTab(self.vwr, ctabs) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_49subtractASCIITab(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_48subtractASCIITab[] = "Viewer.subtractASCIITab(self, tabs)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_49subtractASCIITab(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_tabs = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("subtractASCIITab (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_tabs,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);
+        CYTHON_FALLTHROUGH;
+        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_tabs)) != 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, "subtractASCIITab") < 0)) __PYX_ERR(27, 275, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_tabs = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("subtractASCIITab", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 275, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Viewer.subtractASCIITab", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_48subtractASCIITab(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_tabs);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_48subtractASCIITab(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_tabs) {
+  PetscInt __pyx_v_ctabs;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("subtractASCIITab", 0);
+
+  /* "PETSc/Viewer.pyx":276
+ * 
+ *     def subtractASCIITab(self, tabs):
+ *         cdef PetscInt ctabs = asInt(tabs)             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscViewerASCIISubtractTab(self.vwr, ctabs) )
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_tabs); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(27, 276, __pyx_L1_error)
+  __pyx_v_ctabs = __pyx_t_1;
+
+  /* "PETSc/Viewer.pyx":277
+ *     def subtractASCIITab(self, tabs):
+ *         cdef PetscInt ctabs = asInt(tabs)
+ *         CHKERR( PetscViewerASCIISubtractTab(self.vwr, ctabs) )             # <<<<<<<<<<<<<<
+ * 
+ *     def pushASCIISynchronized(self):
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerASCIISubtractTab(__pyx_v_self->vwr, __pyx_v_ctabs)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(27, 277, __pyx_L1_error)
+
+  /* "PETSc/Viewer.pyx":275
+ *         CHKERR( PetscViewerASCIIAddTab(self.vwr, ctabs) )
+ * 
+ *     def subtractASCIITab(self, tabs):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ctabs = asInt(tabs)
+ *         CHKERR( PetscViewerASCIISubtractTab(self.vwr, ctabs) )
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Viewer.subtractASCIITab", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Viewer.pyx":279
+ *         CHKERR( PetscViewerASCIISubtractTab(self.vwr, ctabs) )
+ * 
+ *     def pushASCIISynchronized(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscViewerASCIIPushSynchronized(self.vwr) )
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_51pushASCIISynchronized(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_50pushASCIISynchronized[] = "Viewer.pushASCIISynchronized(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_51pushASCIISynchronized(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("pushASCIISynchronized (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("pushASCIISynchronized", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "pushASCIISynchronized", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_50pushASCIISynchronized(((struct PyPetscViewerObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_50pushASCIISynchronized(struct PyPetscViewerObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("pushASCIISynchronized", 0);
+
+  /* "PETSc/Viewer.pyx":280
+ * 
+ *     def pushASCIISynchronized(self):
+ *         CHKERR( PetscViewerASCIIPushSynchronized(self.vwr) )             # <<<<<<<<<<<<<<
+ * 
+ *     def popASCIISynchronized(self):
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerASCIIPushSynchronized(__pyx_v_self->vwr)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(27, 280, __pyx_L1_error)
+
+  /* "PETSc/Viewer.pyx":279
+ *         CHKERR( PetscViewerASCIISubtractTab(self.vwr, ctabs) )
+ * 
+ *     def pushASCIISynchronized(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscViewerASCIIPushSynchronized(self.vwr) )
+ * 
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Viewer.pushASCIISynchronized", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Viewer.pyx":282
+ *         CHKERR( PetscViewerASCIIPushSynchronized(self.vwr) )
+ * 
+ *     def popASCIISynchronized(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscViewerASCIIPopSynchronized(self.vwr) )
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_53popASCIISynchronized(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_52popASCIISynchronized[] = "Viewer.popASCIISynchronized(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_53popASCIISynchronized(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("popASCIISynchronized (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("popASCIISynchronized", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "popASCIISynchronized", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_52popASCIISynchronized(((struct PyPetscViewerObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_52popASCIISynchronized(struct PyPetscViewerObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("popASCIISynchronized", 0);
+
+  /* "PETSc/Viewer.pyx":283
+ * 
+ *     def popASCIISynchronized(self):
+ *         CHKERR( PetscViewerASCIIPopSynchronized(self.vwr) )             # <<<<<<<<<<<<<<
+ * 
+ *     def pushASCIITab(self):
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerASCIIPopSynchronized(__pyx_v_self->vwr)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(27, 283, __pyx_L1_error)
+
+  /* "PETSc/Viewer.pyx":282
+ *         CHKERR( PetscViewerASCIIPushSynchronized(self.vwr) )
+ * 
+ *     def popASCIISynchronized(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscViewerASCIIPopSynchronized(self.vwr) )
+ * 
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Viewer.popASCIISynchronized", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Viewer.pyx":285
+ *         CHKERR( PetscViewerASCIIPopSynchronized(self.vwr) )
+ * 
+ *     def pushASCIITab(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscViewerASCIIPushTab(self.vwr) )
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_55pushASCIITab(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_54pushASCIITab[] = "Viewer.pushASCIITab(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_55pushASCIITab(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("pushASCIITab (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("pushASCIITab", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "pushASCIITab", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_54pushASCIITab(((struct PyPetscViewerObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54pushASCIITab(struct PyPetscViewerObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("pushASCIITab", 0);
+
+  /* "PETSc/Viewer.pyx":286
+ * 
+ *     def pushASCIITab(self):
+ *         CHKERR( PetscViewerASCIIPushTab(self.vwr) )             # <<<<<<<<<<<<<<
+ * 
+ *     def popASCIITab(self):
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerASCIIPushTab(__pyx_v_self->vwr)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(27, 286, __pyx_L1_error)
+
+  /* "PETSc/Viewer.pyx":285
+ *         CHKERR( PetscViewerASCIIPopSynchronized(self.vwr) )
+ * 
+ *     def pushASCIITab(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscViewerASCIIPushTab(self.vwr) )
+ * 
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Viewer.pushASCIITab", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Viewer.pyx":288
+ *         CHKERR( PetscViewerASCIIPushTab(self.vwr) )
+ * 
+ *     def popASCIITab(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscViewerASCIIPopTab(self.vwr) )
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_57popASCIITab(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_56popASCIITab[] = "Viewer.popASCIITab(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_57popASCIITab(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("popASCIITab (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("popASCIITab", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "popASCIITab", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_56popASCIITab(((struct PyPetscViewerObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_56popASCIITab(struct PyPetscViewerObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("popASCIITab", 0);
+
+  /* "PETSc/Viewer.pyx":289
+ * 
+ *     def popASCIITab(self):
+ *         CHKERR( PetscViewerASCIIPopTab(self.vwr) )             # <<<<<<<<<<<<<<
+ * 
+ *     def useASCIITabs(self, flag):
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerASCIIPopTab(__pyx_v_self->vwr)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(27, 289, __pyx_L1_error)
+
+  /* "PETSc/Viewer.pyx":288
+ *         CHKERR( PetscViewerASCIIPushTab(self.vwr) )
+ * 
+ *     def popASCIITab(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscViewerASCIIPopTab(self.vwr) )
+ * 
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Viewer.popASCIITab", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Viewer.pyx":291
+ *         CHKERR( PetscViewerASCIIPopTab(self.vwr) )
+ * 
+ *     def useASCIITabs(self, flag):             # <<<<<<<<<<<<<<
+ *         cdef PetscBool flg = flag
+ *         CHKERR( PetscViewerASCIIUseTabs(self.vwr, flg) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_59useASCIITabs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_58useASCIITabs[] = "Viewer.useASCIITabs(self, flag)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_59useASCIITabs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_flag = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("useASCIITabs (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);
+        CYTHON_FALLTHROUGH;
+        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, "useASCIITabs") < 0)) __PYX_ERR(27, 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_flag = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("useASCIITabs", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 291, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Viewer.useASCIITabs", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_58useASCIITabs(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_flag);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_58useASCIITabs(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_flag) {
+  PetscBool __pyx_v_flg;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscBool __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("useASCIITabs", 0);
+
+  /* "PETSc/Viewer.pyx":292
+ * 
+ *     def useASCIITabs(self, flag):
+ *         cdef PetscBool flg = flag             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscViewerASCIIUseTabs(self.vwr, flg) )
+ * 
+ */
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) __PYX_ERR(27, 292, __pyx_L1_error)
+  __pyx_v_flg = __pyx_t_1;
+
+  /* "PETSc/Viewer.pyx":293
+ *     def useASCIITabs(self, flag):
+ *         cdef PetscBool flg = flag
+ *         CHKERR( PetscViewerASCIIUseTabs(self.vwr, flg) )             # <<<<<<<<<<<<<<
+ * 
+ *     def printfASCII(self, msg):
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerASCIIUseTabs(__pyx_v_self->vwr, __pyx_v_flg)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(27, 293, __pyx_L1_error)
+
+  /* "PETSc/Viewer.pyx":291
+ *         CHKERR( PetscViewerASCIIPopTab(self.vwr) )
+ * 
+ *     def useASCIITabs(self, flag):             # <<<<<<<<<<<<<<
+ *         cdef PetscBool flg = flag
+ *         CHKERR( PetscViewerASCIIUseTabs(self.vwr, flg) )
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Viewer.useASCIITabs", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Viewer.pyx":295
+ *         CHKERR( PetscViewerASCIIUseTabs(self.vwr, flg) )
+ * 
+ *     def printfASCII(self, msg):             # <<<<<<<<<<<<<<
+ *         cdef const_char *cmsg = NULL
+ *         msg = str2bytes(msg, &cmsg)
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_61printfASCII(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_60printfASCII[] = "Viewer.printfASCII(self, msg)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_61printfASCII(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_msg = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("printfASCII (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_msg,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);
+        CYTHON_FALLTHROUGH;
+        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_msg)) != 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, "printfASCII") < 0)) __PYX_ERR(27, 295, __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_msg = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("printfASCII", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 295, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Viewer.printfASCII", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_60printfASCII(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_msg);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_60printfASCII(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_msg) {
+  const char *__pyx_v_cmsg;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("printfASCII", 0);
+  __Pyx_INCREF(__pyx_v_msg);
+
+  /* "PETSc/Viewer.pyx":296
+ * 
+ *     def printfASCII(self, msg):
+ *         cdef const_char *cmsg = NULL             # <<<<<<<<<<<<<<
+ *         msg = str2bytes(msg, &cmsg)
+ *         CHKERR( PetscViewerASCIIPrintf(self.vwr, cmsg) )
+ */
+  __pyx_v_cmsg = NULL;
+
+  /* "PETSc/Viewer.pyx":297
+ *     def printfASCII(self, msg):
+ *         cdef const_char *cmsg = NULL
+ *         msg = str2bytes(msg, &cmsg)             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscViewerASCIIPrintf(self.vwr, cmsg) )
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_msg, (&__pyx_v_cmsg)); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 297, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_msg, __pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/Viewer.pyx":298
+ *         cdef const_char *cmsg = NULL
+ *         msg = str2bytes(msg, &cmsg)
+ *         CHKERR( PetscViewerASCIIPrintf(self.vwr, cmsg) )             # <<<<<<<<<<<<<<
+ * 
+ *     def printfASCIISynchronized(self, msg):
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerASCIIPrintf(__pyx_v_self->vwr, __pyx_v_cmsg)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(27, 298, __pyx_L1_error)
+
+  /* "PETSc/Viewer.pyx":295
+ *         CHKERR( PetscViewerASCIIUseTabs(self.vwr, flg) )
+ * 
+ *     def printfASCII(self, msg):             # <<<<<<<<<<<<<<
+ *         cdef const_char *cmsg = NULL
+ *         msg = str2bytes(msg, &cmsg)
+ */
+
+  /* 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.Viewer.printfASCII", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_msg);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Viewer.pyx":300
+ *         CHKERR( PetscViewerASCIIPrintf(self.vwr, cmsg) )
+ * 
+ *     def printfASCIISynchronized(self, msg):             # <<<<<<<<<<<<<<
+ *         cdef const_char *cmsg = NULL
+ *         msg = str2bytes(msg, &cmsg)
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_63printfASCIISynchronized(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_62printfASCIISynchronized[] = "Viewer.printfASCIISynchronized(self, msg)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_63printfASCIISynchronized(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_msg = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("printfASCIISynchronized (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_msg,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);
+        CYTHON_FALLTHROUGH;
+        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_msg)) != 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, "printfASCIISynchronized") < 0)) __PYX_ERR(27, 300, __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_msg = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("printfASCIISynchronized", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 300, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Viewer.printfASCIISynchronized", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_62printfASCIISynchronized(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_msg);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_62printfASCIISynchronized(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_msg) {
+  const char *__pyx_v_cmsg;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("printfASCIISynchronized", 0);
+  __Pyx_INCREF(__pyx_v_msg);
+
+  /* "PETSc/Viewer.pyx":301
+ * 
+ *     def printfASCIISynchronized(self, msg):
+ *         cdef const_char *cmsg = NULL             # <<<<<<<<<<<<<<
+ *         msg = str2bytes(msg, &cmsg)
+ *         CHKERR( PetscViewerASCIISynchronizedPrintf(self.vwr, cmsg) )
+ */
+  __pyx_v_cmsg = NULL;
+
+  /* "PETSc/Viewer.pyx":302
+ *     def printfASCIISynchronized(self, msg):
+ *         cdef const_char *cmsg = NULL
+ *         msg = str2bytes(msg, &cmsg)             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscViewerASCIISynchronizedPrintf(self.vwr, cmsg) )
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_msg, (&__pyx_v_cmsg)); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 302, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_msg, __pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/Viewer.pyx":303
+ *         cdef const_char *cmsg = NULL
+ *         msg = str2bytes(msg, &cmsg)
+ *         CHKERR( PetscViewerASCIISynchronizedPrintf(self.vwr, cmsg) )             # <<<<<<<<<<<<<<
+ * 
+ *     # --- methods specific to file viewers ---
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerASCIISynchronizedPrintf(__pyx_v_self->vwr, __pyx_v_cmsg)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(27, 303, __pyx_L1_error)
+
+  /* "PETSc/Viewer.pyx":300
+ *         CHKERR( PetscViewerASCIIPrintf(self.vwr, cmsg) )
+ * 
+ *     def printfASCIISynchronized(self, msg):             # <<<<<<<<<<<<<<
+ *         cdef const_char *cmsg = NULL
+ *         msg = str2bytes(msg, &cmsg)
+ */
+
+  /* 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.Viewer.printfASCIISynchronized", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_msg);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Viewer.pyx":307
  *     # --- methods specific to file viewers ---
  * 
  *     def flush(self):             # <<<<<<<<<<<<<<
@@ -72258,38 +78540,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_42DRAW(CYTHON_UNUSED PyTypeOb
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_65flush(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_64flush[] = "Viewer.flush(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_65flush(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_44flush(((struct PyPetscViewerObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_64flush(((struct PyPetscViewerObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_44flush(struct PyPetscViewerObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_64flush(struct PyPetscViewerObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("flush", 0);
 
-  /* "PETSc/Viewer.pyx":277
+  /* "PETSc/Viewer.pyx":308
  * 
  *     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_ERR(27, 277, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFlush(__pyx_v_self->vwr)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(27, 308, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":276
+  /* "PETSc/Viewer.pyx":307
  *     # --- methods specific to file viewers ---
  * 
  *     def flush(self):             # <<<<<<<<<<<<<<
@@ -72309,7 +78591,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_44flush(struct PyPetscViewerO
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":279
+/* "PETSc/Viewer.pyx":310
  *         CHKERR( PetscViewerFlush(self.vwr) )
  * 
  *     def setFileMode(self, mode):             # <<<<<<<<<<<<<<
@@ -72318,9 +78600,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_44flush(struct PyPetscViewerO
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_67setFileMode(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_66setFileMode[] = "Viewer.setFileMode(self, mode)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_67setFileMode(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_mode = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -72333,6 +78615,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_47setFileMode(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -72343,7 +78626,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_47setFileMode(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_ERR(27, 279, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFileMode") < 0)) __PYX_ERR(27, 310, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -72354,37 +78637,37 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_47setFileMode(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFileMode", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 279, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setFileMode", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 310, __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_46setFileMode(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_mode);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_66setFileMode(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_mode);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_46setFileMode(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_mode) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_66setFileMode(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_mode) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PetscFileMode __pyx_t_1;
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setFileMode", 0);
 
-  /* "PETSc/Viewer.pyx":280
+  /* "PETSc/Viewer.pyx":311
  * 
  *     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)-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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_filemode(__pyx_v_mode); if (unlikely(__pyx_t_1 == ((PetscFileMode)((PetscFileMode)-1L)))) __PYX_ERR(27, 311, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetMode(__pyx_v_self->vwr, __pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(27, 311, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":279
+  /* "PETSc/Viewer.pyx":310
  *         CHKERR( PetscViewerFlush(self.vwr) )
  * 
  *     def setFileMode(self, mode):             # <<<<<<<<<<<<<<
@@ -72404,7 +78687,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_46setFileMode(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":282
+/* "PETSc/Viewer.pyx":313
  *         CHKERR( PetscViewerFileSetMode(self.vwr, filemode(mode)) )
  * 
  *     def getFileMode(self):             # <<<<<<<<<<<<<<
@@ -72413,23 +78696,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_46setFileMode(struct PyPetscV
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_69getFileMode(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_68getFileMode[] = "Viewer.getFileMode(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_69getFileMode(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_48getFileMode(((struct PyPetscViewerObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_68getFileMode(((struct PyPetscViewerObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_48getFileMode(struct PyPetscViewerObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_68getFileMode(struct PyPetscViewerObject *__pyx_v_self) {
   PetscFileMode __pyx_v_mode;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -72437,7 +78720,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_48getFileMode(struct PyPetscV
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getFileMode", 0);
 
-  /* "PETSc/Viewer.pyx":283
+  /* "PETSc/Viewer.pyx":314
  * 
  *     def getFileMode(self):
  *         cdef PetscFileMode mode = PETSC_FILE_MODE_READ             # <<<<<<<<<<<<<<
@@ -72446,16 +78729,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_48getFileMode(struct PyPetscV
  */
   __pyx_v_mode = FILE_MODE_READ;
 
-  /* "PETSc/Viewer.pyx":284
+  /* "PETSc/Viewer.pyx":315
  *     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_ERR(27, 284, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileGetMode(__pyx_v_self->vwr, (&__pyx_v_mode))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(27, 315, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":285
+  /* "PETSc/Viewer.pyx":316
  *         cdef PetscFileMode mode = PETSC_FILE_MODE_READ
  *         CHKERR( PetscViewerFileGetMode(self.vwr, &mode) )
  *         return mode             # <<<<<<<<<<<<<<
@@ -72463,13 +78746,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_48getFileMode(struct PyPetscV
  *     def setFileName(self, name):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PetscFileMode(__pyx_v_mode); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 285, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_PetscFileMode(__pyx_v_mode); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 316, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":282
+  /* "PETSc/Viewer.pyx":313
  *         CHKERR( PetscViewerFileSetMode(self.vwr, filemode(mode)) )
  * 
  *     def getFileMode(self):             # <<<<<<<<<<<<<<
@@ -72488,7 +78771,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_48getFileMode(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":287
+/* "PETSc/Viewer.pyx":318
  *         return mode
  * 
  *     def setFileName(self, name):             # <<<<<<<<<<<<<<
@@ -72497,9 +78780,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_48getFileMode(struct PyPetscV
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_71setFileName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_70setFileName[] = "Viewer.setFileName(self, name)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_71setFileName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -72512,6 +78795,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_51setFileName(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -72522,7 +78806,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_51setFileName(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_ERR(27, 287, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFileName") < 0)) __PYX_ERR(27, 318, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -72533,20 +78817,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_51setFileName(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFileName", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 287, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setFileName", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 318, __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_50setFileName(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_name);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_70setFileName(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_name);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_50setFileName(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_name) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_70setFileName(struct PyPetscViewerObject *__pyx_v_self, PyObject *__pyx_v_name) {
   const char *__pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -72555,7 +78839,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_50setFileName(struct PyPetscV
   __Pyx_RefNannySetupContext("setFileName", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/Viewer.pyx":288
+  /* "PETSc/Viewer.pyx":319
  * 
  *     def setFileName(self, name):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -72564,28 +78848,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_50setFileName(struct PyPetscV
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Viewer.pyx":289
+  /* "PETSc/Viewer.pyx":320
  *     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_ERR(27, 289, __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, 320, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Viewer.pyx":290
+  /* "PETSc/Viewer.pyx":321
  *         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_ERR(27, 290, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileSetName(__pyx_v_self->vwr, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(27, 321, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":287
+  /* "PETSc/Viewer.pyx":318
  *         return mode
  * 
  *     def setFileName(self, name):             # <<<<<<<<<<<<<<
@@ -72607,7 +78891,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_50setFileName(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":292
+/* "PETSc/Viewer.pyx":323
  *         CHKERR( PetscViewerFileSetName(self.vwr, cval) )
  * 
  *     def getFileName(self):             # <<<<<<<<<<<<<<
@@ -72616,23 +78900,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_50setFileName(struct PyPetscV
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_73getFileName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_72getFileName[] = "Viewer.getFileName(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_73getFileName(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_52getFileName(((struct PyPetscViewerObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_72getFileName(((struct PyPetscViewerObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_52getFileName(struct PyPetscViewerObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_72getFileName(struct PyPetscViewerObject *__pyx_v_self) {
   const char *__pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -72640,7 +78924,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_52getFileName(struct PyPetscV
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getFileName", 0);
 
-  /* "PETSc/Viewer.pyx":293
+  /* "PETSc/Viewer.pyx":324
  * 
  *     def getFileName(self):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -72649,16 +78933,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_52getFileName(struct PyPetscV
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Viewer.pyx":294
+  /* "PETSc/Viewer.pyx":325
  *     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_ERR(27, 294, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerFileGetName(__pyx_v_self->vwr, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(27, 325, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":295
+  /* "PETSc/Viewer.pyx":326
  *         cdef const_char *cval = NULL
  *         CHKERR( PetscViewerFileGetName(self.vwr, &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -72666,13 +78950,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_52getFileName(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_ERR(27, 295, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 326, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":292
+  /* "PETSc/Viewer.pyx":323
  *         CHKERR( PetscViewerFileSetName(self.vwr, cval) )
  * 
  *     def getFileName(self):             # <<<<<<<<<<<<<<
@@ -72691,7 +78975,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_52getFileName(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":299
+/* "PETSc/Viewer.pyx":330
  *     # --- methods specific to draw viewers ---
  * 
  *     def setDrawInfo(self,  display=None, title=None, position=None, size=None):             # <<<<<<<<<<<<<<
@@ -72700,9 +78984,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_52getFileName(struct PyPetscV
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_75setDrawInfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_74setDrawInfo[] = "Viewer.setDrawInfo(self, display=None, title=None, position=None, size=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_75setDrawInfo(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;
@@ -72722,9 +79006,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_55setDrawInfo(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -72735,16 +79023,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_55setDrawInfo(PyObject *__pyx
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_display);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_title);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_position);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_size);
@@ -72752,14 +79043,18 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_55setDrawInfo(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDrawInfo") < 0)) __PYX_ERR(27, 299, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDrawInfo") < 0)) __PYX_ERR(27, 330, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -72771,20 +79066,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_55setDrawInfo(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setDrawInfo", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 299, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setDrawInfo", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 330, __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_54setDrawInfo(((struct PyPetscViewerObject *)__pyx_v_self), __pyx_v_display, __pyx_v_title, __pyx_v_position, __pyx_v_size);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_74setDrawInfo(((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_54setDrawInfo(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_74setDrawInfo(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;
@@ -72808,7 +79103,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54setDrawInfo(struct PyPetscV
   __Pyx_INCREF(__pyx_v_display);
   __Pyx_INCREF(__pyx_v_title);
 
-  /* "PETSc/Viewer.pyx":300
+  /* "PETSc/Viewer.pyx":331
  * 
  *     def setDrawInfo(self,  display=None, title=None, position=None, size=None):
  *         cdef const_char *cdisplay = NULL             # <<<<<<<<<<<<<<
@@ -72817,7 +79112,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54setDrawInfo(struct PyPetscV
  */
   __pyx_v_cdisplay = NULL;
 
-  /* "PETSc/Viewer.pyx":301
+  /* "PETSc/Viewer.pyx":332
  *     def setDrawInfo(self,  display=None, title=None, position=None, size=None):
  *         cdef const_char *cdisplay = NULL
  *         cdef const_char *ctitle = NULL             # <<<<<<<<<<<<<<
@@ -72826,31 +79121,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54setDrawInfo(struct PyPetscV
  */
   __pyx_v_ctitle = NULL;
 
-  /* "PETSc/Viewer.pyx":302
+  /* "PETSc/Viewer.pyx":333
  *         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_ERR(27, 302, __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, 333, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_display, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Viewer.pyx":303
+  /* "PETSc/Viewer.pyx":334
  *         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_ERR(27, 303, __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, 334, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_title, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Viewer.pyx":305
+  /* "PETSc/Viewer.pyx":336
  *         title = str2bytes(title, &ctitle)
  *         cdef int x, y, h, w
  *         x = y = h = w = PETSC_DECIDE             # <<<<<<<<<<<<<<
@@ -72862,7 +79157,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54setDrawInfo(struct PyPetscV
   __pyx_v_h = PETSC_DECIDE;
   __pyx_v_w = PETSC_DECIDE;
 
-  /* "PETSc/Viewer.pyx":306
+  /* "PETSc/Viewer.pyx":337
  *         cdef int x, y, h, w
  *         x = y = h = w = PETSC_DECIDE
  *         if position not in (None, PETSC_DECIDE):             # <<<<<<<<<<<<<<
@@ -72871,19 +79166,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54setDrawInfo(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_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_t_3 = PyObject_RichCompare(__pyx_t_1, Py_None, Py_NE); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 337, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(27, 337, __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_ERR(27, 306, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyInt_From_int(PETSC_DECIDE); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 337, __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_ERR(27, 306, __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, 337, __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_ERR(27, 306, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_t_5); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(27, 337, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_t_2 = __pyx_t_4;
   __pyx_L4_bool_binop_done:;
@@ -72891,7 +79186,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54setDrawInfo(struct PyPetscV
   __pyx_t_4 = (__pyx_t_2 != 0);
   if (__pyx_t_4) {
 
-    /* "PETSc/Viewer.pyx":307
+    /* "PETSc/Viewer.pyx":338
  *         x = y = h = w = PETSC_DECIDE
  *         if position not in (None, PETSC_DECIDE):
  *             x, y = position             # <<<<<<<<<<<<<<
@@ -72900,7 +79195,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54setDrawInfo(struct PyPetscV
  */
     if ((likely(PyTuple_CheckExact(__pyx_v_position))) || (PyList_CheckExact(__pyx_v_position))) {
       PyObject* sequence = __pyx_v_position;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -72908,9 +79203,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54setDrawInfo(struct PyPetscV
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        __PYX_ERR(27, 307, __pyx_L1_error)
+        __PYX_ERR(27, 338, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
@@ -72921,21 +79216,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54setDrawInfo(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_ERR(27, 307, __pyx_L1_error)
+      __pyx_t_1 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 338, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
-      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 307, __pyx_L1_error)
+      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 338, __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_ERR(27, 307, __pyx_L1_error)
+      __pyx_t_3 = PyObject_GetIter(__pyx_v_position); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 338, __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_ERR(27, 307, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_3), 2) < 0) __PYX_ERR(27, 338, __pyx_L1_error)
       __pyx_t_6 = NULL;
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       goto __pyx_L7_unpacking_done;
@@ -72943,17 +79238,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54setDrawInfo(struct PyPetscV
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
       __pyx_t_6 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      __PYX_ERR(27, 307, __pyx_L1_error)
+      __PYX_ERR(27, 338, __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_ERR(27, 307, __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, 338, __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_ERR(27, 307, __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, 338, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_v_x = __pyx_t_7;
     __pyx_v_y = __pyx_t_8;
 
-    /* "PETSc/Viewer.pyx":306
+    /* "PETSc/Viewer.pyx":337
  *         cdef int x, y, h, w
  *         x = y = h = w = PETSC_DECIDE
  *         if position not in (None, PETSC_DECIDE):             # <<<<<<<<<<<<<<
@@ -72962,7 +79257,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54setDrawInfo(struct PyPetscV
  */
   }
 
-  /* "PETSc/Viewer.pyx":308
+  /* "PETSc/Viewer.pyx":339
  *         if position not in (None, PETSC_DECIDE):
  *             x, y = position
  *         if size not in (None, PETSC_DECIDE):             # <<<<<<<<<<<<<<
@@ -72971,19 +79266,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54setDrawInfo(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_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_t_1 = PyObject_RichCompare(__pyx_t_5, Py_None, Py_NE); __Pyx_XGOTREF(__pyx_t_1); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 339, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(27, 339, __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_ERR(27, 308, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(PETSC_DECIDE); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 339, __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_ERR(27, 308, __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, 339, __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_ERR(27, 308, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(27, 339, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_t_4 = __pyx_t_2;
   __pyx_L9_bool_binop_done:;
@@ -72991,7 +79286,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54setDrawInfo(struct PyPetscV
   __pyx_t_2 = (__pyx_t_4 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Viewer.pyx":309
+    /* "PETSc/Viewer.pyx":340
  *             x, y = position
  *         if size not in (None, PETSC_DECIDE):
  *             try:             # <<<<<<<<<<<<<<
@@ -73007,7 +79302,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54setDrawInfo(struct PyPetscV
       __Pyx_XGOTREF(__pyx_t_11);
       /*try:*/ {
 
-        /* "PETSc/Viewer.pyx":310
+        /* "PETSc/Viewer.pyx":341
  *         if size not in (None, PETSC_DECIDE):
  *             try:
  *                 w, h = size             # <<<<<<<<<<<<<<
@@ -73016,7 +79311,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54setDrawInfo(struct PyPetscV
  */
         if ((likely(PyTuple_CheckExact(__pyx_v_size))) || (PyList_CheckExact(__pyx_v_size))) {
           PyObject* sequence = __pyx_v_size;
-          #if CYTHON_COMPILING_IN_CPYTHON
+          #if !CYTHON_COMPILING_IN_PYPY
           Py_ssize_t size = Py_SIZE(sequence);
           #else
           Py_ssize_t size = PySequence_Size(sequence);
@@ -73024,9 +79319,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54setDrawInfo(struct PyPetscV
           if (unlikely(size != 2)) {
             if (size > 2) __Pyx_RaiseTooManyValuesError(2);
             else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-            __PYX_ERR(27, 310, __pyx_L11_error)
+            __PYX_ERR(27, 341, __pyx_L11_error)
           }
-          #if CYTHON_COMPILING_IN_CPYTHON
+          #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
           if (likely(PyTuple_CheckExact(sequence))) {
             __pyx_t_5 = PyTuple_GET_ITEM(sequence, 0); 
             __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1); 
@@ -73037,39 +79332,39 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54setDrawInfo(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_ERR(27, 310, __pyx_L11_error)
+          __pyx_t_5 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 341, __pyx_L11_error)
           __Pyx_GOTREF(__pyx_t_5);
-          __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 310, __pyx_L11_error)
+          __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 341, __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_ERR(27, 310, __pyx_L11_error)
+          __pyx_t_1 = PyObject_GetIter(__pyx_v_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 341, __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;
+          index = 0; __pyx_t_5 = __pyx_t_6(__pyx_t_1); if (unlikely(!__pyx_t_5)) goto __pyx_L17_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;
+          index = 1; __pyx_t_3 = __pyx_t_6(__pyx_t_1); if (unlikely(!__pyx_t_3)) goto __pyx_L17_unpacking_failed;
           __Pyx_GOTREF(__pyx_t_3);
-          if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_1), 2) < 0) __PYX_ERR(27, 310, __pyx_L11_error)
+          if (__Pyx_IternextUnpackEndCheck(__pyx_t_6(__pyx_t_1), 2) < 0) __PYX_ERR(27, 341, __pyx_L11_error)
           __pyx_t_6 = NULL;
           __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
-          goto __pyx_L20_unpacking_done;
-          __pyx_L19_unpacking_failed:;
+          goto __pyx_L18_unpacking_done;
+          __pyx_L17_unpacking_failed:;
           __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
           __pyx_t_6 = NULL;
           if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-          __PYX_ERR(27, 310, __pyx_L11_error)
-          __pyx_L20_unpacking_done:;
+          __PYX_ERR(27, 341, __pyx_L11_error)
+          __pyx_L18_unpacking_done:;
         }
-        __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_t_8 = __Pyx_PyInt_As_int(__pyx_t_5); if (unlikely((__pyx_t_8 == (int)-1) && PyErr_Occurred())) __PYX_ERR(27, 341, __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_ERR(27, 310, __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, 341, __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
+        /* "PETSc/Viewer.pyx":340
  *             x, y = position
  *         if size not in (None, PETSC_DECIDE):
  *             try:             # <<<<<<<<<<<<<<
@@ -73080,14 +79375,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54setDrawInfo(struct PyPetscV
       __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;
+      goto __pyx_L16_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":311
+      /* "PETSc/Viewer.pyx":342
  *             try:
  *                 w, h = size
  *             except TypeError:             # <<<<<<<<<<<<<<
@@ -73097,19 +79391,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54setDrawInfo(struct PyPetscV
       __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_ERR(27, 311, __pyx_L13_except_error)
+        if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_5, &__pyx_t_1) < 0) __PYX_ERR(27, 342, __pyx_L13_except_error)
         __Pyx_GOTREF(__pyx_t_3);
         __Pyx_GOTREF(__pyx_t_5);
         __Pyx_GOTREF(__pyx_t_1);
 
-        /* "PETSc/Viewer.pyx":312
+        /* "PETSc/Viewer.pyx":343
  *                 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_ERR(27, 312, __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, 343, __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;
@@ -73120,29 +79414,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54setDrawInfo(struct PyPetscV
       goto __pyx_L13_except_error;
       __pyx_L13_except_error:;
 
-      /* "PETSc/Viewer.pyx":309
+      /* "PETSc/Viewer.pyx":340
  *             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:;
+      __pyx_L16_try_end:;
     }
 
-    /* "PETSc/Viewer.pyx":308
+    /* "PETSc/Viewer.pyx":339
  *         if position not in (None, PETSC_DECIDE):
  *             x, y = position
  *         if size not in (None, PETSC_DECIDE):             # <<<<<<<<<<<<<<
@@ -73151,16 +79443,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54setDrawInfo(struct PyPetscV
  */
   }
 
-  /* "PETSc/Viewer.pyx":313
+  /* "PETSc/Viewer.pyx":344
  *             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_ERR(27, 313, __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 == ((int)-1))) __PYX_ERR(27, 344, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":299
+  /* "PETSc/Viewer.pyx":330
  *     # --- methods specific to draw viewers ---
  * 
  *     def setDrawInfo(self,  display=None, title=None, position=None, size=None):             # <<<<<<<<<<<<<<
@@ -73185,7 +79477,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54setDrawInfo(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":317
+/* "PETSc/Viewer.pyx":348
  *                                        x, y, w, h) )
  * 
  *     def clearDraw(self):             # <<<<<<<<<<<<<<
@@ -73194,38 +79486,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_54setDrawInfo(struct PyPetscV
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_77clearDraw(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6Viewer_76clearDraw[] = "Viewer.clearDraw(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6Viewer_77clearDraw(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_56clearDraw(((struct PyPetscViewerObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6Viewer_76clearDraw(((struct PyPetscViewerObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_56clearDraw(struct PyPetscViewerObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_76clearDraw(struct PyPetscViewerObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("clearDraw", 0);
 
-  /* "PETSc/Viewer.pyx":318
+  /* "PETSc/Viewer.pyx":349
  * 
  *     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_ERR(27, 318, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerDrawClear(__pyx_v_self->vwr)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(27, 349, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":317
+  /* "PETSc/Viewer.pyx":348
  *                                        x, y, w, h) )
  * 
  *     def clearDraw(self):             # <<<<<<<<<<<<<<
@@ -73245,7 +79537,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Viewer_56clearDraw(struct PyPetscVie
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":324
+/* "PETSc/Viewer.pyx":355
  * cdef class ViewerHDF5(Viewer):
  * 
  *     def create(self, name, mode=None, comm=None):             # <<<<<<<<<<<<<<
@@ -73273,8 +79565,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_10ViewerHDF5_1create(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -73283,11 +79578,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_10ViewerHDF5_1create(PyObject *__pyx_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mode);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -73295,12 +79592,14 @@ 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_ERR(27, 324, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(27, 355, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -73312,7 +79611,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_ERR(27, 324, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("create", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 355, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.ViewerHDF5.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -73339,17 +79638,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_create(struct __pyx_obj_
   __Pyx_RefNannySetupContext("create", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/Viewer.pyx":325
+  /* "PETSc/Viewer.pyx":356
  * 
  *     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_ERR(27, 325, __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, 356, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Viewer.pyx":326
+  /* "PETSc/Viewer.pyx":357
  *     def create(self, name, mode=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
@@ -73358,29 +79657,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_create(struct __pyx_obj_
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/Viewer.pyx":327
+  /* "PETSc/Viewer.pyx":358
  *         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_ERR(27, 327, __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, 358, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Viewer.pyx":328
+  /* "PETSc/Viewer.pyx":359
  *         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)-1L))) __PYX_ERR(27, 328, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_filemode(__pyx_v_mode); if (unlikely(__pyx_t_3 == ((PetscFileMode)((PetscFileMode)-1L)))) __PYX_ERR(27, 359, __pyx_L1_error)
   __pyx_v_cmode = __pyx_t_3;
 
-  /* "PETSc/Viewer.pyx":329
+  /* "PETSc/Viewer.pyx":360
  *         name = str2bytes(name, &cname)
  *         cdef PetscFileMode cmode = filemode(mode)
  *         cdef PetscViewer newvwr = NULL             # <<<<<<<<<<<<<<
@@ -73389,16 +79688,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_create(struct __pyx_obj_
  */
   __pyx_v_newvwr = NULL;
 
-  /* "PETSc/Viewer.pyx":330
+  /* "PETSc/Viewer.pyx":361
  *         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_ERR(27, 330, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerCreate(__pyx_v_ccomm, (&__pyx_v_newvwr))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(27, 361, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":331
+  /* "PETSc/Viewer.pyx":362
  *         cdef PetscViewer newvwr = NULL
  *         CHKERR( PetscViewerCreate(ccomm, &newvwr) )
  *         PetscCLEAR(self.obj); self.vwr = newvwr             # <<<<<<<<<<<<<<
@@ -73408,34 +79707,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":332
+  /* "PETSc/Viewer.pyx":363
  *         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_ERR(27, 332, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerSetType(__pyx_v_self->__pyx_base.vwr, PETSCVIEWERHDF5)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(27, 363, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":333
+  /* "PETSc/Viewer.pyx":364
  *         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_ERR(27, 333, __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 == ((int)-1))) __PYX_ERR(27, 364, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":334
+  /* "PETSc/Viewer.pyx":365
  *         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_ERR(27, 334, __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 == ((int)-1))) __PYX_ERR(27, 365, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":335
+  /* "PETSc/Viewer.pyx":366
  *         CHKERR( PetscViewerFileSetMode(self.vwr, cmode) )
  *         CHKERR( PetscViewerFileSetName(self.vwr, cname) )
  *         return self             # <<<<<<<<<<<<<<
@@ -73447,7 +79746,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_create(struct __pyx_obj_
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":324
+  /* "PETSc/Viewer.pyx":355
  * cdef class ViewerHDF5(Viewer):
  * 
  *     def create(self, name, mode=None, comm=None):             # <<<<<<<<<<<<<<
@@ -73467,7 +79766,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_create(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":337
+/* "PETSc/Viewer.pyx":368
  *         return self
  * 
  *     def getTimestep(self):             # <<<<<<<<<<<<<<
@@ -73500,7 +79799,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_2getTimestep(struct __py
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getTimestep", 0);
 
-  /* "PETSc/Viewer.pyx":338
+  /* "PETSc/Viewer.pyx":369
  * 
  *     def getTimestep(self):
  *         cdef PetscInt ctimestep = 0             # <<<<<<<<<<<<<<
@@ -73509,16 +79808,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_2getTimestep(struct __py
  */
   __pyx_v_ctimestep = 0;
 
-  /* "PETSc/Viewer.pyx":339
+  /* "PETSc/Viewer.pyx":370
  *     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_ERR(27, 339, __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 == ((int)-1))) __PYX_ERR(27, 370, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":340
+  /* "PETSc/Viewer.pyx":371
  *         cdef PetscInt ctimestep = 0
  *         CHKERR( PetscViewerHDF5GetTimestep(self.vwr, &ctimestep) )
  *         return toInt(ctimestep)             # <<<<<<<<<<<<<<
@@ -73526,13 +79825,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_ERR(27, 340, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ctimestep); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 371, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":337
+  /* "PETSc/Viewer.pyx":368
  *         return self
  * 
  *     def getTimestep(self):             # <<<<<<<<<<<<<<
@@ -73551,7 +79850,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_2getTimestep(struct __py
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":342
+/* "PETSc/Viewer.pyx":373
  *         return toInt(ctimestep)
  * 
  *     def setTimestep(self, timestep):             # <<<<<<<<<<<<<<
@@ -73575,6 +79874,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_10ViewerHDF5_5setTimestep(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -73585,7 +79885,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_ERR(27, 342, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTimestep") < 0)) __PYX_ERR(27, 373, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -73596,7 +79896,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_ERR(27, 342, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setTimestep", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 373, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.ViewerHDF5.setTimestep", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -73616,17 +79916,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_4setTimestep(struct __py
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setTimestep", 0);
 
-  /* "PETSc/Viewer.pyx":343
+  /* "PETSc/Viewer.pyx":374
  * 
  *     def setTimestep(self, timestep):
  *         CHKERR( PetscViewerHDF5SetTimestep(self.vwr, asInt(timestep)) )             # <<<<<<<<<<<<<<
  * 
  *     def incrementTimestep(self):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_timestep); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(27, 374, __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 == ((int)-1))) __PYX_ERR(27, 374, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":342
+  /* "PETSc/Viewer.pyx":373
  *         return toInt(ctimestep)
  * 
  *     def setTimestep(self, timestep):             # <<<<<<<<<<<<<<
@@ -73646,7 +79946,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_4setTimestep(struct __py
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":345
+/* "PETSc/Viewer.pyx":376
  *         CHKERR( PetscViewerHDF5SetTimestep(self.vwr, asInt(timestep)) )
  * 
  *     def incrementTimestep(self):             # <<<<<<<<<<<<<<
@@ -73677,16 +79977,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_6incrementTimestep(struc
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("incrementTimestep", 0);
 
-  /* "PETSc/Viewer.pyx":346
+  /* "PETSc/Viewer.pyx":377
  * 
  *     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_ERR(27, 346, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerHDF5IncrementTimestep(__pyx_v_self->__pyx_base.vwr)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(27, 377, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":345
+  /* "PETSc/Viewer.pyx":376
  *         CHKERR( PetscViewerHDF5SetTimestep(self.vwr, asInt(timestep)) )
  * 
  *     def incrementTimestep(self):             # <<<<<<<<<<<<<<
@@ -73706,7 +80006,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_6incrementTimestep(struc
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":348
+/* "PETSc/Viewer.pyx":379
  *         CHKERR( PetscViewerHDF5IncrementTimestep(self.vwr) )
  * 
  *     def pushGroup(self, group):             # <<<<<<<<<<<<<<
@@ -73730,6 +80030,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_10ViewerHDF5_9pushGroup(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -73740,7 +80041,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_ERR(27, 348, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "pushGroup") < 0)) __PYX_ERR(27, 379, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -73751,7 +80052,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_ERR(27, 348, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("pushGroup", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(27, 379, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.ViewerHDF5.pushGroup", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -73773,7 +80074,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_8pushGroup(struct __pyx_
   __Pyx_RefNannySetupContext("pushGroup", 0);
   __Pyx_INCREF(__pyx_v_group);
 
-  /* "PETSc/Viewer.pyx":349
+  /* "PETSc/Viewer.pyx":380
  * 
  *     def pushGroup(self, group):
  *         cdef const_char *cgroup = NULL             # <<<<<<<<<<<<<<
@@ -73782,28 +80083,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_8pushGroup(struct __pyx_
  */
   __pyx_v_cgroup = NULL;
 
-  /* "PETSc/Viewer.pyx":350
+  /* "PETSc/Viewer.pyx":381
  *     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_ERR(27, 350, __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, 381, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_group, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Viewer.pyx":351
+  /* "PETSc/Viewer.pyx":382
  *         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_ERR(27, 351, __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 == ((int)-1))) __PYX_ERR(27, 382, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":348
+  /* "PETSc/Viewer.pyx":379
  *         CHKERR( PetscViewerHDF5IncrementTimestep(self.vwr) )
  * 
  *     def pushGroup(self, group):             # <<<<<<<<<<<<<<
@@ -73825,7 +80126,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_8pushGroup(struct __pyx_
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":353
+/* "PETSc/Viewer.pyx":384
  *         CHKERR( PetscViewerHDF5PushGroup(self.vwr, cgroup) )
  * 
  *     def popGroup(self):             # <<<<<<<<<<<<<<
@@ -73856,16 +80157,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_10popGroup(struct __pyx_
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("popGroup", 0);
 
-  /* "PETSc/Viewer.pyx":354
+  /* "PETSc/Viewer.pyx":385
  * 
  *     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_ERR(27, 354, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscViewerHDF5PopGroup(__pyx_v_self->__pyx_base.vwr)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(27, 385, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":353
+  /* "PETSc/Viewer.pyx":384
  *         CHKERR( PetscViewerHDF5PushGroup(self.vwr, cgroup) )
  * 
  *     def popGroup(self):             # <<<<<<<<<<<<<<
@@ -73885,7 +80186,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_10popGroup(struct __pyx_
   return __pyx_r;
 }
 
-/* "PETSc/Viewer.pyx":356
+/* "PETSc/Viewer.pyx":387
  *         CHKERR( PetscViewerHDF5PopGroup(self.vwr) )
  * 
  *     def getGroup(self):             # <<<<<<<<<<<<<<
@@ -73918,7 +80219,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_12getGroup(struct __pyx_
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getGroup", 0);
 
-  /* "PETSc/Viewer.pyx":357
+  /* "PETSc/Viewer.pyx":388
  * 
  *     def getGroup(self):
  *         cdef const_char *cgroup = NULL             # <<<<<<<<<<<<<<
@@ -73927,16 +80228,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_10ViewerHDF5_12getGroup(struct __pyx_
  */
   __pyx_v_cgroup = NULL;
 
-  /* "PETSc/Viewer.pyx":358
+  /* "PETSc/Viewer.pyx":389
  *     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_ERR(27, 358, __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 == ((int)-1))) __PYX_ERR(27, 389, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":359
+  /* "PETSc/Viewer.pyx":390
  *         cdef const_char *cgroup = NULL
  *         CHKERR( PetscViewerHDF5GetGroup(self.vwr, &cgroup) )
  *         return bytes2str(cgroup)             # <<<<<<<<<<<<<<
@@ -73944,13 +80245,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_ERR(27, 359, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cgroup); if (unlikely(!__pyx_t_2)) __PYX_ERR(27, 390, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Viewer.pyx":356
+  /* "PETSc/Viewer.pyx":387
  *         CHKERR( PetscViewerHDF5PopGroup(self.vwr) )
  * 
  *     def getGroup(self):             # <<<<<<<<<<<<<<
@@ -74073,7 +80374,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_2__call__(struct PyPetscRando
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -74140,6 +80441,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Random_5view(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -74157,6 +80459,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Random_5view(PyObject *__pyx_v_self,
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -74239,7 +80542,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_4view(struct PyPetscRandomObj
  * 
  *     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_ERR(28, 26, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomView(__pyx_v_self->rnd, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(28, 26, __pyx_L1_error)
 
   /* "PETSc/Random.pyx":22
  *         return self.getValue()
@@ -74299,7 +80602,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_6destroy(struct PyPetscRandom
  *         return self
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomDestroy((&__pyx_v_self->rnd))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(28, 29, __pyx_L1_error)
 
   /* "PETSc/Random.pyx":30
  *     def destroy(self):
@@ -74356,6 +80659,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Random_9create(PyObject *__pyx_v_sel
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -74373,6 +80677,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Random_9create(PyObject *__pyx_v_sel
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -74419,7 +80724,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_8create(struct PyPetscRandomO
  *         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_ERR(28, 34, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomCreate(__pyx_v_ccomm, (&__pyx_v_self->rnd))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(28, 34, __pyx_L1_error)
 
   /* "PETSc/Random.pyx":35
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
@@ -74475,6 +80780,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Random_11setType(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -74546,7 +80852,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_10setType(struct PyPetscRando
  * 
  *     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_ERR(28, 40, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomSetType(__pyx_v_self->rnd, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(28, 40, __pyx_L1_error)
 
   /* "PETSc/Random.pyx":37
  *         return self
@@ -74619,7 +80925,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_12getType(struct PyPetscRando
  *         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_ERR(28, 44, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomGetType(__pyx_v_self->rnd, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(28, 44, __pyx_L1_error)
 
   /* "PETSc/Random.pyx":45
  *         cdef PetscRandomType cval = NULL
@@ -74692,7 +80998,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_14setFromOptions(struct PyPet
  * 
  *     def getValue(self):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomSetFromOptions(__pyx_v_self->rnd)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(28, 48, __pyx_L1_error)
 
   /* "PETSc/Random.pyx":47
  *         return bytes2str(cval)
@@ -74763,7 +81069,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_16getValue(struct PyPetscRand
  *         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_ERR(28, 52, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomGetValue(__pyx_v_self->rnd, (&__pyx_v_sval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(28, 52, __pyx_L1_error)
 
   /* "PETSc/Random.pyx":53
  *         cdef PetscScalar sval = 0
@@ -74847,7 +81153,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_18getValueReal(struct PyPetsc
  *         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_ERR(28, 57, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomGetValueReal(__pyx_v_self->rnd, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(28, 57, __pyx_L1_error)
 
   /* "PETSc/Random.pyx":58
  *         cdef PetscReal rval = 0
@@ -74931,7 +81237,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_20getSeed(struct PyPetscRando
  *         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_ERR(28, 62, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomGetSeed(__pyx_v_self->rnd, (&__pyx_v_seed))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(28, 62, __pyx_L1_error)
 
   /* "PETSc/Random.pyx":63
  *         cdef unsigned long seed = 0
@@ -74991,6 +81297,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Random_23setSeed(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -75008,6 +81315,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Random_23setSeed(PyObject *__pyx_v_s
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -75057,7 +81365,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_22setSeed(struct PyPetscRando
  * 
  */
     __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)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomSetSeed(__pyx_v_self->rnd, __pyx_t_3)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(28, 67, __pyx_L1_error)
 
     /* "PETSc/Random.pyx":66
  * 
@@ -75075,7 +81383,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_22setSeed(struct PyPetscRando
  * 
  *     def getInterval(self):
  */
-  __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)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomSeed(__pyx_v_self->rnd)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(28, 68, __pyx_L1_error)
 
   /* "PETSc/Random.pyx":65
  *         return seed
@@ -75158,7 +81466,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_24getInterval(struct PyPetscR
  *         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_ERR(28, 73, __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 == ((int)-1))) __PYX_ERR(28, 73, __pyx_L1_error)
 
   /* "PETSc/Random.pyx":74
  *         cdef PetscScalar sval2 = 1
@@ -75229,6 +81537,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6Random_27setInterval(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -75305,7 +81614,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_26setInterval(struct PyPetscR
  */
   if ((likely(PyTuple_CheckExact(__pyx_v_interval))) || (PyList_CheckExact(__pyx_v_interval))) {
     PyObject* sequence = __pyx_v_interval;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
     Py_ssize_t size = Py_SIZE(sequence);
     #else
     Py_ssize_t size = PySequence_Size(sequence);
@@ -75315,7 +81624,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_26setInterval(struct PyPetscR
       else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
       __PYX_ERR(28, 79, __pyx_L1_error)
     }
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     if (likely(PyTuple_CheckExact(sequence))) {
       __pyx_t_1 = PyTuple_GET_ITEM(sequence, 0); 
       __pyx_t_2 = PyTuple_GET_ITEM(sequence, 1); 
@@ -75363,7 +81672,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_26setInterval(struct PyPetscR
  *         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_ERR(28, 80, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_low); if (unlikely(__pyx_t_5 == ((PetscScalar)((PetscScalar)(-1.0))) && PyErr_Occurred())) __PYX_ERR(28, 80, __pyx_L1_error)
   __pyx_v_sval1 = __pyx_t_5;
 
   /* "PETSc/Random.pyx":81
@@ -75373,7 +81682,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_26setInterval(struct PyPetscR
  *         CHKERR( PetscRandomSetInterval(self.rnd, sval1, sval2) )
  * 
  */
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_high); if (unlikely(PyErr_Occurred())) __PYX_ERR(28, 81, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_high); if (unlikely(__pyx_t_5 == ((PetscScalar)((PetscScalar)(-1.0))) && PyErr_Occurred())) __PYX_ERR(28, 81, __pyx_L1_error)
   __pyx_v_sval2 = __pyx_t_5;
 
   /* "PETSc/Random.pyx":82
@@ -75383,7 +81692,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_26setInterval(struct PyPetscR
  * 
  *     #
  */
-  __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)
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscRandomSetInterval(__pyx_v_self->rnd, __pyx_v_sval1, __pyx_v_sval2)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(28, 82, __pyx_L1_error)
 
   /* "PETSc/Random.pyx":76
  *         return (toScalar(sval1), toScalar(sval2))
@@ -75450,7 +81759,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_4seed___get__(struct PyPetscR
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -75532,7 +81841,7 @@ static int __pyx_pf_8petsc4py_5PETSc_6Random_4seed_2__set__(struct PyPetscRandom
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -75545,15 +81854,33 @@ static int __pyx_pf_8petsc4py_5PETSc_6Random_4seed_2__set__(struct PyPetscRandom
     __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_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_ERR(28, 90, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 90, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 90, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __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_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;
@@ -75621,7 +81948,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6Random_8interval___get__(struct PyPe
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -75703,7 +82030,7 @@ static int __pyx_pf_8petsc4py_5PETSc_6Random_8interval_2__set__(struct PyPetscRa
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -75716,15 +82043,33 @@ static int __pyx_pf_8petsc4py_5PETSc_6Random_8interval_2__set__(struct PyPetscRa
     __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_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_ERR(28, 96, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 96, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 96, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __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_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;
@@ -75872,7 +82217,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_ERR(29, 24, __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 == ((int)-1))) __PYX_ERR(29, 24, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":22
  *     # buffer interface (PEP 3118)
@@ -75951,7 +82296,7 @@ static void __pyx_pf_8petsc4py_5PETSc_2IS_4__releasebuffer__(struct PyPetscISObj
  *         <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)
+  __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 == ((int)-1))) __PYX_ERR(29, 28, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":29
  *         cdef _IS_buffer buf = <_IS_buffer>(view.obj)
@@ -75974,7 +82319,7 @@ static void __pyx_pf_8petsc4py_5PETSc_2IS_4__releasebuffer__(struct PyPetscISObj
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_WriteUnraisable("petsc4py.PETSc.IS.__releasebuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename, 0, 0);
+  __Pyx_WriteUnraisable("petsc4py.PETSc.IS.__releasebuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
   __pyx_L0:;
   __Pyx_XDECREF((PyObject *)__pyx_v_buf);
   __Pyx_RefNannyFinishContext();
@@ -76194,6 +82539,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_11view(PyObject *__pyx_v_self, Py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -76211,6 +82557,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_11view(PyObject *__pyx_v_self, Py
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -76277,7 +82624,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_10view(struct PyPetscISObject *__
  * 
  *     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_ERR(29, 48, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISView(__pyx_v_self->iset, __pyx_v_cviewer)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(29, 48, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":45
  *     #
@@ -76337,7 +82684,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_12destroy(struct PyPetscISObject
  *         return self
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISDestroy((&__pyx_v_self->iset))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 51, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":52
  *     def destroy(self):
@@ -76394,6 +82741,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_15create(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -76411,6 +82759,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_15create(PyObject *__pyx_v_self,
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -76467,7 +82816,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_14create(struct PyPetscISObject *
  *         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_ERR(29, 57, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISCreate(__pyx_v_ccomm, (&__pyx_v_newiset))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(29, 57, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":58
  *         cdef PetscIS newiset = NULL
@@ -76533,6 +82882,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_17setType(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -76604,7 +82954,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_16setType(struct PyPetscISObject
  * 
  *     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_ERR(29, 64, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISSetType(__pyx_v_self->iset, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(29, 64, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":61
  *         return self
@@ -76677,7 +83027,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_18getType(struct PyPetscISObject
  *         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_ERR(29, 68, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetType(__pyx_v_self->iset, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 68, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":69
  *         cdef PetscISType cval = NULL
@@ -76738,7 +83088,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_21createGeneral(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -76747,6 +83099,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_21createGeneral(PyObject *__pyx_v
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_indices)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -76759,6 +83112,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_21createGeneral(PyObject *__pyx_v
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -76853,7 +83207,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_20createGeneral(struct PyPetscISO
  *         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_ERR(29, 77, __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 == ((int)-1))) __PYX_ERR(29, 77, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":78
  *         indices = iarray_i(indices, &nidx, &idx)
@@ -76924,8 +83278,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_23createBlock(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -76934,11 +83291,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_23createBlock(PyObject *__pyx_v_s
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_bsize)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(29, 81, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -76951,6 +83310,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_23createBlock(PyObject *__pyx_v_s
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -77009,7 +83369,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_22createBlock(struct PyPetscISObj
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(29, 83, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_bsize); if (unlikely(__pyx_t_2 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(29, 83, __pyx_L1_error)
   __pyx_v_bs = __pyx_t_2;
 
   /* "PETSc/IS.pyx":84
@@ -77059,7 +83419,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_22createBlock(struct PyPetscISObj
  *         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_ERR(29, 88, __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 == ((int)-1))) __PYX_ERR(29, 88, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":89
  *         indices = iarray_i(indices, &nidx, &idx)
@@ -77133,9 +83493,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_25createStride(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -77144,16 +83508,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_25createStride(PyObject *__pyx_v_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_first);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_step);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -77166,8 +83533,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_25createStride(PyObject *__pyx_v_
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -77223,7 +83593,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_24createStride(struct PyPetscISOb
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(29, 94, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_size); if (unlikely(__pyx_t_2 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(29, 94, __pyx_L1_error)
   __pyx_v_csize = __pyx_t_2;
 
   /* "PETSc/IS.pyx":95
@@ -77233,7 +83603,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_24createStride(struct PyPetscISOb
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(29, 95, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_first); if (unlikely(__pyx_t_2 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(29, 95, __pyx_L1_error)
   __pyx_v_cfirst = __pyx_t_2;
 
   /* "PETSc/IS.pyx":96
@@ -77243,7 +83613,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_24createStride(struct PyPetscISOb
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(29, 96, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_step); if (unlikely(__pyx_t_2 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(29, 96, __pyx_L1_error)
   __pyx_v_cstep = __pyx_t_2;
 
   /* "PETSc/IS.pyx":97
@@ -77262,7 +83632,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_24createStride(struct PyPetscISOb
  *         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_ERR(29, 98, __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 == ((int)-1))) __PYX_ERR(29, 98, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":99
  *         cdef PetscIS newiset = NULL
@@ -77348,7 +83718,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_26duplicate(struct PyPetscISObjec
  */
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -77376,7 +83746,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_26duplicate(struct PyPetscISObjec
  *         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_ERR(29, 104, __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 == ((int)-1))) __PYX_ERR(29, 104, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":105
  *         cdef IS iset = type(self)()
@@ -77437,6 +83807,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_29copy(PyObject *__pyx_v_self, Py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -77454,6 +83825,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_29copy(PyObject *__pyx_v_self, Py
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -77512,7 +83884,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_28copy(struct PyPetscISObject *__
  */
     __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
     __pyx_t_4 = ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))); __pyx_t_5 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
       __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
       if (likely(__pyx_t_5)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -77559,7 +83931,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_28copy(struct PyPetscISObject *__
  *         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_ERR(29, 111, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISDuplicate(__pyx_v_self->iset, (&__pyx_v_result->iset))); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(29, 111, __pyx_L1_error)
 
     /* "PETSc/IS.pyx":110
  *         if result is None:
@@ -77577,14 +83949,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_28copy(struct PyPetscISObject *__
  *         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_ERR(29, 112, __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 == ((int)-1))) __PYX_ERR(29, 112, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":113
  *             CHKERR( ISDuplicate(self.iset, &result.iset) )
  *         CHKERR( ISCopy(self.iset, result.iset) )
  *         return result             # <<<<<<<<<<<<<<
  * 
- *     def load(self, Viewer viewer not None):
+ *     def load(self, Viewer viewer):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_result));
@@ -77616,7 +83988,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_28copy(struct PyPetscISObject *__
 /* "PETSc/IS.pyx":115
  *         return result
  * 
- *     def load(self, Viewer viewer not None):             # <<<<<<<<<<<<<<
+ *     def load(self, Viewer viewer):             # <<<<<<<<<<<<<<
  *         cdef MPI_Comm comm = MPI_COMM_NULL
  *         cdef PetscObject obj = <PetscObject>(viewer.vwr)
  */
@@ -77637,6 +84009,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_31load(PyObject *__pyx_v_self, Py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -77687,7 +84060,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_30load(struct PyPetscISObject *__
 
   /* "PETSc/IS.pyx":116
  * 
- *     def load(self, Viewer viewer not None):
+ *     def load(self, Viewer viewer):
  *         cdef MPI_Comm comm = MPI_COMM_NULL             # <<<<<<<<<<<<<<
  *         cdef PetscObject obj = <PetscObject>(viewer.vwr)
  *         if self.iset == NULL:
@@ -77695,7 +84068,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_30load(struct PyPetscISObject *__
   __pyx_v_comm = MPI_COMM_NULL;
 
   /* "PETSc/IS.pyx":117
- *     def load(self, Viewer viewer not None):
+ *     def load(self, Viewer viewer):
  *         cdef MPI_Comm comm = MPI_COMM_NULL
  *         cdef PetscObject obj = <PetscObject>(viewer.vwr)             # <<<<<<<<<<<<<<
  *         if self.iset == NULL:
@@ -77720,7 +84093,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_30load(struct PyPetscISObject *__
  *             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_ERR(29, 119, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetComm(__pyx_v_obj, (&__pyx_v_comm))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(29, 119, __pyx_L1_error)
 
     /* "PETSc/IS.pyx":120
  *         if self.iset == NULL:
@@ -77729,7 +84102,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_30load(struct PyPetscISObject *__
  *         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_ERR(29, 120, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISCreate(__pyx_v_comm, (&__pyx_v_self->iset))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(29, 120, __pyx_L1_error)
 
     /* "PETSc/IS.pyx":118
  *         cdef MPI_Comm comm = MPI_COMM_NULL
@@ -77747,7 +84120,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_30load(struct PyPetscISObject *__
  *         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_ERR(29, 121, __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 == ((int)-1))) __PYX_ERR(29, 121, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":122
  *             CHKERR( ISCreate(comm, &self.iset) )
@@ -77764,7 +84137,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_30load(struct PyPetscISObject *__
   /* "PETSc/IS.pyx":115
  *         return result
  * 
- *     def load(self, Viewer viewer not None):             # <<<<<<<<<<<<<<
+ *     def load(self, Viewer viewer):             # <<<<<<<<<<<<<<
  *         cdef MPI_Comm comm = MPI_COMM_NULL
  *         cdef PetscObject obj = <PetscObject>(viewer.vwr)
  */
@@ -77831,7 +84204,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_32allGather(struct PyPetscISObjec
  *         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_ERR(29, 126, __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 == ((int)-1))) __PYX_ERR(29, 126, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":127
  *         cdef IS iset = IS()
@@ -77903,7 +84276,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_34toGeneral(struct PyPetscISObjec
  *         return self
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISToGeneral(__pyx_v_self->iset)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 130, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":131
  *     def toGeneral(self):
@@ -77960,6 +84333,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_37invertPermutation(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -77977,6 +84351,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_37invertPermutation(PyObject *__p
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -78029,7 +84404,7 @@ 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 == -1L && PyErr_Occurred())) __PYX_ERR(29, 135, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_nlocal); if (unlikely(__pyx_t_3 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(29, 135, __pyx_L1_error)
     __pyx_v_cnlocal = __pyx_t_3;
   }
 
@@ -78052,7 +84427,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_36invertPermutation(struct PyPets
  *         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_ERR(29, 137, __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 == ((int)-1))) __PYX_ERR(29, 137, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":138
  *         cdef IS iset = IS()
@@ -78135,7 +84510,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_38getSize(struct PyPetscISObject
  *         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_ERR(29, 142, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetSize(__pyx_v_self->iset, (&__pyx_v_N))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 142, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":143
  *         cdef PetscInt N = 0
@@ -78219,7 +84594,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_40getLocalSize(struct PyPetscISOb
  *         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_ERR(29, 147, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetLocalSize(__pyx_v_self->iset, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 147, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":148
  *         cdef PetscInt n = 0
@@ -78307,7 +84682,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_42getSizes(struct PyPetscISObject
  *         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_ERR(29, 152, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetLocalSize(__pyx_v_self->iset, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 152, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":153
  *         cdef PetscInt n = 0, N = 0
@@ -78316,7 +84691,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_42getSizes(struct PyPetscISObject
  *         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_ERR(29, 153, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetSize(__pyx_v_self->iset, (&__pyx_v_N))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 153, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":154
  *         CHKERR( ISGetLocalSize(self.iset, &n) )
@@ -78412,7 +84787,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_44getBlockSize(struct PyPetscISOb
  *         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_ERR(29, 158, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetBlockSize(__pyx_v_self->iset, (&__pyx_v_bs))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 158, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":159
  *         cdef PetscInt bs = 1
@@ -78471,6 +84846,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_47setBlockSize(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -78520,7 +84896,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_46setBlockSize(struct PyPetscISOb
  *         CHKERR( ISSetBlockSize(self.iset, cbs) )
  * 
  */
-  __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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_bs); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(29, 162, __pyx_L1_error)
   __pyx_v_cbs = __pyx_t_1;
 
   /* "PETSc/IS.pyx":163
@@ -78530,7 +84906,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_46setBlockSize(struct PyPetscISOb
  * 
  *     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_ERR(29, 163, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISSetBlockSize(__pyx_v_self->iset, __pyx_v_cbs)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(29, 163, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":161
  *         return toInt(bs)
@@ -78590,7 +84966,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_48sort(struct PyPetscISObject *__
  *         return self
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISSort(__pyx_v_self->iset)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 166, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":167
  *     def sort(self):
@@ -78660,7 +85036,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_50isSorted(struct PyPetscISObject
  *     def isSorted(self):
  *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
  *         CHKERR( ISSorted(self.iset, &flag) )
- *         return <bint> flag
+ *         return toBool(flag)
  */
   __pyx_v_flag = PETSC_FALSE;
 
@@ -78668,20 +85044,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_50isSorted(struct PyPetscISObject
  *     def isSorted(self):
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( ISSorted(self.iset, &flag) )             # <<<<<<<<<<<<<<
- *         return <bint> flag
+ *         return toBool(flag)
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISSorted(__pyx_v_self->iset, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 171, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":172
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( ISSorted(self.iset, &flag) )
- *         return <bint> flag             # <<<<<<<<<<<<<<
+ *         return toBool(flag)             # <<<<<<<<<<<<<<
  * 
  *     def setPermutation(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 172, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toBool(__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;
@@ -78707,7 +85083,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_50isSorted(struct PyPetscISObject
 }
 
 /* "PETSc/IS.pyx":174
- *         return <bint> flag
+ *         return toBool(flag)
  * 
  *     def setPermutation(self):             # <<<<<<<<<<<<<<
  *         CHKERR( ISSetPermutation(self.iset) )
@@ -78744,7 +85120,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_52setPermutation(struct PyPetscIS
  *         return self
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISSetPermutation(__pyx_v_self->iset)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 175, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":176
  *     def setPermutation(self):
@@ -78759,7 +85135,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_52setPermutation(struct PyPetscIS
   goto __pyx_L0;
 
   /* "PETSc/IS.pyx":174
- *         return <bint> flag
+ *         return toBool(flag)
  * 
  *     def setPermutation(self):             # <<<<<<<<<<<<<<
  *         CHKERR( ISSetPermutation(self.iset) )
@@ -78814,7 +85190,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_54isPermutation(struct PyPetscISO
  *     def isPermutation(self):
  *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
  *         CHKERR( ISPermutation(self.iset, &flag) )
- *         return <bint> flag
+ *         return toBool(flag)
  */
   __pyx_v_flag = PETSC_FALSE;
 
@@ -78822,20 +85198,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_54isPermutation(struct PyPetscISO
  *     def isPermutation(self):
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( ISPermutation(self.iset, &flag) )             # <<<<<<<<<<<<<<
- *         return <bint> flag
+ *         return toBool(flag)
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISPermutation(__pyx_v_self->iset, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 180, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":181
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( ISPermutation(self.iset, &flag) )
- *         return <bint> flag             # <<<<<<<<<<<<<<
+ *         return toBool(flag)             # <<<<<<<<<<<<<<
  * 
  *     def setIdentity(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 181, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toBool(__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;
@@ -78861,7 +85237,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_54isPermutation(struct PyPetscISO
 }
 
 /* "PETSc/IS.pyx":183
- *         return <bint> flag
+ *         return toBool(flag)
  * 
  *     def setIdentity(self):             # <<<<<<<<<<<<<<
  *         CHKERR( ISSetIdentity(self.iset) )
@@ -78898,7 +85274,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_56setIdentity(struct PyPetscISObj
  *         return self
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISSetIdentity(__pyx_v_self->iset)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 184, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":185
  *     def setIdentity(self):
@@ -78913,7 +85289,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_56setIdentity(struct PyPetscISObj
   goto __pyx_L0;
 
   /* "PETSc/IS.pyx":183
- *         return <bint> flag
+ *         return toBool(flag)
  * 
  *     def setIdentity(self):             # <<<<<<<<<<<<<<
  *         CHKERR( ISSetIdentity(self.iset) )
@@ -78968,7 +85344,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_58isIdentity(struct PyPetscISObje
  *     def isIdentity(self):
  *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
  *         CHKERR( ISIdentity(self.iset, &flag) )
- *         return <bint> flag
+ *         return toBool(flag)
  */
   __pyx_v_flag = PETSC_FALSE;
 
@@ -78976,20 +85352,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_58isIdentity(struct PyPetscISObje
  *     def isIdentity(self):
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( ISIdentity(self.iset, &flag) )             # <<<<<<<<<<<<<<
- *         return <bint> flag
+ *         return toBool(flag)
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISIdentity(__pyx_v_self->iset, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 189, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":190
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( ISIdentity(self.iset, &flag) )
- *         return <bint> flag             # <<<<<<<<<<<<<<
+ *         return toBool(flag)             # <<<<<<<<<<<<<<
  * 
- *     def equal(self, IS iset not None):
+ *     def equal(self, IS iset):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 190, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toBool(__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;
@@ -79015,9 +85391,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_58isIdentity(struct PyPetscISObje
 }
 
 /* "PETSc/IS.pyx":192
- *         return <bint> flag
+ *         return toBool(flag)
  * 
- *     def equal(self, IS iset not None):             # <<<<<<<<<<<<<<
+ *     def equal(self, IS iset):             # <<<<<<<<<<<<<<
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( ISEqual(self.iset, iset.iset, &flag) )
  */
@@ -79038,6 +85414,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_61equal(PyObject *__pyx_v_self, P
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -79087,40 +85464,40 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_60equal(struct PyPetscISObject *_
 
   /* "PETSc/IS.pyx":193
  * 
- *     def equal(self, IS iset not None):
+ *     def equal(self, IS iset):
  *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
  *         CHKERR( ISEqual(self.iset, iset.iset, &flag) )
- *         return <bint> flag
+ *         return toBool(flag)
  */
   __pyx_v_flag = PETSC_FALSE;
 
   /* "PETSc/IS.pyx":194
- *     def equal(self, IS iset not None):
+ *     def equal(self, IS iset):
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( ISEqual(self.iset, iset.iset, &flag) )             # <<<<<<<<<<<<<<
- *         return <bint> flag
+ *         return toBool(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_ERR(29, 194, __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 == ((int)-1))) __PYX_ERR(29, 194, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":195
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( ISEqual(self.iset, iset.iset, &flag) )
- *         return <bint> flag             # <<<<<<<<<<<<<<
+ *         return toBool(flag)             # <<<<<<<<<<<<<<
  * 
- *     def sum(self, IS iset not None):
+ *     def sum(self, IS iset):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 195, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toBool(__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":192
- *         return <bint> flag
+ *         return toBool(flag)
  * 
- *     def equal(self, IS iset not None):             # <<<<<<<<<<<<<<
+ *     def equal(self, IS iset):             # <<<<<<<<<<<<<<
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( ISEqual(self.iset, iset.iset, &flag) )
  */
@@ -79137,9 +85514,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_60equal(struct PyPetscISObject *_
 }
 
 /* "PETSc/IS.pyx":197
- *         return <bint> flag
+ *         return toBool(flag)
  * 
- *     def sum(self, IS iset not None):             # <<<<<<<<<<<<<<
+ *     def sum(self, IS iset):             # <<<<<<<<<<<<<<
  *         cdef IS out = IS()
  *         CHKERR( ISSum(self.iset, iset.iset, &out.iset) )
  */
@@ -79160,6 +85537,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_63sum(PyObject *__pyx_v_self, PyO
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -79209,7 +85587,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_62sum(struct PyPetscISObject *__p
 
   /* "PETSc/IS.pyx":198
  * 
- *     def sum(self, IS iset not None):
+ *     def sum(self, IS iset):
  *         cdef IS out = IS()             # <<<<<<<<<<<<<<
  *         CHKERR( ISSum(self.iset, iset.iset, &out.iset) )
  *         return out
@@ -79220,20 +85598,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_62sum(struct PyPetscISObject *__p
   __pyx_t_1 = 0;
 
   /* "PETSc/IS.pyx":199
- *     def sum(self, IS iset not None):
+ *     def sum(self, IS iset):
  *         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_ERR(29, 199, __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 == ((int)-1))) __PYX_ERR(29, 199, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":200
  *         cdef IS out = IS()
  *         CHKERR( ISSum(self.iset, iset.iset, &out.iset) )
  *         return out             # <<<<<<<<<<<<<<
  * 
- *     def expand(self, IS iset not None):
+ *     def expand(self, IS iset):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_out));
@@ -79241,9 +85619,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_62sum(struct PyPetscISObject *__p
   goto __pyx_L0;
 
   /* "PETSc/IS.pyx":197
- *         return <bint> flag
+ *         return toBool(flag)
  * 
- *     def sum(self, IS iset not None):             # <<<<<<<<<<<<<<
+ *     def sum(self, IS iset):             # <<<<<<<<<<<<<<
  *         cdef IS out = IS()
  *         CHKERR( ISSum(self.iset, iset.iset, &out.iset) )
  */
@@ -79263,7 +85641,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_62sum(struct PyPetscISObject *__p
 /* "PETSc/IS.pyx":202
  *         return out
  * 
- *     def expand(self, IS iset not None):             # <<<<<<<<<<<<<<
+ *     def expand(self, IS iset):             # <<<<<<<<<<<<<<
  *         cdef IS out = IS()
  *         CHKERR( ISExpand(self.iset, iset.iset, &out.iset) )
  */
@@ -79284,6 +85662,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_65expand(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -79333,7 +85712,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_64expand(struct PyPetscISObject *
 
   /* "PETSc/IS.pyx":203
  * 
- *     def expand(self, IS iset not None):
+ *     def expand(self, IS iset):
  *         cdef IS out = IS()             # <<<<<<<<<<<<<<
  *         CHKERR( ISExpand(self.iset, iset.iset, &out.iset) )
  *         return out
@@ -79344,20 +85723,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_64expand(struct PyPetscISObject *
   __pyx_t_1 = 0;
 
   /* "PETSc/IS.pyx":204
- *     def expand(self, IS iset not None):
+ *     def expand(self, IS iset):
  *         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_ERR(29, 204, __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 == ((int)-1))) __PYX_ERR(29, 204, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":205
  *         cdef IS out = IS()
  *         CHKERR( ISExpand(self.iset, iset.iset, &out.iset) )
  *         return out             # <<<<<<<<<<<<<<
  * 
- *     def union(self, IS iset not None): # XXX review this
+ *     def union(self, IS iset): # XXX review this
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_out));
@@ -79367,7 +85746,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_64expand(struct PyPetscISObject *
   /* "PETSc/IS.pyx":202
  *         return out
  * 
- *     def expand(self, IS iset not None):             # <<<<<<<<<<<<<<
+ *     def expand(self, IS iset):             # <<<<<<<<<<<<<<
  *         cdef IS out = IS()
  *         CHKERR( ISExpand(self.iset, iset.iset, &out.iset) )
  */
@@ -79387,7 +85766,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_64expand(struct PyPetscISObject *
 /* "PETSc/IS.pyx":207
  *         return out
  * 
- *     def union(self, IS iset not None): # XXX review this             # <<<<<<<<<<<<<<
+ *     def union(self, IS iset): # XXX review this             # <<<<<<<<<<<<<<
  *         cdef PetscBool flag1=PETSC_FALSE, flag2=PETSC_FALSE
  *         CHKERR( ISSorted(self.iset, &flag1) )
  */
@@ -79408,6 +85787,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_67union(PyObject *__pyx_v_self, P
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -79461,7 +85841,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_66union(struct PyPetscISObject *_
 
   /* "PETSc/IS.pyx":208
  * 
- *     def union(self, IS iset not None): # XXX review this
+ *     def union(self, IS iset): # XXX review this
  *         cdef PetscBool flag1=PETSC_FALSE, flag2=PETSC_FALSE             # <<<<<<<<<<<<<<
  *         CHKERR( ISSorted(self.iset, &flag1) )
  *         CHKERR( ISSorted(iset.iset, &flag2) )
@@ -79470,13 +85850,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_66union(struct PyPetscISObject *_
   __pyx_v_flag2 = PETSC_FALSE;
 
   /* "PETSc/IS.pyx":209
- *     def union(self, IS iset not None): # XXX review this
+ *     def union(self, IS iset): # 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_ERR(29, 209, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISSorted(__pyx_v_self->iset, (&__pyx_v_flag1))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 209, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":210
  *         cdef PetscBool flag1=PETSC_FALSE, flag2=PETSC_FALSE
@@ -79485,7 +85865,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_66union(struct PyPetscISObject *_
  *         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_ERR(29, 210, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISSorted(__pyx_v_iset->iset, (&__pyx_v_flag2))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 210, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":211
  *         CHKERR( ISSorted(self.iset, &flag1) )
@@ -79524,7 +85904,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_66union(struct PyPetscISObject *_
  *         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_ERR(29, 213, __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 == ((int)-1))) __PYX_ERR(29, 213, __pyx_L1_error)
 
     /* "PETSc/IS.pyx":212
  *         CHKERR( ISSorted(iset.iset, &flag2) )
@@ -79544,7 +85924,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_66union(struct PyPetscISObject *_
  * 
  */
   /*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_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 == ((int)-1))) __PYX_ERR(29, 215, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -79553,7 +85933,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_66union(struct PyPetscISObject *_
  *             CHKERR( ISExpand(self.iset, iset.iset, &out.iset) )
  *         return out             # <<<<<<<<<<<<<<
  * 
- *     def difference(self, IS iset not None):
+ *     def difference(self, IS iset):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_out));
@@ -79563,7 +85943,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_66union(struct PyPetscISObject *_
   /* "PETSc/IS.pyx":207
  *         return out
  * 
- *     def union(self, IS iset not None): # XXX review this             # <<<<<<<<<<<<<<
+ *     def union(self, IS iset): # XXX review this             # <<<<<<<<<<<<<<
  *         cdef PetscBool flag1=PETSC_FALSE, flag2=PETSC_FALSE
  *         CHKERR( ISSorted(self.iset, &flag1) )
  */
@@ -79583,7 +85963,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_66union(struct PyPetscISObject *_
 /* "PETSc/IS.pyx":218
  *         return out
  * 
- *     def difference(self, IS iset not None):             # <<<<<<<<<<<<<<
+ *     def difference(self, IS iset):             # <<<<<<<<<<<<<<
  *         cdef IS out = IS()
  *         CHKERR( ISDifference(self.iset, iset.iset, &out.iset) )
  */
@@ -79604,6 +85984,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_69difference(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -79653,7 +86034,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_68difference(struct PyPetscISObje
 
   /* "PETSc/IS.pyx":219
  * 
- *     def difference(self, IS iset not None):
+ *     def difference(self, IS iset):
  *         cdef IS out = IS()             # <<<<<<<<<<<<<<
  *         CHKERR( ISDifference(self.iset, iset.iset, &out.iset) )
  *         return out
@@ -79664,13 +86045,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_68difference(struct PyPetscISObje
   __pyx_t_1 = 0;
 
   /* "PETSc/IS.pyx":220
- *     def difference(self, IS iset not None):
+ *     def difference(self, IS iset):
  *         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_ERR(29, 220, __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 == ((int)-1))) __PYX_ERR(29, 220, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":221
  *         cdef IS out = IS()
@@ -79687,7 +86068,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_68difference(struct PyPetscISObje
   /* "PETSc/IS.pyx":218
  *         return out
  * 
- *     def difference(self, IS iset not None):             # <<<<<<<<<<<<<<
+ *     def difference(self, IS iset):             # <<<<<<<<<<<<<<
  *         cdef IS out = IS()
  *         CHKERR( ISDifference(self.iset, iset.iset, &out.iset) )
  */
@@ -79729,7 +86110,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_71complement(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -79738,6 +86121,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_71complement(PyObject *__pyx_v_se
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nmin)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nmax)) != 0)) kw_args--;
         else {
@@ -79789,7 +86173,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_70complement(struct PyPetscISObje
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(29, 224, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_nmin); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(29, 224, __pyx_L1_error)
   __pyx_v_cnmin = __pyx_t_1;
 
   /* "PETSc/IS.pyx":225
@@ -79799,7 +86183,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_70complement(struct PyPetscISObje
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(29, 225, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_nmax); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(29, 225, __pyx_L1_error)
   __pyx_v_cnmax = __pyx_t_1;
 
   /* "PETSc/IS.pyx":226
@@ -79821,14 +86205,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_70complement(struct PyPetscISObje
  *         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_ERR(29, 227, __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 == ((int)-1))) __PYX_ERR(29, 227, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":228
  *         cdef IS out = IS()
  *         CHKERR( ISComplement(self.iset, cnmin, cnmax, &out.iset) )
  *         return out             # <<<<<<<<<<<<<<
  * 
- *     def embed(self, IS iset not None, drop):
+ *     def embed(self, IS iset, drop):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_out));
@@ -79858,7 +86242,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_70complement(struct PyPetscISObje
 /* "PETSc/IS.pyx":230
  *         return out
  * 
- *     def embed(self, IS iset not None, drop):             # <<<<<<<<<<<<<<
+ *     def embed(self, IS iset, drop):             # <<<<<<<<<<<<<<
  *         cdef PetscBool bval = drop
  *         cdef IS out = IS()
  */
@@ -79880,7 +86264,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_73embed(PyObject *__pyx_v_self, P
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -79889,6 +86275,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_73embed(PyObject *__pyx_v_self, P
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_iset)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_drop)) != 0)) kw_args--;
         else {
@@ -79939,7 +86326,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_72embed(struct PyPetscISObject *_
 
   /* "PETSc/IS.pyx":231
  * 
- *     def embed(self, IS iset not None, drop):
+ *     def embed(self, IS iset, drop):
  *         cdef PetscBool bval = drop             # <<<<<<<<<<<<<<
  *         cdef IS out = IS()
  *         CHKERR( ISEmbed(self.iset, iset.iset, bval, &out.iset) )
@@ -79948,7 +86335,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_72embed(struct PyPetscISObject *_
   __pyx_v_bval = __pyx_t_1;
 
   /* "PETSc/IS.pyx":232
- *     def embed(self, IS iset not None, drop):
+ *     def embed(self, IS iset, drop):
  *         cdef PetscBool bval = drop
  *         cdef IS out = IS()             # <<<<<<<<<<<<<<
  *         CHKERR( ISEmbed(self.iset, iset.iset, bval, &out.iset) )
@@ -79966,7 +86353,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_72embed(struct PyPetscISObject *_
  *         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_ERR(29, 233, __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 == ((int)-1))) __PYX_ERR(29, 233, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":234
  *         cdef IS out = IS()
@@ -79983,7 +86370,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_72embed(struct PyPetscISObject *_
   /* "PETSc/IS.pyx":230
  *         return out
  * 
- *     def embed(self, IS iset not None, drop):             # <<<<<<<<<<<<<<
+ *     def embed(self, IS iset, drop):             # <<<<<<<<<<<<<<
  *         cdef PetscBool bval = drop
  *         cdef IS out = IS()
  */
@@ -80024,6 +86411,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_75setIndices(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -80107,7 +86495,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_74setIndices(struct PyPetscISObje
  * 
  *     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_ERR(29, 242, __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 == ((int)-1))) __PYX_ERR(29, 242, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":238
  *     #
@@ -80200,7 +86588,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_76getIndices(struct PyPetscISObje
  *         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_ERR(29, 247, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetLocalSize(__pyx_v_self->iset, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 247, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":248
  *         cdef const_PetscInt *indices = NULL
@@ -80209,7 +86597,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_76getIndices(struct PyPetscISObje
  *         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_ERR(29, 248, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetIndices(__pyx_v_self->iset, (&__pyx_v_indices))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 248, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":249
  *         CHKERR( ISGetLocalSize(self.iset, &size) )
@@ -80252,7 +86640,7 @@ 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_ERR(29, 253, __pyx_L1_error)
+      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISRestoreIndices(__pyx_v_self->iset, (&__pyx_v_indices))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 253, __pyx_L1_error)
       goto __pyx_L5;
     }
     /*exception exit:*/{
@@ -80271,9 +86659,8 @@ 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_ERR(29, 253, __pyx_L7_error)
+        __pyx_t_11 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISRestoreIndices(__pyx_v_self->iset, (&__pyx_v_indices))); if (unlikely(__pyx_t_11 == ((int)-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);
@@ -80288,7 +86675,6 @@ 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);
@@ -80361,7 +86747,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_79setBlockIndices(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -80370,6 +86758,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_79setBlockIndices(PyObject *__pyx
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_bsize)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_indices)) != 0)) kw_args--;
         else {
@@ -80423,7 +86812,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_78setBlockIndices(struct PyPetscI
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(29, 257, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_bsize); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(29, 257, __pyx_L1_error)
   __pyx_v_bs = __pyx_t_1;
 
   /* "PETSc/IS.pyx":258
@@ -80464,7 +86853,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_78setBlockIndices(struct PyPetscI
  * 
  *     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_ERR(29, 261, __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 == ((int)-1))) __PYX_ERR(29, 261, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":256
  *         return oindices
@@ -80559,7 +86948,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_80getBlockIndices(struct PyPetscI
  *         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_ERR(29, 266, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetLocalSize(__pyx_v_self->iset, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 266, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":267
  *         cdef const_PetscInt *indices = NULL
@@ -80568,7 +86957,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_80getBlockIndices(struct PyPetscI
  *         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_ERR(29, 267, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetBlockSize(__pyx_v_self->iset, (&__pyx_v_bs))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 267, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":268
  *         CHKERR( ISGetLocalSize(self.iset, &size) )
@@ -80577,7 +86966,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_80getBlockIndices(struct PyPetscI
  *         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_ERR(29, 268, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISBlockGetIndices(__pyx_v_self->iset, (&__pyx_v_indices))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 268, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":269
  *         CHKERR( ISGetBlockSize(self.iset, &bs) )
@@ -80620,7 +87009,7 @@ 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_ERR(29, 273, __pyx_L1_error)
+      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISBlockRestoreIndices(__pyx_v_self->iset, (&__pyx_v_indices))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 273, __pyx_L1_error)
       goto __pyx_L5;
     }
     /*exception exit:*/{
@@ -80639,9 +87028,8 @@ 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_ERR(29, 273, __pyx_L7_error)
+        __pyx_t_11 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISBlockRestoreIndices(__pyx_v_self->iset, (&__pyx_v_indices))); if (unlikely(__pyx_t_11 == ((int)-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);
@@ -80656,7 +87044,6 @@ 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);
@@ -80732,8 +87119,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_83setStride(PyObject *__pyx_v_sel
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -80742,11 +87132,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_83setStride(PyObject *__pyx_v_sel
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_first);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_step);
@@ -80759,7 +87151,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2IS_83setStride(PyObject *__pyx_v_sel
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -80801,7 +87195,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_82setStride(struct PyPetscISObjec
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(29, 277, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_size); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(29, 277, __pyx_L1_error)
   __pyx_v_csize = __pyx_t_1;
 
   /* "PETSc/IS.pyx":278
@@ -80811,7 +87205,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_82setStride(struct PyPetscISObjec
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(29, 278, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_first); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(29, 278, __pyx_L1_error)
   __pyx_v_cfirst = __pyx_t_1;
 
   /* "PETSc/IS.pyx":279
@@ -80821,7 +87215,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_82setStride(struct PyPetscISObjec
  *         CHKERR( ISStrideSetStride(self.iset, csize, cfirst, cstep) )
  * 
  */
-  __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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_step); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(29, 279, __pyx_L1_error)
   __pyx_v_cstep = __pyx_t_1;
 
   /* "PETSc/IS.pyx":280
@@ -80831,7 +87225,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_82setStride(struct PyPetscISObjec
  * 
  *     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_ERR(29, 280, __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 == ((int)-1))) __PYX_ERR(29, 280, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":276
  *         return oindices
@@ -80909,7 +87303,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_84getStride(struct PyPetscISObjec
  *         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_ERR(29, 284, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGetLocalSize(__pyx_v_self->iset, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 284, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":285
  *         cdef PetscInt size=0, first=0, step=0
@@ -80918,7 +87312,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_84getStride(struct PyPetscISObjec
  *         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_ERR(29, 285, __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 == ((int)-1))) __PYX_ERR(29, 285, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":286
  *         CHKERR( ISGetLocalSize(self.iset, &size) )
@@ -81024,7 +87418,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_86getInfo(struct PyPetscISObject
  *         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_ERR(29, 290, __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 == ((int)-1))) __PYX_ERR(29, 290, __pyx_L1_error)
 
   /* "PETSc/IS.pyx":291
  *         cdef PetscInt first = 0, step = 0
@@ -81111,7 +87505,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_11permutation___get__(struct PyPe
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -81193,7 +87587,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_8identity___get__(struct PyPetscI
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -81275,7 +87669,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_6sorted___get__(struct PyPetscISO
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -81357,7 +87751,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_5sizes___get__(struct PyPetscISOb
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -81439,7 +87833,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_4size___get__(struct PyPetscISObj
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -81521,7 +87915,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_10local_size___get__(struct PyPet
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -81603,7 +87997,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_10block_size___get__(struct PyPet
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -81685,7 +88079,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_7indices___get__(struct PyPetscIS
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -81869,7 +88263,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2IS_19__array_interface_____get__(str
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":356
+/* "PETSc/IS.pyx":362
  *     #
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -81898,7 +88292,7 @@ static int __pyx_pf_8petsc4py_5PETSc_5LGMap___cinit__(struct PyPetscLGMapObject
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "PETSc/IS.pyx":357
+  /* "PETSc/IS.pyx":363
  * 
  *     def __cinit__(self):
  *         self.obj = <PetscObject*> &self.lgm             # <<<<<<<<<<<<<<
@@ -81907,7 +88301,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":358
+  /* "PETSc/IS.pyx":364
  *     def __cinit__(self):
  *         self.obj = <PetscObject*> &self.lgm
  *         self.lgm = NULL             # <<<<<<<<<<<<<<
@@ -81916,7 +88310,7 @@ static int __pyx_pf_8petsc4py_5PETSc_5LGMap___cinit__(struct PyPetscLGMapObject
  */
   __pyx_v_self->lgm = NULL;
 
-  /* "PETSc/IS.pyx":356
+  /* "PETSc/IS.pyx":362
  *     #
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -81930,7 +88324,7 @@ static int __pyx_pf_8petsc4py_5PETSc_5LGMap___cinit__(struct PyPetscLGMapObject
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":360
+/* "PETSc/IS.pyx":366
  *         self.lgm = NULL
  * 
  *     def __call__(self, indices, result=None):             # <<<<<<<<<<<<<<
@@ -81955,7 +88349,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_3__call__(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -81964,6 +88360,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_3__call__(PyObject *__pyx_v_se
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_indices)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_result);
@@ -81971,11 +88368,12 @@ 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_ERR(29, 360, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__call__") < 0)) __PYX_ERR(29, 366, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -81986,7 +88384,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_ERR(29, 360, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__call__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 366, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.LGMap.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -82005,22 +88403,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_2__call__(struct PyPetscLGMapO
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
-  Py_ssize_t __pyx_t_4;
+  int __pyx_t_4;
   PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("__call__", 0);
 
-  /* "PETSc/IS.pyx":361
+  /* "PETSc/IS.pyx":367
  * 
  *     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_ERR(29, 361, __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, 367, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   __pyx_t_4 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -82030,24 +88428,42 @@ 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_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;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_2)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_indices, __pyx_v_result};
+    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 367, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_GOTREF(__pyx_t_1);
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_v_indices, __pyx_v_result};
+    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 367, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_GOTREF(__pyx_t_1);
+  } else
+  #endif
+  {
+    __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(29, 367, __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;
+    }
+    __Pyx_INCREF(__pyx_v_indices);
+    __Pyx_GIVEREF(__pyx_v_indices);
+    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_indices);
+    __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_ERR(29, 367, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
-  __Pyx_INCREF(__pyx_v_indices);
-  __Pyx_GIVEREF(__pyx_v_indices);
-  PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_indices);
-  __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_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":360
+  /* "PETSc/IS.pyx":366
  *         self.lgm = NULL
  * 
  *     def __call__(self, indices, result=None):             # <<<<<<<<<<<<<<
@@ -82071,18 +88487,198 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_2__call__(struct PyPetscLGMapO
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":365
+/* "PETSc/IS.pyx":371
  *     #
  * 
+ *     def setType(self, lgmap_type):             # <<<<<<<<<<<<<<
+ *         cdef PetscISLocalToGlobalMappingType cval = NULL
+ *         lgmap_type = str2bytes(lgmap_type, &cval)
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_5setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_5LGMap_4setType[] = "LGMap.setType(self, lgmap_type)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_5setType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_lgmap_type = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setType (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_lgmap_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);
+        CYTHON_FALLTHROUGH;
+        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_lgmap_type)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) __PYX_ERR(29, 371, __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_lgmap_type = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 371, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.LGMap.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_4setType(((struct PyPetscLGMapObject *)__pyx_v_self), __pyx_v_lgmap_type);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4setType(struct PyPetscLGMapObject *__pyx_v_self, PyObject *__pyx_v_lgmap_type) {
+  const char* __pyx_v_cval;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setType", 0);
+  __Pyx_INCREF(__pyx_v_lgmap_type);
+
+  /* "PETSc/IS.pyx":372
+ * 
+ *     def setType(self, lgmap_type):
+ *         cdef PetscISLocalToGlobalMappingType cval = NULL             # <<<<<<<<<<<<<<
+ *         lgmap_type = str2bytes(lgmap_type, &cval)
+ *         CHKERR( ISLocalToGlobalMappingSetType(self.lgm, cval) )
+ */
+  __pyx_v_cval = NULL;
+
+  /* "PETSc/IS.pyx":373
+ *     def setType(self, lgmap_type):
+ *         cdef PetscISLocalToGlobalMappingType cval = NULL
+ *         lgmap_type = str2bytes(lgmap_type, &cval)             # <<<<<<<<<<<<<<
+ *         CHKERR( ISLocalToGlobalMappingSetType(self.lgm, cval) )
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_lgmap_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 373, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_lgmap_type, __pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/IS.pyx":374
+ *         cdef PetscISLocalToGlobalMappingType cval = NULL
+ *         lgmap_type = str2bytes(lgmap_type, &cval)
+ *         CHKERR( ISLocalToGlobalMappingSetType(self.lgm, cval) )             # <<<<<<<<<<<<<<
+ * 
+ *     def setFromOptions(self):
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingSetType(__pyx_v_self->lgm, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(29, 374, __pyx_L1_error)
+
+  /* "PETSc/IS.pyx":371
+ *     #
+ * 
+ *     def setType(self, lgmap_type):             # <<<<<<<<<<<<<<
+ *         cdef PetscISLocalToGlobalMappingType cval = NULL
+ *         lgmap_type = str2bytes(lgmap_type, &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.LGMap.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_lgmap_type);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/IS.pyx":376
+ *         CHKERR( ISLocalToGlobalMappingSetType(self.lgm, cval) )
+ * 
+ *     def setFromOptions(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( ISLocalToGlobalMappingSetFromOptions(self.lgm) )
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_7setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_5LGMap_6setFromOptions[] = "LGMap.setFromOptions(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_7setFromOptions(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_5LGMap_6setFromOptions(((struct PyPetscLGMapObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_6setFromOptions(struct PyPetscLGMapObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("setFromOptions", 0);
+
+  /* "PETSc/IS.pyx":377
+ * 
+ *     def setFromOptions(self):
+ *         CHKERR( ISLocalToGlobalMappingSetFromOptions(self.lgm) )             # <<<<<<<<<<<<<<
+ * 
+ *     def view(self, Viewer viewer=None):
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingSetFromOptions(__pyx_v_self->lgm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 377, __pyx_L1_error)
+
+  /* "PETSc/IS.pyx":376
+ *         CHKERR( ISLocalToGlobalMappingSetType(self.lgm, cval) )
+ * 
+ *     def setFromOptions(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( ISLocalToGlobalMappingSetFromOptions(self.lgm) )
+ * 
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.LGMap.setFromOptions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/IS.pyx":379
+ *         CHKERR( ISLocalToGlobalMappingSetFromOptions(self.lgm) )
+ * 
  *     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_5LGMap_5view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_9view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_5LGMap_8view[] = "LGMap.view(self, Viewer viewer=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_9view(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscViewerObject *__pyx_v_viewer = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -82096,6 +88692,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_5view(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -82108,11 +88705,12 @@ 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_ERR(29, 365, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(29, 379, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -82121,14 +88719,14 @@ 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_ERR(29, 365, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 379, __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_ERR(29, 365, __pyx_L1_error)
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_4view(((struct PyPetscLGMapObject *)__pyx_v_self), __pyx_v_viewer);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) __PYX_ERR(29, 379, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_8view(((struct PyPetscLGMapObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
   goto __pyx_L0;
@@ -82139,7 +88737,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_5view(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4view(struct PyPetscLGMapObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_8view(struct PyPetscLGMapObject *__pyx_v_self, struct PyPetscViewerObject *__pyx_v_viewer) {
   PetscViewer __pyx_v_cviewer;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -82149,7 +88747,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4view(struct PyPetscLGMapObjec
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("view", 0);
 
-  /* "PETSc/IS.pyx":366
+  /* "PETSc/IS.pyx":380
  * 
  *     def view(self, Viewer viewer=None):
  *         cdef PetscViewer cviewer = NULL             # <<<<<<<<<<<<<<
@@ -82158,7 +88756,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4view(struct PyPetscLGMapObjec
  */
   __pyx_v_cviewer = NULL;
 
-  /* "PETSc/IS.pyx":367
+  /* "PETSc/IS.pyx":381
  *     def view(self, Viewer viewer=None):
  *         cdef PetscViewer cviewer = NULL
  *         if viewer is not None: cviewer = viewer.vwr             # <<<<<<<<<<<<<<
@@ -82172,17 +88770,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4view(struct PyPetscLGMapObjec
     __pyx_v_cviewer = __pyx_t_3;
   }
 
-  /* "PETSc/IS.pyx":368
+  /* "PETSc/IS.pyx":382
  *         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_ERR(29, 368, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingView(__pyx_v_self->lgm, __pyx_v_cviewer)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(29, 382, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":365
- *     #
+  /* "PETSc/IS.pyx":379
+ *         CHKERR( ISLocalToGlobalMappingSetFromOptions(self.lgm) )
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
  *         cdef PetscViewer cviewer = NULL
@@ -82201,7 +88799,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4view(struct PyPetscLGMapObjec
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":370
+/* "PETSc/IS.pyx":384
  *         CHKERR( ISLocalToGlobalMappingView(self.lgm, cviewer) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -82210,38 +88808,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4view(struct PyPetscLGMapObjec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_7destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_5LGMap_6destroy[] = "LGMap.destroy(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_7destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_11destroy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_5LGMap_10destroy[] = "LGMap.destroy(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_11destroy(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_5LGMap_6destroy(((struct PyPetscLGMapObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_10destroy(((struct PyPetscLGMapObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_6destroy(struct PyPetscLGMapObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_10destroy(struct PyPetscLGMapObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("destroy", 0);
 
-  /* "PETSc/IS.pyx":371
+  /* "PETSc/IS.pyx":385
  * 
  *     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_ERR(29, 371, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingDestroy((&__pyx_v_self->lgm))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 385, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":372
+  /* "PETSc/IS.pyx":386
  *     def destroy(self):
  *         CHKERR( ISLocalToGlobalMappingDestroy(&self.lgm) )
  *         return self             # <<<<<<<<<<<<<<
@@ -82253,7 +88851,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_6destroy(struct PyPetscLGMapOb
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":370
+  /* "PETSc/IS.pyx":384
  *         CHKERR( ISLocalToGlobalMappingView(self.lgm, cviewer) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -82271,7 +88869,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_6destroy(struct PyPetscLGMapOb
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":374
+/* "PETSc/IS.pyx":388
  *         return self
  * 
  *     def create(self, indices, bsize=None, comm=None):             # <<<<<<<<<<<<<<
@@ -82280,9 +88878,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_6destroy(struct PyPetscLGMapOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_9create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_5LGMap_8create[] = "LGMap.create(self, indices, bsize=None, comm=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_9create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_13create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_5LGMap_12create[] = "LGMap.create(self, indices, bsize=None, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_13create(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_indices = 0;
   PyObject *__pyx_v_bsize = 0;
   PyObject *__pyx_v_comm = 0;
@@ -82299,8 +88897,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_9create(PyObject *__pyx_v_self
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -82309,11 +88910,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_9create(PyObject *__pyx_v_self
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_indices)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_bsize);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -82321,12 +88924,14 @@ 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_ERR(29, 374, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(29, 388, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -82338,20 +88943,20 @@ 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_ERR(29, 374, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("create", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 388, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.LGMap.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_8create(((struct PyPetscLGMapObject *)__pyx_v_self), __pyx_v_indices, __pyx_v_bsize, __pyx_v_comm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_12create(((struct PyPetscLGMapObject *)__pyx_v_self), __pyx_v_indices, __pyx_v_bsize, __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_12create(struct PyPetscLGMapObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_bsize, PyObject *__pyx_v_comm) {
   MPI_Comm __pyx_v_ccomm;
   PetscInt __pyx_v_bs;
   PetscInt __pyx_v_nidx;
@@ -82369,17 +88974,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_8create(struct PyPetscLGMapObj
   __Pyx_RefNannySetupContext("create", 0);
   __Pyx_INCREF(__pyx_v_indices);
 
-  /* "PETSc/IS.pyx":375
+  /* "PETSc/IS.pyx":389
  * 
  *     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_ERR(29, 375, __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, 389, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/IS.pyx":376
+  /* "PETSc/IS.pyx":390
  *     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             # <<<<<<<<<<<<<<
@@ -82390,7 +88995,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_8create(struct PyPetscLGMapObj
   __pyx_v_nidx = 0;
   __pyx_v_idx = NULL;
 
-  /* "PETSc/IS.pyx":377
+  /* "PETSc/IS.pyx":391
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscInt bs = 1, nidx = 0, *idx = NULL
  *         cdef PetscCopyMode cm = PETSC_COPY_VALUES             # <<<<<<<<<<<<<<
@@ -82399,7 +89004,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_8create(struct PyPetscLGMapObj
  */
   __pyx_v_cm = PETSC_COPY_VALUES;
 
-  /* "PETSc/IS.pyx":378
+  /* "PETSc/IS.pyx":392
  *         cdef PetscInt bs = 1, nidx = 0, *idx = NULL
  *         cdef PetscCopyMode cm = PETSC_COPY_VALUES
  *         cdef PetscLGMap newlgm = NULL             # <<<<<<<<<<<<<<
@@ -82408,7 +89013,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_8create(struct PyPetscLGMapObj
  */
   __pyx_v_newlgm = NULL;
 
-  /* "PETSc/IS.pyx":379
+  /* "PETSc/IS.pyx":393
  *         cdef PetscCopyMode cm = PETSC_COPY_VALUES
  *         cdef PetscLGMap newlgm = NULL
  *         if bsize is not None: bs = asInt(bsize)             # <<<<<<<<<<<<<<
@@ -82418,11 +89023,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 == -1L && PyErr_Occurred())) __PYX_ERR(29, 379, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_bsize); if (unlikely(__pyx_t_4 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(29, 393, __pyx_L1_error)
     __pyx_v_bs = __pyx_t_4;
   }
 
-  /* "PETSc/IS.pyx":380
+  /* "PETSc/IS.pyx":394
  *         cdef PetscLGMap newlgm = NULL
  *         if bsize is not None: bs = asInt(bsize)
  *         if bs == PETSC_DECIDE: bs = 1             # <<<<<<<<<<<<<<
@@ -82434,28 +89039,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_8create(struct PyPetscLGMapObj
     __pyx_v_bs = 1;
   }
 
-  /* "PETSc/IS.pyx":381
+  /* "PETSc/IS.pyx":395
  *         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_ERR(29, 381, __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, 395, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF_SET(__pyx_v_indices, __pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "PETSc/IS.pyx":382
+  /* "PETSc/IS.pyx":396
  *         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_ERR(29, 382, __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 == ((int)-1))) __PYX_ERR(29, 396, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":384
+  /* "PETSc/IS.pyx":398
  *         CHKERR( ISLocalToGlobalMappingCreate(
  *                 ccomm, bs, nidx, idx, cm, &newlgm) )
  *         PetscCLEAR(self.obj); self.lgm = newlgm             # <<<<<<<<<<<<<<
@@ -82465,19 +89070,19 @@ 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":385
+  /* "PETSc/IS.pyx":399
  *                 ccomm, bs, nidx, idx, cm, &newlgm) )
  *         PetscCLEAR(self.obj); self.lgm = newlgm
  *         return self             # <<<<<<<<<<<<<<
  * 
- *     def createIS(self, IS iset not None):
+ *     def createIS(self, IS iset):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":374
+  /* "PETSc/IS.pyx":388
  *         return self
  * 
  *     def create(self, indices, bsize=None, comm=None):             # <<<<<<<<<<<<<<
@@ -82497,18 +89102,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_8create(struct PyPetscLGMapObj
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":387
+/* "PETSc/IS.pyx":401
  *         return self
  * 
- *     def createIS(self, IS iset not None):             # <<<<<<<<<<<<<<
+ *     def createIS(self, IS iset):             # <<<<<<<<<<<<<<
  *         cdef PetscLGMap newlgm = NULL
  *         CHKERR( ISLocalToGlobalMappingCreateIS(
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_11createIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_15createIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_5LGMap_14createIS[] = "LGMap.createIS(self, IS iset)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_15createIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_iset = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -82521,6 +89126,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_11createIS(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -82531,7 +89137,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_ERR(29, 387, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createIS") < 0)) __PYX_ERR(29, 401, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -82542,14 +89148,14 @@ 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_ERR(29, 387, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createIS", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 401, __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_ERR(29, 387, __pyx_L1_error)
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_10createIS(((struct PyPetscLGMapObject *)__pyx_v_self), __pyx_v_iset);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iset), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iset", 0))) __PYX_ERR(29, 401, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_14createIS(((struct PyPetscLGMapObject *)__pyx_v_self), __pyx_v_iset);
 
   /* function exit code */
   goto __pyx_L0;
@@ -82560,32 +89166,32 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_11createIS(PyObject *__pyx_v_s
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_10createIS(struct PyPetscLGMapObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_14createIS(struct PyPetscLGMapObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset) {
   ISLocalToGlobalMapping __pyx_v_newlgm;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("createIS", 0);
 
-  /* "PETSc/IS.pyx":388
+  /* "PETSc/IS.pyx":402
  * 
- *     def createIS(self, IS iset not None):
+ *     def createIS(self, IS iset):
  *         cdef PetscLGMap newlgm = NULL             # <<<<<<<<<<<<<<
  *         CHKERR( ISLocalToGlobalMappingCreateIS(
  *             iset.iset, &newlgm) )
  */
   __pyx_v_newlgm = NULL;
 
-  /* "PETSc/IS.pyx":389
- *     def createIS(self, IS iset not None):
+  /* "PETSc/IS.pyx":403
+ *     def createIS(self, IS iset):
  *         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_ERR(29, 389, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingCreateIS(__pyx_v_iset->iset, (&__pyx_v_newlgm))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 403, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":391
+  /* "PETSc/IS.pyx":405
  *         CHKERR( ISLocalToGlobalMappingCreateIS(
  *             iset.iset, &newlgm) )
  *         PetscCLEAR(self.obj); self.lgm = newlgm             # <<<<<<<<<<<<<<
@@ -82595,22 +89201,22 @@ 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":392
+  /* "PETSc/IS.pyx":406
  *             iset.iset, &newlgm) )
  *         PetscCLEAR(self.obj); self.lgm = newlgm
  *         return self             # <<<<<<<<<<<<<<
  * 
- *     def createSF(self, SF sf not None, start):
+ *     def createSF(self, SF sf, start):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":387
+  /* "PETSc/IS.pyx":401
  *         return self
  * 
- *     def createIS(self, IS iset not None):             # <<<<<<<<<<<<<<
+ *     def createIS(self, IS iset):             # <<<<<<<<<<<<<<
  *         cdef PetscLGMap newlgm = NULL
  *         CHKERR( ISLocalToGlobalMappingCreateIS(
  */
@@ -82625,18 +89231,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_10createIS(struct PyPetscLGMap
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":394
+/* "PETSc/IS.pyx":408
  *         return self
  * 
- *     def createSF(self, SF sf not None, start):             # <<<<<<<<<<<<<<
+ *     def createSF(self, SF sf, start):             # <<<<<<<<<<<<<<
  *         cdef PetscLGMap newlgm = NULL
  *         cdef PetscInt cstart = asInt(start)
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_13createSF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_5LGMap_12createSF[] = "LGMap.createSF(self, SF sf, start)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_13createSF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_17createSF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_5LGMap_16createSF[] = "LGMap.createSF(self, SF sf, start)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_17createSF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscSFObject *__pyx_v_sf = 0;
   PyObject *__pyx_v_start = 0;
   PyObject *__pyx_r = 0;
@@ -82650,7 +89256,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_13createSF(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -82659,14 +89267,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_13createSF(PyObject *__pyx_v_s
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_sf)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(29, 394, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("createSF", 1, 2, 2, 1); __PYX_ERR(29, 408, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createSF") < 0)) __PYX_ERR(29, 394, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createSF") < 0)) __PYX_ERR(29, 408, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -82679,14 +89288,14 @@ 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_ERR(29, 394, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createSF", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 408, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sf), __pyx_ptype_8petsc4py_5PETSc_SF, 0, "sf", 0))) __PYX_ERR(29, 408, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_16createSF(((struct PyPetscLGMapObject *)__pyx_v_self), __pyx_v_sf, __pyx_v_start);
 
   /* function exit code */
   goto __pyx_L0;
@@ -82697,7 +89306,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_13createSF(PyObject *__pyx_v_s
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_12createSF(struct PyPetscLGMapObject *__pyx_v_self, struct PyPetscSFObject *__pyx_v_sf, PyObject *__pyx_v_start) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_16createSF(struct PyPetscLGMapObject *__pyx_v_self, struct PyPetscSFObject *__pyx_v_sf, PyObject *__pyx_v_start) {
   ISLocalToGlobalMapping __pyx_v_newlgm;
   PetscInt __pyx_v_cstart;
   PyObject *__pyx_r = NULL;
@@ -82706,35 +89315,35 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_12createSF(struct PyPetscLGMap
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("createSF", 0);
 
-  /* "PETSc/IS.pyx":395
+  /* "PETSc/IS.pyx":409
  * 
- *     def createSF(self, SF sf not None, start):
+ *     def createSF(self, SF sf, start):
  *         cdef PetscLGMap newlgm = NULL             # <<<<<<<<<<<<<<
  *         cdef PetscInt cstart = asInt(start)
  *         CHKERR( ISLocalToGlobalMappingCreateSF(sf.sf, cstart, &newlgm) )
  */
   __pyx_v_newlgm = NULL;
 
-  /* "PETSc/IS.pyx":396
- *     def createSF(self, SF sf not None, start):
+  /* "PETSc/IS.pyx":410
+ *     def createSF(self, SF sf, 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 == -1L && PyErr_Occurred())) __PYX_ERR(29, 396, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_start); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(29, 410, __pyx_L1_error)
   __pyx_v_cstart = __pyx_t_1;
 
-  /* "PETSc/IS.pyx":397
+  /* "PETSc/IS.pyx":411
  *         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_ERR(29, 397, __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 == ((int)-1))) __PYX_ERR(29, 411, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":398
+  /* "PETSc/IS.pyx":412
  *         cdef PetscInt cstart = asInt(start)
  *         CHKERR( ISLocalToGlobalMappingCreateSF(sf.sf, cstart, &newlgm) )
  *         PetscCLEAR(self.obj); self.lgm = newlgm             # <<<<<<<<<<<<<<
@@ -82744,7 +89353,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":399
+  /* "PETSc/IS.pyx":413
  *         CHKERR( ISLocalToGlobalMappingCreateSF(sf.sf, cstart, &newlgm) )
  *         PetscCLEAR(self.obj); self.lgm = newlgm
  *         return self             # <<<<<<<<<<<<<<
@@ -82756,10 +89365,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_12createSF(struct PyPetscLGMap
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":394
+  /* "PETSc/IS.pyx":408
  *         return self
  * 
- *     def createSF(self, SF sf not None, start):             # <<<<<<<<<<<<<<
+ *     def createSF(self, SF sf, start):             # <<<<<<<<<<<<<<
  *         cdef PetscLGMap newlgm = NULL
  *         cdef PetscInt cstart = asInt(start)
  */
@@ -82774,7 +89383,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_12createSF(struct PyPetscLGMap
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":401
+/* "PETSc/IS.pyx":415
  *         return self
  * 
  *     def getSize(self):             # <<<<<<<<<<<<<<
@@ -82783,23 +89392,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_12createSF(struct PyPetscLGMap
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_15getSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_5LGMap_14getSize[] = "LGMap.getSize(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_15getSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_19getSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_5LGMap_18getSize[] = "LGMap.getSize(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_19getSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getSize (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getSize", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getSize", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_14getSize(((struct PyPetscLGMapObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_18getSize(((struct PyPetscLGMapObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_14getSize(struct PyPetscLGMapObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_18getSize(struct PyPetscLGMapObject *__pyx_v_self) {
   PetscInt __pyx_v_n;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -82807,7 +89416,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_14getSize(struct PyPetscLGMapO
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getSize", 0);
 
-  /* "PETSc/IS.pyx":402
+  /* "PETSc/IS.pyx":416
  * 
  *     def getSize(self):
  *         cdef PetscInt n = 0             # <<<<<<<<<<<<<<
@@ -82816,16 +89425,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_14getSize(struct PyPetscLGMapO
  */
   __pyx_v_n = 0;
 
-  /* "PETSc/IS.pyx":403
+  /* "PETSc/IS.pyx":417
  *     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_ERR(29, 403, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingGetSize(__pyx_v_self->lgm, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 417, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":404
+  /* "PETSc/IS.pyx":418
  *         cdef PetscInt n = 0
  *         CHKERR( ISLocalToGlobalMappingGetSize(self.lgm, &n) )
  *         return toInt(n)             # <<<<<<<<<<<<<<
@@ -82833,13 +89442,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_ERR(29, 404, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 418, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":401
+  /* "PETSc/IS.pyx":415
  *         return self
  * 
  *     def getSize(self):             # <<<<<<<<<<<<<<
@@ -82858,7 +89467,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_14getSize(struct PyPetscLGMapO
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":406
+/* "PETSc/IS.pyx":420
  *         return toInt(n)
  * 
  *     def getBlockSize(self):             # <<<<<<<<<<<<<<
@@ -82867,23 +89476,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_14getSize(struct PyPetscLGMapO
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_17getBlockSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_5LGMap_16getBlockSize[] = "LGMap.getBlockSize(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_17getBlockSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_21getBlockSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_5LGMap_20getBlockSize[] = "LGMap.getBlockSize(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_21getBlockSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   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_5LGMap_16getBlockSize(((struct PyPetscLGMapObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_20getBlockSize(((struct PyPetscLGMapObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_16getBlockSize(struct PyPetscLGMapObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_20getBlockSize(struct PyPetscLGMapObject *__pyx_v_self) {
   PetscInt __pyx_v_bs;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -82891,7 +89500,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_16getBlockSize(struct PyPetscL
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getBlockSize", 0);
 
-  /* "PETSc/IS.pyx":407
+  /* "PETSc/IS.pyx":421
  * 
  *     def getBlockSize(self):
  *         cdef PetscInt bs = 1             # <<<<<<<<<<<<<<
@@ -82900,16 +89509,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_16getBlockSize(struct PyPetscL
  */
   __pyx_v_bs = 1;
 
-  /* "PETSc/IS.pyx":408
+  /* "PETSc/IS.pyx":422
  *     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_ERR(29, 408, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingGetBlockSize(__pyx_v_self->lgm, (&__pyx_v_bs))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 422, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":409
+  /* "PETSc/IS.pyx":423
  *         cdef PetscInt bs = 1
  *         CHKERR( ISLocalToGlobalMappingGetBlockSize(self.lgm, &bs) )
  *         return toInt(bs)             # <<<<<<<<<<<<<<
@@ -82917,13 +89526,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_ERR(29, 409, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_bs); if (unlikely(!__pyx_t_2)) __PYX_ERR(29, 423, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":406
+  /* "PETSc/IS.pyx":420
  *         return toInt(n)
  * 
  *     def getBlockSize(self):             # <<<<<<<<<<<<<<
@@ -82942,7 +89551,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_16getBlockSize(struct PyPetscL
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":411
+/* "PETSc/IS.pyx":425
  *         return toInt(bs)
  * 
  *     def getIndices(self):             # <<<<<<<<<<<<<<
@@ -82951,23 +89560,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_16getBlockSize(struct PyPetscL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_19getIndices(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_5LGMap_18getIndices[] = "LGMap.getIndices(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_19getIndices(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_23getIndices(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_5LGMap_22getIndices[] = "LGMap.getIndices(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_23getIndices(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getIndices (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getIndices", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getIndices", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_18getIndices(((struct PyPetscLGMapObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_22getIndices(((struct PyPetscLGMapObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_18getIndices(struct PyPetscLGMapObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_22getIndices(struct PyPetscLGMapObject *__pyx_v_self) {
   PetscInt __pyx_v_size;
   const PetscInt *__pyx_v_indices;
   PyObject *__pyx_v_oindices = 0;
@@ -82986,7 +89595,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_18getIndices(struct PyPetscLGM
   int __pyx_t_11;
   __Pyx_RefNannySetupContext("getIndices", 0);
 
-  /* "PETSc/IS.pyx":412
+  /* "PETSc/IS.pyx":426
  * 
  *     def getIndices(self):
  *         cdef PetscInt size = 0             # <<<<<<<<<<<<<<
@@ -82995,7 +89604,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_18getIndices(struct PyPetscLGM
  */
   __pyx_v_size = 0;
 
-  /* "PETSc/IS.pyx":413
+  /* "PETSc/IS.pyx":427
  *     def getIndices(self):
  *         cdef PetscInt size = 0
  *         cdef const_PetscInt *indices = NULL             # <<<<<<<<<<<<<<
@@ -83004,25 +89613,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_18getIndices(struct PyPetscLGM
  */
   __pyx_v_indices = NULL;
 
-  /* "PETSc/IS.pyx":414
+  /* "PETSc/IS.pyx":428
  *         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_ERR(29, 414, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingGetSize(__pyx_v_self->lgm, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 428, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":416
+  /* "PETSc/IS.pyx":430
  *         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_ERR(29, 416, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingGetIndices(__pyx_v_self->lgm, (&__pyx_v_indices))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 430, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":418
+  /* "PETSc/IS.pyx":432
  *         CHKERR( ISLocalToGlobalMappingGetIndices(
  *                 self.lgm, &indices) )
  *         cdef object oindices = None             # <<<<<<<<<<<<<<
@@ -83032,7 +89641,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_18getIndices(struct PyPetscLGM
   __Pyx_INCREF(Py_None);
   __pyx_v_oindices = Py_None;
 
-  /* "PETSc/IS.pyx":419
+  /* "PETSc/IS.pyx":433
  *                 self.lgm, &indices) )
  *         cdef object oindices = None
  *         try:             # <<<<<<<<<<<<<<
@@ -83041,20 +89650,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_18getIndices(struct PyPetscLGM
  */
   /*try:*/ {
 
-    /* "PETSc/IS.pyx":420
+    /* "PETSc/IS.pyx":434
  *         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_ERR(29, 420, __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, 434, __pyx_L4_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF_SET(__pyx_v_oindices, __pyx_t_2);
     __pyx_t_2 = 0;
   }
 
-  /* "PETSc/IS.pyx":422
+  /* "PETSc/IS.pyx":436
  *             oindices = array_i(size, indices)
  *         finally:
  *             CHKERR( ISLocalToGlobalMappingRestoreIndices(             # <<<<<<<<<<<<<<
@@ -83064,14 +89673,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_18getIndices(struct PyPetscLGM
   /*finally:*/ {
     /*normal exit:*/{
 
-      /* "PETSc/IS.pyx":423
+      /* "PETSc/IS.pyx":437
  *         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_ERR(29, 422, __pyx_L1_error)
+      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingRestoreIndices(__pyx_v_self->lgm, (&__pyx_v_indices))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 436, __pyx_L1_error)
       goto __pyx_L5;
     }
     /*exception exit:*/{
@@ -83091,16 +89700,15 @@ 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":422
+        /* "PETSc/IS.pyx":436
  *             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_ERR(29, 422, __pyx_L7_error)
+        __pyx_t_11 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingRestoreIndices(__pyx_v_self->lgm, (&__pyx_v_indices))); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(29, 436, __pyx_L7_error)
       }
-      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_8);
         __Pyx_XGIVEREF(__pyx_t_9);
@@ -83115,7 +89723,6 @@ 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);
@@ -83131,7 +89738,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_18getIndices(struct PyPetscLGM
     __pyx_L5:;
   }
 
-  /* "PETSc/IS.pyx":424
+  /* "PETSc/IS.pyx":438
  *             CHKERR( ISLocalToGlobalMappingRestoreIndices(
  *                     self.lgm, &indices) )
  *         return oindices             # <<<<<<<<<<<<<<
@@ -83143,7 +89750,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_18getIndices(struct PyPetscLGM
   __pyx_r = __pyx_v_oindices;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":411
+  /* "PETSc/IS.pyx":425
  *         return toInt(bs)
  * 
  *     def getIndices(self):             # <<<<<<<<<<<<<<
@@ -83163,7 +89770,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_18getIndices(struct PyPetscLGM
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":426
+/* "PETSc/IS.pyx":440
  *         return oindices
  * 
  *     def getBlockIndices(self):             # <<<<<<<<<<<<<<
@@ -83172,23 +89779,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_18getIndices(struct PyPetscLGM
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_21getBlockIndices(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_5LGMap_20getBlockIndices[] = "LGMap.getBlockIndices(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_21getBlockIndices(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_25getBlockIndices(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_5LGMap_24getBlockIndices[] = "LGMap.getBlockIndices(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_25getBlockIndices(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getBlockIndices (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getBlockIndices", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getBlockIndices", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_20getBlockIndices(((struct PyPetscLGMapObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_24getBlockIndices(((struct PyPetscLGMapObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_20getBlockIndices(struct PyPetscLGMapObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_24getBlockIndices(struct PyPetscLGMapObject *__pyx_v_self) {
   PetscInt __pyx_v_size;
   PetscInt __pyx_v_bs;
   const PetscInt *__pyx_v_indices;
@@ -83208,7 +89815,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_20getBlockIndices(struct PyPet
   int __pyx_t_11;
   __Pyx_RefNannySetupContext("getBlockIndices", 0);
 
-  /* "PETSc/IS.pyx":427
+  /* "PETSc/IS.pyx":441
  * 
  *     def getBlockIndices(self):
  *         cdef PetscInt size = 0, bs = 1             # <<<<<<<<<<<<<<
@@ -83218,7 +89825,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_20getBlockIndices(struct PyPet
   __pyx_v_size = 0;
   __pyx_v_bs = 1;
 
-  /* "PETSc/IS.pyx":428
+  /* "PETSc/IS.pyx":442
  *     def getBlockIndices(self):
  *         cdef PetscInt size = 0, bs = 1
  *         cdef const_PetscInt *indices = NULL             # <<<<<<<<<<<<<<
@@ -83227,34 +89834,34 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_20getBlockIndices(struct PyPet
  */
   __pyx_v_indices = NULL;
 
-  /* "PETSc/IS.pyx":429
+  /* "PETSc/IS.pyx":443
  *         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_ERR(29, 429, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingGetSize(__pyx_v_self->lgm, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 443, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":431
+  /* "PETSc/IS.pyx":445
  *         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_ERR(29, 431, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingGetBlockSize(__pyx_v_self->lgm, (&__pyx_v_bs))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 445, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":433
+  /* "PETSc/IS.pyx":447
  *         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_ERR(29, 433, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingGetBlockIndices(__pyx_v_self->lgm, (&__pyx_v_indices))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 447, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":435
+  /* "PETSc/IS.pyx":449
  *         CHKERR( ISLocalToGlobalMappingGetBlockIndices(
  *                 self.lgm, &indices) )
  *         cdef object oindices = None             # <<<<<<<<<<<<<<
@@ -83264,7 +89871,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_20getBlockIndices(struct PyPet
   __Pyx_INCREF(Py_None);
   __pyx_v_oindices = Py_None;
 
-  /* "PETSc/IS.pyx":436
+  /* "PETSc/IS.pyx":450
  *                 self.lgm, &indices) )
  *         cdef object oindices = None
  *         try:             # <<<<<<<<<<<<<<
@@ -83273,20 +89880,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_20getBlockIndices(struct PyPet
  */
   /*try:*/ {
 
-    /* "PETSc/IS.pyx":437
+    /* "PETSc/IS.pyx":451
  *         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_ERR(29, 437, __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, 451, __pyx_L4_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF_SET(__pyx_v_oindices, __pyx_t_2);
     __pyx_t_2 = 0;
   }
 
-  /* "PETSc/IS.pyx":439
+  /* "PETSc/IS.pyx":453
  *             oindices = array_i(size//bs, indices)
  *         finally:
  *             CHKERR( ISLocalToGlobalMappingRestoreBlockIndices(             # <<<<<<<<<<<<<<
@@ -83296,14 +89903,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_20getBlockIndices(struct PyPet
   /*finally:*/ {
     /*normal exit:*/{
 
-      /* "PETSc/IS.pyx":440
+      /* "PETSc/IS.pyx":454
  *         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_ERR(29, 439, __pyx_L1_error)
+      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingRestoreBlockIndices(__pyx_v_self->lgm, (&__pyx_v_indices))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(29, 453, __pyx_L1_error)
       goto __pyx_L5;
     }
     /*exception exit:*/{
@@ -83323,16 +89930,15 @@ 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":439
+        /* "PETSc/IS.pyx":453
  *             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_ERR(29, 439, __pyx_L7_error)
+        __pyx_t_11 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingRestoreBlockIndices(__pyx_v_self->lgm, (&__pyx_v_indices))); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(29, 453, __pyx_L7_error)
       }
-      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_8);
         __Pyx_XGIVEREF(__pyx_t_9);
@@ -83347,7 +89953,6 @@ 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);
@@ -83363,7 +89968,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_20getBlockIndices(struct PyPet
     __pyx_L5:;
   }
 
-  /* "PETSc/IS.pyx":441
+  /* "PETSc/IS.pyx":455
  *             CHKERR( ISLocalToGlobalMappingRestoreBlockIndices(
  *                     self.lgm, &indices) )
  *         return oindices             # <<<<<<<<<<<<<<
@@ -83375,7 +89980,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_20getBlockIndices(struct PyPet
   __pyx_r = __pyx_v_oindices;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":426
+  /* "PETSc/IS.pyx":440
  *         return oindices
  * 
  *     def getBlockIndices(self):             # <<<<<<<<<<<<<<
@@ -83395,7 +90000,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_20getBlockIndices(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":443
+/* "PETSc/IS.pyx":457
  *         return oindices
  * 
  *     def getInfo(self):             # <<<<<<<<<<<<<<
@@ -83404,23 +90009,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_20getBlockIndices(struct PyPet
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_23getInfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_5LGMap_22getInfo[] = "LGMap.getInfo(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_23getInfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_27getInfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_5LGMap_26getInfo[] = "LGMap.getInfo(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_27getInfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getInfo (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getInfo", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getInfo", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_22getInfo(((struct PyPetscLGMapObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_26getInfo(((struct PyPetscLGMapObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_22getInfo(struct PyPetscLGMapObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_26getInfo(struct PyPetscLGMapObject *__pyx_v_self) {
   PetscInt __pyx_v_i;
   PetscInt __pyx_v_nproc;
   PetscInt *__pyx_v_procs;
@@ -83443,7 +90048,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_22getInfo(struct PyPetscLGMapO
   PyObject *__pyx_t_12 = NULL;
   __Pyx_RefNannySetupContext("getInfo", 0);
 
-  /* "PETSc/IS.pyx":444
+  /* "PETSc/IS.pyx":458
  * 
  *     def getInfo(self):
  *         cdef PetscInt i, nproc = 0, *procs = NULL,             # <<<<<<<<<<<<<<
@@ -83453,7 +90058,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_22getInfo(struct PyPetscLGMapO
   __pyx_v_nproc = 0;
   __pyx_v_procs = NULL;
 
-  /* "PETSc/IS.pyx":445
+  /* "PETSc/IS.pyx":459
  *     def getInfo(self):
  *         cdef PetscInt i, nproc = 0, *procs = NULL,
  *         cdef PetscInt *numprocs = NULL, **indices = NULL             # <<<<<<<<<<<<<<
@@ -83463,28 +90068,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_22getInfo(struct PyPetscLGMapO
   __pyx_v_numprocs = NULL;
   __pyx_v_indices = NULL;
 
-  /* "PETSc/IS.pyx":446
+  /* "PETSc/IS.pyx":460
  *         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_ERR(29, 446, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); 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":447
+  /* "PETSc/IS.pyx":461
  *         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_ERR(29, 447, __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 == ((int)-1))) __PYX_ERR(29, 461, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":449
+  /* "PETSc/IS.pyx":463
  *         CHKERR( ISLocalToGlobalMappingGetInfo(
  *                 self.lgm, &nproc, &procs, &numprocs, &indices) )
  *         try:             # <<<<<<<<<<<<<<
@@ -83493,7 +90098,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_22getInfo(struct PyPetscLGMapO
  */
   /*try:*/ {
 
-    /* "PETSc/IS.pyx":450
+    /* "PETSc/IS.pyx":464
  *                 self.lgm, &nproc, &procs, &numprocs, &indices) )
  *         try:
  *             for i from 0 <= i < nproc:             # <<<<<<<<<<<<<<
@@ -83503,24 +90108,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":451
+      /* "PETSc/IS.pyx":465
  *         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_ERR(29, 451, __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_ERR(29, 451, __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_ERR(29, 451, __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":453
+  /* "PETSc/IS.pyx":467
  *                 neighs[toInt(procs[i])] = array_i(numprocs[i], indices[i])
  *         finally:
  *             ISLocalToGlobalMappingRestoreInfo(             # <<<<<<<<<<<<<<
@@ -83530,7 +90135,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_22getInfo(struct PyPetscLGMapO
   /*finally:*/ {
     /*normal exit:*/{
 
-      /* "PETSc/IS.pyx":454
+      /* "PETSc/IS.pyx":468
  *         finally:
  *             ISLocalToGlobalMappingRestoreInfo(
  *                 self.lgm, &nproc, &procs, &numprocs, &indices)             # <<<<<<<<<<<<<<
@@ -83558,7 +90163,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":453
+        /* "PETSc/IS.pyx":467
  *                 neighs[toInt(procs[i])] = array_i(numprocs[i], indices[i])
  *         finally:
  *             ISLocalToGlobalMappingRestoreInfo(             # <<<<<<<<<<<<<<
@@ -83567,7 +90172,6 @@ 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);
@@ -83585,7 +90189,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_22getInfo(struct PyPetscLGMapO
     __pyx_L5:;
   }
 
-  /* "PETSc/IS.pyx":455
+  /* "PETSc/IS.pyx":469
  *             ISLocalToGlobalMappingRestoreInfo(
  *                 self.lgm, &nproc, &procs, &numprocs, &indices)
  *         return neighs             # <<<<<<<<<<<<<<
@@ -83597,7 +90201,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_22getInfo(struct PyPetscLGMapO
   __pyx_r = __pyx_v_neighs;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":443
+  /* "PETSc/IS.pyx":457
  *         return oindices
  * 
  *     def getInfo(self):             # <<<<<<<<<<<<<<
@@ -83618,7 +90222,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_22getInfo(struct PyPetscLGMapO
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":457
+/* "PETSc/IS.pyx":471
  *         return neighs
  * 
  *     def getBlockInfo(self):             # <<<<<<<<<<<<<<
@@ -83627,23 +90231,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_22getInfo(struct PyPetscLGMapO
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_25getBlockInfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_5LGMap_24getBlockInfo[] = "LGMap.getBlockInfo(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_25getBlockInfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_29getBlockInfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_5LGMap_28getBlockInfo[] = "LGMap.getBlockInfo(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_29getBlockInfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getBlockInfo (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getBlockInfo", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getBlockInfo", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_24getBlockInfo(((struct PyPetscLGMapObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_28getBlockInfo(((struct PyPetscLGMapObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_24getBlockInfo(struct PyPetscLGMapObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_28getBlockInfo(struct PyPetscLGMapObject *__pyx_v_self) {
   PetscInt __pyx_v_i;
   PetscInt __pyx_v_nproc;
   PetscInt *__pyx_v_procs;
@@ -83666,7 +90270,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_24getBlockInfo(struct PyPetscL
   PyObject *__pyx_t_12 = NULL;
   __Pyx_RefNannySetupContext("getBlockInfo", 0);
 
-  /* "PETSc/IS.pyx":458
+  /* "PETSc/IS.pyx":472
  * 
  *     def getBlockInfo(self):
  *         cdef PetscInt i, nproc = 0, *procs = NULL,             # <<<<<<<<<<<<<<
@@ -83676,7 +90280,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_24getBlockInfo(struct PyPetscL
   __pyx_v_nproc = 0;
   __pyx_v_procs = NULL;
 
-  /* "PETSc/IS.pyx":459
+  /* "PETSc/IS.pyx":473
  *     def getBlockInfo(self):
  *         cdef PetscInt i, nproc = 0, *procs = NULL,
  *         cdef PetscInt *numprocs = NULL, **indices = NULL             # <<<<<<<<<<<<<<
@@ -83686,28 +90290,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_24getBlockInfo(struct PyPetscL
   __pyx_v_numprocs = NULL;
   __pyx_v_indices = NULL;
 
-  /* "PETSc/IS.pyx":460
+  /* "PETSc/IS.pyx":474
  *         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_ERR(29, 460, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 474, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_neighs = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/IS.pyx":461
+  /* "PETSc/IS.pyx":475
  *         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_ERR(29, 461, __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 == ((int)-1))) __PYX_ERR(29, 475, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":463
+  /* "PETSc/IS.pyx":477
  *         CHKERR( ISLocalToGlobalMappingGetBlockInfo(
  *                 self.lgm, &nproc, &procs, &numprocs, &indices) )
  *         try:             # <<<<<<<<<<<<<<
@@ -83716,7 +90320,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_24getBlockInfo(struct PyPetscL
  */
   /*try:*/ {
 
-    /* "PETSc/IS.pyx":464
+    /* "PETSc/IS.pyx":478
  *                 self.lgm, &nproc, &procs, &numprocs, &indices) )
  *         try:
  *             for i from 0 <= i < nproc:             # <<<<<<<<<<<<<<
@@ -83726,24 +90330,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":465
+      /* "PETSc/IS.pyx":479
  *         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_ERR(29, 465, __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, 479, __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_ERR(29, 465, __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, 479, __pyx_L4_error)
       __Pyx_GOTREF(__pyx_t_4);
-      if (unlikely(PyObject_SetItem(__pyx_v_neighs, __pyx_t_4, __pyx_t_1) < 0)) __PYX_ERR(29, 465, __pyx_L4_error)
+      if (unlikely(PyObject_SetItem(__pyx_v_neighs, __pyx_t_4, __pyx_t_1) < 0)) __PYX_ERR(29, 479, __pyx_L4_error)
       __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
       __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
     }
   }
 
-  /* "PETSc/IS.pyx":467
+  /* "PETSc/IS.pyx":481
  *                 neighs[toInt(procs[i])] = array_i(numprocs[i], indices[i])
  *         finally:
  *             ISLocalToGlobalMappingRestoreBlockInfo(             # <<<<<<<<<<<<<<
@@ -83753,7 +90357,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_24getBlockInfo(struct PyPetscL
   /*finally:*/ {
     /*normal exit:*/{
 
-      /* "PETSc/IS.pyx":468
+      /* "PETSc/IS.pyx":482
  *         finally:
  *             ISLocalToGlobalMappingRestoreBlockInfo(
  *                 self.lgm, &nproc, &procs, &numprocs, &indices)             # <<<<<<<<<<<<<<
@@ -83781,7 +90385,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":467
+        /* "PETSc/IS.pyx":481
  *                 neighs[toInt(procs[i])] = array_i(numprocs[i], indices[i])
  *         finally:
  *             ISLocalToGlobalMappingRestoreBlockInfo(             # <<<<<<<<<<<<<<
@@ -83790,7 +90394,6 @@ 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);
@@ -83808,7 +90411,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_24getBlockInfo(struct PyPetscL
     __pyx_L5:;
   }
 
-  /* "PETSc/IS.pyx":469
+  /* "PETSc/IS.pyx":483
  *             ISLocalToGlobalMappingRestoreBlockInfo(
  *                 self.lgm, &nproc, &procs, &numprocs, &indices)
  *         return neighs             # <<<<<<<<<<<<<<
@@ -83820,7 +90423,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_24getBlockInfo(struct PyPetscL
   __pyx_r = __pyx_v_neighs;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":457
+  /* "PETSc/IS.pyx":471
  *         return neighs
  * 
  *     def getBlockInfo(self):             # <<<<<<<<<<<<<<
@@ -83841,7 +90444,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_24getBlockInfo(struct PyPetscL
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":473
+/* "PETSc/IS.pyx":487
  *     #
  * 
  *     def apply(self, indices, result=None):             # <<<<<<<<<<<<<<
@@ -83850,9 +90453,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_24getBlockInfo(struct PyPetscL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_27apply(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_5LGMap_26apply[] = "LGMap.apply(self, indices, result=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_27apply(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_31apply(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_5LGMap_30apply[] = "LGMap.apply(self, indices, result=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_31apply(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_indices = 0;
   PyObject *__pyx_v_result = 0;
   PyObject *__pyx_r = 0;
@@ -83867,7 +90470,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_27apply(PyObject *__pyx_v_self
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -83876,6 +90481,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_27apply(PyObject *__pyx_v_self
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_indices)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_result);
@@ -83883,11 +90489,12 @@ 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_ERR(29, 473, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "apply") < 0)) __PYX_ERR(29, 487, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -83898,20 +90505,20 @@ 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_ERR(29, 473, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("apply", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 487, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.LGMap.apply", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_26apply(((struct PyPetscLGMapObject *)__pyx_v_self), __pyx_v_indices, __pyx_v_result);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_30apply(((struct PyPetscLGMapObject *)__pyx_v_self), __pyx_v_indices, __pyx_v_result);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_26apply(struct PyPetscLGMapObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_result) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_30apply(struct PyPetscLGMapObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_result) {
   PetscInt __pyx_v_niidx;
   PetscInt *__pyx_v_iidx;
   PetscInt __pyx_v_noidx;
@@ -83926,7 +90533,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_26apply(struct PyPetscLGMapObj
   __Pyx_INCREF(__pyx_v_indices);
   __Pyx_INCREF(__pyx_v_result);
 
-  /* "PETSc/IS.pyx":474
+  /* "PETSc/IS.pyx":488
  * 
  *     def apply(self, indices, result=None):
  *         cdef PetscInt niidx = 0, *iidx = NULL             # <<<<<<<<<<<<<<
@@ -83936,7 +90543,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_26apply(struct PyPetscLGMapObj
   __pyx_v_niidx = 0;
   __pyx_v_iidx = NULL;
 
-  /* "PETSc/IS.pyx":475
+  /* "PETSc/IS.pyx":489
  *     def apply(self, indices, result=None):
  *         cdef PetscInt niidx = 0, *iidx = NULL
  *         cdef PetscInt noidx = 0, *oidx = NULL             # <<<<<<<<<<<<<<
@@ -83946,19 +90553,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_26apply(struct PyPetscLGMapObj
   __pyx_v_noidx = 0;
   __pyx_v_oidx = NULL;
 
-  /* "PETSc/IS.pyx":476
+  /* "PETSc/IS.pyx":490
  *         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_ERR(29, 476, __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, 490, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_indices, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/IS.pyx":477
+  /* "PETSc/IS.pyx":491
  *         cdef PetscInt noidx = 0, *oidx = NULL
  *         indices = iarray_i(indices, &niidx, &iidx)
  *         if result is None: result = empty_i(niidx)             # <<<<<<<<<<<<<<
@@ -83968,25 +90575,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_ERR(29, 477, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_i(__pyx_v_niidx)); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 491, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_1);
     __pyx_t_1 = 0;
   }
 
-  /* "PETSc/IS.pyx":478
+  /* "PETSc/IS.pyx":492
  *         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_ERR(29, 478, __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, 492, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/IS.pyx":479
+  /* "PETSc/IS.pyx":493
  *         if result is None: result = empty_i(niidx)
  *         result  = oarray_i(result,  &noidx, &oidx)
  *         assert niidx == noidx, "incompatible array sizes"             # <<<<<<<<<<<<<<
@@ -83997,21 +90604,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_ERR(29, 479, __pyx_L1_error)
+      __PYX_ERR(29, 493, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/IS.pyx":480
+  /* "PETSc/IS.pyx":494
  *         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_ERR(29, 480, __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 == ((int)-1))) __PYX_ERR(29, 494, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":482
+  /* "PETSc/IS.pyx":496
  *         CHKERR( ISLocalToGlobalMappingApply(
  *             self.lgm, niidx, iidx, oidx) )
  *         return result             # <<<<<<<<<<<<<<
@@ -84023,7 +90630,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_26apply(struct PyPetscLGMapObj
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":473
+  /* "PETSc/IS.pyx":487
  *     #
  * 
  *     def apply(self, indices, result=None):             # <<<<<<<<<<<<<<
@@ -84044,7 +90651,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_26apply(struct PyPetscLGMapObj
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":484
+/* "PETSc/IS.pyx":498
  *         return result
  * 
  *     def applyBlock(self, indices, result=None):             # <<<<<<<<<<<<<<
@@ -84053,9 +90660,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_26apply(struct PyPetscLGMapObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_29applyBlock(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_5LGMap_28applyBlock[] = "LGMap.applyBlock(self, indices, result=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_29applyBlock(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_33applyBlock(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_5LGMap_32applyBlock[] = "LGMap.applyBlock(self, indices, result=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_33applyBlock(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_indices = 0;
   PyObject *__pyx_v_result = 0;
   PyObject *__pyx_r = 0;
@@ -84070,7 +90677,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_29applyBlock(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -84079,6 +90688,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_29applyBlock(PyObject *__pyx_v
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_indices)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_result);
@@ -84086,11 +90696,12 @@ 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_ERR(29, 484, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "applyBlock") < 0)) __PYX_ERR(29, 498, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -84101,20 +90712,20 @@ 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_ERR(29, 484, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("applyBlock", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 498, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.LGMap.applyBlock", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_28applyBlock(((struct PyPetscLGMapObject *)__pyx_v_self), __pyx_v_indices, __pyx_v_result);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_32applyBlock(((struct PyPetscLGMapObject *)__pyx_v_self), __pyx_v_indices, __pyx_v_result);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_28applyBlock(struct PyPetscLGMapObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_result) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_32applyBlock(struct PyPetscLGMapObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_result) {
   PetscInt __pyx_v_niidx;
   PetscInt *__pyx_v_iidx;
   PetscInt __pyx_v_noidx;
@@ -84129,7 +90740,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_28applyBlock(struct PyPetscLGM
   __Pyx_INCREF(__pyx_v_indices);
   __Pyx_INCREF(__pyx_v_result);
 
-  /* "PETSc/IS.pyx":485
+  /* "PETSc/IS.pyx":499
  * 
  *     def applyBlock(self, indices, result=None):
  *         cdef PetscInt niidx = 0, *iidx = NULL             # <<<<<<<<<<<<<<
@@ -84139,7 +90750,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_28applyBlock(struct PyPetscLGM
   __pyx_v_niidx = 0;
   __pyx_v_iidx = NULL;
 
-  /* "PETSc/IS.pyx":486
+  /* "PETSc/IS.pyx":500
  *     def applyBlock(self, indices, result=None):
  *         cdef PetscInt niidx = 0, *iidx = NULL
  *         cdef PetscInt noidx = 0, *oidx = NULL             # <<<<<<<<<<<<<<
@@ -84149,19 +90760,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_28applyBlock(struct PyPetscLGM
   __pyx_v_noidx = 0;
   __pyx_v_oidx = NULL;
 
-  /* "PETSc/IS.pyx":487
+  /* "PETSc/IS.pyx":501
  *         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_ERR(29, 487, __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, 501, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_indices, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/IS.pyx":488
+  /* "PETSc/IS.pyx":502
  *         cdef PetscInt noidx = 0, *oidx = NULL
  *         indices = iarray_i(indices, &niidx, &iidx)
  *         if result is None: result = empty_i(niidx)             # <<<<<<<<<<<<<<
@@ -84171,25 +90782,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_ERR(29, 488, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_i(__pyx_v_niidx)); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 502, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_1);
     __pyx_t_1 = 0;
   }
 
-  /* "PETSc/IS.pyx":489
+  /* "PETSc/IS.pyx":503
  *         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_ERR(29, 489, __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, 503, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/IS.pyx":490
+  /* "PETSc/IS.pyx":504
  *         if result is None: result = empty_i(niidx)
  *         result  = oarray_i(result,  &noidx, &oidx)
  *         assert niidx == noidx, "incompatible array sizes"             # <<<<<<<<<<<<<<
@@ -84200,33 +90811,33 @@ 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_ERR(29, 490, __pyx_L1_error)
+      __PYX_ERR(29, 504, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/IS.pyx":491
+  /* "PETSc/IS.pyx":505
  *         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_ERR(29, 491, __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 == ((int)-1))) __PYX_ERR(29, 505, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":493
+  /* "PETSc/IS.pyx":507
  *         CHKERR( ISLocalToGlobalMappingApplyBlock(
  *             self.lgm, niidx, iidx, oidx) )
  *         return result             # <<<<<<<<<<<<<<
  * 
- *     def applyIS(self, IS iset not None):
+ *     def applyIS(self, IS iset):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(__pyx_v_result);
   __pyx_r = __pyx_v_result;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":484
+  /* "PETSc/IS.pyx":498
  *         return result
  * 
  *     def applyBlock(self, indices, result=None):             # <<<<<<<<<<<<<<
@@ -84247,18 +90858,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_28applyBlock(struct PyPetscLGM
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":495
+/* "PETSc/IS.pyx":509
  *         return result
  * 
- *     def applyIS(self, IS iset not None):             # <<<<<<<<<<<<<<
+ *     def applyIS(self, IS iset):             # <<<<<<<<<<<<<<
  *         cdef IS result = IS()
  *         CHKERR( ISLocalToGlobalMappingApplyIS(
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_31applyIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_35applyIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_5LGMap_34applyIS[] = "LGMap.applyIS(self, IS iset)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_35applyIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_iset = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -84271,6 +90882,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_31applyIS(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -84281,7 +90893,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_ERR(29, 495, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "applyIS") < 0)) __PYX_ERR(29, 509, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -84292,14 +90904,14 @@ 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_ERR(29, 495, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("applyIS", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 509, __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_ERR(29, 495, __pyx_L1_error)
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_30applyIS(((struct PyPetscLGMapObject *)__pyx_v_self), __pyx_v_iset);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iset), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iset", 0))) __PYX_ERR(29, 509, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_34applyIS(((struct PyPetscLGMapObject *)__pyx_v_self), __pyx_v_iset);
 
   /* function exit code */
   goto __pyx_L0;
@@ -84310,7 +90922,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_31applyIS(PyObject *__pyx_v_se
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_30applyIS(struct PyPetscLGMapObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_34applyIS(struct PyPetscLGMapObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset) {
   struct PyPetscISObject *__pyx_v_result = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -84318,43 +90930,43 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_30applyIS(struct PyPetscLGMapO
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("applyIS", 0);
 
-  /* "PETSc/IS.pyx":496
+  /* "PETSc/IS.pyx":510
  * 
- *     def applyIS(self, IS iset not None):
+ *     def applyIS(self, IS iset):
  *         cdef IS result = IS()             # <<<<<<<<<<<<<<
  *         CHKERR( ISLocalToGlobalMappingApplyIS(
  *             self.lgm, iset.iset, &result.iset) )
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 510, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_result = ((struct PyPetscISObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/IS.pyx":497
- *     def applyIS(self, IS iset not None):
+  /* "PETSc/IS.pyx":511
+ *     def applyIS(self, IS iset):
  *         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_ERR(29, 497, __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 == ((int)-1))) __PYX_ERR(29, 511, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":499
+  /* "PETSc/IS.pyx":513
  *         CHKERR( ISLocalToGlobalMappingApplyIS(
  *             self.lgm, iset.iset, &result.iset) )
  *         return result             # <<<<<<<<<<<<<<
  * 
- *     def applyInverse(self, indices, map_type=None):
+ *     def applyInverse(self, indices, mode=None):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_result));
   __pyx_r = ((PyObject *)__pyx_v_result);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":495
+  /* "PETSc/IS.pyx":509
  *         return result
  * 
- *     def applyIS(self, IS iset not None):             # <<<<<<<<<<<<<<
+ *     def applyIS(self, IS iset):             # <<<<<<<<<<<<<<
  *         cdef IS result = IS()
  *         CHKERR( ISLocalToGlobalMappingApplyIS(
  */
@@ -84371,25 +90983,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_30applyIS(struct PyPetscLGMapO
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":501
+/* "PETSc/IS.pyx":515
  *         return result
  * 
- *     def applyInverse(self, indices, map_type=None):             # <<<<<<<<<<<<<<
- *         cdef PetscGLMapType cmtype = PETSC_IS_GTOLM_MASK
- *         if map_type is not None: cmtype = map_type
+ *     def applyInverse(self, indices, mode=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscGLMapMode cmode = PETSC_IS_GTOLM_MASK
+ *         if mode is not None: cmode = mode
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_33applyInverse(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_5LGMap_32applyInverse[] = "LGMap.applyInverse(self, indices, map_type=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_33applyInverse(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_37applyInverse(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_5LGMap_36applyInverse[] = "LGMap.applyInverse(self, indices, mode=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_37applyInverse(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_indices = 0;
-  PyObject *__pyx_v_map_type = 0;
+  PyObject *__pyx_v_mode = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("applyInverse (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_indices,&__pyx_n_s_map_type,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_indices,&__pyx_n_s_mode,0};
     PyObject* values[2] = {0,0};
     values[1] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
@@ -84397,7 +91009,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_33applyInverse(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -84406,43 +91020,45 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_33applyInverse(PyObject *__pyx
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_indices)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_map_type);
+          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, "applyInverse") < 0)) __PYX_ERR(29, 501, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "applyInverse") < 0)) __PYX_ERR(29, 515, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
       }
     }
     __pyx_v_indices = values[0];
-    __pyx_v_map_type = values[1];
+    __pyx_v_mode = values[1];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("applyInverse", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 501, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("applyInverse", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 515, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.LGMap.applyInverse", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_32applyInverse(((struct PyPetscLGMapObject *)__pyx_v_self), __pyx_v_indices, __pyx_v_map_type);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_36applyInverse(((struct PyPetscLGMapObject *)__pyx_v_self), __pyx_v_indices, __pyx_v_mode);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_32applyInverse(struct PyPetscLGMapObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_map_type) {
-  ISGlobalToLocalMappingType __pyx_v_cmtype;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_36applyInverse(struct PyPetscLGMapObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_mode) {
+  ISGlobalToLocalMappingMode __pyx_v_cmode;
   PetscInt __pyx_v_n;
   PetscInt *__pyx_v_idx;
   PetscInt __pyx_v_nout;
@@ -84452,39 +91068,39 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_32applyInverse(struct PyPetscL
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
-  ISGlobalToLocalMappingType __pyx_t_3;
+  ISGlobalToLocalMappingMode __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
   int __pyx_t_5;
   PyObject *__pyx_t_6 = NULL;
   __Pyx_RefNannySetupContext("applyInverse", 0);
   __Pyx_INCREF(__pyx_v_indices);
 
-  /* "PETSc/IS.pyx":502
+  /* "PETSc/IS.pyx":516
  * 
- *     def applyInverse(self, indices, map_type=None):
- *         cdef PetscGLMapType cmtype = PETSC_IS_GTOLM_MASK             # <<<<<<<<<<<<<<
- *         if map_type is not None: cmtype = map_type
+ *     def applyInverse(self, indices, mode=None):
+ *         cdef PetscGLMapMode cmode = PETSC_IS_GTOLM_MASK             # <<<<<<<<<<<<<<
+ *         if mode is not None: cmode = mode
  *         cdef PetscInt n = 0, *idx = NULL
  */
-  __pyx_v_cmtype = IS_GTOLM_MASK;
+  __pyx_v_cmode = IS_GTOLM_MASK;
 
-  /* "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             # <<<<<<<<<<<<<<
+  /* "PETSc/IS.pyx":517
+ *     def applyInverse(self, indices, mode=None):
+ *         cdef PetscGLMapMode cmode = PETSC_IS_GTOLM_MASK
+ *         if mode is not None: cmode = mode             # <<<<<<<<<<<<<<
  *         cdef PetscInt n = 0, *idx = NULL
  *         indices = iarray_i(indices, &n, &idx)
  */
-  __pyx_t_1 = (__pyx_v_map_type != Py_None);
+  __pyx_t_1 = (__pyx_v_mode != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __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;
+    __pyx_t_3 = ((ISGlobalToLocalMappingMode)__Pyx_PyInt_As_ISGlobalToLocalMappingMode(__pyx_v_mode)); if (unlikely(PyErr_Occurred())) __PYX_ERR(29, 517, __pyx_L1_error)
+    __pyx_v_cmode = __pyx_t_3;
   }
 
-  /* "PETSc/IS.pyx":504
- *         cdef PetscGLMapType cmtype = PETSC_IS_GTOLM_MASK
- *         if map_type is not None: cmtype = map_type
+  /* "PETSc/IS.pyx":518
+ *         cdef PetscGLMapMode cmode = PETSC_IS_GTOLM_MASK
+ *         if mode is not None: cmode = mode
  *         cdef PetscInt n = 0, *idx = NULL             # <<<<<<<<<<<<<<
  *         indices = iarray_i(indices, &n, &idx)
  *         cdef PetscInt nout = n, *idxout = NULL
@@ -84492,98 +91108,98 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_32applyInverse(struct PyPetscL
   __pyx_v_n = 0;
   __pyx_v_idx = NULL;
 
-  /* "PETSc/IS.pyx":505
- *         if map_type is not None: cmtype = map_type
+  /* "PETSc/IS.pyx":519
+ *         if mode is not None: cmode = mode
  *         cdef PetscInt n = 0, *idx = NULL
  *         indices = iarray_i(indices, &n, &idx)             # <<<<<<<<<<<<<<
  *         cdef PetscInt nout = n, *idxout = NULL
- *         if cmtype != PETSC_IS_GTOLM_MASK:
+ *         if cmode != 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_ERR(29, 505, __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":506
+  /* "PETSc/IS.pyx":520
  *         cdef PetscInt n = 0, *idx = NULL
  *         indices = iarray_i(indices, &n, &idx)
  *         cdef PetscInt nout = n, *idxout = NULL             # <<<<<<<<<<<<<<
- *         if cmtype != PETSC_IS_GTOLM_MASK:
+ *         if cmode != PETSC_IS_GTOLM_MASK:
  *             CHKERR( ISGlobalToLocalMappingApply(
  */
   __pyx_v_nout = __pyx_v_n;
   __pyx_v_idxout = NULL;
 
-  /* "PETSc/IS.pyx":507
+  /* "PETSc/IS.pyx":521
  *         indices = iarray_i(indices, &n, &idx)
  *         cdef PetscInt nout = n, *idxout = NULL
- *         if cmtype != PETSC_IS_GTOLM_MASK:             # <<<<<<<<<<<<<<
+ *         if cmode != PETSC_IS_GTOLM_MASK:             # <<<<<<<<<<<<<<
  *             CHKERR( ISGlobalToLocalMappingApply(
- *                     self.lgm, cmtype, n, idx, &nout, NULL) )
+ *                     self.lgm, cmode, n, idx, &nout, NULL) )
  */
-  __pyx_t_2 = ((__pyx_v_cmtype != IS_GTOLM_MASK) != 0);
+  __pyx_t_2 = ((__pyx_v_cmode != IS_GTOLM_MASK) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/IS.pyx":508
+    /* "PETSc/IS.pyx":522
  *         cdef PetscInt nout = n, *idxout = NULL
- *         if cmtype != PETSC_IS_GTOLM_MASK:
+ *         if cmode != PETSC_IS_GTOLM_MASK:
  *             CHKERR( ISGlobalToLocalMappingApply(             # <<<<<<<<<<<<<<
- *                     self.lgm, cmtype, n, idx, &nout, NULL) )
+ *                     self.lgm, cmode, 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_ERR(29, 508, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGlobalToLocalMappingApply(__pyx_v_self->lgm, __pyx_v_cmode, __pyx_v_n, __pyx_v_idx, (&__pyx_v_nout), NULL)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(29, 522, __pyx_L1_error)
 
-    /* "PETSc/IS.pyx":507
+    /* "PETSc/IS.pyx":521
  *         indices = iarray_i(indices, &n, &idx)
  *         cdef PetscInt nout = n, *idxout = NULL
- *         if cmtype != PETSC_IS_GTOLM_MASK:             # <<<<<<<<<<<<<<
+ *         if cmode != PETSC_IS_GTOLM_MASK:             # <<<<<<<<<<<<<<
  *             CHKERR( ISGlobalToLocalMappingApply(
- *                     self.lgm, cmtype, n, idx, &nout, NULL) )
+ *                     self.lgm, cmode, n, idx, &nout, NULL) )
  */
   }
 
-  /* "PETSc/IS.pyx":510
+  /* "PETSc/IS.pyx":524
  *             CHKERR( ISGlobalToLocalMappingApply(
- *                     self.lgm, cmtype, n, idx, &nout, NULL) )
+ *                     self.lgm, cmode, n, idx, &nout, NULL) )
  *         result = oarray_i(empty_i(nout), &nout, &idxout)             # <<<<<<<<<<<<<<
  *         CHKERR( ISGlobalToLocalMappingApply(
- *                 self.lgm, cmtype, n, idx, &nout, idxout) )
+ *                 self.lgm, cmode, n, idx, &nout, idxout) )
  */
-  __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_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_ERR(29, 510, __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":511
- *                     self.lgm, cmtype, n, idx, &nout, NULL) )
+  /* "PETSc/IS.pyx":525
+ *                     self.lgm, cmode, n, idx, &nout, NULL) )
  *         result = oarray_i(empty_i(nout), &nout, &idxout)
  *         CHKERR( ISGlobalToLocalMappingApply(             # <<<<<<<<<<<<<<
- *                 self.lgm, cmtype, n, idx, &nout, idxout) )
+ *                 self.lgm, cmode, 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_ERR(29, 511, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGlobalToLocalMappingApply(__pyx_v_self->lgm, __pyx_v_cmode, __pyx_v_n, __pyx_v_idx, (&__pyx_v_nout), __pyx_v_idxout)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(29, 525, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":513
+  /* "PETSc/IS.pyx":527
  *         CHKERR( ISGlobalToLocalMappingApply(
- *                 self.lgm, cmtype, n, idx, &nout, idxout) )
+ *                 self.lgm, cmode, n, idx, &nout, idxout) )
  *         return result             # <<<<<<<<<<<<<<
  * 
- *     def applyBlockInverse(self, indices, map_type=None):
+ *     def applyBlockInverse(self, indices, mode=None):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_result));
   __pyx_r = ((PyObject *)__pyx_v_result);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":501
+  /* "PETSc/IS.pyx":515
  *         return result
  * 
- *     def applyInverse(self, indices, map_type=None):             # <<<<<<<<<<<<<<
- *         cdef PetscGLMapType cmtype = PETSC_IS_GTOLM_MASK
- *         if map_type is not None: cmtype = map_type
+ *     def applyInverse(self, indices, mode=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscGLMapMode cmode = PETSC_IS_GTOLM_MASK
+ *         if mode is not None: cmode = mode
  */
 
   /* function exit code */
@@ -84600,25 +91216,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_32applyInverse(struct PyPetscL
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":515
+/* "PETSc/IS.pyx":529
  *         return result
  * 
- *     def applyBlockInverse(self, indices, map_type=None):             # <<<<<<<<<<<<<<
- *         cdef PetscGLMapType cmtype = PETSC_IS_GTOLM_MASK
- *         if map_type is not None: cmtype = map_type
+ *     def applyBlockInverse(self, indices, mode=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscGLMapMode cmode = PETSC_IS_GTOLM_MASK
+ *         if mode is not None: cmode = mode
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_35applyBlockInverse(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_5LGMap_34applyBlockInverse[] = "LGMap.applyBlockInverse(self, indices, map_type=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_35applyBlockInverse(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_39applyBlockInverse(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_5LGMap_38applyBlockInverse[] = "LGMap.applyBlockInverse(self, indices, mode=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_39applyBlockInverse(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_indices = 0;
-  PyObject *__pyx_v_map_type = 0;
+  PyObject *__pyx_v_mode = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("applyBlockInverse (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_indices,&__pyx_n_s_map_type,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_indices,&__pyx_n_s_mode,0};
     PyObject* values[2] = {0,0};
     values[1] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
@@ -84626,7 +91242,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_35applyBlockInverse(PyObject *
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -84635,43 +91253,45 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_5LGMap_35applyBlockInverse(PyObject *
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_indices)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_map_type);
+          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, "applyBlockInverse") < 0)) __PYX_ERR(29, 515, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "applyBlockInverse") < 0)) __PYX_ERR(29, 529, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
       }
     }
     __pyx_v_indices = values[0];
-    __pyx_v_map_type = values[1];
+    __pyx_v_mode = values[1];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("applyBlockInverse", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 515, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("applyBlockInverse", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(29, 529, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.LGMap.applyBlockInverse", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_34applyBlockInverse(((struct PyPetscLGMapObject *)__pyx_v_self), __pyx_v_indices, __pyx_v_map_type);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_5LGMap_38applyBlockInverse(((struct PyPetscLGMapObject *)__pyx_v_self), __pyx_v_indices, __pyx_v_mode);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_34applyBlockInverse(struct PyPetscLGMapObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_map_type) {
-  ISGlobalToLocalMappingType __pyx_v_cmtype;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_38applyBlockInverse(struct PyPetscLGMapObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_mode) {
+  ISGlobalToLocalMappingMode __pyx_v_cmode;
   PetscInt __pyx_v_n;
   PetscInt *__pyx_v_idx;
   PetscInt __pyx_v_nout;
@@ -84681,39 +91301,39 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_34applyBlockInverse(struct PyP
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
-  ISGlobalToLocalMappingType __pyx_t_3;
+  ISGlobalToLocalMappingMode __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
   int __pyx_t_5;
   PyObject *__pyx_t_6 = NULL;
   __Pyx_RefNannySetupContext("applyBlockInverse", 0);
   __Pyx_INCREF(__pyx_v_indices);
 
-  /* "PETSc/IS.pyx":516
+  /* "PETSc/IS.pyx":530
  * 
- *     def applyBlockInverse(self, indices, map_type=None):
- *         cdef PetscGLMapType cmtype = PETSC_IS_GTOLM_MASK             # <<<<<<<<<<<<<<
- *         if map_type is not None: cmtype = map_type
+ *     def applyBlockInverse(self, indices, mode=None):
+ *         cdef PetscGLMapMode cmode = PETSC_IS_GTOLM_MASK             # <<<<<<<<<<<<<<
+ *         if mode is not None: cmode = mode
  *         cdef PetscInt n = 0, *idx = NULL
  */
-  __pyx_v_cmtype = IS_GTOLM_MASK;
+  __pyx_v_cmode = IS_GTOLM_MASK;
 
-  /* "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             # <<<<<<<<<<<<<<
+  /* "PETSc/IS.pyx":531
+ *     def applyBlockInverse(self, indices, mode=None):
+ *         cdef PetscGLMapMode cmode = PETSC_IS_GTOLM_MASK
+ *         if mode is not None: cmode = mode             # <<<<<<<<<<<<<<
  *         cdef PetscInt n = 0, *idx = NULL
  *         indices = iarray_i(indices, &n, &idx)
  */
-  __pyx_t_1 = (__pyx_v_map_type != Py_None);
+  __pyx_t_1 = (__pyx_v_mode != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
-    __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;
+    __pyx_t_3 = ((ISGlobalToLocalMappingMode)__Pyx_PyInt_As_ISGlobalToLocalMappingMode(__pyx_v_mode)); if (unlikely(PyErr_Occurred())) __PYX_ERR(29, 531, __pyx_L1_error)
+    __pyx_v_cmode = __pyx_t_3;
   }
 
-  /* "PETSc/IS.pyx":518
- *         cdef PetscGLMapType cmtype = PETSC_IS_GTOLM_MASK
- *         if map_type is not None: cmtype = map_type
+  /* "PETSc/IS.pyx":532
+ *         cdef PetscGLMapMode cmode = PETSC_IS_GTOLM_MASK
+ *         if mode is not None: cmode = mode
  *         cdef PetscInt n = 0, *idx = NULL             # <<<<<<<<<<<<<<
  *         indices = iarray_i(indices, &n, &idx)
  *         cdef PetscInt nout = n, *idxout = NULL
@@ -84721,83 +91341,83 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_34applyBlockInverse(struct PyP
   __pyx_v_n = 0;
   __pyx_v_idx = NULL;
 
-  /* "PETSc/IS.pyx":519
- *         if map_type is not None: cmtype = map_type
+  /* "PETSc/IS.pyx":533
+ *         if mode is not None: cmode = mode
  *         cdef PetscInt n = 0, *idx = NULL
  *         indices = iarray_i(indices, &n, &idx)             # <<<<<<<<<<<<<<
  *         cdef PetscInt nout = n, *idxout = NULL
- *         if cmtype != PETSC_IS_GTOLM_MASK:
+ *         if cmode != 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_ERR(29, 519, __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, 533, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF_SET(__pyx_v_indices, __pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "PETSc/IS.pyx":520
+  /* "PETSc/IS.pyx":534
  *         cdef PetscInt n = 0, *idx = NULL
  *         indices = iarray_i(indices, &n, &idx)
  *         cdef PetscInt nout = n, *idxout = NULL             # <<<<<<<<<<<<<<
- *         if cmtype != PETSC_IS_GTOLM_MASK:
+ *         if cmode != PETSC_IS_GTOLM_MASK:
  *             CHKERR( ISGlobalToLocalMappingApply(
  */
   __pyx_v_nout = __pyx_v_n;
   __pyx_v_idxout = NULL;
 
-  /* "PETSc/IS.pyx":521
+  /* "PETSc/IS.pyx":535
  *         indices = iarray_i(indices, &n, &idx)
  *         cdef PetscInt nout = n, *idxout = NULL
- *         if cmtype != PETSC_IS_GTOLM_MASK:             # <<<<<<<<<<<<<<
+ *         if cmode != PETSC_IS_GTOLM_MASK:             # <<<<<<<<<<<<<<
  *             CHKERR( ISGlobalToLocalMappingApply(
- *                     self.lgm, cmtype, n, idx, &nout, NULL) )
+ *                     self.lgm, cmode, n, idx, &nout, NULL) )
  */
-  __pyx_t_2 = ((__pyx_v_cmtype != IS_GTOLM_MASK) != 0);
+  __pyx_t_2 = ((__pyx_v_cmode != IS_GTOLM_MASK) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/IS.pyx":522
+    /* "PETSc/IS.pyx":536
  *         cdef PetscInt nout = n, *idxout = NULL
- *         if cmtype != PETSC_IS_GTOLM_MASK:
+ *         if cmode != PETSC_IS_GTOLM_MASK:
  *             CHKERR( ISGlobalToLocalMappingApply(             # <<<<<<<<<<<<<<
- *                     self.lgm, cmtype, n, idx, &nout, NULL) )
+ *                     self.lgm, cmode, 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_ERR(29, 522, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGlobalToLocalMappingApply(__pyx_v_self->lgm, __pyx_v_cmode, __pyx_v_n, __pyx_v_idx, (&__pyx_v_nout), NULL)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(29, 536, __pyx_L1_error)
 
-    /* "PETSc/IS.pyx":521
+    /* "PETSc/IS.pyx":535
  *         indices = iarray_i(indices, &n, &idx)
  *         cdef PetscInt nout = n, *idxout = NULL
- *         if cmtype != PETSC_IS_GTOLM_MASK:             # <<<<<<<<<<<<<<
+ *         if cmode != PETSC_IS_GTOLM_MASK:             # <<<<<<<<<<<<<<
  *             CHKERR( ISGlobalToLocalMappingApply(
- *                     self.lgm, cmtype, n, idx, &nout, NULL) )
+ *                     self.lgm, cmode, n, idx, &nout, NULL) )
  */
   }
 
-  /* "PETSc/IS.pyx":524
+  /* "PETSc/IS.pyx":538
  *             CHKERR( ISGlobalToLocalMappingApply(
- *                     self.lgm, cmtype, n, idx, &nout, NULL) )
+ *                     self.lgm, cmode, n, idx, &nout, NULL) )
  *         result = oarray_i(empty_i(nout), &nout, &idxout)             # <<<<<<<<<<<<<<
  *         CHKERR( ISGlobalToLocalMappingApplyBlock(
- *                 self.lgm, cmtype, n, idx, &nout, idxout) )
+ *                 self.lgm, cmode, n, idx, &nout, idxout) )
  */
-  __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_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_i(__pyx_v_nout)); if (unlikely(!__pyx_t_4)) __PYX_ERR(29, 538, __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_ERR(29, 524, __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, 538, __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":525
- *                     self.lgm, cmtype, n, idx, &nout, NULL) )
+  /* "PETSc/IS.pyx":539
+ *                     self.lgm, cmode, n, idx, &nout, NULL) )
  *         result = oarray_i(empty_i(nout), &nout, &idxout)
  *         CHKERR( ISGlobalToLocalMappingApplyBlock(             # <<<<<<<<<<<<<<
- *                 self.lgm, cmtype, n, idx, &nout, idxout) )
+ *                 self.lgm, cmode, 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_ERR(29, 525, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISGlobalToLocalMappingApplyBlock(__pyx_v_self->lgm, __pyx_v_cmode, __pyx_v_n, __pyx_v_idx, (&__pyx_v_nout), __pyx_v_idxout)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(29, 539, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":527
+  /* "PETSc/IS.pyx":541
  *         CHKERR( ISGlobalToLocalMappingApplyBlock(
- *                 self.lgm, cmtype, n, idx, &nout, idxout) )
+ *                 self.lgm, cmode, n, idx, &nout, idxout) )
  *         return result             # <<<<<<<<<<<<<<
  *     #
  * 
@@ -84807,12 +91427,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_34applyBlockInverse(struct PyP
   __pyx_r = ((PyObject *)__pyx_v_result);
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":515
+  /* "PETSc/IS.pyx":529
  *         return result
  * 
- *     def applyBlockInverse(self, indices, map_type=None):             # <<<<<<<<<<<<<<
- *         cdef PetscGLMapType cmtype = PETSC_IS_GTOLM_MASK
- *         if map_type is not None: cmtype = map_type
+ *     def applyBlockInverse(self, indices, mode=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscGLMapMode cmode = PETSC_IS_GTOLM_MASK
+ *         if mode is not None: cmode = mode
  */
 
   /* function exit code */
@@ -84829,7 +91449,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_34applyBlockInverse(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":531
+/* "PETSc/IS.pyx":545
  * 
  *     property size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -84858,7 +91478,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4size___get__(struct PyPetscLG
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/IS.pyx":532
+  /* "PETSc/IS.pyx":546
  *     property size:
  *         def __get__(self):
  *             return self.getSize()             # <<<<<<<<<<<<<<
@@ -84866,10 +91486,10 @@ 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_ERR(29, 532, __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, 546, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -84879,10 +91499,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_ERR(29, 532, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 546, __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(29, 532, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 546, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -84890,7 +91510,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4size___get__(struct PyPetscLG
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":531
+  /* "PETSc/IS.pyx":545
  * 
  *     property size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -84911,7 +91531,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4size___get__(struct PyPetscLG
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":535
+/* "PETSc/IS.pyx":549
  * 
  *     property block_size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -84940,7 +91560,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_10block_size___get__(struct Py
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/IS.pyx":536
+  /* "PETSc/IS.pyx":550
  *     property block_size:
  *         def __get__(self):
  *             return self.getBlockSize()             # <<<<<<<<<<<<<<
@@ -84948,10 +91568,10 @@ 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_ERR(29, 536, __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, 550, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -84961,10 +91581,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_ERR(29, 536, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 550, __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(29, 536, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 550, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -84972,7 +91592,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_10block_size___get__(struct Py
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":535
+  /* "PETSc/IS.pyx":549
  * 
  *     property block_size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -84993,7 +91613,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_10block_size___get__(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":539
+/* "PETSc/IS.pyx":553
  * 
  *     property indices:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -85022,7 +91642,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_7indices___get__(struct PyPets
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/IS.pyx":540
+  /* "PETSc/IS.pyx":554
  *     property indices:
  *         def __get__(self):
  *             return self.getIndices()             # <<<<<<<<<<<<<<
@@ -85030,10 +91650,10 @@ 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_ERR(29, 540, __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, 554, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -85043,10 +91663,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_ERR(29, 540, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 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_ERR(29, 540, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 554, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -85054,7 +91674,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_7indices___get__(struct PyPets
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":539
+  /* "PETSc/IS.pyx":553
  * 
  *     property indices:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -85075,7 +91695,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_7indices___get__(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":543
+/* "PETSc/IS.pyx":557
  * 
  *     property block_indices:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -85104,7 +91724,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_13block_indices___get__(struct
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/IS.pyx":544
+  /* "PETSc/IS.pyx":558
  *     property block_indices:
  *         def __get__(self):
  *             return self.getBlockIndices()             # <<<<<<<<<<<<<<
@@ -85112,10 +91732,10 @@ 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_ERR(29, 544, __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, 558, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -85125,10 +91745,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_ERR(29, 544, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 558, __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(29, 544, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 558, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -85136,7 +91756,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_13block_indices___get__(struct
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":543
+  /* "PETSc/IS.pyx":557
  * 
  *     property block_indices:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -85157,7 +91777,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_13block_indices___get__(struct
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":547
+/* "PETSc/IS.pyx":561
  * 
  *     property info:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -85186,7 +91806,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4info___get__(struct PyPetscLG
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/IS.pyx":548
+  /* "PETSc/IS.pyx":562
  *     property info:
  *         def __get__(self):
  *             return self.getInfo()             # <<<<<<<<<<<<<<
@@ -85194,10 +91814,10 @@ 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_ERR(29, 548, __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, 562, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -85207,10 +91827,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_ERR(29, 548, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 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_ERR(29, 548, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 562, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -85218,7 +91838,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4info___get__(struct PyPetscLG
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":547
+  /* "PETSc/IS.pyx":561
  * 
  *     property info:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -85239,7 +91859,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_4info___get__(struct PyPetscLG
   return __pyx_r;
 }
 
-/* "PETSc/IS.pyx":551
+/* "PETSc/IS.pyx":565
  * 
  *     property block_info:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -85268,7 +91888,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_10block_info___get__(struct Py
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/IS.pyx":552
+  /* "PETSc/IS.pyx":566
  *     property block_info:
  *         def __get__(self):
  *             return self.getBlockInfo()             # <<<<<<<<<<<<<<
@@ -85276,10 +91896,10 @@ 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_ERR(29, 552, __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, 566, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -85289,10 +91909,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_ERR(29, 552, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 566, __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(29, 552, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 566, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -85300,7 +91920,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_5LGMap_10block_info___get__(struct Py
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/IS.pyx":551
+  /* "PETSc/IS.pyx":565
  * 
  *     property block_info:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -85751,7 +92371,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_12__imul__(struct PyPetscVecObje
  */
 
 /* Python wrapper */
-#if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+#if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_15__idiv__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_15__idiv__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = 0;
@@ -85763,9 +92383,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_15__idiv__(PyObject *__pyx_v_sel
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
-#endif /*!(#if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY)*/
+#endif /*!(#if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000))*/
 
-#if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+#if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
 static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_14__idiv__(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -85804,7 +92424,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_14__idiv__(struct PyPetscVecObje
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
-#endif /*!(#if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY)*/
+#endif /*!(#if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000))*/
 
 /* "PETSc/Vec.pyx":61
  *         return vec_idiv(self, other)
@@ -86175,7 +92795,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_22__mul__(PyObject *__pyx_v_self
  */
 
 /* Python wrapper */
-#if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+#if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_25__div__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_25__div__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = 0;
@@ -86187,9 +92807,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_25__div__(PyObject *__pyx_v_self
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
-#endif /*!(#if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY)*/
+#endif /*!(#if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000))*/
 
-#if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+#if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
 static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_24__div__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -86268,7 +92888,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_24__div__(PyObject *__pyx_v_self
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
-#endif /*!(#if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY)*/
+#endif /*!(#if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000))*/
 
 /* "PETSc/Vec.pyx":90
  *             return vec_rdiv(other, self)
@@ -86464,7 +93084,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_ERR(30, 107, __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 == ((int)-1))) __PYX_ERR(30, 107, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":106
  *         return vec_getitem(self, i)
@@ -86544,7 +93164,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_ERR(30, 113, __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 == ((int)-1))) __PYX_ERR(30, 113, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":111
  *     # buffer interface (PEP 3118)
@@ -86623,7 +93243,7 @@ static void __pyx_pf_8petsc4py_5PETSc_3Vec_34__releasebuffer__(struct PyPetscVec
  *         <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)
+  __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 == ((int)-1))) __PYX_ERR(30, 117, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":118
  *         cdef _Vec_buffer buf = <_Vec_buffer>(view.obj)
@@ -86646,7 +93266,7 @@ static void __pyx_pf_8petsc4py_5PETSc_3Vec_34__releasebuffer__(struct PyPetscVec
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_WriteUnraisable("petsc4py.PETSc.Vec.__releasebuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename, 0, 0);
+  __Pyx_WriteUnraisable("petsc4py.PETSc.Vec.__releasebuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
   __pyx_L0:;
   __Pyx_XDECREF((PyObject *)__pyx_v_buf);
   __Pyx_RefNannyFinishContext();
@@ -86866,6 +93486,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_41view(PyObject *__pyx_v_self, P
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -86883,6 +93504,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_41view(PyObject *__pyx_v_self, P
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -86949,7 +93571,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_40view(struct PyPetscVecObject *
  * 
  *     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_ERR(30, 137, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecView(__pyx_v_self->vec, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(30, 137, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":134
  *     #
@@ -87009,7 +93631,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_42destroy(struct PyPetscVecObjec
  *         return self
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecDestroy((&__pyx_v_self->vec))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 140, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":141
  *     def destroy(self):
@@ -87066,6 +93688,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_45create(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -87083,6 +93706,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_45create(PyObject *__pyx_v_self,
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -87139,7 +93763,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_44create(struct PyPetscVecObject
  *         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_ERR(30, 146, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCreate(__pyx_v_ccomm, (&__pyx_v_newvec))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 146, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":147
  *         cdef PetscVec newvec = NULL
@@ -87205,6 +93829,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_47setType(PyObject *__pyx_v_self
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -87276,7 +93901,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_46setType(struct PyPetscVecObjec
  * 
  *     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_ERR(30, 153, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetType(__pyx_v_self->vec, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 153, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":150
  *         return self
@@ -87326,7 +93951,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_49setSizes(PyObject *__pyx_v_sel
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -87335,6 +93962,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_49setSizes(PyObject *__pyx_v_sel
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_bsize);
@@ -87347,6 +93975,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_49setSizes(PyObject *__pyx_v_sel
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -87398,7 +94027,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_48setSizes(struct PyPetscVecObje
  *         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_ERR(30, 157, __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 == ((int)-1))) __PYX_ERR(30, 157, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":158
  *         cdef PetscInt bs=0, n=0, N=0
@@ -87407,7 +94036,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_48setSizes(struct PyPetscVecObje
  *         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_ERR(30, 158, __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 == ((int)-1))) __PYX_ERR(30, 158, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":159
  *         Vec_Sizes(size, bsize, &bs, &n, &N)
@@ -87426,7 +94055,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_48setSizes(struct PyPetscVecObje
  * 
  *     #
  */
-    __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)
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetBlockSize(__pyx_v_self->vec, __pyx_v_bs)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 160, __pyx_L1_error)
 
     /* "PETSc/Vec.pyx":159
  *         Vec_Sizes(size, bsize, &bs, &n, &N)
@@ -87485,8 +94114,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_51createSeq(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -87495,11 +94127,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_51createSeq(PyObject *__pyx_v_se
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_bsize);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -87512,7 +94146,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_51createSeq(PyObject *__pyx_v_se
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -87578,7 +94214,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_50createSeq(struct PyPetscVecObj
  *         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_ERR(30, 167, __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 == ((int)-1))) __PYX_ERR(30, 167, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":168
  *         cdef PetscInt bs=0, n=0, N=0
@@ -87587,7 +94223,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_50createSeq(struct PyPetscVecObj
  *         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_ERR(30, 168, __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 == ((int)-1))) __PYX_ERR(30, 168, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":169
  *         Vec_Sizes(size, bsize, &bs, &n, &N)
@@ -87617,7 +94253,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_50createSeq(struct PyPetscVecObj
  *         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_ERR(30, 171, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCreate(__pyx_v_ccomm, (&__pyx_v_newvec))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 171, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":172
  *         cdef PetscVec newvec = NULL
@@ -87626,7 +94262,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_50createSeq(struct PyPetscVecObj
  *         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_ERR(30, 172, __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 == ((int)-1))) __PYX_ERR(30, 172, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":173
  *         CHKERR( VecCreate(ccomm,&newvec) )
@@ -87635,7 +94271,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_50createSeq(struct PyPetscVecObj
  *         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_ERR(30, 173, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetBlockSize(__pyx_v_newvec, __pyx_v_bs)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 173, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":174
  *         CHKERR( VecSetSizes(newvec, n, N) )
@@ -87644,7 +94280,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_50createSeq(struct PyPetscVecObj
  *         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_ERR(30, 174, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetType(__pyx_v_newvec, VECSEQ)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 174, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":175
  *         CHKERR( VecSetBlockSize(newvec, bs) )
@@ -87714,8 +94350,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_53createMPI(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -87724,11 +94363,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_53createMPI(PyObject *__pyx_v_se
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_bsize);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -87741,7 +94382,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_53createMPI(PyObject *__pyx_v_se
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -87807,7 +94450,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_52createMPI(struct PyPetscVecObj
  *         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_ERR(30, 181, __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 == ((int)-1))) __PYX_ERR(30, 181, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":182
  *         cdef PetscInt bs=0, n=0, N=0
@@ -87816,7 +94459,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_52createMPI(struct PyPetscVecObj
  *         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_ERR(30, 182, __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 == ((int)-1))) __PYX_ERR(30, 182, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":183
  *         Vec_Sizes(size, bsize, &bs, &n, &N)
@@ -87846,7 +94489,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_52createMPI(struct PyPetscVecObj
  *         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_ERR(30, 185, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCreate(__pyx_v_ccomm, (&__pyx_v_newvec))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 185, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":186
  *         cdef PetscVec newvec = NULL
@@ -87855,7 +94498,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_52createMPI(struct PyPetscVecObj
  *         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_ERR(30, 186, __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 == ((int)-1))) __PYX_ERR(30, 186, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":187
  *         CHKERR( VecCreate(ccomm, &newvec) )
@@ -87864,7 +94507,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_52createMPI(struct PyPetscVecObj
  *         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_ERR(30, 187, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetBlockSize(__pyx_v_newvec, __pyx_v_bs)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 187, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":188
  *         CHKERR( VecSetSizes(newvec, n, N) )
@@ -87873,7 +94516,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_52createMPI(struct PyPetscVecObj
  *         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_ERR(30, 188, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetType(__pyx_v_newvec, VECMPI)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 188, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":189
  *         CHKERR( VecSetBlockSize(newvec, bs) )
@@ -87945,9 +94588,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_55createWithArray(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -87956,16 +94603,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_55createWithArray(PyObject *__py
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_array)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_size);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_bsize);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -87978,8 +94628,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_55createWithArray(PyObject *__py
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -88111,7 +94764,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_54createWithArray(struct PyPetsc
  *         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_ERR(30, 199, __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 == ((int)-1))) __PYX_ERR(30, 199, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":200
  *         cdef PetscInt bs=0, n=0, N=0
@@ -88120,7 +94773,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_54createWithArray(struct PyPetsc
  *         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_ERR(30, 200, __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 == ((int)-1))) __PYX_ERR(30, 200, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":201
  *         Vec_Sizes(size, bsize, &bs, &n, &N)
@@ -88216,7 +94869,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_54createWithArray(struct PyPetsc
  *             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_ERR(30, 206, __pyx_L1_error)
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_comm_size(__pyx_v_ccomm); if (unlikely(__pyx_t_7 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(30, 206, __pyx_L1_error)
   __pyx_t_3 = ((__pyx_t_7 == 1) != 0);
   if (__pyx_t_3) {
 
@@ -88227,7 +94880,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_54createWithArray(struct PyPetsc
  *         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_ERR(30, 207, __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 == ((int)-1))) __PYX_ERR(30, 207, __pyx_L1_error)
 
     /* "PETSc/Vec.pyx":206
  *             (toInt(na), toInt(n), toInt(bs)))
@@ -88247,7 +94900,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_54createWithArray(struct PyPetsc
  *         self.set_attr('__array__', array)
  */
   /*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_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 == ((int)-1))) __PYX_ERR(30, 209, __pyx_L1_error)
   }
   __pyx_L6:;
 
@@ -88337,9 +94990,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_57createGhost(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -88348,16 +95005,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_57createGhost(PyObject *__pyx_v_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ghosts)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(30, 214, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_bsize);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -88370,7 +95030,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_57createGhost(PyObject *__pyx_v_
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -88464,7 +95126,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_56createGhost(struct PyPetscVecO
  *         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_ERR(30, 219, __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 == ((int)-1))) __PYX_ERR(30, 219, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":220
  *         cdef PetscInt bs=0, n=0, N=0
@@ -88473,7 +95135,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_56createGhost(struct PyPetscVecO
  *         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_ERR(30, 220, __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 == ((int)-1))) __PYX_ERR(30, 220, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":221
  *         Vec_Sizes(size, bsize, &bs, &n, &N)
@@ -88501,7 +95163,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_56createGhost(struct PyPetscVecO
  *                     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_ERR(30, 223, __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 == ((int)-1))) __PYX_ERR(30, 223, __pyx_L1_error)
 
     /* "PETSc/Vec.pyx":222
  *         Sys_Layout(ccomm, bs, &n, &N)
@@ -88529,7 +95191,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_56createGhost(struct PyPetscVecO
  *         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_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 == ((int)-1))) __PYX_ERR(30, 226, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -88614,10 +95276,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_59createGhostWithArray(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -88626,21 +95293,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_59createGhostWithArray(PyObject
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ghosts)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(30, 231, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_size);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_bsize);
           if (value) { values[3] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  4:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -88653,8 +95324,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_59createGhostWithArray(PyObject
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -88792,7 +95466,7 @@ 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 == -1L && PyErr_Occurred())) __PYX_ERR(30, 239, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_bsize); if (unlikely(__pyx_t_5 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(30, 239, __pyx_L1_error)
     __pyx_t_3 = __pyx_t_5;
   }
   __pyx_v_b = __pyx_t_3;
@@ -88841,7 +95515,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_58createGhostWithArray(struct Py
  *         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_ERR(30, 242, __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 == ((int)-1))) __PYX_ERR(30, 242, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":243
  *         cdef PetscInt bs=0, n=0, N=0
@@ -88850,7 +95524,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_58createGhostWithArray(struct Py
  *         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_ERR(30, 243, __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 == ((int)-1))) __PYX_ERR(30, 243, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":244
  *         Vec_Sizes(size, bsize, &bs, &n, &N)
@@ -88949,7 +95623,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_58createGhostWithArray(struct Py
  *                     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_ERR(30, 250, __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 == ((int)-1))) __PYX_ERR(30, 250, __pyx_L1_error)
 
     /* "PETSc/Vec.pyx":249
  *             (toInt(ng), toInt(na), toInt(n), toInt(b)))
@@ -88977,7 +95651,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_58createGhostWithArray(struct Py
  *         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_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 == ((int)-1))) __PYX_ERR(30, 253, __pyx_L1_error)
   }
   __pyx_L5:;
 
@@ -89068,8 +95742,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_61createShared(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -89078,11 +95755,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_61createShared(PyObject *__pyx_v
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_bsize);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -89095,7 +95774,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_61createShared(PyObject *__pyx_v
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -89161,7 +95842,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_60createShared(struct PyPetscVec
  *         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_ERR(30, 262, __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 == ((int)-1))) __PYX_ERR(30, 262, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":263
  *         cdef PetscInt bs=0, n=0, N=0
@@ -89170,7 +95851,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_60createShared(struct PyPetscVec
  *         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_ERR(30, 263, __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 == ((int)-1))) __PYX_ERR(30, 263, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":264
  *         Vec_Sizes(size, bsize, &bs, &n, &N)
@@ -89188,7 +95869,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_60createShared(struct PyPetscVec
  *         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_ERR(30, 265, __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 == ((int)-1))) __PYX_ERR(30, 265, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":266
  *         cdef PetscVec newvec = NULL
@@ -89217,7 +95898,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_60createShared(struct PyPetscVec
  *         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_ERR(30, 268, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetBlockSize(__pyx_v_self->vec, __pyx_v_bs)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 268, __pyx_L1_error)
 
     /* "PETSc/Vec.pyx":267
  *         CHKERR( VecCreateShared(ccomm, n, N, &newvec) )
@@ -89286,8 +95967,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_63createNest(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -89296,11 +95980,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_63createNest(PyObject *__pyx_v_s
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vecs)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_isets);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -89313,7 +95999,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_63createNest(PyObject *__pyx_v_s
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -89407,8 +96095,8 @@ 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_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)
+      __pyx_t_3 = PyObject_Length(__pyx_v_isets); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(30, 275, __pyx_L1_error)
+      __pyx_t_4 = PyObject_Length(__pyx_v_vecs); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(30, 275, __pyx_L1_error)
       if (unlikely(!((__pyx_t_3 == __pyx_t_4) != 0))) {
         PyErr_SetNone(PyExc_AssertionError);
         __PYX_ERR(30, 275, __pyx_L1_error)
@@ -89456,7 +96144,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_62createNest(struct PyPetscVecOb
  *         cdef PetscInt n = <PetscInt>m
  *         cdef PetscVec *cvecs  = NULL
  */
-  __pyx_t_4 = PyObject_Length(__pyx_v_vecs); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(30, 279, __pyx_L1_error)
+  __pyx_t_4 = PyObject_Length(__pyx_v_vecs); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(30, 279, __pyx_L1_error)
   __pyx_v_m = __pyx_t_4;
 
   /* "PETSc/Vec.pyx":280
@@ -89586,7 +96274,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_62createNest(struct PyPetscVecOb
  *         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_ERR(30, 290, __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 == ((int)-1))) __PYX_ERR(30, 290, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":291
  *         cdef PetscVec newvec = NULL
@@ -89658,6 +96346,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_65setOptionsPrefix(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -89729,7 +96418,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_64setOptionsPrefix(struct PyPets
  * 
  *     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_ERR(30, 299, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetOptionsPrefix(__pyx_v_self->vec, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 299, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":296
  *     #
@@ -89802,7 +96491,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_66getOptionsPrefix(struct PyPets
  *         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_ERR(30, 303, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetOptionsPrefix(__pyx_v_self->vec, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 303, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":304
  *         cdef const_char *cval = NULL
@@ -89875,7 +96564,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_68setFromOptions(struct PyPetscV
  * 
  *     def setUp(self):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetFromOptions(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 307, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":306
  *         return bytes2str(cval)
@@ -89935,7 +96624,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_70setUp(struct PyPetscVecObject
  *         return self
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetUp(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 310, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":311
  *     def setUp(self):
@@ -89992,7 +96681,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_73setOption(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -90001,6 +96692,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_73setOption(PyObject *__pyx_v_se
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_option)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_flag)) != 0)) kw_args--;
         else {
@@ -90051,7 +96743,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_72setOption(struct PyPetscVecObj
  */
   __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)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetOption(__pyx_v_self->vec, __pyx_t_1, __pyx_t_2)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(30, 314, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":313
  *         return self
@@ -90122,7 +96814,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_74getType(struct PyPetscVecObjec
  *         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_ERR(30, 318, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetType(__pyx_v_self->vec, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 318, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":319
  *         cdef PetscVecType cval = NULL
@@ -90206,7 +96898,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_76getSize(struct PyPetscVecObjec
  *         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_ERR(30, 323, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetSize(__pyx_v_self->vec, (&__pyx_v_N))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 323, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":324
  *         cdef PetscInt N = 0
@@ -90290,7 +96982,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_78getLocalSize(struct PyPetscVec
  *         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_ERR(30, 328, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetLocalSize(__pyx_v_self->vec, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 328, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":329
  *         cdef PetscInt n = 0
@@ -90378,7 +97070,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_80getSizes(struct PyPetscVecObje
  *         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_ERR(30, 333, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetLocalSize(__pyx_v_self->vec, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 333, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":334
  *         cdef PetscInt n = 0, N = 0
@@ -90387,7 +97079,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_80getSizes(struct PyPetscVecObje
  *         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_ERR(30, 334, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetSize(__pyx_v_self->vec, (&__pyx_v_N))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 334, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":335
  *         CHKERR( VecGetLocalSize(self.vec, &n) )
@@ -90458,6 +97150,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_83setBlockSize(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -90507,7 +97200,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_82setBlockSize(struct PyPetscVec
  *         CHKERR( VecSetBlockSize(self.vec, bs) )
  * 
  */
-  __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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_bsize); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(30, 338, __pyx_L1_error)
   __pyx_v_bs = __pyx_t_1;
 
   /* "PETSc/Vec.pyx":339
@@ -90517,7 +97210,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_82setBlockSize(struct PyPetscVec
  * 
  *     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_ERR(30, 339, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetBlockSize(__pyx_v_self->vec, __pyx_v_bs)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 339, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":337
  *         return (toInt(n), toInt(N))
@@ -90588,7 +97281,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_84getBlockSize(struct PyPetscVec
  *         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_ERR(30, 343, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetBlockSize(__pyx_v_self->vec, (&__pyx_v_bs))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 343, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":344
  *         cdef PetscInt bs=0
@@ -90676,7 +97369,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_86getOwnershipRange(struct PyPet
  *         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_ERR(30, 348, __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 == ((int)-1))) __PYX_ERR(30, 348, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":349
  *         cdef PetscInt low=0, high=0
@@ -90774,7 +97467,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_88getOwnershipRanges(struct PyPe
  *         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_ERR(30, 353, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetOwnershipRanges(__pyx_v_self->vec, (&__pyx_v_rng))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 353, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":354
  *         cdef const_PetscInt *rng = NULL
@@ -90792,7 +97485,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_88getOwnershipRanges(struct PyPe
  *         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_ERR(30, 355, __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 == ((int)-1))) __PYX_ERR(30, 355, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":356
  *         cdef MPI_Comm comm = MPI_COMM_NULL
@@ -90810,7 +97503,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_88getOwnershipRanges(struct PyPe
  *         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_ERR(30, 357, __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 == ((int)-1))) __PYX_ERR(30, 357, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":358
  *         cdef int size = -1
@@ -90870,6 +97563,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_91getBuffer(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -90887,6 +97581,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_91getBuffer(PyObject *__pyx_v_se
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -91008,6 +97703,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_93getArray(PyObject *__pyx_v_sel
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -91025,6 +97721,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_93getArray(PyObject *__pyx_v_sel
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -91145,6 +97842,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_95setArray(PyObject *__pyx_v_sel
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -91192,7 +97890,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_94setArray(struct PyPetscVecObje
  * 
  *     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_ERR(30, 373, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_vec_setarray(__pyx_v_self, __pyx_v_array); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 373, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":372
  *             return vec_getarray_w(self)
@@ -91238,6 +97936,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_97placeArray(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -91320,7 +98019,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_96placeArray(struct PyPetscVecOb
  *         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_ERR(30, 379, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetLocalSize(__pyx_v_self->vec, (&__pyx_v_nv))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 379, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":380
  *         cdef PetscScalar *a = NULL
@@ -91402,7 +98101,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_96placeArray(struct PyPetscVecOb
  *         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_ERR(30, 384, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecPlaceArray(__pyx_v_self->vec, __pyx_v_a)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 384, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":385
  *             (toInt(na), toInt(nv)))
@@ -91464,6 +98163,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_99resetArray(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -91481,6 +98181,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_99resetArray(PyObject *__pyx_v_s
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -91567,7 +98268,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_98resetArray(struct PyPetscVecOb
  *         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_ERR(30, 391, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecResetArray(__pyx_v_self->vec)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(30, 391, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":392
  *         if array is None and not force: return None
@@ -91637,6 +98338,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_101getCUDAHandle(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -91654,6 +98356,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_101getCUDAHandle(PyObject *__pyx
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -91752,7 +98455,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_100getCUDAHandle(struct PyPetscV
  *         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)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCUSPGetCUDAArrayReadWrite(__pyx_v_self->vec, (&__pyx_v_hdl))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(30, 400, __pyx_L1_error)
 
     /* "PETSc/Vec.pyx":399
  *         cdef const_char *m = NULL
@@ -91781,7 +98484,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_100getCUDAHandle(struct PyPetscV
  *         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)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCUSPGetCUDAArrayRead(__pyx_v_self->vec, (&__pyx_v_hdl))); if (unlikely(__pyx_t_4 == ((int)-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'):
@@ -91810,7 +98513,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_100getCUDAHandle(struct PyPetscV
  *         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)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCUSPGetCUDAArrayWrite(__pyx_v_self->vec, (&__pyx_v_hdl))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(30, 404, __pyx_L1_error)
 
     /* "PETSc/Vec.pyx":403
  *         elif m[0] == c'r':
@@ -91830,7 +98533,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_100getCUDAHandle(struct PyPetscV
  * 
  */
   /*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_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__55, 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;
@@ -91898,7 +98601,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_103restoreCUDAHandle(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -91907,6 +98612,7 @@ 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;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mode);
@@ -91919,6 +98625,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_103restoreCUDAHandle(PyObject *_
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -91962,7 +98669,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_102restoreCUDAHandle(struct PyPe
  *         cdef const_char *m = NULL
  *         if mode is not None: mode = str2bytes(mode, &m)
  */
-  __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_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":411
@@ -92021,7 +98728,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_102restoreCUDAHandle(struct PyPe
  *         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)
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCUSPRestoreCUDAArrayReadWrite(__pyx_v_self->vec, (&__pyx_v_hdl))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(30, 414, __pyx_L1_error)
 
     /* "PETSc/Vec.pyx":413
  *         cdef const_char *m = NULL
@@ -92050,7 +98757,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_102restoreCUDAHandle(struct PyPe
  *         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)
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCUSPRestoreCUDAArrayRead(__pyx_v_self->vec, (&__pyx_v_hdl))); if (unlikely(__pyx_t_5 == ((int)-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'):
@@ -92079,7 +98786,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_102restoreCUDAHandle(struct PyPe
  *         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)
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCUSPRestoreCUDAArrayWrite(__pyx_v_self->vec, (&__pyx_v_hdl))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(30, 418, __pyx_L1_error)
 
     /* "PETSc/Vec.pyx":417
  *         elif m[0] == c'r':
@@ -92099,7 +98806,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_102restoreCUDAHandle(struct PyPe
  *     def duplicate(self, array=None):
  */
   /*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_t_4 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__56, 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;
@@ -92154,6 +98861,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_105duplicate(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -92171,6 +98879,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_105duplicate(PyObject *__pyx_v_s
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -92213,7 +98922,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_104duplicate(struct PyPetscVecOb
  */
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -92241,7 +98950,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_104duplicate(struct PyPetscVecOb
  *         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_ERR(30, 424, __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 == ((int)-1))) __PYX_ERR(30, 424, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":425
  *         cdef Vec vec = type(self)()
@@ -92261,7 +98970,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_104duplicate(struct PyPetscVecOb
  *         return vec
  * 
  */
-    __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)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_vec_setarray(__pyx_v_vec, __pyx_v_array); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(30, 426, __pyx_L1_error)
 
     /* "PETSc/Vec.pyx":425
  *         cdef Vec vec = type(self)()
@@ -92331,6 +99040,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_107copy(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -92348,6 +99058,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_107copy(PyObject *__pyx_v_self,
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -92406,7 +99117,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_106copy(struct PyPetscVecObject
  */
     __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
     __pyx_t_4 = ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))); __pyx_t_5 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_4))) {
       __pyx_t_5 = PyMethod_GET_SELF(__pyx_t_4);
       if (likely(__pyx_t_5)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_4);
@@ -92453,7 +99164,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_106copy(struct PyPetscVecObject
  *         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_ERR(30, 433, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecDuplicate(__pyx_v_self->vec, (&__pyx_v_result->vec))); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(30, 433, __pyx_L1_error)
 
     /* "PETSc/Vec.pyx":432
  *         if result is None:
@@ -92471,7 +99182,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_106copy(struct PyPetscVecObject
  *         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_ERR(30, 434, __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 == ((int)-1))) __PYX_ERR(30, 434, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":435
  *             CHKERR( VecDuplicate(self.vec, &result.vec) )
@@ -92531,6 +99242,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_109chop(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -92580,7 +99292,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_108chop(struct PyPetscVecObject
  *         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_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_tol); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(30, 438, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_1;
 
   /* "PETSc/Vec.pyx":439
@@ -92588,9 +99300,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_108chop(struct PyPetscVecObject
  *         cdef PetscReal rval = asReal(tol)
  *         CHKERR( VecChop(self.vec, rval) )             # <<<<<<<<<<<<<<
  * 
- *     def load(self, Viewer viewer not None):
+ *     def load(self, Viewer viewer):
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecChop(__pyx_v_self->vec, __pyx_v_rval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 439, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":437
  *         return result
@@ -92615,7 +99327,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_108chop(struct PyPetscVecObject
 /* "PETSc/Vec.pyx":441
  *         CHKERR( VecChop(self.vec, rval) )
  * 
- *     def load(self, Viewer viewer not None):             # <<<<<<<<<<<<<<
+ *     def load(self, Viewer viewer):             # <<<<<<<<<<<<<<
  *         cdef MPI_Comm comm = MPI_COMM_NULL
  *         cdef PetscObject obj = <PetscObject>(viewer.vwr)
  */
@@ -92636,6 +99348,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_111load(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -92686,7 +99399,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_110load(struct PyPetscVecObject
 
   /* "PETSc/Vec.pyx":442
  * 
- *     def load(self, Viewer viewer not None):
+ *     def load(self, Viewer viewer):
  *         cdef MPI_Comm comm = MPI_COMM_NULL             # <<<<<<<<<<<<<<
  *         cdef PetscObject obj = <PetscObject>(viewer.vwr)
  *         if self.vec == NULL:
@@ -92694,7 +99407,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_110load(struct PyPetscVecObject
   __pyx_v_comm = MPI_COMM_NULL;
 
   /* "PETSc/Vec.pyx":443
- *     def load(self, Viewer viewer not None):
+ *     def load(self, Viewer viewer):
  *         cdef MPI_Comm comm = MPI_COMM_NULL
  *         cdef PetscObject obj = <PetscObject>(viewer.vwr)             # <<<<<<<<<<<<<<
  *         if self.vec == NULL:
@@ -92719,7 +99432,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_110load(struct PyPetscVecObject
  *             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_ERR(30, 445, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetComm(__pyx_v_obj, (&__pyx_v_comm))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 445, __pyx_L1_error)
 
     /* "PETSc/Vec.pyx":446
  *         if self.vec == NULL:
@@ -92728,7 +99441,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_110load(struct PyPetscVecObject
  *         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_ERR(30, 446, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCreate(__pyx_v_comm, (&__pyx_v_self->vec))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 446, __pyx_L1_error)
 
     /* "PETSc/Vec.pyx":444
  *         cdef MPI_Comm comm = MPI_COMM_NULL
@@ -92746,14 +99459,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_110load(struct PyPetscVecObject
  *         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_ERR(30, 447, __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 == ((int)-1))) __PYX_ERR(30, 447, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":448
  *             CHKERR( VecCreate(comm, &self.vec) )
  *         CHKERR( VecLoad(self.vec, viewer.vwr) )
  *         return self             # <<<<<<<<<<<<<<
  * 
- *     def equal(self, Vec vec not None):
+ *     def equal(self, Vec vec):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
@@ -92763,7 +99476,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_110load(struct PyPetscVecObject
   /* "PETSc/Vec.pyx":441
  *         CHKERR( VecChop(self.vec, rval) )
  * 
- *     def load(self, Viewer viewer not None):             # <<<<<<<<<<<<<<
+ *     def load(self, Viewer viewer):             # <<<<<<<<<<<<<<
  *         cdef MPI_Comm comm = MPI_COMM_NULL
  *         cdef PetscObject obj = <PetscObject>(viewer.vwr)
  */
@@ -92781,7 +99494,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_110load(struct PyPetscVecObject
 /* "PETSc/Vec.pyx":450
  *         return self
  * 
- *     def equal(self, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def equal(self, Vec vec):             # <<<<<<<<<<<<<<
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( VecEqual(self.vec, vec.vec, &flag) )
  */
@@ -92802,6 +99515,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_113equal(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -92851,31 +99565,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_112equal(struct PyPetscVecObject
 
   /* "PETSc/Vec.pyx":451
  * 
- *     def equal(self, Vec vec not None):
+ *     def equal(self, Vec vec):
  *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
  *         CHKERR( VecEqual(self.vec, vec.vec, &flag) )
- *         return <bint> flag
+ *         return toBool(flag)
  */
   __pyx_v_flag = PETSC_FALSE;
 
   /* "PETSc/Vec.pyx":452
- *     def equal(self, Vec vec not None):
+ *     def equal(self, Vec vec):
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( VecEqual(self.vec, vec.vec, &flag) )             # <<<<<<<<<<<<<<
- *         return <bint> flag
+ *         return toBool(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_ERR(30, 452, __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 == ((int)-1))) __PYX_ERR(30, 452, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":453
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( VecEqual(self.vec, vec.vec, &flag) )
- *         return <bint> flag             # <<<<<<<<<<<<<<
+ *         return toBool(flag)             # <<<<<<<<<<<<<<
  * 
- *     def dot(self, Vec vec not None):
+ *     def dot(self, Vec vec):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 453, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toBool(__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;
@@ -92884,7 +99598,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_112equal(struct PyPetscVecObject
   /* "PETSc/Vec.pyx":450
  *         return self
  * 
- *     def equal(self, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def equal(self, Vec vec):             # <<<<<<<<<<<<<<
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( VecEqual(self.vec, vec.vec, &flag) )
  */
@@ -92901,9 +99615,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_112equal(struct PyPetscVecObject
 }
 
 /* "PETSc/Vec.pyx":455
- *         return <bint> flag
+ *         return toBool(flag)
  * 
- *     def dot(self, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def dot(self, Vec vec):             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecDot(self.vec, vec.vec, &sval) )
  */
@@ -92924,6 +99638,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_115dot(PyObject *__pyx_v_self, P
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -92973,7 +99688,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_114dot(struct PyPetscVecObject *
 
   /* "PETSc/Vec.pyx":456
  * 
- *     def dot(self, Vec vec not None):
+ *     def dot(self, Vec vec):
  *         cdef PetscScalar sval = 0             # <<<<<<<<<<<<<<
  *         CHKERR( VecDot(self.vec, vec.vec, &sval) )
  *         return toScalar(sval)
@@ -92981,20 +99696,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_114dot(struct PyPetscVecObject *
   __pyx_v_sval = 0.0;
 
   /* "PETSc/Vec.pyx":457
- *     def dot(self, Vec vec not None):
+ *     def dot(self, Vec vec):
  *         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_ERR(30, 457, __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 == ((int)-1))) __PYX_ERR(30, 457, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":458
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecDot(self.vec, vec.vec, &sval) )
  *         return toScalar(sval)             # <<<<<<<<<<<<<<
  * 
- *     def dotBegin(self, Vec vec not None):
+ *     def dotBegin(self, Vec vec):
  */
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 458, __pyx_L1_error)
@@ -93004,9 +99719,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_114dot(struct PyPetscVecObject *
   goto __pyx_L0;
 
   /* "PETSc/Vec.pyx":455
- *         return <bint> flag
+ *         return toBool(flag)
  * 
- *     def dot(self, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def dot(self, Vec vec):             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecDot(self.vec, vec.vec, &sval) )
  */
@@ -93025,7 +99740,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_114dot(struct PyPetscVecObject *
 /* "PETSc/Vec.pyx":460
  *         return toScalar(sval)
  * 
- *     def dotBegin(self, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def dotBegin(self, Vec vec):             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecDotBegin(self.vec, vec.vec, &sval) )
  */
@@ -93046,6 +99761,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_117dotBegin(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -93094,7 +99810,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_116dotBegin(struct PyPetscVecObj
 
   /* "PETSc/Vec.pyx":461
  * 
- *     def dotBegin(self, Vec vec not None):
+ *     def dotBegin(self, Vec vec):
  *         cdef PetscScalar sval = 0             # <<<<<<<<<<<<<<
  *         CHKERR( VecDotBegin(self.vec, vec.vec, &sval) )
  * 
@@ -93102,18 +99818,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_116dotBegin(struct PyPetscVecObj
   __pyx_v_sval = 0.0;
 
   /* "PETSc/Vec.pyx":462
- *     def dotBegin(self, Vec vec not None):
+ *     def dotBegin(self, Vec vec):
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecDotBegin(self.vec, vec.vec, &sval) )             # <<<<<<<<<<<<<<
  * 
- *     def dotEnd(self, Vec vec not None):
+ *     def dotEnd(self, Vec vec):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(30, 462, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":460
  *         return toScalar(sval)
  * 
- *     def dotBegin(self, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def dotBegin(self, Vec vec):             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecDotBegin(self.vec, vec.vec, &sval) )
  */
@@ -93133,7 +99849,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_116dotBegin(struct PyPetscVecObj
 /* "PETSc/Vec.pyx":464
  *         CHKERR( VecDotBegin(self.vec, vec.vec, &sval) )
  * 
- *     def dotEnd(self, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def dotEnd(self, Vec vec):             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecDotEnd(self.vec, vec.vec, &sval) )
  */
@@ -93154,6 +99870,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_119dotEnd(PyObject *__pyx_v_self
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -93203,7 +99920,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_118dotEnd(struct PyPetscVecObjec
 
   /* "PETSc/Vec.pyx":465
  * 
- *     def dotEnd(self, Vec vec not None):
+ *     def dotEnd(self, Vec vec):
  *         cdef PetscScalar sval = 0             # <<<<<<<<<<<<<<
  *         CHKERR( VecDotEnd(self.vec, vec.vec, &sval) )
  *         return toScalar(sval)
@@ -93211,20 +99928,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_118dotEnd(struct PyPetscVecObjec
   __pyx_v_sval = 0.0;
 
   /* "PETSc/Vec.pyx":466
- *     def dotEnd(self, Vec vec not None):
+ *     def dotEnd(self, Vec vec):
  *         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_ERR(30, 466, __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 == ((int)-1))) __PYX_ERR(30, 466, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":467
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecDotEnd(self.vec, vec.vec, &sval) )
  *         return toScalar(sval)             # <<<<<<<<<<<<<<
  * 
- *     def tDot(self, Vec vec not None):
+ *     def tDot(self, Vec vec):
  */
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 467, __pyx_L1_error)
@@ -93236,7 +99953,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_118dotEnd(struct PyPetscVecObjec
   /* "PETSc/Vec.pyx":464
  *         CHKERR( VecDotBegin(self.vec, vec.vec, &sval) )
  * 
- *     def dotEnd(self, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def dotEnd(self, Vec vec):             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecDotEnd(self.vec, vec.vec, &sval) )
  */
@@ -93255,7 +99972,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_118dotEnd(struct PyPetscVecObjec
 /* "PETSc/Vec.pyx":469
  *         return toScalar(sval)
  * 
- *     def tDot(self, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def tDot(self, Vec vec):             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecTDot(self.vec, vec.vec, &sval) )
  */
@@ -93276,6 +99993,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_121tDot(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -93325,7 +100043,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_120tDot(struct PyPetscVecObject
 
   /* "PETSc/Vec.pyx":470
  * 
- *     def tDot(self, Vec vec not None):
+ *     def tDot(self, Vec vec):
  *         cdef PetscScalar sval = 0             # <<<<<<<<<<<<<<
  *         CHKERR( VecTDot(self.vec, vec.vec, &sval) )
  *         return toScalar(sval)
@@ -93333,20 +100051,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_120tDot(struct PyPetscVecObject
   __pyx_v_sval = 0.0;
 
   /* "PETSc/Vec.pyx":471
- *     def tDot(self, Vec vec not None):
+ *     def tDot(self, Vec vec):
  *         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_ERR(30, 471, __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 == ((int)-1))) __PYX_ERR(30, 471, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":472
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecTDot(self.vec, vec.vec, &sval) )
  *         return toScalar(sval)             # <<<<<<<<<<<<<<
  * 
- *     def tDotBegin(self, Vec vec not None):
+ *     def tDotBegin(self, Vec vec):
  */
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 472, __pyx_L1_error)
@@ -93358,7 +100076,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_120tDot(struct PyPetscVecObject
   /* "PETSc/Vec.pyx":469
  *         return toScalar(sval)
  * 
- *     def tDot(self, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def tDot(self, Vec vec):             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecTDot(self.vec, vec.vec, &sval) )
  */
@@ -93377,7 +100095,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_120tDot(struct PyPetscVecObject
 /* "PETSc/Vec.pyx":474
  *         return toScalar(sval)
  * 
- *     def tDotBegin(self, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def tDotBegin(self, Vec vec):             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecTDotBegin(self.vec, vec.vec, &sval) )
  */
@@ -93398,6 +100116,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_123tDotBegin(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -93446,7 +100165,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_122tDotBegin(struct PyPetscVecOb
 
   /* "PETSc/Vec.pyx":475
  * 
- *     def tDotBegin(self, Vec vec not None):
+ *     def tDotBegin(self, Vec vec):
  *         cdef PetscScalar sval = 0             # <<<<<<<<<<<<<<
  *         CHKERR( VecTDotBegin(self.vec, vec.vec, &sval) )
  * 
@@ -93454,18 +100173,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_122tDotBegin(struct PyPetscVecOb
   __pyx_v_sval = 0.0;
 
   /* "PETSc/Vec.pyx":476
- *     def tDotBegin(self, Vec vec not None):
+ *     def tDotBegin(self, Vec vec):
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecTDotBegin(self.vec, vec.vec, &sval) )             # <<<<<<<<<<<<<<
  * 
- *     def tDotEnd(self, Vec vec not None):
+ *     def tDotEnd(self, Vec vec):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(30, 476, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":474
  *         return toScalar(sval)
  * 
- *     def tDotBegin(self, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def tDotBegin(self, Vec vec):             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecTDotBegin(self.vec, vec.vec, &sval) )
  */
@@ -93485,7 +100204,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_122tDotBegin(struct PyPetscVecOb
 /* "PETSc/Vec.pyx":478
  *         CHKERR( VecTDotBegin(self.vec, vec.vec, &sval) )
  * 
- *     def tDotEnd(self, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def tDotEnd(self, Vec vec):             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecTDotEnd(self.vec, vec.vec, &sval) )
  */
@@ -93506,6 +100225,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_125tDotEnd(PyObject *__pyx_v_sel
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -93555,7 +100275,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_124tDotEnd(struct PyPetscVecObje
 
   /* "PETSc/Vec.pyx":479
  * 
- *     def tDotEnd(self, Vec vec not None):
+ *     def tDotEnd(self, Vec vec):
  *         cdef PetscScalar sval = 0             # <<<<<<<<<<<<<<
  *         CHKERR( VecTDotEnd(self.vec, vec.vec, &sval) )
  *         return toScalar(sval)
@@ -93563,13 +100283,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_124tDotEnd(struct PyPetscVecObje
   __pyx_v_sval = 0.0;
 
   /* "PETSc/Vec.pyx":480
- *     def tDotEnd(self, Vec vec not None):
+ *     def tDotEnd(self, Vec vec):
  *         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_ERR(30, 480, __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 == ((int)-1))) __PYX_ERR(30, 480, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":481
  *         cdef PetscScalar sval = 0
@@ -93588,7 +100308,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_124tDotEnd(struct PyPetscVecObje
   /* "PETSc/Vec.pyx":478
  *         CHKERR( VecTDotBegin(self.vec, vec.vec, &sval) )
  * 
- *     def tDotEnd(self, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def tDotEnd(self, Vec vec):             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecTDotEnd(self.vec, vec.vec, &sval) )
  */
@@ -93630,7 +100350,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_127mDot(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -93639,6 +100361,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_127mDot(PyObject *__pyx_v_self,
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vecs)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_out);
@@ -93651,6 +100374,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_127mDot(PyObject *__pyx_v_self,
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -93743,7 +100467,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_129mDotBegin(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -93752,6 +100478,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_129mDotBegin(PyObject *__pyx_v_s
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vecs)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_out);
@@ -93764,6 +100491,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_129mDotBegin(PyObject *__pyx_v_s
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -93856,7 +100584,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_131mDotEnd(PyObject *__pyx_v_sel
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -93865,6 +100595,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_131mDotEnd(PyObject *__pyx_v_sel
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vecs)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_out);
@@ -93877,6 +100608,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_131mDotEnd(PyObject *__pyx_v_sel
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -93969,7 +100701,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_133mtDot(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -93978,6 +100712,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_133mtDot(PyObject *__pyx_v_self,
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vecs)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_out);
@@ -93990,6 +100725,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_133mtDot(PyObject *__pyx_v_self,
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -94082,7 +100818,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_135mtDotBegin(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -94091,6 +100829,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_135mtDotBegin(PyObject *__pyx_v_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vecs)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_out);
@@ -94103,6 +100842,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_135mtDotBegin(PyObject *__pyx_v_
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -94195,7 +100935,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_137mtDotEnd(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -94204,6 +100946,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_137mtDotEnd(PyObject *__pyx_v_se
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vecs)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_out);
@@ -94216,6 +100959,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_137mtDotEnd(PyObject *__pyx_v_se
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -94307,6 +101051,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_139norm(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -94324,6 +101069,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_139norm(PyObject *__pyx_v_self,
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -94399,7 +101145,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_138norm(struct PyPetscVecObject
  *         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_ERR(30, 512, __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 == ((int)-1))) __PYX_ERR(30, 512, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":513
  *         cdef PetscReal rval[2]
@@ -94490,6 +101236,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_141normBegin(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -94507,6 +101254,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_141normBegin(PyObject *__pyx_v_s
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -94569,7 +101317,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_140normBegin(struct PyPetscVecOb
  * 
  *     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_ERR(30, 520, __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 == ((int)-1))) __PYX_ERR(30, 520, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":516
  *         else: return (toReal(rval[0]), toReal(rval[1]))
@@ -94616,6 +101364,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_143normEnd(PyObject *__pyx_v_sel
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -94633,6 +101382,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_143normEnd(PyObject *__pyx_v_sel
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -94708,7 +101458,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_142normEnd(struct PyPetscVecObje
  *         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_ERR(30, 527, __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 == ((int)-1))) __PYX_ERR(30, 527, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":528
  *         cdef PetscReal rval[2]
@@ -94823,7 +101573,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_144sum(struct PyPetscVecObject *
  *         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_ERR(30, 533, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSum(__pyx_v_self->vec, (&__pyx_v_sval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 533, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":534
  *         cdef PetscScalar sval = 0
@@ -94919,7 +101669,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_146min(struct PyPetscVecObject *
  *         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_ERR(30, 539, __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 == ((int)-1))) __PYX_ERR(30, 539, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":540
  *         cdef PetscReal rval = 0
@@ -95027,7 +101777,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_148max(struct PyPetscVecObject *
  *         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_ERR(30, 545, __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 == ((int)-1))) __PYX_ERR(30, 545, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":546
  *         cdef PetscReal rval = 0
@@ -95123,7 +101873,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_150normalize(struct PyPetscVecOb
  *         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_ERR(30, 550, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecNormalize(__pyx_v_self->vec, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 550, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":551
  *         cdef PetscReal rval = 0
@@ -95196,7 +101946,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_152reciprocal(struct PyPetscVecO
  * 
  *     def exp(self):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecReciprocal(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 554, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":553
  *         return toReal(rval)
@@ -95256,7 +102006,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_154exp(struct PyPetscVecObject *
  * 
  *     def log(self):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecExp(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 557, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":556
  *         CHKERR( VecReciprocal(self.vec) )
@@ -95316,7 +102066,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_156log(struct PyPetscVecObject *
  * 
  *     def sqrtabs(self):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecLog(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 560, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":559
  *         CHKERR( VecExp(self.vec) )
@@ -95376,7 +102126,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_158sqrtabs(struct PyPetscVecObje
  * 
  *     def abs(self):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSqrtAbs(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 563, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":562
  *         CHKERR( VecLog(self.vec) )
@@ -95436,7 +102186,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_160abs(struct PyPetscVecObject *
  * 
  *     def conjugate(self):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAbs(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 566, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":565
  *         CHKERR( VecSqrtAbs(self.vec) )
@@ -95496,7 +102246,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_162conjugate(struct PyPetscVecOb
  * 
  *     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_ERR(30, 569, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecConjugate(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 569, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":568
  *         CHKERR( VecAbs(self.vec) )
@@ -95543,6 +102293,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_165setRandom(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -95560,6 +102311,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_165setRandom(PyObject *__pyx_v_s
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -95624,9 +102376,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_164setRandom(struct PyPetscVecOb
  *         if random is not None: rnd = random.rnd
  *         CHKERR( VecSetRandom(self.vec, rnd) )             # <<<<<<<<<<<<<<
  * 
- *     def permute(self, IS order not None, invert=False):
+ *     def permute(self, IS order, 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_ERR(30, 574, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetRandom(__pyx_v_self->vec, __pyx_v_rnd)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(30, 574, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":571
  *         CHKERR( VecConjugate(self.vec) )
@@ -95651,7 +102403,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_164setRandom(struct PyPetscVecOb
 /* "PETSc/Vec.pyx":576
  *         CHKERR( VecSetRandom(self.vec, rnd) )
  * 
- *     def permute(self, IS order not None, invert=False):             # <<<<<<<<<<<<<<
+ *     def permute(self, IS order, invert=False):             # <<<<<<<<<<<<<<
  *         cdef PetscBool cinvert = PETSC_FALSE
  *         if invert: cinvert = PETSC_TRUE
  */
@@ -95674,7 +102426,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_167permute(PyObject *__pyx_v_sel
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -95683,6 +102437,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_167permute(PyObject *__pyx_v_sel
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_order)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_invert);
@@ -95695,6 +102450,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_167permute(PyObject *__pyx_v_sel
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -95733,7 +102489,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_166permute(struct PyPetscVecObje
 
   /* "PETSc/Vec.pyx":577
  * 
- *     def permute(self, IS order not None, invert=False):
+ *     def permute(self, IS order, invert=False):
  *         cdef PetscBool cinvert = PETSC_FALSE             # <<<<<<<<<<<<<<
  *         if invert: cinvert = PETSC_TRUE
  *         CHKERR( VecPermute(self.vec, order.iset, cinvert) )
@@ -95741,7 +102497,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_166permute(struct PyPetscVecObje
   __pyx_v_cinvert = PETSC_FALSE;
 
   /* "PETSc/Vec.pyx":578
- *     def permute(self, IS order not None, invert=False):
+ *     def permute(self, IS order, invert=False):
  *         cdef PetscBool cinvert = PETSC_FALSE
  *         if invert: cinvert = PETSC_TRUE             # <<<<<<<<<<<<<<
  *         CHKERR( VecPermute(self.vec, order.iset, cinvert) )
@@ -95759,12 +102515,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_166permute(struct PyPetscVecObje
  * 
  *     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_ERR(30, 579, __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 == ((int)-1))) __PYX_ERR(30, 579, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":576
  *         CHKERR( VecSetRandom(self.vec, rnd) )
  * 
- *     def permute(self, IS order not None, invert=False):             # <<<<<<<<<<<<<<
+ *     def permute(self, IS order, invert=False):             # <<<<<<<<<<<<<<
  *         cdef PetscBool cinvert = PETSC_FALSE
  *         if invert: cinvert = PETSC_TRUE
  */
@@ -95819,7 +102575,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_168zeroEntries(struct PyPetscVec
  * 
  *     def set(self, alpha):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecZeroEntries(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 582, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":581
  *         CHKERR( VecPermute(self.vec, order.iset, cinvert) )
@@ -95865,6 +102621,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_171set(PyObject *__pyx_v_self, P
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -95914,7 +102671,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_170set(struct PyPetscVecObject *
  *         CHKERR( VecSet(self.vec, sval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 585, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(__pyx_t_1 == ((PetscScalar)((PetscScalar)(-1.0))) && PyErr_Occurred())) __PYX_ERR(30, 585, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_1;
 
   /* "PETSc/Vec.pyx":586
@@ -95922,9 +102679,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_170set(struct PyPetscVecObject *
  *         cdef PetscScalar sval = asScalar(alpha)
  *         CHKERR( VecSet(self.vec, sval) )             # <<<<<<<<<<<<<<
  * 
- *     def isset(self, IS idx not None, alpha):
+ *     def isset(self, IS idx, alpha):
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSet(__pyx_v_self->vec, __pyx_v_sval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 586, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":584
  *         CHKERR( VecZeroEntries(self.vec) )
@@ -95949,7 +102706,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_170set(struct PyPetscVecObject *
 /* "PETSc/Vec.pyx":588
  *         CHKERR( VecSet(self.vec, sval) )
  * 
- *     def isset(self, IS idx not None, alpha):             # <<<<<<<<<<<<<<
+ *     def isset(self, IS idx, alpha):             # <<<<<<<<<<<<<<
  *         cdef PetscScalar aval = asScalar(alpha)
  *         CHKERR( VecISSet(self.vec, idx.iset, aval) )
  */
@@ -95971,7 +102728,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_173isset(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -95980,6 +102739,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_173isset(PyObject *__pyx_v_self,
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_idx)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_alpha)) != 0)) kw_args--;
         else {
@@ -96028,27 +102788,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_172isset(struct PyPetscVecObject
 
   /* "PETSc/Vec.pyx":589
  * 
- *     def isset(self, IS idx not None, alpha):
+ *     def isset(self, IS idx, 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_ERR(30, 589, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(__pyx_t_1 == ((PetscScalar)((PetscScalar)(-1.0))) && PyErr_Occurred())) __PYX_ERR(30, 589, __pyx_L1_error)
   __pyx_v_aval = __pyx_t_1;
 
   /* "PETSc/Vec.pyx":590
- *     def isset(self, IS idx not None, alpha):
+ *     def isset(self, IS idx, 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_ERR(30, 590, __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 == ((int)-1))) __PYX_ERR(30, 590, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":588
  *         CHKERR( VecSet(self.vec, sval) )
  * 
- *     def isset(self, IS idx not None, alpha):             # <<<<<<<<<<<<<<
+ *     def isset(self, IS idx, alpha):             # <<<<<<<<<<<<<<
  *         cdef PetscScalar aval = asScalar(alpha)
  *         CHKERR( VecISSet(self.vec, idx.iset, aval) )
  */
@@ -96089,6 +102849,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_175scale(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -96138,7 +102899,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_174scale(struct PyPetscVecObject
  *         CHKERR( VecScale(self.vec, sval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 593, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(__pyx_t_1 == ((PetscScalar)((PetscScalar)(-1.0))) && PyErr_Occurred())) __PYX_ERR(30, 593, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_1;
 
   /* "PETSc/Vec.pyx":594
@@ -96148,7 +102909,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_174scale(struct PyPetscVecObject
  * 
  *     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_ERR(30, 594, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScale(__pyx_v_self->vec, __pyx_v_sval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 594, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":592
  *         CHKERR( VecISSet(self.vec, idx.iset, aval) )
@@ -96194,6 +102955,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_177shift(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -96243,7 +103005,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_176shift(struct PyPetscVecObject
  *         CHKERR( VecShift(self.vec, sval) )
  * 
  */
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 597, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(__pyx_t_1 == ((PetscScalar)((PetscScalar)(-1.0))) && PyErr_Occurred())) __PYX_ERR(30, 597, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_1;
 
   /* "PETSc/Vec.pyx":598
@@ -96253,7 +103015,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_176shift(struct PyPetscVecObject
  * 
  *     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_ERR(30, 598, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecShift(__pyx_v_self->vec, __pyx_v_sval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 598, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":596
  *         CHKERR( VecScale(self.vec, sval) )
@@ -96299,6 +103061,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_179chop(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -96348,7 +103111,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_178chop(struct PyPetscVecObject
  *         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_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_tol); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(30, 601, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_1;
 
   /* "PETSc/Vec.pyx":602
@@ -96356,9 +103119,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_178chop(struct PyPetscVecObject
  *         cdef PetscReal rval = asReal(tol)
  *         CHKERR( VecChop(self.vec, rval) )             # <<<<<<<<<<<<<<
  * 
- *     def swap(self, Vec vec not None):
+ *     def swap(self, Vec vec):
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecChop(__pyx_v_self->vec, __pyx_v_rval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 602, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":600
  *         CHKERR( VecShift(self.vec, sval) )
@@ -96383,7 +103146,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_178chop(struct PyPetscVecObject
 /* "PETSc/Vec.pyx":604
  *         CHKERR( VecChop(self.vec, rval) )
  * 
- *     def swap(self, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def swap(self, Vec vec):             # <<<<<<<<<<<<<<
  *         CHKERR( VecSwap(self.vec, vec.vec) )
  * 
  */
@@ -96404,6 +103167,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_181swap(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -96451,17 +103215,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_180swap(struct PyPetscVecObject
 
   /* "PETSc/Vec.pyx":605
  * 
- *     def swap(self, Vec vec not None):
+ *     def swap(self, Vec vec):
  *         CHKERR( VecSwap(self.vec, vec.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def axpy(self, alpha, Vec x not None):
+ *     def axpy(self, alpha, Vec x):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSwap(__pyx_v_self->vec, __pyx_v_vec->vec)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 605, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":604
  *         CHKERR( VecChop(self.vec, rval) )
  * 
- *     def swap(self, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def swap(self, Vec vec):             # <<<<<<<<<<<<<<
  *         CHKERR( VecSwap(self.vec, vec.vec) )
  * 
  */
@@ -96481,7 +103245,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_180swap(struct PyPetscVecObject
 /* "PETSc/Vec.pyx":607
  *         CHKERR( VecSwap(self.vec, vec.vec) )
  * 
- *     def axpy(self, alpha, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def axpy(self, alpha, Vec x):             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval = asScalar(alpha)
  *         CHKERR( VecAXPY(self.vec, sval, x.vec) )
  */
@@ -96503,7 +103267,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_183axpy(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -96512,6 +103278,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_183axpy(PyObject *__pyx_v_self,
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_alpha)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else {
@@ -96560,27 +103327,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_182axpy(struct PyPetscVecObject
 
   /* "PETSc/Vec.pyx":608
  * 
- *     def axpy(self, alpha, Vec x not None):
+ *     def axpy(self, alpha, Vec x):
  *         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_ERR(30, 608, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(__pyx_t_1 == ((PetscScalar)((PetscScalar)(-1.0))) && PyErr_Occurred())) __PYX_ERR(30, 608, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_1;
 
   /* "PETSc/Vec.pyx":609
- *     def axpy(self, alpha, Vec x not None):
+ *     def axpy(self, alpha, Vec x):
  *         cdef PetscScalar sval = asScalar(alpha)
  *         CHKERR( VecAXPY(self.vec, sval, x.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def isaxpy(self, IS idx not None, alpha, Vec x not None):
+ *     def isaxpy(self, IS idx, alpha, Vec x):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(30, 609, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":607
  *         CHKERR( VecSwap(self.vec, vec.vec) )
  * 
- *     def axpy(self, alpha, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def axpy(self, alpha, Vec x):             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval = asScalar(alpha)
  *         CHKERR( VecAXPY(self.vec, sval, x.vec) )
  */
@@ -96600,7 +103367,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_182axpy(struct PyPetscVecObject
 /* "PETSc/Vec.pyx":611
  *         CHKERR( VecAXPY(self.vec, sval, x.vec) )
  * 
- *     def isaxpy(self, IS idx not None, alpha, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def isaxpy(self, IS idx, alpha, Vec x):             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval = asScalar(alpha)
  *         CHKERR( VecISAXPY(self.vec, idx.iset, sval, x.vec) )
  */
@@ -96623,8 +103390,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_185isaxpy(PyObject *__pyx_v_self
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -96633,11 +103403,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_185isaxpy(PyObject *__pyx_v_self
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_idx)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(30, 611, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else {
@@ -96689,27 +103461,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_184isaxpy(struct PyPetscVecObjec
 
   /* "PETSc/Vec.pyx":612
  * 
- *     def isaxpy(self, IS idx not None, alpha, Vec x not None):
+ *     def isaxpy(self, IS idx, alpha, Vec x):
  *         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_ERR(30, 612, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(__pyx_t_1 == ((PetscScalar)((PetscScalar)(-1.0))) && PyErr_Occurred())) __PYX_ERR(30, 612, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_1;
 
   /* "PETSc/Vec.pyx":613
- *     def isaxpy(self, IS idx not None, alpha, Vec x not None):
+ *     def isaxpy(self, IS idx, alpha, Vec x):
  *         cdef PetscScalar sval = asScalar(alpha)
  *         CHKERR( VecISAXPY(self.vec, idx.iset, sval, x.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def aypx(self, alpha, Vec x not None):
+ *     def aypx(self, alpha, Vec x):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(30, 613, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":611
  *         CHKERR( VecAXPY(self.vec, sval, x.vec) )
  * 
- *     def isaxpy(self, IS idx not None, alpha, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def isaxpy(self, IS idx, alpha, Vec x):             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval = asScalar(alpha)
  *         CHKERR( VecISAXPY(self.vec, idx.iset, sval, x.vec) )
  */
@@ -96729,7 +103501,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_184isaxpy(struct PyPetscVecObjec
 /* "PETSc/Vec.pyx":615
  *         CHKERR( VecISAXPY(self.vec, idx.iset, sval, x.vec) )
  * 
- *     def aypx(self, alpha, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def aypx(self, alpha, Vec x):             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval = asScalar(alpha)
  *         CHKERR( VecAYPX(self.vec, sval, x.vec) )
  */
@@ -96751,7 +103523,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_187aypx(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -96760,6 +103534,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_187aypx(PyObject *__pyx_v_self,
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_alpha)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else {
@@ -96808,27 +103583,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_186aypx(struct PyPetscVecObject
 
   /* "PETSc/Vec.pyx":616
  * 
- *     def aypx(self, alpha, Vec x not None):
+ *     def aypx(self, alpha, Vec x):
  *         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_ERR(30, 616, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(__pyx_t_1 == ((PetscScalar)((PetscScalar)(-1.0))) && PyErr_Occurred())) __PYX_ERR(30, 616, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_1;
 
   /* "PETSc/Vec.pyx":617
- *     def aypx(self, alpha, Vec x not None):
+ *     def aypx(self, alpha, Vec x):
  *         cdef PetscScalar sval = asScalar(alpha)
  *         CHKERR( VecAYPX(self.vec, sval, x.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def axpby(self, alpha, beta, Vec y not None):
+ *     def axpby(self, alpha, beta, Vec y):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(30, 617, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":615
  *         CHKERR( VecISAXPY(self.vec, idx.iset, sval, x.vec) )
  * 
- *     def aypx(self, alpha, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def aypx(self, alpha, Vec x):             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval = asScalar(alpha)
  *         CHKERR( VecAYPX(self.vec, sval, x.vec) )
  */
@@ -96848,7 +103623,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_186aypx(struct PyPetscVecObject
 /* "PETSc/Vec.pyx":619
  *         CHKERR( VecAYPX(self.vec, sval, x.vec) )
  * 
- *     def axpby(self, alpha, beta, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def axpby(self, alpha, beta, Vec y):             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval1 = asScalar(alpha)
  *         cdef PetscScalar sval2 = asScalar(beta)
  */
@@ -96871,8 +103646,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_189axpby(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -96881,11 +103659,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_189axpby(PyObject *__pyx_v_self,
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_alpha)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(30, 619, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
         else {
@@ -96937,22 +103717,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_188axpby(struct PyPetscVecObject
 
   /* "PETSc/Vec.pyx":620
  * 
- *     def axpby(self, alpha, beta, Vec y not None):
+ *     def axpby(self, alpha, beta, Vec y):
  *         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_ERR(30, 620, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(__pyx_t_1 == ((PetscScalar)((PetscScalar)(-1.0))) && PyErr_Occurred())) __PYX_ERR(30, 620, __pyx_L1_error)
   __pyx_v_sval1 = __pyx_t_1;
 
   /* "PETSc/Vec.pyx":621
- *     def axpby(self, alpha, beta, Vec y not None):
+ *     def axpby(self, alpha, beta, Vec y):
  *         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_ERR(30, 621, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_beta); if (unlikely(__pyx_t_1 == ((PetscScalar)((PetscScalar)(-1.0))) && PyErr_Occurred())) __PYX_ERR(30, 621, __pyx_L1_error)
   __pyx_v_sval2 = __pyx_t_1;
 
   /* "PETSc/Vec.pyx":622
@@ -96960,14 +103740,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_188axpby(struct PyPetscVecObject
  *         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):
+ *     def waxpy(self, alpha, Vec x, Vec y):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(30, 622, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":619
  *         CHKERR( VecAYPX(self.vec, sval, x.vec) )
  * 
- *     def axpby(self, alpha, beta, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def axpby(self, alpha, beta, Vec y):             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval1 = asScalar(alpha)
  *         cdef PetscScalar sval2 = asScalar(beta)
  */
@@ -96987,7 +103767,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_188axpby(struct PyPetscVecObject
 /* "PETSc/Vec.pyx":624
  *         CHKERR( VecAXPBY(self.vec, sval1, sval2, y.vec) )
  * 
- *     def waxpy(self, alpha, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def waxpy(self, alpha, Vec x, Vec y):             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval = asScalar(alpha)
  *         CHKERR( VecWAXPY(self.vec, sval, x.vec, y.vec) )
  */
@@ -97010,8 +103790,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_191waxpy(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -97020,11 +103803,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_191waxpy(PyObject *__pyx_v_self,
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_alpha)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(30, 624, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
         else {
@@ -97076,27 +103861,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_190waxpy(struct PyPetscVecObject
 
   /* "PETSc/Vec.pyx":625
  * 
- *     def waxpy(self, alpha, Vec x not None, Vec y not None):
+ *     def waxpy(self, alpha, Vec x, Vec y):
  *         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_ERR(30, 625, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(__pyx_t_1 == ((PetscScalar)((PetscScalar)(-1.0))) && PyErr_Occurred())) __PYX_ERR(30, 625, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_1;
 
   /* "PETSc/Vec.pyx":626
- *     def waxpy(self, alpha, Vec x not None, Vec y not None):
+ *     def waxpy(self, alpha, Vec x, Vec y):
  *         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_ERR(30, 626, __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 == ((int)-1))) __PYX_ERR(30, 626, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":624
  *         CHKERR( VecAXPBY(self.vec, sval1, sval2, y.vec) )
  * 
- *     def waxpy(self, alpha, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def waxpy(self, alpha, Vec x, Vec y):             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval = asScalar(alpha)
  *         CHKERR( VecWAXPY(self.vec, sval, x.vec, y.vec) )
  */
@@ -97138,7 +103923,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_193maxpy(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -97147,6 +103934,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_193maxpy(PyObject *__pyx_v_self,
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_alphas)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vecs)) != 0)) kw_args--;
         else {
@@ -97260,7 +104048,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_192maxpy(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_ERR(30, 634, __pyx_L1_error)
+    __pyx_t_3 = PyObject_Length(__pyx_v_vecs); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(30, 634, __pyx_L1_error)
     if (unlikely(!((__pyx_v_n == __pyx_t_3) != 0))) {
       PyErr_SetNone(PyExc_AssertionError);
       __PYX_ERR(30, 634, __pyx_L1_error)
@@ -97307,9 +104095,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_192maxpy(struct PyPetscVecObject
  *             v[i] = (<Vec?>(vecs[i])).vec
  *         CHKERR( VecMAXPY(self.vec, n, a, v) )             # <<<<<<<<<<<<<<
  * 
- *     def pointwiseMult(self, Vec x not None, Vec y not None):
+ *     def pointwiseMult(self, Vec x, Vec y):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(30, 638, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":628
  *         CHKERR( VecWAXPY(self.vec, sval, x.vec, y.vec) )
@@ -97338,7 +104126,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_192maxpy(struct PyPetscVecObject
 /* "PETSc/Vec.pyx":640
  *         CHKERR( VecMAXPY(self.vec, n, a, v) )
  * 
- *     def pointwiseMult(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def pointwiseMult(self, Vec x, Vec y):             # <<<<<<<<<<<<<<
  *         CHKERR( VecPointwiseMult(self.vec, x.vec, y.vec) )
  * 
  */
@@ -97360,7 +104148,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_195pointwiseMult(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -97369,6 +104159,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_195pointwiseMult(PyObject *__pyx
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
         else {
@@ -97416,17 +104207,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_194pointwiseMult(struct PyPetscV
 
   /* "PETSc/Vec.pyx":641
  * 
- *     def pointwiseMult(self, Vec x not None, Vec y not None):
+ *     def pointwiseMult(self, Vec x, Vec y):
  *         CHKERR( VecPointwiseMult(self.vec, x.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def pointwiseDivide(self, Vec x not None, Vec y not None):
+ *     def pointwiseDivide(self, Vec x, Vec y):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(30, 641, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":640
  *         CHKERR( VecMAXPY(self.vec, n, a, v) )
  * 
- *     def pointwiseMult(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def pointwiseMult(self, Vec x, Vec y):             # <<<<<<<<<<<<<<
  *         CHKERR( VecPointwiseMult(self.vec, x.vec, y.vec) )
  * 
  */
@@ -97446,7 +104237,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_194pointwiseMult(struct PyPetscV
 /* "PETSc/Vec.pyx":643
  *         CHKERR( VecPointwiseMult(self.vec, x.vec, y.vec) )
  * 
- *     def pointwiseDivide(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def pointwiseDivide(self, Vec x, Vec y):             # <<<<<<<<<<<<<<
  *         CHKERR( VecPointwiseDivide(self.vec, x.vec, y.vec) )
  * 
  */
@@ -97468,7 +104259,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_197pointwiseDivide(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -97477,6 +104270,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_197pointwiseDivide(PyObject *__p
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
         else {
@@ -97524,17 +104318,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_196pointwiseDivide(struct PyPets
 
   /* "PETSc/Vec.pyx":644
  * 
- *     def pointwiseDivide(self, Vec x not None, Vec y not None):
+ *     def pointwiseDivide(self, Vec x, Vec y):
  *         CHKERR( VecPointwiseDivide(self.vec, x.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def pointwiseMin(self, Vec x not None, Vec y not None):
+ *     def pointwiseMin(self, Vec x, Vec y):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(30, 644, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":643
  *         CHKERR( VecPointwiseMult(self.vec, x.vec, y.vec) )
  * 
- *     def pointwiseDivide(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def pointwiseDivide(self, Vec x, Vec y):             # <<<<<<<<<<<<<<
  *         CHKERR( VecPointwiseDivide(self.vec, x.vec, y.vec) )
  * 
  */
@@ -97554,7 +104348,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_196pointwiseDivide(struct PyPets
 /* "PETSc/Vec.pyx":646
  *         CHKERR( VecPointwiseDivide(self.vec, x.vec, y.vec) )
  * 
- *     def pointwiseMin(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def pointwiseMin(self, Vec x, Vec y):             # <<<<<<<<<<<<<<
  *         CHKERR( VecPointwiseMin(self.vec, x.vec, y.vec) )
  * 
  */
@@ -97576,7 +104370,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_199pointwiseMin(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -97585,6 +104381,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_199pointwiseMin(PyObject *__pyx_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
         else {
@@ -97632,17 +104429,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_198pointwiseMin(struct PyPetscVe
 
   /* "PETSc/Vec.pyx":647
  * 
- *     def pointwiseMin(self, Vec x not None, Vec y not None):
+ *     def pointwiseMin(self, Vec x, Vec y):
  *         CHKERR( VecPointwiseMin(self.vec, x.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def pointwiseMax(self, Vec x not None, Vec y not None):
+ *     def pointwiseMax(self, Vec x, Vec y):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(30, 647, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":646
  *         CHKERR( VecPointwiseDivide(self.vec, x.vec, y.vec) )
  * 
- *     def pointwiseMin(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def pointwiseMin(self, Vec x, Vec y):             # <<<<<<<<<<<<<<
  *         CHKERR( VecPointwiseMin(self.vec, x.vec, y.vec) )
  * 
  */
@@ -97662,7 +104459,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_198pointwiseMin(struct PyPetscVe
 /* "PETSc/Vec.pyx":649
  *         CHKERR( VecPointwiseMin(self.vec, x.vec, y.vec) )
  * 
- *     def pointwiseMax(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def pointwiseMax(self, Vec x, Vec y):             # <<<<<<<<<<<<<<
  *         CHKERR( VecPointwiseMax(self.vec, x.vec, y.vec) )
  * 
  */
@@ -97684,7 +104481,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_201pointwiseMax(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -97693,6 +104492,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_201pointwiseMax(PyObject *__pyx_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
         else {
@@ -97740,17 +104540,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_200pointwiseMax(struct PyPetscVe
 
   /* "PETSc/Vec.pyx":650
  * 
- *     def pointwiseMax(self, Vec x not None, Vec y not None):
+ *     def pointwiseMax(self, Vec x, Vec y):
  *         CHKERR( VecPointwiseMax(self.vec, x.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def pointwiseMaxAbs(self, Vec x not None, Vec y not None):
+ *     def pointwiseMaxAbs(self, Vec x, Vec y):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(30, 650, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":649
  *         CHKERR( VecPointwiseMin(self.vec, x.vec, y.vec) )
  * 
- *     def pointwiseMax(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def pointwiseMax(self, Vec x, Vec y):             # <<<<<<<<<<<<<<
  *         CHKERR( VecPointwiseMax(self.vec, x.vec, y.vec) )
  * 
  */
@@ -97770,7 +104570,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_200pointwiseMax(struct PyPetscVe
 /* "PETSc/Vec.pyx":652
  *         CHKERR( VecPointwiseMax(self.vec, x.vec, y.vec) )
  * 
- *     def pointwiseMaxAbs(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def pointwiseMaxAbs(self, Vec x, Vec y):             # <<<<<<<<<<<<<<
  *         CHKERR( VecPointwiseMaxAbs(self.vec, x.vec, y.vec) )
  * 
  */
@@ -97792,7 +104592,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_203pointwiseMaxAbs(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -97801,6 +104603,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_203pointwiseMaxAbs(PyObject *__p
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y)) != 0)) kw_args--;
         else {
@@ -97848,17 +104651,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_202pointwiseMaxAbs(struct PyPets
 
   /* "PETSc/Vec.pyx":653
  * 
- *     def pointwiseMaxAbs(self, Vec x not None, Vec y not None):
+ *     def pointwiseMaxAbs(self, Vec x, Vec y):
  *         CHKERR( VecPointwiseMaxAbs(self.vec, x.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def maxPointwiseDivide(self, Vec vec not None):
+ *     def maxPointwiseDivide(self, Vec vec):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(30, 653, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":652
  *         CHKERR( VecPointwiseMax(self.vec, x.vec, y.vec) )
  * 
- *     def pointwiseMaxAbs(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def pointwiseMaxAbs(self, Vec x, Vec y):             # <<<<<<<<<<<<<<
  *         CHKERR( VecPointwiseMaxAbs(self.vec, x.vec, y.vec) )
  * 
  */
@@ -97878,7 +104681,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_202pointwiseMaxAbs(struct PyPets
 /* "PETSc/Vec.pyx":655
  *         CHKERR( VecPointwiseMaxAbs(self.vec, x.vec, y.vec) )
  * 
- *     def maxPointwiseDivide(self, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def maxPointwiseDivide(self, Vec vec):             # <<<<<<<<<<<<<<
  *         cdef PetscReal rval = 0
  *         CHKERR( VecMaxPointwiseDivide(self.vec, vec.vec, &rval) )
  */
@@ -97899,6 +104702,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_205maxPointwiseDivide(PyObject *
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -97948,7 +104752,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_204maxPointwiseDivide(struct PyP
 
   /* "PETSc/Vec.pyx":656
  * 
- *     def maxPointwiseDivide(self, Vec vec not None):
+ *     def maxPointwiseDivide(self, Vec vec):
  *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
  *         CHKERR( VecMaxPointwiseDivide(self.vec, vec.vec, &rval) )
  *         return toReal(rval)
@@ -97956,13 +104760,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_204maxPointwiseDivide(struct PyP
   __pyx_v_rval = 0.0;
 
   /* "PETSc/Vec.pyx":657
- *     def maxPointwiseDivide(self, Vec vec not None):
+ *     def maxPointwiseDivide(self, Vec vec):
  *         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_ERR(30, 657, __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 == ((int)-1))) __PYX_ERR(30, 657, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":658
  *         cdef PetscReal rval = 0
@@ -97981,7 +104785,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_204maxPointwiseDivide(struct PyP
   /* "PETSc/Vec.pyx":655
  *         CHKERR( VecPointwiseMaxAbs(self.vec, x.vec, y.vec) )
  * 
- *     def maxPointwiseDivide(self, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def maxPointwiseDivide(self, Vec vec):             # <<<<<<<<<<<<<<
  *         cdef PetscReal rval = 0
  *         CHKERR( VecMaxPointwiseDivide(self.vec, vec.vec, &rval) )
  */
@@ -98021,6 +104825,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_207getValue(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -98072,7 +104877,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_206getValue(struct PyPetscVecObj
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(30, 661, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_index); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(30, 661, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
   /* "PETSc/Vec.pyx":662
@@ -98091,7 +104896,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_206getValue(struct PyPetscVecObj
  *         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_ERR(30, 663, __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 == ((int)-1))) __PYX_ERR(30, 663, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":664
  *         cdef PetscScalar sval = 0
@@ -98152,7 +104957,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_209getValues(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -98161,6 +104968,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_209getValues(PyObject *__pyx_v_s
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_indices)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_values);
@@ -98173,6 +104981,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_209getValues(PyObject *__pyx_v_s
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -98262,8 +105071,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_211setValue(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -98272,11 +105084,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_211setValue(PyObject *__pyx_v_se
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_index)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(30, 669, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
@@ -98289,6 +105103,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_211setValue(PyObject *__pyx_v_se
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -98333,7 +105148,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_210setValue(struct PyPetscVecObj
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(30, 670, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_index); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(30, 670, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
   /* "PETSc/Vec.pyx":671
@@ -98343,7 +105158,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_210setValue(struct PyPetscVecObj
  *         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_ERR(30, 671, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_value); if (unlikely(__pyx_t_2 == ((PetscScalar)((PetscScalar)(-1.0))) && PyErr_Occurred())) __PYX_ERR(30, 671, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_2;
 
   /* "PETSc/Vec.pyx":672
@@ -98353,7 +105168,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_210setValue(struct PyPetscVecObj
  *         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)-1L))) __PYX_ERR(30, 672, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_3 == ((InsertMode)((InsertMode)-1L)))) __PYX_ERR(30, 672, __pyx_L1_error)
   __pyx_v_caddv = __pyx_t_3;
 
   /* "PETSc/Vec.pyx":673
@@ -98363,7 +105178,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_210setValue(struct PyPetscVecObj
  * 
  *     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_ERR(30, 673, __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 == ((int)-1))) __PYX_ERR(30, 673, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":669
  *         return vecgetvalues(self.vec, indices, values)
@@ -98412,8 +105227,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_213setValues(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -98422,11 +105240,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_213setValues(PyObject *__pyx_v_s
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_indices)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(30, 675, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
@@ -98439,6 +105259,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_213setValues(PyObject *__pyx_v_s
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -98477,7 +105298,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_212setValues(struct PyPetscVecOb
  * 
  *     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_ERR(30, 676, __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 == ((int)-1))) __PYX_ERR(30, 676, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":675
  *         CHKERR( VecSetValues(self.vec, 1, &ival, &sval, caddv) )
@@ -98526,8 +105347,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_215setValuesBlocked(PyObject *__
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -98536,11 +105360,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_215setValuesBlocked(PyObject *__
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_indices)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(30, 678, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
@@ -98553,6 +105379,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_215setValuesBlocked(PyObject *__
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -98589,9 +105416,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_214setValuesBlocked(struct PyPet
  *     def setValuesBlocked(self, indices, values, addv=None):
  *         vecsetvalues(self.vec, indices, values, addv, 1, 0)             # <<<<<<<<<<<<<<
  * 
- *     def setLGMap(self, LGMap lgmap not None):
+ *     def setLGMap(self, LGMap lgmap):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(30, 679, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":678
  *         vecsetvalues(self.vec, indices, values, addv, 0, 0)
@@ -98616,7 +105443,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_214setValuesBlocked(struct PyPet
 /* "PETSc/Vec.pyx":681
  *         vecsetvalues(self.vec, indices, values, addv, 1, 0)
  * 
- *     def setLGMap(self, LGMap lgmap not None):             # <<<<<<<<<<<<<<
+ *     def setLGMap(self, LGMap lgmap):             # <<<<<<<<<<<<<<
  *         CHKERR( VecSetLocalToGlobalMapping(self.vec, lgmap.lgm) )
  * 
  */
@@ -98637,6 +105464,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_217setLGMap(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -98684,17 +105512,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_216setLGMap(struct PyPetscVecObj
 
   /* "PETSc/Vec.pyx":682
  * 
- *     def setLGMap(self, LGMap lgmap not None):
+ *     def setLGMap(self, LGMap lgmap):
  *         CHKERR( VecSetLocalToGlobalMapping(self.vec, lgmap.lgm) )             # <<<<<<<<<<<<<<
  * 
- *     def setValueLocal(self, index, value, addv=None):
+ *     def getLGMap(self):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSetLocalToGlobalMapping(__pyx_v_self->vec, __pyx_v_lgmap->lgm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 682, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":681
  *         vecsetvalues(self.vec, indices, values, addv, 1, 0)
  * 
- *     def setLGMap(self, LGMap lgmap not None):             # <<<<<<<<<<<<<<
+ *     def setLGMap(self, LGMap lgmap):             # <<<<<<<<<<<<<<
  *         CHKERR( VecSetLocalToGlobalMapping(self.vec, lgmap.lgm) )
  * 
  */
@@ -98714,15 +105542,110 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_216setLGMap(struct PyPetscVecObj
 /* "PETSc/Vec.pyx":684
  *         CHKERR( VecSetLocalToGlobalMapping(self.vec, lgmap.lgm) )
  * 
+ *     def getLGMap(self):             # <<<<<<<<<<<<<<
+ *         cdef LGMap cmap = LGMap()
+ *         CHKERR( VecGetLocalToGlobalMapping(self.vec, &cmap.lgm) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_219getLGMap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_218getLGMap[] = "Vec.getLGMap(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_219getLGMap(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_3Vec_218getLGMap(((struct PyPetscVecObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_218getLGMap(struct PyPetscVecObject *__pyx_v_self) {
+  struct PyPetscLGMapObject *__pyx_v_cmap = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getLGMap", 0);
+
+  /* "PETSc/Vec.pyx":685
+ * 
+ *     def getLGMap(self):
+ *         cdef LGMap cmap = LGMap()             # <<<<<<<<<<<<<<
+ *         CHKERR( VecGetLocalToGlobalMapping(self.vec, &cmap.lgm) )
+ *         PetscINCREF(cmap.obj)
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_LGMap), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 685, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_cmap = ((struct PyPetscLGMapObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/Vec.pyx":686
+ *     def getLGMap(self):
+ *         cdef LGMap cmap = LGMap()
+ *         CHKERR( VecGetLocalToGlobalMapping(self.vec, &cmap.lgm) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(cmap.obj)
+ *         return cmap
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecGetLocalToGlobalMapping(__pyx_v_self->vec, (&__pyx_v_cmap->lgm))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(30, 686, __pyx_L1_error)
+
+  /* "PETSc/Vec.pyx":687
+ *         cdef LGMap cmap = LGMap()
+ *         CHKERR( VecGetLocalToGlobalMapping(self.vec, &cmap.lgm) )
+ *         PetscINCREF(cmap.obj)             # <<<<<<<<<<<<<<
+ *         return cmap
+ * 
+ */
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_cmap->__pyx_base.obj);
+
+  /* "PETSc/Vec.pyx":688
+ *         CHKERR( VecGetLocalToGlobalMapping(self.vec, &cmap.lgm) )
+ *         PetscINCREF(cmap.obj)
+ *         return cmap             # <<<<<<<<<<<<<<
+ * 
+ *     def setValueLocal(self, index, value, addv=None):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_cmap));
+  __pyx_r = ((PyObject *)__pyx_v_cmap);
+  goto __pyx_L0;
+
+  /* "PETSc/Vec.pyx":684
+ *         CHKERR( VecSetLocalToGlobalMapping(self.vec, lgmap.lgm) )
+ * 
+ *     def getLGMap(self):             # <<<<<<<<<<<<<<
+ *         cdef LGMap cmap = LGMap()
+ *         CHKERR( VecGetLocalToGlobalMapping(self.vec, &cmap.lgm) )
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.Vec.getLGMap", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_cmap);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Vec.pyx":690
+ *         return cmap
+ * 
  *     def setValueLocal(self, index, value, addv=None):             # <<<<<<<<<<<<<<
  *         cdef PetscInt    ival = asInt(index)
  *         cdef PetscScalar sval = asScalar(value)
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_221setValueLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_220setValueLocal[] = "Vec.setValueLocal(self, index, value, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_221setValueLocal(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;
@@ -98738,8 +105661,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_219setValueLocal(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -98748,11 +105674,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_219setValueLocal(PyObject *__pyx
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_index)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(30, 684, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValueLocal", 0, 2, 3, 1); __PYX_ERR(30, 690, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
@@ -98760,11 +105688,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_219setValueLocal(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValueLocal") < 0)) __PYX_ERR(30, 684, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValueLocal") < 0)) __PYX_ERR(30, 690, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -98777,20 +105706,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_219setValueLocal(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValueLocal", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 684, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setValueLocal", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 690, __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_218setValueLocal(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_index, __pyx_v_value, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_220setValueLocal(((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_218setValueLocal(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value, PyObject *__pyx_v_addv) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_220setValueLocal(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;
@@ -98802,47 +105731,47 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_218setValueLocal(struct PyPetscV
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("setValueLocal", 0);
 
-  /* "PETSc/Vec.pyx":685
+  /* "PETSc/Vec.pyx":691
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(30, 685, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_index); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(30, 691, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":686
+  /* "PETSc/Vec.pyx":692
  *     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_ERR(30, 686, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_value); if (unlikely(__pyx_t_2 == ((PetscScalar)((PetscScalar)(-1.0))) && PyErr_Occurred())) __PYX_ERR(30, 692, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_2;
 
-  /* "PETSc/Vec.pyx":687
+  /* "PETSc/Vec.pyx":693
  *         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)-1L))) __PYX_ERR(30, 687, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_3 == ((InsertMode)((InsertMode)-1L)))) __PYX_ERR(30, 693, __pyx_L1_error)
   __pyx_v_caddv = __pyx_t_3;
 
-  /* "PETSc/Vec.pyx":688
+  /* "PETSc/Vec.pyx":694
  *         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_ERR(30, 688, __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 == ((int)-1))) __PYX_ERR(30, 694, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":684
- *         CHKERR( VecSetLocalToGlobalMapping(self.vec, lgmap.lgm) )
+  /* "PETSc/Vec.pyx":690
+ *         return cmap
  * 
  *     def setValueLocal(self, index, value, addv=None):             # <<<<<<<<<<<<<<
  *         cdef PetscInt    ival = asInt(index)
@@ -98861,7 +105790,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_218setValueLocal(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":690
+/* "PETSc/Vec.pyx":696
  *         CHKERR( VecSetValuesLocal(self.vec, 1, &ival, &sval, caddv) )
  * 
  *     def setValuesLocal(self, indices, values, addv=None):             # <<<<<<<<<<<<<<
@@ -98870,9 +105799,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_218setValueLocal(struct PyPetscV
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_223setValuesLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_222setValuesLocal[] = "Vec.setValuesLocal(self, indices, values, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_223setValuesLocal(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;
@@ -98888,8 +105817,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_221setValuesLocal(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -98898,11 +105830,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_221setValuesLocal(PyObject *__py
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_indices)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(30, 690, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesLocal", 0, 2, 3, 1); __PYX_ERR(30, 696, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
@@ -98910,11 +105844,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_221setValuesLocal(PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesLocal") < 0)) __PYX_ERR(30, 690, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesLocal") < 0)) __PYX_ERR(30, 696, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -98927,35 +105862,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_221setValuesLocal(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesLocal", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 690, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setValuesLocal", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 696, __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_220setValuesLocal(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_indices, __pyx_v_values, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_222setValuesLocal(((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_220setValuesLocal(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_values, PyObject *__pyx_v_addv) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_222setValuesLocal(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;
   __Pyx_RefNannySetupContext("setValuesLocal", 0);
 
-  /* "PETSc/Vec.pyx":691
+  /* "PETSc/Vec.pyx":697
  * 
  *     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_ERR(30, 691, __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 == ((int)-1))) __PYX_ERR(30, 697, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":690
+  /* "PETSc/Vec.pyx":696
  *         CHKERR( VecSetValuesLocal(self.vec, 1, &ival, &sval, caddv) )
  * 
  *     def setValuesLocal(self, indices, values, addv=None):             # <<<<<<<<<<<<<<
@@ -98975,7 +105910,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_220setValuesLocal(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":693
+/* "PETSc/Vec.pyx":699
  *         vecsetvalues(self.vec, indices, values, addv, 0, 1)
  * 
  *     def setValuesBlockedLocal(self, indices, values, addv=None):             # <<<<<<<<<<<<<<
@@ -98984,9 +105919,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_220setValuesLocal(struct PyPetsc
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_225setValuesBlockedLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_224setValuesBlockedLocal[] = "Vec.setValuesBlockedLocal(self, indices, values, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_225setValuesBlockedLocal(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;
@@ -99002,8 +105937,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_223setValuesBlockedLocal(PyObjec
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -99012,11 +105950,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_223setValuesBlockedLocal(PyObjec
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_indices)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(30, 693, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocal", 0, 2, 3, 1); __PYX_ERR(30, 699, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
@@ -99024,11 +105964,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_223setValuesBlockedLocal(PyObjec
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedLocal") < 0)) __PYX_ERR(30, 693, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedLocal") < 0)) __PYX_ERR(30, 699, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -99041,35 +105982,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_223setValuesBlockedLocal(PyObjec
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocal", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 693, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocal", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 699, __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_222setValuesBlockedLocal(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_indices, __pyx_v_values, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_224setValuesBlockedLocal(((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_222setValuesBlockedLocal(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_indices, PyObject *__pyx_v_values, PyObject *__pyx_v_addv) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_224setValuesBlockedLocal(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;
   __Pyx_RefNannySetupContext("setValuesBlockedLocal", 0);
 
-  /* "PETSc/Vec.pyx":694
+  /* "PETSc/Vec.pyx":700
  * 
  *     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_ERR(30, 694, __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 == ((int)-1))) __PYX_ERR(30, 700, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":693
+  /* "PETSc/Vec.pyx":699
  *         vecsetvalues(self.vec, indices, values, addv, 0, 1)
  * 
  *     def setValuesBlockedLocal(self, indices, values, addv=None):             # <<<<<<<<<<<<<<
@@ -99089,7 +106030,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_222setValuesBlockedLocal(struct
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":696
+/* "PETSc/Vec.pyx":702
  *         vecsetvalues(self.vec, indices, values, addv, 1, 1)
  * 
  *     def assemblyBegin(self):             # <<<<<<<<<<<<<<
@@ -99098,38 +106039,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_222setValuesBlockedLocal(struct
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_227assemblyBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_226assemblyBegin[] = "Vec.assemblyBegin(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_227assemblyBegin(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_224assemblyBegin(((struct PyPetscVecObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_226assemblyBegin(((struct PyPetscVecObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_224assemblyBegin(struct PyPetscVecObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_226assemblyBegin(struct PyPetscVecObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("assemblyBegin", 0);
 
-  /* "PETSc/Vec.pyx":697
+  /* "PETSc/Vec.pyx":703
  * 
  *     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_ERR(30, 697, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAssemblyBegin(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 703, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":696
+  /* "PETSc/Vec.pyx":702
  *         vecsetvalues(self.vec, indices, values, addv, 1, 1)
  * 
  *     def assemblyBegin(self):             # <<<<<<<<<<<<<<
@@ -99149,7 +106090,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_224assemblyBegin(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":699
+/* "PETSc/Vec.pyx":705
  *         CHKERR( VecAssemblyBegin(self.vec) )
  * 
  *     def assemblyEnd(self):             # <<<<<<<<<<<<<<
@@ -99158,38 +106099,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_224assemblyBegin(struct PyPetscV
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_229assemblyEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_228assemblyEnd[] = "Vec.assemblyEnd(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_229assemblyEnd(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_226assemblyEnd(((struct PyPetscVecObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_228assemblyEnd(((struct PyPetscVecObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_226assemblyEnd(struct PyPetscVecObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_228assemblyEnd(struct PyPetscVecObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("assemblyEnd", 0);
 
-  /* "PETSc/Vec.pyx":700
+  /* "PETSc/Vec.pyx":706
  * 
  *     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_ERR(30, 700, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAssemblyEnd(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 706, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":699
+  /* "PETSc/Vec.pyx":705
  *         CHKERR( VecAssemblyBegin(self.vec) )
  * 
  *     def assemblyEnd(self):             # <<<<<<<<<<<<<<
@@ -99209,7 +106150,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_226assemblyEnd(struct PyPetscVec
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":702
+/* "PETSc/Vec.pyx":708
  *         CHKERR( VecAssemblyEnd(self.vec) )
  * 
  *     def assemble(self):             # <<<<<<<<<<<<<<
@@ -99218,47 +106159,47 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_226assemblyEnd(struct PyPetscVec
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_231assemble(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_230assemble[] = "Vec.assemble(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_231assemble(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_228assemble(((struct PyPetscVecObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_230assemble(((struct PyPetscVecObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_228assemble(struct PyPetscVecObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_230assemble(struct PyPetscVecObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("assemble", 0);
 
-  /* "PETSc/Vec.pyx":703
+  /* "PETSc/Vec.pyx":709
  * 
  *     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_ERR(30, 703, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAssemblyBegin(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 709, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":704
+  /* "PETSc/Vec.pyx":710
  *     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_ERR(30, 704, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecAssemblyEnd(__pyx_v_self->vec)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 710, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":702
+  /* "PETSc/Vec.pyx":708
  *         CHKERR( VecAssemblyEnd(self.vec) )
  * 
  *     def assemble(self):             # <<<<<<<<<<<<<<
@@ -99278,7 +106219,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_228assemble(struct PyPetscVecObj
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":708
+/* "PETSc/Vec.pyx":714
  *     # --- methods for strided vectors ---
  * 
  *     def strideScale(self, field, alpha):             # <<<<<<<<<<<<<<
@@ -99287,9 +106228,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_228assemble(struct PyPetscVecObj
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_233strideScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_232strideScale[] = "Vec.strideScale(self, field, alpha)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_233strideScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_field = 0;
   PyObject *__pyx_v_alpha = 0;
   PyObject *__pyx_r = 0;
@@ -99303,7 +106244,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_231strideScale(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -99312,14 +106255,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_231strideScale(PyObject *__pyx_v
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_field)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(30, 708, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("strideScale", 1, 2, 2, 1); __PYX_ERR(30, 714, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "strideScale") < 0)) __PYX_ERR(30, 708, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "strideScale") < 0)) __PYX_ERR(30, 714, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -99332,20 +106276,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_231strideScale(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_ERR(30, 708, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("strideScale", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 714, __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_230strideScale(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_field, __pyx_v_alpha);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_232strideScale(((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_230strideScale(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field, PyObject *__pyx_v_alpha) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_232strideScale(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;
@@ -99355,36 +106299,36 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_230strideScale(struct PyPetscVec
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("strideScale", 0);
 
-  /* "PETSc/Vec.pyx":709
+  /* "PETSc/Vec.pyx":715
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(30, 709, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(30, 715, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":710
+  /* "PETSc/Vec.pyx":716
  *     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_ERR(30, 710, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(__pyx_t_2 == ((PetscScalar)((PetscScalar)(-1.0))) && PyErr_Occurred())) __PYX_ERR(30, 716, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_2;
 
-  /* "PETSc/Vec.pyx":711
+  /* "PETSc/Vec.pyx":717
  *         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_ERR(30, 711, __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 == ((int)-1))) __PYX_ERR(30, 717, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":708
+  /* "PETSc/Vec.pyx":714
  *     # --- methods for strided vectors ---
  * 
  *     def strideScale(self, field, alpha):             # <<<<<<<<<<<<<<
@@ -99404,7 +106348,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_230strideScale(struct PyPetscVec
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":713
+/* "PETSc/Vec.pyx":719
  *         CHKERR( VecStrideScale(self.vec, ival, sval) )
  * 
  *     def strideSum(self, field):             # <<<<<<<<<<<<<<
@@ -99413,9 +106357,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_230strideScale(struct PyPetscVec
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_235strideSum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_234strideSum[] = "Vec.strideSum(self, field)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_235strideSum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_field = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -99428,6 +106372,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_233strideSum(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -99438,7 +106383,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_233strideSum(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_ERR(30, 713, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "strideSum") < 0)) __PYX_ERR(30, 719, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -99449,20 +106394,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_233strideSum(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_ERR(30, 713, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("strideSum", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 719, __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_232strideSum(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_field);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_234strideSum(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_field);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_232strideSum(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_234strideSum(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field) {
   PetscInt __pyx_v_ival;
   PetscScalar __pyx_v_sval;
   PyObject *__pyx_r = NULL;
@@ -99472,17 +106417,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_232strideSum(struct PyPetscVecOb
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("strideSum", 0);
 
-  /* "PETSc/Vec.pyx":714
+  /* "PETSc/Vec.pyx":720
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(30, 714, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(30, 720, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":715
+  /* "PETSc/Vec.pyx":721
  *     def strideSum(self, field):
  *         cdef PetscInt    ival = asInt(field)
  *         cdef PetscScalar sval = 0             # <<<<<<<<<<<<<<
@@ -99491,16 +106436,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_232strideSum(struct PyPetscVecOb
  */
   __pyx_v_sval = 0.0;
 
-  /* "PETSc/Vec.pyx":716
+  /* "PETSc/Vec.pyx":722
  *         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_ERR(30, 716, __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 == ((int)-1))) __PYX_ERR(30, 722, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":717
+  /* "PETSc/Vec.pyx":723
  *         cdef PetscScalar sval = 0
  *         CHKERR( VecStrideSum(self.vec, ival, &sval) )
  *         return toScalar(sval)             # <<<<<<<<<<<<<<
@@ -99508,13 +106453,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_232strideSum(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_ERR(30, 717, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 723, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":713
+  /* "PETSc/Vec.pyx":719
  *         CHKERR( VecStrideScale(self.vec, ival, sval) )
  * 
  *     def strideSum(self, field):             # <<<<<<<<<<<<<<
@@ -99533,7 +106478,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_232strideSum(struct PyPetscVecOb
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":719
+/* "PETSc/Vec.pyx":725
  *         return toScalar(sval)
  * 
  *     def strideMin(self, field):             # <<<<<<<<<<<<<<
@@ -99542,9 +106487,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_232strideSum(struct PyPetscVecOb
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_237strideMin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_236strideMin[] = "Vec.strideMin(self, field)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_237strideMin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_field = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -99557,6 +106502,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_235strideMin(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -99567,7 +106513,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_235strideMin(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_ERR(30, 719, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "strideMin") < 0)) __PYX_ERR(30, 725, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -99578,20 +106524,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_235strideMin(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_ERR(30, 719, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("strideMin", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 725, __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_234strideMin(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_field);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_236strideMin(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_field);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_234strideMin(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_236strideMin(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field) {
   PetscInt __pyx_v_ival1;
   PetscInt __pyx_v_ival2;
   PetscReal __pyx_v_rval;
@@ -99604,17 +106550,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_234strideMin(struct PyPetscVecOb
   PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("strideMin", 0);
 
-  /* "PETSc/Vec.pyx":720
+  /* "PETSc/Vec.pyx":726
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(30, 720, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(30, 726, __pyx_L1_error)
   __pyx_v_ival1 = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":721
+  /* "PETSc/Vec.pyx":727
  *     def strideMin(self, field):
  *         cdef PetscInt  ival1 = asInt(field)
  *         cdef PetscInt  ival2 = 0             # <<<<<<<<<<<<<<
@@ -99623,7 +106569,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_234strideMin(struct PyPetscVecOb
  */
   __pyx_v_ival2 = 0;
 
-  /* "PETSc/Vec.pyx":722
+  /* "PETSc/Vec.pyx":728
  *         cdef PetscInt  ival1 = asInt(field)
  *         cdef PetscInt  ival2 = 0
  *         cdef PetscReal rval  = 0             # <<<<<<<<<<<<<<
@@ -99632,16 +106578,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_234strideMin(struct PyPetscVecOb
  */
   __pyx_v_rval = 0.0;
 
-  /* "PETSc/Vec.pyx":723
+  /* "PETSc/Vec.pyx":729
  *         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_ERR(30, 723, __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 == ((int)-1))) __PYX_ERR(30, 729, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":724
+  /* "PETSc/Vec.pyx":730
  *         cdef PetscReal rval  = 0
  *         CHKERR( VecStrideMin(self.vec, ival1, &ival2, &rval) )
  *         return (toInt(ival2), toReal(rval))             # <<<<<<<<<<<<<<
@@ -99649,11 +106595,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_234strideMin(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_ERR(30, 724, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival2); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 730, __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_ERR(30, 724, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 730, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(30, 724, __pyx_L1_error)
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(30, 730, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
@@ -99665,7 +106611,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_234strideMin(struct PyPetscVecOb
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":719
+  /* "PETSc/Vec.pyx":725
  *         return toScalar(sval)
  * 
  *     def strideMin(self, field):             # <<<<<<<<<<<<<<
@@ -99686,7 +106632,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_234strideMin(struct PyPetscVecOb
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":726
+/* "PETSc/Vec.pyx":732
  *         return (toInt(ival2), toReal(rval))
  * 
  *     def strideMax(self, field):             # <<<<<<<<<<<<<<
@@ -99695,9 +106641,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_234strideMin(struct PyPetscVecOb
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_239strideMax(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_238strideMax[] = "Vec.strideMax(self, field)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_239strideMax(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_field = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -99710,6 +106656,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_237strideMax(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -99720,7 +106667,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_237strideMax(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_ERR(30, 726, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "strideMax") < 0)) __PYX_ERR(30, 732, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -99731,20 +106678,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_237strideMax(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_ERR(30, 726, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("strideMax", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 732, __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_236strideMax(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_field);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_238strideMax(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_field);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_236strideMax(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_238strideMax(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field) {
   PetscInt __pyx_v_ival1;
   PetscInt __pyx_v_ival2;
   PetscReal __pyx_v_rval;
@@ -99757,17 +106704,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_236strideMax(struct PyPetscVecOb
   PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("strideMax", 0);
 
-  /* "PETSc/Vec.pyx":727
+  /* "PETSc/Vec.pyx":733
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(30, 727, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(30, 733, __pyx_L1_error)
   __pyx_v_ival1 = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":728
+  /* "PETSc/Vec.pyx":734
  *     def strideMax(self, field):
  *         cdef PetscInt  ival1 = asInt(field)
  *         cdef PetscInt  ival2 = 0             # <<<<<<<<<<<<<<
@@ -99776,7 +106723,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_236strideMax(struct PyPetscVecOb
  */
   __pyx_v_ival2 = 0;
 
-  /* "PETSc/Vec.pyx":729
+  /* "PETSc/Vec.pyx":735
  *         cdef PetscInt  ival1 = asInt(field)
  *         cdef PetscInt  ival2 = 0
  *         cdef PetscReal rval  = 0             # <<<<<<<<<<<<<<
@@ -99785,16 +106732,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_236strideMax(struct PyPetscVecOb
  */
   __pyx_v_rval = 0.0;
 
-  /* "PETSc/Vec.pyx":730
+  /* "PETSc/Vec.pyx":736
  *         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_ERR(30, 730, __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 == ((int)-1))) __PYX_ERR(30, 736, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":731
+  /* "PETSc/Vec.pyx":737
  *         cdef PetscReal rval  = 0
  *         CHKERR( VecStrideMax(self.vec, ival1, &ival2, &rval) )
  *         return (toInt(ival2), toReal(rval))             # <<<<<<<<<<<<<<
@@ -99802,11 +106749,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_236strideMax(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_ERR(30, 731, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival2); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 737, __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_ERR(30, 731, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 737, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(30, 731, __pyx_L1_error)
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(30, 737, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
@@ -99818,7 +106765,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_236strideMax(struct PyPetscVecOb
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":726
+  /* "PETSc/Vec.pyx":732
  *         return (toInt(ival2), toReal(rval))
  * 
  *     def strideMax(self, field):             # <<<<<<<<<<<<<<
@@ -99839,7 +106786,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_236strideMax(struct PyPetscVecOb
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":733
+/* "PETSc/Vec.pyx":739
  *         return (toInt(ival2), toReal(rval))
  * 
  *     def strideNorm(self, field, norm_type=None):             # <<<<<<<<<<<<<<
@@ -99848,9 +106795,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_236strideMax(struct PyPetscVecOb
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_241strideNorm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_240strideNorm[] = "Vec.strideNorm(self, field, norm_type=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_241strideNorm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_field = 0;
   PyObject *__pyx_v_norm_type = 0;
   PyObject *__pyx_r = 0;
@@ -99865,7 +106812,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_239strideNorm(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -99874,6 +106823,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_239strideNorm(PyObject *__pyx_v_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_field)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_norm_type);
@@ -99881,11 +106831,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_239strideNorm(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "strideNorm") < 0)) __PYX_ERR(30, 733, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "strideNorm") < 0)) __PYX_ERR(30, 739, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -99896,20 +106847,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_239strideNorm(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_ERR(30, 733, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("strideNorm", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 739, __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_238strideNorm(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_field, __pyx_v_norm_type);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_240strideNorm(((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_238strideNorm(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_field, PyObject *__pyx_v_norm_type) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_240strideNorm(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;
@@ -99926,17 +106877,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_238strideNorm(struct PyPetscVecO
   PyObject *__pyx_t_8 = NULL;
   __Pyx_RefNannySetupContext("strideNorm", 0);
 
-  /* "PETSc/Vec.pyx":734
+  /* "PETSc/Vec.pyx":740
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(30, 734, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(30, 740, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":735
+  /* "PETSc/Vec.pyx":741
  *     def strideNorm(self, field, norm_type=None):
  *         cdef PetscInt ival = asInt(field)
  *         cdef PetscNormType norm_1_2 = PETSC_NORM_1_AND_2             # <<<<<<<<<<<<<<
@@ -99945,7 +106896,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_238strideNorm(struct PyPetscVecO
  */
   __pyx_v_norm_1_2 = NORM_1_AND_2;
 
-  /* "PETSc/Vec.pyx":736
+  /* "PETSc/Vec.pyx":742
  *         cdef PetscInt ival = asInt(field)
  *         cdef PetscNormType norm_1_2 = PETSC_NORM_1_AND_2
  *         cdef PetscNormType ntype = PETSC_NORM_2             # <<<<<<<<<<<<<<
@@ -99954,7 +106905,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_238strideNorm(struct PyPetscVecO
  */
   __pyx_v_ntype = NORM_2;
 
-  /* "PETSc/Vec.pyx":737
+  /* "PETSc/Vec.pyx":743
  *         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             # <<<<<<<<<<<<<<
@@ -99964,20 +106915,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_238strideNorm(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)__Pyx_PyInt_As_NormType(__pyx_v_norm_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 737, __pyx_L1_error)
+    __pyx_t_4 = ((NormType)__Pyx_PyInt_As_NormType(__pyx_v_norm_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(30, 743, __pyx_L1_error)
     __pyx_v_ntype = __pyx_t_4;
   }
 
-  /* "PETSc/Vec.pyx":739
+  /* "PETSc/Vec.pyx":745
  *         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_ERR(30, 739, __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 == ((int)-1))) __PYX_ERR(30, 745, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":740
+  /* "PETSc/Vec.pyx":746
  *         cdef PetscReal rval[2]
  *         CHKERR( VecStrideNorm(self.vec, ival, ntype, rval) )
  *         if ntype != norm_1_2: return toReal(rval[0])             # <<<<<<<<<<<<<<
@@ -99987,27 +106938,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_238strideNorm(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_ERR(30, 740, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_rval[0])); if (unlikely(!__pyx_t_6)) __PYX_ERR(30, 746, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __pyx_r = __pyx_t_6;
     __pyx_t_6 = 0;
     goto __pyx_L0;
   }
 
-  /* "PETSc/Vec.pyx":741
+  /* "PETSc/Vec.pyx":747
  *         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):
+ *     def strideScatter(self, field, Vec vec, 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_ERR(30, 741, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_rval[0])); if (unlikely(!__pyx_t_6)) __PYX_ERR(30, 747, __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_ERR(30, 741, __pyx_L1_error)
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_rval[1])); if (unlikely(!__pyx_t_7)) __PYX_ERR(30, 747, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
-    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(30, 741, __pyx_L1_error)
+    __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(30, 747, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_GIVEREF(__pyx_t_6);
     PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_6);
@@ -100020,7 +106971,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_238strideNorm(struct PyPetscVecO
     goto __pyx_L0;
   }
 
-  /* "PETSc/Vec.pyx":733
+  /* "PETSc/Vec.pyx":739
  *         return (toInt(ival2), toReal(rval))
  * 
  *     def strideNorm(self, field, norm_type=None):             # <<<<<<<<<<<<<<
@@ -100041,18 +106992,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_238strideNorm(struct PyPetscVecO
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":743
+/* "PETSc/Vec.pyx":749
  *         else: return (toReal(rval[0]), toReal(rval[1]))
  * 
- *     def strideScatter(self, field, Vec vec not None, addv=None):             # <<<<<<<<<<<<<<
+ *     def strideScatter(self, field, Vec vec, addv=None):             # <<<<<<<<<<<<<<
  *         cdef PetscInt ival = asInt(field)
  *         cdef PetscInsertMode caddv = insertmode(addv)
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_243strideScatter(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_242strideScatter[] = "Vec.strideScatter(self, field, Vec vec, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_243strideScatter(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;
@@ -100068,8 +107019,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_241strideScatter(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -100078,11 +107032,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_241strideScatter(PyObject *__pyx
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_field)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(30, 743, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("strideScatter", 0, 2, 3, 1); __PYX_ERR(30, 749, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
@@ -100090,11 +107046,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_241strideScatter(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "strideScatter") < 0)) __PYX_ERR(30, 743, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "strideScatter") < 0)) __PYX_ERR(30, 749, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -100107,14 +107064,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_241strideScatter(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("strideScatter", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 743, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("strideScatter", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 749, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) __PYX_ERR(30, 749, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_242strideScatter(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_field, __pyx_v_vec, __pyx_v_addv);
 
   /* function exit code */
   goto __pyx_L0;
@@ -100125,7 +107082,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_241strideScatter(PyObject *__pyx
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_242strideScatter(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;
@@ -100135,39 +107092,39 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_240strideScatter(struct PyPetscV
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("strideScatter", 0);
 
-  /* "PETSc/Vec.pyx":744
+  /* "PETSc/Vec.pyx":750
  * 
- *     def strideScatter(self, field, Vec vec not None, addv=None):
+ *     def strideScatter(self, field, Vec vec, 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 == -1L && PyErr_Occurred())) __PYX_ERR(30, 744, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(30, 750, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":745
- *     def strideScatter(self, field, Vec vec not None, addv=None):
+  /* "PETSc/Vec.pyx":751
+ *     def strideScatter(self, field, Vec vec, 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)-1L))) __PYX_ERR(30, 745, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_2 == ((InsertMode)((InsertMode)-1L)))) __PYX_ERR(30, 751, __pyx_L1_error)
   __pyx_v_caddv = __pyx_t_2;
 
-  /* "PETSc/Vec.pyx":746
+  /* "PETSc/Vec.pyx":752
  *         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):
+ *     def strideGather(self, field, Vec vec, 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_ERR(30, 746, __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 == ((int)-1))) __PYX_ERR(30, 752, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":743
+  /* "PETSc/Vec.pyx":749
  *         else: return (toReal(rval[0]), toReal(rval[1]))
  * 
- *     def strideScatter(self, field, Vec vec not None, addv=None):             # <<<<<<<<<<<<<<
+ *     def strideScatter(self, field, Vec vec, addv=None):             # <<<<<<<<<<<<<<
  *         cdef PetscInt ival = asInt(field)
  *         cdef PetscInsertMode caddv = insertmode(addv)
  */
@@ -100184,18 +107141,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_240strideScatter(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":748
+/* "PETSc/Vec.pyx":754
  *         CHKERR( VecStrideScatter(self.vec, ival, vec.vec, caddv) )
  * 
- *     def strideGather(self, field, Vec vec not None, addv=None):             # <<<<<<<<<<<<<<
+ *     def strideGather(self, field, Vec vec, addv=None):             # <<<<<<<<<<<<<<
  *         cdef PetscInt ival = asInt(field)
  *         cdef PetscInsertMode caddv = insertmode(addv)
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_245strideGather(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_244strideGather[] = "Vec.strideGather(self, field, Vec vec, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_245strideGather(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;
@@ -100211,8 +107168,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_243strideGather(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -100221,11 +107181,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_243strideGather(PyObject *__pyx_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_field)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(30, 748, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("strideGather", 0, 2, 3, 1); __PYX_ERR(30, 754, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
@@ -100233,11 +107195,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_243strideGather(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "strideGather") < 0)) __PYX_ERR(30, 748, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "strideGather") < 0)) __PYX_ERR(30, 754, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -100250,14 +107213,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_243strideGather(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("strideGather", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 748, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("strideGather", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 754, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) __PYX_ERR(30, 754, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_244strideGather(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_field, __pyx_v_vec, __pyx_v_addv);
 
   /* function exit code */
   goto __pyx_L0;
@@ -100268,7 +107231,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_243strideGather(PyObject *__pyx_
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_244strideGather(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;
@@ -100278,39 +107241,39 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_242strideGather(struct PyPetscVe
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("strideGather", 0);
 
-  /* "PETSc/Vec.pyx":749
+  /* "PETSc/Vec.pyx":755
  * 
- *     def strideGather(self, field, Vec vec not None, addv=None):
+ *     def strideGather(self, field, Vec vec, 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 == -1L && PyErr_Occurred())) __PYX_ERR(30, 749, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(30, 755, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":750
- *     def strideGather(self, field, Vec vec not None, addv=None):
+  /* "PETSc/Vec.pyx":756
+ *     def strideGather(self, field, Vec vec, 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)-1L))) __PYX_ERR(30, 750, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_2 == ((InsertMode)((InsertMode)-1L)))) __PYX_ERR(30, 756, __pyx_L1_error)
   __pyx_v_caddv = __pyx_t_2;
 
-  /* "PETSc/Vec.pyx":751
+  /* "PETSc/Vec.pyx":757
  *         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_ERR(30, 751, __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 == ((int)-1))) __PYX_ERR(30, 757, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":748
+  /* "PETSc/Vec.pyx":754
  *         CHKERR( VecStrideScatter(self.vec, ival, vec.vec, caddv) )
  * 
- *     def strideGather(self, field, Vec vec not None, addv=None):             # <<<<<<<<<<<<<<
+ *     def strideGather(self, field, Vec vec, addv=None):             # <<<<<<<<<<<<<<
  *         cdef PetscInt ival = asInt(field)
  *         cdef PetscInsertMode caddv = insertmode(addv)
  */
@@ -100327,7 +107290,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_242strideGather(struct PyPetscVe
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":755
+/* "PETSc/Vec.pyx":761
  *     # --- methods for vectors with ghost values ---
  * 
  *     def localForm(self):             # <<<<<<<<<<<<<<
@@ -100336,30 +107299,30 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_242strideGather(struct PyPetscVe
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_247localForm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_246localForm[] = "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_247localForm(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_244localForm(((struct PyPetscVecObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_246localForm(((struct PyPetscVecObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_244localForm(struct PyPetscVecObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_246localForm(struct PyPetscVecObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("localForm", 0);
 
-  /* "PETSc/Vec.pyx":762
+  /* "PETSc/Vec.pyx":768
  *                 use(lf)
  *         """
  *         return _Vec_LocalForm(self)             # <<<<<<<<<<<<<<
@@ -100367,19 +107330,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_244localForm(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_ERR(30, 762, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 768, __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 *)__pyx_ptype_8petsc4py_5PETSc__Vec_LocalForm), __pyx_t_1, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 762, __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, 768, __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":755
+  /* "PETSc/Vec.pyx":761
  *     # --- methods for vectors with ghost values ---
  * 
  *     def localForm(self):             # <<<<<<<<<<<<<<
@@ -100399,7 +107362,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_244localForm(struct PyPetscVecOb
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":764
+/* "PETSc/Vec.pyx":770
  *         return _Vec_LocalForm(self)
  * 
  *     def ghostUpdateBegin(self, addv=None, mode=None):             # <<<<<<<<<<<<<<
@@ -100408,9 +107371,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_244localForm(struct PyPetscVecOb
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_249ghostUpdateBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_248ghostUpdateBegin[] = "Vec.ghostUpdateBegin(self, addv=None, mode=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_249ghostUpdateBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_addv = 0;
   PyObject *__pyx_v_mode = 0;
   PyObject *__pyx_r = 0;
@@ -100426,7 +107389,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_247ghostUpdateBegin(PyObject *__
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -100437,6 +107402,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_247ghostUpdateBegin(PyObject *__
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mode);
@@ -100444,12 +107410,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_247ghostUpdateBegin(PyObject *__
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ghostUpdateBegin") < 0)) __PYX_ERR(30, 764, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ghostUpdateBegin") < 0)) __PYX_ERR(30, 770, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -100459,20 +107427,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_247ghostUpdateBegin(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("ghostUpdateBegin", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 764, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("ghostUpdateBegin", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 770, __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_246ghostUpdateBegin(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_addv, __pyx_v_mode);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_248ghostUpdateBegin(((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_246ghostUpdateBegin(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_addv, PyObject *__pyx_v_mode) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_248ghostUpdateBegin(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;
@@ -100482,36 +107450,36 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_246ghostUpdateBegin(struct PyPet
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("ghostUpdateBegin", 0);
 
-  /* "PETSc/Vec.pyx":765
+  /* "PETSc/Vec.pyx":771
  * 
  *     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)-1L))) __PYX_ERR(30, 765, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)((InsertMode)-1L)))) __PYX_ERR(30, 771, __pyx_L1_error)
   __pyx_v_caddv = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":766
+  /* "PETSc/Vec.pyx":772
  *     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)-1L))) __PYX_ERR(30, 766, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_scattermode(__pyx_v_mode); if (unlikely(__pyx_t_2 == ((ScatterMode)((ScatterMode)-1L)))) __PYX_ERR(30, 772, __pyx_L1_error)
   __pyx_v_csctm = __pyx_t_2;
 
-  /* "PETSc/Vec.pyx":767
+  /* "PETSc/Vec.pyx":773
  *         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_ERR(30, 767, __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 == ((int)-1))) __PYX_ERR(30, 773, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":764
+  /* "PETSc/Vec.pyx":770
  *         return _Vec_LocalForm(self)
  * 
  *     def ghostUpdateBegin(self, addv=None, mode=None):             # <<<<<<<<<<<<<<
@@ -100531,7 +107499,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_246ghostUpdateBegin(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":769
+/* "PETSc/Vec.pyx":775
  *         CHKERR( VecGhostUpdateBegin(self.vec, caddv, csctm) )
  * 
  *     def ghostUpdateEnd(self, addv=None, mode=None):             # <<<<<<<<<<<<<<
@@ -100540,9 +107508,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_246ghostUpdateBegin(struct PyPet
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_251ghostUpdateEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_250ghostUpdateEnd[] = "Vec.ghostUpdateEnd(self, addv=None, mode=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_251ghostUpdateEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_addv = 0;
   PyObject *__pyx_v_mode = 0;
   PyObject *__pyx_r = 0;
@@ -100558,7 +107526,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_249ghostUpdateEnd(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -100569,6 +107539,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_249ghostUpdateEnd(PyObject *__py
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mode);
@@ -100576,12 +107547,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_249ghostUpdateEnd(PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ghostUpdateEnd") < 0)) __PYX_ERR(30, 769, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ghostUpdateEnd") < 0)) __PYX_ERR(30, 775, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -100591,20 +107564,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_249ghostUpdateEnd(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("ghostUpdateEnd", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 769, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("ghostUpdateEnd", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 775, __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_248ghostUpdateEnd(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_addv, __pyx_v_mode);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_250ghostUpdateEnd(((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_248ghostUpdateEnd(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_addv, PyObject *__pyx_v_mode) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_250ghostUpdateEnd(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;
@@ -100614,36 +107587,36 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_248ghostUpdateEnd(struct PyPetsc
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("ghostUpdateEnd", 0);
 
-  /* "PETSc/Vec.pyx":770
+  /* "PETSc/Vec.pyx":776
  * 
  *     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)-1L))) __PYX_ERR(30, 770, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)((InsertMode)-1L)))) __PYX_ERR(30, 776, __pyx_L1_error)
   __pyx_v_caddv = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":771
+  /* "PETSc/Vec.pyx":777
  *     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)-1L))) __PYX_ERR(30, 771, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_scattermode(__pyx_v_mode); if (unlikely(__pyx_t_2 == ((ScatterMode)((ScatterMode)-1L)))) __PYX_ERR(30, 777, __pyx_L1_error)
   __pyx_v_csctm = __pyx_t_2;
 
-  /* "PETSc/Vec.pyx":772
+  /* "PETSc/Vec.pyx":778
  *         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_ERR(30, 772, __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 == ((int)-1))) __PYX_ERR(30, 778, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":769
+  /* "PETSc/Vec.pyx":775
  *         CHKERR( VecGhostUpdateBegin(self.vec, caddv, csctm) )
  * 
  *     def ghostUpdateEnd(self, addv=None, mode=None):             # <<<<<<<<<<<<<<
@@ -100663,7 +107636,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_248ghostUpdateEnd(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":774
+/* "PETSc/Vec.pyx":780
  *         CHKERR( VecGhostUpdateEnd(self.vec, caddv, csctm) )
  * 
  *     def ghostUpdate(self, addv=None, mode=None):             # <<<<<<<<<<<<<<
@@ -100672,9 +107645,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_248ghostUpdateEnd(struct PyPetsc
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_253ghostUpdate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_252ghostUpdate[] = "Vec.ghostUpdate(self, addv=None, mode=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_253ghostUpdate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_addv = 0;
   PyObject *__pyx_v_mode = 0;
   PyObject *__pyx_r = 0;
@@ -100690,7 +107663,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_251ghostUpdate(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -100701,6 +107676,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_251ghostUpdate(PyObject *__pyx_v
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mode);
@@ -100708,12 +107684,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_251ghostUpdate(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ghostUpdate") < 0)) __PYX_ERR(30, 774, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "ghostUpdate") < 0)) __PYX_ERR(30, 780, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -100723,20 +107701,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_251ghostUpdate(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_ERR(30, 774, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("ghostUpdate", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 780, __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_250ghostUpdate(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_addv, __pyx_v_mode);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_252ghostUpdate(((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_250ghostUpdate(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_addv, PyObject *__pyx_v_mode) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_252ghostUpdate(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;
@@ -100746,45 +107724,45 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_250ghostUpdate(struct PyPetscVec
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("ghostUpdate", 0);
 
-  /* "PETSc/Vec.pyx":775
+  /* "PETSc/Vec.pyx":781
  * 
  *     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)-1L))) __PYX_ERR(30, 775, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)((InsertMode)-1L)))) __PYX_ERR(30, 781, __pyx_L1_error)
   __pyx_v_caddv = __pyx_t_1;
 
-  /* "PETSc/Vec.pyx":776
+  /* "PETSc/Vec.pyx":782
  *     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)-1L))) __PYX_ERR(30, 776, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_scattermode(__pyx_v_mode); if (unlikely(__pyx_t_2 == ((ScatterMode)((ScatterMode)-1L)))) __PYX_ERR(30, 782, __pyx_L1_error)
   __pyx_v_csctm = __pyx_t_2;
 
-  /* "PETSc/Vec.pyx":777
+  /* "PETSc/Vec.pyx":783
  *         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_ERR(30, 777, __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 == ((int)-1))) __PYX_ERR(30, 783, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":778
+  /* "PETSc/Vec.pyx":784
  *         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_ERR(30, 778, __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 == ((int)-1))) __PYX_ERR(30, 784, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":774
+  /* "PETSc/Vec.pyx":780
  *         CHKERR( VecGhostUpdateEnd(self.vec, caddv, csctm) )
  * 
  *     def ghostUpdate(self, addv=None, mode=None):             # <<<<<<<<<<<<<<
@@ -100804,7 +107782,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_250ghostUpdate(struct PyPetscVec
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":780
+/* "PETSc/Vec.pyx":786
  *         CHKERR( VecGhostUpdateEnd(self.vec, caddv, csctm) )
  * 
  *     def setMPIGhost(self, ghosts):             # <<<<<<<<<<<<<<
@@ -100813,9 +107791,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_250ghostUpdate(struct PyPetscVec
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_255setMPIGhost(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_254setMPIGhost[] = "Vec.setMPIGhost(self, ghosts)\nAlternative to createGhost()";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_255setMPIGhost(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_ghosts = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -100828,6 +107806,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_253setMPIGhost(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -100838,7 +107817,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_253setMPIGhost(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_ERR(30, 780, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMPIGhost") < 0)) __PYX_ERR(30, 786, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -100849,20 +107828,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_253setMPIGhost(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_ERR(30, 780, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setMPIGhost", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 786, __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_252setMPIGhost(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_ghosts);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_254setMPIGhost(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_ghosts);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_252setMPIGhost(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_ghosts) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_254setMPIGhost(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_ghosts) {
   PetscInt __pyx_v_ng;
   PetscInt *__pyx_v_ig;
   PyObject *__pyx_r = NULL;
@@ -100872,7 +107851,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_252setMPIGhost(struct PyPetscVec
   __Pyx_RefNannySetupContext("setMPIGhost", 0);
   __Pyx_INCREF(__pyx_v_ghosts);
 
-  /* "PETSc/Vec.pyx":782
+  /* "PETSc/Vec.pyx":788
  *     def setMPIGhost(self, ghosts):
  *         "Alternative to createGhost()"
  *         cdef PetscInt ng=0, *ig=NULL             # <<<<<<<<<<<<<<
@@ -100882,28 +107861,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_252setMPIGhost(struct PyPetscVec
   __pyx_v_ng = 0;
   __pyx_v_ig = NULL;
 
-  /* "PETSc/Vec.pyx":783
+  /* "PETSc/Vec.pyx":789
  *         "Alternative to createGhost()"
  *         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_ERR(30, 783, __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, 789, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_ghosts, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Vec.pyx":784
+  /* "PETSc/Vec.pyx":790
  *         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_ERR(30, 784, __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 == ((int)-1))) __PYX_ERR(30, 790, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":780
+  /* "PETSc/Vec.pyx":786
  *         CHKERR( VecGhostUpdateEnd(self.vec, caddv, csctm) )
  * 
  *     def setMPIGhost(self, ghosts):             # <<<<<<<<<<<<<<
@@ -100925,18 +107904,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_252setMPIGhost(struct PyPetscVec
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":788
+/* "PETSc/Vec.pyx":794
  *     #
  * 
- *     def getSubVector(self, IS iset not None, Vec subvec=None):             # <<<<<<<<<<<<<<
+ *     def getSubVector(self, IS iset, Vec subvec=None):             # <<<<<<<<<<<<<<
  *         if subvec is None: subvec = Vec()
  *         else: CHKERR( VecDestroy(&subvec.vec) )
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_257getSubVector(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_256getSubVector[] = "Vec.getSubVector(self, IS iset, Vec subvec=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_257getSubVector(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_iset = 0;
   struct PyPetscVecObject *__pyx_v_subvec = 0;
   PyObject *__pyx_r = 0;
@@ -100951,7 +107930,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_255getSubVector(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -100960,6 +107941,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_255getSubVector(PyObject *__pyx_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_iset)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_subvec);
@@ -100967,11 +107949,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_255getSubVector(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getSubVector") < 0)) __PYX_ERR(30, 788, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getSubVector") < 0)) __PYX_ERR(30, 794, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -100982,15 +107965,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_255getSubVector(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getSubVector", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 788, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getSubVector", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 794, __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_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);
+  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, 1, "subvec", 0))) __PYX_ERR(30, 794, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_256getSubVector(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_iset, __pyx_v_subvec);
 
   /* function exit code */
   goto __pyx_L0;
@@ -101001,7 +107984,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_255getSubVector(PyObject *__pyx_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_254getSubVector(struct PyPetscVecObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset, struct PyPetscVecObject *__pyx_v_subvec) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_256getSubVector(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;
@@ -101011,9 +107994,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_254getSubVector(struct PyPetscVe
   __Pyx_RefNannySetupContext("getSubVector", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_subvec);
 
-  /* "PETSc/Vec.pyx":789
+  /* "PETSc/Vec.pyx":795
  * 
- *     def getSubVector(self, IS iset not None, Vec subvec=None):
+ *     def getSubVector(self, IS iset, Vec subvec=None):
  *         if subvec is None: subvec = Vec()             # <<<<<<<<<<<<<<
  *         else: CHKERR( VecDestroy(&subvec.vec) )
  *         CHKERR( VecGetSubVector(self.vec, iset.iset, &subvec.vec) )
@@ -101021,50 +108004,50 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_254getSubVector(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 *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 789, __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, 795, __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;
   }
 
-  /* "PETSc/Vec.pyx":790
- *     def getSubVector(self, IS iset not None, Vec subvec=None):
+  /* "PETSc/Vec.pyx":796
+ *     def getSubVector(self, IS iset, Vec subvec=None):
  *         if subvec is None: subvec = Vec()
  *         else: CHKERR( VecDestroy(&subvec.vec) )             # <<<<<<<<<<<<<<
  *         CHKERR( VecGetSubVector(self.vec, iset.iset, &subvec.vec) )
  *         return subvec
  */
   /*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_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecDestroy((&__pyx_v_subvec->vec))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(30, 796, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/Vec.pyx":791
+  /* "PETSc/Vec.pyx":797
  *         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_ERR(30, 791, __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 == ((int)-1))) __PYX_ERR(30, 797, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":792
+  /* "PETSc/Vec.pyx":798
  *         else: CHKERR( VecDestroy(&subvec.vec) )
  *         CHKERR( VecGetSubVector(self.vec, iset.iset, &subvec.vec) )
  *         return subvec             # <<<<<<<<<<<<<<
  * 
- *     def restoreSubVector(self, IS iset not None, Vec subvec not None):
+ *     def restoreSubVector(self, IS iset, Vec subvec):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_subvec));
   __pyx_r = ((PyObject *)__pyx_v_subvec);
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":788
+  /* "PETSc/Vec.pyx":794
  *     #
  * 
- *     def getSubVector(self, IS iset not None, Vec subvec=None):             # <<<<<<<<<<<<<<
+ *     def getSubVector(self, IS iset, Vec subvec=None):             # <<<<<<<<<<<<<<
  *         if subvec is None: subvec = Vec()
  *         else: CHKERR( VecDestroy(&subvec.vec) )
  */
@@ -101081,18 +108064,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_254getSubVector(struct PyPetscVe
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":794
+/* "PETSc/Vec.pyx":800
  *         return subvec
  * 
- *     def restoreSubVector(self, IS iset not None, Vec subvec not None):             # <<<<<<<<<<<<<<
+ *     def restoreSubVector(self, IS iset, Vec subvec):             # <<<<<<<<<<<<<<
  *         CHKERR( VecRestoreSubVector(self.vec, iset.iset, &subvec.vec) )
  * 
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_259restoreSubVector(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_258restoreSubVector[] = "Vec.restoreSubVector(self, IS iset, Vec subvec)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_259restoreSubVector(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_iset = 0;
   struct PyPetscVecObject *__pyx_v_subvec = 0;
   PyObject *__pyx_r = 0;
@@ -101106,7 +108089,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_257restoreSubVector(PyObject *__
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -101115,14 +108100,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_257restoreSubVector(PyObject *__
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_iset)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(30, 794, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("restoreSubVector", 1, 2, 2, 1); __PYX_ERR(30, 800, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "restoreSubVector") < 0)) __PYX_ERR(30, 794, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "restoreSubVector") < 0)) __PYX_ERR(30, 800, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -101135,15 +108121,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_257restoreSubVector(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("restoreSubVector", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 794, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("restoreSubVector", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 800, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iset), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iset", 0))) __PYX_ERR(30, 800, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_subvec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "subvec", 0))) __PYX_ERR(30, 800, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_258restoreSubVector(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_iset, __pyx_v_subvec);
 
   /* function exit code */
   goto __pyx_L0;
@@ -101154,25 +108140,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_257restoreSubVector(PyObject *__
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_256restoreSubVector(struct PyPetscVecObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset, struct PyPetscVecObject *__pyx_v_subvec) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_258restoreSubVector(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;
   __Pyx_RefNannySetupContext("restoreSubVector", 0);
 
-  /* "PETSc/Vec.pyx":795
+  /* "PETSc/Vec.pyx":801
  * 
- *     def restoreSubVector(self, IS iset not None, Vec subvec not None):
+ *     def restoreSubVector(self, IS iset, Vec subvec):
  *         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_ERR(30, 795, __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 == ((int)-1))) __PYX_ERR(30, 801, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":794
+  /* "PETSc/Vec.pyx":800
  *         return subvec
  * 
- *     def restoreSubVector(self, IS iset not None, Vec subvec not None):             # <<<<<<<<<<<<<<
+ *     def restoreSubVector(self, IS iset, Vec subvec):             # <<<<<<<<<<<<<<
  *         CHKERR( VecRestoreSubVector(self.vec, iset.iset, &subvec.vec) )
  * 
  */
@@ -101189,7 +108175,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_256restoreSubVector(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":797
+/* "PETSc/Vec.pyx":803
  *         CHKERR( VecRestoreSubVector(self.vec, iset.iset, &subvec.vec) )
  * 
  *     def getNestSubVecs(self):             # <<<<<<<<<<<<<<
@@ -101198,23 +108184,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_256restoreSubVector(struct PyPet
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_261getNestSubVecs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_260getNestSubVecs[] = "Vec.getNestSubVecs(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_261getNestSubVecs(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_258getNestSubVecs(((struct PyPetscVecObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_260getNestSubVecs(((struct PyPetscVecObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_258getNestSubVecs(struct PyPetscVecObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_260getNestSubVecs(struct PyPetscVecObject *__pyx_v_self) {
   PetscInt __pyx_v_N;
   Vec *__pyx_v_sx;
   PyObject *__pyx_v_output = NULL;
@@ -101229,7 +108215,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_258getNestSubVecs(struct PyPetsc
   int __pyx_t_5;
   __Pyx_RefNannySetupContext("getNestSubVecs", 0);
 
-  /* "PETSc/Vec.pyx":798
+  /* "PETSc/Vec.pyx":804
  * 
  *     def getNestSubVecs(self):
  *         cdef PetscInt N=0             # <<<<<<<<<<<<<<
@@ -101238,7 +108224,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_258getNestSubVecs(struct PyPetsc
  */
   __pyx_v_N = 0;
 
-  /* "PETSc/Vec.pyx":799
+  /* "PETSc/Vec.pyx":805
  *     def getNestSubVecs(self):
  *         cdef PetscInt N=0
  *         cdef PetscVec* sx=NULL             # <<<<<<<<<<<<<<
@@ -101247,28 +108233,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_258getNestSubVecs(struct PyPetsc
  */
   __pyx_v_sx = NULL;
 
-  /* "PETSc/Vec.pyx":800
+  /* "PETSc/Vec.pyx":806
  *         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_ERR(30, 800, __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 == ((int)-1))) __PYX_ERR(30, 806, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":801
+  /* "PETSc/Vec.pyx":807
  *         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_ERR(30, 801, __pyx_L1_error)
+  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 807, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_output = ((PyObject*)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Vec.pyx":802
+  /* "PETSc/Vec.pyx":808
  *         CHKERR( VecNestGetSubVecs(self.vec, &N, &sx) )
  *         output = []
  *         for i in range(N):             # <<<<<<<<<<<<<<
@@ -101279,19 +108265,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_258getNestSubVecs(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":803
+    /* "PETSc/Vec.pyx":809
  *         output = []
  *         for i in range(N):
  *           pyvec = Vec()             # <<<<<<<<<<<<<<
  *           pyvec.vec = sx[i]
  *           CHKERR( PetscObjectReference(<PetscObject> pyvec.vec) )
  */
-    __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_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 809, __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":804
+    /* "PETSc/Vec.pyx":810
  *         for i in range(N):
  *           pyvec = Vec()
  *           pyvec.vec = sx[i]             # <<<<<<<<<<<<<<
@@ -101300,26 +108286,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_258getNestSubVecs(struct PyPetsc
  */
     __pyx_v_pyvec->vec = (__pyx_v_sx[__pyx_v_i]);
 
-    /* "PETSc/Vec.pyx":805
+    /* "PETSc/Vec.pyx":811
  *           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_ERR(30, 805, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectReference(((PetscObject)__pyx_v_pyvec->vec))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(30, 811, __pyx_L1_error)
 
-    /* "PETSc/Vec.pyx":806
+    /* "PETSc/Vec.pyx":812
  *           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_ERR(30, 806, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_output, ((PyObject *)__pyx_v_pyvec)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(30, 812, __pyx_L1_error)
   }
 
-  /* "PETSc/Vec.pyx":808
+  /* "PETSc/Vec.pyx":814
  *           output.append(pyvec)
  * 
  *         return output             # <<<<<<<<<<<<<<
@@ -101331,7 +108317,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_258getNestSubVecs(struct PyPetsc
   __pyx_r = __pyx_v_output;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":797
+  /* "PETSc/Vec.pyx":803
  *         CHKERR( VecRestoreSubVector(self.vec, iset.iset, &subvec.vec) )
  * 
  *     def getNestSubVecs(self):             # <<<<<<<<<<<<<<
@@ -101352,7 +108338,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_258getNestSubVecs(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":810
+/* "PETSc/Vec.pyx":816
  *         return output
  * 
  *     def setNestSubVecs(self, sx, idxm=None):             # <<<<<<<<<<<<<<
@@ -101361,9 +108347,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_258getNestSubVecs(struct PyPetsc
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_263setNestSubVecs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Vec_262setNestSubVecs[] = "Vec.setNestSubVecs(self, sx, idxm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_263setNestSubVecs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_sx = 0;
   PyObject *__pyx_v_idxm = 0;
   PyObject *__pyx_r = 0;
@@ -101378,7 +108364,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_261setNestSubVecs(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -101387,6 +108375,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_261setNestSubVecs(PyObject *__py
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_sx)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_idxm);
@@ -101394,11 +108383,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_261setNestSubVecs(PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setNestSubVecs") < 0)) __PYX_ERR(30, 810, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setNestSubVecs") < 0)) __PYX_ERR(30, 816, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -101409,20 +108399,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Vec_261setNestSubVecs(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setNestSubVecs", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 810, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setNestSubVecs", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(30, 816, __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_260setNestSubVecs(((struct PyPetscVecObject *)__pyx_v_self), __pyx_v_sx, __pyx_v_idxm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Vec_262setNestSubVecs(((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_260setNestSubVecs(struct PyPetscVecObject *__pyx_v_self, PyObject *__pyx_v_sx, PyObject *__pyx_v_idxm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_262setNestSubVecs(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;
@@ -101442,7 +108432,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_260setNestSubVecs(struct PyPetsc
   __Pyx_RefNannySetupContext("setNestSubVecs", 0);
   __Pyx_INCREF(__pyx_v_idxm);
 
-  /* "PETSc/Vec.pyx":811
+  /* "PETSc/Vec.pyx":817
  * 
  *     def setNestSubVecs(self, sx, idxm=None):
  *         if idxm is None: idxm = range(len(sx))             # <<<<<<<<<<<<<<
@@ -101452,15 +108442,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_260setNestSubVecs(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_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_t_3 = PyObject_Length(__pyx_v_sx); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(30, 817, __pyx_L1_error)
+    __pyx_t_4 = PyInt_FromSsize_t(__pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 817, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(30, 811, __pyx_L1_error)
+    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(30, 817, __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_ERR(30, 811, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_Call(__pyx_builtin_range, __pyx_t_5, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 817, __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);
@@ -101468,7 +108458,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_260setNestSubVecs(struct PyPetsc
     goto __pyx_L3;
   }
 
-  /* "PETSc/Vec.pyx":812
+  /* "PETSc/Vec.pyx":818
  *     def setNestSubVecs(self, sx, idxm=None):
  *         if idxm is None: idxm = range(len(sx))
  *         else: assert len(idxm) == len(sx)             # <<<<<<<<<<<<<<
@@ -101478,18 +108468,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_260setNestSubVecs(struct PyPetsc
   /*else*/ {
     #ifndef CYTHON_WITHOUT_ASSERTIONS
     if (unlikely(!Py_OptimizeFlag)) {
-      __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)
+      __pyx_t_3 = PyObject_Length(__pyx_v_idxm); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(30, 818, __pyx_L1_error)
+      __pyx_t_6 = PyObject_Length(__pyx_v_sx); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(30, 818, __pyx_L1_error)
       if (unlikely(!((__pyx_t_3 == __pyx_t_6) != 0))) {
         PyErr_SetNone(PyExc_AssertionError);
-        __PYX_ERR(30, 812, __pyx_L1_error)
+        __PYX_ERR(30, 818, __pyx_L1_error)
       }
     }
     #endif
   }
   __pyx_L3:;
 
-  /* "PETSc/Vec.pyx":813
+  /* "PETSc/Vec.pyx":819
  *         if idxm is None: idxm = range(len(sx))
  *         else: assert len(idxm) == len(sx)
  *         cdef PetscInt N = 0             # <<<<<<<<<<<<<<
@@ -101498,7 +108488,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_260setNestSubVecs(struct PyPetsc
  */
   __pyx_v_N = 0;
 
-  /* "PETSc/Vec.pyx":814
+  /* "PETSc/Vec.pyx":820
  *         else: assert len(idxm) == len(sx)
  *         cdef PetscInt N = 0
  *         cdef PetscInt* cidxm = NULL             # <<<<<<<<<<<<<<
@@ -101507,19 +108497,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_260setNestSubVecs(struct PyPetsc
  */
   __pyx_v_cidxm = NULL;
 
-  /* "PETSc/Vec.pyx":815
+  /* "PETSc/Vec.pyx":821
  *         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_ERR(30, 815, __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, 821, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF_SET(__pyx_v_idxm, __pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "PETSc/Vec.pyx":818
+  /* "PETSc/Vec.pyx":824
  * 
  * 
  *         cdef PetscVec* csx = NULL             # <<<<<<<<<<<<<<
@@ -101528,22 +108518,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_260setNestSubVecs(struct PyPetsc
  */
   __pyx_v_csx = NULL;
 
-  /* "PETSc/Vec.pyx":819
+  /* "PETSc/Vec.pyx":825
  * 
  *         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_ERR(30, 819, __pyx_L1_error)
+  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_N)); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 825, __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_ERR(30, 819, __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, 825, __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":820
+  /* "PETSc/Vec.pyx":826
  *         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             # <<<<<<<<<<<<<<
@@ -101552,24 +108542,24 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_260setNestSubVecs(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)) __PYX_ERR(30, 820, __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, 826, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    if (!(likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_8petsc4py_5PETSc_Vec)))) __PYX_ERR(30, 820, __pyx_L1_error)
+    if (!(likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_8petsc4py_5PETSc_Vec)))) __PYX_ERR(30, 826, __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":822
+  /* "PETSc/Vec.pyx":828
  *         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_ERR(30, 822, __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 == ((int)-1))) __PYX_ERR(30, 828, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":810
+  /* "PETSc/Vec.pyx":816
  *         return output
  * 
  *     def setNestSubVecs(self, sx, idxm=None):             # <<<<<<<<<<<<<<
@@ -101593,7 +108583,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_260setNestSubVecs(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":827
+/* "PETSc/Vec.pyx":833
  * 
  *     property sizes:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -101622,7 +108612,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_5sizes___get__(struct PyPetscVec
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Vec.pyx":828
+  /* "PETSc/Vec.pyx":834
  *     property sizes:
  *         def __get__(self):
  *             return self.getSizes()             # <<<<<<<<<<<<<<
@@ -101630,10 +108620,10 @@ 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_ERR(30, 828, __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, 834, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -101643,10 +108633,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_ERR(30, 828, __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_ERR(30, 828, __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;
@@ -101654,7 +108644,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_5sizes___get__(struct PyPetscVec
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":827
+  /* "PETSc/Vec.pyx":833
  * 
  *     property sizes:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -101675,7 +108665,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_5sizes___get__(struct PyPetscVec
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":829
+/* "PETSc/Vec.pyx":835
  *         def __get__(self):
  *             return self.getSizes()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -101705,17 +108695,17 @@ static int __pyx_pf_8petsc4py_5PETSc_3Vec_5sizes_2__set__(struct PyPetscVecObjec
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/Vec.pyx":830
+  /* "PETSc/Vec.pyx":836
  *             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_ERR(30, 830, __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, 836, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -101725,23 +108715,41 @@ 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_ERR(30, 830, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 836, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(30, 830, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 836, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 836, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 836, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 836, __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":829
+  /* "PETSc/Vec.pyx":835
  *         def __get__(self):
  *             return self.getSizes()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -101764,7 +108772,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3Vec_5sizes_2__set__(struct PyPetscVecObjec
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":833
+/* "PETSc/Vec.pyx":839
  * 
  *     property size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -101793,7 +108801,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_4size___get__(struct PyPetscVecO
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Vec.pyx":834
+  /* "PETSc/Vec.pyx":840
  *     property size:
  *         def __get__(self):
  *             return self.getSize()             # <<<<<<<<<<<<<<
@@ -101801,10 +108809,10 @@ 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_ERR(30, 834, __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, 840, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -101814,10 +108822,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_ERR(30, 834, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 840, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 834, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 840, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -101825,7 +108833,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_4size___get__(struct PyPetscVecO
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":833
+  /* "PETSc/Vec.pyx":839
  * 
  *     property size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -101846,7 +108854,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_4size___get__(struct PyPetscVecO
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":837
+/* "PETSc/Vec.pyx":843
  * 
  *     property local_size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -101875,7 +108883,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_10local_size___get__(struct PyPe
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Vec.pyx":838
+  /* "PETSc/Vec.pyx":844
  *     property local_size:
  *         def __get__(self):
  *             return self.getLocalSize()             # <<<<<<<<<<<<<<
@@ -101883,10 +108891,10 @@ 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_ERR(30, 838, __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, 844, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -101896,10 +108904,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_ERR(30, 838, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 844, __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(30, 838, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 844, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -101907,7 +108915,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_10local_size___get__(struct PyPe
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":837
+  /* "PETSc/Vec.pyx":843
  * 
  *     property local_size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -101928,7 +108936,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_10local_size___get__(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":841
+/* "PETSc/Vec.pyx":847
  * 
  *     property block_size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -101957,7 +108965,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_10block_size___get__(struct PyPe
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Vec.pyx":842
+  /* "PETSc/Vec.pyx":848
  *     property block_size:
  *         def __get__(self):
  *             return self.getBlockSize()             # <<<<<<<<<<<<<<
@@ -101965,10 +108973,10 @@ 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_ERR(30, 842, __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, 848, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -101978,10 +108986,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_ERR(30, 842, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 848, __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(30, 842, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 848, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -101989,7 +108997,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_10block_size___get__(struct PyPe
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":841
+  /* "PETSc/Vec.pyx":847
  * 
  *     property block_size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -102010,7 +109018,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_10block_size___get__(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":845
+/* "PETSc/Vec.pyx":851
  * 
  *     property owner_range:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -102039,7 +109047,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_11owner_range___get__(struct PyP
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Vec.pyx":846
+  /* "PETSc/Vec.pyx":852
  *     property owner_range:
  *         def __get__(self):
  *             return self.getOwnershipRange()             # <<<<<<<<<<<<<<
@@ -102047,10 +109055,10 @@ 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_ERR(30, 846, __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, 852, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -102060,10 +109068,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_ERR(30, 846, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 852, __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(30, 846, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 852, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -102071,7 +109079,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_11owner_range___get__(struct PyP
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":845
+  /* "PETSc/Vec.pyx":851
  * 
  *     property owner_range:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -102092,7 +109100,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_11owner_range___get__(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":849
+/* "PETSc/Vec.pyx":855
  * 
  *     property owner_ranges:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -102121,7 +109129,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_12owner_ranges___get__(struct Py
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Vec.pyx":850
+  /* "PETSc/Vec.pyx":856
  *     property owner_ranges:
  *         def __get__(self):
  *             return self.getOwnershipRanges()             # <<<<<<<<<<<<<<
@@ -102129,10 +109137,10 @@ 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_ERR(30, 850, __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, 856, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -102142,10 +109150,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_ERR(30, 850, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 856, __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(30, 850, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 856, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -102153,7 +109161,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_12owner_ranges___get__(struct Py
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":849
+  /* "PETSc/Vec.pyx":855
  * 
  *     property owner_ranges:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -102174,7 +109182,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_12owner_ranges___get__(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":854
+/* "PETSc/Vec.pyx":860
  *     property buffer_w:
  *         "Vec buffer (writable)"
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -102203,7 +109211,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_8buffer_w___get__(struct PyPetsc
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Vec.pyx":855
+  /* "PETSc/Vec.pyx":861
  *         "Vec buffer (writable)"
  *         def __get__(self):
  *             return self.getBuffer()             # <<<<<<<<<<<<<<
@@ -102211,10 +109219,10 @@ 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_ERR(30, 855, __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, 861, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -102224,10 +109232,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_ERR(30, 855, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 861, __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(30, 855, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 861, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -102235,7 +109243,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_8buffer_w___get__(struct PyPetsc
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":854
+  /* "PETSc/Vec.pyx":860
  *     property buffer_w:
  *         "Vec buffer (writable)"
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -102256,7 +109264,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_8buffer_w___get__(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":859
+/* "PETSc/Vec.pyx":865
  *     property buffer_r:
  *         "Vec buffer (read-only)"
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -102284,7 +109292,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_8buffer_r___get__(struct PyPetsc
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Vec.pyx":860
+  /* "PETSc/Vec.pyx":866
  *         "Vec buffer (read-only)"
  *         def __get__(self):
  *             return self.getBuffer(True)             # <<<<<<<<<<<<<<
@@ -102292,16 +109300,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_ERR(30, 860, __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, 866, __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_ERR(30, 860, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__57, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 866, __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":859
+  /* "PETSc/Vec.pyx":865
  *     property buffer_r:
  *         "Vec buffer (read-only)"
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -102321,7 +109329,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_8buffer_r___get__(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":864
+/* "PETSc/Vec.pyx":870
  *     property array_w:
  *         "Vec array (writable)"
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -102350,7 +109358,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_7array_w___get__(struct PyPetscV
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Vec.pyx":865
+  /* "PETSc/Vec.pyx":871
  *         "Vec array (writable)"
  *         def __get__(self):
  *             return self.getArray()             # <<<<<<<<<<<<<<
@@ -102358,10 +109366,10 @@ 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_ERR(30, 865, __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, 871, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -102371,10 +109379,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_ERR(30, 865, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 871, __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(30, 865, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 871, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -102382,7 +109390,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_7array_w___get__(struct PyPetscV
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":864
+  /* "PETSc/Vec.pyx":870
  *     property array_w:
  *         "Vec array (writable)"
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -102403,7 +109411,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_7array_w___get__(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":866
+/* "PETSc/Vec.pyx":872
  *         def __get__(self):
  *             return self.getArray()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -102442,17 +109450,17 @@ static int __pyx_pf_8petsc4py_5PETSc_3Vec_7array_w_2__set__(struct PyPetscVecObj
   int __pyx_t_11;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/Vec.pyx":867
+  /* "PETSc/Vec.pyx":873
  *             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_ERR(30, 867, __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, 873, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -102462,17 +109470,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_ERR(30, 867, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 873, __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(30, 867, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 873, __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":868
+  /* "PETSc/Vec.pyx":874
  *         def __set__(self, value):
  *             cdef buf = self.getBuffer()
  *             with buf as array: array[:] = value             # <<<<<<<<<<<<<<
@@ -102480,12 +109488,12 @@ 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_ERR(30, 868, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_LookupSpecial(__pyx_v_buf, __pyx_n_s_exit); if (unlikely(!__pyx_t_4)) __PYX_ERR(30, 874, __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_ERR(30, 868, __pyx_L3_error)
+    __pyx_t_2 = __Pyx_PyObject_LookupSpecial(__pyx_v_buf, __pyx_n_s_enter); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 874, __pyx_L3_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_3 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    if (CYTHON_UNPACK_METHODS && 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);
@@ -102495,10 +109503,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_ERR(30, 868, __pyx_L3_error)
+      __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 874, __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_ERR(30, 868, __pyx_L3_error)
+      __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 874, __pyx_L3_error)
     }
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -102515,33 +109523,32 @@ 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__55, 0, 0, 1) < 0) __PYX_ERR(30, 868, __pyx_L7_error)
+          if (__Pyx_PyObject_SetSlice(__pyx_v_array, __pyx_v_value, 0, 0, NULL, NULL, &__pyx_slice__58, 0, 0, 1) < 0) __PYX_ERR(30, 874, __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;
+        goto __pyx_L12_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_ERR(30, 868, __pyx_L9_except_error)
+          if (__Pyx_GetException(&__pyx_t_2, &__pyx_t_1, &__pyx_t_3) < 0) __PYX_ERR(30, 874, __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_ERR(30, 868, __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, 874, __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_ERR(30, 868, __pyx_L9_except_error)
+          if (unlikely(!__pyx_t_9)) __PYX_ERR(30, 874, __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_ERR(30, 868, __pyx_L9_except_error)
+          if (__pyx_t_10 < 0) __PYX_ERR(30, 874, __pyx_L9_except_error)
           __pyx_t_11 = ((!(__pyx_t_10 != 0)) != 0);
           if (__pyx_t_11) {
             __Pyx_GIVEREF(__pyx_t_2);
@@ -102549,7 +109556,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3Vec_7array_w_2__set__(struct PyPetscVecObj
             __Pyx_XGIVEREF(__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_ERR(30, 868, __pyx_L9_except_error)
+            __PYX_ERR(30, 874, __pyx_L9_except_error)
           }
           __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
           __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
@@ -102557,27 +109564,25 @@ 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);
         __Pyx_ExceptionReset(__pyx_t_5, __pyx_t_6, __pyx_t_7);
-        __pyx_L14_try_end:;
+        __pyx_L12_try_end:;
       }
     }
     /*finally:*/ {
       /*normal exit:*/{
         if (__pyx_t_4) {
-          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__56, NULL);
+          __pyx_t_7 = __Pyx_PyObject_Call(__pyx_t_4, __pyx_tuple__59, NULL);
           __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
-          if (unlikely(!__pyx_t_7)) __PYX_ERR(30, 868, __pyx_L1_error)
+          if (unlikely(!__pyx_t_7)) __PYX_ERR(30, 874, __pyx_L1_error)
           __Pyx_GOTREF(__pyx_t_7);
           __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
         }
@@ -102585,14 +109590,14 @@ static int __pyx_pf_8petsc4py_5PETSc_3Vec_7array_w_2__set__(struct PyPetscVecObj
       }
       __pyx_L6:;
     }
-    goto __pyx_L18;
+    goto __pyx_L16;
     __pyx_L3_error:;
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
     goto __pyx_L1_error;
-    __pyx_L18:;
+    __pyx_L16:;
   }
 
-  /* "PETSc/Vec.pyx":866
+  /* "PETSc/Vec.pyx":872
  *         def __get__(self):
  *             return self.getArray()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -102617,7 +109622,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3Vec_7array_w_2__set__(struct PyPetscVecObj
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":872
+/* "PETSc/Vec.pyx":878
  *     property array_r:
  *         "Vec array (read-only)"
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -102645,7 +109650,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_7array_r___get__(struct PyPetscV
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Vec.pyx":873
+  /* "PETSc/Vec.pyx":879
  *         "Vec array (read-only)"
  *         def __get__(self):
  *             return self.getArray(True)             # <<<<<<<<<<<<<<
@@ -102653,16 +109658,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_ERR(30, 873, __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, 879, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __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_t_2 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_tuple__60, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(30, 879, __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":872
+  /* "PETSc/Vec.pyx":878
  *     property array_r:
  *         "Vec array (read-only)"
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -102682,7 +109687,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_7array_r___get__(struct PyPetscV
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":876
+/* "PETSc/Vec.pyx":882
  * 
  *     property buffer:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -102709,7 +109714,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_6buffer___get__(struct PyPetscVe
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Vec.pyx":877
+  /* "PETSc/Vec.pyx":883
  *     property buffer:
  *         def __get__(self):
  *             return self.buffer_w             # <<<<<<<<<<<<<<
@@ -102717,13 +109722,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_ERR(30, 877, __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, 883, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":876
+  /* "PETSc/Vec.pyx":882
  * 
  *     property buffer:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -102742,7 +109747,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_6buffer___get__(struct PyPetscVe
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":880
+/* "PETSc/Vec.pyx":886
  * 
  *     property array:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -102769,7 +109774,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_5array___get__(struct PyPetscVec
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Vec.pyx":881
+  /* "PETSc/Vec.pyx":887
  *     property array:
  *         def __get__(self):
  *             return self.array_w             # <<<<<<<<<<<<<<
@@ -102777,13 +109782,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_ERR(30, 881, __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, 887, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":880
+  /* "PETSc/Vec.pyx":886
  * 
  *     property array:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -102802,7 +109807,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_5array___get__(struct PyPetscVec
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":882
+/* "PETSc/Vec.pyx":888
  *         def __get__(self):
  *             return self.array_w
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -102828,16 +109833,16 @@ static int __pyx_pf_8petsc4py_5PETSc_3Vec_5array_2__set__(struct PyPetscVecObjec
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/Vec.pyx":883
+  /* "PETSc/Vec.pyx":889
  *             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_ERR(30, 883, __pyx_L1_error)
+  if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_array_w, __pyx_v_value) < 0) __PYX_ERR(30, 889, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":882
+  /* "PETSc/Vec.pyx":888
  *         def __get__(self):
  *             return self.array_w
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -102856,7 +109861,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3Vec_5array_2__set__(struct PyPetscVecObjec
   return __pyx_r;
 }
 
-/* "PETSc/Vec.pyx":888
+/* "PETSc/Vec.pyx":894
  * 
  *     property __array_interface__:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -102886,17 +109891,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Vec_19__array_interface_____get__(st
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Vec.pyx":889
+  /* "PETSc/Vec.pyx":895
  *     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_ERR(30, 889, __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, 895, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -102906,17 +109911,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_ERR(30, 889, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 895, __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(30, 889, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 895, __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":890
+  /* "PETSc/Vec.pyx":896
  *         def __get__(self):
  *             cdef buf = self.getBuffer()
  *             return buf.__array_interface__             # <<<<<<<<<<<<<<
@@ -102924,13 +109929,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_ERR(30, 890, __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, 896, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Vec.pyx":888
+  /* "PETSc/Vec.pyx":894
  * 
  *     property __array_interface__:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -103041,9 +110046,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_3__call__(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -103052,16 +110061,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_3__call__(PyObject *__pyx_v_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(31, 13, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mode);
@@ -103074,7 +110086,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_3__call__(PyObject *__pyx_v_
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -103107,7 +110121,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_2__call__(struct PyPetscScat
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
-  Py_ssize_t __pyx_t_4;
+  int __pyx_t_4;
   PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("__call__", 0);
 
@@ -103122,7 +110136,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_2__call__(struct PyPetscScat
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   __pyx_t_4 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -103132,26 +110146,44 @@ 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_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;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_2)) {
+    PyObject *__pyx_temp[5] = {__pyx_t_3, __pyx_v_x, __pyx_v_y, __pyx_v_addv, __pyx_v_mode};
+    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 14, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_GOTREF(__pyx_t_1);
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+    PyObject *__pyx_temp[5] = {__pyx_t_3, __pyx_v_x, __pyx_v_y, __pyx_v_addv, __pyx_v_mode};
+    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 4+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 14, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_GOTREF(__pyx_t_1);
+  } else
+  #endif
+  {
+    __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;
+    }
+    __Pyx_INCREF(__pyx_v_x);
+    __Pyx_GIVEREF(__pyx_v_x);
+    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_x);
+    __Pyx_INCREF(__pyx_v_y);
+    __Pyx_GIVEREF(__pyx_v_y);
+    PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_y);
+    __Pyx_INCREF(__pyx_v_addv);
+    __Pyx_GIVEREF(__pyx_v_addv);
+    PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_addv);
+    __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_ERR(31, 14, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
-  __Pyx_INCREF(__pyx_v_x);
-  __Pyx_GIVEREF(__pyx_v_x);
-  PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_v_x);
-  __Pyx_INCREF(__pyx_v_y);
-  __Pyx_GIVEREF(__pyx_v_y);
-  PyTuple_SET_ITEM(__pyx_t_5, 1+__pyx_t_4, __pyx_v_y);
-  __Pyx_INCREF(__pyx_v_addv);
-  __Pyx_GIVEREF(__pyx_v_addv);
-  PyTuple_SET_ITEM(__pyx_t_5, 2+__pyx_t_4, __pyx_v_addv);
-  __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_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;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
@@ -103204,6 +110236,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_5view(PyObject *__pyx_v_self
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -103221,6 +110254,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_5view(PyObject *__pyx_v_self
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -103287,7 +110321,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_ERR(31, 21, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScatterView(__pyx_v_self->sct, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(31, 21, __pyx_L1_error)
 
   /* "PETSc/Scatter.pyx":18
  *     #
@@ -103347,14 +110381,14 @@ 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_ERR(31, 24, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecScatterDestroy((&__pyx_v_self->sct))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(31, 24, __pyx_L1_error)
 
   /* "PETSc/Scatter.pyx":25
  *     def destroy(self):
  *         CHKERR( VecScatterDestroy(&self.sct) )
  *         return self             # <<<<<<<<<<<<<<
  * 
- *     def create(self, Vec vec_from not None, IS is_from,
+ *     def create(self, Vec vec_from, IS is_from or None,
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
@@ -103382,8 +110416,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_6destroy(struct PyPetscScatt
 /* "PETSc/Scatter.pyx":27
  *         return self
  * 
- *     def create(self, Vec vec_from not None, IS is_from,             # <<<<<<<<<<<<<<
- *                Vec vec_to not None, IS is_to):
+ *     def create(self, Vec vec_from, IS is_from or None,             # <<<<<<<<<<<<<<
+ *                Vec vec_to, IS is_to or None):
  *         cdef PetscIS cisfrom = NULL, cisto = NULL
  */
 
@@ -103406,9 +110440,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_9create(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -103417,16 +110455,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_9create(PyObject *__pyx_v_se
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vec_from)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(31, 27, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(31, 27, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_is_to)) != 0)) kw_args--;
         else {
@@ -103485,8 +110526,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_8create(struct PyPetscScatte
   __Pyx_RefNannySetupContext("create", 0);
 
   /* "PETSc/Scatter.pyx":29
- *     def create(self, Vec vec_from not None, IS is_from,
- *                Vec vec_to not None, IS is_to):
+ *     def create(self, Vec vec_from, IS is_from or None,
+ *                Vec vec_to, IS is_to or None):
  *         cdef PetscIS cisfrom = NULL, cisto = NULL             # <<<<<<<<<<<<<<
  *         if is_from is not None: cisfrom = is_from.iset
  *         if is_to   is not None: cisto   = is_to.iset
@@ -103495,7 +110536,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_8create(struct PyPetscScatte
   __pyx_v_cisto = NULL;
 
   /* "PETSc/Scatter.pyx":30
- *                Vec vec_to not None, IS is_to):
+ *                Vec vec_to, IS is_to or None):
  *         cdef PetscIS cisfrom = NULL, cisto = NULL
  *         if is_from is not None: cisfrom = is_from.iset             # <<<<<<<<<<<<<<
  *         if is_to   is not None: cisto   = is_to.iset
@@ -103538,7 +110579,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_ERR(31, 33, __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 == ((int)-1))) __PYX_ERR(31, 33, __pyx_L1_error)
 
   /* "PETSc/Scatter.pyx":35
  *         CHKERR( VecScatterCreate(
@@ -103565,8 +110606,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_8create(struct PyPetscScatte
   /* "PETSc/Scatter.pyx":27
  *         return self
  * 
- *     def create(self, Vec vec_from not None, IS is_from,             # <<<<<<<<<<<<<<
- *                Vec vec_to not None, IS is_to):
+ *     def create(self, Vec vec_from, IS is_from or None,             # <<<<<<<<<<<<<<
+ *                Vec vec_to, IS is_to or None):
  *         cdef PetscIS cisfrom = NULL, cisto = NULL
  */
 
@@ -103632,7 +110673,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_ERR(31, 40, __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 == ((int)-1))) __PYX_ERR(31, 40, __pyx_L1_error)
 
   /* "PETSc/Scatter.pyx":41
  *         cdef Scatter scatter = Scatter()
@@ -103669,7 +110710,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_10copy(struct PyPetscScatter
 /* "PETSc/Scatter.pyx":44
  * 
  *     @classmethod
- *     def toAll(cls, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def toAll(cls, Vec vec):             # <<<<<<<<<<<<<<
  *         cdef Scatter scatter = Scatter()
  *         cdef Vec ovec = Vec()
  */
@@ -103690,6 +110731,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_13toAll(PyObject *__pyx_v_cl
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -103740,7 +110782,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_12toAll(CYTHON_UNUSED PyType
 
   /* "PETSc/Scatter.pyx":45
  *     @classmethod
- *     def toAll(cls, Vec vec not None):
+ *     def toAll(cls, Vec vec):
  *         cdef Scatter scatter = Scatter()             # <<<<<<<<<<<<<<
  *         cdef Vec ovec = Vec()
  *         CHKERR( VecScatterCreateToAll(
@@ -103751,7 +110793,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_12toAll(CYTHON_UNUSED PyType
   __pyx_t_1 = 0;
 
   /* "PETSc/Scatter.pyx":46
- *     def toAll(cls, Vec vec not None):
+ *     def toAll(cls, Vec vec):
  *         cdef Scatter scatter = Scatter()
  *         cdef Vec ovec = Vec()             # <<<<<<<<<<<<<<
  *         CHKERR( VecScatterCreateToAll(
@@ -103769,7 +110811,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_12toAll(CYTHON_UNUSED PyType
  *             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_ERR(31, 47, __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 == ((int)-1))) __PYX_ERR(31, 47, __pyx_L1_error)
 
   /* "PETSc/Scatter.pyx":49
  *         CHKERR( VecScatterCreateToAll(
@@ -103794,7 +110836,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_12toAll(CYTHON_UNUSED PyType
   /* "PETSc/Scatter.pyx":44
  * 
  *     @classmethod
- *     def toAll(cls, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def toAll(cls, Vec vec):             # <<<<<<<<<<<<<<
  *         cdef Scatter scatter = Scatter()
  *         cdef Vec ovec = Vec()
  */
@@ -103815,7 +110857,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_12toAll(CYTHON_UNUSED PyType
 /* "PETSc/Scatter.pyx":52
  * 
  *     @classmethod
- *     def toZero(cls, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def toZero(cls, Vec vec):             # <<<<<<<<<<<<<<
  *         cdef Scatter scatter = Scatter()
  *         cdef Vec ovec = Vec()
  */
@@ -103836,6 +110878,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_15toZero(PyObject *__pyx_v_c
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -103886,7 +110929,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_14toZero(CYTHON_UNUSED PyTyp
 
   /* "PETSc/Scatter.pyx":53
  *     @classmethod
- *     def toZero(cls, Vec vec not None):
+ *     def toZero(cls, Vec vec):
  *         cdef Scatter scatter = Scatter()             # <<<<<<<<<<<<<<
  *         cdef Vec ovec = Vec()
  *         CHKERR( VecScatterCreateToZero(
@@ -103897,7 +110940,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_14toZero(CYTHON_UNUSED PyTyp
   __pyx_t_1 = 0;
 
   /* "PETSc/Scatter.pyx":54
- *     def toZero(cls, Vec vec not None):
+ *     def toZero(cls, Vec vec):
  *         cdef Scatter scatter = Scatter()
  *         cdef Vec ovec = Vec()             # <<<<<<<<<<<<<<
  *         CHKERR( VecScatterCreateToZero(
@@ -103915,7 +110958,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_14toZero(CYTHON_UNUSED PyTyp
  *             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_ERR(31, 55, __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 == ((int)-1))) __PYX_ERR(31, 55, __pyx_L1_error)
 
   /* "PETSc/Scatter.pyx":57
  *         CHKERR( VecScatterCreateToZero(
@@ -103940,7 +110983,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_14toZero(CYTHON_UNUSED PyTyp
   /* "PETSc/Scatter.pyx":52
  * 
  *     @classmethod
- *     def toZero(cls, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def toZero(cls, Vec vec):             # <<<<<<<<<<<<<<
  *         cdef Scatter scatter = Scatter()
  *         cdef Vec ovec = Vec()
  */
@@ -103961,9 +111004,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_14toZero(CYTHON_UNUSED PyTyp
 /* "PETSc/Scatter.pyx":60
  *     #
  * 
- *     def begin(self, Vec vec_from not None, Vec vec_to not None,             # <<<<<<<<<<<<<<
- *               addv=None, mode=None):
+ *     def begin(self, Vec vec_from, Vec vec_to, addv=None, mode=None):             # <<<<<<<<<<<<<<
  *         cdef PetscInsertMode  caddv = insertmode(addv)
+ *         cdef PetscScatterMode csctm = scattermode(mode)
  */
 
 /* Python wrapper */
@@ -103980,14 +111023,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_17begin(PyObject *__pyx_v_se
   {
     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_vec_from,&__pyx_n_s_vec_to,&__pyx_n_s_addv,&__pyx_n_s_mode,0};
     PyObject* values[4] = {0,0,0,0};
-
-    /* "PETSc/Scatter.pyx":61
- * 
- *     def begin(self, Vec vec_from not None, Vec vec_to not None,
- *               addv=None, mode=None):             # <<<<<<<<<<<<<<
- *         cdef PetscInsertMode  caddv = insertmode(addv)
- *         cdef PetscScatterMode csctm = scattermode(mode)
- */
     values[2] = ((PyObject *)Py_None);
     values[3] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
@@ -103995,9 +111030,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_17begin(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -104006,16 +111045,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_17begin(PyObject *__pyx_v_se
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vec_from)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(31, 60, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mode);
@@ -104028,7 +111070,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_17begin(PyObject *__pyx_v_se
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -104052,14 +111096,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_17begin(PyObject *__pyx_v_se
   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
- *     #
- * 
- *     def begin(self, Vec vec_from not None, Vec vec_to not None,             # <<<<<<<<<<<<<<
- *               addv=None, mode=None):
- *         cdef PetscInsertMode  caddv = insertmode(addv)
- */
-
   /* function exit code */
   goto __pyx_L0;
   __pyx_L1_error:;
@@ -104079,41 +111115,41 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_16begin(struct PyPetscScatte
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("begin", 0);
 
-  /* "PETSc/Scatter.pyx":62
- *     def begin(self, Vec vec_from not None, Vec vec_to not None,
- *               addv=None, mode=None):
+  /* "PETSc/Scatter.pyx":61
+ * 
+ *     def begin(self, Vec vec_from, Vec vec_to, addv=None, mode=None):
  *         cdef PetscInsertMode  caddv = insertmode(addv)             # <<<<<<<<<<<<<<
  *         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)-1L))) __PYX_ERR(31, 62, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)((InsertMode)-1L)))) __PYX_ERR(31, 61, __pyx_L1_error)
   __pyx_v_caddv = __pyx_t_1;
 
-  /* "PETSc/Scatter.pyx":63
- *               addv=None, mode=None):
+  /* "PETSc/Scatter.pyx":62
+ *     def begin(self, Vec vec_from, Vec vec_to, addv=None, mode=None):
  *         cdef PetscInsertMode  caddv = insertmode(addv)
  *         cdef PetscScatterMode csctm = scattermode(mode)             # <<<<<<<<<<<<<<
  *         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)-1L))) __PYX_ERR(31, 63, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_scattermode(__pyx_v_mode); if (unlikely(__pyx_t_2 == ((ScatterMode)((ScatterMode)-1L)))) __PYX_ERR(31, 62, __pyx_L1_error)
   __pyx_v_csctm = __pyx_t_2;
 
-  /* "PETSc/Scatter.pyx":64
+  /* "PETSc/Scatter.pyx":63
  *         cdef PetscInsertMode  caddv = insertmode(addv)
  *         cdef PetscScatterMode csctm = scattermode(mode)
  *         CHKERR( VecScatterBegin(self.sct, vec_from.vec, vec_to.vec,             # <<<<<<<<<<<<<<
  *                                 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_ERR(31, 64, __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 == ((int)-1))) __PYX_ERR(31, 63, __pyx_L1_error)
 
   /* "PETSc/Scatter.pyx":60
  *     #
  * 
- *     def begin(self, Vec vec_from not None, Vec vec_to not None,             # <<<<<<<<<<<<<<
- *               addv=None, mode=None):
+ *     def begin(self, Vec vec_from, Vec vec_to, addv=None, mode=None):             # <<<<<<<<<<<<<<
  *         cdef PetscInsertMode  caddv = insertmode(addv)
+ *         cdef PetscScatterMode csctm = scattermode(mode)
  */
 
   /* function exit code */
@@ -104128,12 +111164,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_16begin(struct PyPetscScatte
   return __pyx_r;
 }
 
-/* "PETSc/Scatter.pyx":67
+/* "PETSc/Scatter.pyx":66
  *                                 caddv, csctm) )
  * 
- *     def end(self, Vec vec_from not None, Vec vec_to not None,             # <<<<<<<<<<<<<<
- *             addv=None, mode=None):
+ *     def end(self, Vec vec_from, Vec vec_to, addv=None, mode=None):             # <<<<<<<<<<<<<<
  *         cdef PetscInsertMode  caddv = insertmode(addv)
+ *         cdef PetscScatterMode csctm = scattermode(mode)
  */
 
 /* Python wrapper */
@@ -104150,14 +111186,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_19end(PyObject *__pyx_v_self
   {
     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_vec_from,&__pyx_n_s_vec_to,&__pyx_n_s_addv,&__pyx_n_s_mode,0};
     PyObject* values[4] = {0,0,0,0};
-
-    /* "PETSc/Scatter.pyx":68
- * 
- *     def end(self, Vec vec_from not None, Vec vec_to not None,
- *             addv=None, mode=None):             # <<<<<<<<<<<<<<
- *         cdef PetscInsertMode  caddv = insertmode(addv)
- *         cdef PetscScatterMode csctm = scattermode(mode)
- */
     values[2] = ((PyObject *)Py_None);
     values[3] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
@@ -104165,9 +111193,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_19end(PyObject *__pyx_v_self
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -104176,16 +111208,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_19end(PyObject *__pyx_v_self
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vec_from)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(31, 67, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("end", 0, 2, 4, 1); __PYX_ERR(31, 66, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mode);
@@ -104193,12 +111228,14 @@ 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_ERR(31, 67, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "end") < 0)) __PYX_ERR(31, 66, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -104212,24 +111249,16 @@ 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_ERR(31, 67, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("end", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 66, __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_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)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_from), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_from", 0))) __PYX_ERR(31, 66, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_to), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_to", 0))) __PYX_ERR(31, 66, __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
- *                                 caddv, csctm) )
- * 
- *     def end(self, Vec vec_from not None, Vec vec_to not None,             # <<<<<<<<<<<<<<
- *             addv=None, mode=None):
- *         cdef PetscInsertMode  caddv = insertmode(addv)
- */
-
   /* function exit code */
   goto __pyx_L0;
   __pyx_L1_error:;
@@ -104249,41 +111278,41 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_18end(struct PyPetscScatterO
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("end", 0);
 
-  /* "PETSc/Scatter.pyx":69
- *     def end(self, Vec vec_from not None, Vec vec_to not None,
- *             addv=None, mode=None):
+  /* "PETSc/Scatter.pyx":67
+ * 
+ *     def end(self, Vec vec_from, Vec vec_to, addv=None, mode=None):
  *         cdef PetscInsertMode  caddv = insertmode(addv)             # <<<<<<<<<<<<<<
  *         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)-1L))) __PYX_ERR(31, 69, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)((InsertMode)-1L)))) __PYX_ERR(31, 67, __pyx_L1_error)
   __pyx_v_caddv = __pyx_t_1;
 
-  /* "PETSc/Scatter.pyx":70
- *             addv=None, mode=None):
+  /* "PETSc/Scatter.pyx":68
+ *     def end(self, Vec vec_from, Vec vec_to, addv=None, mode=None):
  *         cdef PetscInsertMode  caddv = insertmode(addv)
  *         cdef PetscScatterMode csctm = scattermode(mode)             # <<<<<<<<<<<<<<
  *         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)-1L))) __PYX_ERR(31, 70, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_scattermode(__pyx_v_mode); if (unlikely(__pyx_t_2 == ((ScatterMode)((ScatterMode)-1L)))) __PYX_ERR(31, 68, __pyx_L1_error)
   __pyx_v_csctm = __pyx_t_2;
 
-  /* "PETSc/Scatter.pyx":71
+  /* "PETSc/Scatter.pyx":69
  *         cdef PetscInsertMode  caddv = insertmode(addv)
  *         cdef PetscScatterMode csctm = scattermode(mode)
  *         CHKERR( VecScatterEnd(self.sct, vec_from.vec, vec_to.vec,             # <<<<<<<<<<<<<<
  *                               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_ERR(31, 71, __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 == ((int)-1))) __PYX_ERR(31, 69, __pyx_L1_error)
 
-  /* "PETSc/Scatter.pyx":67
+  /* "PETSc/Scatter.pyx":66
  *                                 caddv, csctm) )
  * 
- *     def end(self, Vec vec_from not None, Vec vec_to not None,             # <<<<<<<<<<<<<<
- *             addv=None, mode=None):
+ *     def end(self, Vec vec_from, Vec vec_to, addv=None, mode=None):             # <<<<<<<<<<<<<<
  *         cdef PetscInsertMode  caddv = insertmode(addv)
+ *         cdef PetscScatterMode csctm = scattermode(mode)
  */
 
   /* function exit code */
@@ -104298,12 +111327,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_18end(struct PyPetscScatterO
   return __pyx_r;
 }
 
-/* "PETSc/Scatter.pyx":76
+/* "PETSc/Scatter.pyx":74
  *     #
  * 
- *     def scatterBegin(self, Vec vec_from not None, Vec vec_to not None,             # <<<<<<<<<<<<<<
- *                      addv=None, mode=None):
+ *     def scatterBegin(self, Vec vec_from, Vec vec_to, addv=None, mode=None):             # <<<<<<<<<<<<<<
  *         cdef PetscInsertMode  caddv = insertmode(addv)
+ *         cdef PetscScatterMode csctm = scattermode(mode)
  */
 
 /* Python wrapper */
@@ -104320,14 +111349,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_21scatterBegin(PyObject *__p
   {
     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_vec_from,&__pyx_n_s_vec_to,&__pyx_n_s_addv,&__pyx_n_s_mode,0};
     PyObject* values[4] = {0,0,0,0};
-
-    /* "PETSc/Scatter.pyx":77
- * 
- *     def scatterBegin(self, Vec vec_from not None, Vec vec_to not None,
- *                      addv=None, mode=None):             # <<<<<<<<<<<<<<
- *         cdef PetscInsertMode  caddv = insertmode(addv)
- *         cdef PetscScatterMode csctm = scattermode(mode)
- */
     values[2] = ((PyObject *)Py_None);
     values[3] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
@@ -104335,9 +111356,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_21scatterBegin(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -104346,16 +111371,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_21scatterBegin(PyObject *__p
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vec_from)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(31, 76, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("scatterBegin", 0, 2, 4, 1); __PYX_ERR(31, 74, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mode);
@@ -104363,12 +111391,14 @@ 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_ERR(31, 76, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "scatterBegin") < 0)) __PYX_ERR(31, 74, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -104382,24 +111412,16 @@ 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_ERR(31, 76, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("scatterBegin", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 74, __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_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)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_from), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_from", 0))) __PYX_ERR(31, 74, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_to), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_to", 0))) __PYX_ERR(31, 74, __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
- *     #
- * 
- *     def scatterBegin(self, Vec vec_from not None, Vec vec_to not None,             # <<<<<<<<<<<<<<
- *                      addv=None, mode=None):
- *         cdef PetscInsertMode  caddv = insertmode(addv)
- */
-
   /* function exit code */
   goto __pyx_L0;
   __pyx_L1_error:;
@@ -104419,41 +111441,41 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_20scatterBegin(struct PyPets
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("scatterBegin", 0);
 
-  /* "PETSc/Scatter.pyx":78
- *     def scatterBegin(self, Vec vec_from not None, Vec vec_to not None,
- *                      addv=None, mode=None):
+  /* "PETSc/Scatter.pyx":75
+ * 
+ *     def scatterBegin(self, Vec vec_from, Vec vec_to, addv=None, mode=None):
  *         cdef PetscInsertMode  caddv = insertmode(addv)             # <<<<<<<<<<<<<<
  *         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)-1L))) __PYX_ERR(31, 78, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)((InsertMode)-1L)))) __PYX_ERR(31, 75, __pyx_L1_error)
   __pyx_v_caddv = __pyx_t_1;
 
-  /* "PETSc/Scatter.pyx":79
- *                      addv=None, mode=None):
+  /* "PETSc/Scatter.pyx":76
+ *     def scatterBegin(self, Vec vec_from, Vec vec_to, addv=None, mode=None):
  *         cdef PetscInsertMode  caddv = insertmode(addv)
  *         cdef PetscScatterMode csctm = scattermode(mode)             # <<<<<<<<<<<<<<
  *         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)-1L))) __PYX_ERR(31, 79, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_scattermode(__pyx_v_mode); if (unlikely(__pyx_t_2 == ((ScatterMode)((ScatterMode)-1L)))) __PYX_ERR(31, 76, __pyx_L1_error)
   __pyx_v_csctm = __pyx_t_2;
 
-  /* "PETSc/Scatter.pyx":80
+  /* "PETSc/Scatter.pyx":77
  *         cdef PetscInsertMode  caddv = insertmode(addv)
  *         cdef PetscScatterMode csctm = scattermode(mode)
  *         CHKERR( VecScatterBegin(self.sct, vec_from.vec, vec_to.vec,             # <<<<<<<<<<<<<<
  *                                 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_ERR(31, 80, __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 == ((int)-1))) __PYX_ERR(31, 77, __pyx_L1_error)
 
-  /* "PETSc/Scatter.pyx":76
+  /* "PETSc/Scatter.pyx":74
  *     #
  * 
- *     def scatterBegin(self, Vec vec_from not None, Vec vec_to not None,             # <<<<<<<<<<<<<<
- *                      addv=None, mode=None):
+ *     def scatterBegin(self, Vec vec_from, Vec vec_to, addv=None, mode=None):             # <<<<<<<<<<<<<<
  *         cdef PetscInsertMode  caddv = insertmode(addv)
+ *         cdef PetscScatterMode csctm = scattermode(mode)
  */
 
   /* function exit code */
@@ -104468,12 +111490,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_20scatterBegin(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Scatter.pyx":83
+/* "PETSc/Scatter.pyx":80
  *                                 caddv, csctm) )
  * 
- *     def scatterEnd(self, Vec vec_from not None, Vec vec_to not None,             # <<<<<<<<<<<<<<
- *                    addv=None, mode=None):
+ *     def scatterEnd(self, Vec vec_from, Vec vec_to, addv=None, mode=None):             # <<<<<<<<<<<<<<
  *         cdef PetscInsertMode  caddv = insertmode(addv)
+ *         cdef PetscScatterMode csctm = scattermode(mode)
  */
 
 /* Python wrapper */
@@ -104490,14 +111512,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_23scatterEnd(PyObject *__pyx
   {
     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_vec_from,&__pyx_n_s_vec_to,&__pyx_n_s_addv,&__pyx_n_s_mode,0};
     PyObject* values[4] = {0,0,0,0};
-
-    /* "PETSc/Scatter.pyx":84
- * 
- *     def scatterEnd(self, Vec vec_from not None, Vec vec_to not None,
- *                    addv=None, mode=None):             # <<<<<<<<<<<<<<
- *         cdef PetscInsertMode  caddv = insertmode(addv)
- *         cdef PetscScatterMode csctm = scattermode(mode)
- */
     values[2] = ((PyObject *)Py_None);
     values[3] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
@@ -104505,9 +111519,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_23scatterEnd(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -104516,16 +111534,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_23scatterEnd(PyObject *__pyx
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vec_from)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(31, 83, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("scatterEnd", 0, 2, 4, 1); __PYX_ERR(31, 80, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mode);
@@ -104533,12 +111554,14 @@ 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_ERR(31, 83, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "scatterEnd") < 0)) __PYX_ERR(31, 80, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -104552,24 +111575,16 @@ 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_ERR(31, 83, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("scatterEnd", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 80, __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_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)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_from), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_from", 0))) __PYX_ERR(31, 80, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_to), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_to", 0))) __PYX_ERR(31, 80, __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
- *                                 caddv, csctm) )
- * 
- *     def scatterEnd(self, Vec vec_from not None, Vec vec_to not None,             # <<<<<<<<<<<<<<
- *                    addv=None, mode=None):
- *         cdef PetscInsertMode  caddv = insertmode(addv)
- */
-
   /* function exit code */
   goto __pyx_L0;
   __pyx_L1_error:;
@@ -104589,41 +111604,41 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_22scatterEnd(struct PyPetscS
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("scatterEnd", 0);
 
-  /* "PETSc/Scatter.pyx":85
- *     def scatterEnd(self, Vec vec_from not None, Vec vec_to not None,
- *                    addv=None, mode=None):
+  /* "PETSc/Scatter.pyx":81
+ * 
+ *     def scatterEnd(self, Vec vec_from, Vec vec_to, addv=None, mode=None):
  *         cdef PetscInsertMode  caddv = insertmode(addv)             # <<<<<<<<<<<<<<
  *         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)-1L))) __PYX_ERR(31, 85, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)((InsertMode)-1L)))) __PYX_ERR(31, 81, __pyx_L1_error)
   __pyx_v_caddv = __pyx_t_1;
 
-  /* "PETSc/Scatter.pyx":86
- *                    addv=None, mode=None):
+  /* "PETSc/Scatter.pyx":82
+ *     def scatterEnd(self, Vec vec_from, Vec vec_to, addv=None, mode=None):
  *         cdef PetscInsertMode  caddv = insertmode(addv)
  *         cdef PetscScatterMode csctm = scattermode(mode)             # <<<<<<<<<<<<<<
  *         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)-1L))) __PYX_ERR(31, 86, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_scattermode(__pyx_v_mode); if (unlikely(__pyx_t_2 == ((ScatterMode)((ScatterMode)-1L)))) __PYX_ERR(31, 82, __pyx_L1_error)
   __pyx_v_csctm = __pyx_t_2;
 
-  /* "PETSc/Scatter.pyx":87
+  /* "PETSc/Scatter.pyx":83
  *         cdef PetscInsertMode  caddv = insertmode(addv)
  *         cdef PetscScatterMode csctm = scattermode(mode)
  *         CHKERR( VecScatterEnd(self.sct, vec_from.vec, vec_to.vec,             # <<<<<<<<<<<<<<
  *                               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_ERR(31, 87, __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 == ((int)-1))) __PYX_ERR(31, 83, __pyx_L1_error)
 
-  /* "PETSc/Scatter.pyx":83
+  /* "PETSc/Scatter.pyx":80
  *                                 caddv, csctm) )
  * 
- *     def scatterEnd(self, Vec vec_from not None, Vec vec_to not None,             # <<<<<<<<<<<<<<
- *                    addv=None, mode=None):
+ *     def scatterEnd(self, Vec vec_from, Vec vec_to, addv=None, mode=None):             # <<<<<<<<<<<<<<
  *         cdef PetscInsertMode  caddv = insertmode(addv)
+ *         cdef PetscScatterMode csctm = scattermode(mode)
  */
 
   /* function exit code */
@@ -104638,12 +111653,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_22scatterEnd(struct PyPetscS
   return __pyx_r;
 }
 
-/* "PETSc/Scatter.pyx":90
+/* "PETSc/Scatter.pyx":86
  *                               caddv, csctm) )
  * 
- *     def scatter(self, Vec vec_from not None, Vec vec_to not None,             # <<<<<<<<<<<<<<
- *                 addv=None, mode=None):
+ *     def scatter(self, Vec vec_from, Vec vec_to, addv=None, mode=None):             # <<<<<<<<<<<<<<
  *         cdef PetscInsertMode  caddv = insertmode(addv)
+ *         cdef PetscScatterMode csctm = scattermode(mode)
  */
 
 /* Python wrapper */
@@ -104660,14 +111675,6 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_25scatter(PyObject *__pyx_v_
   {
     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_vec_from,&__pyx_n_s_vec_to,&__pyx_n_s_addv,&__pyx_n_s_mode,0};
     PyObject* values[4] = {0,0,0,0};
-
-    /* "PETSc/Scatter.pyx":91
- * 
- *     def scatter(self, Vec vec_from not None, Vec vec_to not None,
- *                 addv=None, mode=None):             # <<<<<<<<<<<<<<
- *         cdef PetscInsertMode  caddv = insertmode(addv)
- *         cdef PetscScatterMode csctm = scattermode(mode)
- */
     values[2] = ((PyObject *)Py_None);
     values[3] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
@@ -104675,9 +111682,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_25scatter(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -104686,16 +111697,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Scatter_25scatter(PyObject *__pyx_v_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vec_from)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(31, 90, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("scatter", 0, 2, 4, 1); __PYX_ERR(31, 86, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mode);
@@ -104703,12 +111717,14 @@ 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_ERR(31, 90, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "scatter") < 0)) __PYX_ERR(31, 86, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -104722,24 +111738,16 @@ 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_ERR(31, 90, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("scatter", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(31, 86, __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_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)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_from), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_from", 0))) __PYX_ERR(31, 86, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec_to), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec_to", 0))) __PYX_ERR(31, 86, __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
- *                               caddv, csctm) )
- * 
- *     def scatter(self, Vec vec_from not None, Vec vec_to not None,             # <<<<<<<<<<<<<<
- *                 addv=None, mode=None):
- *         cdef PetscInsertMode  caddv = insertmode(addv)
- */
-
   /* function exit code */
   goto __pyx_L0;
   __pyx_L1_error:;
@@ -104759,50 +111767,50 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Scatter_24scatter(struct PyPetscScat
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("scatter", 0);
 
-  /* "PETSc/Scatter.pyx":92
- *     def scatter(self, Vec vec_from not None, Vec vec_to not None,
- *                 addv=None, mode=None):
+  /* "PETSc/Scatter.pyx":87
+ * 
+ *     def scatter(self, Vec vec_from, Vec vec_to, addv=None, mode=None):
  *         cdef PetscInsertMode  caddv = insertmode(addv)             # <<<<<<<<<<<<<<
  *         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)-1L))) __PYX_ERR(31, 92, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)((InsertMode)-1L)))) __PYX_ERR(31, 87, __pyx_L1_error)
   __pyx_v_caddv = __pyx_t_1;
 
-  /* "PETSc/Scatter.pyx":93
- *                 addv=None, mode=None):
+  /* "PETSc/Scatter.pyx":88
+ *     def scatter(self, Vec vec_from, Vec vec_to, addv=None, mode=None):
  *         cdef PetscInsertMode  caddv = insertmode(addv)
  *         cdef PetscScatterMode csctm = scattermode(mode)             # <<<<<<<<<<<<<<
  *         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)-1L))) __PYX_ERR(31, 93, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_scattermode(__pyx_v_mode); if (unlikely(__pyx_t_2 == ((ScatterMode)((ScatterMode)-1L)))) __PYX_ERR(31, 88, __pyx_L1_error)
   __pyx_v_csctm = __pyx_t_2;
 
-  /* "PETSc/Scatter.pyx":94
+  /* "PETSc/Scatter.pyx":89
  *         cdef PetscInsertMode  caddv = insertmode(addv)
  *         cdef PetscScatterMode csctm = scattermode(mode)
  *         CHKERR( VecScatterBegin(self.sct, vec_from.vec, vec_to.vec,             # <<<<<<<<<<<<<<
  *                                 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_ERR(31, 94, __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 == ((int)-1))) __PYX_ERR(31, 89, __pyx_L1_error)
 
-  /* "PETSc/Scatter.pyx":96
+  /* "PETSc/Scatter.pyx":91
  *         CHKERR( VecScatterBegin(self.sct, vec_from.vec, vec_to.vec,
  *                                 caddv, csctm) )
  *         CHKERR( VecScatterEnd(self.sct, vec_from.vec, vec_to.vec,             # <<<<<<<<<<<<<<
  *                               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_ERR(31, 96, __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 == ((int)-1))) __PYX_ERR(31, 91, __pyx_L1_error)
 
-  /* "PETSc/Scatter.pyx":90
+  /* "PETSc/Scatter.pyx":86
  *                               caddv, csctm) )
  * 
- *     def scatter(self, Vec vec_from not None, Vec vec_to not None,             # <<<<<<<<<<<<<<
- *                 addv=None, mode=None):
+ *     def scatter(self, Vec vec_from, Vec vec_to, addv=None, mode=None):             # <<<<<<<<<<<<<<
  *         cdef PetscInsertMode  caddv = insertmode(addv)
+ *         cdef PetscScatterMode csctm = scattermode(mode)
  */
 
   /* function exit code */
@@ -104909,7 +111917,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_ERR(32, 10, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionDestroy((&__pyx_v_self->sec))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(32, 10, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":11
  *     def __dealloc__(self):
@@ -104931,7 +111939,7 @@ static void __pyx_pf_8petsc4py_5PETSc_7Section_2__dealloc__(struct PyPetscSectio
   /* function exit code */
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_WriteUnraisable("petsc4py.PETSc.Section.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 0, 0);
+  __Pyx_WriteUnraisable("petsc4py.PETSc.Section.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
 }
@@ -104961,6 +111969,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_5view(PyObject *__pyx_v_self
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -104978,6 +111987,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_5view(PyObject *__pyx_v_self
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -105044,7 +112054,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_ERR(32, 16, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionView(__pyx_v_self->sec, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(32, 16, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":13
  *         self.sec = NULL
@@ -105104,7 +112114,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_ERR(32, 19, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionDestroy((&__pyx_v_self->sec))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(32, 19, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":20
  *     def destroy(self):
@@ -105161,6 +112171,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_9create(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -105178,6 +112189,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_9create(PyObject *__pyx_v_se
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -105234,7 +112246,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_ERR(32, 25, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionCreate(__pyx_v_ccomm, (&__pyx_v_newsec))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(32, 25, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":26
  *         cdef PetscSection newsec = NULL
@@ -105320,7 +112332,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_10clone(struct PyPetscSectio
  */
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -105350,7 +112362,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_ERR(32, 31, __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 == ((int)-1))) __PYX_ERR(32, 31, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":32
  *         cdef Section sec = <Section>type(self)()
@@ -105424,7 +112436,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_ERR(32, 35, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionSetUp(__pyx_v_self->sec)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(32, 35, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":34
  *         return sec
@@ -105484,7 +112496,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_ERR(32, 38, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionReset(__pyx_v_self->sec)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(32, 38, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":37
  *         CHKERR( PetscSectionSetUp(self.sec) )
@@ -105555,7 +112567,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_ERR(32, 42, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetNumFields(__pyx_v_self->sec, (&__pyx_v_numFields))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(32, 42, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":43
  *         cdef PetscInt numFields = 0
@@ -105614,6 +112626,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_19setNumFields(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -105663,7 +112676,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 46, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numFields); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 46, __pyx_L1_error)
   __pyx_v_cnumFields = __pyx_t_1;
 
   /* "PETSc/Section.pyx":47
@@ -105673,7 +112686,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_ERR(32, 47, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionSetNumFields(__pyx_v_self->sec, __pyx_v_cnumFields)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(32, 47, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":45
  *         return toInt(numFields)
@@ -105719,6 +112732,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_21getFieldName(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -105770,7 +112784,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 50, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 50, __pyx_L1_error)
   __pyx_v_cfield = __pyx_t_1;
 
   /* "PETSc/Section.pyx":51
@@ -105789,7 +112803,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_ERR(32, 52, __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 == ((int)-1))) __PYX_ERR(32, 52, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":53
  *         cdef const_char *fieldName = NULL
@@ -105849,7 +112863,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_23setFieldName(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -105858,6 +112874,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_23setFieldName(PyObject *__p
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_field)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fieldName)) != 0)) kw_args--;
         else {
@@ -105909,7 +112926,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 56, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 56, __pyx_L1_error)
   __pyx_v_cfield = __pyx_t_1;
 
   /* "PETSc/Section.pyx":57
@@ -105940,7 +112957,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_ERR(32, 59, __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 == ((int)-1))) __PYX_ERR(32, 59, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":55
  *         return bytes2str(fieldName)
@@ -105988,6 +113005,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_25getFieldComponents(PyObjec
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -106039,7 +113057,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_24getFieldComponents(struct
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 62, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 62, __pyx_L1_error)
   __pyx_v_cfield = __pyx_t_1;
   __pyx_v_cnumComp = 0;
 
@@ -106050,7 +113068,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_24getFieldComponents(struct
  *         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_ERR(32, 63, __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 == ((int)-1))) __PYX_ERR(32, 63, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":64
  *         cdef PetscInt cfield = asInt(field), cnumComp = 0
@@ -106110,7 +113128,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_27setFieldComponents(PyObjec
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -106119,6 +113139,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_27setFieldComponents(PyObjec
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_field)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_numComp)) != 0)) kw_args--;
         else {
@@ -106168,7 +113189,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 67, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 67, __pyx_L1_error)
   __pyx_v_cfield = __pyx_t_1;
 
   /* "PETSc/Section.pyx":68
@@ -106178,7 +113199,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 68, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numComp); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 68, __pyx_L1_error)
   __pyx_v_cnumComp = __pyx_t_1;
 
   /* "PETSc/Section.pyx":69
@@ -106188,7 +113209,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_ERR(32, 69, __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 == ((int)-1))) __PYX_ERR(32, 69, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":66
  *         return toInt(cnumComp)
@@ -106263,7 +113284,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_ERR(32, 73, __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 == ((int)-1))) __PYX_ERR(32, 73, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":74
  *         cdef PetscInt pStart = 0, pEnd = 0
@@ -106335,7 +113356,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_31setChart(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -106344,6 +113367,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_31setChart(PyObject *__pyx_v
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_pStart)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_pEnd)) != 0)) kw_args--;
         else {
@@ -106393,7 +113417,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 77, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_pStart); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 77, __pyx_L1_error)
   __pyx_v_cStart = __pyx_t_1;
 
   /* "PETSc/Section.pyx":78
@@ -106403,7 +113427,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 78, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_pEnd); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 78, __pyx_L1_error)
   __pyx_v_cEnd = __pyx_t_1;
 
   /* "PETSc/Section.pyx":79
@@ -106413,7 +113437,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_ERR(32, 79, __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 == ((int)-1))) __PYX_ERR(32, 79, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":76
  *         return toInt(pStart), toInt(pEnd)
@@ -106459,6 +113483,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_33getDof(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -106510,7 +113535,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_32getDof(struct PyPetscSecti
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 82, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 82, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
   __pyx_v_cnumDof = 0;
 
@@ -106521,7 +113546,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_32getDof(struct PyPetscSecti
  *         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_ERR(32, 83, __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 == ((int)-1))) __PYX_ERR(32, 83, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":84
  *         cdef PetscInt cpoint = asInt(point), cnumDof = 0
@@ -106581,7 +113606,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_35setDof(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -106590,6 +113617,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_35setDof(PyObject *__pyx_v_s
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_point)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_numDof)) != 0)) kw_args--;
         else {
@@ -106639,7 +113667,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 87, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 87, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
 
   /* "PETSc/Section.pyx":88
@@ -106649,7 +113677,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 88, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numDof); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 88, __pyx_L1_error)
   __pyx_v_cnumDof = __pyx_t_1;
 
   /* "PETSc/Section.pyx":89
@@ -106659,7 +113687,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_ERR(32, 89, __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 == ((int)-1))) __PYX_ERR(32, 89, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":86
  *         return toInt(cnumDof)
@@ -106706,7 +113734,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_37addDof(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -106715,6 +113745,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_37addDof(PyObject *__pyx_v_s
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_point)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_numDof)) != 0)) kw_args--;
         else {
@@ -106764,7 +113795,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 92, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 92, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
 
   /* "PETSc/Section.pyx":93
@@ -106774,7 +113805,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 93, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numDof); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 93, __pyx_L1_error)
   __pyx_v_cnumDof = __pyx_t_1;
 
   /* "PETSc/Section.pyx":94
@@ -106784,7 +113815,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_ERR(32, 94, __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 == ((int)-1))) __PYX_ERR(32, 94, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":91
  *         CHKERR( PetscSectionSetDof(self.sec,cpoint,cnumDof) )
@@ -106831,7 +113862,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_39getFieldDof(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -106840,6 +113873,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_39getFieldDof(PyObject *__py
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_point)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_field)) != 0)) kw_args--;
         else {
@@ -106891,7 +113925,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 97, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 97, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
   __pyx_v_cnumDof = 0;
 
@@ -106902,7 +113936,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 98, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 98, __pyx_L1_error)
   __pyx_v_cfield = __pyx_t_1;
 
   /* "PETSc/Section.pyx":99
@@ -106912,7 +113946,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_ERR(32, 99, __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 == ((int)-1))) __PYX_ERR(32, 99, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":100
  *         cdef PetscInt cfield = asInt(field)
@@ -106973,8 +114007,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_41setFieldDof(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -106983,11 +114020,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_41setFieldDof(PyObject *__py
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_point)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(32, 102, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_numDof)) != 0)) kw_args--;
         else {
@@ -107040,7 +114079,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 103, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 103, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
 
   /* "PETSc/Section.pyx":104
@@ -107050,7 +114089,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 104, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 104, __pyx_L1_error)
   __pyx_v_cfield = __pyx_t_1;
 
   /* "PETSc/Section.pyx":105
@@ -107060,7 +114099,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 105, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numDof); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 105, __pyx_L1_error)
   __pyx_v_cnumDof = __pyx_t_1;
 
   /* "PETSc/Section.pyx":106
@@ -107070,7 +114109,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_ERR(32, 106, __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 == ((int)-1))) __PYX_ERR(32, 106, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":102
  *         return toInt(cnumDof)
@@ -107118,8 +114157,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_43addFieldDof(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -107128,11 +114170,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_43addFieldDof(PyObject *__py
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_point)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(32, 108, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_numDof)) != 0)) kw_args--;
         else {
@@ -107185,7 +114229,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 109, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 109, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
 
   /* "PETSc/Section.pyx":110
@@ -107195,7 +114239,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 110, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 110, __pyx_L1_error)
   __pyx_v_cfield = __pyx_t_1;
 
   /* "PETSc/Section.pyx":111
@@ -107205,7 +114249,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 111, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numDof); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 111, __pyx_L1_error)
   __pyx_v_cnumDof = __pyx_t_1;
 
   /* "PETSc/Section.pyx":112
@@ -107215,7 +114259,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_ERR(32, 112, __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 == ((int)-1))) __PYX_ERR(32, 112, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":108
  *         CHKERR( PetscSectionSetFieldDof(self.sec,cpoint,cfield,cnumDof) )
@@ -107261,6 +114305,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_45getConstraintDof(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -107312,7 +114357,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 115, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 115, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
   __pyx_v_cnumDof = 0;
 
@@ -107323,7 +114368,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_ERR(32, 116, __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 == ((int)-1))) __PYX_ERR(32, 116, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":117
  *         cdef PetscInt cpoint = asInt(point), cnumDof = 0
@@ -107383,7 +114428,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_47setConstraintDof(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -107392,6 +114439,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_47setConstraintDof(PyObject
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_point)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_numDof)) != 0)) kw_args--;
         else {
@@ -107441,7 +114489,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 120, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 120, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
 
   /* "PETSc/Section.pyx":121
@@ -107451,7 +114499,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 121, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numDof); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 121, __pyx_L1_error)
   __pyx_v_cnumDof = __pyx_t_1;
 
   /* "PETSc/Section.pyx":122
@@ -107461,7 +114509,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_ERR(32, 122, __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 == ((int)-1))) __PYX_ERR(32, 122, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":119
  *         return toInt(cnumDof)
@@ -107508,7 +114556,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_49addConstraintDof(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -107517,6 +114567,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_49addConstraintDof(PyObject
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_point)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_numDof)) != 0)) kw_args--;
         else {
@@ -107566,7 +114617,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 125, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 125, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
 
   /* "PETSc/Section.pyx":126
@@ -107576,7 +114627,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 126, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numDof); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 126, __pyx_L1_error)
   __pyx_v_cnumDof = __pyx_t_1;
 
   /* "PETSc/Section.pyx":127
@@ -107586,7 +114637,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_ERR(32, 127, __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 == ((int)-1))) __PYX_ERR(32, 127, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":124
  *         CHKERR( PetscSectionSetConstraintDof(self.sec,cpoint,cnumDof) )
@@ -107633,7 +114684,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_51getFieldConstraintDof(PyOb
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -107642,6 +114695,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_51getFieldConstraintDof(PyOb
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_point)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_field)) != 0)) kw_args--;
         else {
@@ -107693,7 +114747,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 130, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 130, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
   __pyx_v_cnumDof = 0;
 
@@ -107704,7 +114758,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 131, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 131, __pyx_L1_error)
   __pyx_v_cfield = __pyx_t_1;
 
   /* "PETSc/Section.pyx":132
@@ -107714,7 +114768,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_ERR(32, 132, __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 == ((int)-1))) __PYX_ERR(32, 132, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":133
  *         cdef PetscInt cfield = asInt(field)
@@ -107775,8 +114829,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_53setFieldConstraintDof(PyOb
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -107785,11 +114842,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_53setFieldConstraintDof(PyOb
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_point)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(32, 135, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_numDof)) != 0)) kw_args--;
         else {
@@ -107842,7 +114901,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 136, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 136, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
 
   /* "PETSc/Section.pyx":137
@@ -107852,7 +114911,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 137, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 137, __pyx_L1_error)
   __pyx_v_cfield = __pyx_t_1;
 
   /* "PETSc/Section.pyx":138
@@ -107862,7 +114921,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 138, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numDof); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 138, __pyx_L1_error)
   __pyx_v_cnumDof = __pyx_t_1;
 
   /* "PETSc/Section.pyx":139
@@ -107872,7 +114931,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_ERR(32, 139, __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 == ((int)-1))) __PYX_ERR(32, 139, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":135
  *         return toInt(cnumDof)
@@ -107920,8 +114979,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_55addFieldConstraintDof(PyOb
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -107930,11 +114992,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_55addFieldConstraintDof(PyOb
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_point)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(32, 141, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_numDof)) != 0)) kw_args--;
         else {
@@ -107987,7 +115051,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 142, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 142, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
 
   /* "PETSc/Section.pyx":143
@@ -107997,7 +115061,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 143, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 143, __pyx_L1_error)
   __pyx_v_cfield = __pyx_t_1;
 
   /* "PETSc/Section.pyx":144
@@ -108007,7 +115071,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 144, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numDof); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 144, __pyx_L1_error)
   __pyx_v_cnumDof = __pyx_t_1;
 
   /* "PETSc/Section.pyx":145
@@ -108017,7 +115081,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_ERR(32, 145, __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 == ((int)-1))) __PYX_ERR(32, 145, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":141
  *         CHKERR( PetscSectionSetFieldConstraintDof(self.sec,cpoint,cfield,cnumDof) )
@@ -108063,6 +115127,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_57getConstraintIndices(PyObj
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -108115,7 +115180,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 148, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 148, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
 
   /* "PETSc/Section.pyx":149
@@ -108143,7 +115208,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_ERR(32, 151, __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 == ((int)-1))) __PYX_ERR(32, 151, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":152
  *         cdef const_PetscInt *indices = NULL
@@ -108152,7 +115217,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_ERR(32, 152, __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 == ((int)-1))) __PYX_ERR(32, 152, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":153
  *         CHKERR( PetscSectionGetConstraintDof(self.sec, cpoint, &nindex) )
@@ -108212,7 +115277,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_59setConstraintIndices(PyObj
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -108221,6 +115288,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_59setConstraintIndices(PyObj
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_point)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_indices)) != 0)) kw_args--;
         else {
@@ -108273,7 +115341,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 156, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 156, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
 
   /* "PETSc/Section.pyx":157
@@ -108313,7 +115381,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_ERR(32, 160, __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 == ((int)-1))) __PYX_ERR(32, 160, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":161
  *         indices = iarray_i(indices, &nindex, &cindices)
@@ -108322,7 +115390,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_ERR(32, 161, __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 == ((int)-1))) __PYX_ERR(32, 161, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":155
  *         return array_i(nindex, indices)
@@ -108371,7 +115439,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_61getFieldConstraintIndices(
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -108380,6 +115450,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_61getFieldConstraintIndices(
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_point)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_field)) != 0)) kw_args--;
         else {
@@ -108432,7 +115503,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 164, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 164, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
 
   /* "PETSc/Section.pyx":165
@@ -108442,7 +115513,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 165, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 165, __pyx_L1_error)
   __pyx_v_cfield = __pyx_t_1;
 
   /* "PETSc/Section.pyx":166
@@ -108470,7 +115541,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_ERR(32, 168, __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 == ((int)-1))) __PYX_ERR(32, 168, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":169
  *         cdef const_PetscInt *indices = NULL
@@ -108479,7 +115550,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_ERR(32, 169, __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 == ((int)-1))) __PYX_ERR(32, 169, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":170
  *         CHKERR( PetscSectionGetFieldConstraintDof(self.sec,cpoint,cfield,&nindex) )
@@ -108540,8 +115611,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_63setFieldConstraintIndices(
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -108550,11 +115624,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_63setFieldConstraintIndices(
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_point)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(32, 172, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_indices)) != 0)) kw_args--;
         else {
@@ -108610,7 +115686,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 173, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 173, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
 
   /* "PETSc/Section.pyx":174
@@ -108620,7 +115696,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 174, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 174, __pyx_L1_error)
   __pyx_v_cfield = __pyx_t_1;
 
   /* "PETSc/Section.pyx":175
@@ -108660,7 +115736,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_ERR(32, 178, __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 == ((int)-1))) __PYX_ERR(32, 178, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":179
  *         indices = iarray_i(indices, &nindex, &cindices)
@@ -108669,7 +115745,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_ERR(32, 179, __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 == ((int)-1))) __PYX_ERR(32, 179, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":172
  *         return array_i(nindex, indices)
@@ -108742,7 +115818,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_ERR(32, 183, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetMaxDof(__pyx_v_self->sec, (&__pyx_v_maxDof))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(32, 183, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":184
  *         cdef PetscInt maxDof = 0
@@ -108826,7 +115902,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_ERR(32, 188, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetStorageSize(__pyx_v_self->sec, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(32, 188, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":189
  *         cdef PetscInt size = 0
@@ -108910,7 +115986,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_ERR(32, 193, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionGetConstrainedStorageSize(__pyx_v_self->sec, (&__pyx_v_size))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(32, 193, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":194
  *         cdef PetscInt size = 0
@@ -108969,6 +116045,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_71getOffset(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -109020,7 +116097,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 197, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 197, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
   __pyx_v_offset = 0;
 
@@ -109031,7 +116108,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_ERR(32, 198, __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 == ((int)-1))) __PYX_ERR(32, 198, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":199
  *         cdef PetscInt cpoint = asInt(point), offset = 0
@@ -109091,7 +116168,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_73setOffset(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -109100,6 +116179,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_73setOffset(PyObject *__pyx_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_point)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_offset)) != 0)) kw_args--;
         else {
@@ -109149,7 +116229,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 202, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 202, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
 
   /* "PETSc/Section.pyx":203
@@ -109159,7 +116239,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 == -1L && PyErr_Occurred())) __PYX_ERR(32, 203, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_offset); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(32, 203, __pyx_L1_error)
   __pyx_v_coffset = __pyx_t_1;
 
   /* "PETSc/Section.pyx":204
@@ -109169,7 +116249,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_ERR(32, 204, __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 == ((int)-1))) __PYX_ERR(32, 204, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":201
  *         return toInt(offset)
@@ -109244,14 +116324,14 @@ 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_ERR(32, 208, __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 == ((int)-1))) __PYX_ERR(32, 208, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":209
  *         cdef PetscInt oStart = 0, oEnd = 0
  *         CHKERR( PetscSectionGetOffsetRange(self.sec,&oStart,&oEnd) )
  *         return toInt(oStart),toInt(oEnd)             # <<<<<<<<<<<<<<
  * 
- *     def createGlobalSection(self, SF sf not None):
+ *     def createGlobalSection(self, SF sf):
  */
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_oStart); if (unlikely(!__pyx_t_2)) __PYX_ERR(32, 209, __pyx_L1_error)
@@ -109294,7 +116374,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_74getOffsetRange(struct PyPe
 /* "PETSc/Section.pyx":211
  *         return toInt(oStart),toInt(oEnd)
  * 
- *     def createGlobalSection(self, SF sf not None):             # <<<<<<<<<<<<<<
+ *     def createGlobalSection(self, SF sf):             # <<<<<<<<<<<<<<
  *         cdef Section gsec = Section()
  *         CHKERR( PetscSectionCreateGlobalSection(self.sec,sf.sf,PETSC_FALSE,PETSC_FALSE,&gsec.sec) )
  */
@@ -109315,6 +116395,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7Section_77createGlobalSection(PyObje
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -109364,7 +116445,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_76createGlobalSection(struct
 
   /* "PETSc/Section.pyx":212
  * 
- *     def createGlobalSection(self, SF sf not None):
+ *     def createGlobalSection(self, SF sf):
  *         cdef Section gsec = Section()             # <<<<<<<<<<<<<<
  *         CHKERR( PetscSectionCreateGlobalSection(self.sec,sf.sf,PETSC_FALSE,PETSC_FALSE,&gsec.sec) )
  *         return gsec
@@ -109375,12 +116456,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_76createGlobalSection(struct
   __pyx_t_1 = 0;
 
   /* "PETSc/Section.pyx":213
- *     def createGlobalSection(self, SF sf not None):
+ *     def createGlobalSection(self, SF sf):
  *         cdef Section gsec = Section()
  *         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, PETSC_FALSE, (&__pyx_v_gsec->sec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(32, 213, __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 == ((int)-1))) __PYX_ERR(32, 213, __pyx_L1_error)
 
   /* "PETSc/Section.pyx":214
  *         cdef Section gsec = Section()
@@ -109395,7 +116476,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_76createGlobalSection(struct
   /* "PETSc/Section.pyx":211
  *         return toInt(oStart),toInt(oEnd)
  * 
- *     def createGlobalSection(self, SF sf not None):             # <<<<<<<<<<<<<<
+ *     def createGlobalSection(self, SF sf):             # <<<<<<<<<<<<<<
  *         cdef Section gsec = Section()
  *         CHKERR( PetscSectionCreateGlobalSection(self.sec,sf.sf,PETSC_FALSE,PETSC_FALSE,&gsec.sec) )
  */
@@ -109412,7 +116493,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7Section_76createGlobalSection(struct
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":160
+/* "PETSc/Mat.pyx":154
  *     #
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -109441,7 +116522,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3Mat___cinit__(struct PyPetscMatObject *__p
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "PETSc/Mat.pyx":161
+  /* "PETSc/Mat.pyx":155
  * 
  *     def __cinit__(self):
  *         self.obj = <PetscObject*> &self.mat             # <<<<<<<<<<<<<<
@@ -109450,7 +116531,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":162
+  /* "PETSc/Mat.pyx":156
  *     def __cinit__(self):
  *         self.obj = <PetscObject*> &self.mat
  *         self.mat = NULL             # <<<<<<<<<<<<<<
@@ -109459,7 +116540,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3Mat___cinit__(struct PyPetscMatObject *__p
  */
   __pyx_v_self->mat = NULL;
 
-  /* "PETSc/Mat.pyx":160
+  /* "PETSc/Mat.pyx":154
  *     #
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -109473,7 +116554,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3Mat___cinit__(struct PyPetscMatObject *__p
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":166
+/* "PETSc/Mat.pyx":160
  *     # unary operations
  * 
  *     def __pos__(self):             # <<<<<<<<<<<<<<
@@ -109500,7 +116581,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_2__pos__(struct PyPetscMatObject
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__pos__", 0);
 
-  /* "PETSc/Mat.pyx":167
+  /* "PETSc/Mat.pyx":161
  * 
  *     def __pos__(self):
  *         return mat_pos(self)             # <<<<<<<<<<<<<<
@@ -109508,13 +116589,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_ERR(33, 167, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_pos(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 161, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":166
+  /* "PETSc/Mat.pyx":160
  *     # unary operations
  * 
  *     def __pos__(self):             # <<<<<<<<<<<<<<
@@ -109533,7 +116614,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_2__pos__(struct PyPetscMatObject
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":169
+/* "PETSc/Mat.pyx":163
  *         return mat_pos(self)
  * 
  *     def __neg__(self):             # <<<<<<<<<<<<<<
@@ -109560,7 +116641,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_4__neg__(struct PyPetscMatObject
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__neg__", 0);
 
-  /* "PETSc/Mat.pyx":170
+  /* "PETSc/Mat.pyx":164
  * 
  *     def __neg__(self):
  *         return mat_neg(self)             # <<<<<<<<<<<<<<
@@ -109568,13 +116649,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_ERR(33, 170, __pyx_L1_error)
+  __pyx_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_mat_neg(__pyx_v_self)); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 164, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":169
+  /* "PETSc/Mat.pyx":163
  *         return mat_pos(self)
  * 
  *     def __neg__(self):             # <<<<<<<<<<<<<<
@@ -109593,7 +116674,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_4__neg__(struct PyPetscMatObject
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":174
+/* "PETSc/Mat.pyx":168
  *     # inplace binary operations
  * 
  *     def __iadd__(self, other):             # <<<<<<<<<<<<<<
@@ -109620,7 +116701,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_6__iadd__(struct PyPetscMatObjec
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__iadd__", 0);
 
-  /* "PETSc/Mat.pyx":175
+  /* "PETSc/Mat.pyx":169
  * 
  *     def __iadd__(self, other):
  *         return mat_iadd(self, other)             # <<<<<<<<<<<<<<
@@ -109628,13 +116709,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_ERR(33, 175, __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, 169, __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":168
  *     # inplace binary operations
  * 
  *     def __iadd__(self, other):             # <<<<<<<<<<<<<<
@@ -109653,7 +116734,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_6__iadd__(struct PyPetscMatObjec
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":177
+/* "PETSc/Mat.pyx":171
  *         return mat_iadd(self, other)
  * 
  *     def __isub__(self, other):             # <<<<<<<<<<<<<<
@@ -109680,7 +116761,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_8__isub__(struct PyPetscMatObjec
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__isub__", 0);
 
-  /* "PETSc/Mat.pyx":178
+  /* "PETSc/Mat.pyx":172
  * 
  *     def __isub__(self, other):
  *         return mat_isub(self, other)             # <<<<<<<<<<<<<<
@@ -109688,13 +116769,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_ERR(33, 178, __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, 172, __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":171
  *         return mat_iadd(self, other)
  * 
  *     def __isub__(self, other):             # <<<<<<<<<<<<<<
@@ -109713,7 +116794,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_8__isub__(struct PyPetscMatObjec
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":180
+/* "PETSc/Mat.pyx":174
  *         return mat_isub(self, other)
  * 
  *     def __imul__(self, other):             # <<<<<<<<<<<<<<
@@ -109740,7 +116821,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10__imul__(struct PyPetscMatObje
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__imul__", 0);
 
-  /* "PETSc/Mat.pyx":181
+  /* "PETSc/Mat.pyx":175
  * 
  *     def __imul__(self, other):
  *         return mat_imul(self, other)             # <<<<<<<<<<<<<<
@@ -109748,13 +116829,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_ERR(33, 181, __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, 175, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":180
+  /* "PETSc/Mat.pyx":174
  *         return mat_isub(self, other)
  * 
  *     def __imul__(self, other):             # <<<<<<<<<<<<<<
@@ -109773,7 +116854,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10__imul__(struct PyPetscMatObje
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":183
+/* "PETSc/Mat.pyx":177
  *         return mat_imul(self, other)
  * 
  *     def __idiv__(self, other):             # <<<<<<<<<<<<<<
@@ -109782,7 +116863,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10__imul__(struct PyPetscMatObje
  */
 
 /* Python wrapper */
-#if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+#if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_13__idiv__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_13__idiv__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = 0;
@@ -109794,16 +116875,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_13__idiv__(PyObject *__pyx_v_sel
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
-#endif /*!(#if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY)*/
+#endif /*!(#if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000))*/
 
-#if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+#if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
 static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_12__idiv__(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__idiv__", 0);
 
-  /* "PETSc/Mat.pyx":184
+  /* "PETSc/Mat.pyx":178
  * 
  *     def __idiv__(self, other):
  *         return mat_idiv(self, other)             # <<<<<<<<<<<<<<
@@ -109811,13 +116892,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_ERR(33, 184, __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, 178, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":183
+  /* "PETSc/Mat.pyx":177
  *         return mat_imul(self, other)
  * 
  *     def __idiv__(self, other):             # <<<<<<<<<<<<<<
@@ -109835,9 +116916,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_12__idiv__(struct PyPetscMatObje
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
-#endif /*!(#if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY)*/
+#endif /*!(#if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000))*/
 
-/* "PETSc/Mat.pyx":186
+/* "PETSc/Mat.pyx":180
  *         return mat_idiv(self, other)
  * 
  *     def __itruediv__(self, other):             # <<<<<<<<<<<<<<
@@ -109864,7 +116945,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_14__itruediv__(struct PyPetscMat
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__itruediv__", 0);
 
-  /* "PETSc/Mat.pyx":187
+  /* "PETSc/Mat.pyx":181
  * 
  *     def __itruediv__(self, other):
  *         return mat_idiv(self, other)             # <<<<<<<<<<<<<<
@@ -109872,13 +116953,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_ERR(33, 187, __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, 181, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":186
+  /* "PETSc/Mat.pyx":180
  *         return mat_idiv(self, other)
  * 
  *     def __itruediv__(self, other):             # <<<<<<<<<<<<<<
@@ -109897,7 +116978,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_14__itruediv__(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":191
+/* "PETSc/Mat.pyx":185
  *     # binary operations
  * 
  *     def __add__(self, other):             # <<<<<<<<<<<<<<
@@ -109926,7 +117007,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_16__add__(PyObject *__pyx_v_self
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__add__", 0);
 
-  /* "PETSc/Mat.pyx":192
+  /* "PETSc/Mat.pyx":186
  * 
  *     def __add__(self, other):
  *         if isinstance(self, Mat):             # <<<<<<<<<<<<<<
@@ -109937,7 +117018,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_16__add__(PyObject *__pyx_v_self
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":193
+    /* "PETSc/Mat.pyx":187
  *     def __add__(self, other):
  *         if isinstance(self, Mat):
  *             return mat_add(self, other)             # <<<<<<<<<<<<<<
@@ -109945,14 +117026,14 @@ 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_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)
+    if (!(likely(((__pyx_v_self) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(33, 187, __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, 187, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
 
-    /* "PETSc/Mat.pyx":192
+    /* "PETSc/Mat.pyx":186
  * 
  *     def __add__(self, other):
  *         if isinstance(self, Mat):             # <<<<<<<<<<<<<<
@@ -109961,7 +117042,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_16__add__(PyObject *__pyx_v_self
  */
   }
 
-  /* "PETSc/Mat.pyx":195
+  /* "PETSc/Mat.pyx":189
  *             return mat_add(self, other)
  *         else:
  *             return mat_radd(other, self)             # <<<<<<<<<<<<<<
@@ -109970,15 +117051,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_16__add__(PyObject *__pyx_v_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_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)
+    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(33, 189, __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, 189, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_r = __pyx_t_3;
     __pyx_t_3 = 0;
     goto __pyx_L0;
   }
 
-  /* "PETSc/Mat.pyx":191
+  /* "PETSc/Mat.pyx":185
  *     # binary operations
  * 
  *     def __add__(self, other):             # <<<<<<<<<<<<<<
@@ -109997,7 +117078,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_16__add__(PyObject *__pyx_v_self
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":197
+/* "PETSc/Mat.pyx":191
  *             return mat_radd(other, self)
  * 
  *     def __sub__(self, other):             # <<<<<<<<<<<<<<
@@ -110026,7 +117107,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_18__sub__(PyObject *__pyx_v_self
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__sub__", 0);
 
-  /* "PETSc/Mat.pyx":198
+  /* "PETSc/Mat.pyx":192
  * 
  *     def __sub__(self, other):
  *         if isinstance(self, Mat):             # <<<<<<<<<<<<<<
@@ -110037,7 +117118,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_18__sub__(PyObject *__pyx_v_self
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":199
+    /* "PETSc/Mat.pyx":193
  *     def __sub__(self, other):
  *         if isinstance(self, Mat):
  *             return mat_sub(self, other)             # <<<<<<<<<<<<<<
@@ -110045,14 +117126,14 @@ 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_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)
+    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_sub(((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":198
+    /* "PETSc/Mat.pyx":192
  * 
  *     def __sub__(self, other):
  *         if isinstance(self, Mat):             # <<<<<<<<<<<<<<
@@ -110061,7 +117142,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_18__sub__(PyObject *__pyx_v_self
  */
   }
 
-  /* "PETSc/Mat.pyx":201
+  /* "PETSc/Mat.pyx":195
  *             return mat_sub(self, other)
  *         else:
  *             return mat_rsub(other, self)             # <<<<<<<<<<<<<<
@@ -110070,15 +117151,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_18__sub__(PyObject *__pyx_v_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_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)
+    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_rsub(((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":197
+  /* "PETSc/Mat.pyx":191
  *             return mat_radd(other, self)
  * 
  *     def __sub__(self, other):             # <<<<<<<<<<<<<<
@@ -110097,7 +117178,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_18__sub__(PyObject *__pyx_v_self
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":203
+/* "PETSc/Mat.pyx":197
  *             return mat_rsub(other, self)
  * 
  *     def __mul__(self, other):             # <<<<<<<<<<<<<<
@@ -110126,7 +117207,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_20__mul__(PyObject *__pyx_v_self
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__mul__", 0);
 
-  /* "PETSc/Mat.pyx":204
+  /* "PETSc/Mat.pyx":198
  * 
  *     def __mul__(self, other):
  *         if isinstance(self, Mat):             # <<<<<<<<<<<<<<
@@ -110137,7 +117218,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_20__mul__(PyObject *__pyx_v_self
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":205
+    /* "PETSc/Mat.pyx":199
  *     def __mul__(self, other):
  *         if isinstance(self, Mat):
  *             if isinstance(other, Vec):             # <<<<<<<<<<<<<<
@@ -110148,7 +117229,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_20__mul__(PyObject *__pyx_v_self
     __pyx_t_1 = (__pyx_t_2 != 0);
     if (__pyx_t_1) {
 
-      /* "PETSc/Mat.pyx":206
+      /* "PETSc/Mat.pyx":200
  *         if isinstance(self, Mat):
  *             if isinstance(other, Vec):
  *                 return mat_mul_vec(self, other)             # <<<<<<<<<<<<<<
@@ -110156,15 +117237,15 @@ 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_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)
+      if (!(likely(((__pyx_v_self) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(33, 200, __pyx_L1_error)
+      if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Vec))))) __PYX_ERR(33, 200, __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, 200, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_r = __pyx_t_3;
       __pyx_t_3 = 0;
       goto __pyx_L0;
 
-      /* "PETSc/Mat.pyx":205
+      /* "PETSc/Mat.pyx":199
  *     def __mul__(self, other):
  *         if isinstance(self, Mat):
  *             if isinstance(other, Vec):             # <<<<<<<<<<<<<<
@@ -110173,7 +117254,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_20__mul__(PyObject *__pyx_v_self
  */
     }
 
-    /* "PETSc/Mat.pyx":208
+    /* "PETSc/Mat.pyx":202
  *                 return mat_mul_vec(self, other)
  *             else:
  *                 return mat_mul(self, other)             # <<<<<<<<<<<<<<
@@ -110182,15 +117263,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_20__mul__(PyObject *__pyx_v_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_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)
+      if (!(likely(((__pyx_v_self) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_self, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(33, 202, __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, 202, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __pyx_r = __pyx_t_3;
       __pyx_t_3 = 0;
       goto __pyx_L0;
     }
 
-    /* "PETSc/Mat.pyx":204
+    /* "PETSc/Mat.pyx":198
  * 
  *     def __mul__(self, other):
  *         if isinstance(self, Mat):             # <<<<<<<<<<<<<<
@@ -110199,7 +117280,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_20__mul__(PyObject *__pyx_v_self
  */
   }
 
-  /* "PETSc/Mat.pyx":210
+  /* "PETSc/Mat.pyx":204
  *                 return mat_mul(self, other)
  *         else:
  *             return mat_rmul(other, self)             # <<<<<<<<<<<<<<
@@ -110208,15 +117289,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_20__mul__(PyObject *__pyx_v_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_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)
+    if (!(likely(((__pyx_v_other) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_other, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(33, 204, __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, 204, __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":197
  *             return mat_rsub(other, self)
  * 
  *     def __mul__(self, other):             # <<<<<<<<<<<<<<
@@ -110235,7 +117316,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_20__mul__(PyObject *__pyx_v_self
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":212
+/* "PETSc/Mat.pyx":206
  *             return mat_rmul(other, self)
  * 
  *     def __div__(self, other):             # <<<<<<<<<<<<<<
@@ -110244,7 +117325,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_20__mul__(PyObject *__pyx_v_self
  */
 
 /* Python wrapper */
-#if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+#if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_23__div__(PyObject *__pyx_v_self, PyObject *__pyx_v_other); /*proto*/
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_23__div__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = 0;
@@ -110256,9 +117337,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_23__div__(PyObject *__pyx_v_self
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
-#endif /*!(#if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY)*/
+#endif /*!(#if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000))*/
 
-#if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+#if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
 static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_22__div__(PyObject *__pyx_v_self, PyObject *__pyx_v_other) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -110267,7 +117348,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_22__div__(PyObject *__pyx_v_self
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__div__", 0);
 
-  /* "PETSc/Mat.pyx":213
+  /* "PETSc/Mat.pyx":207
  * 
  *     def __div__(self, other):
  *         if isinstance(self, Mat):             # <<<<<<<<<<<<<<
@@ -110278,7 +117359,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_22__div__(PyObject *__pyx_v_self
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":214
+    /* "PETSc/Mat.pyx":208
  *     def __div__(self, other):
  *         if isinstance(self, Mat):
  *             return mat_div(self, other)             # <<<<<<<<<<<<<<
@@ -110286,14 +117367,14 @@ 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_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)
+    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_div(((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":213
+    /* "PETSc/Mat.pyx":207
  * 
  *     def __div__(self, other):
  *         if isinstance(self, Mat):             # <<<<<<<<<<<<<<
@@ -110302,7 +117383,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_22__div__(PyObject *__pyx_v_self
  */
   }
 
-  /* "PETSc/Mat.pyx":216
+  /* "PETSc/Mat.pyx":210
  *             return mat_div(self, other)
  *         else:
  *             return mat_rdiv(other, self)             # <<<<<<<<<<<<<<
@@ -110311,15 +117392,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_22__div__(PyObject *__pyx_v_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_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)
+    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_rdiv(((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":212
+  /* "PETSc/Mat.pyx":206
  *             return mat_rmul(other, self)
  * 
  *     def __div__(self, other):             # <<<<<<<<<<<<<<
@@ -110337,9 +117418,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_22__div__(PyObject *__pyx_v_self
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
-#endif /*!(#if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY)*/
+#endif /*!(#if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000))*/
 
-/* "PETSc/Mat.pyx":218
+/* "PETSc/Mat.pyx":212
  *             return mat_rdiv(other, self)
  * 
  *     def __truediv__(self, other):             # <<<<<<<<<<<<<<
@@ -110368,7 +117449,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_24__truediv__(PyObject *__pyx_v_
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__truediv__", 0);
 
-  /* "PETSc/Mat.pyx":219
+  /* "PETSc/Mat.pyx":213
  * 
  *     def __truediv__(self, other):
  *         if isinstance(self, Mat):             # <<<<<<<<<<<<<<
@@ -110379,7 +117460,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_24__truediv__(PyObject *__pyx_v_
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":220
+    /* "PETSc/Mat.pyx":214
  *     def __truediv__(self, other):
  *         if isinstance(self, Mat):
  *             return mat_div(self, other)             # <<<<<<<<<<<<<<
@@ -110387,14 +117468,14 @@ 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_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)
+    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":219
+    /* "PETSc/Mat.pyx":213
  * 
  *     def __truediv__(self, other):
  *         if isinstance(self, Mat):             # <<<<<<<<<<<<<<
@@ -110403,7 +117484,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_24__truediv__(PyObject *__pyx_v_
  */
   }
 
-  /* "PETSc/Mat.pyx":222
+  /* "PETSc/Mat.pyx":216
  *             return mat_div(self, other)
  *         else:
  *             return mat_rdiv(other, self)             # <<<<<<<<<<<<<<
@@ -110412,15 +117493,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_24__truediv__(PyObject *__pyx_v_
  */
   /*else*/ {
     __Pyx_XDECREF(__pyx_r);
-    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)
+    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":218
+  /* "PETSc/Mat.pyx":212
  *             return mat_rdiv(other, self)
  * 
  *     def __truediv__(self, other):             # <<<<<<<<<<<<<<
@@ -110439,7 +117520,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_24__truediv__(PyObject *__pyx_v_
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":226
+/* "PETSc/Mat.pyx":220
  *     #
  * 
  *     def __getitem__(self, ij):             # <<<<<<<<<<<<<<
@@ -110466,7 +117547,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_26__getitem__(struct PyPetscMatO
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("__getitem__", 0);
 
-  /* "PETSc/Mat.pyx":227
+  /* "PETSc/Mat.pyx":221
  * 
  *     def __getitem__(self, ij):
  *         return mat_getitem(self, ij)             # <<<<<<<<<<<<<<
@@ -110474,13 +117555,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_ERR(33, 227, __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, 221, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":226
+  /* "PETSc/Mat.pyx":220
  *     #
  * 
  *     def __getitem__(self, ij):             # <<<<<<<<<<<<<<
@@ -110499,7 +117580,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_26__getitem__(struct PyPetscMatO
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":229
+/* "PETSc/Mat.pyx":223
  *         return mat_getitem(self, ij)
  * 
  *     def __setitem__(self, ij, v):             # <<<<<<<<<<<<<<
@@ -110526,16 +117607,16 @@ static int __pyx_pf_8petsc4py_5PETSc_3Mat_28__setitem__(struct PyPetscMatObject
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("__setitem__", 0);
 
-  /* "PETSc/Mat.pyx":230
+  /* "PETSc/Mat.pyx":224
  * 
  *     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_ERR(33, 230, __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 == ((int)-1))) __PYX_ERR(33, 224, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":229
+  /* "PETSc/Mat.pyx":223
  *         return mat_getitem(self, ij)
  * 
  *     def __setitem__(self, ij, v):             # <<<<<<<<<<<<<<
@@ -110554,7 +117635,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3Mat_28__setitem__(struct PyPetscMatObject
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":232
+/* "PETSc/Mat.pyx":226
  *         mat_setitem(self, ij, v)
  * 
  *     def __call__(self, x, y=None):             # <<<<<<<<<<<<<<
@@ -110579,7 +117660,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_31__call__(PyObject *__pyx_v_sel
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -110588,6 +117671,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_31__call__(PyObject *__pyx_v_sel
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y);
@@ -110595,11 +117679,12 @@ 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_ERR(33, 232, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__call__") < 0)) __PYX_ERR(33, 226, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -110610,7 +117695,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_ERR(33, 232, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__call__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 226, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -110631,12 +117716,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_30__call__(struct PyPetscMatObje
   PyObject *__pyx_t_3 = NULL;
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
-  Py_ssize_t __pyx_t_6;
+  int __pyx_t_6;
   PyObject *__pyx_t_7 = NULL;
   __Pyx_RefNannySetupContext("__call__", 0);
   __Pyx_INCREF(__pyx_v_y);
 
-  /* "PETSc/Mat.pyx":233
+  /* "PETSc/Mat.pyx":227
  * 
  *     def __call__(self, x, y=None):
  *         if y is None:             # <<<<<<<<<<<<<<
@@ -110647,17 +117732,17 @@ 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":234
+    /* "PETSc/Mat.pyx":228
  *     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_ERR(33, 234, __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, 228, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && 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);
@@ -110667,17 +117752,17 @@ 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_ERR(33, 234, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 228, __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(33, 234, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 228, __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;
 
-    /* "PETSc/Mat.pyx":233
+    /* "PETSc/Mat.pyx":227
  * 
  *     def __call__(self, x, y=None):
  *         if y is None:             # <<<<<<<<<<<<<<
@@ -110686,18 +117771,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_30__call__(struct PyPetscMatObje
  */
   }
 
-  /* "PETSc/Mat.pyx":235
+  /* "PETSc/Mat.pyx":229
  *         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_ERR(33, 235, __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, 229, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_5 = NULL;
   __pyx_t_6 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -110707,24 +117792,42 @@ 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_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;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_4)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_x, __pyx_v_y};
+    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 229, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __Pyx_GOTREF(__pyx_t_3);
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_x, __pyx_v_y};
+    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_6, 2+__pyx_t_6); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 229, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __Pyx_GOTREF(__pyx_t_3);
+  } else
+  #endif
+  {
+    __pyx_t_7 = PyTuple_New(2+__pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 229, __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;
+    }
+    __Pyx_INCREF(__pyx_v_x);
+    __Pyx_GIVEREF(__pyx_v_x);
+    PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_v_x);
+    __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_ERR(33, 229, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   }
-  __Pyx_INCREF(__pyx_v_x);
-  __Pyx_GIVEREF(__pyx_v_x);
-  PyTuple_SET_ITEM(__pyx_t_7, 0+__pyx_t_6, __pyx_v_x);
-  __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_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":236
+  /* "PETSc/Mat.pyx":230
  *             y = self.createVecLeft()
  *         self.mult(x, y)
  *         return y             # <<<<<<<<<<<<<<
@@ -110736,7 +117839,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_30__call__(struct PyPetscMatObje
   __pyx_r = __pyx_v_y;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":232
+  /* "PETSc/Mat.pyx":226
  *         mat_setitem(self, ij, v)
  * 
  *     def __call__(self, x, y=None):             # <<<<<<<<<<<<<<
@@ -110759,7 +117862,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_30__call__(struct PyPetscMatObje
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":239
+/* "PETSc/Mat.pyx":233
  *     #
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -110784,6 +117887,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_33view(PyObject *__pyx_v_self, P
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -110796,11 +117900,12 @@ 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_ERR(33, 239, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(33, 233, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -110809,13 +117914,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_ERR(33, 239, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 233, __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_ERR(33, 239, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) __PYX_ERR(33, 233, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_32view(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
@@ -110837,7 +117942,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_32view(struct PyPetscMatObject *
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("view", 0);
 
-  /* "PETSc/Mat.pyx":240
+  /* "PETSc/Mat.pyx":234
  * 
  *     def view(self, Viewer viewer=None):
  *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
@@ -110846,7 +117951,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_32view(struct PyPetscMatObject *
  */
   __pyx_v_vwr = NULL;
 
-  /* "PETSc/Mat.pyx":241
+  /* "PETSc/Mat.pyx":235
  *     def view(self, Viewer viewer=None):
  *         cdef PetscViewer vwr = NULL
  *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
@@ -110860,16 +117965,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_32view(struct PyPetscMatObject *
     __pyx_v_vwr = __pyx_t_3;
   }
 
-  /* "PETSc/Mat.pyx":242
+  /* "PETSc/Mat.pyx":236
  *         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_ERR(33, 242, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatView(__pyx_v_self->mat, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(33, 236, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":239
+  /* "PETSc/Mat.pyx":233
  *     #
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -110889,7 +117994,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_32view(struct PyPetscMatObject *
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":244
+/* "PETSc/Mat.pyx":238
  *         CHKERR( MatView(self.mat, vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -110920,16 +118025,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_34destroy(struct PyPetscMatObjec
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("destroy", 0);
 
-  /* "PETSc/Mat.pyx":245
+  /* "PETSc/Mat.pyx":239
  * 
  *     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_ERR(33, 245, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDestroy((&__pyx_v_self->mat))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(33, 239, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":246
+  /* "PETSc/Mat.pyx":240
  *     def destroy(self):
  *         CHKERR( MatDestroy(&self.mat) )
  *         return self             # <<<<<<<<<<<<<<
@@ -110941,7 +118046,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_34destroy(struct PyPetscMatObjec
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":244
+  /* "PETSc/Mat.pyx":238
  *         CHKERR( MatView(self.mat, vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -110959,7 +118064,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_34destroy(struct PyPetscMatObjec
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":248
+/* "PETSc/Mat.pyx":242
  *         return self
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
@@ -110984,6 +118089,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_37create(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -110996,11 +118102,12 @@ 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_ERR(33, 248, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(33, 242, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -111009,7 +118116,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_ERR(33, 248, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 242, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -111031,17 +118138,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_36create(struct PyPetscMatObject
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("create", 0);
 
-  /* "PETSc/Mat.pyx":249
+  /* "PETSc/Mat.pyx":243
  * 
  *     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_ERR(33, 249, __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, 243, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":250
+  /* "PETSc/Mat.pyx":244
  *     def create(self, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscMat newmat = NULL             # <<<<<<<<<<<<<<
@@ -111050,16 +118157,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_36create(struct PyPetscMatObject
  */
   __pyx_v_newmat = NULL;
 
-  /* "PETSc/Mat.pyx":251
+  /* "PETSc/Mat.pyx":245
  *         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_ERR(33, 251, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreate(__pyx_v_ccomm, (&__pyx_v_newmat))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(33, 245, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":252
+  /* "PETSc/Mat.pyx":246
  *         cdef PetscMat newmat = NULL
  *         CHKERR( MatCreate(ccomm, &newmat) )
  *         PetscCLEAR(self.obj); self.mat = newmat             # <<<<<<<<<<<<<<
@@ -111069,7 +118176,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":253
+  /* "PETSc/Mat.pyx":247
  *         CHKERR( MatCreate(ccomm, &newmat) )
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         return self             # <<<<<<<<<<<<<<
@@ -111081,7 +118188,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_36create(struct PyPetscMatObject
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":248
+  /* "PETSc/Mat.pyx":242
  *         return self
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
@@ -111099,7 +118206,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_36create(struct PyPetscMatObject
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":255
+/* "PETSc/Mat.pyx":249
  *         return self
  * 
  *     def setType(self, mat_type):             # <<<<<<<<<<<<<<
@@ -111123,6 +118230,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_39setType(PyObject *__pyx_v_self
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -111133,7 +118241,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_ERR(33, 255, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) __PYX_ERR(33, 249, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -111144,7 +118252,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_ERR(33, 255, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 249, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -111166,7 +118274,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_38setType(struct PyPetscMatObjec
   __Pyx_RefNannySetupContext("setType", 0);
   __Pyx_INCREF(__pyx_v_mat_type);
 
-  /* "PETSc/Mat.pyx":256
+  /* "PETSc/Mat.pyx":250
  * 
  *     def setType(self, mat_type):
  *         cdef PetscMatType cval = NULL             # <<<<<<<<<<<<<<
@@ -111175,28 +118283,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_38setType(struct PyPetscMatObjec
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Mat.pyx":257
+  /* "PETSc/Mat.pyx":251
  *     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_ERR(33, 257, __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, 251, __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":258
+  /* "PETSc/Mat.pyx":252
  *         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_ERR(33, 258, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetType(__pyx_v_self->mat, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(33, 252, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":255
+  /* "PETSc/Mat.pyx":249
  *         return self
  * 
  *     def setType(self, mat_type):             # <<<<<<<<<<<<<<
@@ -111218,7 +118326,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_38setType(struct PyPetscMatObjec
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":260
+/* "PETSc/Mat.pyx":254
  *         CHKERR( MatSetType(self.mat, cval) )
  * 
  *     def setSizes(self, size, bsize=None):             # <<<<<<<<<<<<<<
@@ -111244,7 +118352,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_41setSizes(PyObject *__pyx_v_sel
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -111253,6 +118363,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_41setSizes(PyObject *__pyx_v_sel
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_bsize);
@@ -111260,11 +118371,12 @@ 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_ERR(33, 260, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setSizes") < 0)) __PYX_ERR(33, 254, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -111275,7 +118387,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_ERR(33, 260, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setSizes", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 254, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setSizes", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -111301,7 +118413,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_40setSizes(struct PyPetscMatObje
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setSizes", 0);
 
-  /* "PETSc/Mat.pyx":261
+  /* "PETSc/Mat.pyx":255
  * 
  *     def setSizes(self, size, bsize=None):
  *         cdef PetscInt rbs = 0, cbs = 0, m = 0, n = 0, M = 0, N = 0             # <<<<<<<<<<<<<<
@@ -111315,25 +118427,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_40setSizes(struct PyPetscMatObje
   __pyx_v_M = 0;
   __pyx_v_N = 0;
 
-  /* "PETSc/Mat.pyx":262
+  /* "PETSc/Mat.pyx":256
  *     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_ERR(33, 262, __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 == ((int)-1))) __PYX_ERR(33, 256, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":263
+  /* "PETSc/Mat.pyx":257
  *         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_ERR(33, 263, __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 == ((int)-1))) __PYX_ERR(33, 257, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":264
+  /* "PETSc/Mat.pyx":258
  *         Mat_Sizes(size, bsize, &rbs, &cbs, &m, &n, &M, &N)
  *         CHKERR( MatSetSizes(self.mat, m, n, M, N) )
  *         if rbs != PETSC_DECIDE:             # <<<<<<<<<<<<<<
@@ -111343,7 +118455,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":265
+    /* "PETSc/Mat.pyx":259
  *         CHKERR( MatSetSizes(self.mat, m, n, M, N) )
  *         if rbs != PETSC_DECIDE:
  *             if cbs != PETSC_DECIDE:             # <<<<<<<<<<<<<<
@@ -111353,16 +118465,16 @@ 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":266
+      /* "PETSc/Mat.pyx":260
  *         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_ERR(33, 266, __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 == ((int)-1))) __PYX_ERR(33, 260, __pyx_L1_error)
 
-      /* "PETSc/Mat.pyx":265
+      /* "PETSc/Mat.pyx":259
  *         CHKERR( MatSetSizes(self.mat, m, n, M, N) )
  *         if rbs != PETSC_DECIDE:
  *             if cbs != PETSC_DECIDE:             # <<<<<<<<<<<<<<
@@ -111372,7 +118484,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_40setSizes(struct PyPetscMatObje
       goto __pyx_L4;
     }
 
-    /* "PETSc/Mat.pyx":268
+    /* "PETSc/Mat.pyx":262
  *                 CHKERR( MatSetBlockSizes(self.mat, rbs, cbs) )
  *             else:
  *                 CHKERR( MatSetBlockSize(self.mat, rbs) )             # <<<<<<<<<<<<<<
@@ -111380,11 +118492,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_40setSizes(struct PyPetscMatObje
  *     def setBlockSize(self, bsize):
  */
     /*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_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetBlockSize(__pyx_v_self->mat, __pyx_v_rbs)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(33, 262, __pyx_L1_error)
     }
     __pyx_L4:;
 
-    /* "PETSc/Mat.pyx":264
+    /* "PETSc/Mat.pyx":258
  *         Mat_Sizes(size, bsize, &rbs, &cbs, &m, &n, &M, &N)
  *         CHKERR( MatSetSizes(self.mat, m, n, M, N) )
  *         if rbs != PETSC_DECIDE:             # <<<<<<<<<<<<<<
@@ -111393,7 +118505,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_40setSizes(struct PyPetscMatObje
  */
   }
 
-  /* "PETSc/Mat.pyx":260
+  /* "PETSc/Mat.pyx":254
  *         CHKERR( MatSetType(self.mat, cval) )
  * 
  *     def setSizes(self, size, bsize=None):             # <<<<<<<<<<<<<<
@@ -111413,7 +118525,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_40setSizes(struct PyPetscMatObje
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":270
+/* "PETSc/Mat.pyx":264
  *                 CHKERR( MatSetBlockSize(self.mat, rbs) )
  * 
  *     def setBlockSize(self, bsize):             # <<<<<<<<<<<<<<
@@ -111437,6 +118549,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_43setBlockSize(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -111447,7 +118560,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_ERR(33, 270, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setBlockSize") < 0)) __PYX_ERR(33, 264, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -111458,7 +118571,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_ERR(33, 270, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setBlockSize", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 264, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setBlockSize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -111479,26 +118592,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_42setBlockSize(struct PyPetscMat
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setBlockSize", 0);
 
-  /* "PETSc/Mat.pyx":271
+  /* "PETSc/Mat.pyx":265
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(33, 271, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_bsize); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(33, 265, __pyx_L1_error)
   __pyx_v_bs = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":272
+  /* "PETSc/Mat.pyx":266
  *     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_ERR(33, 272, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetBlockSize(__pyx_v_self->mat, __pyx_v_bs)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(33, 266, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":270
+  /* "PETSc/Mat.pyx":264
  *                 CHKERR( MatSetBlockSize(self.mat, rbs) )
  * 
  *     def setBlockSize(self, bsize):             # <<<<<<<<<<<<<<
@@ -111518,7 +118631,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_42setBlockSize(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":274
+/* "PETSc/Mat.pyx":268
  *         CHKERR( MatSetBlockSize(self.mat, bs) )
  * 
  *     def setBlockSizes(self, row_bsize, col_bsize):             # <<<<<<<<<<<<<<
@@ -111543,7 +118656,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_45setBlockSizes(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -111552,14 +118667,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_45setBlockSizes(PyObject *__pyx_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_row_bsize)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 274, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setBlockSizes", 1, 2, 2, 1); __PYX_ERR(33, 268, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setBlockSizes") < 0)) __PYX_ERR(33, 274, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setBlockSizes") < 0)) __PYX_ERR(33, 268, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -111572,7 +118688,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_ERR(33, 274, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setBlockSizes", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 268, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setBlockSizes", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -111594,36 +118710,36 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_44setBlockSizes(struct PyPetscMa
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setBlockSizes", 0);
 
-  /* "PETSc/Mat.pyx":275
+  /* "PETSc/Mat.pyx":269
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(33, 275, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_row_bsize); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(33, 269, __pyx_L1_error)
   __pyx_v_rbs = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":276
+  /* "PETSc/Mat.pyx":270
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(33, 276, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_col_bsize); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(33, 270, __pyx_L1_error)
   __pyx_v_cbs = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":277
+  /* "PETSc/Mat.pyx":271
  *         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_ERR(33, 277, __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 == ((int)-1))) __PYX_ERR(33, 271, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":274
+  /* "PETSc/Mat.pyx":268
  *         CHKERR( MatSetBlockSize(self.mat, bs) )
  * 
  *     def setBlockSizes(self, row_bsize, col_bsize):             # <<<<<<<<<<<<<<
@@ -111643,7 +118759,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_44setBlockSizes(struct PyPetscMa
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":280
+/* "PETSc/Mat.pyx":274
  *     #
  * 
  *     def createAIJ(self, size, bsize=None, nnz=None, csr=None, comm=None):             # <<<<<<<<<<<<<<
@@ -111675,10 +118791,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_47createAIJ(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -111687,21 +118808,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_47createAIJ(PyObject *__pyx_v_se
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_bsize);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nnz);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_csr);
           if (value) { values[3] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  4:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -111709,14 +118834,18 @@ 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_ERR(33, 280, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createAIJ") < 0)) __PYX_ERR(33, 274, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -111730,7 +118859,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_ERR(33, 280, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createAIJ", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 274, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.createAIJ", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -111750,7 +118879,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_46createAIJ(struct PyPetscMatObj
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("createAIJ", 0);
 
-  /* "PETSc/Mat.pyx":282
+  /* "PETSc/Mat.pyx":276
  *     def createAIJ(self, size, bsize=None, nnz=None, csr=None, comm=None):
  *         # create matrix
  *         cdef PetscMat newmat = NULL             # <<<<<<<<<<<<<<
@@ -111759,16 +118888,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_46createAIJ(struct PyPetscMatObj
  */
   __pyx_v_newmat = NULL;
 
-  /* "PETSc/Mat.pyx":283
+  /* "PETSc/Mat.pyx":277
  *         # 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_ERR(33, 283, __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 == ((int)-1))) __PYX_ERR(33, 277, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":284
+  /* "PETSc/Mat.pyx":278
  *         cdef PetscMat newmat = NULL
  *         Mat_Create(MATAIJ, comm, size, bsize, &newmat)
  *         PetscCLEAR(self.obj); self.mat = newmat             # <<<<<<<<<<<<<<
@@ -111778,16 +118907,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":286
+  /* "PETSc/Mat.pyx":280
  *         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_ERR(33, 286, __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 == ((int)-1))) __PYX_ERR(33, 280, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":287
+  /* "PETSc/Mat.pyx":281
  *         # preallocate matrix
  *         Mat_AllocAIJ(self.mat, nnz, csr)
  *         return self             # <<<<<<<<<<<<<<
@@ -111799,7 +118928,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_46createAIJ(struct PyPetscMatObj
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":280
+  /* "PETSc/Mat.pyx":274
  *     #
  * 
  *     def createAIJ(self, size, bsize=None, nnz=None, csr=None, comm=None):             # <<<<<<<<<<<<<<
@@ -111817,7 +118946,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_46createAIJ(struct PyPetscMatObj
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":289
+/* "PETSc/Mat.pyx":283
  *         return self
  * 
  *     def createBAIJ(self, size, bsize, nnz=None, csr=None, comm=None):             # <<<<<<<<<<<<<<
@@ -111848,10 +118977,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_49createBAIJ(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -111860,21 +118994,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_49createBAIJ(PyObject *__pyx_v_s
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 289, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("createBAIJ", 0, 2, 5, 1); __PYX_ERR(33, 283, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nnz);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_csr);
           if (value) { values[3] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  4:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -111882,13 +119020,16 @@ 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_ERR(33, 289, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createBAIJ") < 0)) __PYX_ERR(33, 283, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -111903,7 +119044,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_ERR(33, 289, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createBAIJ", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 283, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.createBAIJ", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -111923,7 +119064,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_48createBAIJ(struct PyPetscMatOb
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("createBAIJ", 0);
 
-  /* "PETSc/Mat.pyx":291
+  /* "PETSc/Mat.pyx":285
  *     def createBAIJ(self, size, bsize, nnz=None, csr=None, comm=None):
  *         # create matrix
  *         cdef PetscMat newmat = NULL             # <<<<<<<<<<<<<<
@@ -111932,16 +119073,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_48createBAIJ(struct PyPetscMatOb
  */
   __pyx_v_newmat = NULL;
 
-  /* "PETSc/Mat.pyx":292
+  /* "PETSc/Mat.pyx":286
  *         # 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_ERR(33, 292, __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 == ((int)-1))) __PYX_ERR(33, 286, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":293
+  /* "PETSc/Mat.pyx":287
  *         cdef PetscMat newmat = NULL
  *         Mat_Create(MATBAIJ, comm, size, bsize, &newmat)
  *         PetscCLEAR(self.obj); self.mat = newmat             # <<<<<<<<<<<<<<
@@ -111951,16 +119092,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":295
+  /* "PETSc/Mat.pyx":289
  *         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_ERR(33, 295, __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 == ((int)-1))) __PYX_ERR(33, 289, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":296
+  /* "PETSc/Mat.pyx":290
  *         # preallocate matrix
  *         Mat_AllocAIJ(self.mat, nnz, csr)
  *         return self             # <<<<<<<<<<<<<<
@@ -111972,7 +119113,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_48createBAIJ(struct PyPetscMatOb
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":289
+  /* "PETSc/Mat.pyx":283
  *         return self
  * 
  *     def createBAIJ(self, size, bsize, nnz=None, csr=None, comm=None):             # <<<<<<<<<<<<<<
@@ -111990,7 +119131,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_48createBAIJ(struct PyPetscMatOb
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":298
+/* "PETSc/Mat.pyx":292
  *         return self
  * 
  *     def createSBAIJ(self, size, bsize, nnz=None, csr=None, comm=None):             # <<<<<<<<<<<<<<
@@ -112021,10 +119162,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_51createSBAIJ(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -112033,21 +119179,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_51createSBAIJ(PyObject *__pyx_v_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 298, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("createSBAIJ", 0, 2, 5, 1); __PYX_ERR(33, 292, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nnz);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_csr);
           if (value) { values[3] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  4:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -112055,13 +119205,16 @@ 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_ERR(33, 298, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createSBAIJ") < 0)) __PYX_ERR(33, 292, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -112076,7 +119229,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_ERR(33, 298, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createSBAIJ", 0, 2, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 292, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.createSBAIJ", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -112096,7 +119249,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_50createSBAIJ(struct PyPetscMatO
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("createSBAIJ", 0);
 
-  /* "PETSc/Mat.pyx":300
+  /* "PETSc/Mat.pyx":294
  *     def createSBAIJ(self, size, bsize, nnz=None, csr=None, comm=None):
  *         # create matrix
  *         cdef PetscMat newmat = NULL             # <<<<<<<<<<<<<<
@@ -112105,16 +119258,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_50createSBAIJ(struct PyPetscMatO
  */
   __pyx_v_newmat = NULL;
 
-  /* "PETSc/Mat.pyx":301
+  /* "PETSc/Mat.pyx":295
  *         # 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_ERR(33, 301, __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 == ((int)-1))) __PYX_ERR(33, 295, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":302
+  /* "PETSc/Mat.pyx":296
  *         cdef PetscMat newmat = NULL
  *         Mat_Create(MATSBAIJ, comm, size, bsize, &newmat)
  *         PetscCLEAR(self.obj); self.mat = newmat             # <<<<<<<<<<<<<<
@@ -112124,16 +119277,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":304
+  /* "PETSc/Mat.pyx":298
  *         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_ERR(33, 304, __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 == ((int)-1))) __PYX_ERR(33, 298, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":305
+  /* "PETSc/Mat.pyx":299
  *         # preallocate matrix
  *         Mat_AllocAIJ(self.mat, nnz, csr)
  *         return self             # <<<<<<<<<<<<<<
@@ -112145,7 +119298,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_50createSBAIJ(struct PyPetscMatO
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":298
+  /* "PETSc/Mat.pyx":292
  *         return self
  * 
  *     def createSBAIJ(self, size, bsize, nnz=None, csr=None, comm=None):             # <<<<<<<<<<<<<<
@@ -112163,7 +119316,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_50createSBAIJ(struct PyPetscMatO
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":307
+/* "PETSc/Mat.pyx":301
  *         return self
  * 
  *     def createAIJCRL(self, size, bsize=None, nnz=None, csr=None, comm=None):             # <<<<<<<<<<<<<<
@@ -112195,10 +119348,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_53createAIJCRL(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -112207,21 +119365,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_53createAIJCRL(PyObject *__pyx_v
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_bsize);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nnz);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_csr);
           if (value) { values[3] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  4:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -112229,14 +119391,18 @@ 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_ERR(33, 307, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createAIJCRL") < 0)) __PYX_ERR(33, 301, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -112250,7 +119416,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_ERR(33, 307, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createAIJCRL", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 301, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.createAIJCRL", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -112270,7 +119436,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_52createAIJCRL(struct PyPetscMat
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("createAIJCRL", 0);
 
-  /* "PETSc/Mat.pyx":309
+  /* "PETSc/Mat.pyx":303
  *     def createAIJCRL(self, size, bsize=None, nnz=None, csr=None, comm=None):
  *         # create matrix
  *         cdef PetscMat newmat = NULL             # <<<<<<<<<<<<<<
@@ -112279,16 +119445,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_52createAIJCRL(struct PyPetscMat
  */
   __pyx_v_newmat = NULL;
 
-  /* "PETSc/Mat.pyx":310
+  /* "PETSc/Mat.pyx":304
  *         # 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_ERR(33, 310, __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 == ((int)-1))) __PYX_ERR(33, 304, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":311
+  /* "PETSc/Mat.pyx":305
  *         cdef PetscMat newmat = NULL
  *         Mat_Create(MATAIJCRL, comm, size, bsize, &newmat)
  *         PetscCLEAR(self.obj); self.mat = newmat             # <<<<<<<<<<<<<<
@@ -112298,16 +119464,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":313
+  /* "PETSc/Mat.pyx":307
  *         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_ERR(33, 313, __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 == ((int)-1))) __PYX_ERR(33, 307, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":314
+  /* "PETSc/Mat.pyx":308
  *         # preallocate matrix
  *         Mat_AllocAIJ(self.mat, nnz, csr)
  *         return self             # <<<<<<<<<<<<<<
@@ -112319,7 +119485,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_52createAIJCRL(struct PyPetscMat
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":307
+  /* "PETSc/Mat.pyx":301
  *         return self
  * 
  *     def createAIJCRL(self, size, bsize=None, nnz=None, csr=None, comm=None):             # <<<<<<<<<<<<<<
@@ -112337,7 +119503,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_52createAIJCRL(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":316
+/* "PETSc/Mat.pyx":310
  *         return self
  * 
  *     def setPreallocationNNZ(self, nnz):             # <<<<<<<<<<<<<<
@@ -112361,6 +119527,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_55setPreallocationNNZ(PyObject *
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -112371,7 +119538,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_ERR(33, 316, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPreallocationNNZ") < 0)) __PYX_ERR(33, 310, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -112382,7 +119549,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_ERR(33, 316, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setPreallocationNNZ", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 310, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setPreallocationNNZ", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -112402,7 +119569,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_54setPreallocationNNZ(struct PyP
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setPreallocationNNZ", 0);
 
-  /* "PETSc/Mat.pyx":317
+  /* "PETSc/Mat.pyx":311
  * 
  *     def setPreallocationNNZ(self, nnz):
  *         cdef PetscBool done = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -112411,25 +119578,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_54setPreallocationNNZ(struct PyP
  */
   __pyx_v_done = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":318
+  /* "PETSc/Mat.pyx":312
  *     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_ERR(33, 318, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatIsPreallocated(__pyx_v_self->mat, (&__pyx_v_done))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(33, 312, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":320
+  /* "PETSc/Mat.pyx":314
  *         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_ERR(33, 320, __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 == ((int)-1))) __PYX_ERR(33, 314, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":321
+  /* "PETSc/Mat.pyx":315
  *         # if done: raise Error(PETSC_ERR_ORDER)
  *         Mat_AllocAIJ_NNZ(self.mat, nnz)
  *         return self             # <<<<<<<<<<<<<<
@@ -112441,7 +119608,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_54setPreallocationNNZ(struct PyP
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":316
+  /* "PETSc/Mat.pyx":310
  *         return self
  * 
  *     def setPreallocationNNZ(self, nnz):             # <<<<<<<<<<<<<<
@@ -112459,7 +119626,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_54setPreallocationNNZ(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":323
+/* "PETSc/Mat.pyx":317
  *         return self
  * 
  *     def setPreallocationCSR(self, csr):             # <<<<<<<<<<<<<<
@@ -112483,6 +119650,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_57setPreallocationCSR(PyObject *
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -112493,7 +119661,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_ERR(33, 323, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPreallocationCSR") < 0)) __PYX_ERR(33, 317, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -112504,7 +119672,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_ERR(33, 323, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setPreallocationCSR", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 317, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setPreallocationCSR", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -112524,7 +119692,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_56setPreallocationCSR(struct PyP
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setPreallocationCSR", 0);
 
-  /* "PETSc/Mat.pyx":324
+  /* "PETSc/Mat.pyx":318
  * 
  *     def setPreallocationCSR(self, csr):
  *         cdef PetscBool done = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -112533,25 +119701,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_56setPreallocationCSR(struct PyP
  */
   __pyx_v_done = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":325
+  /* "PETSc/Mat.pyx":319
  *     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_ERR(33, 325, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatIsPreallocated(__pyx_v_self->mat, (&__pyx_v_done))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(33, 319, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":327
+  /* "PETSc/Mat.pyx":321
  *         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_ERR(33, 327, __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 == ((int)-1))) __PYX_ERR(33, 321, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":328
+  /* "PETSc/Mat.pyx":322
  *         # if done: raise Error(PETSC_ERR_ORDER)
  *         Mat_AllocAIJ_CSR(self.mat, csr)
  *         return self             # <<<<<<<<<<<<<<
@@ -112563,7 +119731,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_56setPreallocationCSR(struct PyP
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":323
+  /* "PETSc/Mat.pyx":317
  *         return self
  * 
  *     def setPreallocationCSR(self, csr):             # <<<<<<<<<<<<<<
@@ -112581,7 +119749,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_56setPreallocationCSR(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":330
+/* "PETSc/Mat.pyx":324
  *         return self
  * 
  *     def createAIJWithArrays(self, size, csr, bsize=None, comm=None):             # <<<<<<<<<<<<<<
@@ -112610,9 +119778,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_59createAIJWithArrays(PyObject *
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -112621,16 +119793,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_59createAIJWithArrays(PyObject *
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 330, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("createAIJWithArrays", 0, 2, 4, 1); __PYX_ERR(33, 324, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_bsize);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -112638,12 +119813,14 @@ 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_ERR(33, 330, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createAIJWithArrays") < 0)) __PYX_ERR(33, 324, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -112657,7 +119834,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_ERR(33, 330, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createAIJWithArrays", 0, 2, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 324, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.createAIJWithArrays", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -112718,17 +119895,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
   __Pyx_RefNannySetupContext("createAIJWithArrays", 0);
   __Pyx_INCREF(__pyx_v_csr);
 
-  /* "PETSc/Mat.pyx":332
+  /* "PETSc/Mat.pyx":326
  *     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_ERR(33, 332, __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, 326, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":334
+  /* "PETSc/Mat.pyx":328
  *         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             # <<<<<<<<<<<<<<
@@ -112742,16 +119919,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
   __pyx_v_M = 0;
   __pyx_v_N = 0;
 
-  /* "PETSc/Mat.pyx":335
+  /* "PETSc/Mat.pyx":329
  *         # 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_ERR(33, 335, __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 == ((int)-1))) __PYX_ERR(33, 329, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":336
+  /* "PETSc/Mat.pyx":330
  *         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             # <<<<<<<<<<<<<<
@@ -112763,7 +119940,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
     __pyx_v_rbs = 1;
   }
 
-  /* "PETSc/Mat.pyx":337
+  /* "PETSc/Mat.pyx":331
  *         Mat_Sizes(size, bsize, &rbs, &cbs, &m, &n, &M, &N)
  *         if rbs == PETSC_DECIDE: rbs = 1
  *         if cbs == PETSC_DECIDE: cbs = rbs             # <<<<<<<<<<<<<<
@@ -112775,25 +119952,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
     __pyx_v_cbs = __pyx_v_rbs;
   }
 
-  /* "PETSc/Mat.pyx":338
+  /* "PETSc/Mat.pyx":332
  *         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_ERR(33, 338, __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 == ((int)-1))) __PYX_ERR(33, 332, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":339
+  /* "PETSc/Mat.pyx":333
  *         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_ERR(33, 339, __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 == ((int)-1))) __PYX_ERR(33, 333, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":342
+  /* "PETSc/Mat.pyx":336
  *         # unpack CSR argument
  *         cdef object pi, pj, pv, poi, poj, pov
  *         try:             # <<<<<<<<<<<<<<
@@ -112809,7 +119986,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
     __Pyx_XGOTREF(__pyx_t_6);
     /*try:*/ {
 
-      /* "PETSc/Mat.pyx":343
+      /* "PETSc/Mat.pyx":337
  *         cdef object pi, pj, pv, poi, poj, pov
  *         try:
  *             (pi, pj, pv), (poi, poj, pov) = csr             # <<<<<<<<<<<<<<
@@ -112818,7 +119995,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
  */
       if ((likely(PyTuple_CheckExact(__pyx_v_csr))) || (PyList_CheckExact(__pyx_v_csr))) {
         PyObject* sequence = __pyx_v_csr;
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if !CYTHON_COMPILING_IN_PYPY
         Py_ssize_t size = Py_SIZE(sequence);
         #else
         Py_ssize_t size = PySequence_Size(sequence);
@@ -112826,9 +120003,9 @@ 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_ERR(33, 343, __pyx_L5_error)
+          __PYX_ERR(33, 337, __pyx_L5_error)
         }
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         if (likely(PyTuple_CheckExact(sequence))) {
           __pyx_t_7 = PyTuple_GET_ITEM(sequence, 0); 
           __pyx_t_8 = PyTuple_GET_ITEM(sequence, 1); 
@@ -112839,34 +120016,34 @@ 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_ERR(33, 343, __pyx_L5_error)
+        __pyx_t_7 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 337, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_7);
-        __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 343, __pyx_L5_error)
+        __pyx_t_8 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 337, __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_ERR(33, 343, __pyx_L5_error)
+        __pyx_t_9 = PyObject_GetIter(__pyx_v_csr); if (unlikely(!__pyx_t_9)) __PYX_ERR(33, 337, __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;
+        index = 0; __pyx_t_7 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_7)) goto __pyx_L11_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;
+        index = 1; __pyx_t_8 = __pyx_t_10(__pyx_t_9); if (unlikely(!__pyx_t_8)) goto __pyx_L11_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_8);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) __PYX_ERR(33, 343, __pyx_L5_error)
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_9), 2) < 0) __PYX_ERR(33, 337, __pyx_L5_error)
         __pyx_t_10 = NULL;
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
-        goto __pyx_L14_unpacking_done;
-        __pyx_L13_unpacking_failed:;
+        goto __pyx_L12_unpacking_done;
+        __pyx_L11_unpacking_failed:;
         __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
         __pyx_t_10 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        __PYX_ERR(33, 343, __pyx_L5_error)
-        __pyx_L14_unpacking_done:;
+        __PYX_ERR(33, 337, __pyx_L5_error)
+        __pyx_L12_unpacking_done:;
       }
       if ((likely(PyTuple_CheckExact(__pyx_t_7))) || (PyList_CheckExact(__pyx_t_7))) {
         PyObject* sequence = __pyx_t_7;
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if !CYTHON_COMPILING_IN_PYPY
         Py_ssize_t size = Py_SIZE(sequence);
         #else
         Py_ssize_t size = PySequence_Size(sequence);
@@ -112874,9 +120051,9 @@ 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_ERR(33, 343, __pyx_L5_error)
+          __PYX_ERR(33, 337, __pyx_L5_error)
         }
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         if (likely(PyTuple_CheckExact(sequence))) {
           __pyx_t_9 = PyTuple_GET_ITEM(sequence, 0); 
           __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); 
@@ -112890,36 +120067,36 @@ 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_ERR(33, 343, __pyx_L5_error)
+        __pyx_t_9 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_9)) __PYX_ERR(33, 337, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_9);
-        __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(33, 343, __pyx_L5_error)
+        __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(33, 337, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_11);
-        __pyx_t_12 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_12)) __PYX_ERR(33, 343, __pyx_L5_error)
+        __pyx_t_12 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_12)) __PYX_ERR(33, 337, __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_ERR(33, 343, __pyx_L5_error)
+        __pyx_t_13 = PyObject_GetIter(__pyx_t_7); if (unlikely(!__pyx_t_13)) __PYX_ERR(33, 337, __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;
-        index = 0; __pyx_t_9 = __pyx_t_10(__pyx_t_13); if (unlikely(!__pyx_t_9)) goto __pyx_L15_unpacking_failed;
+        index = 0; __pyx_t_9 = __pyx_t_10(__pyx_t_13); if (unlikely(!__pyx_t_9)) goto __pyx_L13_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_9);
-        index = 1; __pyx_t_11 = __pyx_t_10(__pyx_t_13); if (unlikely(!__pyx_t_11)) goto __pyx_L15_unpacking_failed;
+        index = 1; __pyx_t_11 = __pyx_t_10(__pyx_t_13); if (unlikely(!__pyx_t_11)) goto __pyx_L13_unpacking_failed;
         __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;
+        index = 2; __pyx_t_12 = __pyx_t_10(__pyx_t_13); if (unlikely(!__pyx_t_12)) goto __pyx_L13_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_12);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_13), 3) < 0) __PYX_ERR(33, 343, __pyx_L5_error)
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_13), 3) < 0) __PYX_ERR(33, 337, __pyx_L5_error)
         __pyx_t_10 = NULL;
         __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
-        goto __pyx_L16_unpacking_done;
-        __pyx_L15_unpacking_failed:;
+        goto __pyx_L14_unpacking_done;
+        __pyx_L13_unpacking_failed:;
         __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
         __pyx_t_10 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        __PYX_ERR(33, 343, __pyx_L5_error)
-        __pyx_L16_unpacking_done:;
+        __PYX_ERR(33, 337, __pyx_L5_error)
+        __pyx_L14_unpacking_done:;
       }
       __pyx_v_pi = __pyx_t_9;
       __pyx_t_9 = 0;
@@ -112929,7 +120106,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
       __pyx_t_12 = 0;
       if ((likely(PyTuple_CheckExact(__pyx_t_8))) || (PyList_CheckExact(__pyx_t_8))) {
         PyObject* sequence = __pyx_t_8;
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if !CYTHON_COMPILING_IN_PYPY
         Py_ssize_t size = Py_SIZE(sequence);
         #else
         Py_ssize_t size = PySequence_Size(sequence);
@@ -112937,9 +120114,9 @@ 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_ERR(33, 343, __pyx_L5_error)
+          __PYX_ERR(33, 337, __pyx_L5_error)
         }
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         if (likely(PyTuple_CheckExact(sequence))) {
           __pyx_t_12 = PyTuple_GET_ITEM(sequence, 0); 
           __pyx_t_11 = PyTuple_GET_ITEM(sequence, 1); 
@@ -112953,36 +120130,36 @@ 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_ERR(33, 343, __pyx_L5_error)
+        __pyx_t_12 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_12)) __PYX_ERR(33, 337, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_12);
-        __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(33, 343, __pyx_L5_error)
+        __pyx_t_11 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_11)) __PYX_ERR(33, 337, __pyx_L5_error)
         __Pyx_GOTREF(__pyx_t_11);
-        __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) __PYX_ERR(33, 343, __pyx_L5_error)
+        __pyx_t_9 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_9)) __PYX_ERR(33, 337, __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_ERR(33, 343, __pyx_L5_error)
+        __pyx_t_13 = PyObject_GetIter(__pyx_t_8); if (unlikely(!__pyx_t_13)) __PYX_ERR(33, 337, __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;
-        index = 0; __pyx_t_12 = __pyx_t_10(__pyx_t_13); if (unlikely(!__pyx_t_12)) goto __pyx_L17_unpacking_failed;
+        index = 0; __pyx_t_12 = __pyx_t_10(__pyx_t_13); if (unlikely(!__pyx_t_12)) goto __pyx_L15_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_12);
-        index = 1; __pyx_t_11 = __pyx_t_10(__pyx_t_13); if (unlikely(!__pyx_t_11)) goto __pyx_L17_unpacking_failed;
+        index = 1; __pyx_t_11 = __pyx_t_10(__pyx_t_13); if (unlikely(!__pyx_t_11)) goto __pyx_L15_unpacking_failed;
         __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;
+        index = 2; __pyx_t_9 = __pyx_t_10(__pyx_t_13); if (unlikely(!__pyx_t_9)) goto __pyx_L15_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_9);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_13), 3) < 0) __PYX_ERR(33, 343, __pyx_L5_error)
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_13), 3) < 0) __PYX_ERR(33, 337, __pyx_L5_error)
         __pyx_t_10 = NULL;
         __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
-        goto __pyx_L18_unpacking_done;
-        __pyx_L17_unpacking_failed:;
+        goto __pyx_L16_unpacking_done;
+        __pyx_L15_unpacking_failed:;
         __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
         __pyx_t_10 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        __PYX_ERR(33, 343, __pyx_L5_error)
-        __pyx_L18_unpacking_done:;
+        __PYX_ERR(33, 337, __pyx_L5_error)
+        __pyx_L16_unpacking_done:;
       }
       __pyx_v_poi = __pyx_t_12;
       __pyx_t_12 = 0;
@@ -112991,7 +120168,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
       __pyx_v_pov = __pyx_t_9;
       __pyx_t_9 = 0;
 
-      /* "PETSc/Mat.pyx":342
+      /* "PETSc/Mat.pyx":336
  *         # unpack CSR argument
  *         cdef object pi, pj, pv, poi, poj, pov
  *         try:             # <<<<<<<<<<<<<<
@@ -113002,9 +120179,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
     __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;
+    goto __pyx_L10_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;
@@ -113012,7 +120188,7 @@ 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":344
+    /* "PETSc/Mat.pyx":338
  *         try:
  *             (pi, pj, pv), (poi, poj, pov) = csr
  *         except (TypeError, ValueError):             # <<<<<<<<<<<<<<
@@ -113022,12 +120198,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
     __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_ERR(33, 344, __pyx_L7_except_error)
+      if (__Pyx_GetException(&__pyx_t_8, &__pyx_t_7, &__pyx_t_9) < 0) __PYX_ERR(33, 338, __pyx_L7_except_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_GOTREF(__pyx_t_9);
 
-      /* "PETSc/Mat.pyx":345
+      /* "PETSc/Mat.pyx":339
  *             (pi, pj, pv), (poi, poj, pov) = csr
  *         except (TypeError, ValueError):
  *             pi, pj, pv = csr             # <<<<<<<<<<<<<<
@@ -113036,7 +120212,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
  */
       if ((likely(PyTuple_CheckExact(__pyx_v_csr))) || (PyList_CheckExact(__pyx_v_csr))) {
         PyObject* sequence = __pyx_v_csr;
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if !CYTHON_COMPILING_IN_PYPY
         Py_ssize_t size = Py_SIZE(sequence);
         #else
         Py_ssize_t size = PySequence_Size(sequence);
@@ -113044,9 +120220,9 @@ 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_ERR(33, 345, __pyx_L7_except_error)
+          __PYX_ERR(33, 339, __pyx_L7_except_error)
         }
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         if (likely(PyTuple_CheckExact(sequence))) {
           __pyx_t_11 = PyTuple_GET_ITEM(sequence, 0); 
           __pyx_t_12 = PyTuple_GET_ITEM(sequence, 1); 
@@ -113060,34 +120236,34 @@ 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_ERR(33, 345, __pyx_L7_except_error)
+        __pyx_t_11 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_11)) __PYX_ERR(33, 339, __pyx_L7_except_error)
         __Pyx_GOTREF(__pyx_t_11);
-        __pyx_t_12 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(33, 345, __pyx_L7_except_error)
+        __pyx_t_12 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_12)) __PYX_ERR(33, 339, __pyx_L7_except_error)
         __Pyx_GOTREF(__pyx_t_12);
-        __pyx_t_13 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_13)) __PYX_ERR(33, 345, __pyx_L7_except_error)
+        __pyx_t_13 = PySequence_ITEM(sequence, 2); if (unlikely(!__pyx_t_13)) __PYX_ERR(33, 339, __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_ERR(33, 345, __pyx_L7_except_error)
+        __pyx_t_14 = PyObject_GetIter(__pyx_v_csr); if (unlikely(!__pyx_t_14)) __PYX_ERR(33, 339, __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;
+        index = 0; __pyx_t_11 = __pyx_t_10(__pyx_t_14); if (unlikely(!__pyx_t_11)) goto __pyx_L19_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_11);
-        index = 1; __pyx_t_12 = __pyx_t_10(__pyx_t_14); if (unlikely(!__pyx_t_12)) goto __pyx_L21_unpacking_failed;
+        index = 1; __pyx_t_12 = __pyx_t_10(__pyx_t_14); if (unlikely(!__pyx_t_12)) goto __pyx_L19_unpacking_failed;
         __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;
+        index = 2; __pyx_t_13 = __pyx_t_10(__pyx_t_14); if (unlikely(!__pyx_t_13)) goto __pyx_L19_unpacking_failed;
         __Pyx_GOTREF(__pyx_t_13);
-        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_14), 3) < 0) __PYX_ERR(33, 345, __pyx_L7_except_error)
+        if (__Pyx_IternextUnpackEndCheck(__pyx_t_10(__pyx_t_14), 3) < 0) __PYX_ERR(33, 339, __pyx_L7_except_error)
         __pyx_t_10 = NULL;
         __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
-        goto __pyx_L22_unpacking_done;
-        __pyx_L21_unpacking_failed:;
+        goto __pyx_L20_unpacking_done;
+        __pyx_L19_unpacking_failed:;
         __Pyx_DECREF(__pyx_t_14); __pyx_t_14 = 0;
         __pyx_t_10 = NULL;
         if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-        __PYX_ERR(33, 345, __pyx_L7_except_error)
-        __pyx_L22_unpacking_done:;
+        __PYX_ERR(33, 339, __pyx_L7_except_error)
+        __pyx_L20_unpacking_done:;
       }
       __Pyx_XDECREF_SET(__pyx_v_pi, __pyx_t_11);
       __pyx_t_11 = 0;
@@ -113096,7 +120272,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":346
+      /* "PETSc/Mat.pyx":340
  *         except (TypeError, ValueError):
  *             pi, pj, pv = csr
  *             poi = poj = pov = None             # <<<<<<<<<<<<<<
@@ -113117,29 +120293,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
     goto __pyx_L7_except_error;
     __pyx_L7_except_error:;
 
-    /* "PETSc/Mat.pyx":342
+    /* "PETSc/Mat.pyx":336
  *         # 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);
     __Pyx_ExceptionReset(__pyx_t_4, __pyx_t_5, __pyx_t_6);
-    __pyx_L12_try_end:;
+    __pyx_L10_try_end:;
   }
 
-  /* "PETSc/Mat.pyx":348
+  /* "PETSc/Mat.pyx":342
  *             poi = poj = pov = None
  *         # rows, cols, and values
  *         cdef PetscInt ni=0, noi=0, *i=NULL, *oi=NULL             # <<<<<<<<<<<<<<
@@ -113151,7 +120325,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
   __pyx_v_i = NULL;
   __pyx_v_oi = NULL;
 
-  /* "PETSc/Mat.pyx":349
+  /* "PETSc/Mat.pyx":343
  *         # rows, cols, and values
  *         cdef PetscInt ni=0, noi=0, *i=NULL, *oi=NULL
  *         cdef PetscInt nj=0, noj=0, *j=NULL, *oj=NULL             # <<<<<<<<<<<<<<
@@ -113163,31 +120337,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
   __pyx_v_j = NULL;
   __pyx_v_oj = NULL;
 
-  /* "PETSc/Mat.pyx":350
+  /* "PETSc/Mat.pyx":344
  *         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_ERR(33, 350, __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, 344, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_DECREF_SET(__pyx_v_pi, __pyx_t_9);
   __pyx_t_9 = 0;
 
-  /* "PETSc/Mat.pyx":351
+  /* "PETSc/Mat.pyx":345
  *         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_ERR(33, 351, __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, 345, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_9);
   __Pyx_DECREF_SET(__pyx_v_pj, __pyx_t_9);
   __pyx_t_9 = 0;
 
-  /* "PETSc/Mat.pyx":352
+  /* "PETSc/Mat.pyx":346
  *         pi = iarray_i(pi, &ni, &i) # Row pointers (diagonal)
  *         pj = iarray_i(pj, &nj, &j) # Column indices (diagonal)
  *         if ni != m+1:  raise ValueError(             # <<<<<<<<<<<<<<
@@ -113197,20 +120371,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":354
+    /* "PETSc/Mat.pyx":348
  *         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_ERR(33, 354, __pyx_L1_error)
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_m); if (unlikely(!__pyx_t_9)) __PYX_ERR(33, 348, __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_ERR(33, 354, __pyx_L1_error)
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_toInt((__pyx_v_m + 1)); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 348, __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_ERR(33, 354, __pyx_L1_error)
+    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ni); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 348, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
-    __pyx_t_13 = PyTuple_New(3); if (unlikely(!__pyx_t_13)) __PYX_ERR(33, 354, __pyx_L1_error)
+    __pyx_t_13 = PyTuple_New(3); if (unlikely(!__pyx_t_13)) __PYX_ERR(33, 348, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_13);
     __Pyx_GIVEREF(__pyx_t_9);
     PyTuple_SET_ITEM(__pyx_t_13, 0, __pyx_t_9);
@@ -113222,38 +120396,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
     __pyx_t_7 = 0;
     __pyx_t_8 = 0;
 
-    /* "PETSc/Mat.pyx":353
+    /* "PETSc/Mat.pyx":347
  *         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_ERR(33, 353, __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, 347, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_13); __pyx_t_13 = 0;
 
-    /* "PETSc/Mat.pyx":352
+    /* "PETSc/Mat.pyx":346
  *         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_ERR(33, 352, __pyx_L1_error)
+    __pyx_t_13 = PyTuple_New(1); if (unlikely(!__pyx_t_13)) __PYX_ERR(33, 346, __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_ERR(33, 352, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_13, NULL); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 346, __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_ERR(33, 352, __pyx_L1_error)
+    __PYX_ERR(33, 346, __pyx_L1_error)
   }
 
-  /* "PETSc/Mat.pyx":355
+  /* "PETSc/Mat.pyx":349
  *             "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:             # <<<<<<<<<<<<<<
@@ -113265,39 +120439,39 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
   if (__pyx_t_16) {
   } else {
     __pyx_t_3 = __pyx_t_16;
-    goto __pyx_L25_bool_binop_done;
+    goto __pyx_L23_bool_binop_done;
   }
   __pyx_t_16 = (__pyx_v_poj != Py_None);
   __pyx_t_15 = (__pyx_t_16 != 0);
   __pyx_t_3 = __pyx_t_15;
-  __pyx_L25_bool_binop_done:;
+  __pyx_L23_bool_binop_done:;
   if (__pyx_t_3) {
 
-    /* "PETSc/Mat.pyx":356
+    /* "PETSc/Mat.pyx":350
  *             (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_ERR(33, 356, __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, 350, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF_SET(__pyx_v_poi, __pyx_t_8);
     __pyx_t_8 = 0;
 
-    /* "PETSc/Mat.pyx":357
+    /* "PETSc/Mat.pyx":351
  *         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_ERR(33, 357, __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, 351, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF_SET(__pyx_v_poj, __pyx_t_8);
     __pyx_t_8 = 0;
 
-    /* "PETSc/Mat.pyx":355
+    /* "PETSc/Mat.pyx":349
  *             "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:             # <<<<<<<<<<<<<<
@@ -113306,7 +120480,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
  */
   }
 
-  /* "PETSc/Mat.pyx":358
+  /* "PETSc/Mat.pyx":352
  *             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             # <<<<<<<<<<<<<<
@@ -113316,7 +120490,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
   __pyx_v_nv = 0;
   __pyx_v_nov = 0;
 
-  /* "PETSc/Mat.pyx":359
+  /* "PETSc/Mat.pyx":353
  *             poj = iarray_i(poj, &noj, &oj) # Column indices (off-diagonal)
  *         cdef PetscInt nv=0, nov=0
  *         cdef PetscScalar *v=NULL, *ov=NULL             # <<<<<<<<<<<<<<
@@ -113326,19 +120500,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
   __pyx_v_v = NULL;
   __pyx_v_ov = NULL;
 
-  /* "PETSc/Mat.pyx":360
+  /* "PETSc/Mat.pyx":354
  *         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_ERR(33, 360, __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, 354, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_DECREF_SET(__pyx_v_pv, __pyx_t_8);
   __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":361
+  /* "PETSc/Mat.pyx":355
  *         cdef PetscScalar *v=NULL, *ov=NULL
  *         pv = iarray_s(pv, &nv, &v) # Non-zero values (diagonal)
  *         if nj != nv:  raise ValueError(             # <<<<<<<<<<<<<<
@@ -113348,18 +120522,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":363
+    /* "PETSc/Mat.pyx":357
  *         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_ERR(33, 363, __pyx_L1_error)
+    __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nj); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 357, __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_ERR(33, 363, __pyx_L1_error)
+    __pyx_t_13 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nv); if (unlikely(!__pyx_t_13)) __PYX_ERR(33, 357, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_13);
-    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 363, __pyx_L1_error)
+    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 357, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_GIVEREF(__pyx_t_8);
     PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_8);
@@ -113368,38 +120542,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
     __pyx_t_8 = 0;
     __pyx_t_13 = 0;
 
-    /* "PETSc/Mat.pyx":362
+    /* "PETSc/Mat.pyx":356
  *         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_ERR(33, 362, __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, 356, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_13);
     __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-    /* "PETSc/Mat.pyx":361
+    /* "PETSc/Mat.pyx":355
  *         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_ERR(33, 361, __pyx_L1_error)
+    __pyx_t_7 = PyTuple_New(1); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 355, __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_ERR(33, 361, __pyx_L1_error)
+    __pyx_t_13 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_7, NULL); if (unlikely(!__pyx_t_13)) __PYX_ERR(33, 355, __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_ERR(33, 361, __pyx_L1_error)
+    __PYX_ERR(33, 355, __pyx_L1_error)
   }
 
-  /* "PETSc/Mat.pyx":364
+  /* "PETSc/Mat.pyx":358
  *             "Given %d column indices but %d non-zero values" %
  *             (toInt(nj), toInt(nv)))
  *         if pov is not None:             # <<<<<<<<<<<<<<
@@ -113410,19 +120584,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
   __pyx_t_15 = (__pyx_t_3 != 0);
   if (__pyx_t_15) {
 
-    /* "PETSc/Mat.pyx":365
+    /* "PETSc/Mat.pyx":359
  *             (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_ERR(33, 365, __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, 359, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_13);
     __Pyx_DECREF_SET(__pyx_v_pov, __pyx_t_13);
     __pyx_t_13 = 0;
 
-    /* "PETSc/Mat.pyx":364
+    /* "PETSc/Mat.pyx":358
  *             "Given %d column indices but %d non-zero values" %
  *             (toInt(nj), toInt(nv)))
  *         if pov is not None:             # <<<<<<<<<<<<<<
@@ -113431,7 +120605,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
  */
   }
 
-  /* "PETSc/Mat.pyx":367
+  /* "PETSc/Mat.pyx":361
  *             pov = iarray_s(pov, &nov, &ov) # Non-zero values (off-diagonal)
  *         # create matrix
  *         cdef PetscMat newmat = NULL             # <<<<<<<<<<<<<<
@@ -113440,34 +120614,34 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
  */
   __pyx_v_newmat = NULL;
 
-  /* "PETSc/Mat.pyx":368
+  /* "PETSc/Mat.pyx":362
  *         # 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_ERR(33, 368, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_comm_size(__pyx_v_ccomm); if (unlikely(__pyx_t_2 == ((int)-1) && PyErr_Occurred())) __PYX_ERR(33, 362, __pyx_L1_error)
   __pyx_t_15 = ((__pyx_t_2 == 1) != 0);
   if (__pyx_t_15) {
 
-    /* "PETSc/Mat.pyx":369
+    /* "PETSc/Mat.pyx":363
  *         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_ERR(33, 369, __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 == ((int)-1))) __PYX_ERR(33, 363, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":371
+    /* "PETSc/Mat.pyx":365
  *             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_ERR(33, 371, __pyx_L1_error)
+    __pyx_t_13 = PyTuple_New(3); if (unlikely(!__pyx_t_13)) __PYX_ERR(33, 365, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_13);
     __Pyx_INCREF(__pyx_v_pi);
     __Pyx_GIVEREF(__pyx_v_pi);
@@ -113481,17 +120655,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
     __Pyx_DECREF_SET(__pyx_v_csr, __pyx_t_13);
     __pyx_t_13 = 0;
 
-    /* "PETSc/Mat.pyx":368
+    /* "PETSc/Mat.pyx":362
  *         # create matrix
  *         cdef PetscMat newmat = NULL
  *         if comm_size(ccomm) == 1:             # <<<<<<<<<<<<<<
  *             CHKERR( MatCreateSeqAIJWithArrays(
  *                 ccomm, m, n, i, j, v, &newmat) )
  */
-    goto __pyx_L29;
+    goto __pyx_L27;
   }
 
-  /* "PETSc/Mat.pyx":373
+  /* "PETSc/Mat.pyx":367
  *             csr = (pi, pj, pv)
  *         else:
  *             if oi != NULL and oj != NULL and ov != NULL:             # <<<<<<<<<<<<<<
@@ -113503,36 +120677,36 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
     if (__pyx_t_3) {
     } else {
       __pyx_t_15 = __pyx_t_3;
-      goto __pyx_L31_bool_binop_done;
+      goto __pyx_L29_bool_binop_done;
     }
     __pyx_t_3 = ((__pyx_v_oj != NULL) != 0);
     if (__pyx_t_3) {
     } else {
       __pyx_t_15 = __pyx_t_3;
-      goto __pyx_L31_bool_binop_done;
+      goto __pyx_L29_bool_binop_done;
     }
     __pyx_t_3 = ((__pyx_v_ov != NULL) != 0);
     __pyx_t_15 = __pyx_t_3;
-    __pyx_L31_bool_binop_done:;
+    __pyx_L29_bool_binop_done:;
     if (__pyx_t_15) {
 
-      /* "PETSc/Mat.pyx":374
+      /* "PETSc/Mat.pyx":368
  *         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_ERR(33, 374, __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 == ((int)-1))) __PYX_ERR(33, 368, __pyx_L1_error)
 
-      /* "PETSc/Mat.pyx":376
+      /* "PETSc/Mat.pyx":370
  *                 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_ERR(33, 376, __pyx_L1_error)
+      __pyx_t_13 = PyTuple_New(3); if (unlikely(!__pyx_t_13)) __PYX_ERR(33, 370, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_13);
       __Pyx_INCREF(__pyx_v_pi);
       __Pyx_GIVEREF(__pyx_v_pi);
@@ -113543,7 +120717,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_ERR(33, 376, __pyx_L1_error)
+      __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 370, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_7);
       __Pyx_INCREF(__pyx_v_poi);
       __Pyx_GIVEREF(__pyx_v_poi);
@@ -113554,7 +120728,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_ERR(33, 376, __pyx_L1_error)
+      __pyx_t_8 = PyTuple_New(2); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 370, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_8);
       __Pyx_GIVEREF(__pyx_t_13);
       PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_t_13);
@@ -113565,17 +120739,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
       __Pyx_DECREF_SET(__pyx_v_csr, __pyx_t_8);
       __pyx_t_8 = 0;
 
-      /* "PETSc/Mat.pyx":373
+      /* "PETSc/Mat.pyx":367
  *             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;
+      goto __pyx_L28;
     }
 
-    /* "PETSc/Mat.pyx":378
+    /* "PETSc/Mat.pyx":372
  *                 csr = ((pi, pj, pv), (poi, poj, pov))
  *             else:
  *                 CHKERR( MatCreateMPIAIJWithArrays(             # <<<<<<<<<<<<<<
@@ -113584,16 +120758,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
  */
     /*else*/ {
 
-      /* "PETSc/Mat.pyx":379
+      /* "PETSc/Mat.pyx":373
  *             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)
+      __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 == ((int)-1))) __PYX_ERR(33, 372, __pyx_L1_error)
 
-      /* "PETSc/Mat.pyx":380
+      /* "PETSc/Mat.pyx":374
  *                 CHKERR( MatCreateMPIAIJWithArrays(
  *                     ccomm, m, n, M, N, i, j, v, &newmat) )
  *                 csr = None             # <<<<<<<<<<<<<<
@@ -113603,11 +120777,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
       __Pyx_INCREF(Py_None);
       __Pyx_DECREF_SET(__pyx_v_csr, Py_None);
     }
-    __pyx_L30:;
+    __pyx_L28:;
   }
-  __pyx_L29:;
+  __pyx_L27:;
 
-  /* "PETSc/Mat.pyx":381
+  /* "PETSc/Mat.pyx":375
  *                     ccomm, m, n, M, N, i, j, v, &newmat) )
  *                 csr = None
  *         PetscCLEAR(self.obj); self.mat = newmat             # <<<<<<<<<<<<<<
@@ -113617,18 +120791,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":382
+  /* "PETSc/Mat.pyx":376
  *                 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), ((char *)"__csr__"), __pyx_v_csr); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 382, __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, 376, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_8);
   __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Mat.pyx":383
+  /* "PETSc/Mat.pyx":377
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         self.set_attr('__csr__', csr)
  *         return self             # <<<<<<<<<<<<<<
@@ -113640,7 +120814,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":330
+  /* "PETSc/Mat.pyx":324
  *         return self
  * 
  *     def createAIJWithArrays(self, size, csr, bsize=None, comm=None):             # <<<<<<<<<<<<<<
@@ -113672,7 +120846,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_58createAIJWithArrays(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":387
+/* "PETSc/Mat.pyx":381
  *     #
  * 
  *     def createDense(self, size, bsize=None, array=None, comm=None):             # <<<<<<<<<<<<<<
@@ -113702,9 +120876,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_61createDense(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -113713,16 +120891,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_61createDense(PyObject *__pyx_v_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_bsize);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_array);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -113730,13 +120911,16 @@ 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_ERR(33, 387, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createDense") < 0)) __PYX_ERR(33, 381, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -113749,7 +120933,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_ERR(33, 387, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createDense", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 381, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.createDense", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -113773,7 +120957,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_60createDense(struct PyPetscMatO
   __Pyx_RefNannySetupContext("createDense", 0);
   __Pyx_INCREF(__pyx_v_array);
 
-  /* "PETSc/Mat.pyx":389
+  /* "PETSc/Mat.pyx":383
  *     def createDense(self, size, bsize=None, array=None, comm=None):
  *         # create matrix
  *         cdef PetscMat newmat = NULL             # <<<<<<<<<<<<<<
@@ -113782,16 +120966,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_60createDense(struct PyPetscMatO
  */
   __pyx_v_newmat = NULL;
 
-  /* "PETSc/Mat.pyx":390
+  /* "PETSc/Mat.pyx":384
  *         # 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_ERR(33, 390, __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 == ((int)-1))) __PYX_ERR(33, 384, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":391
+  /* "PETSc/Mat.pyx":385
  *         cdef PetscMat newmat = NULL
  *         Mat_Create(MATDENSE, comm, size, bsize, &newmat)
  *         PetscCLEAR(self.obj); self.mat = newmat             # <<<<<<<<<<<<<<
@@ -113801,7 +120985,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":393
+  /* "PETSc/Mat.pyx":387
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         # preallocate matrix
  *         if array is not None:             # <<<<<<<<<<<<<<
@@ -113812,30 +120996,30 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_60createDense(struct PyPetscMatO
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Mat.pyx":394
+    /* "PETSc/Mat.pyx":388
  *         # 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_ERR(33, 394, __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, 388, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_array, __pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "PETSc/Mat.pyx":395
+    /* "PETSc/Mat.pyx":389
  *         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), ((char *)"__array__"), __pyx_v_array); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 395, __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, 389, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "PETSc/Mat.pyx":393
+    /* "PETSc/Mat.pyx":387
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         # preallocate matrix
  *         if array is not None:             # <<<<<<<<<<<<<<
@@ -113844,7 +121028,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_60createDense(struct PyPetscMatO
  */
   }
 
-  /* "PETSc/Mat.pyx":396
+  /* "PETSc/Mat.pyx":390
  *             array = Mat_AllocDense(self.mat, array)
  *             self.set_attr('__array__', array)
  *         return self             # <<<<<<<<<<<<<<
@@ -113856,7 +121040,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_60createDense(struct PyPetscMatO
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":387
+  /* "PETSc/Mat.pyx":381
  *     #
  * 
  *     def createDense(self, size, bsize=None, array=None, comm=None):             # <<<<<<<<<<<<<<
@@ -113876,7 +121060,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_60createDense(struct PyPetscMatO
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":398
+/* "PETSc/Mat.pyx":392
  *         return self
  * 
  *     def setPreallocationDense(self, array):             # <<<<<<<<<<<<<<
@@ -113900,6 +121084,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_63setPreallocationDense(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -113910,7 +121095,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_ERR(33, 398, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPreallocationDense") < 0)) __PYX_ERR(33, 392, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -113921,7 +121106,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_ERR(33, 398, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setPreallocationDense", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 392, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setPreallocationDense", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -113943,7 +121128,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_62setPreallocationDense(struct P
   __Pyx_RefNannySetupContext("setPreallocationDense", 0);
   __Pyx_INCREF(__pyx_v_array);
 
-  /* "PETSc/Mat.pyx":399
+  /* "PETSc/Mat.pyx":393
  * 
  *     def setPreallocationDense(self, array):
  *         cdef PetscBool done = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -113952,39 +121137,39 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_62setPreallocationDense(struct P
  */
   __pyx_v_done = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":400
+  /* "PETSc/Mat.pyx":394
  *     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_ERR(33, 400, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatIsPreallocated(__pyx_v_self->mat, (&__pyx_v_done))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(33, 394, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":402
+  /* "PETSc/Mat.pyx":396
  *         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_ERR(33, 402, __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, 396, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_array, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Mat.pyx":403
+  /* "PETSc/Mat.pyx":397
  *         # 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), ((char *)"__array__"), __pyx_v_array); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 403, __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, 397, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "PETSc/Mat.pyx":404
+  /* "PETSc/Mat.pyx":398
  *         array = Mat_AllocDense(self.mat, array)
  *         self.set_attr('__array__', array)
  *         return self             # <<<<<<<<<<<<<<
@@ -113996,7 +121181,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_62setPreallocationDense(struct P
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":398
+  /* "PETSc/Mat.pyx":392
  *         return self
  * 
  *     def setPreallocationDense(self, array):             # <<<<<<<<<<<<<<
@@ -114016,10 +121201,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_62setPreallocationDense(struct P
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":408
+/* "PETSc/Mat.pyx":402
  *     #
  * 
- *     def createScatter(self, Scatter scatter not None, comm=None):             # <<<<<<<<<<<<<<
+ *     def createScatter(self, Scatter scatter, comm=None):             # <<<<<<<<<<<<<<
  *         if comm is None: comm = scatter.getComm()
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  */
@@ -114042,7 +121227,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_65createScatter(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -114051,6 +121238,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_65createScatter(PyObject *__pyx_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_scatter)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -114058,11 +121246,12 @@ 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_ERR(33, 408, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createScatter") < 0)) __PYX_ERR(33, 402, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -114073,13 +121262,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_ERR(33, 408, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createScatter", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 402, __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_ERR(33, 408, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_scatter), __pyx_ptype_8petsc4py_5PETSc_Scatter, 0, "scatter", 0))) __PYX_ERR(33, 402, __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 */
@@ -114106,9 +121295,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_64createScatter(struct PyPetscMa
   __Pyx_RefNannySetupContext("createScatter", 0);
   __Pyx_INCREF(__pyx_v_comm);
 
-  /* "PETSc/Mat.pyx":409
+  /* "PETSc/Mat.pyx":403
  * 
- *     def createScatter(self, Scatter scatter not None, comm=None):
+ *     def createScatter(self, Scatter scatter, comm=None):
  *         if comm is None: comm = scatter.getComm()             # <<<<<<<<<<<<<<
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscMat newmat = NULL
@@ -114116,10 +121305,10 @@ 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_ERR(33, 409, __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, 403, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_5 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && 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);
@@ -114129,10 +121318,10 @@ 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_ERR(33, 409, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 403, __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(33, 409, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 403, __pyx_L1_error)
     }
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
@@ -114140,17 +121329,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_64createScatter(struct PyPetscMa
     __pyx_t_3 = 0;
   }
 
-  /* "PETSc/Mat.pyx":410
- *     def createScatter(self, Scatter scatter not None, comm=None):
+  /* "PETSc/Mat.pyx":404
+ *     def createScatter(self, Scatter scatter, 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_ERR(33, 410, __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, 404, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_6;
 
-  /* "PETSc/Mat.pyx":411
+  /* "PETSc/Mat.pyx":405
  *         if comm is None: comm = scatter.getComm()
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscMat newmat = NULL             # <<<<<<<<<<<<<<
@@ -114159,16 +121348,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_64createScatter(struct PyPetscMa
  */
   __pyx_v_newmat = NULL;
 
-  /* "PETSc/Mat.pyx":412
+  /* "PETSc/Mat.pyx":406
  *         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_ERR(33, 412, __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 == ((int)-1))) __PYX_ERR(33, 406, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":413
+  /* "PETSc/Mat.pyx":407
  *         cdef PetscMat newmat = NULL
  *         CHKERR( MatCreateScatter(ccomm, scatter.sct, &newmat) )
  *         PetscCLEAR(self.obj); self.mat = newmat             # <<<<<<<<<<<<<<
@@ -114178,22 +121367,22 @@ 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":414
+  /* "PETSc/Mat.pyx":408
  *         CHKERR( MatCreateScatter(ccomm, scatter.sct, &newmat) )
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         return self             # <<<<<<<<<<<<<<
  * 
- *     def createNormal(self, Mat mat not None):
+ *     def createNormal(self, Mat mat):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":408
+  /* "PETSc/Mat.pyx":402
  *     #
  * 
- *     def createScatter(self, Scatter scatter not None, comm=None):             # <<<<<<<<<<<<<<
+ *     def createScatter(self, Scatter scatter, comm=None):             # <<<<<<<<<<<<<<
  *         if comm is None: comm = scatter.getComm()
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  */
@@ -114212,10 +121401,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_64createScatter(struct PyPetscMa
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":416
+/* "PETSc/Mat.pyx":410
  *         return self
  * 
- *     def createNormal(self, Mat mat not None):             # <<<<<<<<<<<<<<
+ *     def createNormal(self, Mat mat):             # <<<<<<<<<<<<<<
  *         cdef PetscMat newmat = NULL
  *         CHKERR( MatCreateNormal(mat.mat, &newmat) )
  */
@@ -114236,6 +121425,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_67createNormal(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -114246,7 +121436,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_ERR(33, 416, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createNormal") < 0)) __PYX_ERR(33, 410, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -114257,13 +121447,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_ERR(33, 416, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createNormal", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 410, __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_ERR(33, 416, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(33, 410, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_66createNormal(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat);
 
   /* function exit code */
@@ -114282,25 +121472,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_66createNormal(struct PyPetscMat
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("createNormal", 0);
 
-  /* "PETSc/Mat.pyx":417
+  /* "PETSc/Mat.pyx":411
  * 
- *     def createNormal(self, Mat mat not None):
+ *     def createNormal(self, Mat mat):
  *         cdef PetscMat newmat = NULL             # <<<<<<<<<<<<<<
  *         CHKERR( MatCreateNormal(mat.mat, &newmat) )
  *         PetscCLEAR(self.obj); self.mat = newmat
  */
   __pyx_v_newmat = NULL;
 
-  /* "PETSc/Mat.pyx":418
- *     def createNormal(self, Mat mat not None):
+  /* "PETSc/Mat.pyx":412
+ *     def createNormal(self, Mat mat):
  *         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_ERR(33, 418, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateNormal(__pyx_v_mat->mat, (&__pyx_v_newmat))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(33, 412, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":419
+  /* "PETSc/Mat.pyx":413
  *         cdef PetscMat newmat = NULL
  *         CHKERR( MatCreateNormal(mat.mat, &newmat) )
  *         PetscCLEAR(self.obj); self.mat = newmat             # <<<<<<<<<<<<<<
@@ -114310,22 +121500,22 @@ 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":420
+  /* "PETSc/Mat.pyx":414
  *         CHKERR( MatCreateNormal(mat.mat, &newmat) )
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         return self             # <<<<<<<<<<<<<<
  * 
- *     def createTranspose(self, Mat mat not None):
+ *     def createTranspose(self, Mat mat):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":416
+  /* "PETSc/Mat.pyx":410
  *         return self
  * 
- *     def createNormal(self, Mat mat not None):             # <<<<<<<<<<<<<<
+ *     def createNormal(self, Mat mat):             # <<<<<<<<<<<<<<
  *         cdef PetscMat newmat = NULL
  *         CHKERR( MatCreateNormal(mat.mat, &newmat) )
  */
@@ -114340,10 +121530,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_66createNormal(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":422
+/* "PETSc/Mat.pyx":416
  *         return self
  * 
- *     def createTranspose(self, Mat mat not None):             # <<<<<<<<<<<<<<
+ *     def createTranspose(self, Mat mat):             # <<<<<<<<<<<<<<
  *         cdef PetscMat newmat = NULL
  *         CHKERR( MatCreateTranspose(mat.mat, &newmat) )
  */
@@ -114364,6 +121554,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_69createTranspose(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -114374,7 +121565,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_ERR(33, 422, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createTranspose") < 0)) __PYX_ERR(33, 416, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -114385,13 +121576,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_ERR(33, 422, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createTranspose", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 416, __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_ERR(33, 422, __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_68createTranspose(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat);
 
   /* function exit code */
@@ -114410,25 +121601,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_68createTranspose(struct PyPetsc
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("createTranspose", 0);
 
-  /* "PETSc/Mat.pyx":423
+  /* "PETSc/Mat.pyx":417
  * 
- *     def createTranspose(self, Mat mat not None):
+ *     def createTranspose(self, Mat mat):
  *         cdef PetscMat newmat = NULL             # <<<<<<<<<<<<<<
  *         CHKERR( MatCreateTranspose(mat.mat, &newmat) )
  *         PetscCLEAR(self.obj); self.mat = newmat
  */
   __pyx_v_newmat = NULL;
 
-  /* "PETSc/Mat.pyx":424
- *     def createTranspose(self, Mat mat not None):
+  /* "PETSc/Mat.pyx":418
+ *     def createTranspose(self, Mat mat):
  *         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_ERR(33, 424, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateTranspose(__pyx_v_mat->mat, (&__pyx_v_newmat))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(33, 418, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":425
+  /* "PETSc/Mat.pyx":419
  *         cdef PetscMat newmat = NULL
  *         CHKERR( MatCreateTranspose(mat.mat, &newmat) )
  *         PetscCLEAR(self.obj); self.mat = newmat             # <<<<<<<<<<<<<<
@@ -114438,22 +121629,22 @@ 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":426
+  /* "PETSc/Mat.pyx":420
  *         CHKERR( MatCreateTranspose(mat.mat, &newmat) )
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         return self             # <<<<<<<<<<<<<<
  * 
- *     def createLRC(self, Mat A not None, Mat U not None, Mat V not None):
+ *     def createLRC(self, Mat A or None, Mat U, Vec c or None, Mat V or None):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":422
+  /* "PETSc/Mat.pyx":416
  *         return self
  * 
- *     def createTranspose(self, Mat mat not None):             # <<<<<<<<<<<<<<
+ *     def createTranspose(self, Mat mat):             # <<<<<<<<<<<<<<
  *         cdef PetscMat newmat = NULL
  *         CHKERR( MatCreateTranspose(mat.mat, &newmat) )
  */
@@ -114468,34 +121659,40 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_68createTranspose(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":428
+/* "PETSc/Mat.pyx":422
  *         return self
  * 
- *     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) )
+ *     def createLRC(self, Mat A or None, Mat U, Vec c or None, Mat V or None):             # <<<<<<<<<<<<<<
+ *         cdef PetscMat Amat = NULL
+ *         cdef PetscMat Umat = U.mat
  */
 
 /* Python wrapper */
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_71createLRC(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_70createLRC[] = "Mat.createLRC(self, Mat A, Mat U, Mat V)";
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_70createLRC[] = "Mat.createLRC(self, Mat A, Mat U, Vec c, Mat V)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_71createLRC(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscMatObject *__pyx_v_A = 0;
   struct PyPetscMatObject *__pyx_v_U = 0;
+  struct PyPetscVecObject *__pyx_v_c = 0;
   struct PyPetscMatObject *__pyx_v_V = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("createLRC (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_A,&__pyx_n_s_U,&__pyx_n_s_V,0};
-    PyObject* values[3] = {0,0,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_A,&__pyx_n_s_U,&__pyx_n_s_c,&__pyx_n_s_V,0};
+    PyObject* values[4] = {0,0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -114504,43 +121701,54 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_71createLRC(PyObject *__pyx_v_se
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_A)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 428, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("createLRC", 1, 4, 4, 1); __PYX_ERR(33, 422, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_V)) != 0)) kw_args--;
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_c)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("createLRC", 1, 3, 3, 2); __PYX_ERR(33, 428, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("createLRC", 1, 4, 4, 2); __PYX_ERR(33, 422, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_V)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("createLRC", 1, 4, 4, 3); __PYX_ERR(33, 422, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createLRC") < 0)) __PYX_ERR(33, 428, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createLRC") < 0)) __PYX_ERR(33, 422, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
       values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
     }
     __pyx_v_A = ((struct PyPetscMatObject *)values[0]);
     __pyx_v_U = ((struct PyPetscMatObject *)values[1]);
-    __pyx_v_V = ((struct PyPetscMatObject *)values[2]);
+    __pyx_v_c = ((struct PyPetscVecObject *)values[2]);
+    __pyx_v_V = ((struct PyPetscMatObject *)values[3]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createLRC", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 428, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createLRC", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 422, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_A), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "A", 0))) __PYX_ERR(33, 422, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_U), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "U", 0))) __PYX_ERR(33, 422, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_c), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "c", 0))) __PYX_ERR(33, 422, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_V), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "V", 0))) __PYX_ERR(33, 422, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_70createLRC(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_A, __pyx_v_U, __pyx_v_c, __pyx_v_V);
 
   /* function exit code */
   goto __pyx_L0;
@@ -114551,34 +121759,121 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_71createLRC(PyObject *__pyx_v_se
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_70createLRC(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_A, struct PyPetscMatObject *__pyx_v_U, struct PyPetscVecObject *__pyx_v_c, struct PyPetscMatObject *__pyx_v_V) {
+  Mat __pyx_v_Amat;
+  Mat __pyx_v_Umat;
+  Vec __pyx_v_cvec;
+  Mat __pyx_v_Vmat;
   Mat __pyx_v_newmat;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  Mat __pyx_t_1;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  Vec __pyx_t_4;
+  int __pyx_t_5;
   __Pyx_RefNannySetupContext("createLRC", 0);
 
-  /* "PETSc/Mat.pyx":429
+  /* "PETSc/Mat.pyx":423
  * 
- *     def createLRC(self, Mat A not None, Mat U not None, Mat V not None):
+ *     def createLRC(self, Mat A or None, Mat U, Vec c or None, Mat V or None):
+ *         cdef PetscMat Amat = NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscMat Umat = U.mat
+ *         cdef PetscVec cvec = NULL
+ */
+  __pyx_v_Amat = NULL;
+
+  /* "PETSc/Mat.pyx":424
+ *     def createLRC(self, Mat A or None, Mat U, Vec c or None, Mat V or None):
+ *         cdef PetscMat Amat = NULL
+ *         cdef PetscMat Umat = U.mat             # <<<<<<<<<<<<<<
+ *         cdef PetscVec cvec = NULL
+ *         cdef PetscMat Vmat = NULL
+ */
+  __pyx_t_1 = __pyx_v_U->mat;
+  __pyx_v_Umat = __pyx_t_1;
+
+  /* "PETSc/Mat.pyx":425
+ *         cdef PetscMat Amat = NULL
+ *         cdef PetscMat Umat = U.mat
+ *         cdef PetscVec cvec = NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscMat Vmat = NULL
+ *         cdef PetscMat newmat = NULL
+ */
+  __pyx_v_cvec = NULL;
+
+  /* "PETSc/Mat.pyx":426
+ *         cdef PetscMat Umat = U.mat
+ *         cdef PetscVec cvec = NULL
+ *         cdef PetscMat Vmat = NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscMat newmat = NULL
+ *         if A is not None: Amat = A.mat
+ */
+  __pyx_v_Vmat = NULL;
+
+  /* "PETSc/Mat.pyx":427
+ *         cdef PetscVec cvec = NULL
+ *         cdef PetscMat Vmat = NULL
  *         cdef PetscMat newmat = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( MatCreateLRC(A.mat, U.mat, V.mat, &newmat) )
- *         PetscCLEAR(self.obj); self.mat = newmat
+ *         if A is not None: Amat = A.mat
+ *         if c is not None: cvec = c.vec
  */
   __pyx_v_newmat = NULL;
 
-  /* "PETSc/Mat.pyx":430
- *     def createLRC(self, Mat A not None, Mat U not None, Mat V not None):
+  /* "PETSc/Mat.pyx":428
+ *         cdef PetscMat Vmat = NULL
  *         cdef PetscMat newmat = NULL
- *         CHKERR( MatCreateLRC(A.mat, U.mat, V.mat, &newmat) )             # <<<<<<<<<<<<<<
+ *         if A is not None: Amat = A.mat             # <<<<<<<<<<<<<<
+ *         if c is not None: cvec = c.vec
+ *         if V is not None: Vmat = V.mat
+ */
+  __pyx_t_2 = (((PyObject *)__pyx_v_A) != Py_None);
+  __pyx_t_3 = (__pyx_t_2 != 0);
+  if (__pyx_t_3) {
+    __pyx_t_1 = __pyx_v_A->mat;
+    __pyx_v_Amat = __pyx_t_1;
+  }
+
+  /* "PETSc/Mat.pyx":429
+ *         cdef PetscMat newmat = NULL
+ *         if A is not None: Amat = A.mat
+ *         if c is not None: cvec = c.vec             # <<<<<<<<<<<<<<
+ *         if V is not None: Vmat = V.mat
+ *         CHKERR( MatCreateLRC(Amat, Umat, cvec, Vmat, &newmat) )
+ */
+  __pyx_t_3 = (((PyObject *)__pyx_v_c) != Py_None);
+  __pyx_t_2 = (__pyx_t_3 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_4 = __pyx_v_c->vec;
+    __pyx_v_cvec = __pyx_t_4;
+  }
+
+  /* "PETSc/Mat.pyx":430
+ *         if A is not None: Amat = A.mat
+ *         if c is not None: cvec = c.vec
+ *         if V is not None: Vmat = V.mat             # <<<<<<<<<<<<<<
+ *         CHKERR( MatCreateLRC(Amat, Umat, cvec, Vmat, &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_ERR(33, 430, __pyx_L1_error)
+  __pyx_t_2 = (((PyObject *)__pyx_v_V) != Py_None);
+  __pyx_t_3 = (__pyx_t_2 != 0);
+  if (__pyx_t_3) {
+    __pyx_t_1 = __pyx_v_V->mat;
+    __pyx_v_Vmat = __pyx_t_1;
+  }
 
   /* "PETSc/Mat.pyx":431
- *         cdef PetscMat newmat = NULL
- *         CHKERR( MatCreateLRC(A.mat, U.mat, V.mat, &newmat) )
+ *         if c is not None: cvec = c.vec
+ *         if V is not None: Vmat = V.mat
+ *         CHKERR( MatCreateLRC(Amat, Umat, cvec, Vmat, &newmat) )             # <<<<<<<<<<<<<<
+ *         PetscCLEAR(self.obj); self.mat = newmat
+ *         return self
+ */
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateLRC(__pyx_v_Amat, __pyx_v_Umat, __pyx_v_cvec, __pyx_v_Vmat, (&__pyx_v_newmat))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(33, 431, __pyx_L1_error)
+
+  /* "PETSc/Mat.pyx":432
+ *         if V is not None: Vmat = V.mat
+ *         CHKERR( MatCreateLRC(Amat, Umat, cvec, Vmat, &newmat) )
  *         PetscCLEAR(self.obj); self.mat = newmat             # <<<<<<<<<<<<<<
  *         return self
  * 
@@ -114586,24 +121881,24 @@ 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":432
- *         CHKERR( MatCreateLRC(A.mat, U.mat, V.mat, &newmat) )
+  /* "PETSc/Mat.pyx":433
+ *         CHKERR( MatCreateLRC(Amat, Umat, cvec, Vmat, &newmat) )
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         return self             # <<<<<<<<<<<<<<
  * 
- *     def createSubMatrix(self, Mat A not None,
+ *     def createSubMatrixVirtual(self, Mat A, IS isrow, IS iscol=None):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":428
+  /* "PETSc/Mat.pyx":422
  *         return self
  * 
- *     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) )
+ *     def createLRC(self, Mat A or None, Mat U, Vec c or None, Mat V or None):             # <<<<<<<<<<<<<<
+ *         cdef PetscMat Amat = NULL
+ *         cdef PetscMat Umat = U.mat
  */
 
   /* function exit code */
@@ -114616,43 +121911,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_70createLRC(struct PyPetscMatObj
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":434
+/* "PETSc/Mat.pyx":435
  *         return self
  * 
- *     def createSubMatrix(self, Mat A not None,             # <<<<<<<<<<<<<<
- *                         IS isrow not None, IS iscol=None):
+ *     def createSubMatrixVirtual(self, Mat A, IS isrow, IS iscol=None):             # <<<<<<<<<<<<<<
  *         if iscol is None: iscol = isrow
+ *         cdef PetscMat newmat = NULL
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_73createSubMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_3Mat_72createSubMatrix[] = "Mat.createSubMatrix(self, Mat A, IS isrow, IS iscol=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_73createSubMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_73createSubMatrixVirtual(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_72createSubMatrixVirtual[] = "Mat.createSubMatrixVirtual(self, Mat A, IS isrow, IS iscol=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_73createSubMatrixVirtual(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscMatObject *__pyx_v_A = 0;
   struct PyPetscISObject *__pyx_v_isrow = 0;
   struct PyPetscISObject *__pyx_v_iscol = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("createSubMatrix (wrapper)", 0);
+  __Pyx_RefNannySetupContext("createSubMatrixVirtual (wrapper)", 0);
   {
     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":435
- * 
- *     def createSubMatrix(self, Mat A not None,
- *                         IS isrow not None, IS iscol=None):             # <<<<<<<<<<<<<<
- *         if iscol is None: iscol = isrow
- *         cdef PetscMat newmat = NULL
- */
     values[2] = (PyObject *)((struct PyPetscISObject *)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);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -114661,11 +121951,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_73createSubMatrix(PyObject *__py
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_A)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 434, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("createSubMatrixVirtual", 0, 2, 3, 1); __PYX_ERR(33, 435, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_iscol);
@@ -114673,11 +121965,12 @@ 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_ERR(33, 434, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createSubMatrixVirtual") < 0)) __PYX_ERR(33, 435, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -114690,24 +121983,16 @@ 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_ERR(33, 434, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createSubMatrixVirtual", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 435, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.Mat.createSubMatrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.createSubMatrixVirtual", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_A), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "A", 0))) __PYX_ERR(33, 434, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_A), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "A", 0))) __PYX_ERR(33, 435, __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":434
- *         return self
- * 
- *     def createSubMatrix(self, Mat A not None,             # <<<<<<<<<<<<<<
- *                         IS isrow not None, IS iscol=None):
- *         if iscol is None: iscol = isrow
- */
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_72createSubMatrixVirtual(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_A, __pyx_v_isrow, __pyx_v_iscol);
 
   /* function exit code */
   goto __pyx_L0;
@@ -114718,22 +122003,22 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_73createSubMatrix(PyObject *__py
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_72createSubMatrixVirtual(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_A, struct PyPetscISObject *__pyx_v_isrow, struct PyPetscISObject *__pyx_v_iscol) {
   Mat __pyx_v_newmat;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   int __pyx_t_2;
   int __pyx_t_3;
-  __Pyx_RefNannySetupContext("createSubMatrix", 0);
+  __Pyx_RefNannySetupContext("createSubMatrixVirtual", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_iscol);
 
   /* "PETSc/Mat.pyx":436
- *     def createSubMatrix(self, Mat A not None,
- *                         IS isrow not None, IS iscol=None):
+ * 
+ *     def createSubMatrixVirtual(self, Mat A, IS isrow, IS iscol=None):
  *         if iscol is None: iscol = isrow             # <<<<<<<<<<<<<<
  *         cdef PetscMat newmat = NULL
- *         CHKERR( MatCreateSubMatrix(A.mat, isrow.iset, iscol.iset, &newmat) )
+ *         CHKERR( MatCreateSubMatrixVirtual(A.mat, isrow.iset, iscol.iset, &newmat) )
  */
   __pyx_t_1 = (((PyObject *)__pyx_v_iscol) == Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
@@ -114743,10 +122028,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_72createSubMatrix(struct PyPetsc
   }
 
   /* "PETSc/Mat.pyx":437
- *                         IS isrow not None, IS iscol=None):
+ *     def createSubMatrixVirtual(self, Mat A, IS isrow, IS iscol=None):
  *         if iscol is None: iscol = isrow
  *         cdef PetscMat newmat = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( MatCreateSubMatrix(A.mat, isrow.iset, iscol.iset, &newmat) )
+ *         CHKERR( MatCreateSubMatrixVirtual(A.mat, isrow.iset, iscol.iset, &newmat) )
  *         PetscCLEAR(self.obj); self.mat = newmat
  */
   __pyx_v_newmat = NULL;
@@ -114754,15 +122039,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_72createSubMatrix(struct PyPetsc
   /* "PETSc/Mat.pyx":438
  *         if iscol is None: iscol = isrow
  *         cdef PetscMat newmat = NULL
- *         CHKERR( MatCreateSubMatrix(A.mat, isrow.iset, iscol.iset, &newmat) )             # <<<<<<<<<<<<<<
+ *         CHKERR( MatCreateSubMatrixVirtual(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_ERR(33, 438, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateSubMatrixVirtual(__pyx_v_A->mat, __pyx_v_isrow->iset, __pyx_v_iscol->iset, (&__pyx_v_newmat))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(33, 438, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":439
  *         cdef PetscMat newmat = NULL
- *         CHKERR( MatCreateSubMatrix(A.mat, isrow.iset, iscol.iset, &newmat) )
+ *         CHKERR( MatCreateSubMatrixVirtual(A.mat, isrow.iset, iscol.iset, &newmat) )
  *         PetscCLEAR(self.obj); self.mat = newmat             # <<<<<<<<<<<<<<
  *         return self
  * 
@@ -114771,7 +122056,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_72createSubMatrix(struct PyPetsc
   __pyx_v_self->mat = __pyx_v_newmat;
 
   /* "PETSc/Mat.pyx":440
- *         CHKERR( MatCreateSubMatrix(A.mat, isrow.iset, iscol.iset, &newmat) )
+ *         CHKERR( MatCreateSubMatrixVirtual(A.mat, isrow.iset, iscol.iset, &newmat) )
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         return self             # <<<<<<<<<<<<<<
  * 
@@ -114782,17 +122067,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_72createSubMatrix(struct PyPetsc
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":434
+  /* "PETSc/Mat.pyx":435
  *         return self
  * 
- *     def createSubMatrix(self, Mat A not None,             # <<<<<<<<<<<<<<
- *                         IS isrow not None, IS iscol=None):
+ *     def createSubMatrixVirtual(self, Mat A, IS isrow, IS iscol=None):             # <<<<<<<<<<<<<<
  *         if iscol is None: iscol = isrow
+ *         cdef PetscMat newmat = NULL
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.Mat.createSubMatrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.createSubMatrixVirtual", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XDECREF((PyObject *)__pyx_v_iscol);
@@ -114831,9 +122116,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_75createNest(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -114842,16 +122131,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_75createNest(PyObject *__pyx_v_s
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mats)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_isrows);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_iscols);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -114864,8 +122156,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_75createNest(PyObject *__pyx_v_s
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -114947,7 +122242,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_74createNest(struct PyPetscMatOb
     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
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         __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_ERR(33, 444, __pyx_L1_error)
@@ -114955,7 +122250,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_74createNest(struct PyPetscMatOb
         #endif
       } else {
         if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         __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_ERR(33, 444, __pyx_L1_error)
@@ -114967,7 +122262,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_74createNest(struct PyPetscMatOb
       if (unlikely(!__pyx_t_5)) {
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
-          if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
+          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
           else __PYX_ERR(33, 444, __pyx_L1_error)
         }
         break;
@@ -115016,8 +122311,8 @@ 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_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)
+      __pyx_t_3 = PyObject_Length(__pyx_v_isrows); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(33, 447, __pyx_L1_error)
+      __pyx_t_7 = PyObject_Length(__pyx_v_mats); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-1))) __PYX_ERR(33, 447, __pyx_L1_error)
       if (unlikely(!((__pyx_t_3 == __pyx_t_7) != 0))) {
         PyErr_SetNone(PyExc_AssertionError);
         __PYX_ERR(33, 447, __pyx_L1_error)
@@ -115079,10 +122374,10 @@ 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_ERR(33, 452, __pyx_L1_error)
+      __pyx_t_7 = PyObject_Length(__pyx_v_iscols); if (unlikely(__pyx_t_7 == ((Py_ssize_t)-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_ERR(33, 452, __pyx_L1_error)
+      __pyx_t_3 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-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);
@@ -115131,7 +122426,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_74createNest(struct PyPetscMatOb
  *         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_ERR(33, 456, __pyx_L1_error)
+  __pyx_t_3 = PyObject_Length(__pyx_v_mats); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(33, 456, __pyx_L1_error)
   __pyx_v_mr = __pyx_t_3;
 
   /* "PETSc/Mat.pyx":457
@@ -115143,7 +122438,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_74createNest(struct PyPetscMatOb
  */
   __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_ERR(33, 457, __pyx_L1_error)
+  __pyx_t_3 = PyObject_Length(__pyx_t_1); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(33, 457, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_v_mc = __pyx_t_3;
 
@@ -115380,7 +122675,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_74createNest(struct PyPetscMatOb
  *         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_ERR(33, 476, __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 == ((int)-1))) __PYX_ERR(33, 476, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":477
  *         cdef PetscMat newmat = NULL
@@ -115397,7 +122692,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_74createNest(struct PyPetscMatOb
  *         PetscCLEAR(self.obj); self.mat = newmat
  *         return self             # <<<<<<<<<<<<<<
  * 
- *     ##def createIS(self, size, LGMap lgmap not None, comm=None):
+ *     ##def createIS(self, size, LGMap lgmap, comm=None):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
@@ -115460,8 +122755,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_77createPython(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -115470,11 +122768,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_77createPython(PyObject *__pyx_v
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_size)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_context);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -115487,7 +122787,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_77createPython(PyObject *__pyx_v
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -115558,7 +122860,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_76createPython(struct PyPetscMat
  *         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_ERR(33, 498, __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 == ((int)-1))) __PYX_ERR(33, 498, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":499
  *         cdef PetscInt rbs = 0, cbs = 0, m = 0, n = 0, M = 0, N = 0
@@ -115567,7 +122869,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_76createPython(struct PyPetscMat
  *         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_ERR(33, 499, __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 == ((int)-1))) __PYX_ERR(33, 499, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":500
  *         Mat_Sizes(size, None, &rbs, &cbs, &m, &n, &M, &N)
@@ -115576,7 +122878,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_76createPython(struct PyPetscMat
  *         # 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_ERR(33, 500, __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 == ((int)-1))) __PYX_ERR(33, 500, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":502
  *         Sys_Layout(ccomm, cbs, &n, &N)
@@ -115594,7 +122896,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_76createPython(struct PyPetscMat
  *         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_ERR(33, 503, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreate(__pyx_v_ccomm, (&__pyx_v_newmat))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(33, 503, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":504
  *         cdef PetscMat newmat = NULL
@@ -115613,7 +122915,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_76createPython(struct PyPetscMat
  *         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_ERR(33, 505, __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 == ((int)-1))) __PYX_ERR(33, 505, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":506
  *         PetscCLEAR(self.obj); self.mat = newmat
@@ -115622,7 +122924,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_76createPython(struct PyPetscMat
  *         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_ERR(33, 506, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetType(__pyx_v_self->mat, MATPYTHON)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(33, 506, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":507
  *         CHKERR( MatSetSizes(self.mat, m, n, M, N) )
@@ -115631,7 +122933,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_76createPython(struct PyPetscMat
  *         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_ERR(33, 507, __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 == ((int)-1))) __PYX_ERR(33, 507, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":508
  *         CHKERR( MatSetType(self.mat, MATPYTHON) )
@@ -115687,6 +122989,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_79setPythonContext(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -115734,7 +123037,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_78setPythonContext(struct PyPets
  * 
  *     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_ERR(33, 511, __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 == ((int)-1))) __PYX_ERR(33, 511, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":510
  *         return self
@@ -115805,7 +123108,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_80getPythonContext(struct PyPets
  *         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_ERR(33, 515, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatPythonGetContext(__pyx_v_self->mat, (&__pyx_v_context))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(33, 515, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":516
  *         cdef void *context = NULL
@@ -115878,6 +123181,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_83setPythonType(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -115949,7 +123253,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_82setPythonType(struct PyPetscMa
  * 
  *     #
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatPythonSetType(__pyx_v_self->mat, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(33, 522, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":519
  *         else: return <object> context
@@ -115997,6 +123301,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_85setOptionsPrefix(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -116068,7 +123373,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_84setOptionsPrefix(struct PyPets
  * 
  *     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_ERR(33, 529, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetOptionsPrefix(__pyx_v_self->mat, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(33, 529, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":526
  *     #
@@ -116141,7 +123446,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_86getOptionsPrefix(struct PyPets
  *         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_ERR(33, 533, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetOptionsPrefix(__pyx_v_self->mat, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(33, 533, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":534
  *         cdef const_char *cval = NULL
@@ -116214,7 +123519,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_88setFromOptions(struct PyPetscM
  * 
  *     def setUp(self):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetFromOptions(__pyx_v_self->mat)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(33, 537, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":536
  *         return bytes2str(cval)
@@ -116274,7 +123579,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_90setUp(struct PyPetscMatObject
  *         return self
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetUp(__pyx_v_self->mat)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(33, 540, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":541
  *     def setUp(self):
@@ -116331,7 +123636,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_93setOption(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -116340,6 +123647,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_93setOption(PyObject *__pyx_v_se
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_option)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_flag)) != 0)) kw_args--;
         else {
@@ -116390,7 +123698,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_92setOption(struct PyPetscMatObj
  */
   __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)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetOption(__pyx_v_self->mat, __pyx_t_1, __pyx_t_2)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(33, 544, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":543
  *         return self
@@ -116461,7 +123769,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_94getType(struct PyPetscMatObjec
  *         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_ERR(33, 548, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetType(__pyx_v_self->mat, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(33, 548, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":549
  *         cdef PetscMatType cval = NULL
@@ -116549,7 +123857,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_96getSize(struct PyPetscMatObjec
  *         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_ERR(33, 553, __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 == ((int)-1))) __PYX_ERR(33, 553, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":554
  *         cdef PetscInt M = 0, N = 0
@@ -116649,7 +123957,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_98getLocalSize(struct PyPetscMat
  *         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_ERR(33, 558, __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 == ((int)-1))) __PYX_ERR(33, 558, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":559
  *         cdef PetscInt m = 0, n = 0
@@ -116762,7 +124070,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_100getSizes(struct PyPetscMatObj
  *         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_ERR(33, 564, __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 == ((int)-1))) __PYX_ERR(33, 564, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":565
  *         cdef PetscInt M = 0, N = 0
@@ -116771,7 +124079,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_100getSizes(struct PyPetscMatObj
  *         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_ERR(33, 565, __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 == ((int)-1))) __PYX_ERR(33, 565, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":566
  *         CHKERR( MatGetLocalSize(self.mat, &m, &n) )
@@ -116888,7 +124196,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_102getBlockSize(struct PyPetscMa
  *         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_ERR(33, 570, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetBlockSize(__pyx_v_self->mat, (&__pyx_v_bs))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(33, 570, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":571
  *         cdef PetscInt bs = 0
@@ -116976,7 +124284,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_104getBlockSizes(struct PyPetscM
  *         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_ERR(33, 575, __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 == ((int)-1))) __PYX_ERR(33, 575, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":576
  *         cdef PetscInt rbs = 0, cbs = 0
@@ -117076,7 +124384,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_106getOwnershipRange(struct PyPe
  *         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_ERR(33, 580, __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 == ((int)-1))) __PYX_ERR(33, 580, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":581
  *         cdef PetscInt ival1 = 0, ival2 = 0
@@ -117174,7 +124482,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_108getOwnershipRanges(struct PyP
  *         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_ERR(33, 585, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetOwnershipRanges(__pyx_v_self->mat, (&__pyx_v_rowrng))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(33, 585, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":586
  *         cdef const_PetscInt *rowrng = NULL
@@ -117192,7 +124500,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_108getOwnershipRanges(struct PyP
  *         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_ERR(33, 587, __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 == ((int)-1))) __PYX_ERR(33, 587, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":588
  *         cdef MPI_Comm comm = MPI_COMM_NULL
@@ -117210,7 +124518,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_108getOwnershipRanges(struct PyP
  *         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_ERR(33, 589, __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 == ((int)-1))) __PYX_ERR(33, 589, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":590
  *         cdef int size = -1
@@ -117298,7 +124606,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_110getOwnershipRangeColumn(struc
  *         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_ERR(33, 594, __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 == ((int)-1))) __PYX_ERR(33, 594, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":595
  *         cdef PetscInt ival1 = 0, ival2 = 0
@@ -117396,7 +124704,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_112getOwnershipRangesColumn(stru
  *         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_ERR(33, 599, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetOwnershipRangesColumn(__pyx_v_self->mat, (&__pyx_v_colrng))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(33, 599, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":600
  *         cdef const_PetscInt *colrng = NULL
@@ -117414,7 +124722,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_112getOwnershipRangesColumn(stru
  *         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_ERR(33, 601, __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 == ((int)-1))) __PYX_ERR(33, 601, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":602
  *         cdef MPI_Comm comm = MPI_COMM_NULL
@@ -117432,7 +124740,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_112getOwnershipRangesColumn(stru
  *         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_ERR(33, 603, __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 == ((int)-1))) __PYX_ERR(33, 603, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":604
  *         cdef int size = -1
@@ -117532,7 +124840,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_114getOwnershipIS(struct PyPetsc
  *         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_ERR(33, 609, __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 == ((int)-1))) __PYX_ERR(33, 609, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":610
  *         cdef IS cols = IS()
@@ -117600,6 +124908,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_117getInfo(PyObject *__pyx_v_sel
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -117617,6 +124926,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_117getInfo(PyObject *__pyx_v_sel
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -117655,7 +124965,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_116getInfo(struct PyPetscMatObje
  *         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_t_1 = __pyx_f_8petsc4py_5PETSc_infotype(__pyx_v_info); if (unlikely(__pyx_t_1 == ((MatInfoType)((MatInfoType)-1L)))) __PYX_ERR(33, 613, __pyx_L1_error)
   __pyx_v_itype = __pyx_t_1;
 
   /* "PETSc/Mat.pyx":615
@@ -117665,7 +124975,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_116getInfo(struct PyPetscMatObje
  *         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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetInfo(__pyx_v_self->mat, __pyx_v_itype, (&__pyx_v_cinfo))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(33, 615, __pyx_L1_error)
 
   /* "PETSc/Mat.pyx":616
  *         cdef PetscMatInfo cinfo
@@ -117725,6 +125035,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_119duplicate(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -117742,6 +125053,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_119duplicate(PyObject *__pyx_v_s
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -117780,7 +125092,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_118duplicate(struct PyPetscMatOb
  *     def duplicate(self, copy=False):
  *         cdef PetscMatDuplicateOption flag = MAT_DO_NOT_COPY_VALUES             # <<<<<<<<<<<<<<
  *         if copy: flag = MAT_COPY_VALUES
- *         cdef Mat mat = type(self)()
+ *         if copy > MAT_COPY_VALUES: flag = MAT_SHARE_NONZERO_PATTERN
  */
   __pyx_v_flag = MAT_DO_NOT_COPY_VALUES;
 
@@ -117788,8 +125100,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_118duplicate(struct PyPetscMatOb
  *     def duplicate(self, copy=False):
  *         cdef PetscMatDuplicateOption flag = MAT_DO_NOT_COPY_VALUES
  *         if copy: flag = MAT_COPY_VALUES             # <<<<<<<<<<<<<<
+ *         if copy > MAT_COPY_VALUES: flag = MAT_SHARE_NONZERO_PATTERN
  *         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_ERR(33, 620, __pyx_L1_error)
   if (__pyx_t_1) {
@@ -117799,43 +125111,60 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_118duplicate(struct PyPetscMatOb
   /* "PETSc/Mat.pyx":621
  *         cdef PetscMatDuplicateOption flag = MAT_DO_NOT_COPY_VALUES
  *         if copy: flag = MAT_COPY_VALUES
+ *         if copy > MAT_COPY_VALUES: flag = MAT_SHARE_NONZERO_PATTERN             # <<<<<<<<<<<<<<
+ *         cdef Mat mat = type(self)()
+ *         CHKERR( MatDuplicate(self.mat, flag, &mat.mat) )
+ */
+  __pyx_t_2 = __Pyx_PyInt_From_MatDuplicateOption(MAT_COPY_VALUES); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 621, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = PyObject_RichCompare(__pyx_v_copy, __pyx_t_2, Py_GT); __Pyx_XGOTREF(__pyx_t_3); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 621, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_3); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(33, 621, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  if (__pyx_t_1) {
+    __pyx_v_flag = MAT_SHARE_NONZERO_PATTERN;
+  }
+
+  /* "PETSc/Mat.pyx":622
+ *         if copy: flag = MAT_COPY_VALUES
+ *         if copy > MAT_COPY_VALUES: flag = MAT_SHARE_NONZERO_PATTERN
  *         cdef Mat mat = type(self)()             # <<<<<<<<<<<<<<
  *         CHKERR( MatDuplicate(self.mat, flag, &mat.mat) )
  *         return mat
  */
   __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
-  __pyx_t_3 = ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))); __pyx_t_4 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_3))) {
-    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
+  __pyx_t_2 = ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))); __pyx_t_4 = NULL;
+  if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_2))) {
+    __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
     if (likely(__pyx_t_4)) {
-      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
       __Pyx_INCREF(__pyx_t_4);
       __Pyx_INCREF(function);
-      __Pyx_DECREF_SET(__pyx_t_3, function);
+      __Pyx_DECREF_SET(__pyx_t_2, function);
     }
   }
   if (__pyx_t_4) {
-    __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_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 622, __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_ERR(33, 621, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 622, __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_ERR(33, 621, __pyx_L1_error)
-  __pyx_v_mat = ((struct PyPetscMatObject *)__pyx_t_2);
-  __pyx_t_2 = 0;
+  __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_Mat))))) __PYX_ERR(33, 622, __pyx_L1_error)
+  __pyx_v_mat = ((struct PyPetscMatObject *)__pyx_t_3);
+  __pyx_t_3 = 0;
 
-  /* "PETSc/Mat.pyx":622
- *         if copy: flag = MAT_COPY_VALUES
+  /* "PETSc/Mat.pyx":623
+ *         if copy > MAT_COPY_VALUES: flag = MAT_SHARE_NONZERO_PATTERN
  *         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_ERR(33, 622, __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 == ((int)-1))) __PYX_ERR(33, 623, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":623
+  /* "PETSc/Mat.pyx":624
  *         cdef Mat mat = type(self)()
  *         CHKERR( MatDuplicate(self.mat, flag, &mat.mat) )
  *         return mat             # <<<<<<<<<<<<<<
@@ -117869,7 +125198,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_118duplicate(struct PyPetscMatOb
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":625
+/* "PETSc/Mat.pyx":626
  *         return mat
  * 
  *     def copy(self, Mat result=None, structure=None):             # <<<<<<<<<<<<<<
@@ -117896,7 +125225,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_121copy(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -117907,6 +125238,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_121copy(PyObject *__pyx_v_self,
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_result);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_structure);
@@ -117914,12 +125246,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_121copy(PyObject *__pyx_v_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "copy") < 0)) __PYX_ERR(33, 625, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "copy") < 0)) __PYX_ERR(33, 626, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -117929,13 +125263,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_121copy(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_ERR(33, 625, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("copy", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 626, __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_ERR(33, 625, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_result), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "result", 0))) __PYX_ERR(33, 626, __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 */
@@ -117962,7 +125296,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_120copy(struct PyPetscMatObject
   __Pyx_RefNannySetupContext("copy", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_result);
 
-  /* "PETSc/Mat.pyx":626
+  /* "PETSc/Mat.pyx":627
  * 
  *     def copy(self, Mat result=None, structure=None):
  *         cdef PetscMatDuplicateOption copy = MAT_COPY_VALUES             # <<<<<<<<<<<<<<
@@ -117971,17 +125305,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_120copy(struct PyPetscMatObject
  */
   __pyx_v_copy = MAT_COPY_VALUES;
 
-  /* "PETSc/Mat.pyx":627
+  /* "PETSc/Mat.pyx":628
  *     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)-1L))) __PYX_ERR(33, 627, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_matstructure(__pyx_v_structure); if (unlikely(__pyx_t_1 == ((MatStructure)((MatStructure)-1L)))) __PYX_ERR(33, 628, __pyx_L1_error)
   __pyx_v_mstr = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":628
+  /* "PETSc/Mat.pyx":629
  *         cdef PetscMatDuplicateOption copy = MAT_COPY_VALUES
  *         cdef PetscMatStructure mstr = matstructure(structure)
  *         if result is None:             # <<<<<<<<<<<<<<
@@ -117992,7 +125326,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_120copy(struct PyPetscMatObject
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Mat.pyx":629
+    /* "PETSc/Mat.pyx":630
  *         cdef PetscMatStructure mstr = matstructure(structure)
  *         if result is None:
  *             result = type(self)()             # <<<<<<<<<<<<<<
@@ -118001,7 +125335,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_120copy(struct PyPetscMatObject
  */
     __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
     __pyx_t_5 = ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))); __pyx_t_6 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && unlikely(PyMethod_Check(__pyx_t_5))) {
+    if (CYTHON_UNPACK_METHODS && unlikely(PyMethod_Check(__pyx_t_5))) {
       __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
       if (likely(__pyx_t_6)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -118011,18 +125345,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_120copy(struct PyPetscMatObject
       }
     }
     if (__pyx_t_6) {
-      __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_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 630, __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_ERR(33, 629, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 630, __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_ERR(33, 629, __pyx_L1_error)
+    if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(33, 630, __pyx_L1_error)
     __Pyx_DECREF_SET(__pyx_v_result, ((struct PyPetscMatObject *)__pyx_t_4));
     __pyx_t_4 = 0;
 
-    /* "PETSc/Mat.pyx":628
+    /* "PETSc/Mat.pyx":629
  *         cdef PetscMatDuplicateOption copy = MAT_COPY_VALUES
  *         cdef PetscMatStructure mstr = matstructure(structure)
  *         if result is None:             # <<<<<<<<<<<<<<
@@ -118031,7 +125365,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_120copy(struct PyPetscMatObject
  */
   }
 
-  /* "PETSc/Mat.pyx":630
+  /* "PETSc/Mat.pyx":631
  *         if result is None:
  *             result = type(self)()
  *         if result.mat == NULL:             # <<<<<<<<<<<<<<
@@ -118041,16 +125375,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_120copy(struct PyPetscMatObject
   __pyx_t_3 = ((__pyx_v_result->mat == NULL) != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Mat.pyx":631
+    /* "PETSc/Mat.pyx":632
  *             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_ERR(33, 631, __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 == ((int)-1))) __PYX_ERR(33, 632, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":630
+    /* "PETSc/Mat.pyx":631
  *         if result is None:
  *             result = type(self)()
  *         if result.mat == NULL:             # <<<<<<<<<<<<<<
@@ -118060,7 +125394,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_120copy(struct PyPetscMatObject
     goto __pyx_L4;
   }
 
-  /* "PETSc/Mat.pyx":633
+  /* "PETSc/Mat.pyx":634
  *             CHKERR( MatDuplicate(self.mat, copy, &result.mat) )
  *         else:
  *             CHKERR( MatCopy(self.mat, result.mat, mstr) )             # <<<<<<<<<<<<<<
@@ -118068,23 +125402,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_120copy(struct PyPetscMatObject
  * 
  */
   /*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_t_7 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCopy(__pyx_v_self->mat, __pyx_v_result->mat, __pyx_v_mstr)); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(33, 634, __pyx_L1_error)
   }
   __pyx_L4:;
 
-  /* "PETSc/Mat.pyx":634
+  /* "PETSc/Mat.pyx":635
  *         else:
  *             CHKERR( MatCopy(self.mat, result.mat, mstr) )
  *         return result             # <<<<<<<<<<<<<<
  * 
- *     def load(self, Viewer viewer not None):
+ *     def load(self, Viewer viewer):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_result));
   __pyx_r = ((PyObject *)__pyx_v_result);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":625
+  /* "PETSc/Mat.pyx":626
  *         return mat
  * 
  *     def copy(self, Mat result=None, structure=None):             # <<<<<<<<<<<<<<
@@ -118106,10 +125440,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_120copy(struct PyPetscMatObject
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":636
+/* "PETSc/Mat.pyx":637
  *         return result
  * 
- *     def load(self, Viewer viewer not None):             # <<<<<<<<<<<<<<
+ *     def load(self, Viewer viewer):             # <<<<<<<<<<<<<<
  *         cdef MPI_Comm comm = MPI_COMM_NULL
  *         cdef PetscObject obj = <PetscObject>(viewer.vwr)
  */
@@ -118130,6 +125464,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_123load(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -118140,7 +125475,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_123load(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_ERR(33, 636, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "load") < 0)) __PYX_ERR(33, 637, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -118151,13 +125486,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_123load(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_ERR(33, 636, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("load", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 637, __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_ERR(33, 636, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 0, "viewer", 0))) __PYX_ERR(33, 637, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_122load(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
@@ -118178,17 +125513,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_122load(struct PyPetscMatObject
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("load", 0);
 
-  /* "PETSc/Mat.pyx":637
+  /* "PETSc/Mat.pyx":638
  * 
- *     def load(self, Viewer viewer not None):
+ *     def load(self, Viewer viewer):
  *         cdef MPI_Comm comm = MPI_COMM_NULL             # <<<<<<<<<<<<<<
  *         cdef PetscObject obj = <PetscObject>(viewer.vwr)
  *         if self.mat == NULL:
  */
   __pyx_v_comm = MPI_COMM_NULL;
 
-  /* "PETSc/Mat.pyx":638
- *     def load(self, Viewer viewer not None):
+  /* "PETSc/Mat.pyx":639
+ *     def load(self, Viewer viewer):
  *         cdef MPI_Comm comm = MPI_COMM_NULL
  *         cdef PetscObject obj = <PetscObject>(viewer.vwr)             # <<<<<<<<<<<<<<
  *         if self.mat == NULL:
@@ -118196,7 +125531,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_122load(struct PyPetscMatObject
  */
   __pyx_v_obj = ((PetscObject)__pyx_v_viewer->vwr);
 
-  /* "PETSc/Mat.pyx":639
+  /* "PETSc/Mat.pyx":640
  *         cdef MPI_Comm comm = MPI_COMM_NULL
  *         cdef PetscObject obj = <PetscObject>(viewer.vwr)
  *         if self.mat == NULL:             # <<<<<<<<<<<<<<
@@ -118206,25 +125541,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_122load(struct PyPetscMatObject
   __pyx_t_1 = ((__pyx_v_self->mat == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/Mat.pyx":640
+    /* "PETSc/Mat.pyx":641
  *         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_ERR(33, 640, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetComm(__pyx_v_obj, (&__pyx_v_comm))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(33, 641, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":641
+    /* "PETSc/Mat.pyx":642
  *         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_ERR(33, 641, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreate(__pyx_v_comm, (&__pyx_v_self->mat))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(33, 642, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":639
+    /* "PETSc/Mat.pyx":640
  *         cdef MPI_Comm comm = MPI_COMM_NULL
  *         cdef PetscObject obj = <PetscObject>(viewer.vwr)
  *         if self.mat == NULL:             # <<<<<<<<<<<<<<
@@ -118233,16 +125568,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_122load(struct PyPetscMatObject
  */
   }
 
-  /* "PETSc/Mat.pyx":642
+  /* "PETSc/Mat.pyx":643
  *             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_ERR(33, 642, __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 == ((int)-1))) __PYX_ERR(33, 643, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":643
+  /* "PETSc/Mat.pyx":644
  *             CHKERR( MatCreate(comm, &self.mat) )
  *         CHKERR( MatLoad(self.mat, viewer.vwr) )
  *         return self             # <<<<<<<<<<<<<<
@@ -118254,10 +125589,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_122load(struct PyPetscMatObject
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":636
+  /* "PETSc/Mat.pyx":637
  *         return result
  * 
- *     def load(self, Viewer viewer not None):             # <<<<<<<<<<<<<<
+ *     def load(self, Viewer viewer):             # <<<<<<<<<<<<<<
  *         cdef MPI_Comm comm = MPI_COMM_NULL
  *         cdef PetscObject obj = <PetscObject>(viewer.vwr)
  */
@@ -118272,7 +125607,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_122load(struct PyPetscMatObject
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":645
+/* "PETSc/Mat.pyx":646
  *         return self
  * 
  *     def convert(self, mat_type=None, Mat out=None):             # <<<<<<<<<<<<<<
@@ -118299,7 +125634,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_125convert(PyObject *__pyx_v_sel
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -118310,6 +125647,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_125convert(PyObject *__pyx_v_sel
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mat_type);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_out);
@@ -118317,12 +125655,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_125convert(PyObject *__pyx_v_sel
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convert") < 0)) __PYX_ERR(33, 645, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convert") < 0)) __PYX_ERR(33, 646, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -118332,13 +125672,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_125convert(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_ERR(33, 645, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("convert", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 646, __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_ERR(33, 645, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_out), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "out", 0))) __PYX_ERR(33, 646, __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 */
@@ -118363,7 +125703,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_124convert(struct PyPetscMatObje
   __Pyx_INCREF(__pyx_v_mat_type);
   __Pyx_INCREF((PyObject *)__pyx_v_out);
 
-  /* "PETSc/Mat.pyx":646
+  /* "PETSc/Mat.pyx":647
  * 
  *     def convert(self, mat_type=None, Mat out=None):
  *         cdef PetscMatType mtype = MATSAME             # <<<<<<<<<<<<<<
@@ -118372,7 +125712,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_124convert(struct PyPetscMatObje
  */
   __pyx_v_mtype = MATSAME;
 
-  /* "PETSc/Mat.pyx":647
+  /* "PETSc/Mat.pyx":648
  *     def convert(self, mat_type=None, Mat out=None):
  *         cdef PetscMatType mtype = MATSAME
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX             # <<<<<<<<<<<<<<
@@ -118381,19 +125721,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_124convert(struct PyPetscMatObje
  */
   __pyx_v_reuse = MAT_INITIAL_MATRIX;
 
-  /* "PETSc/Mat.pyx":648
+  /* "PETSc/Mat.pyx":649
  *         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_ERR(33, 648, __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, 649, __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":649
+  /* "PETSc/Mat.pyx":650
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         mat_type = str2bytes(mat_type, &mtype)
  *         if mtype == NULL: mtype = MATSAME             # <<<<<<<<<<<<<<
@@ -118405,7 +125745,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_124convert(struct PyPetscMatObje
     __pyx_v_mtype = MATSAME;
   }
 
-  /* "PETSc/Mat.pyx":650
+  /* "PETSc/Mat.pyx":651
  *         mat_type = str2bytes(mat_type, &mtype)
  *         if mtype == NULL: mtype = MATSAME
  *         if out is None: out = self             # <<<<<<<<<<<<<<
@@ -118419,7 +125759,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_124convert(struct PyPetscMatObje
     __Pyx_DECREF_SET(__pyx_v_out, __pyx_v_self);
   }
 
-  /* "PETSc/Mat.pyx":651
+  /* "PETSc/Mat.pyx":652
  *         if mtype == NULL: mtype = MATSAME
  *         if out is None: out = self
  *         if out.mat != NULL: reuse = MAT_REUSE_MATRIX             # <<<<<<<<<<<<<<
@@ -118431,16 +125771,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_124convert(struct PyPetscMatObje
     __pyx_v_reuse = MAT_REUSE_MATRIX;
   }
 
-  /* "PETSc/Mat.pyx":652
+  /* "PETSc/Mat.pyx":653
  *         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_ERR(33, 652, __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 == ((int)-1))) __PYX_ERR(33, 653, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":653
+  /* "PETSc/Mat.pyx":654
  *         if out.mat != NULL: reuse = MAT_REUSE_MATRIX
  *         CHKERR( MatConvert(self.mat, mtype, reuse, &out.mat) )
  *         return out             # <<<<<<<<<<<<<<
@@ -118452,7 +125792,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_124convert(struct PyPetscMatObje
   __pyx_r = ((PyObject *)__pyx_v_out);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":645
+  /* "PETSc/Mat.pyx":646
  *         return self
  * 
  *     def convert(self, mat_type=None, Mat out=None):             # <<<<<<<<<<<<<<
@@ -118473,7 +125813,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_124convert(struct PyPetscMatObje
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":655
+/* "PETSc/Mat.pyx":656
  *         return out
  * 
  *     def transpose(self, Mat out=None):             # <<<<<<<<<<<<<<
@@ -118498,6 +125838,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_127transpose(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -118510,11 +125851,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_127transpose(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "transpose") < 0)) __PYX_ERR(33, 655, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "transpose") < 0)) __PYX_ERR(33, 656, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -118523,13 +125865,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_127transpose(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_ERR(33, 655, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("transpose", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 656, __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_ERR(33, 655, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_out), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "out", 0))) __PYX_ERR(33, 656, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_126transpose(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_out);
 
   /* function exit code */
@@ -118551,7 +125893,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_126transpose(struct PyPetscMatOb
   __Pyx_RefNannySetupContext("transpose", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_out);
 
-  /* "PETSc/Mat.pyx":656
+  /* "PETSc/Mat.pyx":657
  * 
  *     def transpose(self, Mat out=None):
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX             # <<<<<<<<<<<<<<
@@ -118560,7 +125902,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_126transpose(struct PyPetscMatOb
  */
   __pyx_v_reuse = MAT_INITIAL_MATRIX;
 
-  /* "PETSc/Mat.pyx":657
+  /* "PETSc/Mat.pyx":658
  *     def transpose(self, Mat out=None):
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         if out is None: out = self             # <<<<<<<<<<<<<<
@@ -118574,7 +125916,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_126transpose(struct PyPetscMatOb
     __Pyx_DECREF_SET(__pyx_v_out, __pyx_v_self);
   }
 
-  /* "PETSc/Mat.pyx":658
+  /* "PETSc/Mat.pyx":659
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         if out is None: out = self
  *         if out.mat != NULL: reuse = MAT_REUSE_MATRIX             # <<<<<<<<<<<<<<
@@ -118586,16 +125928,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_126transpose(struct PyPetscMatOb
     __pyx_v_reuse = MAT_REUSE_MATRIX;
   }
 
-  /* "PETSc/Mat.pyx":659
+  /* "PETSc/Mat.pyx":660
  *         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_ERR(33, 659, __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 == ((int)-1))) __PYX_ERR(33, 660, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":660
+  /* "PETSc/Mat.pyx":661
  *         if out.mat != NULL: reuse = MAT_REUSE_MATRIX
  *         CHKERR( MatTranspose(self.mat, reuse, &out.mat) )
  *         return out             # <<<<<<<<<<<<<<
@@ -118607,7 +125949,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_126transpose(struct PyPetscMatOb
   __pyx_r = ((PyObject *)__pyx_v_out);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":655
+  /* "PETSc/Mat.pyx":656
  *         return out
  * 
  *     def transpose(self, Mat out=None):             # <<<<<<<<<<<<<<
@@ -118626,7 +125968,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_126transpose(struct PyPetscMatOb
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":662
+/* "PETSc/Mat.pyx":663
  *         return out
  * 
  *     def realPart(self, Mat out=None):             # <<<<<<<<<<<<<<
@@ -118651,6 +125993,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_129realPart(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -118663,11 +126006,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_129realPart(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "realPart") < 0)) __PYX_ERR(33, 662, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "realPart") < 0)) __PYX_ERR(33, 663, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -118676,13 +126020,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_129realPart(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_ERR(33, 662, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("realPart", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 663, __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_ERR(33, 662, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_out), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "out", 0))) __PYX_ERR(33, 663, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_128realPart(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_out);
 
   /* function exit code */
@@ -118703,7 +126047,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_128realPart(struct PyPetscMatObj
   __Pyx_RefNannySetupContext("realPart", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_out);
 
-  /* "PETSc/Mat.pyx":663
+  /* "PETSc/Mat.pyx":664
  * 
  *     def realPart(self, Mat out=None):
  *         if out is None:             # <<<<<<<<<<<<<<
@@ -118714,7 +126058,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_128realPart(struct PyPetscMatObj
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":664
+    /* "PETSc/Mat.pyx":665
  *     def realPart(self, Mat out=None):
  *         if out is None:
  *             out = self             # <<<<<<<<<<<<<<
@@ -118724,7 +126068,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_128realPart(struct PyPetscMatObj
     __Pyx_INCREF(((PyObject *)__pyx_v_self));
     __Pyx_DECREF_SET(__pyx_v_out, __pyx_v_self);
 
-    /* "PETSc/Mat.pyx":663
+    /* "PETSc/Mat.pyx":664
  * 
  *     def realPart(self, Mat out=None):
  *         if out is None:             # <<<<<<<<<<<<<<
@@ -118734,7 +126078,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_128realPart(struct PyPetscMatObj
     goto __pyx_L3;
   }
 
-  /* "PETSc/Mat.pyx":665
+  /* "PETSc/Mat.pyx":666
  *         if out is None:
  *             out = self
  *         elif out.mat == NULL:             # <<<<<<<<<<<<<<
@@ -118744,16 +126088,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_128realPart(struct PyPetscMatObj
   __pyx_t_2 = ((__pyx_v_out->mat == NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":666
+    /* "PETSc/Mat.pyx":667
  *             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_ERR(33, 666, __pyx_L1_error)
+    __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 == ((int)-1))) __PYX_ERR(33, 667, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":665
+    /* "PETSc/Mat.pyx":666
  *         if out is None:
  *             out = self
  *         elif out.mat == NULL:             # <<<<<<<<<<<<<<
@@ -118763,16 +126107,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_128realPart(struct PyPetscMatObj
   }
   __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":667
+  /* "PETSc/Mat.pyx":668
  *         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_ERR(33, 667, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatRealPart(__pyx_v_out->mat)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(33, 668, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":668
+  /* "PETSc/Mat.pyx":669
  *             CHKERR( MatDuplicate(self.mat, MAT_COPY_VALUES, &out.mat) )
  *         CHKERR( MatRealPart(out.mat) )
  *         return out             # <<<<<<<<<<<<<<
@@ -118784,7 +126128,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_128realPart(struct PyPetscMatObj
   __pyx_r = ((PyObject *)__pyx_v_out);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":662
+  /* "PETSc/Mat.pyx":663
  *         return out
  * 
  *     def realPart(self, Mat out=None):             # <<<<<<<<<<<<<<
@@ -118803,7 +126147,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_128realPart(struct PyPetscMatObj
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":670
+/* "PETSc/Mat.pyx":671
  *         return out
  * 
  *     def imagPart(self, Mat out=None):             # <<<<<<<<<<<<<<
@@ -118828,6 +126172,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_131imagPart(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -118840,11 +126185,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_131imagPart(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "imagPart") < 0)) __PYX_ERR(33, 670, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "imagPart") < 0)) __PYX_ERR(33, 671, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -118853,13 +126199,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_131imagPart(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_ERR(33, 670, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("imagPart", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 671, __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_ERR(33, 670, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_out), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "out", 0))) __PYX_ERR(33, 671, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_130imagPart(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_out);
 
   /* function exit code */
@@ -118880,7 +126226,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_130imagPart(struct PyPetscMatObj
   __Pyx_RefNannySetupContext("imagPart", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_out);
 
-  /* "PETSc/Mat.pyx":671
+  /* "PETSc/Mat.pyx":672
  * 
  *     def imagPart(self, Mat out=None):
  *         if out is None:             # <<<<<<<<<<<<<<
@@ -118891,7 +126237,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_130imagPart(struct PyPetscMatObj
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":672
+    /* "PETSc/Mat.pyx":673
  *     def imagPart(self, Mat out=None):
  *         if out is None:
  *             out = self             # <<<<<<<<<<<<<<
@@ -118901,7 +126247,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_130imagPart(struct PyPetscMatObj
     __Pyx_INCREF(((PyObject *)__pyx_v_self));
     __Pyx_DECREF_SET(__pyx_v_out, __pyx_v_self);
 
-    /* "PETSc/Mat.pyx":671
+    /* "PETSc/Mat.pyx":672
  * 
  *     def imagPart(self, Mat out=None):
  *         if out is None:             # <<<<<<<<<<<<<<
@@ -118911,7 +126257,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_130imagPart(struct PyPetscMatObj
     goto __pyx_L3;
   }
 
-  /* "PETSc/Mat.pyx":673
+  /* "PETSc/Mat.pyx":674
  *         if out is None:
  *             out = self
  *         elif out.mat == NULL:             # <<<<<<<<<<<<<<
@@ -118921,16 +126267,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_130imagPart(struct PyPetscMatObj
   __pyx_t_2 = ((__pyx_v_out->mat == NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":674
+    /* "PETSc/Mat.pyx":675
  *             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_ERR(33, 674, __pyx_L1_error)
+    __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 == ((int)-1))) __PYX_ERR(33, 675, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":673
+    /* "PETSc/Mat.pyx":674
  *         if out is None:
  *             out = self
  *         elif out.mat == NULL:             # <<<<<<<<<<<<<<
@@ -118940,16 +126286,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_130imagPart(struct PyPetscMatObj
   }
   __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":675
+  /* "PETSc/Mat.pyx":676
  *         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_ERR(33, 675, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatImaginaryPart(__pyx_v_out->mat)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(33, 676, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":676
+  /* "PETSc/Mat.pyx":677
  *             CHKERR( MatDuplicate(self.mat, MAT_COPY_VALUES, &out.mat) )
  *         CHKERR( MatImaginaryPart(out.mat) )
  *         return out             # <<<<<<<<<<<<<<
@@ -118961,7 +126307,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_130imagPart(struct PyPetscMatObj
   __pyx_r = ((PyObject *)__pyx_v_out);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":670
+  /* "PETSc/Mat.pyx":671
  *         return out
  * 
  *     def imagPart(self, Mat out=None):             # <<<<<<<<<<<<<<
@@ -118980,7 +126326,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_130imagPart(struct PyPetscMatObj
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":678
+/* "PETSc/Mat.pyx":679
  *         return out
  * 
  *     def conjugate(self, Mat out=None):             # <<<<<<<<<<<<<<
@@ -119005,6 +126351,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_133conjugate(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -119017,11 +126364,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_133conjugate(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "conjugate") < 0)) __PYX_ERR(33, 678, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "conjugate") < 0)) __PYX_ERR(33, 679, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -119030,13 +126378,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_133conjugate(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_ERR(33, 678, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("conjugate", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 679, __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_ERR(33, 678, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_out), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "out", 0))) __PYX_ERR(33, 679, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_132conjugate(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_out);
 
   /* function exit code */
@@ -119057,7 +126405,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_132conjugate(struct PyPetscMatOb
   __Pyx_RefNannySetupContext("conjugate", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_out);
 
-  /* "PETSc/Mat.pyx":679
+  /* "PETSc/Mat.pyx":680
  * 
  *     def conjugate(self, Mat out=None):
  *         if out is None:             # <<<<<<<<<<<<<<
@@ -119068,7 +126416,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_132conjugate(struct PyPetscMatOb
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":680
+    /* "PETSc/Mat.pyx":681
  *     def conjugate(self, Mat out=None):
  *         if out is None:
  *             out = self             # <<<<<<<<<<<<<<
@@ -119078,7 +126426,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_132conjugate(struct PyPetscMatOb
     __Pyx_INCREF(((PyObject *)__pyx_v_self));
     __Pyx_DECREF_SET(__pyx_v_out, __pyx_v_self);
 
-    /* "PETSc/Mat.pyx":679
+    /* "PETSc/Mat.pyx":680
  * 
  *     def conjugate(self, Mat out=None):
  *         if out is None:             # <<<<<<<<<<<<<<
@@ -119088,7 +126436,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_132conjugate(struct PyPetscMatOb
     goto __pyx_L3;
   }
 
-  /* "PETSc/Mat.pyx":681
+  /* "PETSc/Mat.pyx":682
  *         if out is None:
  *             out = self
  *         elif out.mat == NULL:             # <<<<<<<<<<<<<<
@@ -119098,16 +126446,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_132conjugate(struct PyPetscMatOb
   __pyx_t_2 = ((__pyx_v_out->mat == NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":682
+    /* "PETSc/Mat.pyx":683
  *             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_ERR(33, 682, __pyx_L1_error)
+    __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 == ((int)-1))) __PYX_ERR(33, 683, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":681
+    /* "PETSc/Mat.pyx":682
  *         if out is None:
  *             out = self
  *         elif out.mat == NULL:             # <<<<<<<<<<<<<<
@@ -119117,28 +126465,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_132conjugate(struct PyPetscMatOb
   }
   __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":683
+  /* "PETSc/Mat.pyx":684
  *         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_ERR(33, 683, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatConjugate(__pyx_v_out->mat)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(33, 684, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":684
+  /* "PETSc/Mat.pyx":685
  *             CHKERR( MatDuplicate(self.mat, MAT_COPY_VALUES, &out.mat) )
  *         CHKERR( MatConjugate(out.mat) )
  *         return out             # <<<<<<<<<<<<<<
  * 
- *     def permute(self, IS row not None, IS col not None):
+ *     def permute(self, IS row, IS col):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_out));
   __pyx_r = ((PyObject *)__pyx_v_out);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":678
+  /* "PETSc/Mat.pyx":679
  *         return out
  * 
  *     def conjugate(self, Mat out=None):             # <<<<<<<<<<<<<<
@@ -119157,10 +126505,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_132conjugate(struct PyPetscMatOb
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":686
+/* "PETSc/Mat.pyx":687
  *         return out
  * 
- *     def permute(self, IS row not None, IS col not None):             # <<<<<<<<<<<<<<
+ *     def permute(self, IS row, IS col):             # <<<<<<<<<<<<<<
  *         cdef Mat mat = Mat()
  *         CHKERR( MatPermute(self.mat, row.iset, col.iset, &mat.mat) )
  */
@@ -119182,7 +126530,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_135permute(PyObject *__pyx_v_sel
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -119191,14 +126541,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_135permute(PyObject *__pyx_v_sel
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_row)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 686, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("permute", 1, 2, 2, 1); __PYX_ERR(33, 687, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "permute") < 0)) __PYX_ERR(33, 686, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "permute") < 0)) __PYX_ERR(33, 687, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -119211,14 +126562,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_135permute(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_ERR(33, 686, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("permute", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 687, __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_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)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_row), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "row", 0))) __PYX_ERR(33, 687, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_col), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "col", 0))) __PYX_ERR(33, 687, __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 */
@@ -119238,43 +126589,43 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_134permute(struct PyPetscMatObje
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("permute", 0);
 
-  /* "PETSc/Mat.pyx":687
+  /* "PETSc/Mat.pyx":688
  * 
- *     def permute(self, IS row not None, IS col not None):
+ *     def permute(self, IS row, IS col):
  *         cdef Mat mat = Mat()             # <<<<<<<<<<<<<<
  *         CHKERR( MatPermute(self.mat, row.iset, col.iset, &mat.mat) )
  *         return mat
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 688, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_mat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":688
- *     def permute(self, IS row not None, IS col not None):
+  /* "PETSc/Mat.pyx":689
+ *     def permute(self, IS row, IS col):
  *         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_ERR(33, 688, __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 == ((int)-1))) __PYX_ERR(33, 689, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":689
+  /* "PETSc/Mat.pyx":690
  *         cdef Mat mat = Mat()
  *         CHKERR( MatPermute(self.mat, row.iset, col.iset, &mat.mat) )
  *         return mat             # <<<<<<<<<<<<<<
  * 
- *     def equal(self, Mat mat not None):
+ *     def equal(self, Mat mat):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_mat));
   __pyx_r = ((PyObject *)__pyx_v_mat);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":686
+  /* "PETSc/Mat.pyx":687
  *         return out
  * 
- *     def permute(self, IS row not None, IS col not None):             # <<<<<<<<<<<<<<
+ *     def permute(self, IS row, IS col):             # <<<<<<<<<<<<<<
  *         cdef Mat mat = Mat()
  *         CHKERR( MatPermute(self.mat, row.iset, col.iset, &mat.mat) )
  */
@@ -119291,10 +126642,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_134permute(struct PyPetscMatObje
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":691
+/* "PETSc/Mat.pyx":692
  *         return mat
  * 
- *     def equal(self, Mat mat not None):             # <<<<<<<<<<<<<<
+ *     def equal(self, Mat mat):             # <<<<<<<<<<<<<<
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( MatEqual(self.mat, mat.mat, &flag) )
  */
@@ -119315,6 +126666,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_137equal(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -119325,7 +126677,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_137equal(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_ERR(33, 691, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "equal") < 0)) __PYX_ERR(33, 692, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -119336,13 +126688,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_137equal(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_ERR(33, 691, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("equal", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 692, __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_ERR(33, 691, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(33, 692, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_136equal(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat);
 
   /* function exit code */
@@ -119359,54 +126711,52 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_136equal(struct PyPetscMatObject
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_t_2;
-  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("equal", 0);
 
-  /* "PETSc/Mat.pyx":692
+  /* "PETSc/Mat.pyx":693
  * 
- *     def equal(self, Mat mat not None):
+ *     def equal(self, Mat mat):
  *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
  *         CHKERR( MatEqual(self.mat, mat.mat, &flag) )
- *         return <bint> mat
+ *         return toBool(flag)
  */
   __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":693
- *     def equal(self, Mat mat not None):
+  /* "PETSc/Mat.pyx":694
+ *     def equal(self, Mat mat):
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( MatEqual(self.mat, mat.mat, &flag) )             # <<<<<<<<<<<<<<
- *         return <bint> mat
+ *         return toBool(flag)
  * 
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(33, 694, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":694
+  /* "PETSc/Mat.pyx":695
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( MatEqual(self.mat, mat.mat, &flag) )
- *         return <bint> mat             # <<<<<<<<<<<<<<
+ *         return toBool(flag)             # <<<<<<<<<<<<<<
  * 
  *     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_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;
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 695, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":691
+  /* "PETSc/Mat.pyx":692
  *         return mat
  * 
- *     def equal(self, Mat mat not None):             # <<<<<<<<<<<<<<
+ *     def equal(self, Mat mat):             # <<<<<<<<<<<<<<
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( MatEqual(self.mat, mat.mat, &flag) )
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_2);
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.equal", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
@@ -119415,8 +126765,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_136equal(struct PyPetscMatObject
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":696
- *         return <bint> mat
+/* "PETSc/Mat.pyx":697
+ *         return toBool(flag)
  * 
  *     def isTranspose(self, Mat mat=None, tol=0):             # <<<<<<<<<<<<<<
  *         if mat is None: mat = self
@@ -119442,7 +126792,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_139isTranspose(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -119453,6 +126805,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_139isTranspose(PyObject *__pyx_v
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mat);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_tol);
@@ -119460,12 +126813,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_139isTranspose(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "isTranspose") < 0)) __PYX_ERR(33, 696, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "isTranspose") < 0)) __PYX_ERR(33, 697, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -119475,13 +126830,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_139isTranspose(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_ERR(33, 696, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("isTranspose", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 697, __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_ERR(33, 696, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "mat", 0))) __PYX_ERR(33, 697, __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 */
@@ -119506,7 +126861,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_138isTranspose(struct PyPetscMat
   __Pyx_RefNannySetupContext("isTranspose", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_mat);
 
-  /* "PETSc/Mat.pyx":697
+  /* "PETSc/Mat.pyx":698
  * 
  *     def isTranspose(self, Mat mat=None, tol=0):
  *         if mat is None: mat = self             # <<<<<<<<<<<<<<
@@ -119520,50 +126875,50 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_138isTranspose(struct PyPetscMat
     __Pyx_DECREF_SET(__pyx_v_mat, __pyx_v_self);
   }
 
-  /* "PETSc/Mat.pyx":698
+  /* "PETSc/Mat.pyx":699
  *     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_ERR(33, 698, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_tol); if (unlikely(__pyx_t_3 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(33, 699, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_3;
 
-  /* "PETSc/Mat.pyx":699
+  /* "PETSc/Mat.pyx":700
  *         if mat is None: mat = self
  *         cdef PetscReal rval = asReal(tol)
  *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
  *         CHKERR( MatIsTranspose(self.mat, mat.mat, rval, &flag) )
- *         return <bint>flag
+ *         return toBool(flag)
  */
   __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":700
+  /* "PETSc/Mat.pyx":701
  *         cdef PetscReal rval = asReal(tol)
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( MatIsTranspose(self.mat, mat.mat, rval, &flag) )             # <<<<<<<<<<<<<<
- *         return <bint>flag
+ *         return toBool(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_ERR(33, 700, __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 == ((int)-1))) __PYX_ERR(33, 701, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":701
+  /* "PETSc/Mat.pyx":702
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( MatIsTranspose(self.mat, mat.mat, rval, &flag) )
- *         return <bint>flag             # <<<<<<<<<<<<<<
+ *         return toBool(flag)             # <<<<<<<<<<<<<<
  * 
  *     def isSymmetric(self, tol=0):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_5 = __Pyx_PyInt_From_PetscBool(__pyx_v_flag); if (unlikely(!__pyx_t_5)) __PYX_ERR(33, 701, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toBool(__pyx_v_flag); if (unlikely(!__pyx_t_5)) __PYX_ERR(33, 702, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __pyx_r = __pyx_t_5;
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":696
- *         return <bint> mat
+  /* "PETSc/Mat.pyx":697
+ *         return toBool(flag)
  * 
  *     def isTranspose(self, Mat mat=None, tol=0):             # <<<<<<<<<<<<<<
  *         if mat is None: mat = self
@@ -119582,8 +126937,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_138isTranspose(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":703
- *         return <bint>flag
+/* "PETSc/Mat.pyx":704
+ *         return toBool(flag)
  * 
  *     def isSymmetric(self, tol=0):             # <<<<<<<<<<<<<<
  *         cdef PetscReal rval = asReal(tol)
@@ -119607,6 +126962,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_141isSymmetric(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -119619,11 +126975,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_141isSymmetric(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "isSymmetric") < 0)) __PYX_ERR(33, 703, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "isSymmetric") < 0)) __PYX_ERR(33, 704, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -119632,7 +126989,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_141isSymmetric(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_ERR(33, 703, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("isSymmetric", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 704, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.isSymmetric", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -119655,50 +127012,50 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_140isSymmetric(struct PyPetscMat
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("isSymmetric", 0);
 
-  /* "PETSc/Mat.pyx":704
+  /* "PETSc/Mat.pyx":705
  * 
  *     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_ERR(33, 704, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_tol); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(33, 705, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":705
+  /* "PETSc/Mat.pyx":706
  *     def isSymmetric(self, tol=0):
  *         cdef PetscReal rval = asReal(tol)
  *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
  *         CHKERR( MatIsSymmetric(self.mat, rval, &flag) )
- *         return <bint>flag
+ *         return toBool(flag)
  */
   __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":706
+  /* "PETSc/Mat.pyx":707
  *         cdef PetscReal rval = asReal(tol)
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( MatIsSymmetric(self.mat, rval, &flag) )             # <<<<<<<<<<<<<<
- *         return <bint>flag
+ *         return toBool(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_ERR(33, 706, __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 == ((int)-1))) __PYX_ERR(33, 707, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":707
+  /* "PETSc/Mat.pyx":708
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( MatIsSymmetric(self.mat, rval, &flag) )
- *         return <bint>flag             # <<<<<<<<<<<<<<
+ *         return toBool(flag)             # <<<<<<<<<<<<<<
  * 
  *     def isSymmetricKnown(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __Pyx_PyInt_From_PetscBool(__pyx_v_flag); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 707, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toBool(__pyx_v_flag); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 708, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":703
- *         return <bint>flag
+  /* "PETSc/Mat.pyx":704
+ *         return toBool(flag)
  * 
  *     def isSymmetric(self, tol=0):             # <<<<<<<<<<<<<<
  *         cdef PetscReal rval = asReal(tol)
@@ -119716,8 +127073,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_140isSymmetric(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":709
- *         return <bint>flag
+/* "PETSc/Mat.pyx":710
+ *         return toBool(flag)
  * 
  *     def isSymmetricKnown(self):             # <<<<<<<<<<<<<<
  *         cdef PetscBool flag1 = PETSC_FALSE
@@ -119752,7 +127109,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_142isSymmetricKnown(struct PyPet
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("isSymmetricKnown", 0);
 
-  /* "PETSc/Mat.pyx":710
+  /* "PETSc/Mat.pyx":711
  * 
  *     def isSymmetricKnown(self):
  *         cdef PetscBool flag1 = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -119761,37 +127118,37 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_142isSymmetricKnown(struct PyPet
  */
   __pyx_v_flag1 = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":711
+  /* "PETSc/Mat.pyx":712
  *     def isSymmetricKnown(self):
  *         cdef PetscBool flag1 = PETSC_FALSE
  *         cdef PetscBool flag2 = PETSC_FALSE             # <<<<<<<<<<<<<<
  *         CHKERR( MatIsSymmetricKnown(self.mat, &flag1, &flag2) )
- *         return (<bint>flag1, <bint>flag2)
+ *         return (toBool(flag1), toBool(flag2))
  */
   __pyx_v_flag2 = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":712
+  /* "PETSc/Mat.pyx":713
  *         cdef PetscBool flag1 = PETSC_FALSE
  *         cdef PetscBool flag2 = PETSC_FALSE
  *         CHKERR( MatIsSymmetricKnown(self.mat, &flag1, &flag2) )             # <<<<<<<<<<<<<<
- *         return (<bint>flag1, <bint>flag2)
+ *         return (toBool(flag1), toBool(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_ERR(33, 712, __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 == ((int)-1))) __PYX_ERR(33, 713, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":713
+  /* "PETSc/Mat.pyx":714
  *         cdef PetscBool flag2 = PETSC_FALSE
  *         CHKERR( MatIsSymmetricKnown(self.mat, &flag1, &flag2) )
- *         return (<bint>flag1, <bint>flag2)             # <<<<<<<<<<<<<<
+ *         return (toBool(flag1), toBool(flag2))             # <<<<<<<<<<<<<<
  * 
  *     def isHermitian(self, tol=0):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_flag1); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 713, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toBool(__pyx_v_flag1); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 714, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyInt_From_PetscBool(__pyx_v_flag2); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 713, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toBool(__pyx_v_flag2); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 714, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 713, __pyx_L1_error)
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 714, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -119803,8 +127160,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_142isSymmetricKnown(struct PyPet
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":709
- *         return <bint>flag
+  /* "PETSc/Mat.pyx":710
+ *         return toBool(flag)
  * 
  *     def isSymmetricKnown(self):             # <<<<<<<<<<<<<<
  *         cdef PetscBool flag1 = PETSC_FALSE
@@ -119824,12 +127181,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_142isSymmetricKnown(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":715
- *         return (<bint>flag1, <bint>flag2)
+/* "PETSc/Mat.pyx":716
+ *         return (toBool(flag1), toBool(flag2))
  * 
  *     def isHermitian(self, tol=0):             # <<<<<<<<<<<<<<
  *         cdef PetscReal rval = asReal(tol)
- *         cdef PetscBool bval = PETSC_FALSE
+ *         cdef PetscBool flag = PETSC_FALSE
  */
 
 /* Python wrapper */
@@ -119849,6 +127206,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_145isHermitian(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -119861,11 +127219,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_145isHermitian(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "isHermitian") < 0)) __PYX_ERR(33, 715, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "isHermitian") < 0)) __PYX_ERR(33, 716, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -119874,7 +127233,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_145isHermitian(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_ERR(33, 715, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("isHermitian", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 716, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.isHermitian", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -119889,7 +127248,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_145isHermitian(PyObject *__pyx_v
 
 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;
+  PetscBool __pyx_v_flag;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PetscReal __pyx_t_1;
@@ -119897,54 +127256,54 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_144isHermitian(struct PyPetscMat
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("isHermitian", 0);
 
-  /* "PETSc/Mat.pyx":716
+  /* "PETSc/Mat.pyx":717
  * 
  *     def isHermitian(self, tol=0):
  *         cdef PetscReal rval = asReal(tol)             # <<<<<<<<<<<<<<
- *         cdef PetscBool bval = PETSC_FALSE
- *         CHKERR( MatIsHermitian(self.mat, rval, &bval) )
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( MatIsHermitian(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_ERR(33, 716, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_tol); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(33, 717, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":717
+  /* "PETSc/Mat.pyx":718
  *     def isHermitian(self, tol=0):
  *         cdef PetscReal rval = asReal(tol)
- *         cdef PetscBool bval = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( MatIsHermitian(self.mat, rval, &bval) )
- *         return <bint>bval
+ *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( MatIsHermitian(self.mat, rval, &flag) )
+ *         return toBool(flag)
  */
-  __pyx_v_bval = PETSC_FALSE;
+  __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":718
+  /* "PETSc/Mat.pyx":719
  *         cdef PetscReal rval = asReal(tol)
- *         cdef PetscBool bval = PETSC_FALSE
- *         CHKERR( MatIsHermitian(self.mat, rval, &bval) )             # <<<<<<<<<<<<<<
- *         return <bint>bval
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( MatIsHermitian(self.mat, rval, &flag) )             # <<<<<<<<<<<<<<
+ *         return toBool(flag)
  * 
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatIsHermitian(__pyx_v_self->mat, __pyx_v_rval, (&__pyx_v_flag))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(33, 719, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":719
- *         cdef PetscBool bval = PETSC_FALSE
- *         CHKERR( MatIsHermitian(self.mat, rval, &bval) )
- *         return <bint>bval             # <<<<<<<<<<<<<<
+  /* "PETSc/Mat.pyx":720
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( MatIsHermitian(self.mat, rval, &flag) )
+ *         return toBool(flag)             # <<<<<<<<<<<<<<
  * 
  *     def isHermitianKnown(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __Pyx_PyInt_From_PetscBool(__pyx_v_bval); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 719, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toBool(__pyx_v_flag); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 720, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":715
- *         return (<bint>flag1, <bint>flag2)
+  /* "PETSc/Mat.pyx":716
+ *         return (toBool(flag1), toBool(flag2))
  * 
  *     def isHermitian(self, tol=0):             # <<<<<<<<<<<<<<
  *         cdef PetscReal rval = asReal(tol)
- *         cdef PetscBool bval = PETSC_FALSE
+ *         cdef PetscBool flag = PETSC_FALSE
  */
 
   /* function exit code */
@@ -119958,12 +127317,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_144isHermitian(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":721
- *         return <bint>bval
+/* "PETSc/Mat.pyx":722
+ *         return toBool(flag)
  * 
  *     def isHermitianKnown(self):             # <<<<<<<<<<<<<<
- *         cdef PetscBool bval1 = PETSC_FALSE
- *         cdef PetscBool bval2 = PETSC_FALSE
+ *         cdef PetscBool flag1 = PETSC_FALSE
+ *         cdef PetscBool flag2 = PETSC_FALSE
  */
 
 /* Python wrapper */
@@ -119984,8 +127343,8 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_147isHermitianKnown(PyObject *__
 }
 
 static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_146isHermitianKnown(struct PyPetscMatObject *__pyx_v_self) {
-  PetscBool __pyx_v_bval1;
-  PetscBool __pyx_v_bval2;
+  PetscBool __pyx_v_flag1;
+  PetscBool __pyx_v_flag2;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -119994,46 +127353,46 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_146isHermitianKnown(struct PyPet
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("isHermitianKnown", 0);
 
-  /* "PETSc/Mat.pyx":722
+  /* "PETSc/Mat.pyx":723
  * 
  *     def isHermitianKnown(self):
- *         cdef PetscBool bval1 = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         cdef PetscBool bval2 = PETSC_FALSE
- *         CHKERR( MatIsHermitianKnown(self.mat, &bval1, &bval2) )
+ *         cdef PetscBool flag1 = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         cdef PetscBool flag2 = PETSC_FALSE
+ *         CHKERR( MatIsHermitianKnown(self.mat, &flag1, &flag2) )
  */
-  __pyx_v_bval1 = PETSC_FALSE;
+  __pyx_v_flag1 = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":723
+  /* "PETSc/Mat.pyx":724
  *     def isHermitianKnown(self):
- *         cdef PetscBool bval1 = PETSC_FALSE
- *         cdef PetscBool bval2 = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( MatIsHermitianKnown(self.mat, &bval1, &bval2) )
- *         return (<bint>bval1, <bint>bval2)
+ *         cdef PetscBool flag1 = PETSC_FALSE
+ *         cdef PetscBool flag2 = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( MatIsHermitianKnown(self.mat, &flag1, &flag2) )
+ *         return (toBool(flag1), toBool(flag2))
  */
-  __pyx_v_bval2 = PETSC_FALSE;
+  __pyx_v_flag2 = PETSC_FALSE;
 
-  /* "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)
+  /* "PETSc/Mat.pyx":725
+ *         cdef PetscBool flag1 = PETSC_FALSE
+ *         cdef PetscBool flag2 = PETSC_FALSE
+ *         CHKERR( MatIsHermitianKnown(self.mat, &flag1, &flag2) )             # <<<<<<<<<<<<<<
+ *         return (toBool(flag1), toBool(flag2))
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatIsHermitianKnown(__pyx_v_self->mat, (&__pyx_v_flag1), (&__pyx_v_flag2))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(33, 725, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":725
- *         cdef PetscBool bval2 = PETSC_FALSE
- *         CHKERR( MatIsHermitianKnown(self.mat, &bval1, &bval2) )
- *         return (<bint>bval1, <bint>bval2)             # <<<<<<<<<<<<<<
+  /* "PETSc/Mat.pyx":726
+ *         cdef PetscBool flag2 = PETSC_FALSE
+ *         CHKERR( MatIsHermitianKnown(self.mat, &flag1, &flag2) )
+ *         return (toBool(flag1), toBool(flag2))             # <<<<<<<<<<<<<<
  * 
  *     def isStructurallySymmetric(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_bval1); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 725, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toBool(__pyx_v_flag1); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 726, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = __Pyx_PyInt_From_PetscBool(__pyx_v_bval2); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 725, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toBool(__pyx_v_flag2); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 726, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 725, __pyx_L1_error)
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 726, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -120045,12 +127404,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_146isHermitianKnown(struct PyPet
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":721
- *         return <bint>bval
+  /* "PETSc/Mat.pyx":722
+ *         return toBool(flag)
  * 
  *     def isHermitianKnown(self):             # <<<<<<<<<<<<<<
- *         cdef PetscBool bval1 = PETSC_FALSE
- *         cdef PetscBool bval2 = PETSC_FALSE
+ *         cdef PetscBool flag1 = PETSC_FALSE
+ *         cdef PetscBool flag2 = PETSC_FALSE
  */
 
   /* function exit code */
@@ -120066,12 +127425,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_146isHermitianKnown(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":727
- *         return (<bint>bval1, <bint>bval2)
+/* "PETSc/Mat.pyx":728
+ *         return (toBool(flag1), toBool(flag2))
  * 
  *     def isStructurallySymmetric(self):             # <<<<<<<<<<<<<<
- *         cdef PetscBool bval = PETSC_FALSE
- *         CHKERR( MatIsStructurallySymmetric(self.mat, &bval) )
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( MatIsStructurallySymmetric(self.mat, &flag) )
  */
 
 /* Python wrapper */
@@ -120092,51 +127451,51 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_149isStructurallySymmetric(PyObj
 }
 
 static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_148isStructurallySymmetric(struct PyPetscMatObject *__pyx_v_self) {
-  PetscBool __pyx_v_bval;
+  PetscBool __pyx_v_flag;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("isStructurallySymmetric", 0);
 
-  /* "PETSc/Mat.pyx":728
+  /* "PETSc/Mat.pyx":729
  * 
  *     def isStructurallySymmetric(self):
- *         cdef PetscBool bval = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( MatIsStructurallySymmetric(self.mat, &bval) )
- *         return <bint>bval
+ *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( MatIsStructurallySymmetric(self.mat, &flag) )
+ *         return toBool(flag)
  */
-  __pyx_v_bval = PETSC_FALSE;
+  __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":729
+  /* "PETSc/Mat.pyx":730
  *     def isStructurallySymmetric(self):
- *         cdef PetscBool bval = PETSC_FALSE
- *         CHKERR( MatIsStructurallySymmetric(self.mat, &bval) )             # <<<<<<<<<<<<<<
- *         return <bint>bval
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( MatIsStructurallySymmetric(self.mat, &flag) )             # <<<<<<<<<<<<<<
+ *         return toBool(flag)
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatIsStructurallySymmetric(__pyx_v_self->mat, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(33, 730, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":730
- *         cdef PetscBool bval = PETSC_FALSE
- *         CHKERR( MatIsStructurallySymmetric(self.mat, &bval) )
- *         return <bint>bval             # <<<<<<<<<<<<<<
+  /* "PETSc/Mat.pyx":731
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( MatIsStructurallySymmetric(self.mat, &flag) )
+ *         return toBool(flag)             # <<<<<<<<<<<<<<
  * 
  *     def zeroEntries(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_bval); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 730, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 731, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":727
- *         return (<bint>bval1, <bint>bval2)
+  /* "PETSc/Mat.pyx":728
+ *         return (toBool(flag1), toBool(flag2))
  * 
  *     def isStructurallySymmetric(self):             # <<<<<<<<<<<<<<
- *         cdef PetscBool bval = PETSC_FALSE
- *         CHKERR( MatIsStructurallySymmetric(self.mat, &bval) )
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( MatIsStructurallySymmetric(self.mat, &flag) )
  */
 
   /* function exit code */
@@ -120150,8 +127509,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_148isStructurallySymmetric(struc
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":732
- *         return <bint>bval
+/* "PETSc/Mat.pyx":733
+ *         return toBool(flag)
  * 
  *     def zeroEntries(self):             # <<<<<<<<<<<<<<
  *         CHKERR( MatZeroEntries(self.mat) )
@@ -120181,17 +127540,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_150zeroEntries(struct PyPetscMat
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("zeroEntries", 0);
 
-  /* "PETSc/Mat.pyx":733
+  /* "PETSc/Mat.pyx":734
  * 
  *     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_ERR(33, 733, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatZeroEntries(__pyx_v_self->mat)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(33, 734, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":732
- *         return <bint>bval
+  /* "PETSc/Mat.pyx":733
+ *         return toBool(flag)
  * 
  *     def zeroEntries(self):             # <<<<<<<<<<<<<<
  *         CHKERR( MatZeroEntries(self.mat) )
@@ -120210,7 +127569,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_150zeroEntries(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":735
+/* "PETSc/Mat.pyx":736
  *         CHKERR( MatZeroEntries(self.mat) )
  * 
  *     def getValue(self, row, col):             # <<<<<<<<<<<<<<
@@ -120235,7 +127594,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_153getValue(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -120244,14 +127605,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_153getValue(PyObject *__pyx_v_se
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_row)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 735, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("getValue", 1, 2, 2, 1); __PYX_ERR(33, 736, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getValue") < 0)) __PYX_ERR(33, 735, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getValue") < 0)) __PYX_ERR(33, 736, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -120264,7 +127626,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_153getValue(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_ERR(33, 735, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getValue", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 736, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.getValue", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -120288,27 +127650,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_152getValue(struct PyPetscMatObj
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("getValue", 0);
 
-  /* "PETSc/Mat.pyx":736
+  /* "PETSc/Mat.pyx":737
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(33, 736, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_row); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(33, 737, __pyx_L1_error)
   __pyx_v_ival1 = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":737
+  /* "PETSc/Mat.pyx":738
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(33, 737, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_col); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(33, 738, __pyx_L1_error)
   __pyx_v_ival2 = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":738
+  /* "PETSc/Mat.pyx":739
  *         cdef PetscInt    ival1 = asInt(row)
  *         cdef PetscInt    ival2 = asInt(col)
  *         cdef PetscScalar sval  = 0             # <<<<<<<<<<<<<<
@@ -120317,16 +127679,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_152getValue(struct PyPetscMatObj
  */
   __pyx_v_sval = 0.0;
 
-  /* "PETSc/Mat.pyx":739
+  /* "PETSc/Mat.pyx":740
  *         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_ERR(33, 739, __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 == ((int)-1))) __PYX_ERR(33, 740, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":740
+  /* "PETSc/Mat.pyx":741
  *         cdef PetscScalar sval  = 0
  *         CHKERR( MatGetValues(self.mat, 1, &ival1, 1, &ival2, &sval) )
  *         return toScalar(sval)             # <<<<<<<<<<<<<<
@@ -120334,13 +127696,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_152getValue(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_ERR(33, 740, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toScalar(__pyx_v_sval); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 741, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":735
+  /* "PETSc/Mat.pyx":736
  *         CHKERR( MatZeroEntries(self.mat) )
  * 
  *     def getValue(self, row, col):             # <<<<<<<<<<<<<<
@@ -120359,7 +127721,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_152getValue(struct PyPetscMatObj
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":742
+/* "PETSc/Mat.pyx":743
  *         return toScalar(sval)
  * 
  *     def getValues(self, rows, cols, values=None):             # <<<<<<<<<<<<<<
@@ -120386,8 +127748,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_155getValues(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -120396,11 +127761,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_155getValues(PyObject *__pyx_v_s
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rows)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 742, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("getValues", 0, 2, 3, 1); __PYX_ERR(33, 743, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_values);
@@ -120408,11 +127775,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_155getValues(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getValues") < 0)) __PYX_ERR(33, 742, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getValues") < 0)) __PYX_ERR(33, 743, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -120425,7 +127793,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_155getValues(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_ERR(33, 742, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getValues", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 743, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.getValues", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -120444,7 +127812,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_154getValues(struct PyPetscMatOb
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("getValues", 0);
 
-  /* "PETSc/Mat.pyx":743
+  /* "PETSc/Mat.pyx":744
  * 
  *     def getValues(self, rows, cols, values=None):
  *         return matgetvalues(self.mat, rows, cols, values)             # <<<<<<<<<<<<<<
@@ -120452,13 +127820,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_154getValues(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_ERR(33, 743, __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, 744, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":742
+  /* "PETSc/Mat.pyx":743
  *         return toScalar(sval)
  * 
  *     def getValues(self, rows, cols, values=None):             # <<<<<<<<<<<<<<
@@ -120477,7 +127845,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_154getValues(struct PyPetscMatOb
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":745
+/* "PETSc/Mat.pyx":746
  *         return matgetvalues(self.mat, rows, cols, values)
  * 
  *     def getValuesCSR(self):             # <<<<<<<<<<<<<<
@@ -120524,7 +127892,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_156getValuesCSR(struct PyPetscMa
   PetscInt __pyx_t_4;
   __Pyx_RefNannySetupContext("getValuesCSR", 0);
 
-  /* "PETSc/Mat.pyx":747
+  /* "PETSc/Mat.pyx":748
  *     def getValuesCSR(self):
  *         # row ownership
  *         cdef PetscInt rstart=0, rend=0, nrows=0             # <<<<<<<<<<<<<<
@@ -120535,16 +127903,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_156getValuesCSR(struct PyPetscMa
   __pyx_v_rend = 0;
   __pyx_v_nrows = 0;
 
-  /* "PETSc/Mat.pyx":748
+  /* "PETSc/Mat.pyx":749
  *         # 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_ERR(33, 748, __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 == ((int)-1))) __PYX_ERR(33, 749, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":749
+  /* "PETSc/Mat.pyx":750
  *         cdef PetscInt rstart=0, rend=0, nrows=0
  *         CHKERR( MatGetOwnershipRange(self.mat, &rstart, &rend) )
  *         nrows = rend - rstart             # <<<<<<<<<<<<<<
@@ -120553,7 +127921,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_156getValuesCSR(struct PyPetscMa
  */
   __pyx_v_nrows = (__pyx_v_rend - __pyx_v_rstart);
 
-  /* "PETSc/Mat.pyx":751
+  /* "PETSc/Mat.pyx":752
  *         nrows = rend - rstart
  *         # first pass: row pointer array
  *         cdef PetscInt *AI = NULL             # <<<<<<<<<<<<<<
@@ -120562,22 +127930,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_156getValuesCSR(struct PyPetscMa
  */
   __pyx_v_AI = NULL;
 
-  /* "PETSc/Mat.pyx":752
+  /* "PETSc/Mat.pyx":753
  *         # 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_ERR(33, 752, __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, 753, __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_ERR(33, 752, __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, 753, __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":753
+  /* "PETSc/Mat.pyx":754
  *         cdef PetscInt *AI = NULL
  *         cdef ndarray ai = oarray_i(empty_i(nrows+1), NULL, &AI)
  *         cdef PetscInt irow=0, ncols=0             # <<<<<<<<<<<<<<
@@ -120587,7 +127955,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_156getValuesCSR(struct PyPetscMa
   __pyx_v_irow = 0;
   __pyx_v_ncols = 0;
 
-  /* "PETSc/Mat.pyx":754
+  /* "PETSc/Mat.pyx":755
  *         cdef ndarray ai = oarray_i(empty_i(nrows+1), NULL, &AI)
  *         cdef PetscInt irow=0, ncols=0
  *         AI[0] = 0             # <<<<<<<<<<<<<<
@@ -120596,7 +127964,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_156getValuesCSR(struct PyPetscMa
  */
   (__pyx_v_AI[0]) = 0;
 
-  /* "PETSc/Mat.pyx":755
+  /* "PETSc/Mat.pyx":756
  *         cdef PetscInt irow=0, ncols=0
  *         AI[0] = 0
  *         for irow from 0 <= irow < nrows:             # <<<<<<<<<<<<<<
@@ -120606,16 +127974,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_156getValuesCSR(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":756
+    /* "PETSc/Mat.pyx":757
  *         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_ERR(33, 756, __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 == ((int)-1))) __PYX_ERR(33, 757, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":757
+    /* "PETSc/Mat.pyx":758
  *         for irow from 0 <= irow < nrows:
  *             CHKERR( MatGetRow(self.mat, irow+rstart, &ncols, NULL, NULL) )
  *             AI[irow+1] = AI[irow] + ncols             # <<<<<<<<<<<<<<
@@ -120624,17 +127992,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_156getValuesCSR(struct PyPetscMa
  */
     (__pyx_v_AI[(__pyx_v_irow + 1)]) = ((__pyx_v_AI[__pyx_v_irow]) + __pyx_v_ncols);
 
-    /* "PETSc/Mat.pyx":758
+    /* "PETSc/Mat.pyx":759
  *             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_ERR(33, 758, __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 == ((int)-1))) __PYX_ERR(33, 759, __pyx_L1_error)
   }
 
-  /* "PETSc/Mat.pyx":760
+  /* "PETSc/Mat.pyx":761
  *             CHKERR( MatRestoreRow(self.mat, irow+rstart, &ncols, NULL, NULL) )
  *         # second pass: column indices and values
  *         cdef PetscInt *AJ = NULL             # <<<<<<<<<<<<<<
@@ -120643,22 +128011,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_156getValuesCSR(struct PyPetscMa
  */
   __pyx_v_AJ = NULL;
 
-  /* "PETSc/Mat.pyx":761
+  /* "PETSc/Mat.pyx":762
  *         # 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_ERR(33, 761, __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, 762, __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_ERR(33, 761, __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, 762, __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":762
+  /* "PETSc/Mat.pyx":763
  *         cdef PetscInt *AJ = NULL
  *         cdef ndarray aj = oarray_i(empty_i(AI[nrows]), NULL, &AJ)
  *         cdef PetscScalar *AV = NULL             # <<<<<<<<<<<<<<
@@ -120667,22 +128035,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_156getValuesCSR(struct PyPetscMa
  */
   __pyx_v_AV = NULL;
 
-  /* "PETSc/Mat.pyx":763
+  /* "PETSc/Mat.pyx":764
  *         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_ERR(33, 763, __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, 764, __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_ERR(33, 763, __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, 764, __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":764
+  /* "PETSc/Mat.pyx":765
  *         cdef PetscScalar *AV = NULL
  *         cdef ndarray av = oarray_s(empty_s(AI[nrows]), NULL, &AV)
  *         cdef const_PetscInt *cols = NULL             # <<<<<<<<<<<<<<
@@ -120691,7 +128059,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_156getValuesCSR(struct PyPetscMa
  */
   __pyx_v_cols = NULL;
 
-  /* "PETSc/Mat.pyx":765
+  /* "PETSc/Mat.pyx":766
  *         cdef ndarray av = oarray_s(empty_s(AI[nrows]), NULL, &AV)
  *         cdef const_PetscInt *cols = NULL
  *         cdef const_PetscScalar *vals = NULL             # <<<<<<<<<<<<<<
@@ -120700,7 +128068,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_156getValuesCSR(struct PyPetscMa
  */
   __pyx_v_vals = NULL;
 
-  /* "PETSc/Mat.pyx":766
+  /* "PETSc/Mat.pyx":767
  *         cdef const_PetscInt *cols = NULL
  *         cdef const_PetscScalar *vals = NULL
  *         for irow from 0 <= irow < nrows:             # <<<<<<<<<<<<<<
@@ -120710,44 +128078,44 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_156getValuesCSR(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":767
+    /* "PETSc/Mat.pyx":768
  *         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_ERR(33, 767, __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 == ((int)-1))) __PYX_ERR(33, 768, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":768
+    /* "PETSc/Mat.pyx":769
  *         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_ERR(33, 768, __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 == ((int)-1))) __PYX_ERR(33, 769, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":769
+    /* "PETSc/Mat.pyx":770
  *             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_ERR(33, 769, __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 == ((int)-1))) __PYX_ERR(33, 770, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":770
+    /* "PETSc/Mat.pyx":771
  *             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_ERR(33, 770, __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 == ((int)-1))) __PYX_ERR(33, 771, __pyx_L1_error)
   }
 
-  /* "PETSc/Mat.pyx":772
+  /* "PETSc/Mat.pyx":773
  *             CHKERR( MatRestoreRow(self.mat, irow+rstart, &ncols, &cols, &vals) )
  *         #
  *         return (ai, aj, av)             # <<<<<<<<<<<<<<
@@ -120755,7 +128123,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_156getValuesCSR(struct PyPetscMa
  *     def getRow(self, row):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 772, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 773, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(((PyObject *)__pyx_v_ai));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_ai));
@@ -120770,7 +128138,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_156getValuesCSR(struct PyPetscMa
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":745
+  /* "PETSc/Mat.pyx":746
  *         return matgetvalues(self.mat, rows, cols, values)
  * 
  *     def getValuesCSR(self):             # <<<<<<<<<<<<<<
@@ -120793,7 +128161,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_156getValuesCSR(struct PyPetscMa
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":774
+/* "PETSc/Mat.pyx":775
  *         return (ai, aj, av)
  * 
  *     def getRow(self, row):             # <<<<<<<<<<<<<<
@@ -120817,6 +128185,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_159getRow(PyObject *__pyx_v_self
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -120827,7 +128196,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_159getRow(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_ERR(33, 774, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getRow") < 0)) __PYX_ERR(33, 775, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -120838,7 +128207,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_159getRow(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_ERR(33, 774, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getRow", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 775, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.getRow", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -120865,17 +128234,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_158getRow(struct PyPetscMatObjec
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("getRow", 0);
 
-  /* "PETSc/Mat.pyx":775
+  /* "PETSc/Mat.pyx":776
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(33, 775, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_row); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(33, 776, __pyx_L1_error)
   __pyx_v_irow = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":776
+  /* "PETSc/Mat.pyx":777
  *     def getRow(self, row):
  *         cdef PetscInt irow = asInt(row)
  *         cdef PetscInt ncols = 0             # <<<<<<<<<<<<<<
@@ -120884,7 +128253,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_158getRow(struct PyPetscMatObjec
  */
   __pyx_v_ncols = 0;
 
-  /* "PETSc/Mat.pyx":777
+  /* "PETSc/Mat.pyx":778
  *         cdef PetscInt irow = asInt(row)
  *         cdef PetscInt ncols = 0
  *         cdef const_PetscInt *icols=NULL             # <<<<<<<<<<<<<<
@@ -120893,7 +128262,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_158getRow(struct PyPetscMatObjec
  */
   __pyx_v_icols = NULL;
 
-  /* "PETSc/Mat.pyx":778
+  /* "PETSc/Mat.pyx":779
  *         cdef PetscInt ncols = 0
  *         cdef const_PetscInt *icols=NULL
  *         cdef const_PetscScalar *svals=NULL             # <<<<<<<<<<<<<<
@@ -120902,49 +128271,49 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_158getRow(struct PyPetscMatObjec
  */
   __pyx_v_svals = NULL;
 
-  /* "PETSc/Mat.pyx":779
+  /* "PETSc/Mat.pyx":780
  *         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_ERR(33, 779, __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 == ((int)-1))) __PYX_ERR(33, 780, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":780
+  /* "PETSc/Mat.pyx":781
  *         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_ERR(33, 780, __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, 781, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_cols = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "PETSc/Mat.pyx":781
+  /* "PETSc/Mat.pyx":782
  *         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_ERR(33, 781, __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, 782, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_vals = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "PETSc/Mat.pyx":782
+  /* "PETSc/Mat.pyx":783
  *         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_ERR(33, 782, __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 == ((int)-1))) __PYX_ERR(33, 783, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":783
+  /* "PETSc/Mat.pyx":784
  *         cdef object vals = array_s(ncols, svals)
  *         CHKERR( MatRestoreRow(self.mat, irow, &ncols, &icols, &svals) )
  *         return (cols, vals)             # <<<<<<<<<<<<<<
@@ -120952,7 +128321,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_158getRow(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_ERR(33, 783, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 784, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_cols);
   __Pyx_GIVEREF(__pyx_v_cols);
@@ -120964,7 +128333,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_158getRow(struct PyPetscMatObjec
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":774
+  /* "PETSc/Mat.pyx":775
  *         return (ai, aj, av)
  * 
  *     def getRow(self, row):             # <<<<<<<<<<<<<<
@@ -120985,7 +128354,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_158getRow(struct PyPetscMatObjec
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":785
+/* "PETSc/Mat.pyx":786
  *         return (cols, vals)
  * 
  *     def getRowIJ(self, symmetric=False, compressed=False):             # <<<<<<<<<<<<<<
@@ -121012,7 +128381,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_161getRowIJ(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -121023,6 +128394,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_161getRowIJ(PyObject *__pyx_v_se
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_symmetric);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_compressed);
@@ -121030,12 +128402,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_161getRowIJ(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getRowIJ") < 0)) __PYX_ERR(33, 785, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getRowIJ") < 0)) __PYX_ERR(33, 786, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -121045,7 +128419,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_161getRowIJ(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_ERR(33, 785, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getRowIJ", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 786, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.getRowIJ", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -121076,7 +128450,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_160getRowIJ(struct PyPetscMatObj
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("getRowIJ", 0);
 
-  /* "PETSc/Mat.pyx":786
+  /* "PETSc/Mat.pyx":787
  * 
  *     def getRowIJ(self, symmetric=False, compressed=False):
  *         cdef PetscInt shift=0             # <<<<<<<<<<<<<<
@@ -121085,27 +128459,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_160getRowIJ(struct PyPetscMatObj
  */
   __pyx_v_shift = 0;
 
-  /* "PETSc/Mat.pyx":787
+  /* "PETSc/Mat.pyx":788
  *     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)__Pyx_PyInt_As_PetscBool(__pyx_v_symmetric)); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 787, __pyx_L1_error)
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_symmetric)); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 788, __pyx_L1_error)
   __pyx_v_symm = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":788
+  /* "PETSc/Mat.pyx":789
  *         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)__Pyx_PyInt_As_PetscBool(__pyx_v_compressed)); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 788, __pyx_L1_error)
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_compressed)); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 789, __pyx_L1_error)
   __pyx_v_bcmp = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":789
+  /* "PETSc/Mat.pyx":790
  *         cdef PetscBool symm=symmetric
  *         cdef PetscBool bcmp=compressed
  *         cdef PetscInt n=0             # <<<<<<<<<<<<<<
@@ -121114,7 +128488,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_160getRowIJ(struct PyPetscMatObj
  */
   __pyx_v_n = 0;
 
-  /* "PETSc/Mat.pyx":790
+  /* "PETSc/Mat.pyx":791
  *         cdef PetscBool bcmp=compressed
  *         cdef PetscInt n=0
  *         cdef const_PetscInt *ia=NULL             # <<<<<<<<<<<<<<
@@ -121123,7 +128497,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_160getRowIJ(struct PyPetscMatObj
  */
   __pyx_v_ia = NULL;
 
-  /* "PETSc/Mat.pyx":791
+  /* "PETSc/Mat.pyx":792
  *         cdef PetscInt n=0
  *         cdef const_PetscInt *ia=NULL
  *         cdef const_PetscInt *ja=NULL             # <<<<<<<<<<<<<<
@@ -121132,7 +128506,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_160getRowIJ(struct PyPetscMatObj
  */
   __pyx_v_ja = NULL;
 
-  /* "PETSc/Mat.pyx":792
+  /* "PETSc/Mat.pyx":793
  *         cdef const_PetscInt *ia=NULL
  *         cdef const_PetscInt *ja=NULL
  *         cdef PetscBool done=PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -121141,16 +128515,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_160getRowIJ(struct PyPetscMatObj
  */
   __pyx_v_done = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":793
+  /* "PETSc/Mat.pyx":794
  *         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_ERR(33, 793, __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 == ((int)-1))) __PYX_ERR(33, 794, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":794
+  /* "PETSc/Mat.pyx":795
  *         cdef PetscBool done=PETSC_FALSE
  *         CHKERR( MatGetRowIJ(self.mat, shift, symm, bcmp, &n, &ia, &ja, &done) )
  *         cdef object ai=None, aj=None             # <<<<<<<<<<<<<<
@@ -121162,7 +128536,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_160getRowIJ(struct PyPetscMatObj
   __Pyx_INCREF(Py_None);
   __pyx_v_aj = Py_None;
 
-  /* "PETSc/Mat.pyx":795
+  /* "PETSc/Mat.pyx":796
  *         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)             # <<<<<<<<<<<<<<
@@ -121171,13 +128545,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_160getRowIJ(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_ERR(33, 795, __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, 796, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_ai, __pyx_t_4);
     __pyx_t_4 = 0;
   }
 
-  /* "PETSc/Mat.pyx":796
+  /* "PETSc/Mat.pyx":797
  *         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)             # <<<<<<<<<<<<<<
@@ -121186,22 +128560,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_160getRowIJ(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_ERR(33, 796, __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, 797, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_aj, __pyx_t_4);
     __pyx_t_4 = 0;
   }
 
-  /* "PETSc/Mat.pyx":797
+  /* "PETSc/Mat.pyx":798
  *         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_ERR(33, 797, __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 == ((int)-1))) __PYX_ERR(33, 798, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":798
+  /* "PETSc/Mat.pyx":799
  *         if done != PETSC_FALSE: aj = array_i(ia[n], ja)
  *         CHKERR( MatRestoreRowIJ(self.mat, shift, symm, bcmp, &n, &ia, &ja, &done) )
  *         return (ai, aj)             # <<<<<<<<<<<<<<
@@ -121209,7 +128583,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_160getRowIJ(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_ERR(33, 798, __pyx_L1_error)
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 799, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(__pyx_v_ai);
   __Pyx_GIVEREF(__pyx_v_ai);
@@ -121221,7 +128595,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_160getRowIJ(struct PyPetscMatObj
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":785
+  /* "PETSc/Mat.pyx":786
  *         return (cols, vals)
  * 
  *     def getRowIJ(self, symmetric=False, compressed=False):             # <<<<<<<<<<<<<<
@@ -121242,7 +128616,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_160getRowIJ(struct PyPetscMatObj
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":800
+/* "PETSc/Mat.pyx":801
  *         return (ai, aj)
  * 
  *     def getColumnIJ(self, symmetric=False, compressed=False):             # <<<<<<<<<<<<<<
@@ -121269,7 +128643,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_163getColumnIJ(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -121280,6 +128656,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_163getColumnIJ(PyObject *__pyx_v
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_symmetric);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_compressed);
@@ -121287,12 +128664,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_163getColumnIJ(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getColumnIJ") < 0)) __PYX_ERR(33, 800, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getColumnIJ") < 0)) __PYX_ERR(33, 801, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -121302,7 +128681,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_163getColumnIJ(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_ERR(33, 800, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getColumnIJ", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 801, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.getColumnIJ", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -121333,7 +128712,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_162getColumnIJ(struct PyPetscMat
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("getColumnIJ", 0);
 
-  /* "PETSc/Mat.pyx":801
+  /* "PETSc/Mat.pyx":802
  * 
  *     def getColumnIJ(self, symmetric=False, compressed=False):
  *         cdef PetscInt shift=0             # <<<<<<<<<<<<<<
@@ -121342,19 +128721,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_162getColumnIJ(struct PyPetscMat
  */
   __pyx_v_shift = 0;
 
-  /* "PETSc/Mat.pyx":802
+  /* "PETSc/Mat.pyx":803
  *     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)__Pyx_PyInt_As_PetscBool(__pyx_v_symmetric)); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 802, __pyx_L1_error)
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_symmetric)); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 803, __pyx_L1_error)
   __pyx_v_symm = __pyx_t_1;
-  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_compressed)); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 802, __pyx_L1_error)
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_compressed)); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 803, __pyx_L1_error)
   __pyx_v_bcmp = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":803
+  /* "PETSc/Mat.pyx":804
  *         cdef PetscInt shift=0
  *         cdef PetscBool symm=symmetric, bcmp=compressed
  *         cdef PetscInt n=0             # <<<<<<<<<<<<<<
@@ -121363,7 +128742,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_162getColumnIJ(struct PyPetscMat
  */
   __pyx_v_n = 0;
 
-  /* "PETSc/Mat.pyx":804
+  /* "PETSc/Mat.pyx":805
  *         cdef PetscBool symm=symmetric, bcmp=compressed
  *         cdef PetscInt n=0
  *         cdef const_PetscInt *ia=NULL             # <<<<<<<<<<<<<<
@@ -121372,7 +128751,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_162getColumnIJ(struct PyPetscMat
  */
   __pyx_v_ia = NULL;
 
-  /* "PETSc/Mat.pyx":805
+  /* "PETSc/Mat.pyx":806
  *         cdef PetscInt n=0
  *         cdef const_PetscInt *ia=NULL
  *         cdef const_PetscInt *ja=NULL             # <<<<<<<<<<<<<<
@@ -121381,7 +128760,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_162getColumnIJ(struct PyPetscMat
  */
   __pyx_v_ja = NULL;
 
-  /* "PETSc/Mat.pyx":806
+  /* "PETSc/Mat.pyx":807
  *         cdef const_PetscInt *ia=NULL
  *         cdef const_PetscInt *ja=NULL
  *         cdef PetscBool done=PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -121390,16 +128769,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_162getColumnIJ(struct PyPetscMat
  */
   __pyx_v_done = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":807
+  /* "PETSc/Mat.pyx":808
  *         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_ERR(33, 807, __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 == ((int)-1))) __PYX_ERR(33, 808, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":808
+  /* "PETSc/Mat.pyx":809
  *         cdef PetscBool done=PETSC_FALSE
  *         CHKERR( MatGetColumnIJ(self.mat, shift, symm, bcmp, &n, &ia, &ja, &done) )
  *         cdef object ai=None, aj=None             # <<<<<<<<<<<<<<
@@ -121411,7 +128790,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_162getColumnIJ(struct PyPetscMat
   __Pyx_INCREF(Py_None);
   __pyx_v_aj = Py_None;
 
-  /* "PETSc/Mat.pyx":809
+  /* "PETSc/Mat.pyx":810
  *         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)             # <<<<<<<<<<<<<<
@@ -121420,13 +128799,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_162getColumnIJ(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_ERR(33, 809, __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, 810, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_ai, __pyx_t_4);
     __pyx_t_4 = 0;
   }
 
-  /* "PETSc/Mat.pyx":810
+  /* "PETSc/Mat.pyx":811
  *         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)             # <<<<<<<<<<<<<<
@@ -121435,22 +128814,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_162getColumnIJ(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_ERR(33, 810, __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, 811, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_aj, __pyx_t_4);
     __pyx_t_4 = 0;
   }
 
-  /* "PETSc/Mat.pyx":811
+  /* "PETSc/Mat.pyx":812
  *         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_ERR(33, 811, __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 == ((int)-1))) __PYX_ERR(33, 812, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":812
+  /* "PETSc/Mat.pyx":813
  *         if done != PETSC_FALSE: aj = array_i(ia[n], ja)
  *         CHKERR( MatRestoreColumnIJ(self.mat, shift, symm, bcmp, &n, &ia, &ja, &done) )
  *         return (ai, aj)             # <<<<<<<<<<<<<<
@@ -121458,7 +128837,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_162getColumnIJ(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_ERR(33, 812, __pyx_L1_error)
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 813, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(__pyx_v_ai);
   __Pyx_GIVEREF(__pyx_v_ai);
@@ -121470,7 +128849,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_162getColumnIJ(struct PyPetscMat
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":800
+  /* "PETSc/Mat.pyx":801
  *         return (ai, aj)
  * 
  *     def getColumnIJ(self, symmetric=False, compressed=False):             # <<<<<<<<<<<<<<
@@ -121491,7 +128870,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_162getColumnIJ(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":814
+/* "PETSc/Mat.pyx":815
  *         return (ai, aj)
  * 
  *     def setValue(self, row, col, value, addv=None):             # <<<<<<<<<<<<<<
@@ -121519,9 +128898,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_165setValue(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -121530,16 +128913,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_165setValue(PyObject *__pyx_v_se
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_row)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 814, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValue", 0, 3, 4, 1); __PYX_ERR(33, 815, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 814, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValue", 0, 3, 4, 2); __PYX_ERR(33, 815, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
@@ -121547,11 +128933,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_165setValue(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValue") < 0)) __PYX_ERR(33, 814, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValue") < 0)) __PYX_ERR(33, 815, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         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);
@@ -121566,7 +128953,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_165setValue(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_ERR(33, 814, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setValue", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 815, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setValue", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -121592,56 +128979,56 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_164setValue(struct PyPetscMatObj
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("setValue", 0);
 
-  /* "PETSc/Mat.pyx":815
+  /* "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)
  */
-  __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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_row); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(33, 816, __pyx_L1_error)
   __pyx_v_ival1 = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":816
+  /* "PETSc/Mat.pyx":817
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(33, 816, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_col); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(33, 817, __pyx_L1_error)
   __pyx_v_ival2 = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":817
+  /* "PETSc/Mat.pyx":818
  *         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_ERR(33, 817, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_value); if (unlikely(__pyx_t_2 == ((PetscScalar)((PetscScalar)(-1.0))) && PyErr_Occurred())) __PYX_ERR(33, 818, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_2;
 
-  /* "PETSc/Mat.pyx":818
+  /* "PETSc/Mat.pyx":819
  *         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)-1L))) __PYX_ERR(33, 818, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_3 == ((InsertMode)((InsertMode)-1L)))) __PYX_ERR(33, 819, __pyx_L1_error)
   __pyx_v_caddv = __pyx_t_3;
 
-  /* "PETSc/Mat.pyx":819
+  /* "PETSc/Mat.pyx":820
  *         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_ERR(33, 819, __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 == ((int)-1))) __PYX_ERR(33, 820, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":814
+  /* "PETSc/Mat.pyx":815
  *         return (ai, aj)
  * 
  *     def setValue(self, row, col, value, addv=None):             # <<<<<<<<<<<<<<
@@ -121661,7 +129048,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_164setValue(struct PyPetscMatObj
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":821
+/* "PETSc/Mat.pyx":822
  *         CHKERR( MatSetValues(self.mat, 1, &ival1, 1, &ival2, &sval, caddv) )
  * 
  *     def setValues(self, rows, cols, values, addv=None):             # <<<<<<<<<<<<<<
@@ -121689,9 +129076,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_167setValues(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -121700,16 +129091,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_167setValues(PyObject *__pyx_v_s
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rows)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 821, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValues", 0, 3, 4, 1); __PYX_ERR(33, 822, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 821, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValues", 0, 3, 4, 2); __PYX_ERR(33, 822, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
@@ -121717,11 +129111,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_167setValues(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValues") < 0)) __PYX_ERR(33, 821, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValues") < 0)) __PYX_ERR(33, 822, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         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);
@@ -121736,7 +129131,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_167setValues(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_ERR(33, 821, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setValues", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 822, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setValues", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -121755,16 +129150,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_166setValues(struct PyPetscMatOb
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setValues", 0);
 
-  /* "PETSc/Mat.pyx":822
+  /* "PETSc/Mat.pyx":823
  * 
  *     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_ERR(33, 822, __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 == ((int)-1))) __PYX_ERR(33, 823, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":821
+  /* "PETSc/Mat.pyx":822
  *         CHKERR( MatSetValues(self.mat, 1, &ival1, 1, &ival2, &sval, caddv) )
  * 
  *     def setValues(self, rows, cols, values, addv=None):             # <<<<<<<<<<<<<<
@@ -121784,7 +129179,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_166setValues(struct PyPetscMatOb
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":824
+/* "PETSc/Mat.pyx":825
  *         matsetvalues(self.mat, rows, cols, values, addv, 0, 0)
  * 
  *     def setValuesRCV(self, R, C, V, addv=None):             # <<<<<<<<<<<<<<
@@ -121812,9 +129207,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_169setValuesRCV(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -121823,16 +129222,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_169setValuesRCV(PyObject *__pyx_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_R)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 824, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesRCV", 0, 3, 4, 1); __PYX_ERR(33, 825, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 824, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesRCV", 0, 3, 4, 2); __PYX_ERR(33, 825, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
@@ -121840,11 +129242,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_169setValuesRCV(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesRCV") < 0)) __PYX_ERR(33, 824, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesRCV") < 0)) __PYX_ERR(33, 825, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         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);
@@ -121859,7 +129262,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_169setValuesRCV(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesRCV", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 824, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setValuesRCV", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 825, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setValuesRCV", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -121878,16 +129281,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_168setValuesRCV(struct PyPetscMa
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setValuesRCV", 0);
 
-  /* "PETSc/Mat.pyx":825
+  /* "PETSc/Mat.pyx":826
  * 
  *     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_ERR(33, 825, __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 == ((int)-1))) __PYX_ERR(33, 826, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":824
+  /* "PETSc/Mat.pyx":825
  *         matsetvalues(self.mat, rows, cols, values, addv, 0, 0)
  * 
  *     def setValuesRCV(self, R, C, V, addv=None):             # <<<<<<<<<<<<<<
@@ -121907,7 +129310,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_168setValuesRCV(struct PyPetscMa
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":827
+/* "PETSc/Mat.pyx":828
  *         matsetvalues_rcv(self.mat, R, C, V, addv, 0, 0)
  * 
  *     def setValuesIJV(self, I, J, V, addv=None, rowmap=None):             # <<<<<<<<<<<<<<
@@ -121937,10 +129340,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_171setValuesIJV(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -121949,21 +129357,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_171setValuesIJV(PyObject *__pyx_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_I)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 827, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesIJV", 0, 3, 5, 1); __PYX_ERR(33, 828, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 827, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesIJV", 0, 3, 5, 2); __PYX_ERR(33, 828, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
           if (value) { values[3] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  4:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rowmap);
@@ -121971,12 +129383,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_171setValuesIJV(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesIJV") < 0)) __PYX_ERR(33, 827, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesIJV") < 0)) __PYX_ERR(33, 828, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         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);
@@ -121992,7 +129406,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_171setValuesIJV(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesIJV", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 827, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setValuesIJV", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 828, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setValuesIJV", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -122011,16 +129425,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_170setValuesIJV(struct PyPetscMa
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setValuesIJV", 0);
 
-  /* "PETSc/Mat.pyx":828
+  /* "PETSc/Mat.pyx":829
  * 
  *     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_ERR(33, 828, __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 == ((int)-1))) __PYX_ERR(33, 829, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":827
+  /* "PETSc/Mat.pyx":828
  *         matsetvalues_rcv(self.mat, R, C, V, addv, 0, 0)
  * 
  *     def setValuesIJV(self, I, J, V, addv=None, rowmap=None):             # <<<<<<<<<<<<<<
@@ -122040,7 +129454,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_170setValuesIJV(struct PyPetscMa
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":830
+/* "PETSc/Mat.pyx":831
  *         matsetvalues_ijv(self.mat, I, J, V, addv, rowmap, 0, 0)
  * 
  *     def setValuesCSR(self, I, J, V, addv=None):             # <<<<<<<<<<<<<<
@@ -122068,9 +129482,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_173setValuesCSR(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -122079,16 +129497,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_173setValuesCSR(PyObject *__pyx_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_I)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 830, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesCSR", 0, 3, 4, 1); __PYX_ERR(33, 831, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 830, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesCSR", 0, 3, 4, 2); __PYX_ERR(33, 831, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
@@ -122096,11 +129517,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_173setValuesCSR(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesCSR") < 0)) __PYX_ERR(33, 830, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesCSR") < 0)) __PYX_ERR(33, 831, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         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);
@@ -122115,7 +129537,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_173setValuesCSR(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesCSR", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 830, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setValuesCSR", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 831, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setValuesCSR", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -122134,16 +129556,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_172setValuesCSR(struct PyPetscMa
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setValuesCSR", 0);
 
-  /* "PETSc/Mat.pyx":831
+  /* "PETSc/Mat.pyx":832
  * 
  *     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_ERR(33, 831, __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 == ((int)-1))) __PYX_ERR(33, 832, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":830
+  /* "PETSc/Mat.pyx":831
  *         matsetvalues_ijv(self.mat, I, J, V, addv, rowmap, 0, 0)
  * 
  *     def setValuesCSR(self, I, J, V, addv=None):             # <<<<<<<<<<<<<<
@@ -122163,7 +129585,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_172setValuesCSR(struct PyPetscMa
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":833
+/* "PETSc/Mat.pyx":834
  *         matsetvalues_csr(self.mat, I, J, V, addv, 0, 0)
  * 
  *     def setValuesBlocked(self, rows, cols, values, addv=None):             # <<<<<<<<<<<<<<
@@ -122191,9 +129613,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_175setValuesBlocked(PyObject *__
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -122202,16 +129628,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_175setValuesBlocked(PyObject *__
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rows)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 833, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesBlocked", 0, 3, 4, 1); __PYX_ERR(33, 834, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 833, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesBlocked", 0, 3, 4, 2); __PYX_ERR(33, 834, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
@@ -122219,11 +129648,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_175setValuesBlocked(PyObject *__
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlocked") < 0)) __PYX_ERR(33, 833, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlocked") < 0)) __PYX_ERR(33, 834, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         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);
@@ -122238,7 +129668,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_175setValuesBlocked(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesBlocked", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 833, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setValuesBlocked", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 834, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setValuesBlocked", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -122257,16 +129687,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_174setValuesBlocked(struct PyPet
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setValuesBlocked", 0);
 
-  /* "PETSc/Mat.pyx":834
+  /* "PETSc/Mat.pyx":835
  * 
  *     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_ERR(33, 834, __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 == ((int)-1))) __PYX_ERR(33, 835, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":833
+  /* "PETSc/Mat.pyx":834
  *         matsetvalues_csr(self.mat, I, J, V, addv, 0, 0)
  * 
  *     def setValuesBlocked(self, rows, cols, values, addv=None):             # <<<<<<<<<<<<<<
@@ -122286,7 +129716,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_174setValuesBlocked(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":836
+/* "PETSc/Mat.pyx":837
  *         matsetvalues(self.mat, rows, cols, values, addv, 1, 0)
  * 
  *     def setValuesBlockedRCV(self, R, C, V, addv=None):             # <<<<<<<<<<<<<<
@@ -122314,9 +129744,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_177setValuesBlockedRCV(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -122325,16 +129759,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_177setValuesBlockedRCV(PyObject
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_R)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 836, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesBlockedRCV", 0, 3, 4, 1); __PYX_ERR(33, 837, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 836, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesBlockedRCV", 0, 3, 4, 2); __PYX_ERR(33, 837, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
@@ -122342,11 +129779,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_177setValuesBlockedRCV(PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedRCV") < 0)) __PYX_ERR(33, 836, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedRCV") < 0)) __PYX_ERR(33, 837, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         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);
@@ -122361,7 +129799,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_177setValuesBlockedRCV(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesBlockedRCV", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 836, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setValuesBlockedRCV", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 837, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setValuesBlockedRCV", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -122380,16 +129818,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_176setValuesBlockedRCV(struct Py
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setValuesBlockedRCV", 0);
 
-  /* "PETSc/Mat.pyx":837
+  /* "PETSc/Mat.pyx":838
  * 
  *     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_ERR(33, 837, __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 == ((int)-1))) __PYX_ERR(33, 838, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":836
+  /* "PETSc/Mat.pyx":837
  *         matsetvalues(self.mat, rows, cols, values, addv, 1, 0)
  * 
  *     def setValuesBlockedRCV(self, R, C, V, addv=None):             # <<<<<<<<<<<<<<
@@ -122409,7 +129847,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_176setValuesBlockedRCV(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":839
+/* "PETSc/Mat.pyx":840
  *         matsetvalues_rcv(self.mat, R, C, V, addv, 1, 0)
  * 
  *     def setValuesBlockedIJV(self, I, J, V, addv=None, rowmap=None):             # <<<<<<<<<<<<<<
@@ -122439,10 +129877,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_179setValuesBlockedIJV(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -122451,21 +129894,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_179setValuesBlockedIJV(PyObject
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_I)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 839, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesBlockedIJV", 0, 3, 5, 1); __PYX_ERR(33, 840, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 839, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesBlockedIJV", 0, 3, 5, 2); __PYX_ERR(33, 840, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
           if (value) { values[3] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  4:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rowmap);
@@ -122473,12 +129920,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_179setValuesBlockedIJV(PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedIJV") < 0)) __PYX_ERR(33, 839, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedIJV") < 0)) __PYX_ERR(33, 840, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         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);
@@ -122494,7 +129943,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_179setValuesBlockedIJV(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesBlockedIJV", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 839, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setValuesBlockedIJV", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 840, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setValuesBlockedIJV", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -122513,16 +129962,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_178setValuesBlockedIJV(struct Py
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setValuesBlockedIJV", 0);
 
-  /* "PETSc/Mat.pyx":840
+  /* "PETSc/Mat.pyx":841
  * 
  *     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_ERR(33, 840, __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 == ((int)-1))) __PYX_ERR(33, 841, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":839
+  /* "PETSc/Mat.pyx":840
  *         matsetvalues_rcv(self.mat, R, C, V, addv, 1, 0)
  * 
  *     def setValuesBlockedIJV(self, I, J, V, addv=None, rowmap=None):             # <<<<<<<<<<<<<<
@@ -122542,7 +129991,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_178setValuesBlockedIJV(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":842
+/* "PETSc/Mat.pyx":843
  *         matsetvalues_ijv(self.mat, I, J, V, addv, rowmap, 1, 0)
  * 
  *     def setValuesBlockedCSR(self, I, J, V, addv=None):             # <<<<<<<<<<<<<<
@@ -122570,9 +130019,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_181setValuesBlockedCSR(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -122581,16 +130034,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_181setValuesBlockedCSR(PyObject
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_I)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 842, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesBlockedCSR", 0, 3, 4, 1); __PYX_ERR(33, 843, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 842, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesBlockedCSR", 0, 3, 4, 2); __PYX_ERR(33, 843, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
@@ -122598,11 +130054,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_181setValuesBlockedCSR(PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedCSR") < 0)) __PYX_ERR(33, 842, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedCSR") < 0)) __PYX_ERR(33, 843, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         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);
@@ -122617,7 +130074,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_181setValuesBlockedCSR(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesBlockedCSR", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 842, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setValuesBlockedCSR", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 843, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.Mat.setValuesBlockedCSR", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -122636,16 +130093,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_180setValuesBlockedCSR(struct Py
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setValuesBlockedCSR", 0);
 
-  /* "PETSc/Mat.pyx":843
+  /* "PETSc/Mat.pyx":844
  * 
  *     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):
+ *     def setLGMap(self, LGMap rmap, 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_ERR(33, 843, __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 == ((int)-1))) __PYX_ERR(33, 844, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":842
+  /* "PETSc/Mat.pyx":843
  *         matsetvalues_ijv(self.mat, I, J, V, addv, rowmap, 1, 0)
  * 
  *     def setValuesBlockedCSR(self, I, J, V, addv=None):             # <<<<<<<<<<<<<<
@@ -122665,10 +130122,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_180setValuesBlockedCSR(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":845
+/* "PETSc/Mat.pyx":846
  *         matsetvalues_csr(self.mat, I, J, V, addv, 1, 0)
  * 
- *     def setLGMap(self, LGMap rmap not None, LGMap cmap=None):             # <<<<<<<<<<<<<<
+ *     def setLGMap(self, LGMap rmap, LGMap cmap=None):             # <<<<<<<<<<<<<<
  *         if cmap is None: cmap = rmap
  *         CHKERR( MatSetLocalToGlobalMapping(self.mat, rmap.lgm, cmap.lgm) )
  */
@@ -122691,7 +130148,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_183setLGMap(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -122700,6 +130159,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_183setLGMap(PyObject *__pyx_v_se
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rmap)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_cmap);
@@ -122707,11 +130167,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_183setLGMap(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLGMap") < 0)) __PYX_ERR(33, 845, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLGMap") < 0)) __PYX_ERR(33, 846, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -122722,14 +130183,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_183setLGMap(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_ERR(33, 845, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setLGMap", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 846, __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_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)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rmap), __pyx_ptype_8petsc4py_5PETSc_LGMap, 0, "rmap", 0))) __PYX_ERR(33, 846, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cmap), __pyx_ptype_8petsc4py_5PETSc_LGMap, 1, "cmap", 0))) __PYX_ERR(33, 846, __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 */
@@ -122750,9 +130211,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_182setLGMap(struct PyPetscMatObj
   __Pyx_RefNannySetupContext("setLGMap", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_cmap);
 
-  /* "PETSc/Mat.pyx":846
+  /* "PETSc/Mat.pyx":847
  * 
- *     def setLGMap(self, LGMap rmap not None, LGMap cmap=None):
+ *     def setLGMap(self, LGMap rmap, LGMap cmap=None):
  *         if cmap is None: cmap = rmap             # <<<<<<<<<<<<<<
  *         CHKERR( MatSetLocalToGlobalMapping(self.mat, rmap.lgm, cmap.lgm) )
  * 
@@ -122764,19 +130225,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_182setLGMap(struct PyPetscMatObj
     __Pyx_DECREF_SET(__pyx_v_cmap, __pyx_v_rmap);
   }
 
-  /* "PETSc/Mat.pyx":847
- *     def setLGMap(self, LGMap rmap not None, LGMap cmap=None):
+  /* "PETSc/Mat.pyx":848
+ *     def setLGMap(self, LGMap rmap, 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):
+ *     def getLGMap(self):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(33, 848, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":845
+  /* "PETSc/Mat.pyx":846
  *         matsetvalues_csr(self.mat, I, J, V, addv, 1, 0)
  * 
- *     def setLGMap(self, LGMap rmap not None, LGMap cmap=None):             # <<<<<<<<<<<<<<
+ *     def setLGMap(self, LGMap rmap, LGMap cmap=None):             # <<<<<<<<<<<<<<
  *         if cmap is None: cmap = rmap
  *         CHKERR( MatSetLocalToGlobalMapping(self.mat, rmap.lgm, cmap.lgm) )
  */
@@ -122794,18 +130255,144 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_182setLGMap(struct PyPetscMatObj
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":849
+/* "PETSc/Mat.pyx":850
  *         CHKERR( MatSetLocalToGlobalMapping(self.mat, rmap.lgm, cmap.lgm) )
  * 
+ *     def getLGMap(self):             # <<<<<<<<<<<<<<
+ *         cdef LGMap cmap = LGMap()
+ *         cdef LGMap rmap = LGMap()
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_185getLGMap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_184getLGMap[] = "Mat.getLGMap(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_185getLGMap(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_3Mat_184getLGMap(((struct PyPetscMatObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_184getLGMap(struct PyPetscMatObject *__pyx_v_self) {
+  struct PyPetscLGMapObject *__pyx_v_cmap = 0;
+  struct PyPetscLGMapObject *__pyx_v_rmap = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getLGMap", 0);
+
+  /* "PETSc/Mat.pyx":851
+ * 
+ *     def getLGMap(self):
+ *         cdef LGMap cmap = LGMap()             # <<<<<<<<<<<<<<
+ *         cdef LGMap rmap = LGMap()
+ *         CHKERR( MatGetLocalToGlobalMapping(self.mat, &rmap.lgm, &cmap.lgm) )
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_LGMap), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 851, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_cmap = ((struct PyPetscLGMapObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/Mat.pyx":852
+ *     def getLGMap(self):
+ *         cdef LGMap cmap = LGMap()
+ *         cdef LGMap rmap = LGMap()             # <<<<<<<<<<<<<<
+ *         CHKERR( MatGetLocalToGlobalMapping(self.mat, &rmap.lgm, &cmap.lgm) )
+ *         PetscINCREF(cmap.obj)
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_LGMap), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 852, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_rmap = ((struct PyPetscLGMapObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/Mat.pyx":853
+ *         cdef LGMap cmap = LGMap()
+ *         cdef LGMap rmap = LGMap()
+ *         CHKERR( MatGetLocalToGlobalMapping(self.mat, &rmap.lgm, &cmap.lgm) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(cmap.obj)
+ *         PetscINCREF(rmap.obj)
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetLocalToGlobalMapping(__pyx_v_self->mat, (&__pyx_v_rmap->lgm), (&__pyx_v_cmap->lgm))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(33, 853, __pyx_L1_error)
+
+  /* "PETSc/Mat.pyx":854
+ *         cdef LGMap rmap = LGMap()
+ *         CHKERR( MatGetLocalToGlobalMapping(self.mat, &rmap.lgm, &cmap.lgm) )
+ *         PetscINCREF(cmap.obj)             # <<<<<<<<<<<<<<
+ *         PetscINCREF(rmap.obj)
+ *         return (rmap, cmap)
+ */
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_cmap->__pyx_base.obj);
+
+  /* "PETSc/Mat.pyx":855
+ *         CHKERR( MatGetLocalToGlobalMapping(self.mat, &rmap.lgm, &cmap.lgm) )
+ *         PetscINCREF(cmap.obj)
+ *         PetscINCREF(rmap.obj)             # <<<<<<<<<<<<<<
+ *         return (rmap, cmap)
+ * 
+ */
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_rmap->__pyx_base.obj);
+
+  /* "PETSc/Mat.pyx":856
+ *         PetscINCREF(cmap.obj)
+ *         PetscINCREF(rmap.obj)
+ *         return (rmap, cmap)             # <<<<<<<<<<<<<<
+ * 
+ *     def setValueLocal(self, row, col, value, addv=None):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 856, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_INCREF(((PyObject *)__pyx_v_rmap));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_rmap));
+  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_rmap));
+  __Pyx_INCREF(((PyObject *)__pyx_v_cmap));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_cmap));
+  PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_cmap));
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/Mat.pyx":850
+ *         CHKERR( MatSetLocalToGlobalMapping(self.mat, rmap.lgm, cmap.lgm) )
+ * 
+ *     def getLGMap(self):             # <<<<<<<<<<<<<<
+ *         cdef LGMap cmap = LGMap()
+ *         cdef LGMap rmap = LGMap()
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.getLGMap", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_cmap);
+  __Pyx_XDECREF((PyObject *)__pyx_v_rmap);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Mat.pyx":858
+ *         return (rmap, cmap)
+ * 
  *     def setValueLocal(self, row, col, value, addv=None):             # <<<<<<<<<<<<<<
  *         cdef PetscInt    ival1 = asInt(row)
  *         cdef PetscInt    ival2 = asInt(col)
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_187setValueLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_186setValueLocal[] = "Mat.setValueLocal(self, row, col, value, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_187setValueLocal(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;
@@ -122822,9 +130409,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_185setValueLocal(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -122833,16 +130424,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_185setValueLocal(PyObject *__pyx
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_row)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 849, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValueLocal", 0, 3, 4, 1); __PYX_ERR(33, 858, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 849, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValueLocal", 0, 3, 4, 2); __PYX_ERR(33, 858, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
@@ -122850,11 +130444,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_185setValueLocal(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValueLocal") < 0)) __PYX_ERR(33, 849, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValueLocal") < 0)) __PYX_ERR(33, 858, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         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);
@@ -122869,20 +130464,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_185setValueLocal(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValueLocal", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 849, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setValueLocal", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 858, __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_184setValueLocal(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_row, __pyx_v_col, __pyx_v_value, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_186setValueLocal(((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_184setValueLocal(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_186setValueLocal(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;
@@ -122895,57 +130490,57 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_184setValueLocal(struct PyPetscM
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("setValueLocal", 0);
 
-  /* "PETSc/Mat.pyx":850
+  /* "PETSc/Mat.pyx":859
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(33, 850, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_row); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(33, 859, __pyx_L1_error)
   __pyx_v_ival1 = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":851
+  /* "PETSc/Mat.pyx":860
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(33, 851, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_col); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(33, 860, __pyx_L1_error)
   __pyx_v_ival2 = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":852
+  /* "PETSc/Mat.pyx":861
  *         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_ERR(33, 852, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_value); if (unlikely(__pyx_t_2 == ((PetscScalar)((PetscScalar)(-1.0))) && PyErr_Occurred())) __PYX_ERR(33, 861, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_2;
 
-  /* "PETSc/Mat.pyx":853
+  /* "PETSc/Mat.pyx":862
  *         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)-1L))) __PYX_ERR(33, 853, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_3 == ((InsertMode)((InsertMode)-1L)))) __PYX_ERR(33, 862, __pyx_L1_error)
   __pyx_v_caddv = __pyx_t_3;
 
-  /* "PETSc/Mat.pyx":854
+  /* "PETSc/Mat.pyx":863
  *         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_ERR(33, 854, __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 == ((int)-1))) __PYX_ERR(33, 863, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":849
- *         CHKERR( MatSetLocalToGlobalMapping(self.mat, rmap.lgm, cmap.lgm) )
+  /* "PETSc/Mat.pyx":858
+ *         return (rmap, cmap)
  * 
  *     def setValueLocal(self, row, col, value, addv=None):             # <<<<<<<<<<<<<<
  *         cdef PetscInt    ival1 = asInt(row)
@@ -122964,7 +130559,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_184setValueLocal(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":857
+/* "PETSc/Mat.pyx":866
  *                 self.mat, 1, &ival1, 1, &ival2, &sval, caddv) )
  * 
  *     def setValuesLocal(self, rows, cols, values, addv=None):             # <<<<<<<<<<<<<<
@@ -122973,9 +130568,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_184setValueLocal(struct PyPetscM
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_189setValuesLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_188setValuesLocal[] = "Mat.setValuesLocal(self, rows, cols, values, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_189setValuesLocal(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;
@@ -122992,9 +130587,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_187setValuesLocal(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -123003,16 +130602,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_187setValuesLocal(PyObject *__py
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rows)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 857, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesLocal", 0, 3, 4, 1); __PYX_ERR(33, 866, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 857, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesLocal", 0, 3, 4, 2); __PYX_ERR(33, 866, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
@@ -123020,11 +130622,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_187setValuesLocal(PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesLocal") < 0)) __PYX_ERR(33, 857, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesLocal") < 0)) __PYX_ERR(33, 866, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         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);
@@ -123039,35 +130642,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_187setValuesLocal(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesLocal", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 857, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setValuesLocal", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 866, __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_186setValuesLocal(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_rows, __pyx_v_cols, __pyx_v_values, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_188setValuesLocal(((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_186setValuesLocal(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_188setValuesLocal(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;
   __Pyx_RefNannySetupContext("setValuesLocal", 0);
 
-  /* "PETSc/Mat.pyx":858
+  /* "PETSc/Mat.pyx":867
  * 
  *     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_ERR(33, 858, __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 == ((int)-1))) __PYX_ERR(33, 867, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":857
+  /* "PETSc/Mat.pyx":866
  *                 self.mat, 1, &ival1, 1, &ival2, &sval, caddv) )
  * 
  *     def setValuesLocal(self, rows, cols, values, addv=None):             # <<<<<<<<<<<<<<
@@ -123087,7 +130690,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_186setValuesLocal(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":860
+/* "PETSc/Mat.pyx":869
  *         matsetvalues(self.mat, rows, cols, values, addv, 0, 1)
  * 
  *     def setValuesLocalRCV(self, R, C, V, addv=None):             # <<<<<<<<<<<<<<
@@ -123096,9 +130699,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_186setValuesLocal(struct PyPetsc
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_191setValuesLocalRCV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_190setValuesLocalRCV[] = "Mat.setValuesLocalRCV(self, R, C, V, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_191setValuesLocalRCV(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;
@@ -123115,9 +130718,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_189setValuesLocalRCV(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -123126,16 +130733,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_189setValuesLocalRCV(PyObject *_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_R)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 860, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesLocalRCV", 0, 3, 4, 1); __PYX_ERR(33, 869, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 860, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesLocalRCV", 0, 3, 4, 2); __PYX_ERR(33, 869, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
@@ -123143,11 +130753,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_189setValuesLocalRCV(PyObject *_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesLocalRCV") < 0)) __PYX_ERR(33, 860, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesLocalRCV") < 0)) __PYX_ERR(33, 869, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         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);
@@ -123162,35 +130773,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_189setValuesLocalRCV(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesLocalRCV", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 860, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setValuesLocalRCV", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 869, __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_188setValuesLocalRCV(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_R, __pyx_v_C, __pyx_v_V, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_190setValuesLocalRCV(((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_188setValuesLocalRCV(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_190setValuesLocalRCV(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;
   __Pyx_RefNannySetupContext("setValuesLocalRCV", 0);
 
-  /* "PETSc/Mat.pyx":861
+  /* "PETSc/Mat.pyx":870
  * 
  *     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_ERR(33, 861, __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 == ((int)-1))) __PYX_ERR(33, 870, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":860
+  /* "PETSc/Mat.pyx":869
  *         matsetvalues(self.mat, rows, cols, values, addv, 0, 1)
  * 
  *     def setValuesLocalRCV(self, R, C, V, addv=None):             # <<<<<<<<<<<<<<
@@ -123210,7 +130821,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_188setValuesLocalRCV(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":863
+/* "PETSc/Mat.pyx":872
  *         matsetvalues_rcv(self.mat, R, C, V, addv, 0, 1)
  * 
  *     def setValuesLocalIJV(self, I, J, V, addv=None, rowmap=None):             # <<<<<<<<<<<<<<
@@ -123219,9 +130830,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_188setValuesLocalRCV(struct PyPe
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_193setValuesLocalIJV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_192setValuesLocalIJV[] = "Mat.setValuesLocalIJV(self, I, J, V, addv=None, rowmap=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_193setValuesLocalIJV(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;
@@ -123240,10 +130851,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_191setValuesLocalIJV(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -123252,21 +130868,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_191setValuesLocalIJV(PyObject *_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_I)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 863, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesLocalIJV", 0, 3, 5, 1); __PYX_ERR(33, 872, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 863, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesLocalIJV", 0, 3, 5, 2); __PYX_ERR(33, 872, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
           if (value) { values[3] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  4:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rowmap);
@@ -123274,12 +130894,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_191setValuesLocalIJV(PyObject *_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesLocalIJV") < 0)) __PYX_ERR(33, 863, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesLocalIJV") < 0)) __PYX_ERR(33, 872, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         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);
@@ -123295,35 +130917,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_191setValuesLocalIJV(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesLocalIJV", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 863, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setValuesLocalIJV", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 872, __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_190setValuesLocalIJV(((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_192setValuesLocalIJV(((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_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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_192setValuesLocalIJV(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;
   __Pyx_RefNannySetupContext("setValuesLocalIJV", 0);
 
-  /* "PETSc/Mat.pyx":864
+  /* "PETSc/Mat.pyx":873
  * 
  *     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_ERR(33, 864, __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 == ((int)-1))) __PYX_ERR(33, 873, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":863
+  /* "PETSc/Mat.pyx":872
  *         matsetvalues_rcv(self.mat, R, C, V, addv, 0, 1)
  * 
  *     def setValuesLocalIJV(self, I, J, V, addv=None, rowmap=None):             # <<<<<<<<<<<<<<
@@ -123343,7 +130965,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_190setValuesLocalIJV(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":866
+/* "PETSc/Mat.pyx":875
  *         matsetvalues_ijv(self.mat, I, J, V, addv, rowmap, 0, 1)
  * 
  *     def setValuesLocalCSR(self, I, J, V, addv=None):             # <<<<<<<<<<<<<<
@@ -123352,9 +130974,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_190setValuesLocalIJV(struct PyPe
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_195setValuesLocalCSR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_194setValuesLocalCSR[] = "Mat.setValuesLocalCSR(self, I, J, V, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_195setValuesLocalCSR(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;
@@ -123371,9 +130993,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_193setValuesLocalCSR(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -123382,16 +131008,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_193setValuesLocalCSR(PyObject *_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_I)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 866, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesLocalCSR", 0, 3, 4, 1); __PYX_ERR(33, 875, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 866, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesLocalCSR", 0, 3, 4, 2); __PYX_ERR(33, 875, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
@@ -123399,11 +131028,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_193setValuesLocalCSR(PyObject *_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesLocalCSR") < 0)) __PYX_ERR(33, 866, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesLocalCSR") < 0)) __PYX_ERR(33, 875, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         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);
@@ -123418,35 +131048,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_193setValuesLocalCSR(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesLocalCSR", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 866, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setValuesLocalCSR", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 875, __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_192setValuesLocalCSR(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_194setValuesLocalCSR(((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_192setValuesLocalCSR(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_194setValuesLocalCSR(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;
   __Pyx_RefNannySetupContext("setValuesLocalCSR", 0);
 
-  /* "PETSc/Mat.pyx":867
+  /* "PETSc/Mat.pyx":876
  * 
  *     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_ERR(33, 867, __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 == ((int)-1))) __PYX_ERR(33, 876, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":866
+  /* "PETSc/Mat.pyx":875
  *         matsetvalues_ijv(self.mat, I, J, V, addv, rowmap, 0, 1)
  * 
  *     def setValuesLocalCSR(self, I, J, V, addv=None):             # <<<<<<<<<<<<<<
@@ -123466,7 +131096,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_192setValuesLocalCSR(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":869
+/* "PETSc/Mat.pyx":878
  *         matsetvalues_csr(self.mat, I, J, V, addv, 0, 1)
  * 
  *     def setValuesBlockedLocal(self, rows, cols, values, addv=None):             # <<<<<<<<<<<<<<
@@ -123475,9 +131105,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_192setValuesLocalCSR(struct PyPe
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_197setValuesBlockedLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_196setValuesBlockedLocal[] = "Mat.setValuesBlockedLocal(self, rows, cols, values, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_197setValuesBlockedLocal(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;
@@ -123494,9 +131124,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_195setValuesBlockedLocal(PyObjec
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -123505,16 +131139,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_195setValuesBlockedLocal(PyObjec
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rows)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 869, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocal", 0, 3, 4, 1); __PYX_ERR(33, 878, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 869, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocal", 0, 3, 4, 2); __PYX_ERR(33, 878, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
@@ -123522,11 +131159,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_195setValuesBlockedLocal(PyObjec
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedLocal") < 0)) __PYX_ERR(33, 869, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedLocal") < 0)) __PYX_ERR(33, 878, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         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);
@@ -123541,35 +131179,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_195setValuesBlockedLocal(PyObjec
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocal", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 869, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocal", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 878, __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_194setValuesBlockedLocal(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_rows, __pyx_v_cols, __pyx_v_values, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_196setValuesBlockedLocal(((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_194setValuesBlockedLocal(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_196setValuesBlockedLocal(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;
   __Pyx_RefNannySetupContext("setValuesBlockedLocal", 0);
 
-  /* "PETSc/Mat.pyx":870
+  /* "PETSc/Mat.pyx":879
  * 
  *     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_ERR(33, 870, __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 == ((int)-1))) __PYX_ERR(33, 879, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":869
+  /* "PETSc/Mat.pyx":878
  *         matsetvalues_csr(self.mat, I, J, V, addv, 0, 1)
  * 
  *     def setValuesBlockedLocal(self, rows, cols, values, addv=None):             # <<<<<<<<<<<<<<
@@ -123589,7 +131227,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_194setValuesBlockedLocal(struct
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":872
+/* "PETSc/Mat.pyx":881
  *         matsetvalues(self.mat, rows, cols, values, addv, 1, 1)
  * 
  *     def setValuesBlockedLocalRCV(self, R, C, V, addv=None):             # <<<<<<<<<<<<<<
@@ -123598,9 +131236,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_194setValuesBlockedLocal(struct
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_199setValuesBlockedLocalRCV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_198setValuesBlockedLocalRCV[] = "Mat.setValuesBlockedLocalRCV(self, R, C, V, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_199setValuesBlockedLocalRCV(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;
@@ -123617,9 +131255,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_197setValuesBlockedLocalRCV(PyOb
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -123628,16 +131270,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_197setValuesBlockedLocalRCV(PyOb
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_R)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 872, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocalRCV", 0, 3, 4, 1); __PYX_ERR(33, 881, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 872, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocalRCV", 0, 3, 4, 2); __PYX_ERR(33, 881, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
@@ -123645,11 +131290,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_197setValuesBlockedLocalRCV(PyOb
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedLocalRCV") < 0)) __PYX_ERR(33, 872, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedLocalRCV") < 0)) __PYX_ERR(33, 881, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         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);
@@ -123664,35 +131310,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_197setValuesBlockedLocalRCV(PyOb
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocalRCV", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 872, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocalRCV", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 881, __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_196setValuesBlockedLocalRCV(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_R, __pyx_v_C, __pyx_v_V, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_198setValuesBlockedLocalRCV(((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_196setValuesBlockedLocalRCV(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_198setValuesBlockedLocalRCV(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;
   __Pyx_RefNannySetupContext("setValuesBlockedLocalRCV", 0);
 
-  /* "PETSc/Mat.pyx":873
+  /* "PETSc/Mat.pyx":882
  * 
  *     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_ERR(33, 873, __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 == ((int)-1))) __PYX_ERR(33, 882, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":872
+  /* "PETSc/Mat.pyx":881
  *         matsetvalues(self.mat, rows, cols, values, addv, 1, 1)
  * 
  *     def setValuesBlockedLocalRCV(self, R, C, V, addv=None):             # <<<<<<<<<<<<<<
@@ -123712,7 +131358,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_196setValuesBlockedLocalRCV(stru
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":875
+/* "PETSc/Mat.pyx":884
  *         matsetvalues_rcv(self.mat, R, C, V, addv, 1, 1)
  * 
  *     def setValuesBlockedLocalIJV(self, I, J, V, addv=None, rowmap=None):             # <<<<<<<<<<<<<<
@@ -123721,9 +131367,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_196setValuesBlockedLocalRCV(stru
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_201setValuesBlockedLocalIJV(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_200setValuesBlockedLocalIJV[] = "Mat.setValuesBlockedLocalIJV(self, I, J, V, addv=None, rowmap=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_201setValuesBlockedLocalIJV(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;
@@ -123742,10 +131388,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_199setValuesBlockedLocalIJV(PyOb
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -123754,21 +131405,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_199setValuesBlockedLocalIJV(PyOb
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_I)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 875, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocalIJV", 0, 3, 5, 1); __PYX_ERR(33, 884, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 875, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocalIJV", 0, 3, 5, 2); __PYX_ERR(33, 884, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
           if (value) { values[3] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  4:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rowmap);
@@ -123776,12 +131431,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_199setValuesBlockedLocalIJV(PyOb
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedLocalIJV") < 0)) __PYX_ERR(33, 875, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedLocalIJV") < 0)) __PYX_ERR(33, 884, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         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);
@@ -123797,35 +131454,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_199setValuesBlockedLocalIJV(PyOb
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocalIJV", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 875, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocalIJV", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 884, __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_198setValuesBlockedLocalIJV(((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_200setValuesBlockedLocalIJV(((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_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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_200setValuesBlockedLocalIJV(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;
   __Pyx_RefNannySetupContext("setValuesBlockedLocalIJV", 0);
 
-  /* "PETSc/Mat.pyx":876
+  /* "PETSc/Mat.pyx":885
  * 
  *     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_ERR(33, 876, __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 == ((int)-1))) __PYX_ERR(33, 885, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":875
+  /* "PETSc/Mat.pyx":884
  *         matsetvalues_rcv(self.mat, R, C, V, addv, 1, 1)
  * 
  *     def setValuesBlockedLocalIJV(self, I, J, V, addv=None, rowmap=None):             # <<<<<<<<<<<<<<
@@ -123845,7 +131502,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_198setValuesBlockedLocalIJV(stru
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":878
+/* "PETSc/Mat.pyx":887
  *         matsetvalues_ijv(self.mat, I, J, V, addv, rowmap, 1, 1)
  * 
  *     def setValuesBlockedLocalCSR(self, I, J, V, addv=None):             # <<<<<<<<<<<<<<
@@ -123854,9 +131511,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_198setValuesBlockedLocalIJV(stru
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_203setValuesBlockedLocalCSR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_202setValuesBlockedLocalCSR[] = "Mat.setValuesBlockedLocalCSR(self, I, J, V, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_203setValuesBlockedLocalCSR(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;
@@ -123873,9 +131530,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_201setValuesBlockedLocalCSR(PyOb
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -123884,16 +131545,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_201setValuesBlockedLocalCSR(PyOb
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_I)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 878, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocalCSR", 0, 3, 4, 1); __PYX_ERR(33, 887, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 878, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocalCSR", 0, 3, 4, 2); __PYX_ERR(33, 887, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
@@ -123901,11 +131565,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_201setValuesBlockedLocalCSR(PyOb
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedLocalCSR") < 0)) __PYX_ERR(33, 878, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValuesBlockedLocalCSR") < 0)) __PYX_ERR(33, 887, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         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);
@@ -123920,35 +131585,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_201setValuesBlockedLocalCSR(PyOb
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocalCSR", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 878, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setValuesBlockedLocalCSR", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 887, __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_200setValuesBlockedLocalCSR(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_I, __pyx_v_J, __pyx_v_V, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_202setValuesBlockedLocalCSR(((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_200setValuesBlockedLocalCSR(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_202setValuesBlockedLocalCSR(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;
   __Pyx_RefNannySetupContext("setValuesBlockedLocalCSR", 0);
 
-  /* "PETSc/Mat.pyx":879
+  /* "PETSc/Mat.pyx":888
  * 
  *     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_ERR(33, 879, __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 == ((int)-1))) __PYX_ERR(33, 888, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":878
+  /* "PETSc/Mat.pyx":887
  *         matsetvalues_ijv(self.mat, I, J, V, addv, rowmap, 1, 1)
  * 
  *     def setValuesBlockedLocalCSR(self, I, J, V, addv=None):             # <<<<<<<<<<<<<<
@@ -123968,7 +131633,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_200setValuesBlockedLocalCSR(stru
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":885
+/* "PETSc/Mat.pyx":894
  *     Stencil = _Mat_Stencil
  * 
  *     def setStencil(self, dims, starts=None, dof=1):             # <<<<<<<<<<<<<<
@@ -123977,9 +131642,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_200setValuesBlockedLocalCSR(stru
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_205setStencil(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_204setStencil[] = "Mat.setStencil(self, dims, starts=None, dof=1)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_205setStencil(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;
@@ -123996,8 +131661,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_203setStencil(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -124006,11 +131674,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_203setStencil(PyObject *__pyx_v_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_dims)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_starts);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_dof);
@@ -124018,12 +131688,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_203setStencil(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setStencil") < 0)) __PYX_ERR(33, 885, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setStencil") < 0)) __PYX_ERR(33, 894, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -124035,20 +131707,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_203setStencil(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_ERR(33, 885, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setStencil", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 894, __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_202setStencil(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_dims, __pyx_v_starts, __pyx_v_dof);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_204setStencil(((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_202setStencil(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_dims, PyObject *__pyx_v_starts, PyObject *__pyx_v_dof) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_204setStencil(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];
@@ -124061,7 +131733,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_202setStencil(struct PyPetscMatO
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("setStencil", 0);
 
-  /* "PETSc/Mat.pyx":888
+  /* "PETSc/Mat.pyx":897
  *         cdef PetscInt ndim, ndof
  *         cdef PetscInt cdims[3], cstarts[3]
  *         cdims[0] = cdims[1] = cdims[2] = 1             # <<<<<<<<<<<<<<
@@ -124072,7 +131744,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_202setStencil(struct PyPetscMatO
   (__pyx_v_cdims[1]) = 1;
   (__pyx_v_cdims[2]) = 1;
 
-  /* "PETSc/Mat.pyx":889
+  /* "PETSc/Mat.pyx":898
  *         cdef PetscInt cdims[3], cstarts[3]
  *         cdims[0] = cdims[1] = cdims[2] = 1
  *         cstarts[0] = cstarts[1] = cstarts[2] = 0             # <<<<<<<<<<<<<<
@@ -124083,27 +131755,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_202setStencil(struct PyPetscMatO
   (__pyx_v_cstarts[1]) = 0;
   (__pyx_v_cstarts[2]) = 0;
 
-  /* "PETSc/Mat.pyx":890
+  /* "PETSc/Mat.pyx":899
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(33, 890, __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 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(33, 899, __pyx_L1_error)
   __pyx_v_ndim = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":891
+  /* "PETSc/Mat.pyx":900
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(33, 891, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_dof); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(33, 900, __pyx_L1_error)
   __pyx_v_ndof = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":892
+  /* "PETSc/Mat.pyx":901
  *         ndim = asDims(dims, &cdims[0], &cdims[1], &cdims[2])
  *         ndof = asInt(dof)
  *         if starts is not None:             # <<<<<<<<<<<<<<
@@ -124114,16 +131786,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_202setStencil(struct PyPetscMatO
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Mat.pyx":893
+    /* "PETSc/Mat.pyx":902
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(33, 893, __pyx_L1_error)
+    __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 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(33, 902, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":892
+    /* "PETSc/Mat.pyx":901
  *         ndim = asDims(dims, &cdims[0], &cdims[1], &cdims[2])
  *         ndof = asInt(dof)
  *         if starts is not None:             # <<<<<<<<<<<<<<
@@ -124132,16 +131804,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_202setStencil(struct PyPetscMatO
  */
   }
 
-  /* "PETSc/Mat.pyx":894
+  /* "PETSc/Mat.pyx":903
  *         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_ERR(33, 894, __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 == ((int)-1))) __PYX_ERR(33, 903, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":885
+  /* "PETSc/Mat.pyx":894
  *     Stencil = _Mat_Stencil
  * 
  *     def setStencil(self, dims, starts=None, dof=1):             # <<<<<<<<<<<<<<
@@ -124161,7 +131833,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_202setStencil(struct PyPetscMatO
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":896
+/* "PETSc/Mat.pyx":905
  *         CHKERR( MatSetStencil(self.mat, ndim, cdims, cstarts, ndof) )
  * 
  *     def setValueStencil(self, row, col, value, addv=None):             # <<<<<<<<<<<<<<
@@ -124170,9 +131842,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_202setStencil(struct PyPetscMatO
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_207setValueStencil(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_206setValueStencil[] = "Mat.setValueStencil(self, row, col, value, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_207setValueStencil(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;
@@ -124189,9 +131861,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_205setValueStencil(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -124200,16 +131876,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_205setValueStencil(PyObject *__p
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_row)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 896, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValueStencil", 0, 3, 4, 1); __PYX_ERR(33, 905, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 896, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValueStencil", 0, 3, 4, 2); __PYX_ERR(33, 905, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
@@ -124217,11 +131896,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_205setValueStencil(PyObject *__p
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValueStencil") < 0)) __PYX_ERR(33, 896, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValueStencil") < 0)) __PYX_ERR(33, 905, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         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);
@@ -124236,20 +131916,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_205setValueStencil(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValueStencil", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 896, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setValueStencil", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 905, __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_204setValueStencil(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_row, __pyx_v_col, __pyx_v_value, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_206setValueStencil(((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_204setValueStencil(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_206setValueStencil(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;
@@ -124259,46 +131939,46 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_204setValueStencil(struct PyPets
   InsertMode __pyx_t_2;
   __Pyx_RefNannySetupContext("setValueStencil", 0);
 
-  /* "PETSc/Mat.pyx":897
+  /* "PETSc/Mat.pyx":906
  * 
  *     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_ERR(33, 897, __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, 906, __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_ERR(33, 897, __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, 906, __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":898
+  /* "PETSc/Mat.pyx":907
  *     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)-1L))) __PYX_ERR(33, 898, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_2 == ((InsertMode)((InsertMode)-1L)))) __PYX_ERR(33, 907, __pyx_L1_error)
   __pyx_v_im = __pyx_t_2;
 
-  /* "PETSc/Mat.pyx":899
+  /* "PETSc/Mat.pyx":908
  *         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_ERR(33, 899, __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, 908, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":896
+  /* "PETSc/Mat.pyx":905
  *         CHKERR( MatSetStencil(self.mat, ndim, cdims, cstarts, ndof) )
  * 
  *     def setValueStencil(self, row, col, value, addv=None):             # <<<<<<<<<<<<<<
@@ -124321,7 +132001,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_204setValueStencil(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":901
+/* "PETSc/Mat.pyx":910
  *         matsetvaluestencil(self.mat, r, c, value, im, 0)
  * 
  *     def setValueBlockedStencil(self, row, col, value, addv=None):             # <<<<<<<<<<<<<<
@@ -124330,9 +132010,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_204setValueStencil(struct PyPets
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_209setValueBlockedStencil(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_208setValueBlockedStencil[] = "Mat.setValueBlockedStencil(self, row, col, value, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_209setValueBlockedStencil(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;
@@ -124349,9 +132029,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_207setValueBlockedStencil(PyObje
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -124360,16 +132044,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_207setValueBlockedStencil(PyObje
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_row)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 901, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValueBlockedStencil", 0, 3, 4, 1); __PYX_ERR(33, 910, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 901, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setValueBlockedStencil", 0, 3, 4, 2); __PYX_ERR(33, 910, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
@@ -124377,11 +132064,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_207setValueBlockedStencil(PyObje
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValueBlockedStencil") < 0)) __PYX_ERR(33, 901, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setValueBlockedStencil") < 0)) __PYX_ERR(33, 910, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         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);
@@ -124396,20 +132084,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_207setValueBlockedStencil(PyObje
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setValueBlockedStencil", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 901, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setValueBlockedStencil", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 910, __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_206setValueBlockedStencil(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_row, __pyx_v_col, __pyx_v_value, __pyx_v_addv);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_208setValueBlockedStencil(((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_206setValueBlockedStencil(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_208setValueBlockedStencil(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;
@@ -124419,46 +132107,46 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_206setValueBlockedStencil(struct
   InsertMode __pyx_t_2;
   __Pyx_RefNannySetupContext("setValueBlockedStencil", 0);
 
-  /* "PETSc/Mat.pyx":902
+  /* "PETSc/Mat.pyx":911
  * 
  *     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_ERR(33, 902, __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, 911, __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_ERR(33, 902, __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, 911, __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":903
+  /* "PETSc/Mat.pyx":912
  *     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)-1L))) __PYX_ERR(33, 903, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_2 == ((InsertMode)((InsertMode)-1L)))) __PYX_ERR(33, 912, __pyx_L1_error)
   __pyx_v_im = __pyx_t_2;
 
-  /* "PETSc/Mat.pyx":904
+  /* "PETSc/Mat.pyx":913
  *         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_ERR(33, 904, __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, 913, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":901
+  /* "PETSc/Mat.pyx":910
  *         matsetvaluestencil(self.mat, r, c, value, im, 0)
  * 
  *     def setValueBlockedStencil(self, row, col, value, addv=None):             # <<<<<<<<<<<<<<
@@ -124481,7 +132169,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_206setValueBlockedStencil(struct
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":908
+/* "PETSc/Mat.pyx":917
  *     #
  * 
  *     def zeroRows(self, rows, diag=1, Vec x=None, Vec b=None):             # <<<<<<<<<<<<<<
@@ -124490,9 +132178,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_206setValueBlockedStencil(struct
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_211zeroRows(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_210zeroRows[] = "Mat.zeroRows(self, rows, diag=1, Vec x=None, Vec b=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_211zeroRows(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;
@@ -124511,9 +132199,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_209zeroRows(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -124522,16 +132214,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_209zeroRows(PyObject *__pyx_v_se
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rows)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_diag);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_b);
@@ -124539,13 +132234,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_209zeroRows(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "zeroRows") < 0)) __PYX_ERR(33, 908, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "zeroRows") < 0)) __PYX_ERR(33, 917, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -124558,15 +132256,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_209zeroRows(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_ERR(33, 908, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("zeroRows", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 917, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "x", 0))) __PYX_ERR(33, 917, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "b", 0))) __PYX_ERR(33, 917, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_210zeroRows(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_rows, __pyx_v_diag, __pyx_v_x, __pyx_v_b);
 
   /* function exit code */
   goto __pyx_L0;
@@ -124577,7 +132275,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_209zeroRows(PyObject *__pyx_v_se
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_210zeroRows(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;
@@ -124594,7 +132292,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_208zeroRows(struct PyPetscMatObj
   __Pyx_RefNannySetupContext("zeroRows", 0);
   __Pyx_INCREF(__pyx_v_rows);
 
-  /* "PETSc/Mat.pyx":909
+  /* "PETSc/Mat.pyx":918
  * 
  *     def zeroRows(self, rows, diag=1, Vec x=None, Vec b=None):
  *         cdef PetscInt ni=0, *i=NULL             # <<<<<<<<<<<<<<
@@ -124604,17 +132302,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_208zeroRows(struct PyPetscMatObj
   __pyx_v_ni = 0;
   __pyx_v_i = NULL;
 
-  /* "PETSc/Mat.pyx":910
+  /* "PETSc/Mat.pyx":919
  *     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_ERR(33, 910, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_diag); if (unlikely(__pyx_t_1 == ((PetscScalar)((PetscScalar)(-1.0))) && PyErr_Occurred())) __PYX_ERR(33, 919, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":911
+  /* "PETSc/Mat.pyx":920
  *         cdef PetscInt ni=0, *i=NULL
  *         cdef PetscScalar sval = asScalar(diag)
  *         cdef PetscVec xvec=NULL, bvec=NULL             # <<<<<<<<<<<<<<
@@ -124624,7 +132322,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_208zeroRows(struct PyPetscMatObj
   __pyx_v_xvec = NULL;
   __pyx_v_bvec = NULL;
 
-  /* "PETSc/Mat.pyx":912
+  /* "PETSc/Mat.pyx":921
  *         cdef PetscScalar sval = asScalar(diag)
  *         cdef PetscVec xvec=NULL, bvec=NULL
  *         if x is not None: xvec = x.vec             # <<<<<<<<<<<<<<
@@ -124638,7 +132336,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_208zeroRows(struct PyPetscMatObj
     __pyx_v_xvec = __pyx_t_4;
   }
 
-  /* "PETSc/Mat.pyx":913
+  /* "PETSc/Mat.pyx":922
  *         cdef PetscVec xvec=NULL, bvec=NULL
  *         if x is not None: xvec = x.vec
  *         if b is not None: bvec = b.vec             # <<<<<<<<<<<<<<
@@ -124652,7 +132350,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_208zeroRows(struct PyPetscMatObj
     __pyx_v_bvec = __pyx_t_4;
   }
 
-  /* "PETSc/Mat.pyx":914
+  /* "PETSc/Mat.pyx":923
  *         if x is not None: xvec = x.vec
  *         if b is not None: bvec = b.vec
  *         if isinstance(rows, IS):             # <<<<<<<<<<<<<<
@@ -124663,16 +132361,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_208zeroRows(struct PyPetscMatObj
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Mat.pyx":915
+    /* "PETSc/Mat.pyx":924
  *         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_ERR(33, 915, __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 == ((int)-1))) __PYX_ERR(33, 924, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":914
+    /* "PETSc/Mat.pyx":923
  *         if x is not None: xvec = x.vec
  *         if b is not None: bvec = b.vec
  *         if isinstance(rows, IS):             # <<<<<<<<<<<<<<
@@ -124682,7 +132380,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_208zeroRows(struct PyPetscMatObj
     goto __pyx_L5;
   }
 
-  /* "PETSc/Mat.pyx":917
+  /* "PETSc/Mat.pyx":926
  *             CHKERR( MatZeroRowsIS(self.mat, (<IS>rows).iset, sval, xvec, bvec) )
  *         else:
  *             rows = iarray_i(rows, &ni, &i)             # <<<<<<<<<<<<<<
@@ -124690,23 +132388,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_208zeroRows(struct PyPetscMatObj
  * 
  */
   /*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_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, 926, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF_SET(__pyx_v_rows, __pyx_t_6);
     __pyx_t_6 = 0;
 
-    /* "PETSc/Mat.pyx":918
+    /* "PETSc/Mat.pyx":927
  *         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_ERR(33, 918, __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 == ((int)-1))) __PYX_ERR(33, 927, __pyx_L1_error)
   }
   __pyx_L5:;
 
-  /* "PETSc/Mat.pyx":908
+  /* "PETSc/Mat.pyx":917
  *     #
  * 
  *     def zeroRows(self, rows, diag=1, Vec x=None, Vec b=None):             # <<<<<<<<<<<<<<
@@ -124728,7 +132426,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_208zeroRows(struct PyPetscMatObj
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":920
+/* "PETSc/Mat.pyx":929
  *             CHKERR( MatZeroRows(self.mat, ni, i, sval, xvec, bvec) )
  * 
  *     def zeroRowsLocal(self, rows, diag=1, Vec x=None, Vec b=None):             # <<<<<<<<<<<<<<
@@ -124737,9 +132435,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_208zeroRows(struct PyPetscMatObj
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_213zeroRowsLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_212zeroRowsLocal[] = "Mat.zeroRowsLocal(self, rows, diag=1, Vec x=None, Vec b=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_213zeroRowsLocal(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;
@@ -124758,9 +132456,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_211zeroRowsLocal(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -124769,16 +132471,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_211zeroRowsLocal(PyObject *__pyx
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rows)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_diag);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_b);
@@ -124786,13 +132491,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_211zeroRowsLocal(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "zeroRowsLocal") < 0)) __PYX_ERR(33, 920, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "zeroRowsLocal") < 0)) __PYX_ERR(33, 929, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -124805,15 +132513,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_211zeroRowsLocal(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("zeroRowsLocal", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 920, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("zeroRowsLocal", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 929, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "x", 0))) __PYX_ERR(33, 929, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "b", 0))) __PYX_ERR(33, 929, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_212zeroRowsLocal(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_rows, __pyx_v_diag, __pyx_v_x, __pyx_v_b);
 
   /* function exit code */
   goto __pyx_L0;
@@ -124824,7 +132532,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_211zeroRowsLocal(PyObject *__pyx
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_212zeroRowsLocal(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;
@@ -124841,7 +132549,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_210zeroRowsLocal(struct PyPetscM
   __Pyx_RefNannySetupContext("zeroRowsLocal", 0);
   __Pyx_INCREF(__pyx_v_rows);
 
-  /* "PETSc/Mat.pyx":921
+  /* "PETSc/Mat.pyx":930
  * 
  *     def zeroRowsLocal(self, rows, diag=1, Vec x=None, Vec b=None):
  *         cdef PetscInt ni=0, *i=NULL             # <<<<<<<<<<<<<<
@@ -124851,17 +132559,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_210zeroRowsLocal(struct PyPetscM
   __pyx_v_ni = 0;
   __pyx_v_i = NULL;
 
-  /* "PETSc/Mat.pyx":922
+  /* "PETSc/Mat.pyx":931
  *     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_ERR(33, 922, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_diag); if (unlikely(__pyx_t_1 == ((PetscScalar)((PetscScalar)(-1.0))) && PyErr_Occurred())) __PYX_ERR(33, 931, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":923
+  /* "PETSc/Mat.pyx":932
  *         cdef PetscInt ni=0, *i=NULL
  *         cdef PetscScalar sval = asScalar(diag)
  *         cdef PetscVec xvec=NULL, bvec=NULL             # <<<<<<<<<<<<<<
@@ -124871,7 +132579,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_210zeroRowsLocal(struct PyPetscM
   __pyx_v_xvec = NULL;
   __pyx_v_bvec = NULL;
 
-  /* "PETSc/Mat.pyx":924
+  /* "PETSc/Mat.pyx":933
  *         cdef PetscScalar sval = asScalar(diag)
  *         cdef PetscVec xvec=NULL, bvec=NULL
  *         if x is not None: xvec = x.vec             # <<<<<<<<<<<<<<
@@ -124885,7 +132593,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_210zeroRowsLocal(struct PyPetscM
     __pyx_v_xvec = __pyx_t_4;
   }
 
-  /* "PETSc/Mat.pyx":925
+  /* "PETSc/Mat.pyx":934
  *         cdef PetscVec xvec=NULL, bvec=NULL
  *         if x is not None: xvec = x.vec
  *         if b is not None: bvec = b.vec             # <<<<<<<<<<<<<<
@@ -124899,7 +132607,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_210zeroRowsLocal(struct PyPetscM
     __pyx_v_bvec = __pyx_t_4;
   }
 
-  /* "PETSc/Mat.pyx":926
+  /* "PETSc/Mat.pyx":935
  *         if x is not None: xvec = x.vec
  *         if b is not None: bvec = b.vec
  *         if isinstance(rows, IS):             # <<<<<<<<<<<<<<
@@ -124910,16 +132618,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_210zeroRowsLocal(struct PyPetscM
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Mat.pyx":927
+    /* "PETSc/Mat.pyx":936
  *         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_ERR(33, 927, __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 == ((int)-1))) __PYX_ERR(33, 936, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":926
+    /* "PETSc/Mat.pyx":935
  *         if x is not None: xvec = x.vec
  *         if b is not None: bvec = b.vec
  *         if isinstance(rows, IS):             # <<<<<<<<<<<<<<
@@ -124929,7 +132637,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_210zeroRowsLocal(struct PyPetscM
     goto __pyx_L5;
   }
 
-  /* "PETSc/Mat.pyx":929
+  /* "PETSc/Mat.pyx":938
  *             CHKERR( MatZeroRowsLocalIS(self.mat, (<IS>rows).iset, sval, xvec, bvec) )
  *         else:
  *             rows = iarray_i(rows, &ni, &i)             # <<<<<<<<<<<<<<
@@ -124937,23 +132645,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_210zeroRowsLocal(struct PyPetscM
  * 
  */
   /*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_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, 938, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF_SET(__pyx_v_rows, __pyx_t_6);
     __pyx_t_6 = 0;
 
-    /* "PETSc/Mat.pyx":930
+    /* "PETSc/Mat.pyx":939
  *         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_ERR(33, 930, __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 == ((int)-1))) __PYX_ERR(33, 939, __pyx_L1_error)
   }
   __pyx_L5:;
 
-  /* "PETSc/Mat.pyx":920
+  /* "PETSc/Mat.pyx":929
  *             CHKERR( MatZeroRows(self.mat, ni, i, sval, xvec, bvec) )
  * 
  *     def zeroRowsLocal(self, rows, diag=1, Vec x=None, Vec b=None):             # <<<<<<<<<<<<<<
@@ -124975,7 +132683,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_210zeroRowsLocal(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":932
+/* "PETSc/Mat.pyx":941
  *             CHKERR( MatZeroRowsLocal(self.mat, ni, i, sval, xvec, bvec) )
  * 
  *     def zeroRowsColumns(self, rows, diag=1, Vec x=None, Vec b=None):             # <<<<<<<<<<<<<<
@@ -124984,9 +132692,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_210zeroRowsLocal(struct PyPetscM
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_215zeroRowsColumns(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_214zeroRowsColumns[] = "Mat.zeroRowsColumns(self, rows, diag=1, Vec x=None, Vec b=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_215zeroRowsColumns(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;
@@ -125005,9 +132713,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_213zeroRowsColumns(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -125016,16 +132728,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_213zeroRowsColumns(PyObject *__p
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rows)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_diag);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_b);
@@ -125033,13 +132748,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_213zeroRowsColumns(PyObject *__p
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "zeroRowsColumns") < 0)) __PYX_ERR(33, 932, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "zeroRowsColumns") < 0)) __PYX_ERR(33, 941, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -125052,15 +132770,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_213zeroRowsColumns(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("zeroRowsColumns", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 932, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("zeroRowsColumns", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 941, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "x", 0))) __PYX_ERR(33, 941, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "b", 0))) __PYX_ERR(33, 941, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_214zeroRowsColumns(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_rows, __pyx_v_diag, __pyx_v_x, __pyx_v_b);
 
   /* function exit code */
   goto __pyx_L0;
@@ -125071,7 +132789,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_213zeroRowsColumns(PyObject *__p
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_214zeroRowsColumns(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;
@@ -125088,7 +132806,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_212zeroRowsColumns(struct PyPets
   __Pyx_RefNannySetupContext("zeroRowsColumns", 0);
   __Pyx_INCREF(__pyx_v_rows);
 
-  /* "PETSc/Mat.pyx":933
+  /* "PETSc/Mat.pyx":942
  * 
  *     def zeroRowsColumns(self, rows, diag=1, Vec x=None, Vec b=None):
  *         cdef PetscInt ni=0, *i=NULL             # <<<<<<<<<<<<<<
@@ -125098,17 +132816,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_212zeroRowsColumns(struct PyPets
   __pyx_v_ni = 0;
   __pyx_v_i = NULL;
 
-  /* "PETSc/Mat.pyx":934
+  /* "PETSc/Mat.pyx":943
  *     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_ERR(33, 934, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_diag); if (unlikely(__pyx_t_1 == ((PetscScalar)((PetscScalar)(-1.0))) && PyErr_Occurred())) __PYX_ERR(33, 943, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":935
+  /* "PETSc/Mat.pyx":944
  *         cdef PetscInt ni=0, *i=NULL
  *         cdef PetscScalar sval = asScalar(diag)
  *         cdef PetscVec xvec=NULL, bvec=NULL             # <<<<<<<<<<<<<<
@@ -125118,7 +132836,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_212zeroRowsColumns(struct PyPets
   __pyx_v_xvec = NULL;
   __pyx_v_bvec = NULL;
 
-  /* "PETSc/Mat.pyx":936
+  /* "PETSc/Mat.pyx":945
  *         cdef PetscScalar sval = asScalar(diag)
  *         cdef PetscVec xvec=NULL, bvec=NULL
  *         if x is not None: xvec = x.vec             # <<<<<<<<<<<<<<
@@ -125132,7 +132850,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_212zeroRowsColumns(struct PyPets
     __pyx_v_xvec = __pyx_t_4;
   }
 
-  /* "PETSc/Mat.pyx":937
+  /* "PETSc/Mat.pyx":946
  *         cdef PetscVec xvec=NULL, bvec=NULL
  *         if x is not None: xvec = x.vec
  *         if b is not None: bvec = b.vec             # <<<<<<<<<<<<<<
@@ -125146,7 +132864,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_212zeroRowsColumns(struct PyPets
     __pyx_v_bvec = __pyx_t_4;
   }
 
-  /* "PETSc/Mat.pyx":938
+  /* "PETSc/Mat.pyx":947
  *         if x is not None: xvec = x.vec
  *         if b is not None: bvec = b.vec
  *         if isinstance(rows, IS):             # <<<<<<<<<<<<<<
@@ -125157,16 +132875,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_212zeroRowsColumns(struct PyPets
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Mat.pyx":939
+    /* "PETSc/Mat.pyx":948
  *         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_ERR(33, 939, __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 == ((int)-1))) __PYX_ERR(33, 948, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":938
+    /* "PETSc/Mat.pyx":947
  *         if x is not None: xvec = x.vec
  *         if b is not None: bvec = b.vec
  *         if isinstance(rows, IS):             # <<<<<<<<<<<<<<
@@ -125176,7 +132894,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_212zeroRowsColumns(struct PyPets
     goto __pyx_L5;
   }
 
-  /* "PETSc/Mat.pyx":941
+  /* "PETSc/Mat.pyx":950
  *             CHKERR( MatZeroRowsColumnsIS(self.mat, (<IS>rows).iset, sval, xvec, bvec) )
  *         else:
  *             rows = iarray_i(rows, &ni, &i)             # <<<<<<<<<<<<<<
@@ -125184,23 +132902,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_212zeroRowsColumns(struct PyPets
  * 
  */
   /*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_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, 950, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
     __Pyx_DECREF_SET(__pyx_v_rows, __pyx_t_6);
     __pyx_t_6 = 0;
 
-    /* "PETSc/Mat.pyx":942
+    /* "PETSc/Mat.pyx":951
  *         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_ERR(33, 942, __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 == ((int)-1))) __PYX_ERR(33, 951, __pyx_L1_error)
   }
   __pyx_L5:;
 
-  /* "PETSc/Mat.pyx":932
+  /* "PETSc/Mat.pyx":941
  *             CHKERR( MatZeroRowsLocal(self.mat, ni, i, sval, xvec, bvec) )
  * 
  *     def zeroRowsColumns(self, rows, diag=1, Vec x=None, Vec b=None):             # <<<<<<<<<<<<<<
@@ -125222,7 +132940,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_212zeroRowsColumns(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":944
+/* "PETSc/Mat.pyx":953
  *             CHKERR( MatZeroRowsColumns(self.mat, ni, i, sval, xvec, bvec) )
  * 
  *     def storeValues(self):             # <<<<<<<<<<<<<<
@@ -125231,38 +132949,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_212zeroRowsColumns(struct PyPets
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_217storeValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_216storeValues[] = "Mat.storeValues(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_217storeValues(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_214storeValues(((struct PyPetscMatObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_216storeValues(((struct PyPetscMatObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_214storeValues(struct PyPetscMatObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_216storeValues(struct PyPetscMatObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("storeValues", 0);
 
-  /* "PETSc/Mat.pyx":945
+  /* "PETSc/Mat.pyx":954
  * 
  *     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_ERR(33, 945, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatStoreValues(__pyx_v_self->mat)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(33, 954, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":944
+  /* "PETSc/Mat.pyx":953
  *             CHKERR( MatZeroRowsColumns(self.mat, ni, i, sval, xvec, bvec) )
  * 
  *     def storeValues(self):             # <<<<<<<<<<<<<<
@@ -125282,7 +133000,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_214storeValues(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":947
+/* "PETSc/Mat.pyx":956
  *         CHKERR( MatStoreValues(self.mat) )
  * 
  *     def retrieveValues(self):             # <<<<<<<<<<<<<<
@@ -125291,38 +133009,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_214storeValues(struct PyPetscMat
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_219retrieveValues(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_218retrieveValues[] = "Mat.retrieveValues(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_219retrieveValues(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_216retrieveValues(((struct PyPetscMatObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_218retrieveValues(((struct PyPetscMatObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_216retrieveValues(struct PyPetscMatObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_218retrieveValues(struct PyPetscMatObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("retrieveValues", 0);
 
-  /* "PETSc/Mat.pyx":948
+  /* "PETSc/Mat.pyx":957
  * 
  *     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_ERR(33, 948, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatRetrieveValues(__pyx_v_self->mat)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(33, 957, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":947
+  /* "PETSc/Mat.pyx":956
  *         CHKERR( MatStoreValues(self.mat) )
  * 
  *     def retrieveValues(self):             # <<<<<<<<<<<<<<
@@ -125342,7 +133060,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_216retrieveValues(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":950
+/* "PETSc/Mat.pyx":959
  *         CHKERR( MatRetrieveValues(self.mat) )
  * 
  *     def assemblyBegin(self, assembly=None):             # <<<<<<<<<<<<<<
@@ -125351,9 +133069,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_216retrieveValues(struct PyPetsc
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_221assemblyBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_220assemblyBegin[] = "Mat.assemblyBegin(self, assembly=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_221assemblyBegin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_assembly = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -125367,6 +133085,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_219assemblyBegin(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -125379,11 +133098,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_219assemblyBegin(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "assemblyBegin") < 0)) __PYX_ERR(33, 950, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "assemblyBegin") < 0)) __PYX_ERR(33, 959, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -125392,20 +133112,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_219assemblyBegin(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("assemblyBegin", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 950, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("assemblyBegin", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 959, __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_218assemblyBegin(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_assembly);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_220assemblyBegin(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_assembly);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_218assemblyBegin(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_assembly) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_220assemblyBegin(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_assembly) {
   MatAssemblyType __pyx_v_flag;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -125413,26 +133133,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_218assemblyBegin(struct PyPetscM
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("assemblyBegin", 0);
 
-  /* "PETSc/Mat.pyx":951
+  /* "PETSc/Mat.pyx":960
  * 
  *     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)-1L))) __PYX_ERR(33, 951, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_assemblytype(__pyx_v_assembly); if (unlikely(__pyx_t_1 == ((MatAssemblyType)((MatAssemblyType)-1L)))) __PYX_ERR(33, 960, __pyx_L1_error)
   __pyx_v_flag = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":952
+  /* "PETSc/Mat.pyx":961
  *     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_ERR(33, 952, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatAssemblyBegin(__pyx_v_self->mat, __pyx_v_flag)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(33, 961, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":950
+  /* "PETSc/Mat.pyx":959
  *         CHKERR( MatRetrieveValues(self.mat) )
  * 
  *     def assemblyBegin(self, assembly=None):             # <<<<<<<<<<<<<<
@@ -125452,7 +133172,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_218assemblyBegin(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":954
+/* "PETSc/Mat.pyx":963
  *         CHKERR( MatAssemblyBegin(self.mat, flag) )
  * 
  *     def assemblyEnd(self, assembly=None):             # <<<<<<<<<<<<<<
@@ -125461,9 +133181,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_218assemblyBegin(struct PyPetscM
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_223assemblyEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_222assemblyEnd[] = "Mat.assemblyEnd(self, assembly=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_223assemblyEnd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_assembly = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -125477,6 +133197,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_221assemblyEnd(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -125489,11 +133210,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_221assemblyEnd(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "assemblyEnd") < 0)) __PYX_ERR(33, 954, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "assemblyEnd") < 0)) __PYX_ERR(33, 963, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -125502,20 +133224,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_221assemblyEnd(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_ERR(33, 954, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("assemblyEnd", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 963, __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_220assemblyEnd(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_assembly);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_222assemblyEnd(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_assembly);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_220assemblyEnd(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_assembly) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_222assemblyEnd(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_assembly) {
   MatAssemblyType __pyx_v_flag;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -125523,26 +133245,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_220assemblyEnd(struct PyPetscMat
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("assemblyEnd", 0);
 
-  /* "PETSc/Mat.pyx":955
+  /* "PETSc/Mat.pyx":964
  * 
  *     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)-1L))) __PYX_ERR(33, 955, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_assemblytype(__pyx_v_assembly); if (unlikely(__pyx_t_1 == ((MatAssemblyType)((MatAssemblyType)-1L)))) __PYX_ERR(33, 964, __pyx_L1_error)
   __pyx_v_flag = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":956
+  /* "PETSc/Mat.pyx":965
  *     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_ERR(33, 956, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatAssemblyEnd(__pyx_v_self->mat, __pyx_v_flag)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(33, 965, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":954
+  /* "PETSc/Mat.pyx":963
  *         CHKERR( MatAssemblyBegin(self.mat, flag) )
  * 
  *     def assemblyEnd(self, assembly=None):             # <<<<<<<<<<<<<<
@@ -125562,7 +133284,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_220assemblyEnd(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":958
+/* "PETSc/Mat.pyx":967
  *         CHKERR( MatAssemblyEnd(self.mat, flag) )
  * 
  *     def assemble(self, assembly=None):             # <<<<<<<<<<<<<<
@@ -125571,9 +133293,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_220assemblyEnd(struct PyPetscMat
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_225assemble(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_224assemble[] = "Mat.assemble(self, assembly=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_225assemble(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_assembly = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -125587,6 +133309,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_223assemble(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -125599,11 +133322,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_223assemble(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "assemble") < 0)) __PYX_ERR(33, 958, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "assemble") < 0)) __PYX_ERR(33, 967, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -125612,20 +133336,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_223assemble(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_ERR(33, 958, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("assemble", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 967, __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_222assemble(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_assembly);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_224assemble(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_assembly);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_222assemble(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_assembly) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_224assemble(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_assembly) {
   MatAssemblyType __pyx_v_flag;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -125633,35 +133357,35 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_222assemble(struct PyPetscMatObj
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("assemble", 0);
 
-  /* "PETSc/Mat.pyx":959
+  /* "PETSc/Mat.pyx":968
  * 
  *     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)-1L))) __PYX_ERR(33, 959, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_assemblytype(__pyx_v_assembly); if (unlikely(__pyx_t_1 == ((MatAssemblyType)((MatAssemblyType)-1L)))) __PYX_ERR(33, 968, __pyx_L1_error)
   __pyx_v_flag = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":960
+  /* "PETSc/Mat.pyx":969
  *     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_ERR(33, 960, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatAssemblyBegin(__pyx_v_self->mat, __pyx_v_flag)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(33, 969, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":961
+  /* "PETSc/Mat.pyx":970
  *         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_ERR(33, 961, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatAssemblyEnd(__pyx_v_self->mat, __pyx_v_flag)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(33, 970, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":958
+  /* "PETSc/Mat.pyx":967
  *         CHKERR( MatAssemblyEnd(self.mat, flag) )
  * 
  *     def assemble(self, assembly=None):             # <<<<<<<<<<<<<<
@@ -125681,77 +133405,77 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_222assemble(struct PyPetscMatObj
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":963
+/* "PETSc/Mat.pyx":972
  *         CHKERR( MatAssemblyEnd(self.mat, flag) )
  * 
  *     def isAssembled(self):             # <<<<<<<<<<<<<<
- *         cdef PetscBool assembled = PETSC_FALSE
- *         CHKERR( MatAssembled(self.mat, &assembled) )
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( MatAssembled(self.mat, &flag) )
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_227isAssembled(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_226isAssembled[] = "Mat.isAssembled(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_227isAssembled(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_224isAssembled(((struct PyPetscMatObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_226isAssembled(((struct PyPetscMatObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_224isAssembled(struct PyPetscMatObject *__pyx_v_self) {
-  PetscBool __pyx_v_assembled;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_226isAssembled(struct PyPetscMatObject *__pyx_v_self) {
+  PetscBool __pyx_v_flag;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("isAssembled", 0);
 
-  /* "PETSc/Mat.pyx":964
+  /* "PETSc/Mat.pyx":973
  * 
  *     def isAssembled(self):
- *         cdef PetscBool assembled = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( MatAssembled(self.mat, &assembled) )
- *         return <bint> assembled
+ *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( MatAssembled(self.mat, &flag) )
+ *         return toBool(flag)
  */
-  __pyx_v_assembled = PETSC_FALSE;
+  __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":965
+  /* "PETSc/Mat.pyx":974
  *     def isAssembled(self):
- *         cdef PetscBool assembled = PETSC_FALSE
- *         CHKERR( MatAssembled(self.mat, &assembled) )             # <<<<<<<<<<<<<<
- *         return <bint> assembled
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( MatAssembled(self.mat, &flag) )             # <<<<<<<<<<<<<<
+ *         return toBool(flag)
  *     #
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatAssembled(__pyx_v_self->mat, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(33, 974, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":966
- *         cdef PetscBool assembled = PETSC_FALSE
- *         CHKERR( MatAssembled(self.mat, &assembled) )
- *         return <bint> assembled             # <<<<<<<<<<<<<<
+  /* "PETSc/Mat.pyx":975
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( MatAssembled(self.mat, &flag) )
+ *         return toBool(flag)             # <<<<<<<<<<<<<<
  *     #
  * 
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_assembled); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 966, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 975, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":963
+  /* "PETSc/Mat.pyx":972
  *         CHKERR( MatAssemblyEnd(self.mat, flag) )
  * 
  *     def isAssembled(self):             # <<<<<<<<<<<<<<
- *         cdef PetscBool assembled = PETSC_FALSE
- *         CHKERR( MatAssembled(self.mat, &assembled) )
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( MatAssembled(self.mat, &flag) )
  */
 
   /* function exit code */
@@ -125765,7 +133489,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_224isAssembled(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":969
+/* "PETSc/Mat.pyx":978
  *     #
  * 
  *     def createVecs(self, side=None):             # <<<<<<<<<<<<<<
@@ -125774,9 +133498,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_224isAssembled(struct PyPetscMat
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_229createVecs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_228createVecs[] = "Mat.createVecs(self, side=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_229createVecs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_side = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -125790,6 +133514,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_227createVecs(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -125802,11 +133527,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_227createVecs(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createVecs") < 0)) __PYX_ERR(33, 969, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createVecs") < 0)) __PYX_ERR(33, 978, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -125815,20 +133541,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_227createVecs(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_ERR(33, 969, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createVecs", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 978, __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_226createVecs(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_side);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_228createVecs(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_side);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_226createVecs(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_side) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_228createVecs(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;
@@ -125840,7 +133566,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_226createVecs(struct PyPetscMatO
   PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("createVecs", 0);
 
-  /* "PETSc/Mat.pyx":971
+  /* "PETSc/Mat.pyx":980
  *     def createVecs(self, side=None):
  *         cdef Vec vecr, vecl
  *         if side is None:             # <<<<<<<<<<<<<<
@@ -125851,32 +133577,32 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_226createVecs(struct PyPetscMatO
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":972
+    /* "PETSc/Mat.pyx":981
  *         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 *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 972, __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, 981, __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 *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 972, __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, 981, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_vecl = ((struct PyPetscVecObject *)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "PETSc/Mat.pyx":973
+    /* "PETSc/Mat.pyx":982
  *         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_ERR(33, 973, __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 == ((int)-1))) __PYX_ERR(33, 982, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":974
+    /* "PETSc/Mat.pyx":983
  *             vecr = Vec(); vecl = Vec();
  *             CHKERR( MatCreateVecs(self.mat, &vecr.vec, &vecl.vec) )
  *             return (vecr, vecl)             # <<<<<<<<<<<<<<
@@ -125884,7 +133610,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_226createVecs(struct PyPetscMatO
  *             vecr = Vec()
  */
     __Pyx_XDECREF(__pyx_r);
-    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 974, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 983, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(((PyObject *)__pyx_v_vecr));
     __Pyx_GIVEREF(((PyObject *)__pyx_v_vecr));
@@ -125896,7 +133622,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_226createVecs(struct PyPetscMatO
     __pyx_t_3 = 0;
     goto __pyx_L0;
 
-    /* "PETSc/Mat.pyx":971
+    /* "PETSc/Mat.pyx":980
  *     def createVecs(self, side=None):
  *         cdef Vec vecr, vecl
  *         if side is None:             # <<<<<<<<<<<<<<
@@ -125905,7 +133631,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_226createVecs(struct PyPetscMatO
  */
   }
 
-  /* "PETSc/Mat.pyx":975
+  /* "PETSc/Mat.pyx":984
  *             CHKERR( MatCreateVecs(self.mat, &vecr.vec, &vecl.vec) )
  *             return (vecr, vecl)
  *         elif side in ('r', 'R', 'right', 'Right', 'RIGHT'):             # <<<<<<<<<<<<<<
@@ -125914,59 +133640,59 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_226createVecs(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_ERR(33, 975, __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, 984, __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_ERR(33, 975, __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, 984, __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_ERR(33, 975, __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, 984, __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_ERR(33, 975, __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, 984, __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_ERR(33, 975, __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, 984, __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":976
+    /* "PETSc/Mat.pyx":985
  *             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 *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 976, __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, 985, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_vecr = ((struct PyPetscVecObject *)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "PETSc/Mat.pyx":977
+    /* "PETSc/Mat.pyx":986
  *         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_ERR(33, 977, __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 == ((int)-1))) __PYX_ERR(33, 986, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":978
+    /* "PETSc/Mat.pyx":987
  *             vecr = Vec()
  *             CHKERR( MatCreateVecs(self.mat, &vecr.vec, NULL) )
  *             return vecr             # <<<<<<<<<<<<<<
@@ -125978,7 +133704,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_226createVecs(struct PyPetscMatO
     __pyx_r = ((PyObject *)__pyx_v_vecr);
     goto __pyx_L0;
 
-    /* "PETSc/Mat.pyx":975
+    /* "PETSc/Mat.pyx":984
  *             CHKERR( MatCreateVecs(self.mat, &vecr.vec, &vecl.vec) )
  *             return (vecr, vecl)
  *         elif side in ('r', 'R', 'right', 'Right', 'RIGHT'):             # <<<<<<<<<<<<<<
@@ -125987,7 +133713,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_226createVecs(struct PyPetscMatO
  */
   }
 
-  /* "PETSc/Mat.pyx":979
+  /* "PETSc/Mat.pyx":988
  *             CHKERR( MatCreateVecs(self.mat, &vecr.vec, NULL) )
  *             return vecr
  *         elif side in ('l', 'L', 'left',  'Left', 'LEFT'):             # <<<<<<<<<<<<<<
@@ -125996,59 +133722,59 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_226createVecs(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_ERR(33, 979, __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, 988, __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_ERR(33, 979, __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, 988, __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_ERR(33, 979, __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, 988, __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_ERR(33, 979, __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, 988, __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_ERR(33, 979, __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, 988, __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":980
+    /* "PETSc/Mat.pyx":989
  *             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 *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 980, __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, 989, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __pyx_v_vecl = ((struct PyPetscVecObject *)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "PETSc/Mat.pyx":981
+    /* "PETSc/Mat.pyx":990
  *         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_ERR(33, 981, __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 == ((int)-1))) __PYX_ERR(33, 990, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":982
+    /* "PETSc/Mat.pyx":991
  *             vecl = Vec()
  *             CHKERR( MatCreateVecs(self.mat, NULL, &vecl.vec) )
  *             return vecl             # <<<<<<<<<<<<<<
@@ -126060,7 +133786,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_226createVecs(struct PyPetscMatO
     __pyx_r = ((PyObject *)__pyx_v_vecl);
     goto __pyx_L0;
 
-    /* "PETSc/Mat.pyx":979
+    /* "PETSc/Mat.pyx":988
  *             CHKERR( MatCreateVecs(self.mat, &vecr.vec, NULL) )
  *             return vecr
  *         elif side in ('l', 'L', 'left',  'Left', 'LEFT'):             # <<<<<<<<<<<<<<
@@ -126069,7 +133795,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_226createVecs(struct PyPetscMatO
  */
   }
 
-  /* "PETSc/Mat.pyx":984
+  /* "PETSc/Mat.pyx":993
  *             return vecl
  *         else:
  *             raise ValueError("side '%r' not understood" % side)             # <<<<<<<<<<<<<<
@@ -126077,22 +133803,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_226createVecs(struct PyPetscMatO
  *     def createVecRight(self):
  */
   /*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_t_3 = __Pyx_PyString_Format(__pyx_kp_s_side_r_not_understood, __pyx_v_side); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 993, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(33, 984, __pyx_L1_error)
+    __pyx_t_5 = PyTuple_New(1); if (unlikely(!__pyx_t_5)) __PYX_ERR(33, 993, __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_ERR(33, 984, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 993, __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_ERR(33, 984, __pyx_L1_error)
+    __PYX_ERR(33, 993, __pyx_L1_error)
   }
 
-  /* "PETSc/Mat.pyx":969
+  /* "PETSc/Mat.pyx":978
  *     #
  * 
  *     def createVecs(self, side=None):             # <<<<<<<<<<<<<<
@@ -126114,7 +133840,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_226createVecs(struct PyPetscMatO
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":986
+/* "PETSc/Mat.pyx":995
  *             raise ValueError("side '%r' not understood" % side)
  * 
  *     def createVecRight(self):             # <<<<<<<<<<<<<<
@@ -126123,23 +133849,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_226createVecs(struct PyPetscMatO
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_231createVecRight(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_230createVecRight[] = "Mat.createVecRight(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_231createVecRight(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_228createVecRight(((struct PyPetscMatObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_230createVecRight(((struct PyPetscMatObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_228createVecRight(struct PyPetscMatObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_230createVecRight(struct PyPetscMatObject *__pyx_v_self) {
   struct PyPetscVecObject *__pyx_v_vecr = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -126147,28 +133873,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_228createVecRight(struct PyPetsc
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("createVecRight", 0);
 
-  /* "PETSc/Mat.pyx":987
+  /* "PETSc/Mat.pyx":996
  * 
  *     def createVecRight(self):
  *         cdef Vec vecr = Vec()             # <<<<<<<<<<<<<<
  *         CHKERR( MatCreateVecs(self.mat, &vecr.vec, NULL) )
  *         return vecr
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 996, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_vecr = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":988
+  /* "PETSc/Mat.pyx":997
  *     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_ERR(33, 988, __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 == ((int)-1))) __PYX_ERR(33, 997, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":989
+  /* "PETSc/Mat.pyx":998
  *         cdef Vec vecr = Vec()
  *         CHKERR( MatCreateVecs(self.mat, &vecr.vec, NULL) )
  *         return vecr             # <<<<<<<<<<<<<<
@@ -126180,7 +133906,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_228createVecRight(struct PyPetsc
   __pyx_r = ((PyObject *)__pyx_v_vecr);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":986
+  /* "PETSc/Mat.pyx":995
  *             raise ValueError("side '%r' not understood" % side)
  * 
  *     def createVecRight(self):             # <<<<<<<<<<<<<<
@@ -126200,7 +133926,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_228createVecRight(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":991
+/* "PETSc/Mat.pyx":1000
  *         return vecr
  * 
  *     def createVecLeft(self):             # <<<<<<<<<<<<<<
@@ -126209,23 +133935,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_228createVecRight(struct PyPetsc
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_233createVecLeft(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_232createVecLeft[] = "Mat.createVecLeft(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_233createVecLeft(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_230createVecLeft(((struct PyPetscMatObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_232createVecLeft(((struct PyPetscMatObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_230createVecLeft(struct PyPetscMatObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_232createVecLeft(struct PyPetscMatObject *__pyx_v_self) {
   struct PyPetscVecObject *__pyx_v_vecl = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -126233,28 +133959,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_230createVecLeft(struct PyPetscM
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("createVecLeft", 0);
 
-  /* "PETSc/Mat.pyx":992
+  /* "PETSc/Mat.pyx":1001
  * 
  *     def createVecLeft(self):
  *         cdef Vec vecl = Vec()             # <<<<<<<<<<<<<<
  *         CHKERR( MatCreateVecs(self.mat, NULL, &vecl.vec) )
  *         return vecl
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1001, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_vecl = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":993
+  /* "PETSc/Mat.pyx":1002
  *     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_ERR(33, 993, __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 == ((int)-1))) __PYX_ERR(33, 1002, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":994
+  /* "PETSc/Mat.pyx":1003
  *         cdef Vec vecl = Vec()
  *         CHKERR( MatCreateVecs(self.mat, NULL, &vecl.vec) )
  *         return vecl             # <<<<<<<<<<<<<<
@@ -126266,7 +133992,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_230createVecLeft(struct PyPetscM
   __pyx_r = ((PyObject *)__pyx_v_vecl);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":991
+  /* "PETSc/Mat.pyx":1000
  *         return vecr
  * 
  *     def createVecLeft(self):             # <<<<<<<<<<<<<<
@@ -126286,7 +134012,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_230createVecLeft(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1002
+/* "PETSc/Mat.pyx":1011
  *     #
  * 
  *     def getColumnVector(self, column, Vec result=None):             # <<<<<<<<<<<<<<
@@ -126295,9 +134021,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_230createVecLeft(struct PyPetscM
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_235getColumnVector(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_234getColumnVector[] = "Mat.getColumnVector(self, column, Vec result=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_235getColumnVector(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_column = 0;
   struct PyPetscVecObject *__pyx_v_result = 0;
   PyObject *__pyx_r = 0;
@@ -126312,7 +134038,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_233getColumnVector(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -126321,6 +134049,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_233getColumnVector(PyObject *__p
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_column)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_result);
@@ -126328,11 +134057,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_233getColumnVector(PyObject *__p
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getColumnVector") < 0)) __PYX_ERR(33, 1002, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getColumnVector") < 0)) __PYX_ERR(33, 1011, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -126343,14 +134073,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_233getColumnVector(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getColumnVector", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1002, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getColumnVector", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1011, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_result), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "result", 0))) __PYX_ERR(33, 1011, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_234getColumnVector(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_column, __pyx_v_result);
 
   /* function exit code */
   goto __pyx_L0;
@@ -126361,7 +134091,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_233getColumnVector(PyObject *__p
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_232getColumnVector(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_column, struct PyPetscVecObject *__pyx_v_result) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_234getColumnVector(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_column, struct PyPetscVecObject *__pyx_v_result) {
   PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -126373,17 +134103,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_232getColumnVector(struct PyPets
   __Pyx_RefNannySetupContext("getColumnVector", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_result);
 
-  /* "PETSc/Mat.pyx":1003
+  /* "PETSc/Mat.pyx":1012
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(33, 1003, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_column); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(33, 1012, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":1004
+  /* "PETSc/Mat.pyx":1013
  *     def getColumnVector(self, column, Vec result=None):
  *         cdef PetscInt ival = asInt(column)
  *         if result is None:             # <<<<<<<<<<<<<<
@@ -126394,19 +134124,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_232getColumnVector(struct PyPets
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Mat.pyx":1005
+    /* "PETSc/Mat.pyx":1014
  *         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 *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1005, __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, 1014, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_result, ((struct PyPetscVecObject *)__pyx_t_4));
     __pyx_t_4 = 0;
 
-    /* "PETSc/Mat.pyx":1004
+    /* "PETSc/Mat.pyx":1013
  *     def getColumnVector(self, column, Vec result=None):
  *         cdef PetscInt ival = asInt(column)
  *         if result is None:             # <<<<<<<<<<<<<<
@@ -126415,7 +134145,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_232getColumnVector(struct PyPets
  */
   }
 
-  /* "PETSc/Mat.pyx":1006
+  /* "PETSc/Mat.pyx":1015
  *         if result is None:
  *             result = Vec()
  *         if result.vec == NULL:             # <<<<<<<<<<<<<<
@@ -126425,16 +134155,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_232getColumnVector(struct PyPets
   __pyx_t_3 = ((__pyx_v_result->vec == NULL) != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Mat.pyx":1007
+    /* "PETSc/Mat.pyx":1016
  *             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_ERR(33, 1007, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateVecs(__pyx_v_self->mat, NULL, (&__pyx_v_result->vec))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(33, 1016, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":1006
+    /* "PETSc/Mat.pyx":1015
  *         if result is None:
  *             result = Vec()
  *         if result.vec == NULL:             # <<<<<<<<<<<<<<
@@ -126443,16 +134173,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_232getColumnVector(struct PyPets
  */
   }
 
-  /* "PETSc/Mat.pyx":1008
+  /* "PETSc/Mat.pyx":1017
  *         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_ERR(33, 1008, __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 == ((int)-1))) __PYX_ERR(33, 1017, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1009
+  /* "PETSc/Mat.pyx":1018
  *             CHKERR( MatCreateVecs(self.mat, NULL, &result.vec) )
  *         CHKERR( MatGetColumnVector(self.mat, result.vec, ival) )
  *         return result             # <<<<<<<<<<<<<<
@@ -126464,7 +134194,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_232getColumnVector(struct PyPets
   __pyx_r = ((PyObject *)__pyx_v_result);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1002
+  /* "PETSc/Mat.pyx":1011
  *     #
  * 
  *     def getColumnVector(self, column, Vec result=None):             # <<<<<<<<<<<<<<
@@ -126484,7 +134214,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_232getColumnVector(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1011
+/* "PETSc/Mat.pyx":1020
  *         return result
  * 
  *     def getRedundantMatrix(self, nsubcomm, subcomm=None, Mat out=None):             # <<<<<<<<<<<<<<
@@ -126493,9 +134223,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_232getColumnVector(struct PyPets
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_237getRedundantMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_236getRedundantMatrix[] = "Mat.getRedundantMatrix(self, nsubcomm, subcomm=None, Mat out=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_237getRedundantMatrix(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;
@@ -126512,8 +134242,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_235getRedundantMatrix(PyObject *
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -126522,11 +134255,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_235getRedundantMatrix(PyObject *
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nsubcomm)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_subcomm);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_out);
@@ -126534,12 +134269,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_235getRedundantMatrix(PyObject *
         }
       }
       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)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getRedundantMatrix") < 0)) __PYX_ERR(33, 1020, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -126551,14 +134288,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_235getRedundantMatrix(PyObject *
   }
   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_RaiseArgtupleInvalid("getRedundantMatrix", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1020, __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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_out), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "out", 0))) __PYX_ERR(33, 1020, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_236getRedundantMatrix(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_nsubcomm, __pyx_v_subcomm, __pyx_v_out);
 
   /* function exit code */
   goto __pyx_L0;
@@ -126569,7 +134306,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_235getRedundantMatrix(PyObject *
   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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_236getRedundantMatrix(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;
@@ -126584,17 +134321,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_234getRedundantMatrix(struct PyP
   __Pyx_RefNannySetupContext("getRedundantMatrix", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_out);
 
-  /* "PETSc/Mat.pyx":1012
+  /* "PETSc/Mat.pyx":1021
  * 
  *     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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_nsubcomm); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(33, 1021, __pyx_L1_error)
   __pyx_v__nsubcomm = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":1013
+  /* "PETSc/Mat.pyx":1022
  *     def getRedundantMatrix(self, nsubcomm, subcomm=None, Mat out=None):
  *         cdef PetscInt _nsubcomm   = asInt(nsubcomm)
  *         cdef MPI_Comm _subcomm    = MPI_COMM_NULL             # <<<<<<<<<<<<<<
@@ -126603,20 +134340,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_234getRedundantMatrix(struct PyP
  */
   __pyx_v__subcomm = MPI_COMM_NULL;
 
-  /* "PETSc/Mat.pyx":1014
+  /* "PETSc/Mat.pyx":1023
  *         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)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_subcomm); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(33, 1023, __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_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, 1023, __pyx_L1_error)
     __pyx_v__subcomm = __pyx_t_3;
   }
 
-  /* "PETSc/Mat.pyx":1015
+  /* "PETSc/Mat.pyx":1024
  *         cdef MPI_Comm _subcomm    = MPI_COMM_NULL
  *         if subcomm:   _subcomm    = def_Comm(subcomm, PETSC_COMM_DEFAULT)
  *         cdef PetscMatReuse reuse  = MAT_INITIAL_MATRIX             # <<<<<<<<<<<<<<
@@ -126625,7 +134362,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_234getRedundantMatrix(struct PyP
  */
   __pyx_v_reuse = MAT_INITIAL_MATRIX;
 
-  /* "PETSc/Mat.pyx":1016
+  /* "PETSc/Mat.pyx":1025
  *         if subcomm:   _subcomm    = def_Comm(subcomm, PETSC_COMM_DEFAULT)
  *         cdef PetscMatReuse reuse  = MAT_INITIAL_MATRIX
  *         if out is None: out       = Mat()             # <<<<<<<<<<<<<<
@@ -126635,13 +134372,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_234getRedundantMatrix(struct PyP
   __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_t_5 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(33, 1025, __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
+  /* "PETSc/Mat.pyx":1026
  *         cdef PetscMatReuse reuse  = MAT_INITIAL_MATRIX
  *         if out is None: out       = Mat()
  *         if out.mat != NULL: reuse = MAT_REUSE_MATRIX             # <<<<<<<<<<<<<<
@@ -126653,16 +134390,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_234getRedundantMatrix(struct PyP
     __pyx_v_reuse = MAT_REUSE_MATRIX;
   }
 
-  /* "PETSc/Mat.pyx":1018
+  /* "PETSc/Mat.pyx":1027
  *         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)
+  __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 == ((int)-1))) __PYX_ERR(33, 1027, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1019
+  /* "PETSc/Mat.pyx":1028
  *         if out.mat != NULL: reuse = MAT_REUSE_MATRIX
  *         CHKERR( MatCreateRedundantMatrix(self.mat, _nsubcomm, _subcomm, reuse, &out.mat))
  *         return out             # <<<<<<<<<<<<<<
@@ -126674,7 +134411,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_234getRedundantMatrix(struct PyP
   __pyx_r = ((PyObject *)__pyx_v_out);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1011
+  /* "PETSc/Mat.pyx":1020
  *         return result
  * 
  *     def getRedundantMatrix(self, nsubcomm, subcomm=None, Mat out=None):             # <<<<<<<<<<<<<<
@@ -126694,7 +134431,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_234getRedundantMatrix(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1021
+/* "PETSc/Mat.pyx":1030
  *         return out
  * 
  *     def getDiagonal(self, Vec result=None):             # <<<<<<<<<<<<<<
@@ -126703,9 +134440,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_234getRedundantMatrix(struct PyP
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_239getDiagonal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_238getDiagonal[] = "Mat.getDiagonal(self, Vec result=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_239getDiagonal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_result = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -126719,6 +134456,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_237getDiagonal(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -126731,11 +134469,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_237getDiagonal(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getDiagonal") < 0)) __PYX_ERR(33, 1021, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getDiagonal") < 0)) __PYX_ERR(33, 1030, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -126744,14 +134483,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_237getDiagonal(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_ERR(33, 1021, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getDiagonal", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1030, __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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_result), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "result", 0))) __PYX_ERR(33, 1030, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_238getDiagonal(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_result);
 
   /* function exit code */
   goto __pyx_L0;
@@ -126762,7 +134501,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_237getDiagonal(PyObject *__pyx_v
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_236getDiagonal(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_result) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_238getDiagonal(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_result) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -126772,7 +134511,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_236getDiagonal(struct PyPetscMat
   __Pyx_RefNannySetupContext("getDiagonal", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_result);
 
-  /* "PETSc/Mat.pyx":1022
+  /* "PETSc/Mat.pyx":1031
  * 
  *     def getDiagonal(self, Vec result=None):
  *         if result is None:             # <<<<<<<<<<<<<<
@@ -126783,19 +134522,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_236getDiagonal(struct PyPetscMat
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":1023
+    /* "PETSc/Mat.pyx":1032
  *     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_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1032, __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
+    /* "PETSc/Mat.pyx":1031
  * 
  *     def getDiagonal(self, Vec result=None):
  *         if result is None:             # <<<<<<<<<<<<<<
@@ -126804,7 +134543,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_236getDiagonal(struct PyPetscMat
  */
   }
 
-  /* "PETSc/Mat.pyx":1024
+  /* "PETSc/Mat.pyx":1033
  *         if result is None:
  *             result = Vec()
  *         if result.vec == NULL:             # <<<<<<<<<<<<<<
@@ -126814,16 +134553,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_236getDiagonal(struct PyPetscMat
   __pyx_t_2 = ((__pyx_v_result->vec == NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":1025
+    /* "PETSc/Mat.pyx":1034
  *             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)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateVecs(__pyx_v_self->mat, NULL, (&__pyx_v_result->vec))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(33, 1034, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":1024
+    /* "PETSc/Mat.pyx":1033
  *         if result is None:
  *             result = Vec()
  *         if result.vec == NULL:             # <<<<<<<<<<<<<<
@@ -126832,16 +134571,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_236getDiagonal(struct PyPetscMat
  */
   }
 
-  /* "PETSc/Mat.pyx":1026
+  /* "PETSc/Mat.pyx":1035
  *         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)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetDiagonal(__pyx_v_self->mat, __pyx_v_result->vec)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(33, 1035, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1027
+  /* "PETSc/Mat.pyx":1036
  *             CHKERR( MatCreateVecs(self.mat, NULL, &result.vec) )
  *         CHKERR( MatGetDiagonal(self.mat, result.vec) )
  *         return result             # <<<<<<<<<<<<<<
@@ -126853,7 +134592,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_236getDiagonal(struct PyPetscMat
   __pyx_r = ((PyObject *)__pyx_v_result);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1021
+  /* "PETSc/Mat.pyx":1030
  *         return out
  * 
  *     def getDiagonal(self, Vec result=None):             # <<<<<<<<<<<<<<
@@ -126873,7 +134612,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_236getDiagonal(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1029
+/* "PETSc/Mat.pyx":1038
  *         return result
  * 
  *     def getRowSum(self, Vec result=None):             # <<<<<<<<<<<<<<
@@ -126882,9 +134621,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_236getDiagonal(struct PyPetscMat
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_241getRowSum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_240getRowSum[] = "Mat.getRowSum(self, Vec result=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_241getRowSum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_result = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -126898,6 +134637,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_239getRowSum(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -126910,11 +134650,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_239getRowSum(PyObject *__pyx_v_s
         }
       }
       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)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getRowSum") < 0)) __PYX_ERR(33, 1038, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -126923,14 +134664,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_239getRowSum(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getRowSum", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1029, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getRowSum", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1038, __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_ERR(33, 1029, __pyx_L1_error)
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_238getRowSum(((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, 1038, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_240getRowSum(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_result);
 
   /* function exit code */
   goto __pyx_L0;
@@ -126941,7 +134682,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_239getRowSum(PyObject *__pyx_v_s
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_238getRowSum(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_result) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_240getRowSum(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_result) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -126951,7 +134692,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_238getRowSum(struct PyPetscMatOb
   __Pyx_RefNannySetupContext("getRowSum", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_result);
 
-  /* "PETSc/Mat.pyx":1030
+  /* "PETSc/Mat.pyx":1039
  * 
  *     def getRowSum(self, Vec result=None):
  *         if result is None:             # <<<<<<<<<<<<<<
@@ -126962,19 +134703,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_238getRowSum(struct PyPetscMatOb
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":1031
+    /* "PETSc/Mat.pyx":1040
  *     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 *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1031, __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, 1040, __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":1030
+    /* "PETSc/Mat.pyx":1039
  * 
  *     def getRowSum(self, Vec result=None):
  *         if result is None:             # <<<<<<<<<<<<<<
@@ -126983,7 +134724,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_238getRowSum(struct PyPetscMatOb
  */
   }
 
-  /* "PETSc/Mat.pyx":1032
+  /* "PETSc/Mat.pyx":1041
  *         if result is None:
  *             result = Vec()
  *         if result.vec == NULL:             # <<<<<<<<<<<<<<
@@ -126993,16 +134734,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_238getRowSum(struct PyPetscMatOb
   __pyx_t_2 = ((__pyx_v_result->vec == NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":1033
+    /* "PETSc/Mat.pyx":1042
  *             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_ERR(33, 1033, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateVecs(__pyx_v_self->mat, NULL, (&__pyx_v_result->vec))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(33, 1042, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":1032
+    /* "PETSc/Mat.pyx":1041
  *         if result is None:
  *             result = Vec()
  *         if result.vec == NULL:             # <<<<<<<<<<<<<<
@@ -127011,28 +134752,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_238getRowSum(struct PyPetscMatOb
  */
   }
 
-  /* "PETSc/Mat.pyx":1034
+  /* "PETSc/Mat.pyx":1043
  *         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_ERR(33, 1034, __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 == ((int)-1))) __PYX_ERR(33, 1043, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1035
+  /* "PETSc/Mat.pyx":1044
  *             CHKERR( MatCreateVecs(self.mat, NULL, &result.vec) )
  *         CHKERR( MatGetRowSum(self.mat, result.vec) )
  *         return result             # <<<<<<<<<<<<<<
  * 
- *     def setDiagonal(self, Vec diag not None, addv=None):
+ *     def setDiagonal(self, Vec diag, addv=None):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_result));
   __pyx_r = ((PyObject *)__pyx_v_result);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1029
+  /* "PETSc/Mat.pyx":1038
  *         return result
  * 
  *     def getRowSum(self, Vec result=None):             # <<<<<<<<<<<<<<
@@ -127052,18 +134793,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_238getRowSum(struct PyPetscMatOb
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1037
+/* "PETSc/Mat.pyx":1046
  *         return result
  * 
- *     def setDiagonal(self, Vec diag not None, addv=None):             # <<<<<<<<<<<<<<
+ *     def setDiagonal(self, Vec diag, addv=None):             # <<<<<<<<<<<<<<
  *         cdef PetscInsertMode caddv = insertmode(addv)
  *         CHKERR( MatDiagonalSet(self.mat, diag.vec, caddv) )
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_243setDiagonal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_242setDiagonal[] = "Mat.setDiagonal(self, Vec diag, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_243setDiagonal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_diag = 0;
   PyObject *__pyx_v_addv = 0;
   PyObject *__pyx_r = 0;
@@ -127078,7 +134819,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_241setDiagonal(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -127087,6 +134830,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_241setDiagonal(PyObject *__pyx_v
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_diag)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
@@ -127094,11 +134838,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_241setDiagonal(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDiagonal") < 0)) __PYX_ERR(33, 1037, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDiagonal") < 0)) __PYX_ERR(33, 1046, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -127109,14 +134854,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_241setDiagonal(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_ERR(33, 1037, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setDiagonal", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1046, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_diag), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "diag", 0))) __PYX_ERR(33, 1046, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_242setDiagonal(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_diag, __pyx_v_addv);
 
   /* function exit code */
   goto __pyx_L0;
@@ -127127,7 +134872,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_241setDiagonal(PyObject *__pyx_v
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_240setDiagonal(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_diag, PyObject *__pyx_v_addv) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_242setDiagonal(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_diag, PyObject *__pyx_v_addv) {
   InsertMode __pyx_v_caddv;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -127135,29 +134880,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_240setDiagonal(struct PyPetscMat
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setDiagonal", 0);
 
-  /* "PETSc/Mat.pyx":1038
+  /* "PETSc/Mat.pyx":1047
  * 
- *     def setDiagonal(self, Vec diag not None, addv=None):
+ *     def setDiagonal(self, Vec diag, 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)-1L))) __PYX_ERR(33, 1038, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)((InsertMode)-1L)))) __PYX_ERR(33, 1047, __pyx_L1_error)
   __pyx_v_caddv = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":1039
- *     def setDiagonal(self, Vec diag not None, addv=None):
+  /* "PETSc/Mat.pyx":1048
+ *     def setDiagonal(self, Vec diag, 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_ERR(33, 1039, __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 == ((int)-1))) __PYX_ERR(33, 1048, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1037
+  /* "PETSc/Mat.pyx":1046
  *         return result
  * 
- *     def setDiagonal(self, Vec diag not None, addv=None):             # <<<<<<<<<<<<<<
+ *     def setDiagonal(self, Vec diag, addv=None):             # <<<<<<<<<<<<<<
  *         cdef PetscInsertMode caddv = insertmode(addv)
  *         CHKERR( MatDiagonalSet(self.mat, diag.vec, caddv) )
  */
@@ -127174,7 +134919,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_240setDiagonal(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1041
+/* "PETSc/Mat.pyx":1050
  *         CHKERR( MatDiagonalSet(self.mat, diag.vec, caddv) )
  * 
  *     def diagonalScale(self, Vec L=None, Vec R=None):             # <<<<<<<<<<<<<<
@@ -127183,9 +134928,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_240setDiagonal(struct PyPetscMat
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_245diagonalScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_244diagonalScale[] = "Mat.diagonalScale(self, Vec L=None, Vec R=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_245diagonalScale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_L = 0;
   struct PyPetscVecObject *__pyx_v_R = 0;
   PyObject *__pyx_r = 0;
@@ -127201,7 +134946,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_243diagonalScale(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -127212,6 +134959,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_243diagonalScale(PyObject *__pyx
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_L);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_R);
@@ -127219,12 +134967,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_243diagonalScale(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "diagonalScale") < 0)) __PYX_ERR(33, 1041, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "diagonalScale") < 0)) __PYX_ERR(33, 1050, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -127234,15 +134984,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_243diagonalScale(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("diagonalScale", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1041, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("diagonalScale", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1050, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_L), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "L", 0))) __PYX_ERR(33, 1050, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_R), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "R", 0))) __PYX_ERR(33, 1050, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_244diagonalScale(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_L, __pyx_v_R);
 
   /* function exit code */
   goto __pyx_L0;
@@ -127253,7 +135003,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_243diagonalScale(PyObject *__pyx
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_242diagonalScale(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_L, struct PyPetscVecObject *__pyx_v_R) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_244diagonalScale(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;
@@ -127264,7 +135014,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_242diagonalScale(struct PyPetscM
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("diagonalScale", 0);
 
-  /* "PETSc/Mat.pyx":1042
+  /* "PETSc/Mat.pyx":1051
  * 
  *     def diagonalScale(self, Vec L=None, Vec R=None):
  *         cdef PetscVec vecl=NULL, vecr=NULL             # <<<<<<<<<<<<<<
@@ -127274,7 +135024,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_242diagonalScale(struct PyPetscM
   __pyx_v_vecl = NULL;
   __pyx_v_vecr = NULL;
 
-  /* "PETSc/Mat.pyx":1043
+  /* "PETSc/Mat.pyx":1052
  *     def diagonalScale(self, Vec L=None, Vec R=None):
  *         cdef PetscVec vecl=NULL, vecr=NULL
  *         if L is not None: vecl = L.vec             # <<<<<<<<<<<<<<
@@ -127288,7 +135038,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_242diagonalScale(struct PyPetscM
     __pyx_v_vecl = __pyx_t_3;
   }
 
-  /* "PETSc/Mat.pyx":1044
+  /* "PETSc/Mat.pyx":1053
  *         cdef PetscVec vecl=NULL, vecr=NULL
  *         if L is not None: vecl = L.vec
  *         if R is not None: vecr = R.vec             # <<<<<<<<<<<<<<
@@ -127302,16 +135052,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_242diagonalScale(struct PyPetscM
     __pyx_v_vecr = __pyx_t_3;
   }
 
-  /* "PETSc/Mat.pyx":1045
+  /* "PETSc/Mat.pyx":1054
  *         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_ERR(33, 1045, __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 == ((int)-1))) __PYX_ERR(33, 1054, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1041
+  /* "PETSc/Mat.pyx":1050
  *         CHKERR( MatDiagonalSet(self.mat, diag.vec, caddv) )
  * 
  *     def diagonalScale(self, Vec L=None, Vec R=None):             # <<<<<<<<<<<<<<
@@ -127331,7 +135081,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_242diagonalScale(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1047
+/* "PETSc/Mat.pyx":1056
  *         CHKERR( MatDiagonalScale(self.mat, vecl, vecr) )
  * 
  *     def invertBlockDiagonal(self):             # <<<<<<<<<<<<<<
@@ -127340,23 +135090,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_242diagonalScale(struct PyPetscM
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_247invertBlockDiagonal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_246invertBlockDiagonal[] = "Mat.invertBlockDiagonal(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_247invertBlockDiagonal(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_244invertBlockDiagonal(((struct PyPetscMatObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_246invertBlockDiagonal(((struct PyPetscMatObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_244invertBlockDiagonal(struct PyPetscMatObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_246invertBlockDiagonal(struct PyPetscMatObject *__pyx_v_self) {
   PetscInt __pyx_v_bs;
   PetscInt __pyx_v_m;
   const PetscScalar *__pyx_v_cibdiag;
@@ -127370,7 +135120,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_244invertBlockDiagonal(struct Py
   PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("invertBlockDiagonal", 0);
 
-  /* "PETSc/Mat.pyx":1048
+  /* "PETSc/Mat.pyx":1057
  * 
  *     def invertBlockDiagonal(self):
  *         cdef PetscInt bs = 0, m = 0             # <<<<<<<<<<<<<<
@@ -127380,7 +135130,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_244invertBlockDiagonal(struct Py
   __pyx_v_bs = 0;
   __pyx_v_m = 0;
 
-  /* "PETSc/Mat.pyx":1049
+  /* "PETSc/Mat.pyx":1058
  *     def invertBlockDiagonal(self):
  *         cdef PetscInt bs = 0, m = 0
  *         cdef const_PetscScalar *cibdiag = NULL             # <<<<<<<<<<<<<<
@@ -127389,59 +135139,59 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_244invertBlockDiagonal(struct Py
  */
   __pyx_v_cibdiag = NULL;
 
-  /* "PETSc/Mat.pyx":1050
+  /* "PETSc/Mat.pyx":1059
  *         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_ERR(33, 1050, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetBlockSize(__pyx_v_self->mat, (&__pyx_v_bs))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(33, 1059, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1051
+  /* "PETSc/Mat.pyx":1060
  *         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_ERR(33, 1051, __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 == ((int)-1))) __PYX_ERR(33, 1060, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1052
+  /* "PETSc/Mat.pyx":1061
  *         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_ERR(33, 1052, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatInvertBlockDiagonal(__pyx_v_self->mat, (&__pyx_v_cibdiag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(33, 1061, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1053
+  /* "PETSc/Mat.pyx":1062
  *         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_ERR(33, 1053, __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, 1062, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_ibdiag = ((PyArrayObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Mat.pyx":1054
+  /* "PETSc/Mat.pyx":1063
  *         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_ERR(33, 1054, __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, 1063, __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_ERR(33, 1054, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_bs); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1063, __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_ERR(33, 1054, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_bs); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1063, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(33, 1054, __pyx_L1_error)
+  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(33, 1063, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
@@ -127452,10 +135202,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_244invertBlockDiagonal(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_ERR(33, 1054, __pyx_L1_error)
+  if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_ibdiag), __pyx_n_s_shape, __pyx_t_5) < 0) __PYX_ERR(33, 1063, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/Mat.pyx":1055
+  /* "PETSc/Mat.pyx":1064
  *         cdef ndarray ibdiag = array_s(m*bs, cibdiag)
  *         ibdiag.shape = (toInt(m//bs), toInt(bs), toInt(bs))
  *         return ibdiag.transpose(0, 2, 1)             # <<<<<<<<<<<<<<
@@ -127463,16 +135213,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_244invertBlockDiagonal(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_ERR(33, 1055, __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, 1064, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __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_t_4 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_tuple__61, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1064, __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":1047
+  /* "PETSc/Mat.pyx":1056
  *         CHKERR( MatDiagonalScale(self.mat, vecl, vecr) )
  * 
  *     def invertBlockDiagonal(self):             # <<<<<<<<<<<<<<
@@ -127495,18 +135245,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_244invertBlockDiagonal(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1059
+/* "PETSc/Mat.pyx":1068
  *     # null space
  * 
- *     def setNullSpace(self, NullSpace nsp not None):             # <<<<<<<<<<<<<<
+ *     def setNullSpace(self, NullSpace nsp):             # <<<<<<<<<<<<<<
  *         CHKERR( MatSetNullSpace(self.mat, nsp.nsp) )
  * 
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_249setNullSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_248setNullSpace[] = "Mat.setNullSpace(self, NullSpace nsp)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_249setNullSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscNullSpaceObject *__pyx_v_nsp = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -127519,6 +135269,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_247setNullSpace(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -127529,7 +135280,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_247setNullSpace(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_ERR(33, 1059, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setNullSpace") < 0)) __PYX_ERR(33, 1068, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -127540,14 +135291,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_247setNullSpace(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setNullSpace", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1059, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setNullSpace", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1068, __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_ERR(33, 1059, __pyx_L1_error)
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_246setNullSpace(((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_248setNullSpace(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_nsp);
 
   /* function exit code */
   goto __pyx_L0;
@@ -127558,25 +135309,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_247setNullSpace(PyObject *__pyx_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_246setNullSpace(struct PyPetscMatObject *__pyx_v_self, struct PyPetscNullSpaceObject *__pyx_v_nsp) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_248setNullSpace(struct PyPetscMatObject *__pyx_v_self, struct PyPetscNullSpaceObject *__pyx_v_nsp) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setNullSpace", 0);
 
-  /* "PETSc/Mat.pyx":1060
+  /* "PETSc/Mat.pyx":1069
  * 
- *     def setNullSpace(self, NullSpace nsp not None):
+ *     def setNullSpace(self, NullSpace nsp):
  *         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_ERR(33, 1060, __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 == ((int)-1))) __PYX_ERR(33, 1069, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1059
+  /* "PETSc/Mat.pyx":1068
  *     # null space
  * 
- *     def setNullSpace(self, NullSpace nsp not None):             # <<<<<<<<<<<<<<
+ *     def setNullSpace(self, NullSpace nsp):             # <<<<<<<<<<<<<<
  *         CHKERR( MatSetNullSpace(self.mat, nsp.nsp) )
  * 
  */
@@ -127593,7 +135344,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_246setNullSpace(struct PyPetscMa
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1062
+/* "PETSc/Mat.pyx":1071
  *         CHKERR( MatSetNullSpace(self.mat, nsp.nsp) )
  * 
  *     def getNullSpace(self):             # <<<<<<<<<<<<<<
@@ -127602,23 +135353,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_246setNullSpace(struct PyPetscMa
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_251getNullSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_250getNullSpace[] = "Mat.getNullSpace(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_251getNullSpace(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_248getNullSpace(((struct PyPetscMatObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_250getNullSpace(((struct PyPetscMatObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_248getNullSpace(struct PyPetscMatObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_250getNullSpace(struct PyPetscMatObject *__pyx_v_self) {
   struct PyPetscNullSpaceObject *__pyx_v_nsp = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -127626,28 +135377,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_248getNullSpace(struct PyPetscMa
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getNullSpace", 0);
 
-  /* "PETSc/Mat.pyx":1063
+  /* "PETSc/Mat.pyx":1072
  * 
  *     def getNullSpace(self):
  *         cdef NullSpace nsp = NullSpace()             # <<<<<<<<<<<<<<
  *         CHKERR( MatGetNullSpace(self.mat, &nsp.nsp) )
  *         PetscINCREF(nsp.obj)
  */
-  __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_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":1064
+  /* "PETSc/Mat.pyx":1073
  *     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_ERR(33, 1064, __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 == ((int)-1))) __PYX_ERR(33, 1073, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1065
+  /* "PETSc/Mat.pyx":1074
  *         cdef NullSpace nsp = NullSpace()
  *         CHKERR( MatGetNullSpace(self.mat, &nsp.nsp) )
  *         PetscINCREF(nsp.obj)             # <<<<<<<<<<<<<<
@@ -127656,19 +135407,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_248getNullSpace(struct PyPetscMa
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_nsp->__pyx_base.obj);
 
-  /* "PETSc/Mat.pyx":1066
+  /* "PETSc/Mat.pyx":1075
  *         CHKERR( MatGetNullSpace(self.mat, &nsp.nsp) )
  *         PetscINCREF(nsp.obj)
  *         return nsp             # <<<<<<<<<<<<<<
  * 
- *     def setNearNullSpace(self, NullSpace nsp not None):
+ *     def setTransposeNullSpace(self, NullSpace nsp):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_nsp));
   __pyx_r = ((PyObject *)__pyx_v_nsp);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1062
+  /* "PETSc/Mat.pyx":1071
  *         CHKERR( MatSetNullSpace(self.mat, nsp.nsp) )
  * 
  *     def getNullSpace(self):             # <<<<<<<<<<<<<<
@@ -127688,18 +135439,212 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_248getNullSpace(struct PyPetscMa
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1068
+/* "PETSc/Mat.pyx":1077
  *         return nsp
  * 
- *     def setNearNullSpace(self, NullSpace nsp not None):             # <<<<<<<<<<<<<<
+ *     def setTransposeNullSpace(self, NullSpace nsp):             # <<<<<<<<<<<<<<
+ *         CHKERR( MatSetTransposeNullSpace(self.mat, nsp.nsp) )
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_253setTransposeNullSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_252setTransposeNullSpace[] = "Mat.setTransposeNullSpace(self, NullSpace nsp)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_253setTransposeNullSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscNullSpaceObject *__pyx_v_nsp = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setTransposeNullSpace (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_nsp,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);
+        CYTHON_FALLTHROUGH;
+        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_nsp)) != 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, "setTransposeNullSpace") < 0)) __PYX_ERR(33, 1077, __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_nsp = ((struct PyPetscNullSpaceObject *)values[0]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setTransposeNullSpace", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1077, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.setTransposeNullSpace", __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_ERR(33, 1077, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_252setTransposeNullSpace(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_nsp);
+
+  /* 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_252setTransposeNullSpace(struct PyPetscMatObject *__pyx_v_self, struct PyPetscNullSpaceObject *__pyx_v_nsp) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("setTransposeNullSpace", 0);
+
+  /* "PETSc/Mat.pyx":1078
+ * 
+ *     def setTransposeNullSpace(self, NullSpace nsp):
+ *         CHKERR( MatSetTransposeNullSpace(self.mat, nsp.nsp) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getTransposeNullSpace(self):
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetTransposeNullSpace(__pyx_v_self->mat, __pyx_v_nsp->nsp)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(33, 1078, __pyx_L1_error)
+
+  /* "PETSc/Mat.pyx":1077
+ *         return nsp
+ * 
+ *     def setTransposeNullSpace(self, NullSpace nsp):             # <<<<<<<<<<<<<<
+ *         CHKERR( MatSetTransposeNullSpace(self.mat, nsp.nsp) )
+ * 
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.setTransposeNullSpace", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Mat.pyx":1080
+ *         CHKERR( MatSetTransposeNullSpace(self.mat, nsp.nsp) )
+ * 
+ *     def getTransposeNullSpace(self):             # <<<<<<<<<<<<<<
+ *         cdef NullSpace nsp = NullSpace()
+ *         CHKERR( MatGetTransposeNullSpace(self.mat, &nsp.nsp) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_255getTransposeNullSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_254getTransposeNullSpace[] = "Mat.getTransposeNullSpace(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_255getTransposeNullSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getTransposeNullSpace (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getTransposeNullSpace", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getTransposeNullSpace", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_254getTransposeNullSpace(((struct PyPetscMatObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_254getTransposeNullSpace(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;
+  __Pyx_RefNannySetupContext("getTransposeNullSpace", 0);
+
+  /* "PETSc/Mat.pyx":1081
+ * 
+ *     def getTransposeNullSpace(self):
+ *         cdef NullSpace nsp = NullSpace()             # <<<<<<<<<<<<<<
+ *         CHKERR( MatGetTransposeNullSpace(self.mat, &nsp.nsp) )
+ *         PetscINCREF(nsp.obj)
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_NullSpace), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1081, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_nsp = ((struct PyPetscNullSpaceObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/Mat.pyx":1082
+ *     def getTransposeNullSpace(self):
+ *         cdef NullSpace nsp = NullSpace()
+ *         CHKERR( MatGetTransposeNullSpace(self.mat, &nsp.nsp) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(nsp.obj)
+ *         return nsp
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatGetTransposeNullSpace(__pyx_v_self->mat, (&__pyx_v_nsp->nsp))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(33, 1082, __pyx_L1_error)
+
+  /* "PETSc/Mat.pyx":1083
+ *         cdef NullSpace nsp = NullSpace()
+ *         CHKERR( MatGetTransposeNullSpace(self.mat, &nsp.nsp) )
+ *         PetscINCREF(nsp.obj)             # <<<<<<<<<<<<<<
+ *         return nsp
+ * 
+ */
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_nsp->__pyx_base.obj);
+
+  /* "PETSc/Mat.pyx":1084
+ *         CHKERR( MatGetTransposeNullSpace(self.mat, &nsp.nsp) )
+ *         PetscINCREF(nsp.obj)
+ *         return nsp             # <<<<<<<<<<<<<<
+ * 
+ *     def setNearNullSpace(self, NullSpace nsp):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_nsp));
+  __pyx_r = ((PyObject *)__pyx_v_nsp);
+  goto __pyx_L0;
+
+  /* "PETSc/Mat.pyx":1080
+ *         CHKERR( MatSetTransposeNullSpace(self.mat, nsp.nsp) )
+ * 
+ *     def getTransposeNullSpace(self):             # <<<<<<<<<<<<<<
+ *         cdef NullSpace nsp = NullSpace()
+ *         CHKERR( MatGetTransposeNullSpace(self.mat, &nsp.nsp) )
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.getTransposeNullSpace", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_nsp);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Mat.pyx":1086
+ *         return nsp
+ * 
+ *     def setNearNullSpace(self, NullSpace nsp):             # <<<<<<<<<<<<<<
  *         CHKERR( MatSetNearNullSpace(self.mat, nsp.nsp) )
  * 
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_257setNearNullSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_256setNearNullSpace[] = "Mat.setNearNullSpace(self, NullSpace nsp)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_257setNearNullSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscNullSpaceObject *__pyx_v_nsp = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -127712,6 +135657,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_251setNearNullSpace(PyObject *__
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -127722,7 +135668,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_251setNearNullSpace(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_ERR(33, 1068, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setNearNullSpace") < 0)) __PYX_ERR(33, 1086, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -127733,14 +135679,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_251setNearNullSpace(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setNearNullSpace", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1068, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setNearNullSpace", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1086, __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_ERR(33, 1068, __pyx_L1_error)
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_250setNearNullSpace(((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, 1086, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_256setNearNullSpace(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_nsp);
 
   /* function exit code */
   goto __pyx_L0;
@@ -127751,25 +135697,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_251setNearNullSpace(PyObject *__
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_250setNearNullSpace(struct PyPetscMatObject *__pyx_v_self, struct PyPetscNullSpaceObject *__pyx_v_nsp) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_256setNearNullSpace(struct PyPetscMatObject *__pyx_v_self, struct PyPetscNullSpaceObject *__pyx_v_nsp) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setNearNullSpace", 0);
 
-  /* "PETSc/Mat.pyx":1069
+  /* "PETSc/Mat.pyx":1087
  * 
- *     def setNearNullSpace(self, NullSpace nsp not None):
+ *     def setNearNullSpace(self, NullSpace nsp):
  *         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_ERR(33, 1069, __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 == ((int)-1))) __PYX_ERR(33, 1087, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1068
+  /* "PETSc/Mat.pyx":1086
  *         return nsp
  * 
- *     def setNearNullSpace(self, NullSpace nsp not None):             # <<<<<<<<<<<<<<
+ *     def setNearNullSpace(self, NullSpace nsp):             # <<<<<<<<<<<<<<
  *         CHKERR( MatSetNearNullSpace(self.mat, nsp.nsp) )
  * 
  */
@@ -127786,7 +135732,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_250setNearNullSpace(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1071
+/* "PETSc/Mat.pyx":1089
  *         CHKERR( MatSetNearNullSpace(self.mat, nsp.nsp) )
  * 
  *     def getNearNullSpace(self):             # <<<<<<<<<<<<<<
@@ -127795,23 +135741,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_250setNearNullSpace(struct PyPet
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_259getNearNullSpace(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_258getNearNullSpace[] = "Mat.getNearNullSpace(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_259getNearNullSpace(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_252getNearNullSpace(((struct PyPetscMatObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_258getNearNullSpace(((struct PyPetscMatObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_252getNearNullSpace(struct PyPetscMatObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_258getNearNullSpace(struct PyPetscMatObject *__pyx_v_self) {
   struct PyPetscNullSpaceObject *__pyx_v_nsp = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -127819,28 +135765,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_252getNearNullSpace(struct PyPet
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getNearNullSpace", 0);
 
-  /* "PETSc/Mat.pyx":1072
+  /* "PETSc/Mat.pyx":1090
  * 
  *     def getNearNullSpace(self):
  *         cdef NullSpace nsp = NullSpace()             # <<<<<<<<<<<<<<
  *         CHKERR( MatGetNearNullSpace(self.mat, &nsp.nsp) )
  *         PetscINCREF(nsp.obj)
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_NullSpace), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1090, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_nsp = ((struct PyPetscNullSpaceObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":1073
+  /* "PETSc/Mat.pyx":1091
  *     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_ERR(33, 1073, __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 == ((int)-1))) __PYX_ERR(33, 1091, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1074
+  /* "PETSc/Mat.pyx":1092
  *         cdef NullSpace nsp = NullSpace()
  *         CHKERR( MatGetNearNullSpace(self.mat, &nsp.nsp) )
  *         PetscINCREF(nsp.obj)             # <<<<<<<<<<<<<<
@@ -127849,7 +135795,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_252getNearNullSpace(struct PyPet
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_nsp->__pyx_base.obj);
 
-  /* "PETSc/Mat.pyx":1075
+  /* "PETSc/Mat.pyx":1093
  *         CHKERR( MatGetNearNullSpace(self.mat, &nsp.nsp) )
  *         PetscINCREF(nsp.obj)
  *         return nsp             # <<<<<<<<<<<<<<
@@ -127861,7 +135807,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_252getNearNullSpace(struct PyPet
   __pyx_r = ((PyObject *)__pyx_v_nsp);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1071
+  /* "PETSc/Mat.pyx":1089
  *         CHKERR( MatSetNearNullSpace(self.mat, nsp.nsp) )
  * 
  *     def getNearNullSpace(self):             # <<<<<<<<<<<<<<
@@ -127881,18 +135827,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_252getNearNullSpace(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1079
+/* "PETSc/Mat.pyx":1097
  *     # matrix-vector product
  * 
- *     def mult(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def mult(self, Vec x, Vec y):             # <<<<<<<<<<<<<<
  *         CHKERR( MatMult(self.mat, x.vec, y.vec) )
  * 
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_261mult(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_260mult[] = "Mat.mult(self, Vec x, Vec y)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_261mult(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscVecObject *__pyx_v_y = 0;
   PyObject *__pyx_r = 0;
@@ -127906,7 +135852,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_255mult(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -127915,14 +135863,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_255mult(PyObject *__pyx_v_self,
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 1079, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("mult", 1, 2, 2, 1); __PYX_ERR(33, 1097, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mult") < 0)) __PYX_ERR(33, 1079, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "mult") < 0)) __PYX_ERR(33, 1097, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -127935,15 +135884,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_255mult(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_ERR(33, 1079, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("mult", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1097, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(33, 1097, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(33, 1097, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_260mult(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_x, __pyx_v_y);
 
   /* function exit code */
   goto __pyx_L0;
@@ -127954,25 +135903,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_255mult(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_254mult(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_260mult(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;
   __Pyx_RefNannySetupContext("mult", 0);
 
-  /* "PETSc/Mat.pyx":1080
+  /* "PETSc/Mat.pyx":1098
  * 
- *     def mult(self, Vec x not None, Vec y not None):
+ *     def mult(self, Vec x, Vec y):
  *         CHKERR( MatMult(self.mat, x.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def multAdd(self, Vec x not None, Vec v not None, Vec y not None):
+ *     def multAdd(self, Vec x, Vec v, Vec y):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(33, 1098, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1079
+  /* "PETSc/Mat.pyx":1097
  *     # matrix-vector product
  * 
- *     def mult(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def mult(self, Vec x, Vec y):             # <<<<<<<<<<<<<<
  *         CHKERR( MatMult(self.mat, x.vec, y.vec) )
  * 
  */
@@ -127989,18 +135938,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_254mult(struct PyPetscMatObject
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1082
+/* "PETSc/Mat.pyx":1100
  *         CHKERR( MatMult(self.mat, x.vec, y.vec) )
  * 
- *     def multAdd(self, Vec x not None, Vec v not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def multAdd(self, Vec x, Vec v, Vec y):             # <<<<<<<<<<<<<<
  *         CHKERR( MatMultAdd(self.mat, x.vec, v.vec, y.vec) )
  * 
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_263multAdd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_262multAdd[] = "Mat.multAdd(self, Vec x, Vec v, Vec y)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_263multAdd(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;
@@ -128015,8 +135964,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_257multAdd(PyObject *__pyx_v_sel
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -128025,19 +135977,21 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_257multAdd(PyObject *__pyx_v_sel
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 1082, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("multAdd", 1, 3, 3, 1); __PYX_ERR(33, 1100, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 1082, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("multAdd", 1, 3, 3, 2); __PYX_ERR(33, 1100, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "multAdd") < 0)) __PYX_ERR(33, 1082, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "multAdd") < 0)) __PYX_ERR(33, 1100, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -128052,16 +136006,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_257multAdd(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_ERR(33, 1082, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("multAdd", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1100, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(33, 1100, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "v", 0))) __PYX_ERR(33, 1100, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(33, 1100, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_262multAdd(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_x, __pyx_v_v, __pyx_v_y);
 
   /* function exit code */
   goto __pyx_L0;
@@ -128072,25 +136026,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_257multAdd(PyObject *__pyx_v_sel
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_262multAdd(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;
   __Pyx_RefNannySetupContext("multAdd", 0);
 
-  /* "PETSc/Mat.pyx":1083
+  /* "PETSc/Mat.pyx":1101
  * 
- *     def multAdd(self, Vec x not None, Vec v not None, Vec y not None):
+ *     def multAdd(self, Vec x, Vec v, Vec y):
  *         CHKERR( MatMultAdd(self.mat, x.vec, v.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def multTranspose(self, Vec x not None, Vec y not None):
+ *     def multTranspose(self, Vec x, Vec y):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(33, 1101, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1082
+  /* "PETSc/Mat.pyx":1100
  *         CHKERR( MatMult(self.mat, x.vec, y.vec) )
  * 
- *     def multAdd(self, Vec x not None, Vec v not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def multAdd(self, Vec x, Vec v, Vec y):             # <<<<<<<<<<<<<<
  *         CHKERR( MatMultAdd(self.mat, x.vec, v.vec, y.vec) )
  * 
  */
@@ -128107,18 +136061,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_256multAdd(struct PyPetscMatObje
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1085
+/* "PETSc/Mat.pyx":1103
  *         CHKERR( MatMultAdd(self.mat, x.vec, v.vec, y.vec) )
  * 
- *     def multTranspose(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def multTranspose(self, Vec x, Vec y):             # <<<<<<<<<<<<<<
  *         CHKERR( MatMultTranspose(self.mat, x.vec, y.vec) )
  * 
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_265multTranspose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_264multTranspose[] = "Mat.multTranspose(self, Vec x, Vec y)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_265multTranspose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscVecObject *__pyx_v_y = 0;
   PyObject *__pyx_r = 0;
@@ -128132,7 +136086,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_259multTranspose(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -128141,14 +136097,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_259multTranspose(PyObject *__pyx
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 1085, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("multTranspose", 1, 2, 2, 1); __PYX_ERR(33, 1103, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "multTranspose") < 0)) __PYX_ERR(33, 1085, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "multTranspose") < 0)) __PYX_ERR(33, 1103, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -128161,15 +136118,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_259multTranspose(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("multTranspose", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1085, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("multTranspose", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1103, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(33, 1103, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(33, 1103, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_264multTranspose(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_x, __pyx_v_y);
 
   /* function exit code */
   goto __pyx_L0;
@@ -128180,25 +136137,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_259multTranspose(PyObject *__pyx
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_258multTranspose(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_264multTranspose(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;
   __Pyx_RefNannySetupContext("multTranspose", 0);
 
-  /* "PETSc/Mat.pyx":1086
+  /* "PETSc/Mat.pyx":1104
  * 
- *     def multTranspose(self, Vec x not None, Vec y not None):
+ *     def multTranspose(self, Vec x, Vec y):
  *         CHKERR( MatMultTranspose(self.mat, x.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def multTransposeAdd(self, Vec x not None, Vec v not None, Vec y not None):
+ *     def multTransposeAdd(self, Vec x, Vec v, Vec y):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(33, 1104, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1085
+  /* "PETSc/Mat.pyx":1103
  *         CHKERR( MatMultAdd(self.mat, x.vec, v.vec, y.vec) )
  * 
- *     def multTranspose(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def multTranspose(self, Vec x, Vec y):             # <<<<<<<<<<<<<<
  *         CHKERR( MatMultTranspose(self.mat, x.vec, y.vec) )
  * 
  */
@@ -128215,18 +136172,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_258multTranspose(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1088
+/* "PETSc/Mat.pyx":1106
  *         CHKERR( MatMultTranspose(self.mat, x.vec, y.vec) )
  * 
- *     def multTransposeAdd(self, Vec x not None, Vec v not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def multTransposeAdd(self, Vec x, Vec v, Vec y):             # <<<<<<<<<<<<<<
  *         CHKERR( MatMultTransposeAdd(self.mat, x.vec, v.vec, y.vec) )
  * 
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_267multTransposeAdd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_266multTransposeAdd[] = "Mat.multTransposeAdd(self, Vec x, Vec v, Vec y)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_267multTransposeAdd(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;
@@ -128241,8 +136198,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_261multTransposeAdd(PyObject *__
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -128251,19 +136211,21 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_261multTransposeAdd(PyObject *__
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 1088, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("multTransposeAdd", 1, 3, 3, 1); __PYX_ERR(33, 1106, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 1088, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("multTransposeAdd", 1, 3, 3, 2); __PYX_ERR(33, 1106, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "multTransposeAdd") < 0)) __PYX_ERR(33, 1088, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "multTransposeAdd") < 0)) __PYX_ERR(33, 1106, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -128278,16 +136240,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_261multTransposeAdd(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("multTransposeAdd", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1088, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("multTransposeAdd", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1106, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(33, 1106, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "v", 0))) __PYX_ERR(33, 1106, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(33, 1106, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_266multTransposeAdd(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_x, __pyx_v_v, __pyx_v_y);
 
   /* function exit code */
   goto __pyx_L0;
@@ -128298,25 +136260,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_261multTransposeAdd(PyObject *__
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_266multTransposeAdd(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;
   __Pyx_RefNannySetupContext("multTransposeAdd", 0);
 
-  /* "PETSc/Mat.pyx":1089
+  /* "PETSc/Mat.pyx":1107
  * 
- *     def multTransposeAdd(self, Vec x not None, Vec v not None, Vec y not None):
+ *     def multTransposeAdd(self, Vec x, Vec v, Vec y):
  *         CHKERR( MatMultTransposeAdd(self.mat, x.vec, v.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def multHermitian(self, Vec x not None, Vec y not None):
+ *     def multHermitian(self, Vec x, Vec y):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(33, 1107, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1088
+  /* "PETSc/Mat.pyx":1106
  *         CHKERR( MatMultTranspose(self.mat, x.vec, y.vec) )
  * 
- *     def multTransposeAdd(self, Vec x not None, Vec v not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def multTransposeAdd(self, Vec x, Vec v, Vec y):             # <<<<<<<<<<<<<<
  *         CHKERR( MatMultTransposeAdd(self.mat, x.vec, v.vec, y.vec) )
  * 
  */
@@ -128333,18 +136295,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_260multTransposeAdd(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1091
+/* "PETSc/Mat.pyx":1109
  *         CHKERR( MatMultTransposeAdd(self.mat, x.vec, v.vec, y.vec) )
  * 
- *     def multHermitian(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def multHermitian(self, Vec x, Vec y):             # <<<<<<<<<<<<<<
  *         CHKERR( MatMultHermitian(self.mat, x.vec, y.vec) )
  * 
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_269multHermitian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_268multHermitian[] = "Mat.multHermitian(self, Vec x, Vec y)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_269multHermitian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_x = 0;
   struct PyPetscVecObject *__pyx_v_y = 0;
   PyObject *__pyx_r = 0;
@@ -128358,7 +136320,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_263multHermitian(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -128367,14 +136331,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_263multHermitian(PyObject *__pyx
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 1091, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("multHermitian", 1, 2, 2, 1); __PYX_ERR(33, 1109, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "multHermitian") < 0)) __PYX_ERR(33, 1091, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "multHermitian") < 0)) __PYX_ERR(33, 1109, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -128387,15 +136352,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_263multHermitian(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("multHermitian", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1091, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("multHermitian", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1109, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(33, 1109, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(33, 1109, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_268multHermitian(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_x, __pyx_v_y);
 
   /* function exit code */
   goto __pyx_L0;
@@ -128406,25 +136371,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_263multHermitian(PyObject *__pyx
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_262multHermitian(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_y) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_268multHermitian(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;
   __Pyx_RefNannySetupContext("multHermitian", 0);
 
-  /* "PETSc/Mat.pyx":1092
+  /* "PETSc/Mat.pyx":1110
  * 
- *     def multHermitian(self, Vec x not None, Vec y not None):
+ *     def multHermitian(self, Vec x, Vec y):
  *         CHKERR( MatMultHermitian(self.mat, x.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def multHermitianAdd(self, Vec x not None, Vec v not None, Vec y not None):
+ *     def multHermitianAdd(self, Vec x, Vec v, Vec y):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(33, 1110, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1091
+  /* "PETSc/Mat.pyx":1109
  *         CHKERR( MatMultTransposeAdd(self.mat, x.vec, v.vec, y.vec) )
  * 
- *     def multHermitian(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def multHermitian(self, Vec x, Vec y):             # <<<<<<<<<<<<<<
  *         CHKERR( MatMultHermitian(self.mat, x.vec, y.vec) )
  * 
  */
@@ -128441,18 +136406,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_262multHermitian(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1094
+/* "PETSc/Mat.pyx":1112
  *         CHKERR( MatMultHermitian(self.mat, x.vec, y.vec) )
  * 
- *     def multHermitianAdd(self, Vec x not None, Vec v not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def multHermitianAdd(self, Vec x, Vec v, Vec y):             # <<<<<<<<<<<<<<
  *         CHKERR( MatMultHermitianAdd(self.mat, x.vec, v.vec, y.vec) )
  * 
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_271multHermitianAdd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_270multHermitianAdd[] = "Mat.multHermitianAdd(self, Vec x, Vec v, Vec y)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_271multHermitianAdd(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;
@@ -128467,8 +136432,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_265multHermitianAdd(PyObject *__
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -128477,19 +136445,21 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_265multHermitianAdd(PyObject *__
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 1094, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("multHermitianAdd", 1, 3, 3, 1); __PYX_ERR(33, 1112, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 1094, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("multHermitianAdd", 1, 3, 3, 2); __PYX_ERR(33, 1112, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "multHermitianAdd") < 0)) __PYX_ERR(33, 1094, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "multHermitianAdd") < 0)) __PYX_ERR(33, 1112, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -128504,16 +136474,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_265multHermitianAdd(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("multHermitianAdd", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1094, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("multHermitianAdd", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1112, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(33, 1112, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "v", 0))) __PYX_ERR(33, 1112, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(33, 1112, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_270multHermitianAdd(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_x, __pyx_v_v, __pyx_v_y);
 
   /* function exit code */
   goto __pyx_L0;
@@ -128524,25 +136494,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_265multHermitianAdd(PyObject *__
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_270multHermitianAdd(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;
   __Pyx_RefNannySetupContext("multHermitianAdd", 0);
 
-  /* "PETSc/Mat.pyx":1095
+  /* "PETSc/Mat.pyx":1113
  * 
- *     def multHermitianAdd(self, Vec x not None, Vec v not None, Vec y not None):
+ *     def multHermitianAdd(self, Vec x, Vec v, Vec y):
  *         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_ERR(33, 1095, __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 == ((int)-1))) __PYX_ERR(33, 1113, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1094
+  /* "PETSc/Mat.pyx":1112
  *         CHKERR( MatMultHermitian(self.mat, x.vec, y.vec) )
  * 
- *     def multHermitianAdd(self, Vec x not None, Vec v not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def multHermitianAdd(self, Vec x, Vec v, Vec y):             # <<<<<<<<<<<<<<
  *         CHKERR( MatMultHermitianAdd(self.mat, x.vec, v.vec, y.vec) )
  * 
  */
@@ -128559,18 +136529,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_264multHermitianAdd(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1099
+/* "PETSc/Mat.pyx":1117
  *     # SOR
  * 
- *     def SOR(self, Vec b not None, Vec x not None, omega=1.0, sortype=None, shift=0.0, its=1, lits=1):             # <<<<<<<<<<<<<<
+ *     def SOR(self, Vec b, Vec x, omega=1.0, sortype=None, shift=0.0, its=1, lits=1):             # <<<<<<<<<<<<<<
  *         cdef PetscReal comega = asReal(omega)
  *         cdef PetscMatSORType csortype = SOR_LOCAL_SYMMETRIC_SWEEP
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_273SOR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_272SOR[] = "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_273SOR(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;
@@ -128594,12 +136564,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_267SOR(PyObject *__pyx_v_self, P
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
+        CYTHON_FALLTHROUGH;
         case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -128608,31 +136585,37 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_267SOR(PyObject *__pyx_v_self, P
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_b)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 1099, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("SOR", 0, 2, 7, 1); __PYX_ERR(33, 1117, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_omega);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_sortype);
           if (value) { values[3] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  4:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_shift);
           if (value) { values[4] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  5:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_its);
           if (value) { values[5] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  6:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_lits);
@@ -128640,15 +136623,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_267SOR(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_ERR(33, 1099, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "SOR") < 0)) __PYX_ERR(33, 1117, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
+        CYTHON_FALLTHROUGH;
         case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -128665,15 +136653,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_267SOR(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_ERR(33, 1099, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("SOR", 0, 2, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1117, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "b", 0))) __PYX_ERR(33, 1117, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(33, 1117, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_272SOR(((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;
@@ -128684,7 +136672,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_267SOR(PyObject *__pyx_v_self, P
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_272SOR(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;
@@ -128699,18 +136687,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_266SOR(struct PyPetscMatObject *
   int __pyx_t_5;
   __Pyx_RefNannySetupContext("SOR", 0);
 
-  /* "PETSc/Mat.pyx":1100
+  /* "PETSc/Mat.pyx":1118
  * 
- *     def SOR(self, Vec b not None, Vec x not None, omega=1.0, sortype=None, shift=0.0, its=1, lits=1):
+ *     def SOR(self, Vec b, Vec x, 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_ERR(33, 1100, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_omega); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(33, 1118, __pyx_L1_error)
   __pyx_v_comega = __pyx_t_1;
 
-  /* "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):
+  /* "PETSc/Mat.pyx":1119
+ *     def SOR(self, Vec b, Vec x, 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:
@@ -128718,7 +136706,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_266SOR(struct PyPetscMatObject *
  */
   __pyx_v_csortype = SOR_LOCAL_SYMMETRIC_SWEEP;
 
-  /* "PETSc/Mat.pyx":1102
+  /* "PETSc/Mat.pyx":1120
  *         cdef PetscReal comega = asReal(omega)
  *         cdef PetscMatSORType csortype = SOR_LOCAL_SYMMETRIC_SWEEP
  *         if sortype is not None:             # <<<<<<<<<<<<<<
@@ -128729,17 +136717,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_266SOR(struct PyPetscMatObject *
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/Mat.pyx":1103
+    /* "PETSc/Mat.pyx":1121
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(33, 1103, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_sortype); if (unlikely(__pyx_t_4 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(33, 1121, __pyx_L1_error)
     __pyx_v_csortype = ((MatSORType)__pyx_t_4);
 
-    /* "PETSc/Mat.pyx":1102
+    /* "PETSc/Mat.pyx":1120
  *         cdef PetscReal comega = asReal(omega)
  *         cdef PetscMatSORType csortype = SOR_LOCAL_SYMMETRIC_SWEEP
  *         if sortype is not None:             # <<<<<<<<<<<<<<
@@ -128748,49 +136736,49 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_266SOR(struct PyPetscMatObject *
  */
   }
 
-  /* "PETSc/Mat.pyx":1104
+  /* "PETSc/Mat.pyx":1122
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(33, 1104, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_shift); if (unlikely(__pyx_t_4 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(33, 1122, __pyx_L1_error)
   __pyx_v_cshift = __pyx_t_4;
 
-  /* "PETSc/Mat.pyx":1105
+  /* "PETSc/Mat.pyx":1123
  *             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 == -1L && PyErr_Occurred())) __PYX_ERR(33, 1105, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_its); if (unlikely(__pyx_t_4 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(33, 1123, __pyx_L1_error)
   __pyx_v_cits = __pyx_t_4;
 
-  /* "PETSc/Mat.pyx":1106
+  /* "PETSc/Mat.pyx":1124
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(33, 1106, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_lits); if (unlikely(__pyx_t_4 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(33, 1124, __pyx_L1_error)
   __pyx_v_clits = __pyx_t_4;
 
-  /* "PETSc/Mat.pyx":1107
+  /* "PETSc/Mat.pyx":1125
  *         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_ERR(33, 1107, __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 == ((int)-1))) __PYX_ERR(33, 1125, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1099
+  /* "PETSc/Mat.pyx":1117
  *     # SOR
  * 
- *     def SOR(self, Vec b not None, Vec x not None, omega=1.0, sortype=None, shift=0.0, its=1, lits=1):             # <<<<<<<<<<<<<<
+ *     def SOR(self, Vec b, Vec x, omega=1.0, sortype=None, shift=0.0, its=1, lits=1):             # <<<<<<<<<<<<<<
  *         cdef PetscReal comega = asReal(omega)
  *         cdef PetscMatSORType csortype = SOR_LOCAL_SYMMETRIC_SWEEP
  */
@@ -128807,7 +136795,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_266SOR(struct PyPetscMatObject *
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1111
+/* "PETSc/Mat.pyx":1129
  *     #
  * 
  *     def getDiagonalBlock(self):             # <<<<<<<<<<<<<<
@@ -128816,23 +136804,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_266SOR(struct PyPetscMatObject *
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_275getDiagonalBlock(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_274getDiagonalBlock[] = "Mat.getDiagonalBlock(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_275getDiagonalBlock(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_268getDiagonalBlock(((struct PyPetscMatObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_274getDiagonalBlock(((struct PyPetscMatObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_268getDiagonalBlock(struct PyPetscMatObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274getDiagonalBlock(struct PyPetscMatObject *__pyx_v_self) {
   struct PyPetscMatObject *__pyx_v_submat = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -128840,28 +136828,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_268getDiagonalBlock(struct PyPet
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getDiagonalBlock", 0);
 
-  /* "PETSc/Mat.pyx":1112
+  /* "PETSc/Mat.pyx":1130
  * 
  *     def getDiagonalBlock(self):
  *         cdef Mat submat = Mat()             # <<<<<<<<<<<<<<
  *         CHKERR( MatGetDiagonalBlock(self.mat, &submat.mat) )
  *         PetscINCREF(submat.obj)
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1130, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_submat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":1113
+  /* "PETSc/Mat.pyx":1131
  *     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_ERR(33, 1113, __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 == ((int)-1))) __PYX_ERR(33, 1131, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1114
+  /* "PETSc/Mat.pyx":1132
  *         cdef Mat submat = Mat()
  *         CHKERR( MatGetDiagonalBlock(self.mat, &submat.mat) )
  *         PetscINCREF(submat.obj)             # <<<<<<<<<<<<<<
@@ -128870,19 +136858,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_268getDiagonalBlock(struct PyPet
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_submat->__pyx_base.obj);
 
-  /* "PETSc/Mat.pyx":1115
+  /* "PETSc/Mat.pyx":1133
  *         CHKERR( MatGetDiagonalBlock(self.mat, &submat.mat) )
  *         PetscINCREF(submat.obj)
  *         return submat             # <<<<<<<<<<<<<<
  * 
- *     def increaseOverlap(self, IS iset not None, overlap=1):
+ *     def increaseOverlap(self, IS iset, overlap=1):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_submat));
   __pyx_r = ((PyObject *)__pyx_v_submat);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1111
+  /* "PETSc/Mat.pyx":1129
  *     #
  * 
  *     def getDiagonalBlock(self):             # <<<<<<<<<<<<<<
@@ -128902,18 +136890,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_268getDiagonalBlock(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1117
+/* "PETSc/Mat.pyx":1135
  *         return submat
  * 
- *     def increaseOverlap(self, IS iset not None, overlap=1):             # <<<<<<<<<<<<<<
+ *     def increaseOverlap(self, IS iset, overlap=1):             # <<<<<<<<<<<<<<
  *         cdef PetscInt ival = asInt(overlap)
  *         CHKERR( MatIncreaseOverlap(self.mat, 1, &iset.iset, ival) )
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_277increaseOverlap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_276increaseOverlap[] = "Mat.increaseOverlap(self, IS iset, overlap=1)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_277increaseOverlap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_iset = 0;
   PyObject *__pyx_v_overlap = 0;
   PyObject *__pyx_r = 0;
@@ -128928,7 +136916,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_271increaseOverlap(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -128937,6 +136927,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_271increaseOverlap(PyObject *__p
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_iset)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_overlap);
@@ -128944,11 +136935,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_271increaseOverlap(PyObject *__p
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "increaseOverlap") < 0)) __PYX_ERR(33, 1117, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "increaseOverlap") < 0)) __PYX_ERR(33, 1135, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -128959,14 +136951,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_271increaseOverlap(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("increaseOverlap", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1117, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("increaseOverlap", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1135, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iset), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iset", 0))) __PYX_ERR(33, 1135, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_276increaseOverlap(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_iset, __pyx_v_overlap);
 
   /* function exit code */
   goto __pyx_L0;
@@ -128977,7 +136969,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_271increaseOverlap(PyObject *__p
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_270increaseOverlap(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset, PyObject *__pyx_v_overlap) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_276increaseOverlap(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_iset, PyObject *__pyx_v_overlap) {
   PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -128985,29 +136977,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_270increaseOverlap(struct PyPets
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("increaseOverlap", 0);
 
-  /* "PETSc/Mat.pyx":1118
+  /* "PETSc/Mat.pyx":1136
  * 
- *     def increaseOverlap(self, IS iset not None, overlap=1):
+ *     def increaseOverlap(self, IS iset, 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 == -1L && PyErr_Occurred())) __PYX_ERR(33, 1118, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_overlap); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(33, 1136, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":1119
- *     def increaseOverlap(self, IS iset not None, overlap=1):
+  /* "PETSc/Mat.pyx":1137
+ *     def increaseOverlap(self, IS iset, 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):
+ *     def createSubMatrix(self, IS isrow, 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_ERR(33, 1119, __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 == ((int)-1))) __PYX_ERR(33, 1137, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1117
+  /* "PETSc/Mat.pyx":1135
  *         return submat
  * 
- *     def increaseOverlap(self, IS iset not None, overlap=1):             # <<<<<<<<<<<<<<
+ *     def increaseOverlap(self, IS iset, overlap=1):             # <<<<<<<<<<<<<<
  *         cdef PetscInt ival = asInt(overlap)
  *         CHKERR( MatIncreaseOverlap(self.mat, 1, &iset.iset, ival) )
  */
@@ -129024,24 +137016,24 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_270increaseOverlap(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1121
+/* "PETSc/Mat.pyx":1139
  *         CHKERR( MatIncreaseOverlap(self.mat, 1, &iset.iset, ival) )
  * 
- *     def getSubMatrix(self, IS isrow not None, IS iscol=None, Mat submat=None):             # <<<<<<<<<<<<<<
+ *     def createSubMatrix(self, IS isrow, IS iscol=None, Mat submat=None):             # <<<<<<<<<<<<<<
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         cdef PetscIS ciscol = NULL
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_279createSubMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_278createSubMatrix[] = "Mat.createSubMatrix(self, IS isrow, IS iscol=None, Mat submat=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_279createSubMatrix(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;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getSubMatrix (wrapper)", 0);
+  __Pyx_RefNannySetupContext("createSubMatrix (wrapper)", 0);
   {
     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_isrow,&__pyx_n_s_iscol,&__pyx_n_s_submat,0};
     PyObject* values[3] = {0,0,0};
@@ -129052,8 +137044,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_273getSubMatrix(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -129062,11 +137057,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_273getSubMatrix(PyObject *__pyx_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_isrow)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_iscol);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_submat);
@@ -129074,12 +137071,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_273getSubMatrix(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getSubMatrix") < 0)) __PYX_ERR(33, 1121, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createSubMatrix") < 0)) __PYX_ERR(33, 1139, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -129091,16 +137090,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_273getSubMatrix(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getSubMatrix", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1121, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createSubMatrix", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1139, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.Mat.getSubMatrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isrow), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isrow", 0))) __PYX_ERR(33, 1139, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iscol), __pyx_ptype_8petsc4py_5PETSc_IS, 1, "iscol", 0))) __PYX_ERR(33, 1139, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_submat), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "submat", 0))) __PYX_ERR(33, 1139, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_278createSubMatrix(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isrow, __pyx_v_iscol, __pyx_v_submat);
 
   /* function exit code */
   goto __pyx_L0;
@@ -129111,7 +137110,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_273getSubMatrix(PyObject *__pyx_
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_278createSubMatrix(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;
@@ -129121,20 +137120,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_272getSubMatrix(struct PyPetscMa
   IS __pyx_t_3;
   PyObject *__pyx_t_4 = NULL;
   int __pyx_t_5;
-  __Pyx_RefNannySetupContext("getSubMatrix", 0);
+  __Pyx_RefNannySetupContext("createSubMatrix", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_submat);
 
-  /* "PETSc/Mat.pyx":1122
+  /* "PETSc/Mat.pyx":1140
  * 
- *     def getSubMatrix(self, IS isrow not None, IS iscol=None, Mat submat=None):
+ *     def createSubMatrix(self, IS isrow, IS iscol=None, Mat submat=None):
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX             # <<<<<<<<<<<<<<
  *         cdef PetscIS ciscol = NULL
  *         if iscol is not None: ciscol = iscol.iset
  */
   __pyx_v_reuse = MAT_INITIAL_MATRIX;
 
-  /* "PETSc/Mat.pyx":1123
- *     def getSubMatrix(self, IS isrow not None, IS iscol=None, Mat submat=None):
+  /* "PETSc/Mat.pyx":1141
+ *     def createSubMatrix(self, IS isrow, IS iscol=None, Mat submat=None):
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         cdef PetscIS ciscol = NULL             # <<<<<<<<<<<<<<
  *         if iscol is not None: ciscol = iscol.iset
@@ -129142,7 +137141,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_272getSubMatrix(struct PyPetscMa
  */
   __pyx_v_ciscol = NULL;
 
-  /* "PETSc/Mat.pyx":1124
+  /* "PETSc/Mat.pyx":1142
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         cdef PetscIS ciscol = NULL
  *         if iscol is not None: ciscol = iscol.iset             # <<<<<<<<<<<<<<
@@ -129156,27 +137155,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_272getSubMatrix(struct PyPetscMa
     __pyx_v_ciscol = __pyx_t_3;
   }
 
-  /* "PETSc/Mat.pyx":1125
+  /* "PETSc/Mat.pyx":1143
  *         cdef PetscIS ciscol = NULL
  *         if iscol is not None: ciscol = iscol.iset
  *         if submat is None: submat = Mat()             # <<<<<<<<<<<<<<
  *         if submat.mat != NULL: reuse = MAT_REUSE_MATRIX
- *         CHKERR( MatGetSubMatrix(self.mat, isrow.iset, ciscol,
+ *         CHKERR( MatCreateSubMatrix(self.mat, isrow.iset, ciscol,
  */
   __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 *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1125, __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, 1143, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF_SET(__pyx_v_submat, ((struct PyPetscMatObject *)__pyx_t_4));
     __pyx_t_4 = 0;
   }
 
-  /* "PETSc/Mat.pyx":1126
+  /* "PETSc/Mat.pyx":1144
  *         if iscol is not None: ciscol = iscol.iset
  *         if submat is None: submat = Mat()
  *         if submat.mat != NULL: reuse = MAT_REUSE_MATRIX             # <<<<<<<<<<<<<<
- *         CHKERR( MatGetSubMatrix(self.mat, isrow.iset, ciscol,
+ *         CHKERR( MatCreateSubMatrix(self.mat, isrow.iset, ciscol,
  *                                 reuse, &submat.mat) )
  */
   __pyx_t_1 = ((__pyx_v_submat->mat != NULL) != 0);
@@ -129184,31 +137183,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_272getSubMatrix(struct PyPetscMa
     __pyx_v_reuse = MAT_REUSE_MATRIX;
   }
 
-  /* "PETSc/Mat.pyx":1127
+  /* "PETSc/Mat.pyx":1145
  *         if submat is None: submat = Mat()
  *         if submat.mat != NULL: reuse = MAT_REUSE_MATRIX
- *         CHKERR( MatGetSubMatrix(self.mat, isrow.iset, ciscol,             # <<<<<<<<<<<<<<
+ *         CHKERR( MatCreateSubMatrix(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_ERR(33, 1127, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateSubMatrix(__pyx_v_self->mat, __pyx_v_isrow->iset, __pyx_v_ciscol, __pyx_v_reuse, (&__pyx_v_submat->mat))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(33, 1145, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1129
- *         CHKERR( MatGetSubMatrix(self.mat, isrow.iset, ciscol,
+  /* "PETSc/Mat.pyx":1147
+ *         CHKERR( MatCreateSubMatrix(self.mat, isrow.iset, ciscol,
  *                                 reuse, &submat.mat) )
  *         return submat             # <<<<<<<<<<<<<<
  * 
- *     def getSubMatrices(self, isrows not None, iscols=None, submats=None):
+ *     def createSubMatrices(self, isrows, 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":1121
+  /* "PETSc/Mat.pyx":1139
  *         CHKERR( MatIncreaseOverlap(self.mat, 1, &iset.iset, ival) )
  * 
- *     def getSubMatrix(self, IS isrow not None, IS iscol=None, Mat submat=None):             # <<<<<<<<<<<<<<
+ *     def createSubMatrix(self, IS isrow, IS iscol=None, Mat submat=None):             # <<<<<<<<<<<<<<
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         cdef PetscIS ciscol = NULL
  */
@@ -129216,7 +137215,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_272getSubMatrix(struct PyPetscMa
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_4);
-  __Pyx_AddTraceback("petsc4py.PETSc.Mat.getSubMatrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.createSubMatrix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XDECREF((PyObject *)__pyx_v_submat);
@@ -129225,24 +137224,24 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_272getSubMatrix(struct PyPetscMa
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1131
+/* "PETSc/Mat.pyx":1149
  *         return submat
  * 
- *     def getSubMatrices(self, isrows not None, iscols=None, submats=None):             # <<<<<<<<<<<<<<
+ *     def createSubMatrices(self, isrows, 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_281createSubMatrices(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_280createSubMatrices[] = "Mat.createSubMatrices(self, isrows, iscols=None, submats=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_281createSubMatrices(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);
+  __Pyx_RefNannySetupContext("createSubMatrices (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};
@@ -129253,8 +137252,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_275getSubMatrices(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -129263,11 +137265,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_275getSubMatrices(PyObject *__py
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_isrows)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_iscols);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_submats);
@@ -129275,12 +137279,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_275getSubMatrices(PyObject *__py
         }
       }
       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)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createSubMatrices") < 0)) __PYX_ERR(33, 1149, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -129292,27 +137298,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_275getSubMatrices(PyObject *__py
   }
   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_RaiseArgtupleInvalid("createSubMatrices", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1149, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.Mat.getSubMatrices", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.createSubMatrices", __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);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_280createSubMatrices(((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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_280createSubMatrices(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;
@@ -129333,14 +137332,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274getSubMatrices(struct PyPetsc
   IS __pyx_t_7;
   int __pyx_t_8;
   Mat __pyx_t_9;
-  __Pyx_RefNannySetupContext("getSubMatrices", 0);
+  __Pyx_RefNannySetupContext("createSubMatrices", 0);
   __Pyx_INCREF(__pyx_v_isrows);
   __Pyx_INCREF(__pyx_v_iscols);
   __Pyx_INCREF(__pyx_v_submats);
 
-  /* "PETSc/Mat.pyx":1132
+  /* "PETSc/Mat.pyx":1150
  * 
- *     def getSubMatrices(self, isrows not None, iscols=None, submats=None):
+ *     def createSubMatrices(self, isrows, 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)
@@ -129352,8 +137351,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274getSubMatrices(struct PyPetsc
     __Pyx_DECREF_SET(__pyx_v_iscols, __pyx_v_isrows);
   }
 
-  /* "PETSc/Mat.pyx":1133
- *     def getSubMatrices(self, isrows not None, iscols=None, submats=None):
+  /* "PETSc/Mat.pyx":1151
+ *     def createSubMatrices(self, isrows, 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)
@@ -129361,7 +137360,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274getSubMatrices(struct PyPetsc
  */
   __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_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1151, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_v_isrows);
     __Pyx_GIVEREF(__pyx_v_isrows);
@@ -129369,7 +137368,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274getSubMatrices(struct PyPetsc
     __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_t_4 = PySequence_List(__pyx_v_isrows); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1151, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_3 = __pyx_t_4;
     __pyx_t_4 = 0;
@@ -129377,7 +137376,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274getSubMatrices(struct PyPetsc
   __Pyx_DECREF_SET(__pyx_v_isrows, __pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/Mat.pyx":1134
+  /* "PETSc/Mat.pyx":1152
  *         if iscols is None: iscols = isrows
  *         isrows = [isrows] if isinstance(isrows, IS) else list(isrows)
  *         iscols = [iscols] if isinstance(iscols, IS) else list(iscols)             # <<<<<<<<<<<<<<
@@ -129386,7 +137385,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274getSubMatrices(struct PyPetsc
  */
   __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_t_4 = PyList_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1152, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_v_iscols);
     __Pyx_GIVEREF(__pyx_v_iscols);
@@ -129394,7 +137393,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274getSubMatrices(struct PyPetsc
     __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_t_4 = PySequence_List(__pyx_v_iscols); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1152, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_3 = __pyx_t_4;
     __pyx_t_4 = 0;
@@ -129402,7 +137401,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274getSubMatrices(struct PyPetsc
   __Pyx_DECREF_SET(__pyx_v_iscols, __pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/Mat.pyx":1135
+  /* "PETSc/Mat.pyx":1153
  *         isrows = [isrows] if isinstance(isrows, IS) else list(isrows)
  *         iscols = [iscols] if isinstance(iscols, IS) else list(iscols)
  *         assert len(isrows) == len(iscols)             # <<<<<<<<<<<<<<
@@ -129411,26 +137410,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274getSubMatrices(struct PyPetsc
  */
   #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)
+    __pyx_t_5 = PyObject_Length(__pyx_v_isrows); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(33, 1153, __pyx_L1_error)
+    __pyx_t_6 = PyObject_Length(__pyx_v_iscols); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(33, 1153, __pyx_L1_error)
     if (unlikely(!((__pyx_t_5 == __pyx_t_6) != 0))) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(33, 1135, __pyx_L1_error)
+      __PYX_ERR(33, 1153, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/Mat.pyx":1136
+  /* "PETSc/Mat.pyx":1154
  *         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_t_6 = PyObject_Length(__pyx_v_isrows); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(33, 1154, __pyx_L1_error)
   __pyx_v_n = __pyx_t_6;
 
-  /* "PETSc/Mat.pyx":1137
+  /* "PETSc/Mat.pyx":1155
  *         assert len(isrows) == len(iscols)
  *         cdef Py_ssize_t i, n = len(isrows)
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX             # <<<<<<<<<<<<<<
@@ -129439,7 +137438,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274getSubMatrices(struct PyPetsc
  */
   __pyx_v_reuse = MAT_INITIAL_MATRIX;
 
-  /* "PETSc/Mat.pyx":1138
+  /* "PETSc/Mat.pyx":1156
  *         cdef Py_ssize_t i, n = len(isrows)
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         cdef PetscIS  *cisrows = NULL             # <<<<<<<<<<<<<<
@@ -129448,7 +137447,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274getSubMatrices(struct PyPetsc
  */
   __pyx_v_cisrows = NULL;
 
-  /* "PETSc/Mat.pyx":1139
+  /* "PETSc/Mat.pyx":1157
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         cdef PetscIS  *cisrows = NULL
  *         cdef PetscIS  *ciscols = NULL             # <<<<<<<<<<<<<<
@@ -129457,7 +137456,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274getSubMatrices(struct PyPetsc
  */
   __pyx_v_ciscols = NULL;
 
-  /* "PETSc/Mat.pyx":1140
+  /* "PETSc/Mat.pyx":1158
  *         cdef PetscIS  *cisrows = NULL
  *         cdef PetscIS  *ciscols = NULL
  *         cdef PetscMat *cmats   = NULL             # <<<<<<<<<<<<<<
@@ -129466,22 +137465,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274getSubMatrices(struct PyPetsc
  */
   __pyx_v_cmats = NULL;
 
-  /* "PETSc/Mat.pyx":1143
+  /* "PETSc/Mat.pyx":1161
  *         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_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_n)); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1161, __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_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, 1161, __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
+  /* "PETSc/Mat.pyx":1162
  *         cdef Mat mat
  *         tmp1 = oarray_p(empty_p(n), NULL, <void**>&cisrows)
  *         for i from 0 <= i < n: cisrows[i] = (<IS?>isrows[i]).iset             # <<<<<<<<<<<<<<
@@ -129490,30 +137489,30 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274getSubMatrices(struct PyPetsc
  */
   __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_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, 1162, __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)
+    if (!(likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_8petsc4py_5PETSc_IS)))) __PYX_ERR(33, 1162, __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
+  /* "PETSc/Mat.pyx":1163
  *         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_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_n)); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1163, __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_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, 1163, __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
+  /* "PETSc/Mat.pyx":1164
  *         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             # <<<<<<<<<<<<<<
@@ -129522,15 +137521,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274getSubMatrices(struct PyPetsc
  */
   __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_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, 1164, __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)
+    if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_IS)))) __PYX_ERR(33, 1164, __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
+  /* "PETSc/Mat.pyx":1165
  *         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:             # <<<<<<<<<<<<<<
@@ -129541,7 +137540,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274getSubMatrices(struct PyPetsc
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/Mat.pyx":1148
+    /* "PETSc/Mat.pyx":1166
  *         for i from 0 <= i < n: ciscols[i] = (<IS?>iscols[i]).iset
  *         if submats is not None:
  *             reuse = MAT_REUSE_MATRIX             # <<<<<<<<<<<<<<
@@ -129550,19 +137549,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274getSubMatrices(struct PyPetsc
  */
     __pyx_v_reuse = MAT_REUSE_MATRIX;
 
-    /* "PETSc/Mat.pyx":1149
+    /* "PETSc/Mat.pyx":1167
  *         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_t_3 = PySequence_List(__pyx_v_submats); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1167, __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
+    /* "PETSc/Mat.pyx":1168
  *             reuse = MAT_REUSE_MATRIX
  *             submats = list(submats)
  *             assert len(submats) == len(isrows)             # <<<<<<<<<<<<<<
@@ -129571,42 +137570,42 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274getSubMatrices(struct PyPetsc
  */
     #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)
+      __pyx_t_6 = PyObject_Length(__pyx_v_submats); if (unlikely(__pyx_t_6 == ((Py_ssize_t)-1))) __PYX_ERR(33, 1168, __pyx_L1_error)
+      __pyx_t_5 = PyObject_Length(__pyx_v_isrows); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(33, 1168, __pyx_L1_error)
       if (unlikely(!((__pyx_t_6 == __pyx_t_5) != 0))) {
         PyErr_SetNone(PyExc_AssertionError);
-        __PYX_ERR(33, 1150, __pyx_L1_error)
+        __PYX_ERR(33, 1168, __pyx_L1_error)
       }
     }
     #endif
 
-    /* "PETSc/Mat.pyx":1151
+    /* "PETSc/Mat.pyx":1169
  *             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) )
+ *         CHKERR( MatCreateSubMatrices(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)
+    __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 == ((int)-1))) __PYX_ERR(33, 1169, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":1152
+    /* "PETSc/Mat.pyx":1170
  *             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) )
+ *         CHKERR( MatCreateSubMatrices(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_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, 1170, __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)
+      if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_Mat)))) __PYX_ERR(33, 1170, __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
+    /* "PETSc/Mat.pyx":1165
  *         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:             # <<<<<<<<<<<<<<
@@ -129615,18 +137614,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274getSubMatrices(struct PyPetsc
  */
   }
 
-  /* "PETSc/Mat.pyx":1153
+  /* "PETSc/Mat.pyx":1171
  *             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) )             # <<<<<<<<<<<<<<
+ *         CHKERR( MatCreateSubMatrices(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)
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatCreateSubMatrices(__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 == ((int)-1))) __PYX_ERR(33, 1171, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1154
+  /* "PETSc/Mat.pyx":1172
  *             for i from 0 <= i < n: cmats[i] = (<Mat?>submats[i]).mat
- *         CHKERR( MatGetSubMatrices(self.mat, <PetscInt>n, cisrows, ciscols, reuse, &cmats) )
+ *         CHKERR( MatCreateSubMatrices(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
@@ -129636,8 +137635,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274getSubMatrices(struct PyPetsc
     __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) )
+  /* "PETSc/Mat.pyx":1173
+ *         CHKERR( MatCreateSubMatrices(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
@@ -129646,14 +137645,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274getSubMatrices(struct PyPetsc
   __pyx_t_1 = ((__pyx_v_reuse == MAT_INITIAL_MATRIX) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/Mat.pyx":1156
+    /* "PETSc/Mat.pyx":1174
  *         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_t_3 = PyList_New(1 * ((__pyx_v_n<0) ? 0:__pyx_v_n)); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1174, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     { Py_ssize_t __pyx_temp;
       for (__pyx_temp=0; __pyx_temp < __pyx_v_n; __pyx_temp++) {
@@ -129665,7 +137664,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274getSubMatrices(struct PyPetsc
     __Pyx_DECREF_SET(__pyx_v_submats, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "PETSc/Mat.pyx":1157
+    /* "PETSc/Mat.pyx":1175
  *         if reuse == MAT_INITIAL_MATRIX:
  *             submats = [None] * n
  *             for i from 0 <= i < n:             # <<<<<<<<<<<<<<
@@ -129675,21 +137674,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274getSubMatrices(struct PyPetsc
     __pyx_t_5 = __pyx_v_n;
     for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_5; __pyx_v_i++) {
 
-      /* "PETSc/Mat.pyx":1158
+      /* "PETSc/Mat.pyx":1176
  *             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_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1176, __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)
+      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, 1176, __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
+      /* "PETSc/Mat.pyx":1177
  *             for i from 0 <= i < n:
  *                 submats[i] = mat = Mat()
  *                 mat.mat = cmats[i]             # <<<<<<<<<<<<<<
@@ -129699,8 +137698,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274getSubMatrices(struct PyPetsc
       __pyx_v_mat->mat = (__pyx_v_cmats[__pyx_v_i]);
     }
 
-    /* "PETSc/Mat.pyx":1155
- *         CHKERR( MatGetSubMatrices(self.mat, <PetscInt>n, cisrows, ciscols, reuse, &cmats) )
+    /* "PETSc/Mat.pyx":1173
+ *         CHKERR( MatCreateSubMatrices(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
@@ -129708,16 +137707,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274getSubMatrices(struct PyPetsc
  */
   }
 
-  /* "PETSc/Mat.pyx":1160
+  /* "PETSc/Mat.pyx":1178
  *                 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)
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDestroyMatrices(((PetscInt)__pyx_v_n), (&__pyx_v_cmats))); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(33, 1178, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1161
+  /* "PETSc/Mat.pyx":1179
  *                 mat.mat = cmats[i]
  *         CHKERR( MatDestroyMatrices(<PetscInt>n, &cmats) )
  *         return submats             # <<<<<<<<<<<<<<
@@ -129729,10 +137728,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274getSubMatrices(struct PyPetsc
   __pyx_r = __pyx_v_submats;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1131
+  /* "PETSc/Mat.pyx":1149
  *         return submat
  * 
- *     def getSubMatrices(self, isrows not None, iscols=None, submats=None):             # <<<<<<<<<<<<<<
+ *     def createSubMatrices(self, isrows, iscols=None, submats=None):             # <<<<<<<<<<<<<<
  *         if iscols is None: iscols = isrows
  *         isrows = [isrows] if isinstance(isrows, IS) else list(isrows)
  */
@@ -129741,7 +137740,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274getSubMatrices(struct PyPetsc
   __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_AddTraceback("petsc4py.PETSc.Mat.createSubMatrices", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_tmp1);
@@ -129755,18 +137754,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_274getSubMatrices(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1165
+/* "PETSc/Mat.pyx":1183
  *     #
  * 
- *     def getLocalSubMatrix(self, IS isrow not None, IS iscol not None, Mat submat=None):             # <<<<<<<<<<<<<<
+ *     def getLocalSubMatrix(self, IS isrow, IS iscol, Mat submat=None):             # <<<<<<<<<<<<<<
  *         if submat is None: submat = Mat()
  *         else: CHKERR( MatDestroy(&submat.mat) )
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_283getLocalSubMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_282getLocalSubMatrix[] = "Mat.getLocalSubMatrix(self, IS isrow, IS iscol, Mat submat=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_283getLocalSubMatrix(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;
@@ -129782,8 +137781,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_277getLocalSubMatrix(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -129792,11 +137794,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_277getLocalSubMatrix(PyObject *_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_isrow)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 1165, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("getLocalSubMatrix", 0, 2, 3, 1); __PYX_ERR(33, 1183, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_submat);
@@ -129804,11 +137808,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_277getLocalSubMatrix(PyObject *_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getLocalSubMatrix") < 0)) __PYX_ERR(33, 1165, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getLocalSubMatrix") < 0)) __PYX_ERR(33, 1183, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -129821,16 +137826,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_277getLocalSubMatrix(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getLocalSubMatrix", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1165, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getLocalSubMatrix", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1183, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isrow), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isrow", 0))) __PYX_ERR(33, 1183, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iscol), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iscol", 0))) __PYX_ERR(33, 1183, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_submat), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "submat", 0))) __PYX_ERR(33, 1183, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_282getLocalSubMatrix(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isrow, __pyx_v_iscol, __pyx_v_submat);
 
   /* function exit code */
   goto __pyx_L0;
@@ -129841,7 +137846,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_277getLocalSubMatrix(PyObject *_
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_282getLocalSubMatrix(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;
@@ -129851,9 +137856,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_276getLocalSubMatrix(struct PyPe
   __Pyx_RefNannySetupContext("getLocalSubMatrix", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_submat);
 
-  /* "PETSc/Mat.pyx":1166
+  /* "PETSc/Mat.pyx":1184
  * 
- *     def getLocalSubMatrix(self, IS isrow not None, IS iscol not None, Mat submat=None):
+ *     def getLocalSubMatrix(self, IS isrow, IS iscol, Mat submat=None):
  *         if submat is None: submat = Mat()             # <<<<<<<<<<<<<<
  *         else: CHKERR( MatDestroy(&submat.mat) )
  *         CHKERR( MatGetLocalSubMatrix(self.mat, isrow.iset, iscol.iset, &submat.mat) )
@@ -129861,50 +137866,50 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_276getLocalSubMatrix(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 *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1166, __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, 1184, __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;
   }
 
-  /* "PETSc/Mat.pyx":1167
- *     def getLocalSubMatrix(self, IS isrow not None, IS iscol not None, Mat submat=None):
+  /* "PETSc/Mat.pyx":1185
+ *     def getLocalSubMatrix(self, IS isrow, IS iscol, 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
  */
   /*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_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDestroy((&__pyx_v_submat->mat))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(33, 1185, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":1168
+  /* "PETSc/Mat.pyx":1186
  *         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_ERR(33, 1168, __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 == ((int)-1))) __PYX_ERR(33, 1186, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1169
+  /* "PETSc/Mat.pyx":1187
  *         else: CHKERR( MatDestroy(&submat.mat) )
  *         CHKERR( MatGetLocalSubMatrix(self.mat, isrow.iset, iscol.iset, &submat.mat) )
  *         return submat             # <<<<<<<<<<<<<<
  * 
- *     def restoreLocalSubMatrix(self, IS isrow not None, IS iscol not None, Mat submat not None):
+ *     def restoreLocalSubMatrix(self, IS isrow, IS iscol, Mat submat):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_submat));
   __pyx_r = ((PyObject *)__pyx_v_submat);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1165
+  /* "PETSc/Mat.pyx":1183
  *     #
  * 
- *     def getLocalSubMatrix(self, IS isrow not None, IS iscol not None, Mat submat=None):             # <<<<<<<<<<<<<<
+ *     def getLocalSubMatrix(self, IS isrow, IS iscol, Mat submat=None):             # <<<<<<<<<<<<<<
  *         if submat is None: submat = Mat()
  *         else: CHKERR( MatDestroy(&submat.mat) )
  */
@@ -129921,18 +137926,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_276getLocalSubMatrix(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1171
+/* "PETSc/Mat.pyx":1189
  *         return submat
  * 
- *     def restoreLocalSubMatrix(self, IS isrow not None, IS iscol not None, Mat submat not None):             # <<<<<<<<<<<<<<
+ *     def restoreLocalSubMatrix(self, IS isrow, IS iscol, Mat submat):             # <<<<<<<<<<<<<<
  *         CHKERR( MatRestoreLocalSubMatrix(self.mat, isrow.iset, iscol.iset, &submat.mat) )
  * 
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_285restoreLocalSubMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_284restoreLocalSubMatrix[] = "Mat.restoreLocalSubMatrix(self, IS isrow, IS iscol, Mat submat)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_285restoreLocalSubMatrix(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;
@@ -129947,8 +137952,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_279restoreLocalSubMatrix(PyObjec
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -129957,19 +137965,21 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_279restoreLocalSubMatrix(PyObjec
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_isrow)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 1171, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("restoreLocalSubMatrix", 1, 3, 3, 1); __PYX_ERR(33, 1189, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 1171, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("restoreLocalSubMatrix", 1, 3, 3, 2); __PYX_ERR(33, 1189, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "restoreLocalSubMatrix") < 0)) __PYX_ERR(33, 1171, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "restoreLocalSubMatrix") < 0)) __PYX_ERR(33, 1189, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -129984,16 +137994,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_279restoreLocalSubMatrix(PyObjec
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("restoreLocalSubMatrix", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1171, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("restoreLocalSubMatrix", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1189, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isrow), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isrow", 0))) __PYX_ERR(33, 1189, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iscol), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iscol", 0))) __PYX_ERR(33, 1189, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_submat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "submat", 0))) __PYX_ERR(33, 1189, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_284restoreLocalSubMatrix(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isrow, __pyx_v_iscol, __pyx_v_submat);
 
   /* function exit code */
   goto __pyx_L0;
@@ -130004,25 +138014,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_279restoreLocalSubMatrix(PyObjec
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_284restoreLocalSubMatrix(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;
   __Pyx_RefNannySetupContext("restoreLocalSubMatrix", 0);
 
-  /* "PETSc/Mat.pyx":1172
+  /* "PETSc/Mat.pyx":1190
  * 
- *     def restoreLocalSubMatrix(self, IS isrow not None, IS iscol not None, Mat submat not None):
+ *     def restoreLocalSubMatrix(self, IS isrow, IS iscol, Mat submat):
  *         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_ERR(33, 1172, __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 == ((int)-1))) __PYX_ERR(33, 1190, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1171
+  /* "PETSc/Mat.pyx":1189
  *         return submat
  * 
- *     def restoreLocalSubMatrix(self, IS isrow not None, IS iscol not None, Mat submat not None):             # <<<<<<<<<<<<<<
+ *     def restoreLocalSubMatrix(self, IS isrow, IS iscol, Mat submat):             # <<<<<<<<<<<<<<
  *         CHKERR( MatRestoreLocalSubMatrix(self.mat, isrow.iset, iscol.iset, &submat.mat) )
  * 
  */
@@ -130039,7 +138049,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_278restoreLocalSubMatrix(struct
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1176
+/* "PETSc/Mat.pyx":1194
  *     #
  * 
  *     def norm(self, norm_type=None):             # <<<<<<<<<<<<<<
@@ -130048,9 +138058,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_278restoreLocalSubMatrix(struct
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_287norm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_286norm[] = "Mat.norm(self, norm_type=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_287norm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_norm_type = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -130064,6 +138074,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_281norm(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -130076,11 +138087,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_281norm(PyObject *__pyx_v_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "norm") < 0)) __PYX_ERR(33, 1176, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "norm") < 0)) __PYX_ERR(33, 1194, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -130089,20 +138101,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_281norm(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_ERR(33, 1176, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("norm", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1194, __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_280norm(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_norm_type);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_286norm(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_norm_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_280norm(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_norm_type) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_286norm(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];
@@ -130117,7 +138129,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_280norm(struct PyPetscMatObject
   PyObject *__pyx_t_7 = NULL;
   __Pyx_RefNannySetupContext("norm", 0);
 
-  /* "PETSc/Mat.pyx":1177
+  /* "PETSc/Mat.pyx":1195
  * 
  *     def norm(self, norm_type=None):
  *         cdef PetscNormType norm_1_2 = PETSC_NORM_1_AND_2             # <<<<<<<<<<<<<<
@@ -130126,7 +138138,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_280norm(struct PyPetscMatObject
  */
   __pyx_v_norm_1_2 = NORM_1_AND_2;
 
-  /* "PETSc/Mat.pyx":1178
+  /* "PETSc/Mat.pyx":1196
  *     def norm(self, norm_type=None):
  *         cdef PetscNormType norm_1_2 = PETSC_NORM_1_AND_2
  *         cdef PetscNormType ntype = PETSC_NORM_FROBENIUS             # <<<<<<<<<<<<<<
@@ -130135,7 +138147,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_280norm(struct PyPetscMatObject
  */
   __pyx_v_ntype = NORM_FROBENIUS;
 
-  /* "PETSc/Mat.pyx":1179
+  /* "PETSc/Mat.pyx":1197
  *         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             # <<<<<<<<<<<<<<
@@ -130145,20 +138157,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_280norm(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)__Pyx_PyInt_As_NormType(__pyx_v_norm_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 1179, __pyx_L1_error)
+    __pyx_t_3 = ((NormType)__Pyx_PyInt_As_NormType(__pyx_v_norm_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(33, 1197, __pyx_L1_error)
     __pyx_v_ntype = __pyx_t_3;
   }
 
-  /* "PETSc/Mat.pyx":1181
+  /* "PETSc/Mat.pyx":1199
  *         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_ERR(33, 1181, __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 == ((int)-1))) __PYX_ERR(33, 1199, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1182
+  /* "PETSc/Mat.pyx":1200
  *         cdef PetscReal rval[2]
  *         CHKERR( MatNorm(self.mat, ntype, rval) )
  *         if ntype != norm_1_2: return toReal(rval[0])             # <<<<<<<<<<<<<<
@@ -130168,14 +138180,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_280norm(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_ERR(33, 1182, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_rval[0])); if (unlikely(!__pyx_t_5)) __PYX_ERR(33, 1200, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_r = __pyx_t_5;
     __pyx_t_5 = 0;
     goto __pyx_L0;
   }
 
-  /* "PETSc/Mat.pyx":1183
+  /* "PETSc/Mat.pyx":1201
  *         CHKERR( MatNorm(self.mat, ntype, rval) )
  *         if ntype != norm_1_2: return toReal(rval[0])
  *         else: return (toReal(rval[0]), toReal(rval[1]))             # <<<<<<<<<<<<<<
@@ -130184,11 +138196,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_280norm(struct PyPetscMatObject
  */
   /*else*/ {
     __Pyx_XDECREF(__pyx_r);
-    __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_t_5 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_rval[0])); if (unlikely(!__pyx_t_5)) __PYX_ERR(33, 1201, __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_ERR(33, 1183, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_toReal((__pyx_v_rval[1])); if (unlikely(!__pyx_t_6)) __PYX_ERR(33, 1201, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
-    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 1183, __pyx_L1_error)
+    __pyx_t_7 = PyTuple_New(2); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 1201, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_7);
     __Pyx_GIVEREF(__pyx_t_5);
     PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_5);
@@ -130201,7 +138213,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_280norm(struct PyPetscMatObject
     goto __pyx_L0;
   }
 
-  /* "PETSc/Mat.pyx":1176
+  /* "PETSc/Mat.pyx":1194
  *     #
  * 
  *     def norm(self, norm_type=None):             # <<<<<<<<<<<<<<
@@ -130222,7 +138234,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_280norm(struct PyPetscMatObject
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1185
+/* "PETSc/Mat.pyx":1203
  *         else: return (toReal(rval[0]), toReal(rval[1]))
  * 
  *     def scale(self, alpha):             # <<<<<<<<<<<<<<
@@ -130231,9 +138243,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_280norm(struct PyPetscMatObject
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_289scale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_288scale[] = "Mat.scale(self, alpha)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_289scale(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_alpha = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -130246,6 +138258,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_283scale(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -130256,7 +138269,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_283scale(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_ERR(33, 1185, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "scale") < 0)) __PYX_ERR(33, 1203, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -130267,20 +138280,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_283scale(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_ERR(33, 1185, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("scale", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1203, __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_282scale(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_alpha);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_288scale(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_alpha);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_282scale(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_alpha) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_288scale(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_alpha) {
   PetscScalar __pyx_v_sval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -130288,26 +138301,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_282scale(struct PyPetscMatObject
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("scale", 0);
 
-  /* "PETSc/Mat.pyx":1186
+  /* "PETSc/Mat.pyx":1204
  * 
  *     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_ERR(33, 1186, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(__pyx_t_1 == ((PetscScalar)((PetscScalar)(-1.0))) && PyErr_Occurred())) __PYX_ERR(33, 1204, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":1187
+  /* "PETSc/Mat.pyx":1205
  *     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_ERR(33, 1187, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatScale(__pyx_v_self->mat, __pyx_v_sval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(33, 1205, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1185
+  /* "PETSc/Mat.pyx":1203
  *         else: return (toReal(rval[0]), toReal(rval[1]))
  * 
  *     def scale(self, alpha):             # <<<<<<<<<<<<<<
@@ -130327,7 +138340,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_282scale(struct PyPetscMatObject
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1189
+/* "PETSc/Mat.pyx":1207
  *         CHKERR( MatScale(self.mat, sval) )
  * 
  *     def shift(self, alpha):             # <<<<<<<<<<<<<<
@@ -130336,9 +138349,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_282scale(struct PyPetscMatObject
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_291shift(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_290shift[] = "Mat.shift(self, alpha)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_291shift(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_alpha = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -130351,6 +138364,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_285shift(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -130361,7 +138375,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_285shift(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_ERR(33, 1189, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "shift") < 0)) __PYX_ERR(33, 1207, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -130372,20 +138386,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_285shift(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_ERR(33, 1189, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("shift", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1207, __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_284shift(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_alpha);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_290shift(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_alpha);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_284shift(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_alpha) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_290shift(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_alpha) {
   PetscScalar __pyx_v_sval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -130393,26 +138407,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_284shift(struct PyPetscMatObject
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("shift", 0);
 
-  /* "PETSc/Mat.pyx":1190
+  /* "PETSc/Mat.pyx":1208
  * 
  *     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_ERR(33, 1190, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(__pyx_t_1 == ((PetscScalar)((PetscScalar)(-1.0))) && PyErr_Occurred())) __PYX_ERR(33, 1208, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":1191
+  /* "PETSc/Mat.pyx":1209
  *     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_ERR(33, 1191, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatShift(__pyx_v_self->mat, __pyx_v_sval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(33, 1209, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1189
+  /* "PETSc/Mat.pyx":1207
  *         CHKERR( MatScale(self.mat, sval) )
  * 
  *     def shift(self, alpha):             # <<<<<<<<<<<<<<
@@ -130432,7 +138446,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_284shift(struct PyPetscMatObject
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1193
+/* "PETSc/Mat.pyx":1211
  *         CHKERR( MatShift(self.mat, sval) )
  * 
  *     def chop(self, tol):             # <<<<<<<<<<<<<<
@@ -130441,9 +138455,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_284shift(struct PyPetscMatObject
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_293chop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_292chop[] = "Mat.chop(self, tol)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_293chop(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_tol = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -130456,6 +138470,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_287chop(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -130466,7 +138481,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_287chop(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_ERR(33, 1193, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "chop") < 0)) __PYX_ERR(33, 1211, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -130477,20 +138492,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_287chop(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_ERR(33, 1193, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("chop", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1211, __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_286chop(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_tol);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_292chop(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_tol);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_286chop(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_tol) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_292chop(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_tol) {
   PetscReal __pyx_v_rval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -130498,26 +138513,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_286chop(struct PyPetscMatObject
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("chop", 0);
 
-  /* "PETSc/Mat.pyx":1194
+  /* "PETSc/Mat.pyx":1212
  * 
  *     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_ERR(33, 1194, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_tol); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(33, 1212, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":1195
+  /* "PETSc/Mat.pyx":1213
  *     def chop(self, tol):
  *         cdef PetscReal rval = asReal(tol)
  *         CHKERR( MatChop(self.mat, rval) )             # <<<<<<<<<<<<<<
  * 
- *     def axpy(self, alpha, Mat X not None, structure=None):
+ *     def axpy(self, alpha, Mat X, 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_ERR(33, 1195, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatChop(__pyx_v_self->mat, __pyx_v_rval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(33, 1213, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1193
+  /* "PETSc/Mat.pyx":1211
  *         CHKERR( MatShift(self.mat, sval) )
  * 
  *     def chop(self, tol):             # <<<<<<<<<<<<<<
@@ -130537,18 +138552,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_286chop(struct PyPetscMatObject
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1197
+/* "PETSc/Mat.pyx":1215
  *         CHKERR( MatChop(self.mat, rval) )
  * 
- *     def axpy(self, alpha, Mat X not None, structure=None):             # <<<<<<<<<<<<<<
+ *     def axpy(self, alpha, Mat X, structure=None):             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval = asScalar(alpha)
  *         cdef PetscMatStructure flag = matstructure(structure)
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_295axpy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_294axpy[] = "Mat.axpy(self, alpha, Mat X, structure=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_295axpy(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;
@@ -130564,8 +138579,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_289axpy(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -130574,11 +138592,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_289axpy(PyObject *__pyx_v_self,
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_alpha)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 1197, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("axpy", 0, 2, 3, 1); __PYX_ERR(33, 1215, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_structure);
@@ -130586,11 +138606,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_289axpy(PyObject *__pyx_v_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "axpy") < 0)) __PYX_ERR(33, 1197, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "axpy") < 0)) __PYX_ERR(33, 1215, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -130603,14 +138624,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_289axpy(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_ERR(33, 1197, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("axpy", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1215, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_X), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "X", 0))) __PYX_ERR(33, 1215, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_294axpy(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_alpha, __pyx_v_X, __pyx_v_structure);
 
   /* function exit code */
   goto __pyx_L0;
@@ -130621,7 +138642,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_289axpy(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_294axpy(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;
@@ -130631,39 +138652,39 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_288axpy(struct PyPetscMatObject
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("axpy", 0);
 
-  /* "PETSc/Mat.pyx":1198
+  /* "PETSc/Mat.pyx":1216
  * 
- *     def axpy(self, alpha, Mat X not None, structure=None):
+ *     def axpy(self, alpha, Mat X, 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_ERR(33, 1198, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(__pyx_t_1 == ((PetscScalar)((PetscScalar)(-1.0))) && PyErr_Occurred())) __PYX_ERR(33, 1216, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":1199
- *     def axpy(self, alpha, Mat X not None, structure=None):
+  /* "PETSc/Mat.pyx":1217
+ *     def axpy(self, alpha, Mat X, 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)-1L))) __PYX_ERR(33, 1199, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_matstructure(__pyx_v_structure); if (unlikely(__pyx_t_2 == ((MatStructure)((MatStructure)-1L)))) __PYX_ERR(33, 1217, __pyx_L1_error)
   __pyx_v_flag = __pyx_t_2;
 
-  /* "PETSc/Mat.pyx":1200
+  /* "PETSc/Mat.pyx":1218
  *         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):
+ *     def aypx(self, alpha, Mat X, 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_ERR(33, 1200, __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 == ((int)-1))) __PYX_ERR(33, 1218, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1197
+  /* "PETSc/Mat.pyx":1215
  *         CHKERR( MatChop(self.mat, rval) )
  * 
- *     def axpy(self, alpha, Mat X not None, structure=None):             # <<<<<<<<<<<<<<
+ *     def axpy(self, alpha, Mat X, structure=None):             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval = asScalar(alpha)
  *         cdef PetscMatStructure flag = matstructure(structure)
  */
@@ -130680,18 +138701,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_288axpy(struct PyPetscMatObject
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1202
+/* "PETSc/Mat.pyx":1220
  *         CHKERR( MatAXPY(self.mat, sval, X.mat, flag) )
  * 
- *     def aypx(self, alpha, Mat X not None, structure=None):             # <<<<<<<<<<<<<<
+ *     def aypx(self, alpha, Mat X, structure=None):             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval = asScalar(alpha)
  *         cdef PetscMatStructure flag = matstructure(structure)
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_297aypx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_296aypx[] = "Mat.aypx(self, alpha, Mat X, structure=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_297aypx(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;
@@ -130707,8 +138728,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_291aypx(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -130717,11 +138741,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_291aypx(PyObject *__pyx_v_self,
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_alpha)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 1202, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("aypx", 0, 2, 3, 1); __PYX_ERR(33, 1220, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_structure);
@@ -130729,11 +138755,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_291aypx(PyObject *__pyx_v_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "aypx") < 0)) __PYX_ERR(33, 1202, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "aypx") < 0)) __PYX_ERR(33, 1220, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -130746,14 +138773,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_291aypx(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_ERR(33, 1202, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("aypx", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1220, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_X), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "X", 0))) __PYX_ERR(33, 1220, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_296aypx(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_alpha, __pyx_v_X, __pyx_v_structure);
 
   /* function exit code */
   goto __pyx_L0;
@@ -130764,7 +138791,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_291aypx(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_296aypx(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;
@@ -130774,39 +138801,39 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_290aypx(struct PyPetscMatObject
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("aypx", 0);
 
-  /* "PETSc/Mat.pyx":1203
+  /* "PETSc/Mat.pyx":1221
  * 
- *     def aypx(self, alpha, Mat X not None, structure=None):
+ *     def aypx(self, alpha, Mat X, 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_ERR(33, 1203, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asScalar(__pyx_v_alpha); if (unlikely(__pyx_t_1 == ((PetscScalar)((PetscScalar)(-1.0))) && PyErr_Occurred())) __PYX_ERR(33, 1221, __pyx_L1_error)
   __pyx_v_sval = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":1204
- *     def aypx(self, alpha, Mat X not None, structure=None):
+  /* "PETSc/Mat.pyx":1222
+ *     def aypx(self, alpha, Mat X, 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)-1L))) __PYX_ERR(33, 1204, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_matstructure(__pyx_v_structure); if (unlikely(__pyx_t_2 == ((MatStructure)((MatStructure)-1L)))) __PYX_ERR(33, 1222, __pyx_L1_error)
   __pyx_v_flag = __pyx_t_2;
 
-  /* "PETSc/Mat.pyx":1205
+  /* "PETSc/Mat.pyx":1223
  *         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_ERR(33, 1205, __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 == ((int)-1))) __PYX_ERR(33, 1223, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1202
+  /* "PETSc/Mat.pyx":1220
  *         CHKERR( MatAXPY(self.mat, sval, X.mat, flag) )
  * 
- *     def aypx(self, alpha, Mat X not None, structure=None):             # <<<<<<<<<<<<<<
+ *     def aypx(self, alpha, Mat X, structure=None):             # <<<<<<<<<<<<<<
  *         cdef PetscScalar sval = asScalar(alpha)
  *         cdef PetscMatStructure flag = matstructure(structure)
  */
@@ -130823,18 +138850,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_290aypx(struct PyPetscMatObject
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1209
+/* "PETSc/Mat.pyx":1227
  *     # matrix-matrix product
  * 
- *     def matMultSymbolic(self, Mat mat not None, fill=None):             # <<<<<<<<<<<<<<
+ *     def matMultSymbolic(self, Mat mat, fill=None):             # <<<<<<<<<<<<<<
  *         cdef Mat result = Mat()
  *         cdef PetscReal rval = 2
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_299matMultSymbolic(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_298matMultSymbolic[] = "Mat.matMultSymbolic(self, Mat mat, fill=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_299matMultSymbolic(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscMatObject *__pyx_v_mat = 0;
   PyObject *__pyx_v_fill = 0;
   PyObject *__pyx_r = 0;
@@ -130849,7 +138876,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_293matMultSymbolic(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -130858,6 +138887,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_293matMultSymbolic(PyObject *__p
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mat)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fill);
@@ -130865,11 +138895,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_293matMultSymbolic(PyObject *__p
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "matMultSymbolic") < 0)) __PYX_ERR(33, 1209, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "matMultSymbolic") < 0)) __PYX_ERR(33, 1227, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -130880,14 +138911,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_293matMultSymbolic(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("matMultSymbolic", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1209, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("matMultSymbolic", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1227, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(33, 1227, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_298matMultSymbolic(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat, __pyx_v_fill);
 
   /* function exit code */
   goto __pyx_L0;
@@ -130898,7 +138929,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_293matMultSymbolic(PyObject *__p
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_292matMultSymbolic(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, PyObject *__pyx_v_fill) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_298matMultSymbolic(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;
@@ -130910,20 +138941,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_292matMultSymbolic(struct PyPets
   int __pyx_t_5;
   __Pyx_RefNannySetupContext("matMultSymbolic", 0);
 
-  /* "PETSc/Mat.pyx":1210
+  /* "PETSc/Mat.pyx":1228
  * 
- *     def matMultSymbolic(self, Mat mat not None, fill=None):
+ *     def matMultSymbolic(self, Mat mat, 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 *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1210, __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, 1228, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_result = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":1211
- *     def matMultSymbolic(self, Mat mat not None, fill=None):
+  /* "PETSc/Mat.pyx":1229
+ *     def matMultSymbolic(self, Mat mat, fill=None):
  *         cdef Mat result = Mat()
  *         cdef PetscReal rval = 2             # <<<<<<<<<<<<<<
  *         if fill is not None: rval = asReal(fill)
@@ -130931,7 +138962,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_292matMultSymbolic(struct PyPets
  */
   __pyx_v_rval = 2.0;
 
-  /* "PETSc/Mat.pyx":1212
+  /* "PETSc/Mat.pyx":1230
  *         cdef Mat result = Mat()
  *         cdef PetscReal rval = 2
  *         if fill is not None: rval = asReal(fill)             # <<<<<<<<<<<<<<
@@ -130941,35 +138972,35 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_292matMultSymbolic(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_ERR(33, 1212, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_fill); if (unlikely(__pyx_t_4 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(33, 1230, __pyx_L1_error)
     __pyx_v_rval = __pyx_t_4;
   }
 
-  /* "PETSc/Mat.pyx":1213
+  /* "PETSc/Mat.pyx":1231
  *         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_ERR(33, 1213, __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 == ((int)-1))) __PYX_ERR(33, 1231, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1214
+  /* "PETSc/Mat.pyx":1232
  *         if fill is not None: rval = asReal(fill)
  *         CHKERR( MatMatMultSymbolic(self.mat, mat.mat, rval, &result.mat) )
  *         return result             # <<<<<<<<<<<<<<
  * 
- *     def matMultNumeric(self, Mat mat not None, Mat result=None):
+ *     def matMultNumeric(self, Mat mat, Mat result=None):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_result));
   __pyx_r = ((PyObject *)__pyx_v_result);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1209
+  /* "PETSc/Mat.pyx":1227
  *     # matrix-matrix product
  * 
- *     def matMultSymbolic(self, Mat mat not None, fill=None):             # <<<<<<<<<<<<<<
+ *     def matMultSymbolic(self, Mat mat, fill=None):             # <<<<<<<<<<<<<<
  *         cdef Mat result = Mat()
  *         cdef PetscReal rval = 2
  */
@@ -130986,18 +139017,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_292matMultSymbolic(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1216
+/* "PETSc/Mat.pyx":1234
  *         return result
  * 
- *     def matMultNumeric(self, Mat mat not None, Mat result=None):             # <<<<<<<<<<<<<<
+ *     def matMultNumeric(self, Mat mat, Mat result=None):             # <<<<<<<<<<<<<<
  *         if result is None:
  *             result = Mat()
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_301matMultNumeric(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_300matMultNumeric[] = "Mat.matMultNumeric(self, Mat mat, Mat result=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_301matMultNumeric(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscMatObject *__pyx_v_mat = 0;
   struct PyPetscMatObject *__pyx_v_result = 0;
   PyObject *__pyx_r = 0;
@@ -131012,7 +139043,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_295matMultNumeric(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -131021,6 +139054,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_295matMultNumeric(PyObject *__py
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mat)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_result);
@@ -131028,11 +139062,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_295matMultNumeric(PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "matMultNumeric") < 0)) __PYX_ERR(33, 1216, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "matMultNumeric") < 0)) __PYX_ERR(33, 1234, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -131043,15 +139078,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_295matMultNumeric(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("matMultNumeric", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1216, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("matMultNumeric", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1234, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(33, 1234, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_result), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "result", 0))) __PYX_ERR(33, 1234, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_300matMultNumeric(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat, __pyx_v_result);
 
   /* function exit code */
   goto __pyx_L0;
@@ -131062,7 +139097,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_295matMultNumeric(PyObject *__py
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_294matMultNumeric(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, struct PyPetscMatObject *__pyx_v_result) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_300matMultNumeric(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;
@@ -131072,9 +139107,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_294matMultNumeric(struct PyPetsc
   __Pyx_RefNannySetupContext("matMultNumeric", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_result);
 
-  /* "PETSc/Mat.pyx":1217
+  /* "PETSc/Mat.pyx":1235
  * 
- *     def matMultNumeric(self, Mat mat not None, Mat result=None):
+ *     def matMultNumeric(self, Mat mat, Mat result=None):
  *         if result is None:             # <<<<<<<<<<<<<<
  *             result = Mat()
  *         if result.mat == NULL:
@@ -131083,28 +139118,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_294matMultNumeric(struct PyPetsc
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":1218
- *     def matMultNumeric(self, Mat mat not None, Mat result=None):
+    /* "PETSc/Mat.pyx":1236
+ *     def matMultNumeric(self, Mat mat, 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 *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1218, __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, 1236, __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":1217
+    /* "PETSc/Mat.pyx":1235
  * 
- *     def matMultNumeric(self, Mat mat not None, Mat result=None):
+ *     def matMultNumeric(self, Mat mat, Mat result=None):
  *         if result is None:             # <<<<<<<<<<<<<<
  *             result = Mat()
  *         if result.mat == NULL:
  */
   }
 
-  /* "PETSc/Mat.pyx":1219
+  /* "PETSc/Mat.pyx":1237
  *         if result is None:
  *             result = Mat()
  *         if result.mat == NULL:             # <<<<<<<<<<<<<<
@@ -131114,16 +139149,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_294matMultNumeric(struct PyPetsc
   __pyx_t_2 = ((__pyx_v_result->mat == NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":1220
+    /* "PETSc/Mat.pyx":1238
  *             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_ERR(33, 1220, __pyx_L1_error)
+    __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 == ((int)-1))) __PYX_ERR(33, 1238, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":1219
+    /* "PETSc/Mat.pyx":1237
  *         if result is None:
  *             result = Mat()
  *         if result.mat == NULL:             # <<<<<<<<<<<<<<
@@ -131132,31 +139167,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_294matMultNumeric(struct PyPetsc
  */
   }
 
-  /* "PETSc/Mat.pyx":1221
+  /* "PETSc/Mat.pyx":1239
  *         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_ERR(33, 1221, __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 == ((int)-1))) __PYX_ERR(33, 1239, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1222
+  /* "PETSc/Mat.pyx":1240
  *             CHKERR( MatMatMultSymbolic(self.mat, mat.mat, 2.0, &result.mat) )
  *         CHKERR( MatMatMultNumeric(self.mat, mat.mat, result.mat) )
  *         return result             # <<<<<<<<<<<<<<
  * 
- *     def matMult(self, Mat mat not None, Mat result=None, fill=None):
+ *     def matMult(self, Mat mat, Mat result=None, fill=None):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_result));
   __pyx_r = ((PyObject *)__pyx_v_result);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1216
+  /* "PETSc/Mat.pyx":1234
  *         return result
  * 
- *     def matMultNumeric(self, Mat mat not None, Mat result=None):             # <<<<<<<<<<<<<<
+ *     def matMultNumeric(self, Mat mat, Mat result=None):             # <<<<<<<<<<<<<<
  *         if result is None:
  *             result = Mat()
  */
@@ -131173,18 +139208,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_294matMultNumeric(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1224
+/* "PETSc/Mat.pyx":1242
  *         return result
  * 
- *     def matMult(self, Mat mat not None, Mat result=None, fill=None):             # <<<<<<<<<<<<<<
+ *     def matMult(self, Mat mat, Mat result=None, fill=None):             # <<<<<<<<<<<<<<
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         cdef PetscReal rval = 2
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_303matMult(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_302matMult[] = "Mat.matMult(self, Mat mat, Mat result=None, fill=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_303matMult(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;
@@ -131201,8 +139236,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_297matMult(PyObject *__pyx_v_sel
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -131211,11 +139249,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_297matMult(PyObject *__pyx_v_sel
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mat)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_result);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fill);
@@ -131223,12 +139263,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_297matMult(PyObject *__pyx_v_sel
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "matMult") < 0)) __PYX_ERR(33, 1224, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "matMult") < 0)) __PYX_ERR(33, 1242, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -131240,15 +139282,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_297matMult(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_ERR(33, 1224, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("matMult", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1242, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(33, 1242, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_result), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "result", 0))) __PYX_ERR(33, 1242, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_302matMult(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat, __pyx_v_result, __pyx_v_fill);
 
   /* function exit code */
   goto __pyx_L0;
@@ -131259,7 +139301,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_297matMult(PyObject *__pyx_v_sel
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_302matMult(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;
@@ -131272,17 +139314,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_296matMult(struct PyPetscMatObje
   __Pyx_RefNannySetupContext("matMult", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_result);
 
-  /* "PETSc/Mat.pyx":1225
+  /* "PETSc/Mat.pyx":1243
  * 
- *     def matMult(self, Mat mat not None, Mat result=None, fill=None):
+ *     def matMult(self, Mat mat, Mat result=None, fill=None):
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX             # <<<<<<<<<<<<<<
  *         cdef PetscReal rval = 2
  *         if result is None:
  */
   __pyx_v_reuse = MAT_INITIAL_MATRIX;
 
-  /* "PETSc/Mat.pyx":1226
- *     def matMult(self, Mat mat not None, Mat result=None, fill=None):
+  /* "PETSc/Mat.pyx":1244
+ *     def matMult(self, Mat mat, Mat result=None, fill=None):
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         cdef PetscReal rval = 2             # <<<<<<<<<<<<<<
  *         if result is None:
@@ -131290,7 +139332,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_296matMult(struct PyPetscMatObje
  */
   __pyx_v_rval = 2.0;
 
-  /* "PETSc/Mat.pyx":1227
+  /* "PETSc/Mat.pyx":1245
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         cdef PetscReal rval = 2
  *         if result is None:             # <<<<<<<<<<<<<<
@@ -131301,19 +139343,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_296matMult(struct PyPetscMatObje
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":1228
+    /* "PETSc/Mat.pyx":1246
  *         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 *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1228, __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, 1246, __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
+    /* "PETSc/Mat.pyx":1245
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         cdef PetscReal rval = 2
  *         if result is None:             # <<<<<<<<<<<<<<
@@ -131323,7 +139365,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_296matMult(struct PyPetscMatObje
     goto __pyx_L3;
   }
 
-  /* "PETSc/Mat.pyx":1229
+  /* "PETSc/Mat.pyx":1247
  *         if result is None:
  *             result = Mat()
  *         elif result.mat != NULL:             # <<<<<<<<<<<<<<
@@ -131333,7 +139375,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_296matMult(struct PyPetscMatObje
   __pyx_t_2 = ((__pyx_v_result->mat != NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":1230
+    /* "PETSc/Mat.pyx":1248
  *             result = Mat()
  *         elif result.mat != NULL:
  *             reuse = MAT_REUSE_MATRIX             # <<<<<<<<<<<<<<
@@ -131342,7 +139384,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_296matMult(struct PyPetscMatObje
  */
     __pyx_v_reuse = MAT_REUSE_MATRIX;
 
-    /* "PETSc/Mat.pyx":1229
+    /* "PETSc/Mat.pyx":1247
  *         if result is None:
  *             result = Mat()
  *         elif result.mat != NULL:             # <<<<<<<<<<<<<<
@@ -131352,7 +139394,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_296matMult(struct PyPetscMatObje
   }
   __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":1231
+  /* "PETSc/Mat.pyx":1249
  *         elif result.mat != NULL:
  *             reuse = MAT_REUSE_MATRIX
  *         if fill is not None: rval = asReal(fill)             # <<<<<<<<<<<<<<
@@ -131362,35 +139404,35 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_296matMult(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_ERR(33, 1231, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_fill); if (unlikely(__pyx_t_4 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(33, 1249, __pyx_L1_error)
     __pyx_v_rval = __pyx_t_4;
   }
 
-  /* "PETSc/Mat.pyx":1232
+  /* "PETSc/Mat.pyx":1250
  *             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_ERR(33, 1232, __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 == ((int)-1))) __PYX_ERR(33, 1250, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1233
+  /* "PETSc/Mat.pyx":1251
  *         if fill is not None: rval = asReal(fill)
  *         CHKERR( MatMatMult(self.mat, mat.mat, reuse, rval, &result.mat) )
  *         return result             # <<<<<<<<<<<<<<
  * 
- *     def matTransposeMult(self, Mat mat not None, Mat result=None, fill=None):
+ *     def matTransposeMult(self, Mat mat, Mat result=None, fill=None):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_result));
   __pyx_r = ((PyObject *)__pyx_v_result);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1224
+  /* "PETSc/Mat.pyx":1242
  *         return result
  * 
- *     def matMult(self, Mat mat not None, Mat result=None, fill=None):             # <<<<<<<<<<<<<<
+ *     def matMult(self, Mat mat, Mat result=None, fill=None):             # <<<<<<<<<<<<<<
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         cdef PetscReal rval = 2
  */
@@ -131407,18 +139449,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_296matMult(struct PyPetscMatObje
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1235
+/* "PETSc/Mat.pyx":1253
  *         return result
  * 
- *     def matTransposeMult(self, Mat mat not None, Mat result=None, fill=None):             # <<<<<<<<<<<<<<
+ *     def matTransposeMult(self, Mat mat, Mat result=None, fill=None):             # <<<<<<<<<<<<<<
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         cdef PetscReal rval = 2
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_305matTransposeMult(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_304matTransposeMult[] = "Mat.matTransposeMult(self, Mat mat, Mat result=None, fill=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_305matTransposeMult(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;
@@ -131435,8 +139477,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_299matTransposeMult(PyObject *__
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -131445,11 +139490,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_299matTransposeMult(PyObject *__
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mat)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_result);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fill);
@@ -131457,12 +139504,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_299matTransposeMult(PyObject *__
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "matTransposeMult") < 0)) __PYX_ERR(33, 1235, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "matTransposeMult") < 0)) __PYX_ERR(33, 1253, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -131474,15 +139523,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_299matTransposeMult(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("matTransposeMult", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1235, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("matTransposeMult", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1253, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(33, 1253, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_result), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "result", 0))) __PYX_ERR(33, 1253, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_304matTransposeMult(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat, __pyx_v_result, __pyx_v_fill);
 
   /* function exit code */
   goto __pyx_L0;
@@ -131493,7 +139542,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_299matTransposeMult(PyObject *__
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_304matTransposeMult(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;
@@ -131506,17 +139555,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_298matTransposeMult(struct PyPet
   __Pyx_RefNannySetupContext("matTransposeMult", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_result);
 
-  /* "PETSc/Mat.pyx":1236
+  /* "PETSc/Mat.pyx":1254
  * 
- *     def matTransposeMult(self, Mat mat not None, Mat result=None, fill=None):
+ *     def matTransposeMult(self, Mat mat, Mat result=None, fill=None):
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX             # <<<<<<<<<<<<<<
  *         cdef PetscReal rval = 2
  *         if result is None:
  */
   __pyx_v_reuse = MAT_INITIAL_MATRIX;
 
-  /* "PETSc/Mat.pyx":1237
- *     def matTransposeMult(self, Mat mat not None, Mat result=None, fill=None):
+  /* "PETSc/Mat.pyx":1255
+ *     def matTransposeMult(self, Mat mat, Mat result=None, fill=None):
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         cdef PetscReal rval = 2             # <<<<<<<<<<<<<<
  *         if result is None:
@@ -131524,7 +139573,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_298matTransposeMult(struct PyPet
  */
   __pyx_v_rval = 2.0;
 
-  /* "PETSc/Mat.pyx":1238
+  /* "PETSc/Mat.pyx":1256
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         cdef PetscReal rval = 2
  *         if result is None:             # <<<<<<<<<<<<<<
@@ -131535,19 +139584,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_298matTransposeMult(struct PyPet
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":1239
+    /* "PETSc/Mat.pyx":1257
  *         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 *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1239, __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, 1257, __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
+    /* "PETSc/Mat.pyx":1256
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         cdef PetscReal rval = 2
  *         if result is None:             # <<<<<<<<<<<<<<
@@ -131557,7 +139606,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_298matTransposeMult(struct PyPet
     goto __pyx_L3;
   }
 
-  /* "PETSc/Mat.pyx":1240
+  /* "PETSc/Mat.pyx":1258
  *         if result is None:
  *             result = Mat()
  *         elif result.mat != NULL:             # <<<<<<<<<<<<<<
@@ -131567,7 +139616,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_298matTransposeMult(struct PyPet
   __pyx_t_2 = ((__pyx_v_result->mat != NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":1241
+    /* "PETSc/Mat.pyx":1259
  *             result = Mat()
  *         elif result.mat != NULL:
  *             reuse = MAT_REUSE_MATRIX             # <<<<<<<<<<<<<<
@@ -131576,7 +139625,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_298matTransposeMult(struct PyPet
  */
     __pyx_v_reuse = MAT_REUSE_MATRIX;
 
-    /* "PETSc/Mat.pyx":1240
+    /* "PETSc/Mat.pyx":1258
  *         if result is None:
  *             result = Mat()
  *         elif result.mat != NULL:             # <<<<<<<<<<<<<<
@@ -131586,7 +139635,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_298matTransposeMult(struct PyPet
   }
   __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":1242
+  /* "PETSc/Mat.pyx":1260
  *         elif result.mat != NULL:
  *             reuse = MAT_REUSE_MATRIX
  *         if fill is not None: rval = asReal(fill)             # <<<<<<<<<<<<<<
@@ -131596,35 +139645,35 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_298matTransposeMult(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_ERR(33, 1242, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_fill); if (unlikely(__pyx_t_4 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(33, 1260, __pyx_L1_error)
     __pyx_v_rval = __pyx_t_4;
   }
 
-  /* "PETSc/Mat.pyx":1243
+  /* "PETSc/Mat.pyx":1261
  *             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_ERR(33, 1243, __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 == ((int)-1))) __PYX_ERR(33, 1261, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1244
+  /* "PETSc/Mat.pyx":1262
  *         if fill is not None: rval = asReal(fill)
  *         CHKERR( MatMatTransposeMult(self.mat, mat.mat, reuse, rval, &result.mat) )
  *         return result             # <<<<<<<<<<<<<<
  * 
- *     def transposeMatMult(self, Mat mat not None, Mat result=None, fill=None):
+ *     def transposeMatMult(self, Mat mat, Mat result=None, fill=None):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_result));
   __pyx_r = ((PyObject *)__pyx_v_result);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1235
+  /* "PETSc/Mat.pyx":1253
  *         return result
  * 
- *     def matTransposeMult(self, Mat mat not None, Mat result=None, fill=None):             # <<<<<<<<<<<<<<
+ *     def matTransposeMult(self, Mat mat, Mat result=None, fill=None):             # <<<<<<<<<<<<<<
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         cdef PetscReal rval = 2
  */
@@ -131641,18 +139690,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_298matTransposeMult(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1246
+/* "PETSc/Mat.pyx":1264
  *         return result
  * 
- *     def transposeMatMult(self, Mat mat not None, Mat result=None, fill=None):             # <<<<<<<<<<<<<<
+ *     def transposeMatMult(self, Mat mat, Mat result=None, fill=None):             # <<<<<<<<<<<<<<
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         cdef PetscReal rval = 2
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_307transposeMatMult(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_306transposeMatMult[] = "Mat.transposeMatMult(self, Mat mat, Mat result=None, fill=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_307transposeMatMult(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;
@@ -131669,8 +139718,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_301transposeMatMult(PyObject *__
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -131679,11 +139731,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_301transposeMatMult(PyObject *__
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mat)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_result);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fill);
@@ -131691,12 +139745,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_301transposeMatMult(PyObject *__
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "transposeMatMult") < 0)) __PYX_ERR(33, 1246, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "transposeMatMult") < 0)) __PYX_ERR(33, 1264, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -131708,15 +139764,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_301transposeMatMult(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("transposeMatMult", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1246, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("transposeMatMult", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1264, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(33, 1264, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_result), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "result", 0))) __PYX_ERR(33, 1264, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_306transposeMatMult(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat, __pyx_v_result, __pyx_v_fill);
 
   /* function exit code */
   goto __pyx_L0;
@@ -131727,7 +139783,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_301transposeMatMult(PyObject *__
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_306transposeMatMult(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;
@@ -131740,17 +139796,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_300transposeMatMult(struct PyPet
   __Pyx_RefNannySetupContext("transposeMatMult", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_result);
 
-  /* "PETSc/Mat.pyx":1247
+  /* "PETSc/Mat.pyx":1265
  * 
- *     def transposeMatMult(self, Mat mat not None, Mat result=None, fill=None):
+ *     def transposeMatMult(self, Mat mat, Mat result=None, fill=None):
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX             # <<<<<<<<<<<<<<
  *         cdef PetscReal rval = 2
  *         if result is None:
  */
   __pyx_v_reuse = MAT_INITIAL_MATRIX;
 
-  /* "PETSc/Mat.pyx":1248
- *     def transposeMatMult(self, Mat mat not None, Mat result=None, fill=None):
+  /* "PETSc/Mat.pyx":1266
+ *     def transposeMatMult(self, Mat mat, Mat result=None, fill=None):
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         cdef PetscReal rval = 2             # <<<<<<<<<<<<<<
  *         if result is None:
@@ -131758,7 +139814,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_300transposeMatMult(struct PyPet
  */
   __pyx_v_rval = 2.0;
 
-  /* "PETSc/Mat.pyx":1249
+  /* "PETSc/Mat.pyx":1267
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         cdef PetscReal rval = 2
  *         if result is None:             # <<<<<<<<<<<<<<
@@ -131769,19 +139825,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_300transposeMatMult(struct PyPet
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":1250
+    /* "PETSc/Mat.pyx":1268
  *         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 *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1250, __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, 1268, __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
+    /* "PETSc/Mat.pyx":1267
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         cdef PetscReal rval = 2
  *         if result is None:             # <<<<<<<<<<<<<<
@@ -131791,7 +139847,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_300transposeMatMult(struct PyPet
     goto __pyx_L3;
   }
 
-  /* "PETSc/Mat.pyx":1251
+  /* "PETSc/Mat.pyx":1269
  *         if result is None:
  *             result = Mat()
  *         elif result.mat != NULL:             # <<<<<<<<<<<<<<
@@ -131801,7 +139857,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_300transposeMatMult(struct PyPet
   __pyx_t_2 = ((__pyx_v_result->mat != NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/Mat.pyx":1252
+    /* "PETSc/Mat.pyx":1270
  *             result = Mat()
  *         elif result.mat != NULL:
  *             reuse = MAT_REUSE_MATRIX             # <<<<<<<<<<<<<<
@@ -131810,7 +139866,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_300transposeMatMult(struct PyPet
  */
     __pyx_v_reuse = MAT_REUSE_MATRIX;
 
-    /* "PETSc/Mat.pyx":1251
+    /* "PETSc/Mat.pyx":1269
  *         if result is None:
  *             result = Mat()
  *         elif result.mat != NULL:             # <<<<<<<<<<<<<<
@@ -131820,7 +139876,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_300transposeMatMult(struct PyPet
   }
   __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":1253
+  /* "PETSc/Mat.pyx":1271
  *         elif result.mat != NULL:
  *             reuse = MAT_REUSE_MATRIX
  *         if fill is not None: rval = asReal(fill)             # <<<<<<<<<<<<<<
@@ -131830,35 +139886,35 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_300transposeMatMult(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_ERR(33, 1253, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_fill); if (unlikely(__pyx_t_4 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(33, 1271, __pyx_L1_error)
     __pyx_v_rval = __pyx_t_4;
   }
 
-  /* "PETSc/Mat.pyx":1254
+  /* "PETSc/Mat.pyx":1272
  *             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_ERR(33, 1254, __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 == ((int)-1))) __PYX_ERR(33, 1272, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1255
+  /* "PETSc/Mat.pyx":1273
  *         if fill is not None: rval = asReal(fill)
  *         CHKERR( MatTransposeMatMult(self.mat, mat.mat, reuse, rval, &result.mat) )
  *         return result             # <<<<<<<<<<<<<<
  * 
- *     # XXX factorization
+ *     def PtAP(self, Mat P, Mat result=None, fill=None):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_result));
   __pyx_r = ((PyObject *)__pyx_v_result);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1246
+  /* "PETSc/Mat.pyx":1264
  *         return result
  * 
- *     def transposeMatMult(self, Mat mat not None, Mat result=None, fill=None):             # <<<<<<<<<<<<<<
+ *     def transposeMatMult(self, Mat mat, Mat result=None, fill=None):             # <<<<<<<<<<<<<<
  *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
  *         cdef PetscReal rval = 2
  */
@@ -131875,7 +139931,248 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_300transposeMatMult(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1259
+/* "PETSc/Mat.pyx":1275
+ *         return result
+ * 
+ *     def PtAP(self, Mat P, Mat result=None, fill=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
+ *         cdef PetscReal cfill = PETSC_DEFAULT
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_309PtAP(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_308PtAP[] = "Mat.PtAP(self, Mat P, Mat result=None, fill=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_309PtAP(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscMatObject *__pyx_v_P = 0;
+  struct PyPetscMatObject *__pyx_v_result = 0;
+  PyObject *__pyx_v_fill = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("PtAP (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_P,&__pyx_n_s_result,&__pyx_n_s_fill,0};
+    PyObject* values[3] = {0,0,0};
+    values[1] = (PyObject *)((struct PyPetscMatObject *)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);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        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;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_result);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_fill);
+          if (value) { values[2] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "PtAP") < 0)) __PYX_ERR(33, 1275, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_P = ((struct PyPetscMatObject *)values[0]);
+    __pyx_v_result = ((struct PyPetscMatObject *)values[1]);
+    __pyx_v_fill = values[2];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("PtAP", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1275, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.PtAP", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_P), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "P", 0))) __PYX_ERR(33, 1275, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_result), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "result", 0))) __PYX_ERR(33, 1275, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_308PtAP(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_P, __pyx_v_result, __pyx_v_fill);
+
+  /* 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_308PtAP(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_P, struct PyPetscMatObject *__pyx_v_result, PyObject *__pyx_v_fill) {
+  MatReuse __pyx_v_reuse;
+  PetscReal __pyx_v_cfill;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PetscReal __pyx_t_4;
+  int __pyx_t_5;
+  __Pyx_RefNannySetupContext("PtAP", 0);
+  __Pyx_INCREF((PyObject *)__pyx_v_result);
+
+  /* "PETSc/Mat.pyx":1276
+ * 
+ *     def PtAP(self, Mat P, Mat result=None, fill=None):
+ *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX             # <<<<<<<<<<<<<<
+ *         cdef PetscReal cfill = PETSC_DEFAULT
+ *         if result is None:
+ */
+  __pyx_v_reuse = MAT_INITIAL_MATRIX;
+
+  /* "PETSc/Mat.pyx":1277
+ *     def PtAP(self, Mat P, Mat result=None, fill=None):
+ *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
+ *         cdef PetscReal cfill = PETSC_DEFAULT             # <<<<<<<<<<<<<<
+ *         if result is None:
+ *             result = Mat()
+ */
+  __pyx_v_cfill = PETSC_DEFAULT;
+
+  /* "PETSc/Mat.pyx":1278
+ *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
+ *         cdef PetscReal cfill = PETSC_DEFAULT
+ *         if result is None:             # <<<<<<<<<<<<<<
+ *             result = Mat()
+ *         elif result.mat != NULL:
+ */
+  __pyx_t_1 = (((PyObject *)__pyx_v_result) == Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+
+    /* "PETSc/Mat.pyx":1279
+ *         cdef PetscReal cfill = PETSC_DEFAULT
+ *         if result is None:
+ *             result = Mat()             # <<<<<<<<<<<<<<
+ *         elif result.mat != NULL:
+ *             reuse = MAT_REUSE_MATRIX
+ */
+    __pyx_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1279, __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":1278
+ *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
+ *         cdef PetscReal cfill = PETSC_DEFAULT
+ *         if result is None:             # <<<<<<<<<<<<<<
+ *             result = Mat()
+ *         elif result.mat != NULL:
+ */
+    goto __pyx_L3;
+  }
+
+  /* "PETSc/Mat.pyx":1280
+ *         if result is None:
+ *             result = Mat()
+ *         elif result.mat != NULL:             # <<<<<<<<<<<<<<
+ *             reuse = MAT_REUSE_MATRIX
+ *         if fill is not None: cfill = asReal(fill)
+ */
+  __pyx_t_2 = ((__pyx_v_result->mat != NULL) != 0);
+  if (__pyx_t_2) {
+
+    /* "PETSc/Mat.pyx":1281
+ *             result = Mat()
+ *         elif result.mat != NULL:
+ *             reuse = MAT_REUSE_MATRIX             # <<<<<<<<<<<<<<
+ *         if fill is not None: cfill = asReal(fill)
+ *         CHKERR( MatPtAP(self.mat, P.mat, reuse, cfill, &result.mat) )
+ */
+    __pyx_v_reuse = MAT_REUSE_MATRIX;
+
+    /* "PETSc/Mat.pyx":1280
+ *         if result is None:
+ *             result = Mat()
+ *         elif result.mat != NULL:             # <<<<<<<<<<<<<<
+ *             reuse = MAT_REUSE_MATRIX
+ *         if fill is not None: cfill = asReal(fill)
+ */
+  }
+  __pyx_L3:;
+
+  /* "PETSc/Mat.pyx":1282
+ *         elif result.mat != NULL:
+ *             reuse = MAT_REUSE_MATRIX
+ *         if fill is not None: cfill = asReal(fill)             # <<<<<<<<<<<<<<
+ *         CHKERR( MatPtAP(self.mat, P.mat, reuse, cfill, &result.mat) )
+ *         return result
+ */
+  __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 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(33, 1282, __pyx_L1_error)
+    __pyx_v_cfill = __pyx_t_4;
+  }
+
+  /* "PETSc/Mat.pyx":1283
+ *             reuse = MAT_REUSE_MATRIX
+ *         if fill is not None: cfill = asReal(fill)
+ *         CHKERR( MatPtAP(self.mat, P.mat, reuse, cfill, &result.mat) )             # <<<<<<<<<<<<<<
+ *         return result
+ * 
+ */
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatPtAP(__pyx_v_self->mat, __pyx_v_P->mat, __pyx_v_reuse, __pyx_v_cfill, (&__pyx_v_result->mat))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(33, 1283, __pyx_L1_error)
+
+  /* "PETSc/Mat.pyx":1284
+ *         if fill is not None: cfill = asReal(fill)
+ *         CHKERR( MatPtAP(self.mat, P.mat, reuse, cfill, &result.mat) )
+ *         return result             # <<<<<<<<<<<<<<
+ * 
+ *     # XXX factorization
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_result));
+  __pyx_r = ((PyObject *)__pyx_v_result);
+  goto __pyx_L0;
+
+  /* "PETSc/Mat.pyx":1275
+ *         return result
+ * 
+ *     def PtAP(self, Mat P, Mat result=None, fill=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscMatReuse reuse = MAT_INITIAL_MATRIX
+ *         cdef PetscReal cfill = PETSC_DEFAULT
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.PtAP", __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":1288
  *     # XXX factorization
  * 
  *     def getOrdering(self, ord_type):             # <<<<<<<<<<<<<<
@@ -131884,9 +140181,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_300transposeMatMult(struct PyPet
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_311getOrdering(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_310getOrdering[] = "Mat.getOrdering(self, ord_type)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_311getOrdering(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_ord_type = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -131899,6 +140196,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_303getOrdering(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -131909,7 +140207,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_303getOrdering(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_ERR(33, 1259, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getOrdering") < 0)) __PYX_ERR(33, 1288, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -131920,20 +140218,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_303getOrdering(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_ERR(33, 1259, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getOrdering", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1288, __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_302getOrdering(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_ord_type);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_310getOrdering(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_ord_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_302getOrdering(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_ord_type) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_310getOrdering(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;
@@ -131944,7 +140242,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_302getOrdering(struct PyPetscMat
   __Pyx_RefNannySetupContext("getOrdering", 0);
   __Pyx_INCREF(__pyx_v_ord_type);
 
-  /* "PETSc/Mat.pyx":1260
+  /* "PETSc/Mat.pyx":1289
  * 
  *     def getOrdering(self, ord_type):
  *         cdef PetscMatOrderingType cval = NULL             # <<<<<<<<<<<<<<
@@ -131953,52 +140251,52 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_302getOrdering(struct PyPetscMat
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/Mat.pyx":1261
+  /* "PETSc/Mat.pyx":1290
  *     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_ERR(33, 1261, __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, 1290, __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":1262
+  /* "PETSc/Mat.pyx":1291
  *         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 *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1262, __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, 1291, __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 *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1262, __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, 1291, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_cp = ((struct PyPetscISObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":1263
+  /* "PETSc/Mat.pyx":1292
  *         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_ERR(33, 1263, __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 == ((int)-1))) __PYX_ERR(33, 1292, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1264
+  /* "PETSc/Mat.pyx":1293
  *         cdef IS rp = IS(), cp = IS()
  *         CHKERR( MatGetOrdering(self.mat, cval, &rp.iset, &cp.iset) )
  *         return (rp, cp)             # <<<<<<<<<<<<<<
  * 
- *     def reorderForNonzeroDiagonal(self, IS isrow not None, IS iscol not None, atol=0):
+ *     def reorderForNonzeroDiagonal(self, IS isrow, IS iscol, atol=0):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1264, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1293, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_rp));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_rp));
@@ -132010,7 +140308,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_302getOrdering(struct PyPetscMat
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1259
+  /* "PETSc/Mat.pyx":1288
  *     # XXX factorization
  * 
  *     def getOrdering(self, ord_type):             # <<<<<<<<<<<<<<
@@ -132032,18 +140330,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_302getOrdering(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1266
+/* "PETSc/Mat.pyx":1295
  *         return (rp, cp)
  * 
- *     def reorderForNonzeroDiagonal(self, IS isrow not None, IS iscol not None, atol=0):             # <<<<<<<<<<<<<<
+ *     def reorderForNonzeroDiagonal(self, IS isrow, IS iscol, atol=0):             # <<<<<<<<<<<<<<
  *         cdef PetscReal rval = asReal(atol)
  *         cdef PetscIS rp = isrow.iset, cp = iscol.iset
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_313reorderForNonzeroDiagonal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_312reorderForNonzeroDiagonal[] = "Mat.reorderForNonzeroDiagonal(self, IS isrow, IS iscol, atol=0)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_313reorderForNonzeroDiagonal(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;
@@ -132059,8 +140357,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_305reorderForNonzeroDiagonal(PyO
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -132069,11 +140370,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_305reorderForNonzeroDiagonal(PyO
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_isrow)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 1266, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("reorderForNonzeroDiagonal", 0, 2, 3, 1); __PYX_ERR(33, 1295, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_atol);
@@ -132081,11 +140384,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_305reorderForNonzeroDiagonal(PyO
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "reorderForNonzeroDiagonal") < 0)) __PYX_ERR(33, 1266, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "reorderForNonzeroDiagonal") < 0)) __PYX_ERR(33, 1295, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -132098,15 +140402,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_305reorderForNonzeroDiagonal(PyO
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("reorderForNonzeroDiagonal", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1266, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("reorderForNonzeroDiagonal", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1295, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isrow), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isrow", 0))) __PYX_ERR(33, 1295, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iscol), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iscol", 0))) __PYX_ERR(33, 1295, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_312reorderForNonzeroDiagonal(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isrow, __pyx_v_iscol, __pyx_v_atol);
 
   /* function exit code */
   goto __pyx_L0;
@@ -132117,7 +140421,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_305reorderForNonzeroDiagonal(PyO
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_312reorderForNonzeroDiagonal(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;
@@ -132128,18 +140432,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_304reorderForNonzeroDiagonal(str
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("reorderForNonzeroDiagonal", 0);
 
-  /* "PETSc/Mat.pyx":1267
+  /* "PETSc/Mat.pyx":1296
  * 
- *     def reorderForNonzeroDiagonal(self, IS isrow not None, IS iscol not None, atol=0):
+ *     def reorderForNonzeroDiagonal(self, IS isrow, IS iscol, 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_ERR(33, 1267, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_atol); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(33, 1296, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":1268
- *     def reorderForNonzeroDiagonal(self, IS isrow not None, IS iscol not None, atol=0):
+  /* "PETSc/Mat.pyx":1297
+ *     def reorderForNonzeroDiagonal(self, IS isrow, IS iscol, atol=0):
  *         cdef PetscReal rval = asReal(atol)
  *         cdef PetscIS rp = isrow.iset, cp = iscol.iset             # <<<<<<<<<<<<<<
  *         CHKERR( MatReorderForNonzeroDiagonal(self.mat, rval, rp, cp) )
@@ -132150,19 +140454,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_304reorderForNonzeroDiagonal(str
   __pyx_t_2 = __pyx_v_iscol->iset;
   __pyx_v_cp = __pyx_t_2;
 
-  /* "PETSc/Mat.pyx":1269
+  /* "PETSc/Mat.pyx":1298
  *         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):
+ *     def factorLU(self, IS isrow, IS iscol, 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_ERR(33, 1269, __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 == ((int)-1))) __PYX_ERR(33, 1298, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1266
+  /* "PETSc/Mat.pyx":1295
  *         return (rp, cp)
  * 
- *     def reorderForNonzeroDiagonal(self, IS isrow not None, IS iscol not None, atol=0):             # <<<<<<<<<<<<<<
+ *     def reorderForNonzeroDiagonal(self, IS isrow, IS iscol, atol=0):             # <<<<<<<<<<<<<<
  *         cdef PetscReal rval = asReal(atol)
  *         cdef PetscIS rp = isrow.iset, cp = iscol.iset
  */
@@ -132179,18 +140483,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_304reorderForNonzeroDiagonal(str
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1271
+/* "PETSc/Mat.pyx":1300
  *         CHKERR( MatReorderForNonzeroDiagonal(self.mat, rval, rp, cp) )
  * 
- *     def factorLU(self, IS isrow not None, IS iscol not None, options=None):             # <<<<<<<<<<<<<<
+ *     def factorLU(self, IS isrow, IS iscol, options=None):             # <<<<<<<<<<<<<<
  *         cdef PetscMatFactorInfo info
  *         matfactorinfo(PETSC_FALSE, PETSC_FALSE, options, &info)
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_315factorLU(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_314factorLU[] = "Mat.factorLU(self, IS isrow, IS iscol, options=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_315factorLU(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;
@@ -132206,8 +140510,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_307factorLU(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -132216,11 +140523,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_307factorLU(PyObject *__pyx_v_se
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_isrow)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 1271, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("factorLU", 0, 2, 3, 1); __PYX_ERR(33, 1300, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_options);
@@ -132228,11 +140537,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_307factorLU(PyObject *__pyx_v_se
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorLU") < 0)) __PYX_ERR(33, 1271, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorLU") < 0)) __PYX_ERR(33, 1300, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -132245,15 +140555,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_307factorLU(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_ERR(33, 1271, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("factorLU", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1300, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isrow), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isrow", 0))) __PYX_ERR(33, 1300, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iscol), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iscol", 0))) __PYX_ERR(33, 1300, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_314factorLU(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isrow, __pyx_v_iscol, __pyx_v_options);
 
   /* function exit code */
   goto __pyx_L0;
@@ -132264,35 +140574,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_307factorLU(PyObject *__pyx_v_se
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_314factorLU(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;
   __Pyx_RefNannySetupContext("factorLU", 0);
 
-  /* "PETSc/Mat.pyx":1273
- *     def factorLU(self, IS isrow not None, IS iscol not None, options=None):
+  /* "PETSc/Mat.pyx":1302
+ *     def factorLU(self, IS isrow, IS iscol, 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):
+ *     def factorSymbolicLU(self, Mat mat, IS isrow, IS iscol, 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_ERR(33, 1273, __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 == ((int)-1))) __PYX_ERR(33, 1302, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1274
+  /* "PETSc/Mat.pyx":1303
  *         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):
+ *     def factorSymbolicLU(self, Mat mat, IS isrow, IS 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_ERR(33, 1274, __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 == ((int)-1))) __PYX_ERR(33, 1303, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1271
+  /* "PETSc/Mat.pyx":1300
  *         CHKERR( MatReorderForNonzeroDiagonal(self.mat, rval, rp, cp) )
  * 
- *     def factorLU(self, IS isrow not None, IS iscol not None, options=None):             # <<<<<<<<<<<<<<
+ *     def factorLU(self, IS isrow, IS iscol, options=None):             # <<<<<<<<<<<<<<
  *         cdef PetscMatFactorInfo info
  *         matfactorinfo(PETSC_FALSE, PETSC_FALSE, options, &info)
  */
@@ -132309,18 +140619,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_306factorLU(struct PyPetscMatObj
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1275
+/* "PETSc/Mat.pyx":1304
  *         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):             # <<<<<<<<<<<<<<
+ *     def factorSymbolicLU(self, Mat mat, IS isrow, IS 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_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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_317factorSymbolicLU(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_316factorSymbolicLU[] = "Mat.factorSymbolicLU(self, Mat mat, IS isrow, IS iscol, options=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_317factorSymbolicLU(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;
@@ -132337,9 +140647,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_309factorSymbolicLU(PyObject *__
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -132348,16 +140662,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_309factorSymbolicLU(PyObject *__
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mat)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 1275, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("factorSymbolicLU", 0, 3, 4, 1); __PYX_ERR(33, 1304, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 1275, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("factorSymbolicLU", 0, 3, 4, 2); __PYX_ERR(33, 1304, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_options);
@@ -132365,11 +140682,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_309factorSymbolicLU(PyObject *__
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorSymbolicLU") < 0)) __PYX_ERR(33, 1275, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorSymbolicLU") < 0)) __PYX_ERR(33, 1304, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         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);
@@ -132384,16 +140702,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_309factorSymbolicLU(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("factorSymbolicLU", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1275, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("factorSymbolicLU", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1304, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(33, 1304, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isrow), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isrow", 0))) __PYX_ERR(33, 1304, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iscol), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iscol", 0))) __PYX_ERR(33, 1304, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_316factorSymbolicLU(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat, __pyx_v_isrow, __pyx_v_iscol, __pyx_v_options);
 
   /* function exit code */
   goto __pyx_L0;
@@ -132404,17 +140722,17 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_309factorSymbolicLU(PyObject *__
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_316factorSymbolicLU(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
   __Pyx_RefNannySetupContext("factorSymbolicLU", 0);
 
-  /* "PETSc/Mat.pyx":1276
+  /* "PETSc/Mat.pyx":1305
  *         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):
+ *     def factorSymbolicLU(self, Mat mat, IS isrow, IS 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):
+ *     def factorNumericLU(self, Mat mat, options=None):
  */
   ((void)__pyx_v_self);
   ((void)__pyx_v_mat);
@@ -132422,20 +140740,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_308factorSymbolicLU(struct PyPet
   ((void)__pyx_v_iscol);
   ((void)__pyx_v_options);
 
-  /* "PETSc/Mat.pyx":1277
- *     def factorSymbolicLU(self, Mat mat not None, IS isrow not None, IS iscol not None, options=None):
+  /* "PETSc/Mat.pyx":1306
+ *     def factorSymbolicLU(self, Mat mat, IS isrow, IS 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):
+ *     def factorNumericLU(self, Mat mat, options=None):
  *         <void>self; <void>mat; <void>options; # unused
  */
   __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
-  __PYX_ERR(33, 1277, __pyx_L1_error)
+  __PYX_ERR(33, 1306, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1275
+  /* "PETSc/Mat.pyx":1304
  *         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):             # <<<<<<<<<<<<<<
+ *     def factorSymbolicLU(self, Mat mat, IS isrow, IS iscol, options=None):             # <<<<<<<<<<<<<<
  *         <void>self; <void>mat; <void>isrow; <void>iscol; <void>options; # unused
  *         raise NotImplementedError
  */
@@ -132449,18 +140767,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_308factorSymbolicLU(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1278
+/* "PETSc/Mat.pyx":1307
  *         <void>self; <void>mat; <void>isrow; <void>iscol; <void>options; # unused
  *         raise NotImplementedError
- *     def factorNumericLU(self, Mat mat not None, options=None):             # <<<<<<<<<<<<<<
+ *     def factorNumericLU(self, Mat mat, options=None):             # <<<<<<<<<<<<<<
  *         <void>self; <void>mat; <void>options; # unused
  *         raise NotImplementedError
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_319factorNumericLU(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_318factorNumericLU[] = "Mat.factorNumericLU(self, Mat mat, options=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_319factorNumericLU(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;
@@ -132475,7 +140793,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_311factorNumericLU(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -132484,6 +140804,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_311factorNumericLU(PyObject *__p
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mat)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_options);
@@ -132491,11 +140812,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_311factorNumericLU(PyObject *__p
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorNumericLU") < 0)) __PYX_ERR(33, 1278, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorNumericLU") < 0)) __PYX_ERR(33, 1307, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -132506,14 +140828,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_311factorNumericLU(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("factorNumericLU", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1278, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("factorNumericLU", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1307, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(33, 1307, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_318factorNumericLU(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat, __pyx_v_options);
 
   /* function exit code */
   goto __pyx_L0;
@@ -132524,36 +140846,36 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_311factorNumericLU(PyObject *__p
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_310factorNumericLU(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, PyObject *__pyx_v_options) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_318factorNumericLU(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, PyObject *__pyx_v_options) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("factorNumericLU", 0);
 
-  /* "PETSc/Mat.pyx":1279
+  /* "PETSc/Mat.pyx":1308
  *         raise NotImplementedError
- *     def factorNumericLU(self, Mat mat not None, options=None):
+ *     def factorNumericLU(self, Mat 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):
+ *     def factorILU(self, IS isrow, IS iscol, options=None):
  */
   ((void)__pyx_v_self);
   ((void)__pyx_v_mat);
   ((void)__pyx_v_options);
 
-  /* "PETSc/Mat.pyx":1280
- *     def factorNumericLU(self, Mat mat not None, options=None):
+  /* "PETSc/Mat.pyx":1309
+ *     def factorNumericLU(self, Mat 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):
+ *     def factorILU(self, IS isrow, IS iscol, options=None):
  *         cdef PetscMatFactorInfo info
  */
   __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
-  __PYX_ERR(33, 1280, __pyx_L1_error)
+  __PYX_ERR(33, 1309, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1278
+  /* "PETSc/Mat.pyx":1307
  *         <void>self; <void>mat; <void>isrow; <void>iscol; <void>options; # unused
  *         raise NotImplementedError
- *     def factorNumericLU(self, Mat mat not None, options=None):             # <<<<<<<<<<<<<<
+ *     def factorNumericLU(self, Mat mat, options=None):             # <<<<<<<<<<<<<<
  *         <void>self; <void>mat; <void>options; # unused
  *         raise NotImplementedError
  */
@@ -132567,18 +140889,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_310factorNumericLU(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1281
+/* "PETSc/Mat.pyx":1310
  *         <void>self; <void>mat; <void>options; # unused
  *         raise NotImplementedError
- *     def factorILU(self, IS isrow not None, IS iscol not None, options=None):             # <<<<<<<<<<<<<<
+ *     def factorILU(self, IS isrow, IS iscol, options=None):             # <<<<<<<<<<<<<<
  *         cdef PetscMatFactorInfo info
  *         matfactorinfo(PETSC_TRUE, PETSC_FALSE, options, &info)
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_321factorILU(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_320factorILU[] = "Mat.factorILU(self, IS isrow, IS iscol, options=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_321factorILU(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;
@@ -132594,8 +140916,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_313factorILU(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -132604,11 +140929,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_313factorILU(PyObject *__pyx_v_s
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_isrow)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 1281, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("factorILU", 0, 2, 3, 1); __PYX_ERR(33, 1310, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_options);
@@ -132616,11 +140943,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_313factorILU(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorILU") < 0)) __PYX_ERR(33, 1281, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorILU") < 0)) __PYX_ERR(33, 1310, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -132633,15 +140961,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_313factorILU(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_ERR(33, 1281, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("factorILU", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1310, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isrow), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isrow", 0))) __PYX_ERR(33, 1310, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iscol), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iscol", 0))) __PYX_ERR(33, 1310, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_320factorILU(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isrow, __pyx_v_iscol, __pyx_v_options);
 
   /* function exit code */
   goto __pyx_L0;
@@ -132652,35 +140980,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_313factorILU(PyObject *__pyx_v_s
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_320factorILU(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;
   __Pyx_RefNannySetupContext("factorILU", 0);
 
-  /* "PETSc/Mat.pyx":1283
- *     def factorILU(self, IS isrow not None, IS iscol not None, options=None):
+  /* "PETSc/Mat.pyx":1312
+ *     def factorILU(self, IS isrow, IS iscol, 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):
+ *     def factorSymbolicILU(self, IS isrow, IS iscol, 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_ERR(33, 1283, __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 == ((int)-1))) __PYX_ERR(33, 1312, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1284
+  /* "PETSc/Mat.pyx":1313
  *         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):
+ *     def factorSymbolicILU(self, IS isrow, IS 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_ERR(33, 1284, __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 == ((int)-1))) __PYX_ERR(33, 1313, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1281
+  /* "PETSc/Mat.pyx":1310
  *         <void>self; <void>mat; <void>options; # unused
  *         raise NotImplementedError
- *     def factorILU(self, IS isrow not None, IS iscol not None, options=None):             # <<<<<<<<<<<<<<
+ *     def factorILU(self, IS isrow, IS iscol, options=None):             # <<<<<<<<<<<<<<
  *         cdef PetscMatFactorInfo info
  *         matfactorinfo(PETSC_TRUE, PETSC_FALSE, options, &info)
  */
@@ -132697,18 +141025,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_312factorILU(struct PyPetscMatOb
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1285
+/* "PETSc/Mat.pyx":1314
  *         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):             # <<<<<<<<<<<<<<
+ *     def factorSymbolicILU(self, IS isrow, IS iscol, options=None):             # <<<<<<<<<<<<<<
  *         <void>self; <void>isrow; <void>iscol; <void>options; # unused
  *         raise NotImplementedError
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_323factorSymbolicILU(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_322factorSymbolicILU[] = "Mat.factorSymbolicILU(self, IS isrow, IS iscol, options=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_323factorSymbolicILU(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;
@@ -132724,8 +141052,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_315factorSymbolicILU(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -132734,11 +141065,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_315factorSymbolicILU(PyObject *_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_isrow)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 1285, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("factorSymbolicILU", 0, 2, 3, 1); __PYX_ERR(33, 1314, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_options);
@@ -132746,11 +141079,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_315factorSymbolicILU(PyObject *_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorSymbolicILU") < 0)) __PYX_ERR(33, 1285, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorSymbolicILU") < 0)) __PYX_ERR(33, 1314, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -132763,15 +141097,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_315factorSymbolicILU(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("factorSymbolicILU", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1285, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("factorSymbolicILU", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1314, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isrow), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isrow", 0))) __PYX_ERR(33, 1314, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_iscol), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "iscol", 0))) __PYX_ERR(33, 1314, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_322factorSymbolicILU(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isrow, __pyx_v_iscol, __pyx_v_options);
 
   /* function exit code */
   goto __pyx_L0;
@@ -132782,14 +141116,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_315factorSymbolicILU(PyObject *_
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_322factorSymbolicILU(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
   __Pyx_RefNannySetupContext("factorSymbolicILU", 0);
 
-  /* "PETSc/Mat.pyx":1286
+  /* "PETSc/Mat.pyx":1315
  *         CHKERR( MatILUFactor(self.mat, isrow.iset, iscol.iset, &info) )
- *     def factorSymbolicILU(self, IS isrow not None, IS iscol not None, options=None):
+ *     def factorSymbolicILU(self, IS isrow, IS iscol, options=None):
  *         <void>self; <void>isrow; <void>iscol; <void>options; # unused             # <<<<<<<<<<<<<<
  *         raise NotImplementedError
  * 
@@ -132799,20 +141133,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_314factorSymbolicILU(struct PyPe
   ((void)__pyx_v_iscol);
   ((void)__pyx_v_options);
 
-  /* "PETSc/Mat.pyx":1287
- *     def factorSymbolicILU(self, IS isrow not None, IS iscol not None, options=None):
+  /* "PETSc/Mat.pyx":1316
+ *     def factorSymbolicILU(self, IS isrow, IS iscol, options=None):
  *         <void>self; <void>isrow; <void>iscol; <void>options; # unused
  *         raise NotImplementedError             # <<<<<<<<<<<<<<
  * 
- *     def factorCholesky(self, IS isperm not None, options=None):
+ *     def factorCholesky(self, IS isperm, options=None):
  */
   __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
-  __PYX_ERR(33, 1287, __pyx_L1_error)
+  __PYX_ERR(33, 1316, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1285
+  /* "PETSc/Mat.pyx":1314
  *         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):             # <<<<<<<<<<<<<<
+ *     def factorSymbolicILU(self, IS isrow, IS iscol, options=None):             # <<<<<<<<<<<<<<
  *         <void>self; <void>isrow; <void>iscol; <void>options; # unused
  *         raise NotImplementedError
  */
@@ -132826,18 +141160,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_314factorSymbolicILU(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1289
+/* "PETSc/Mat.pyx":1318
  *         raise NotImplementedError
  * 
- *     def factorCholesky(self, IS isperm not None, options=None):             # <<<<<<<<<<<<<<
+ *     def factorCholesky(self, IS isperm, options=None):             # <<<<<<<<<<<<<<
  *         cdef PetscMatFactorInfo info
  *         matfactorinfo(PETSC_FALSE, PETSC_TRUE, options, &info)
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_325factorCholesky(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_324factorCholesky[] = "Mat.factorCholesky(self, IS isperm, options=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_325factorCholesky(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;
@@ -132852,7 +141186,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_317factorCholesky(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -132861,6 +141197,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_317factorCholesky(PyObject *__py
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_isperm)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_options);
@@ -132868,11 +141205,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_317factorCholesky(PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorCholesky") < 0)) __PYX_ERR(33, 1289, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorCholesky") < 0)) __PYX_ERR(33, 1318, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -132883,14 +141221,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_317factorCholesky(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("factorCholesky", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1289, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("factorCholesky", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1318, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isperm), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isperm", 0))) __PYX_ERR(33, 1318, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_324factorCholesky(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isperm, __pyx_v_options);
 
   /* function exit code */
   goto __pyx_L0;
@@ -132901,35 +141239,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_317factorCholesky(PyObject *__py
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_316factorCholesky(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isperm, PyObject *__pyx_v_options) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_324factorCholesky(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;
   __Pyx_RefNannySetupContext("factorCholesky", 0);
 
-  /* "PETSc/Mat.pyx":1291
- *     def factorCholesky(self, IS isperm not None, options=None):
+  /* "PETSc/Mat.pyx":1320
+ *     def factorCholesky(self, IS isperm, 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):
+ *     def factorSymbolicCholesky(self, IS isperm, 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_ERR(33, 1291, __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 == ((int)-1))) __PYX_ERR(33, 1320, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1292
+  /* "PETSc/Mat.pyx":1321
  *         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):
+ *     def factorSymbolicCholesky(self, IS 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_ERR(33, 1292, __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 == ((int)-1))) __PYX_ERR(33, 1321, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1289
+  /* "PETSc/Mat.pyx":1318
  *         raise NotImplementedError
  * 
- *     def factorCholesky(self, IS isperm not None, options=None):             # <<<<<<<<<<<<<<
+ *     def factorCholesky(self, IS isperm, options=None):             # <<<<<<<<<<<<<<
  *         cdef PetscMatFactorInfo info
  *         matfactorinfo(PETSC_FALSE, PETSC_TRUE, options, &info)
  */
@@ -132946,18 +141284,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_316factorCholesky(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1293
+/* "PETSc/Mat.pyx":1322
  *         matfactorinfo(PETSC_FALSE, PETSC_TRUE, options, &info)
  *         CHKERR( MatCholeskyFactor(self.mat, isperm.iset, &info) )
- *     def factorSymbolicCholesky(self, IS isperm not None, options=None):             # <<<<<<<<<<<<<<
+ *     def factorSymbolicCholesky(self, IS isperm, options=None):             # <<<<<<<<<<<<<<
  *         <void>self; <void>isperm; <void>options; # unused
  *         raise NotImplementedError
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_327factorSymbolicCholesky(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_326factorSymbolicCholesky[] = "Mat.factorSymbolicCholesky(self, IS isperm, options=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_327factorSymbolicCholesky(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;
@@ -132972,7 +141310,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_319factorSymbolicCholesky(PyObje
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -132981,6 +141321,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_319factorSymbolicCholesky(PyObje
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_isperm)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_options);
@@ -132988,11 +141329,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_319factorSymbolicCholesky(PyObje
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorSymbolicCholesky") < 0)) __PYX_ERR(33, 1293, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorSymbolicCholesky") < 0)) __PYX_ERR(33, 1322, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -133003,14 +141345,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_319factorSymbolicCholesky(PyObje
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("factorSymbolicCholesky", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1293, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("factorSymbolicCholesky", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1322, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isperm), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isperm", 0))) __PYX_ERR(33, 1322, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_326factorSymbolicCholesky(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isperm, __pyx_v_options);
 
   /* function exit code */
   goto __pyx_L0;
@@ -133021,36 +141363,36 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_319factorSymbolicCholesky(PyObje
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_318factorSymbolicCholesky(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isperm, PyObject *__pyx_v_options) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_326factorSymbolicCholesky(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isperm, PyObject *__pyx_v_options) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("factorSymbolicCholesky", 0);
 
-  /* "PETSc/Mat.pyx":1294
+  /* "PETSc/Mat.pyx":1323
  *         CHKERR( MatCholeskyFactor(self.mat, isperm.iset, &info) )
- *     def factorSymbolicCholesky(self, IS isperm not None, options=None):
+ *     def factorSymbolicCholesky(self, IS isperm, options=None):
  *         <void>self; <void>isperm; <void>options; # unused             # <<<<<<<<<<<<<<
  *         raise NotImplementedError
- *     def factorNumericCholesky(self, Mat mat not None, options=None):
+ *     def factorNumericCholesky(self, Mat mat, options=None):
  */
   ((void)__pyx_v_self);
   ((void)__pyx_v_isperm);
   ((void)__pyx_v_options);
 
-  /* "PETSc/Mat.pyx":1295
- *     def factorSymbolicCholesky(self, IS isperm not None, options=None):
+  /* "PETSc/Mat.pyx":1324
+ *     def factorSymbolicCholesky(self, IS isperm, options=None):
  *         <void>self; <void>isperm; <void>options; # unused
  *         raise NotImplementedError             # <<<<<<<<<<<<<<
- *     def factorNumericCholesky(self, Mat mat not None, options=None):
+ *     def factorNumericCholesky(self, Mat mat, options=None):
  *         <void>self; <void>mat; <void>options; # unused
  */
   __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
-  __PYX_ERR(33, 1295, __pyx_L1_error)
+  __PYX_ERR(33, 1324, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1293
+  /* "PETSc/Mat.pyx":1322
  *         matfactorinfo(PETSC_FALSE, PETSC_TRUE, options, &info)
  *         CHKERR( MatCholeskyFactor(self.mat, isperm.iset, &info) )
- *     def factorSymbolicCholesky(self, IS isperm not None, options=None):             # <<<<<<<<<<<<<<
+ *     def factorSymbolicCholesky(self, IS isperm, options=None):             # <<<<<<<<<<<<<<
  *         <void>self; <void>isperm; <void>options; # unused
  *         raise NotImplementedError
  */
@@ -133064,18 +141406,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_318factorSymbolicCholesky(struct
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1296
+/* "PETSc/Mat.pyx":1325
  *         <void>self; <void>isperm; <void>options; # unused
  *         raise NotImplementedError
- *     def factorNumericCholesky(self, Mat mat not None, options=None):             # <<<<<<<<<<<<<<
+ *     def factorNumericCholesky(self, Mat mat, options=None):             # <<<<<<<<<<<<<<
  *         <void>self; <void>mat; <void>options; # unused
  *         raise NotImplementedError
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_329factorNumericCholesky(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_328factorNumericCholesky[] = "Mat.factorNumericCholesky(self, Mat mat, options=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_329factorNumericCholesky(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;
@@ -133090,7 +141432,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_321factorNumericCholesky(PyObjec
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -133099,6 +141443,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_321factorNumericCholesky(PyObjec
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mat)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_options);
@@ -133106,11 +141451,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_321factorNumericCholesky(PyObjec
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorNumericCholesky") < 0)) __PYX_ERR(33, 1296, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorNumericCholesky") < 0)) __PYX_ERR(33, 1325, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -133121,14 +141467,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_321factorNumericCholesky(PyObjec
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("factorNumericCholesky", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1296, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("factorNumericCholesky", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1325, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(33, 1325, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_328factorNumericCholesky(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_mat, __pyx_v_options);
 
   /* function exit code */
   goto __pyx_L0;
@@ -133139,36 +141485,36 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_321factorNumericCholesky(PyObjec
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_320factorNumericCholesky(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, PyObject *__pyx_v_options) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_328factorNumericCholesky(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat, PyObject *__pyx_v_options) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("factorNumericCholesky", 0);
 
-  /* "PETSc/Mat.pyx":1297
+  /* "PETSc/Mat.pyx":1326
  *         raise NotImplementedError
- *     def factorNumericCholesky(self, Mat mat not None, options=None):
+ *     def factorNumericCholesky(self, Mat mat, options=None):
  *         <void>self; <void>mat; <void>options; # unused             # <<<<<<<<<<<<<<
  *         raise NotImplementedError
- *     def factorICC(self, IS isperm not None, options=None):
+ *     def factorICC(self, IS isperm, options=None):
  */
   ((void)__pyx_v_self);
   ((void)__pyx_v_mat);
   ((void)__pyx_v_options);
 
-  /* "PETSc/Mat.pyx":1298
- *     def factorNumericCholesky(self, Mat mat not None, options=None):
+  /* "PETSc/Mat.pyx":1327
+ *     def factorNumericCholesky(self, Mat mat, options=None):
  *         <void>self; <void>mat; <void>options; # unused
  *         raise NotImplementedError             # <<<<<<<<<<<<<<
- *     def factorICC(self, IS isperm not None, options=None):
+ *     def factorICC(self, IS isperm, options=None):
  *         cdef PetscMatFactorInfo info
  */
   __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
-  __PYX_ERR(33, 1298, __pyx_L1_error)
+  __PYX_ERR(33, 1327, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1296
+  /* "PETSc/Mat.pyx":1325
  *         <void>self; <void>isperm; <void>options; # unused
  *         raise NotImplementedError
- *     def factorNumericCholesky(self, Mat mat not None, options=None):             # <<<<<<<<<<<<<<
+ *     def factorNumericCholesky(self, Mat mat, options=None):             # <<<<<<<<<<<<<<
  *         <void>self; <void>mat; <void>options; # unused
  *         raise NotImplementedError
  */
@@ -133182,18 +141528,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_320factorNumericCholesky(struct
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1299
+/* "PETSc/Mat.pyx":1328
  *         <void>self; <void>mat; <void>options; # unused
  *         raise NotImplementedError
- *     def factorICC(self, IS isperm not None, options=None):             # <<<<<<<<<<<<<<
+ *     def factorICC(self, IS isperm, options=None):             # <<<<<<<<<<<<<<
  *         cdef PetscMatFactorInfo info
  *         matfactorinfo(PETSC_TRUE, PETSC_TRUE, options, &info)
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_331factorICC(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_330factorICC[] = "Mat.factorICC(self, IS isperm, options=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_331factorICC(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;
@@ -133208,7 +141554,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_323factorICC(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -133217,6 +141565,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_323factorICC(PyObject *__pyx_v_s
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_isperm)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_options);
@@ -133224,11 +141573,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_323factorICC(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorICC") < 0)) __PYX_ERR(33, 1299, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorICC") < 0)) __PYX_ERR(33, 1328, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -133239,14 +141589,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_323factorICC(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_ERR(33, 1299, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("factorICC", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1328, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isperm), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isperm", 0))) __PYX_ERR(33, 1328, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_330factorICC(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isperm, __pyx_v_options);
 
   /* function exit code */
   goto __pyx_L0;
@@ -133257,35 +141607,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_323factorICC(PyObject *__pyx_v_s
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_322factorICC(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isperm, PyObject *__pyx_v_options) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_330factorICC(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;
   __Pyx_RefNannySetupContext("factorICC", 0);
 
-  /* "PETSc/Mat.pyx":1301
- *     def factorICC(self, IS isperm not None, options=None):
+  /* "PETSc/Mat.pyx":1330
+ *     def factorICC(self, IS isperm, 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):
+ *     def factorSymbolicICC(self, IS isperm, 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_ERR(33, 1301, __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 == ((int)-1))) __PYX_ERR(33, 1330, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1302
+  /* "PETSc/Mat.pyx":1331
  *         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):
+ *     def factorSymbolicICC(self, IS 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_ERR(33, 1302, __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 == ((int)-1))) __PYX_ERR(33, 1331, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1299
+  /* "PETSc/Mat.pyx":1328
  *         <void>self; <void>mat; <void>options; # unused
  *         raise NotImplementedError
- *     def factorICC(self, IS isperm not None, options=None):             # <<<<<<<<<<<<<<
+ *     def factorICC(self, IS isperm, options=None):             # <<<<<<<<<<<<<<
  *         cdef PetscMatFactorInfo info
  *         matfactorinfo(PETSC_TRUE, PETSC_TRUE, options, &info)
  */
@@ -133302,18 +141652,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_322factorICC(struct PyPetscMatOb
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1303
+/* "PETSc/Mat.pyx":1332
  *         matfactorinfo(PETSC_TRUE, PETSC_TRUE, options, &info)
  *         CHKERR( MatICCFactor(self.mat, isperm.iset, &info) )
- *     def factorSymbolicICC(self, IS isperm not None, options=None):             # <<<<<<<<<<<<<<
+ *     def factorSymbolicICC(self, IS isperm, options=None):             # <<<<<<<<<<<<<<
  *         <void>self; <void>isperm; <void>options; # unused
  *         raise NotImplementedError
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_333factorSymbolicICC(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_332factorSymbolicICC[] = "Mat.factorSymbolicICC(self, IS isperm, options=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_333factorSymbolicICC(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;
@@ -133328,7 +141678,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_325factorSymbolicICC(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -133337,6 +141689,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_325factorSymbolicICC(PyObject *_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_isperm)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_options);
@@ -133344,11 +141697,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_325factorSymbolicICC(PyObject *_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorSymbolicICC") < 0)) __PYX_ERR(33, 1303, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "factorSymbolicICC") < 0)) __PYX_ERR(33, 1332, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -133359,14 +141713,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_325factorSymbolicICC(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("factorSymbolicICC", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1303, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("factorSymbolicICC", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1332, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_isperm), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "isperm", 0))) __PYX_ERR(33, 1332, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_332factorSymbolicICC(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_isperm, __pyx_v_options);
 
   /* function exit code */
   goto __pyx_L0;
@@ -133377,14 +141731,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_325factorSymbolicICC(PyObject *_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_324factorSymbolicICC(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isperm, PyObject *__pyx_v_options) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_332factorSymbolicICC(struct PyPetscMatObject *__pyx_v_self, struct PyPetscISObject *__pyx_v_isperm, PyObject *__pyx_v_options) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("factorSymbolicICC", 0);
 
-  /* "PETSc/Mat.pyx":1304
+  /* "PETSc/Mat.pyx":1333
  *         CHKERR( MatICCFactor(self.mat, isperm.iset, &info) )
- *     def factorSymbolicICC(self, IS isperm not None, options=None):
+ *     def factorSymbolicICC(self, IS isperm, options=None):
  *         <void>self; <void>isperm; <void>options; # unused             # <<<<<<<<<<<<<<
  *         raise NotImplementedError
  * 
@@ -133393,20 +141747,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_324factorSymbolicICC(struct PyPe
   ((void)__pyx_v_isperm);
   ((void)__pyx_v_options);
 
-  /* "PETSc/Mat.pyx":1305
- *     def factorSymbolicICC(self, IS isperm not None, options=None):
+  /* "PETSc/Mat.pyx":1334
+ *     def factorSymbolicICC(self, IS isperm, options=None):
  *         <void>self; <void>isperm; <void>options; # unused
  *         raise NotImplementedError             # <<<<<<<<<<<<<<
  * 
  *     def getInertia(self):
  */
   __Pyx_Raise(__pyx_builtin_NotImplementedError, 0, 0, 0);
-  __PYX_ERR(33, 1305, __pyx_L1_error)
+  __PYX_ERR(33, 1334, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1303
+  /* "PETSc/Mat.pyx":1332
  *         matfactorinfo(PETSC_TRUE, PETSC_TRUE, options, &info)
  *         CHKERR( MatICCFactor(self.mat, isperm.iset, &info) )
- *     def factorSymbolicICC(self, IS isperm not None, options=None):             # <<<<<<<<<<<<<<
+ *     def factorSymbolicICC(self, IS isperm, options=None):             # <<<<<<<<<<<<<<
  *         <void>self; <void>isperm; <void>options; # unused
  *         raise NotImplementedError
  */
@@ -133420,7 +141774,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_324factorSymbolicICC(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1307
+/* "PETSc/Mat.pyx":1336
  *         raise NotImplementedError
  * 
  *     def getInertia(self):             # <<<<<<<<<<<<<<
@@ -133429,23 +141783,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_324factorSymbolicICC(struct PyPe
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_335getInertia(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_334getInertia[] = "Mat.getInertia(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_335getInertia(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_326getInertia(((struct PyPetscMatObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_334getInertia(((struct PyPetscMatObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_326getInertia(struct PyPetscMatObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_334getInertia(struct PyPetscMatObject *__pyx_v_self) {
   PetscInt __pyx_v_ival1;
   PetscInt __pyx_v_ival2;
   PetscInt __pyx_v_ival3;
@@ -133458,7 +141812,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_326getInertia(struct PyPetscMatO
   PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("getInertia", 0);
 
-  /* "PETSc/Mat.pyx":1308
+  /* "PETSc/Mat.pyx":1337
  * 
  *     def getInertia(self):
  *         cdef PetscInt ival1 = 0, ival2 = 0, ival3 = 0             # <<<<<<<<<<<<<<
@@ -133469,16 +141823,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_326getInertia(struct PyPetscMatO
   __pyx_v_ival2 = 0;
   __pyx_v_ival3 = 0;
 
-  /* "PETSc/Mat.pyx":1309
+  /* "PETSc/Mat.pyx":1338
  *     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_ERR(33, 1309, __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 == ((int)-1))) __PYX_ERR(33, 1338, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1310
+  /* "PETSc/Mat.pyx":1339
  *         cdef PetscInt ival1 = 0, ival2 = 0, ival3 = 0
  *         CHKERR( MatGetInertia(self.mat, &ival1, &ival2, &ival3) )
  *         return (toInt(ival1), toInt(ival2), toInt(ival3))             # <<<<<<<<<<<<<<
@@ -133486,13 +141840,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_326getInertia(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_ERR(33, 1310, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival1); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 1339, __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_ERR(33, 1310, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival2); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1339, __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_ERR(33, 1310, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival3); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1339, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(33, 1310, __pyx_L1_error)
+  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(33, 1339, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
@@ -133507,7 +141861,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_326getInertia(struct PyPetscMatO
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1307
+  /* "PETSc/Mat.pyx":1336
  *         raise NotImplementedError
  * 
  *     def getInertia(self):             # <<<<<<<<<<<<<<
@@ -133529,7 +141883,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_326getInertia(struct PyPetscMatO
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1312
+/* "PETSc/Mat.pyx":1341
  *         return (toInt(ival1), toInt(ival2), toInt(ival3))
  * 
  *     def setUnfactored(self):             # <<<<<<<<<<<<<<
@@ -133538,38 +141892,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_326getInertia(struct PyPetscMatO
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_337setUnfactored(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_336setUnfactored[] = "Mat.setUnfactored(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_337setUnfactored(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_328setUnfactored(((struct PyPetscMatObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_336setUnfactored(((struct PyPetscMatObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_328setUnfactored(struct PyPetscMatObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_336setUnfactored(struct PyPetscMatObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setUnfactored", 0);
 
-  /* "PETSc/Mat.pyx":1313
+  /* "PETSc/Mat.pyx":1342
  * 
  *     def setUnfactored(self):
  *         CHKERR( MatSetUnfactored(self.mat) )             # <<<<<<<<<<<<<<
  * 
- *     # MUMPS
+ *     # LRC
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatSetUnfactored(__pyx_v_self->mat)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(33, 1342, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1312
+  /* "PETSc/Mat.pyx":1341
  *         return (toInt(ival1), toInt(ival2), toInt(ival3))
  * 
  *     def setUnfactored(self):             # <<<<<<<<<<<<<<
@@ -133589,7 +141943,185 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_328setUnfactored(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1317
+/* "PETSc/Mat.pyx":1346
+ *     # LRC
+ * 
+ *     def getLRCMats(self):             # <<<<<<<<<<<<<<
+ *         cdef Mat A = Mat()
+ *         cdef Mat U = Mat()
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_339getLRCMats(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_338getLRCMats[] = "Mat.getLRCMats(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_339getLRCMats(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getLRCMats (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getLRCMats", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getLRCMats", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_338getLRCMats(((struct PyPetscMatObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_338getLRCMats(struct PyPetscMatObject *__pyx_v_self) {
+  struct PyPetscMatObject *__pyx_v_A = 0;
+  struct PyPetscMatObject *__pyx_v_U = 0;
+  struct PyPetscVecObject *__pyx_v_c = 0;
+  struct PyPetscMatObject *__pyx_v_V = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getLRCMats", 0);
+
+  /* "PETSc/Mat.pyx":1347
+ * 
+ *     def getLRCMats(self):
+ *         cdef Mat A = Mat()             # <<<<<<<<<<<<<<
+ *         cdef Mat U = Mat()
+ *         cdef Vec c = Vec()
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1347, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_A = ((struct PyPetscMatObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/Mat.pyx":1348
+ *     def getLRCMats(self):
+ *         cdef Mat A = Mat()
+ *         cdef Mat U = Mat()             # <<<<<<<<<<<<<<
+ *         cdef Vec c = Vec()
+ *         cdef Mat V = Mat()
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1348, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_U = ((struct PyPetscMatObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/Mat.pyx":1349
+ *         cdef Mat A = Mat()
+ *         cdef Mat U = Mat()
+ *         cdef Vec c = Vec()             # <<<<<<<<<<<<<<
+ *         cdef Mat V = Mat()
+ *         CHKERR( MatLRCGetMats(self.mat, &A.mat, &U.mat, &c.vec, &V.mat) )
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1349, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_c = ((struct PyPetscVecObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/Mat.pyx":1350
+ *         cdef Mat U = Mat()
+ *         cdef Vec c = Vec()
+ *         cdef Mat V = Mat()             # <<<<<<<<<<<<<<
+ *         CHKERR( MatLRCGetMats(self.mat, &A.mat, &U.mat, &c.vec, &V.mat) )
+ *         PetscINCREF(A.obj)
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1350, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_V = ((struct PyPetscMatObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/Mat.pyx":1351
+ *         cdef Vec c = Vec()
+ *         cdef Mat V = Mat()
+ *         CHKERR( MatLRCGetMats(self.mat, &A.mat, &U.mat, &c.vec, &V.mat) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(A.obj)
+ *         PetscINCREF(U.obj)
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatLRCGetMats(__pyx_v_self->mat, (&__pyx_v_A->mat), (&__pyx_v_U->mat), (&__pyx_v_c->vec), (&__pyx_v_V->mat))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(33, 1351, __pyx_L1_error)
+
+  /* "PETSc/Mat.pyx":1352
+ *         cdef Mat V = Mat()
+ *         CHKERR( MatLRCGetMats(self.mat, &A.mat, &U.mat, &c.vec, &V.mat) )
+ *         PetscINCREF(A.obj)             # <<<<<<<<<<<<<<
+ *         PetscINCREF(U.obj)
+ *         PetscINCREF(c.obj)
+ */
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_A->__pyx_base.obj);
+
+  /* "PETSc/Mat.pyx":1353
+ *         CHKERR( MatLRCGetMats(self.mat, &A.mat, &U.mat, &c.vec, &V.mat) )
+ *         PetscINCREF(A.obj)
+ *         PetscINCREF(U.obj)             # <<<<<<<<<<<<<<
+ *         PetscINCREF(c.obj)
+ *         PetscINCREF(V.obj)
+ */
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_U->__pyx_base.obj);
+
+  /* "PETSc/Mat.pyx":1354
+ *         PetscINCREF(A.obj)
+ *         PetscINCREF(U.obj)
+ *         PetscINCREF(c.obj)             # <<<<<<<<<<<<<<
+ *         PetscINCREF(V.obj)
+ *         return (A, U, c, V)
+ */
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_c->__pyx_base.obj);
+
+  /* "PETSc/Mat.pyx":1355
+ *         PetscINCREF(U.obj)
+ *         PetscINCREF(c.obj)
+ *         PetscINCREF(V.obj)             # <<<<<<<<<<<<<<
+ *         return (A, U, c, V)
+ * 
+ */
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_V->__pyx_base.obj);
+
+  /* "PETSc/Mat.pyx":1356
+ *         PetscINCREF(c.obj)
+ *         PetscINCREF(V.obj)
+ *         return (A, U, c, V)             # <<<<<<<<<<<<<<
+ * 
+ *     # MUMPS
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1356, __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_U));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_U));
+  PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_U));
+  __Pyx_INCREF(((PyObject *)__pyx_v_c));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_c));
+  PyTuple_SET_ITEM(__pyx_t_1, 2, ((PyObject *)__pyx_v_c));
+  __Pyx_INCREF(((PyObject *)__pyx_v_V));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_V));
+  PyTuple_SET_ITEM(__pyx_t_1, 3, ((PyObject *)__pyx_v_V));
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/Mat.pyx":1346
+ *     # LRC
+ * 
+ *     def getLRCMats(self):             # <<<<<<<<<<<<<<
+ *         cdef Mat A = Mat()
+ *         cdef Mat U = Mat()
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.Mat.getLRCMats", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_A);
+  __Pyx_XDECREF((PyObject *)__pyx_v_U);
+  __Pyx_XDECREF((PyObject *)__pyx_v_c);
+  __Pyx_XDECREF((PyObject *)__pyx_v_V);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/Mat.pyx":1360
  *     # MUMPS
  * 
  *     def setMumpsIcntl(self, icntl, ival):             # <<<<<<<<<<<<<<
@@ -133598,9 +142130,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_328setUnfactored(struct PyPetscM
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_341setMumpsIcntl(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_340setMumpsIcntl[] = "Mat.setMumpsIcntl(self, icntl, ival)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_341setMumpsIcntl(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_icntl = 0;
   PyObject *__pyx_v_ival = 0;
   PyObject *__pyx_r = 0;
@@ -133614,7 +142146,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_331setMumpsIcntl(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -133623,14 +142157,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_331setMumpsIcntl(PyObject *__pyx
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_icntl)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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)
+          __Pyx_RaiseArgtupleInvalid("setMumpsIcntl", 1, 2, 2, 1); __PYX_ERR(33, 1360, __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)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMumpsIcntl") < 0)) __PYX_ERR(33, 1360, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -133643,20 +142178,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_331setMumpsIcntl(PyObject *__pyx
   }
   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_RaiseArgtupleInvalid("setMumpsIcntl", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1360, __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);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_340setMumpsIcntl(((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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_340setMumpsIcntl(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;
@@ -133665,36 +142200,36 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_330setMumpsIcntl(struct PyPetscM
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setMumpsIcntl", 0);
 
-  /* "PETSc/Mat.pyx":1318
+  /* "PETSc/Mat.pyx":1361
  * 
  *     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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_icntl); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(33, 1361, __pyx_L1_error)
   __pyx_v__icntl = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":1319
+  /* "PETSc/Mat.pyx":1362
  *     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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_ival); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(33, 1362, __pyx_L1_error)
   __pyx_v__ival = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":1320
+  /* "PETSc/Mat.pyx":1363
  *         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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMumpsSetIcntl(__pyx_v_self->mat, __pyx_v__icntl, __pyx_v__ival)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(33, 1363, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1317
+  /* "PETSc/Mat.pyx":1360
  *     # MUMPS
  * 
  *     def setMumpsIcntl(self, icntl, ival):             # <<<<<<<<<<<<<<
@@ -133714,7 +142249,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_330setMumpsIcntl(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1322
+/* "PETSc/Mat.pyx":1365
  *         CHKERR( MatMumpsSetIcntl(self.mat, _icntl, _ival) );
  * 
  *     def getMumpsIcntl(self, icntl):             # <<<<<<<<<<<<<<
@@ -133723,9 +142258,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_330setMumpsIcntl(struct PyPetscM
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_343getMumpsIcntl(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_342getMumpsIcntl[] = "Mat.getMumpsIcntl(self, icntl)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_343getMumpsIcntl(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_icntl = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -133738,6 +142273,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_333getMumpsIcntl(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -133748,7 +142284,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_333getMumpsIcntl(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, "getMumpsIcntl") < 0)) __PYX_ERR(33, 1322, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getMumpsIcntl") < 0)) __PYX_ERR(33, 1365, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -133759,20 +142295,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_333getMumpsIcntl(PyObject *__pyx
   }
   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_RaiseArgtupleInvalid("getMumpsIcntl", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1365, __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);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_342getMumpsIcntl(((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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_342getMumpsIcntl(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_icntl) {
   PetscInt __pyx_v__icntl;
   PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
@@ -133782,17 +142318,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_332getMumpsIcntl(struct PyPetscM
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("getMumpsIcntl", 0);
 
-  /* "PETSc/Mat.pyx":1323
+  /* "PETSc/Mat.pyx":1366
  * 
  *     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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_icntl); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(33, 1366, __pyx_L1_error)
   __pyx_v__icntl = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":1324
+  /* "PETSc/Mat.pyx":1367
  *     def getMumpsIcntl(self, icntl):
  *         cdef PetscInt _icntl = asInt(icntl)
  *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
@@ -133801,16 +142337,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_332getMumpsIcntl(struct PyPetscM
  */
   __pyx_v_ival = 0;
 
-  /* "PETSc/Mat.pyx":1325
+  /* "PETSc/Mat.pyx":1368
  *         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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMumpsGetIcntl(__pyx_v_self->mat, __pyx_v__icntl, (&__pyx_v_ival))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(33, 1368, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1326
+  /* "PETSc/Mat.pyx":1369
  *         cdef PetscInt ival = 0
  *         CHKERR( MatMumpsGetIcntl(self.mat, _icntl, &ival) );
  *         return toInt(ival)             # <<<<<<<<<<<<<<
@@ -133818,13 +142354,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_332getMumpsIcntl(struct PyPetscM
  *     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_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1369, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1322
+  /* "PETSc/Mat.pyx":1365
  *         CHKERR( MatMumpsSetIcntl(self.mat, _icntl, _ival) );
  * 
  *     def getMumpsIcntl(self, icntl):             # <<<<<<<<<<<<<<
@@ -133843,7 +142379,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_332getMumpsIcntl(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1328
+/* "PETSc/Mat.pyx":1371
  *         return toInt(ival)
  * 
  *     def setMumpsCntl(self, icntl, val):             # <<<<<<<<<<<<<<
@@ -133852,9 +142388,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_332getMumpsIcntl(struct PyPetscM
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_345setMumpsCntl(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_344setMumpsCntl[] = "Mat.setMumpsCntl(self, icntl, val)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_345setMumpsCntl(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_icntl = 0;
   PyObject *__pyx_v_val = 0;
   PyObject *__pyx_r = 0;
@@ -133868,7 +142404,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_335setMumpsCntl(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -133877,14 +142415,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_335setMumpsCntl(PyObject *__pyx_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_icntl)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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)
+          __Pyx_RaiseArgtupleInvalid("setMumpsCntl", 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, "setMumpsCntl") < 0)) __PYX_ERR(33, 1328, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMumpsCntl") < 0)) __PYX_ERR(33, 1371, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -133897,20 +142436,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_335setMumpsCntl(PyObject *__pyx_
   }
   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_RaiseArgtupleInvalid("setMumpsCntl", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1371, __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);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_344setMumpsCntl(((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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_344setMumpsCntl(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;
@@ -133920,36 +142459,36 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_334setMumpsCntl(struct PyPetscMa
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("setMumpsCntl", 0);
 
-  /* "PETSc/Mat.pyx":1329
+  /* "PETSc/Mat.pyx":1372
  * 
  *     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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_icntl); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(33, 1372, __pyx_L1_error)
   __pyx_v__icntl = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":1330
+  /* "PETSc/Mat.pyx":1373
  *     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_t_2 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_val); if (unlikely(__pyx_t_2 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(33, 1373, __pyx_L1_error)
   __pyx_v__val = __pyx_t_2;
 
-  /* "PETSc/Mat.pyx":1331
+  /* "PETSc/Mat.pyx":1374
  *         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)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMumpsSetCntl(__pyx_v_self->mat, __pyx_v__icntl, __pyx_v__val)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(33, 1374, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1328
+  /* "PETSc/Mat.pyx":1371
  *         return toInt(ival)
  * 
  *     def setMumpsCntl(self, icntl, val):             # <<<<<<<<<<<<<<
@@ -133969,7 +142508,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_334setMumpsCntl(struct PyPetscMa
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1333
+/* "PETSc/Mat.pyx":1376
  *         CHKERR( MatMumpsSetCntl(self.mat, _icntl, _val) );
  * 
  *     def getMumpsCntl(self, icntl):             # <<<<<<<<<<<<<<
@@ -133978,9 +142517,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_334setMumpsCntl(struct PyPetscMa
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_347getMumpsCntl(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_346getMumpsCntl[] = "Mat.getMumpsCntl(self, icntl)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_347getMumpsCntl(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_icntl = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -133993,6 +142532,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_337getMumpsCntl(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -134003,7 +142543,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_337getMumpsCntl(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, "getMumpsCntl") < 0)) __PYX_ERR(33, 1333, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getMumpsCntl") < 0)) __PYX_ERR(33, 1376, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -134014,20 +142554,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_337getMumpsCntl(PyObject *__pyx_
   }
   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_RaiseArgtupleInvalid("getMumpsCntl", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1376, __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);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_346getMumpsCntl(((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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_346getMumpsCntl(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_icntl) {
   PetscInt __pyx_v__icntl;
   PetscReal __pyx_v_val;
   PyObject *__pyx_r = NULL;
@@ -134037,17 +142577,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_336getMumpsCntl(struct PyPetscMa
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("getMumpsCntl", 0);
 
-  /* "PETSc/Mat.pyx":1334
+  /* "PETSc/Mat.pyx":1377
  * 
  *     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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_icntl); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(33, 1377, __pyx_L1_error)
   __pyx_v__icntl = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":1335
+  /* "PETSc/Mat.pyx":1378
  *     def getMumpsCntl(self, icntl):
  *         cdef PetscInt _icntl = asInt(icntl)
  *         cdef PetscReal val = 0             # <<<<<<<<<<<<<<
@@ -134056,16 +142596,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_336getMumpsCntl(struct PyPetscMa
  */
   __pyx_v_val = 0.0;
 
-  /* "PETSc/Mat.pyx":1336
+  /* "PETSc/Mat.pyx":1379
  *         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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMumpsGetCntl(__pyx_v_self->mat, __pyx_v__icntl, (&__pyx_v_val))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(33, 1379, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1337
+  /* "PETSc/Mat.pyx":1380
  *         cdef PetscReal val = 0
  *         CHKERR( MatMumpsGetCntl(self.mat, _icntl, &val) );
  *         return toReal(val)             # <<<<<<<<<<<<<<
@@ -134073,13 +142613,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_336getMumpsCntl(struct PyPetscMa
  *     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_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_val); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1380, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1333
+  /* "PETSc/Mat.pyx":1376
  *         CHKERR( MatMumpsSetCntl(self.mat, _icntl, _val) );
  * 
  *     def getMumpsCntl(self, icntl):             # <<<<<<<<<<<<<<
@@ -134098,7 +142638,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_336getMumpsCntl(struct PyPetscMa
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1339
+/* "PETSc/Mat.pyx":1382
  *         return toReal(val)
  * 
  *     def getMumpsInfo(self, icntl):             # <<<<<<<<<<<<<<
@@ -134107,9 +142647,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_336getMumpsCntl(struct PyPetscMa
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_349getMumpsInfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_348getMumpsInfo[] = "Mat.getMumpsInfo(self, icntl)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_349getMumpsInfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_icntl = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -134122,6 +142662,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_339getMumpsInfo(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -134132,7 +142673,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_339getMumpsInfo(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, "getMumpsInfo") < 0)) __PYX_ERR(33, 1339, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getMumpsInfo") < 0)) __PYX_ERR(33, 1382, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -134143,20 +142684,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_339getMumpsInfo(PyObject *__pyx_
   }
   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_RaiseArgtupleInvalid("getMumpsInfo", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1382, __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);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_348getMumpsInfo(((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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_348getMumpsInfo(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_icntl) {
   PetscInt __pyx_v__icntl;
   PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
@@ -134166,17 +142707,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_338getMumpsInfo(struct PyPetscMa
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("getMumpsInfo", 0);
 
-  /* "PETSc/Mat.pyx":1340
+  /* "PETSc/Mat.pyx":1383
  * 
  *     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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_icntl); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(33, 1383, __pyx_L1_error)
   __pyx_v__icntl = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":1341
+  /* "PETSc/Mat.pyx":1384
  *     def getMumpsInfo(self, icntl):
  *         cdef PetscInt _icntl = asInt(icntl)
  *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
@@ -134185,16 +142726,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_338getMumpsInfo(struct PyPetscMa
  */
   __pyx_v_ival = 0;
 
-  /* "PETSc/Mat.pyx":1342
+  /* "PETSc/Mat.pyx":1385
  *         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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMumpsGetInfo(__pyx_v_self->mat, __pyx_v__icntl, (&__pyx_v_ival))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(33, 1385, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1343
+  /* "PETSc/Mat.pyx":1386
  *         cdef PetscInt ival = 0
  *         CHKERR( MatMumpsGetInfo(self.mat, _icntl, &ival) );
  *         return toInt(ival)             # <<<<<<<<<<<<<<
@@ -134202,13 +142743,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_338getMumpsInfo(struct PyPetscMa
  *     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_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1386, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1339
+  /* "PETSc/Mat.pyx":1382
  *         return toReal(val)
  * 
  *     def getMumpsInfo(self, icntl):             # <<<<<<<<<<<<<<
@@ -134227,7 +142768,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_338getMumpsInfo(struct PyPetscMa
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1345
+/* "PETSc/Mat.pyx":1388
  *         return toInt(ival)
  * 
  *     def getMumpsInfog(self, icntl):             # <<<<<<<<<<<<<<
@@ -134236,9 +142777,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_338getMumpsInfo(struct PyPetscMa
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_351getMumpsInfog(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_350getMumpsInfog[] = "Mat.getMumpsInfog(self, icntl)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_351getMumpsInfog(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_icntl = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -134251,6 +142792,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_341getMumpsInfog(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -134261,7 +142803,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_341getMumpsInfog(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, "getMumpsInfog") < 0)) __PYX_ERR(33, 1345, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getMumpsInfog") < 0)) __PYX_ERR(33, 1388, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -134272,20 +142814,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_341getMumpsInfog(PyObject *__pyx
   }
   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_RaiseArgtupleInvalid("getMumpsInfog", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1388, __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);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_350getMumpsInfog(((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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_350getMumpsInfog(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_icntl) {
   PetscInt __pyx_v__icntl;
   PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
@@ -134295,17 +142837,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_340getMumpsInfog(struct PyPetscM
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("getMumpsInfog", 0);
 
-  /* "PETSc/Mat.pyx":1346
+  /* "PETSc/Mat.pyx":1389
  * 
  *     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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_icntl); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(33, 1389, __pyx_L1_error)
   __pyx_v__icntl = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":1347
+  /* "PETSc/Mat.pyx":1390
  *     def getMumpsInfog(self, icntl):
  *         cdef PetscInt _icntl = asInt(icntl)
  *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
@@ -134314,16 +142856,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_340getMumpsInfog(struct PyPetscM
  */
   __pyx_v_ival = 0;
 
-  /* "PETSc/Mat.pyx":1348
+  /* "PETSc/Mat.pyx":1391
  *         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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMumpsGetInfog(__pyx_v_self->mat, __pyx_v__icntl, (&__pyx_v_ival))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(33, 1391, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1349
+  /* "PETSc/Mat.pyx":1392
  *         cdef PetscInt ival = 0
  *         CHKERR( MatMumpsGetInfog(self.mat, _icntl, &ival) );
  *         return toInt(ival)             # <<<<<<<<<<<<<<
@@ -134331,13 +142873,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_340getMumpsInfog(struct PyPetscM
  *     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_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1392, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1345
+  /* "PETSc/Mat.pyx":1388
  *         return toInt(ival)
  * 
  *     def getMumpsInfog(self, icntl):             # <<<<<<<<<<<<<<
@@ -134356,7 +142898,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_340getMumpsInfog(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1351
+/* "PETSc/Mat.pyx":1394
  *         return toInt(ival)
  * 
  *     def getMumpsRinfo(self, icntl):             # <<<<<<<<<<<<<<
@@ -134365,9 +142907,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_340getMumpsInfog(struct PyPetscM
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_353getMumpsRinfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_352getMumpsRinfo[] = "Mat.getMumpsRinfo(self, icntl)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_353getMumpsRinfo(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_icntl = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -134380,6 +142922,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_343getMumpsRinfo(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -134390,7 +142933,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_343getMumpsRinfo(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, "getMumpsRinfo") < 0)) __PYX_ERR(33, 1351, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getMumpsRinfo") < 0)) __PYX_ERR(33, 1394, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -134401,20 +142944,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_343getMumpsRinfo(PyObject *__pyx
   }
   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_RaiseArgtupleInvalid("getMumpsRinfo", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1394, __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);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_352getMumpsRinfo(((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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_352getMumpsRinfo(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_icntl) {
   PetscInt __pyx_v__icntl;
   PetscReal __pyx_v_val;
   PyObject *__pyx_r = NULL;
@@ -134424,17 +142967,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_342getMumpsRinfo(struct PyPetscM
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("getMumpsRinfo", 0);
 
-  /* "PETSc/Mat.pyx":1352
+  /* "PETSc/Mat.pyx":1395
  * 
  *     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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_icntl); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(33, 1395, __pyx_L1_error)
   __pyx_v__icntl = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":1353
+  /* "PETSc/Mat.pyx":1396
  *     def getMumpsRinfo(self, icntl):
  *         cdef PetscInt _icntl = asInt(icntl)
  *         cdef PetscReal val = 0             # <<<<<<<<<<<<<<
@@ -134443,16 +142986,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_342getMumpsRinfo(struct PyPetscM
  */
   __pyx_v_val = 0.0;
 
-  /* "PETSc/Mat.pyx":1354
+  /* "PETSc/Mat.pyx":1397
  *         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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMumpsGetRinfo(__pyx_v_self->mat, __pyx_v__icntl, (&__pyx_v_val))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(33, 1397, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1355
+  /* "PETSc/Mat.pyx":1398
  *         cdef PetscReal val = 0
  *         CHKERR( MatMumpsGetRinfo(self.mat, _icntl, &val) );
  *         return toReal(val)             # <<<<<<<<<<<<<<
@@ -134460,13 +143003,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_342getMumpsRinfo(struct PyPetscM
  *     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_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_val); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1398, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1351
+  /* "PETSc/Mat.pyx":1394
  *         return toInt(ival)
  * 
  *     def getMumpsRinfo(self, icntl):             # <<<<<<<<<<<<<<
@@ -134485,7 +143028,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_342getMumpsRinfo(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1357
+/* "PETSc/Mat.pyx":1400
  *         return toReal(val)
  * 
  *     def getMumpsRinfog(self, icntl):             # <<<<<<<<<<<<<<
@@ -134494,9 +143037,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_342getMumpsRinfo(struct PyPetscM
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_355getMumpsRinfog(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_354getMumpsRinfog[] = "Mat.getMumpsRinfog(self, icntl)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_355getMumpsRinfog(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_icntl = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -134509,6 +143052,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_345getMumpsRinfog(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -134519,7 +143063,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_345getMumpsRinfog(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, "getMumpsRinfog") < 0)) __PYX_ERR(33, 1357, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getMumpsRinfog") < 0)) __PYX_ERR(33, 1400, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -134530,20 +143074,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_345getMumpsRinfog(PyObject *__py
   }
   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_RaiseArgtupleInvalid("getMumpsRinfog", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1400, __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);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_354getMumpsRinfog(((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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_354getMumpsRinfog(struct PyPetscMatObject *__pyx_v_self, PyObject *__pyx_v_icntl) {
   PetscInt __pyx_v__icntl;
   PetscReal __pyx_v_val;
   PyObject *__pyx_r = NULL;
@@ -134553,17 +143097,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_344getMumpsRinfog(struct PyPetsc
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("getMumpsRinfog", 0);
 
-  /* "PETSc/Mat.pyx":1358
+  /* "PETSc/Mat.pyx":1401
  * 
  *     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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_icntl); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(33, 1401, __pyx_L1_error)
   __pyx_v__icntl = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":1359
+  /* "PETSc/Mat.pyx":1402
  *     def getMumpsRinfog(self, icntl):
  *         cdef PetscInt _icntl = asInt(icntl)
  *         cdef PetscReal val = 0             # <<<<<<<<<<<<<<
@@ -134572,16 +143116,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_344getMumpsRinfog(struct PyPetsc
  */
   __pyx_v_val = 0.0;
 
-  /* "PETSc/Mat.pyx":1360
+  /* "PETSc/Mat.pyx":1403
  *         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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatMumpsGetRinfog(__pyx_v_self->mat, __pyx_v__icntl, (&__pyx_v_val))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(33, 1403, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1361
+  /* "PETSc/Mat.pyx":1404
  *         cdef PetscReal val = 0
  *         CHKERR( MatMumpsGetRinfog(self.mat, _icntl, &val) );
  *         return toReal(val)             # <<<<<<<<<<<<<<
@@ -134589,13 +143133,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_344getMumpsRinfog(struct PyPetsc
  *     # 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_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_val); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 1404, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1357
+  /* "PETSc/Mat.pyx":1400
  *         return toReal(val)
  * 
  *     def getMumpsRinfog(self, icntl):             # <<<<<<<<<<<<<<
@@ -134614,18 +143158,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_344getMumpsRinfog(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1365
+/* "PETSc/Mat.pyx":1408
  *     # solve
  * 
- *     def solveForward(self, Vec b not None, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def solveForward(self, Vec b, Vec x):             # <<<<<<<<<<<<<<
  *         CHKERR( MatForwardSolve(self.mat, b.vec, x.vec) )
  * 
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_357solveForward(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_356solveForward[] = "Mat.solveForward(self, Vec b, Vec x)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_357solveForward(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_b = 0;
   struct PyPetscVecObject *__pyx_v_x = 0;
   PyObject *__pyx_r = 0;
@@ -134639,7 +143183,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_347solveForward(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -134648,14 +143194,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_347solveForward(PyObject *__pyx_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_b)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 1365, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("solveForward", 1, 2, 2, 1); __PYX_ERR(33, 1408, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solveForward") < 0)) __PYX_ERR(33, 1365, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solveForward") < 0)) __PYX_ERR(33, 1408, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -134668,15 +143215,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_347solveForward(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("solveForward", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1365, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("solveForward", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1408, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "b", 0))) __PYX_ERR(33, 1408, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(33, 1408, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_356solveForward(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_b, __pyx_v_x);
 
   /* function exit code */
   goto __pyx_L0;
@@ -134687,25 +143234,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_347solveForward(PyObject *__pyx_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_346solveForward(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_356solveForward(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;
   __Pyx_RefNannySetupContext("solveForward", 0);
 
-  /* "PETSc/Mat.pyx":1366
+  /* "PETSc/Mat.pyx":1409
  * 
- *     def solveForward(self, Vec b not None, Vec x not None):
+ *     def solveForward(self, Vec b, Vec x):
  *         CHKERR( MatForwardSolve(self.mat, b.vec, x.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def solveBackward(self, Vec b not None, Vec x not None):
+ *     def solveBackward(self, Vec b, Vec x):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(33, 1409, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1365
+  /* "PETSc/Mat.pyx":1408
  *     # solve
  * 
- *     def solveForward(self, Vec b not None, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def solveForward(self, Vec b, Vec x):             # <<<<<<<<<<<<<<
  *         CHKERR( MatForwardSolve(self.mat, b.vec, x.vec) )
  * 
  */
@@ -134722,18 +143269,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_346solveForward(struct PyPetscMa
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1368
+/* "PETSc/Mat.pyx":1411
  *         CHKERR( MatForwardSolve(self.mat, b.vec, x.vec) )
  * 
- *     def solveBackward(self, Vec b not None, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def solveBackward(self, Vec b, Vec x):             # <<<<<<<<<<<<<<
  *         CHKERR( MatBackwardSolve(self.mat, b.vec, x.vec) )
  * 
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_359solveBackward(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_358solveBackward[] = "Mat.solveBackward(self, Vec b, Vec x)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_359solveBackward(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_b = 0;
   struct PyPetscVecObject *__pyx_v_x = 0;
   PyObject *__pyx_r = 0;
@@ -134747,7 +143294,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_349solveBackward(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -134756,14 +143305,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_349solveBackward(PyObject *__pyx
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_b)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 1368, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("solveBackward", 1, 2, 2, 1); __PYX_ERR(33, 1411, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solveBackward") < 0)) __PYX_ERR(33, 1368, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solveBackward") < 0)) __PYX_ERR(33, 1411, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -134776,15 +143326,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_349solveBackward(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("solveBackward", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1368, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("solveBackward", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1411, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "b", 0))) __PYX_ERR(33, 1411, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(33, 1411, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_358solveBackward(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_b, __pyx_v_x);
 
   /* function exit code */
   goto __pyx_L0;
@@ -134795,25 +143345,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_349solveBackward(PyObject *__pyx
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_348solveBackward(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_358solveBackward(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;
   __Pyx_RefNannySetupContext("solveBackward", 0);
 
-  /* "PETSc/Mat.pyx":1369
+  /* "PETSc/Mat.pyx":1412
  * 
- *     def solveBackward(self, Vec b not None, Vec x not None):
+ *     def solveBackward(self, Vec b, Vec x):
  *         CHKERR( MatBackwardSolve(self.mat, b.vec, x.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def solve(self, Vec b not None, Vec x not None):
+ *     def solve(self, Vec b, Vec x):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(33, 1412, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1368
+  /* "PETSc/Mat.pyx":1411
  *         CHKERR( MatForwardSolve(self.mat, b.vec, x.vec) )
  * 
- *     def solveBackward(self, Vec b not None, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def solveBackward(self, Vec b, Vec x):             # <<<<<<<<<<<<<<
  *         CHKERR( MatBackwardSolve(self.mat, b.vec, x.vec) )
  * 
  */
@@ -134830,18 +143380,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_348solveBackward(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1371
+/* "PETSc/Mat.pyx":1414
  *         CHKERR( MatBackwardSolve(self.mat, b.vec, x.vec) )
  * 
- *     def solve(self, Vec b not None, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def solve(self, Vec b, Vec x):             # <<<<<<<<<<<<<<
  *         CHKERR( MatSolve(self.mat, b.vec, x.vec) )
  * 
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_361solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_360solve[] = "Mat.solve(self, Vec b, Vec x)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_361solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_b = 0;
   struct PyPetscVecObject *__pyx_v_x = 0;
   PyObject *__pyx_r = 0;
@@ -134855,7 +143405,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_351solve(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -134864,14 +143416,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_351solve(PyObject *__pyx_v_self,
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_b)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("solve", 1, 2, 2, 1); __PYX_ERR(33, 1371, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("solve", 1, 2, 2, 1); __PYX_ERR(33, 1414, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solve") < 0)) __PYX_ERR(33, 1371, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solve") < 0)) __PYX_ERR(33, 1414, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -134884,15 +143437,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_351solve(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_ERR(33, 1371, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("solve", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1414, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "b", 0))) __PYX_ERR(33, 1414, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(33, 1414, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_360solve(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_b, __pyx_v_x);
 
   /* function exit code */
   goto __pyx_L0;
@@ -134903,25 +143456,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_351solve(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_350solve(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_360solve(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;
   __Pyx_RefNannySetupContext("solve", 0);
 
-  /* "PETSc/Mat.pyx":1372
+  /* "PETSc/Mat.pyx":1415
  * 
- *     def solve(self, Vec b not None, Vec x not None):
+ *     def solve(self, Vec b, Vec x):
  *         CHKERR( MatSolve(self.mat, b.vec, x.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def solveTranspose(self, Vec b not None, Vec x not None):
+ *     def solveTranspose(self, Vec b, Vec x):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(33, 1415, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1371
+  /* "PETSc/Mat.pyx":1414
  *         CHKERR( MatBackwardSolve(self.mat, b.vec, x.vec) )
  * 
- *     def solve(self, Vec b not None, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def solve(self, Vec b, Vec x):             # <<<<<<<<<<<<<<
  *         CHKERR( MatSolve(self.mat, b.vec, x.vec) )
  * 
  */
@@ -134938,18 +143491,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_350solve(struct PyPetscMatObject
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1374
+/* "PETSc/Mat.pyx":1417
  *         CHKERR( MatSolve(self.mat, b.vec, x.vec) )
  * 
- *     def solveTranspose(self, Vec b not None, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def solveTranspose(self, Vec b, Vec x):             # <<<<<<<<<<<<<<
  *         CHKERR( MatSolveTranspose(self.mat, b.vec, x.vec) )
  * 
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_363solveTranspose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_362solveTranspose[] = "Mat.solveTranspose(self, Vec b, Vec x)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_363solveTranspose(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_b = 0;
   struct PyPetscVecObject *__pyx_v_x = 0;
   PyObject *__pyx_r = 0;
@@ -134963,7 +143516,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_353solveTranspose(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -134972,14 +143527,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_353solveTranspose(PyObject *__py
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_b)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 1374, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("solveTranspose", 1, 2, 2, 1); __PYX_ERR(33, 1417, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solveTranspose") < 0)) __PYX_ERR(33, 1374, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solveTranspose") < 0)) __PYX_ERR(33, 1417, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -134992,15 +143548,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_353solveTranspose(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("solveTranspose", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1374, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("solveTranspose", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1417, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "b", 0))) __PYX_ERR(33, 1417, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(33, 1417, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_362solveTranspose(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_b, __pyx_v_x);
 
   /* function exit code */
   goto __pyx_L0;
@@ -135011,25 +143567,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_353solveTranspose(PyObject *__py
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_352solveTranspose(struct PyPetscMatObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_362solveTranspose(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;
   __Pyx_RefNannySetupContext("solveTranspose", 0);
 
-  /* "PETSc/Mat.pyx":1375
+  /* "PETSc/Mat.pyx":1418
  * 
- *     def solveTranspose(self, Vec b not None, Vec x not None):
+ *     def solveTranspose(self, Vec b, Vec x):
  *         CHKERR( MatSolveTranspose(self.mat, b.vec, x.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def solveAdd(self, Vec b not None, Vec y, Vec x not None):
+ *     def solveAdd(self, Vec b, Vec y, Vec x):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(33, 1418, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1374
+  /* "PETSc/Mat.pyx":1417
  *         CHKERR( MatSolve(self.mat, b.vec, x.vec) )
  * 
- *     def solveTranspose(self, Vec b not None, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def solveTranspose(self, Vec b, Vec x):             # <<<<<<<<<<<<<<
  *         CHKERR( MatSolveTranspose(self.mat, b.vec, x.vec) )
  * 
  */
@@ -135046,18 +143602,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_352solveTranspose(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1377
+/* "PETSc/Mat.pyx":1420
  *         CHKERR( MatSolveTranspose(self.mat, b.vec, x.vec) )
  * 
- *     def solveAdd(self, Vec b not None, Vec y, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def solveAdd(self, Vec b, Vec y, Vec x):             # <<<<<<<<<<<<<<
  *         CHKERR( MatSolveAdd(self.mat, b.vec, y.vec, x.vec) )
  * 
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_365solveAdd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_364solveAdd[] = "Mat.solveAdd(self, Vec b, Vec y, Vec x)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_365solveAdd(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;
@@ -135072,8 +143628,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_355solveAdd(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -135082,19 +143641,21 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_355solveAdd(PyObject *__pyx_v_se
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_b)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 1377, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("solveAdd", 1, 3, 3, 1); __PYX_ERR(33, 1420, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 1377, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("solveAdd", 1, 3, 3, 2); __PYX_ERR(33, 1420, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solveAdd") < 0)) __PYX_ERR(33, 1377, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solveAdd") < 0)) __PYX_ERR(33, 1420, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -135109,16 +143670,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_355solveAdd(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_ERR(33, 1377, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("solveAdd", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1420, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "b", 0))) __PYX_ERR(33, 1420, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(33, 1420, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(33, 1420, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_364solveAdd(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_b, __pyx_v_y, __pyx_v_x);
 
   /* function exit code */
   goto __pyx_L0;
@@ -135129,25 +143690,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_355solveAdd(PyObject *__pyx_v_se
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_364solveAdd(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;
   __Pyx_RefNannySetupContext("solveAdd", 0);
 
-  /* "PETSc/Mat.pyx":1378
+  /* "PETSc/Mat.pyx":1421
  * 
- *     def solveAdd(self, Vec b not None, Vec y, Vec x not None):
+ *     def solveAdd(self, Vec b, Vec y, Vec x):
  *         CHKERR( MatSolveAdd(self.mat, b.vec, y.vec, x.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def solveTransposeAdd(self, Vec b not None, Vec y, Vec x not None):
+ *     def solveTransposeAdd(self, Vec b, Vec y, Vec x):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(33, 1421, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1377
+  /* "PETSc/Mat.pyx":1420
  *         CHKERR( MatSolveTranspose(self.mat, b.vec, x.vec) )
  * 
- *     def solveAdd(self, Vec b not None, Vec y, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def solveAdd(self, Vec b, Vec y, Vec x):             # <<<<<<<<<<<<<<
  *         CHKERR( MatSolveAdd(self.mat, b.vec, y.vec, x.vec) )
  * 
  */
@@ -135164,18 +143725,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_354solveAdd(struct PyPetscMatObj
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1380
+/* "PETSc/Mat.pyx":1423
  *         CHKERR( MatSolveAdd(self.mat, b.vec, y.vec, x.vec) )
  * 
- *     def solveTransposeAdd(self, Vec b not None, Vec y, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def solveTransposeAdd(self, Vec b, Vec y, Vec x):             # <<<<<<<<<<<<<<
  *         CHKERR( MatSolveTransposeAdd(self.mat, b.vec, y.vec, x.vec) )
  * 
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_367solveTransposeAdd(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_366solveTransposeAdd[] = "Mat.solveTransposeAdd(self, Vec b, Vec y, Vec x)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_367solveTransposeAdd(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;
@@ -135190,8 +143751,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_357solveTransposeAdd(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -135200,19 +143764,21 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_357solveTransposeAdd(PyObject *_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_b)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 1380, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("solveTransposeAdd", 1, 3, 3, 1); __PYX_ERR(33, 1423, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 1380, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("solveTransposeAdd", 1, 3, 3, 2); __PYX_ERR(33, 1423, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solveTransposeAdd") < 0)) __PYX_ERR(33, 1380, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solveTransposeAdd") < 0)) __PYX_ERR(33, 1423, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -135227,16 +143793,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_357solveTransposeAdd(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("solveTransposeAdd", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1380, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("solveTransposeAdd", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1423, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "b", 0))) __PYX_ERR(33, 1423, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(33, 1423, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(33, 1423, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_366solveTransposeAdd(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_b, __pyx_v_y, __pyx_v_x);
 
   /* function exit code */
   goto __pyx_L0;
@@ -135247,25 +143813,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_357solveTransposeAdd(PyObject *_
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_366solveTransposeAdd(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;
   __Pyx_RefNannySetupContext("solveTransposeAdd", 0);
 
-  /* "PETSc/Mat.pyx":1381
+  /* "PETSc/Mat.pyx":1424
  * 
- *     def solveTransposeAdd(self, Vec b not None, Vec y, Vec x not None):
+ *     def solveTransposeAdd(self, Vec b, Vec y, Vec x):
  *         CHKERR( MatSolveTransposeAdd(self.mat, b.vec, y.vec, x.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def matSolve(self, Mat B not None, Mat X not None):
+ *     def matSolve(self, Mat B, Mat X):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(33, 1424, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1380
+  /* "PETSc/Mat.pyx":1423
  *         CHKERR( MatSolveAdd(self.mat, b.vec, y.vec, x.vec) )
  * 
- *     def solveTransposeAdd(self, Vec b not None, Vec y, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def solveTransposeAdd(self, Vec b, Vec y, Vec x):             # <<<<<<<<<<<<<<
  *         CHKERR( MatSolveTransposeAdd(self.mat, b.vec, y.vec, x.vec) )
  * 
  */
@@ -135282,18 +143848,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_356solveTransposeAdd(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1383
+/* "PETSc/Mat.pyx":1426
  *         CHKERR( MatSolveTransposeAdd(self.mat, b.vec, y.vec, x.vec) )
  * 
- *     def matSolve(self, Mat B not None, Mat X not None):             # <<<<<<<<<<<<<<
+ *     def matSolve(self, Mat B, Mat X):             # <<<<<<<<<<<<<<
  *         CHKERR( MatMatSolve(self.mat, B.mat, X.mat) )
  * 
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_369matSolve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_368matSolve[] = "Mat.matSolve(self, Mat B, Mat X)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_369matSolve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscMatObject *__pyx_v_B = 0;
   struct PyPetscMatObject *__pyx_v_X = 0;
   PyObject *__pyx_r = 0;
@@ -135307,7 +143873,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_359matSolve(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -135316,14 +143884,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_359matSolve(PyObject *__pyx_v_se
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_B)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(33, 1383, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("matSolve", 1, 2, 2, 1); __PYX_ERR(33, 1426, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "matSolve") < 0)) __PYX_ERR(33, 1383, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "matSolve") < 0)) __PYX_ERR(33, 1426, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -135336,15 +143905,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_359matSolve(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_ERR(33, 1383, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("matSolve", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1426, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_B), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "B", 0))) __PYX_ERR(33, 1426, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_X), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "X", 0))) __PYX_ERR(33, 1426, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_368matSolve(((struct PyPetscMatObject *)__pyx_v_self), __pyx_v_B, __pyx_v_X);
 
   /* function exit code */
   goto __pyx_L0;
@@ -135355,25 +143924,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_359matSolve(PyObject *__pyx_v_se
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_358matSolve(struct PyPetscMatObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_B, struct PyPetscMatObject *__pyx_v_X) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_368matSolve(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;
   __Pyx_RefNannySetupContext("matSolve", 0);
 
-  /* "PETSc/Mat.pyx":1384
+  /* "PETSc/Mat.pyx":1427
  * 
- *     def matSolve(self, Mat B not None, Mat X not None):
+ *     def matSolve(self, Mat B, Mat X):
  *         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_ERR(33, 1384, __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 == ((int)-1))) __PYX_ERR(33, 1427, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1383
+  /* "PETSc/Mat.pyx":1426
  *         CHKERR( MatSolveTransposeAdd(self.mat, b.vec, y.vec, x.vec) )
  * 
- *     def matSolve(self, Mat B not None, Mat X not None):             # <<<<<<<<<<<<<<
+ *     def matSolve(self, Mat B, Mat X):             # <<<<<<<<<<<<<<
  *         CHKERR( MatMatSolve(self.mat, B.mat, X.mat) )
  * 
  */
@@ -135390,7 +143959,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_358matSolve(struct PyPetscMatObj
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1388
+/* "PETSc/Mat.pyx":1431
  *     # dense matrices
  * 
  *     def getDenseArray(self):             # <<<<<<<<<<<<<<
@@ -135399,23 +143968,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_358matSolve(struct PyPetscMatObj
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_371getDenseArray(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_370getDenseArray[] = "Mat.getDenseArray(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_371getDenseArray(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_360getDenseArray(((struct PyPetscMatObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_370getDenseArray(((struct PyPetscMatObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_360getDenseArray(struct PyPetscMatObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_370getDenseArray(struct PyPetscMatObject *__pyx_v_self) {
   PetscInt __pyx_v_m;
   PetscInt __pyx_v_N;
   PetscInt __pyx_v_lda;
@@ -135433,7 +144002,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_360getDenseArray(struct PyPetscM
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("getDenseArray", 0);
 
-  /* "PETSc/Mat.pyx":1389
+  /* "PETSc/Mat.pyx":1432
  * 
  *     def getDenseArray(self):
  *         cdef PetscInt m=0, N=0, lda=0             # <<<<<<<<<<<<<<
@@ -135444,7 +144013,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_360getDenseArray(struct PyPetscM
   __pyx_v_N = 0;
   __pyx_v_lda = 0;
 
-  /* "PETSc/Mat.pyx":1390
+  /* "PETSc/Mat.pyx":1433
  *     def getDenseArray(self):
  *         cdef PetscInt m=0, N=0, lda=0
  *         cdef PetscScalar *data = NULL             # <<<<<<<<<<<<<<
@@ -135453,25 +144022,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_360getDenseArray(struct PyPetscM
  */
   __pyx_v_data = NULL;
 
-  /* "PETSc/Mat.pyx":1391
+  /* "PETSc/Mat.pyx":1434
  *         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_ERR(33, 1391, __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 == ((int)-1))) __PYX_ERR(33, 1434, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1392
+  /* "PETSc/Mat.pyx":1435
  *         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_ERR(33, 1392, __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 == ((int)-1))) __PYX_ERR(33, 1435, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1393
+  /* "PETSc/Mat.pyx":1436
  *         CHKERR( MatGetLocalSize(self.mat, &m, NULL) )
  *         CHKERR( MatGetSize(self.mat, NULL, &N) )
  *         lda = m # CHKERR( MatDenseGetLDA(self.mat, &ld) )             # <<<<<<<<<<<<<<
@@ -135480,16 +144049,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_360getDenseArray(struct PyPetscM
  */
   __pyx_v_lda = __pyx_v_m;
 
-  /* "PETSc/Mat.pyx":1394
+  /* "PETSc/Mat.pyx":1437
  *         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_ERR(33, 1394, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDenseGetArray(__pyx_v_self->mat, (&__pyx_v_data))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(33, 1437, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1395
+  /* "PETSc/Mat.pyx":1438
  *         lda = m # CHKERR( MatDenseGetLDA(self.mat, &ld) )
  *         CHKERR( MatDenseGetArray(self.mat, &data) )
  *         cdef int typenum = NPY_PETSC_SCALAR             # <<<<<<<<<<<<<<
@@ -135498,7 +144067,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_360getDenseArray(struct PyPetscM
  */
   __pyx_v_typenum = NPY_PETSC_SCALAR;
 
-  /* "PETSc/Mat.pyx":1396
+  /* "PETSc/Mat.pyx":1439
  *         CHKERR( MatDenseGetArray(self.mat, &data) )
  *         cdef int typenum = NPY_PETSC_SCALAR
  *         cdef int itemsize = <int>sizeof(PetscScalar)             # <<<<<<<<<<<<<<
@@ -135507,7 +144076,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_360getDenseArray(struct PyPetscM
  */
   __pyx_v_itemsize = ((int)(sizeof(PetscScalar)));
 
-  /* "PETSc/Mat.pyx":1397
+  /* "PETSc/Mat.pyx":1440
  *         cdef int typenum = NPY_PETSC_SCALAR
  *         cdef int itemsize = <int>sizeof(PetscScalar)
  *         cdef int flags = NPY_ARRAY_FARRAY             # <<<<<<<<<<<<<<
@@ -135516,7 +144085,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_360getDenseArray(struct PyPetscM
  */
   __pyx_v_flags = NPY_ARRAY_FARRAY;
 
-  /* "PETSc/Mat.pyx":1399
+  /* "PETSc/Mat.pyx":1442
  *         cdef int flags = NPY_ARRAY_FARRAY
  *         cdef npy_intp dims[2], strides[2]
  *         dims[0] = <npy_intp>m; strides[0] = <npy_intp>sizeof(PetscScalar);             # <<<<<<<<<<<<<<
@@ -135526,7 +144095,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_360getDenseArray(struct PyPetscM
   (__pyx_v_dims[0]) = ((npy_intp)__pyx_v_m);
   (__pyx_v_strides[0]) = ((npy_intp)(sizeof(PetscScalar)));
 
-  /* "PETSc/Mat.pyx":1400
+  /* "PETSc/Mat.pyx":1443
  *         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));             # <<<<<<<<<<<<<<
@@ -135536,7 +144105,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_360getDenseArray(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":1401
+  /* "PETSc/Mat.pyx":1444
  *         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,             # <<<<<<<<<<<<<<
@@ -135549,16 +144118,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_360getDenseArray(struct PyPetscM
   __pyx_v_array = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "PETSc/Mat.pyx":1403
+  /* "PETSc/Mat.pyx":1446
  *         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_ERR(33, 1403, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatDenseRestoreArray(__pyx_v_self->mat, (&__pyx_v_data))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(33, 1446, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1404
+  /* "PETSc/Mat.pyx":1447
  *                                     strides, data, itemsize, flags, NULL)
  *         CHKERR( MatDenseRestoreArray(self.mat, &data) )
  *         return array             # <<<<<<<<<<<<<<
@@ -135570,7 +144139,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_360getDenseArray(struct PyPetscM
   __pyx_r = __pyx_v_array;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1388
+  /* "PETSc/Mat.pyx":1431
  *     # dense matrices
  * 
  *     def getDenseArray(self):             # <<<<<<<<<<<<<<
@@ -135590,7 +144159,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_360getDenseArray(struct PyPetscM
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1406
+/* "PETSc/Mat.pyx":1449
  *         return array
  * 
  *     def getDenseLocalMatrix(self):             # <<<<<<<<<<<<<<
@@ -135599,23 +144168,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_360getDenseArray(struct PyPetscM
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_373getDenseLocalMatrix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_3Mat_372getDenseLocalMatrix[] = "Mat.getDenseLocalMatrix(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_3Mat_373getDenseLocalMatrix(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_362getDenseLocalMatrix(((struct PyPetscMatObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_3Mat_372getDenseLocalMatrix(((struct PyPetscMatObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_362getDenseLocalMatrix(struct PyPetscMatObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_372getDenseLocalMatrix(struct PyPetscMatObject *__pyx_v_self) {
   struct PyPetscMatObject *__pyx_v_mat = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -135625,7 +144194,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_362getDenseLocalMatrix(struct Py
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("getDenseLocalMatrix", 0);
 
-  /* "PETSc/Mat.pyx":1407
+  /* "PETSc/Mat.pyx":1450
  * 
  *     def getDenseLocalMatrix(self):
  *         cdef Mat mat = type(self)()             # <<<<<<<<<<<<<<
@@ -135634,7 +144203,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_362getDenseLocalMatrix(struct Py
  */
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -135644,27 +144213,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_362getDenseLocalMatrix(struct Py
     }
   }
   if (__pyx_t_3) {
-    __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_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1450, __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(33, 1407, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1450, __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_ERR(33, 1407, __pyx_L1_error)
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_Mat))))) __PYX_ERR(33, 1450, __pyx_L1_error)
   __pyx_v_mat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":1408
+  /* "PETSc/Mat.pyx":1451
  *     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_ERR(33, 1408, __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 == ((int)-1))) __PYX_ERR(33, 1451, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1409
+  /* "PETSc/Mat.pyx":1452
  *         cdef Mat mat = type(self)()
  *         CHKERR( MatDenseGetLocalMatrix(self.mat, &mat.mat) )
  *         PetscINCREF(mat.obj)             # <<<<<<<<<<<<<<
@@ -135673,7 +144242,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_362getDenseLocalMatrix(struct Py
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_mat->__pyx_base.obj);
 
-  /* "PETSc/Mat.pyx":1410
+  /* "PETSc/Mat.pyx":1453
  *         CHKERR( MatDenseGetLocalMatrix(self.mat, &mat.mat) )
  *         PetscINCREF(mat.obj)
  *         return mat             # <<<<<<<<<<<<<<
@@ -135685,7 +144254,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_362getDenseLocalMatrix(struct Py
   __pyx_r = ((PyObject *)__pyx_v_mat);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1406
+  /* "PETSc/Mat.pyx":1449
  *         return array
  * 
  *     def getDenseLocalMatrix(self):             # <<<<<<<<<<<<<<
@@ -135707,7 +144276,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_362getDenseLocalMatrix(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1415
+/* "PETSc/Mat.pyx":1458
  * 
  *     property sizes:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -135736,7 +144305,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_5sizes___get__(struct PyPetscMat
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Mat.pyx":1416
+  /* "PETSc/Mat.pyx":1459
  *     property sizes:
  *         def __get__(self):
  *             return self.getSizes()             # <<<<<<<<<<<<<<
@@ -135744,10 +144313,10 @@ 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_ERR(33, 1416, __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, 1459, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -135757,10 +144326,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_ERR(33, 1416, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1459, __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(33, 1416, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1459, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -135768,7 +144337,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_5sizes___get__(struct PyPetscMat
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1415
+  /* "PETSc/Mat.pyx":1458
  * 
  *     property sizes:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -135789,7 +144358,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_5sizes___get__(struct PyPetscMat
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1417
+/* "PETSc/Mat.pyx":1460
  *         def __get__(self):
  *             return self.getSizes()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -135819,17 +144388,17 @@ static int __pyx_pf_8petsc4py_5PETSc_3Mat_5sizes_2__set__(struct PyPetscMatObjec
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/Mat.pyx":1418
+  /* "PETSc/Mat.pyx":1461
  *             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_ERR(33, 1418, __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, 1461, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -135839,23 +144408,41 @@ 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_ERR(33, 1418, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1461, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(33, 1418, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1461, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1461, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1461, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1461, __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":1417
+  /* "PETSc/Mat.pyx":1460
  *         def __get__(self):
  *             return self.getSizes()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -135878,7 +144465,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3Mat_5sizes_2__set__(struct PyPetscMatObjec
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1421
+/* "PETSc/Mat.pyx":1464
  * 
  *     property size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -135907,7 +144494,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_4size___get__(struct PyPetscMatO
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Mat.pyx":1422
+  /* "PETSc/Mat.pyx":1465
  *     property size:
  *         def __get__(self):
  *             return self.getSize()             # <<<<<<<<<<<<<<
@@ -135915,10 +144502,10 @@ 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_ERR(33, 1422, __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, 1465, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -135928,10 +144515,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_ERR(33, 1422, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1465, __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(33, 1422, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1465, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -135939,7 +144526,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_4size___get__(struct PyPetscMatO
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1421
+  /* "PETSc/Mat.pyx":1464
  * 
  *     property size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -135960,7 +144547,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_4size___get__(struct PyPetscMatO
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1425
+/* "PETSc/Mat.pyx":1468
  * 
  *     property local_size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -135989,7 +144576,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10local_size___get__(struct PyPe
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Mat.pyx":1426
+  /* "PETSc/Mat.pyx":1469
  *     property local_size:
  *         def __get__(self):
  *             return self.getLocalSize()             # <<<<<<<<<<<<<<
@@ -135997,10 +144584,10 @@ 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_ERR(33, 1426, __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, 1469, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -136010,10 +144597,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_ERR(33, 1426, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1469, __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(33, 1426, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1469, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -136021,7 +144608,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10local_size___get__(struct PyPe
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1425
+  /* "PETSc/Mat.pyx":1468
  * 
  *     property local_size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -136042,7 +144629,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10local_size___get__(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1429
+/* "PETSc/Mat.pyx":1472
  * 
  *     property block_size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -136071,7 +144658,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10block_size___get__(struct PyPe
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Mat.pyx":1430
+  /* "PETSc/Mat.pyx":1473
  *     property block_size:
  *         def __get__(self):
  *             return self.getBlockSize()             # <<<<<<<<<<<<<<
@@ -136079,10 +144666,10 @@ 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_ERR(33, 1430, __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, 1473, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -136092,10 +144679,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_ERR(33, 1430, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1473, __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(33, 1430, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1473, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -136103,7 +144690,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10block_size___get__(struct PyPe
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1429
+  /* "PETSc/Mat.pyx":1472
  * 
  *     property block_size:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -136124,7 +144711,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10block_size___get__(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1433
+/* "PETSc/Mat.pyx":1476
  * 
  *     property block_sizes:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -136153,7 +144740,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_11block_sizes___get__(struct PyP
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Mat.pyx":1434
+  /* "PETSc/Mat.pyx":1477
  *     property block_sizes:
  *         def __get__(self):
  *             return self.getBlockSizes()             # <<<<<<<<<<<<<<
@@ -136161,10 +144748,10 @@ 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_ERR(33, 1434, __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, 1477, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -136174,10 +144761,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_ERR(33, 1434, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1477, __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(33, 1434, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1477, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -136185,7 +144772,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_11block_sizes___get__(struct PyP
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1433
+  /* "PETSc/Mat.pyx":1476
  * 
  *     property block_sizes:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -136206,7 +144793,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_11block_sizes___get__(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1437
+/* "PETSc/Mat.pyx":1480
  * 
  *     property owner_range:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -136235,7 +144822,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_11owner_range___get__(struct PyP
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Mat.pyx":1438
+  /* "PETSc/Mat.pyx":1481
  *     property owner_range:
  *         def __get__(self):
  *             return self.getOwnershipRange()             # <<<<<<<<<<<<<<
@@ -136243,10 +144830,10 @@ 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_ERR(33, 1438, __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, 1481, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -136256,10 +144843,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_ERR(33, 1438, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1481, __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(33, 1438, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1481, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -136267,7 +144854,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_11owner_range___get__(struct PyP
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1437
+  /* "PETSc/Mat.pyx":1480
  * 
  *     property owner_range:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -136288,7 +144875,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_11owner_range___get__(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1441
+/* "PETSc/Mat.pyx":1484
  * 
  *     property owner_ranges:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -136317,7 +144904,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_12owner_ranges___get__(struct Py
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Mat.pyx":1442
+  /* "PETSc/Mat.pyx":1485
  *     property owner_ranges:
  *         def __get__(self):
  *             return self.getOwnershipRanges()             # <<<<<<<<<<<<<<
@@ -136325,10 +144912,10 @@ 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_ERR(33, 1442, __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, 1485, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -136338,10 +144925,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_ERR(33, 1442, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1485, __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(33, 1442, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1485, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -136349,7 +144936,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_12owner_ranges___get__(struct Py
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1441
+  /* "PETSc/Mat.pyx":1484
  * 
  *     property owner_ranges:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -136370,7 +144957,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_12owner_ranges___get__(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1447
+/* "PETSc/Mat.pyx":1490
  * 
  *     property assembled:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -136399,7 +144986,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_9assembled___get__(struct PyPets
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Mat.pyx":1448
+  /* "PETSc/Mat.pyx":1491
  *     property assembled:
  *         def __get__(self):
  *             return self.isAssembled()             # <<<<<<<<<<<<<<
@@ -136407,10 +144994,10 @@ 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_ERR(33, 1448, __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, 1491, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -136420,10 +145007,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_ERR(33, 1448, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1491, __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(33, 1448, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1491, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -136431,7 +145018,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_9assembled___get__(struct PyPets
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1447
+  /* "PETSc/Mat.pyx":1490
  * 
  *     property assembled:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -136452,7 +145039,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_9assembled___get__(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1450
+/* "PETSc/Mat.pyx":1493
  *             return self.isAssembled()
  *     property symmetric:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -136481,7 +145068,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_9symmetric___get__(struct PyPets
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Mat.pyx":1451
+  /* "PETSc/Mat.pyx":1494
  *     property symmetric:
  *         def __get__(self):
  *             return self.isSymmetric()             # <<<<<<<<<<<<<<
@@ -136489,10 +145076,10 @@ 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_ERR(33, 1451, __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, 1494, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -136502,10 +145089,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_ERR(33, 1451, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1494, __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(33, 1451, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1494, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -136513,7 +145100,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_9symmetric___get__(struct PyPets
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1450
+  /* "PETSc/Mat.pyx":1493
  *             return self.isAssembled()
  *     property symmetric:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -136534,7 +145121,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_9symmetric___get__(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1453
+/* "PETSc/Mat.pyx":1496
  *             return self.isSymmetric()
  *     property hermitian:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -136563,7 +145150,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_9hermitian___get__(struct PyPets
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Mat.pyx":1454
+  /* "PETSc/Mat.pyx":1497
  *     property hermitian:
  *         def __get__(self):
  *             return self.isHermitian()             # <<<<<<<<<<<<<<
@@ -136571,10 +145158,10 @@ 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_ERR(33, 1454, __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, 1497, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -136584,10 +145171,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_ERR(33, 1454, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1497, __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(33, 1454, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1497, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -136595,7 +145182,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_9hermitian___get__(struct PyPets
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1453
+  /* "PETSc/Mat.pyx":1496
  *             return self.isSymmetric()
  *     property hermitian:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -136616,7 +145203,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_9hermitian___get__(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1456
+/* "PETSc/Mat.pyx":1499
  *             return self.isHermitian()
  *     property structsymm:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -136645,7 +145232,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10structsymm___get__(struct PyPe
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/Mat.pyx":1457
+  /* "PETSc/Mat.pyx":1500
  *     property structsymm:
  *         def __get__(self):
  *             return self.isStructurallySymmetric()             # <<<<<<<<<<<<<<
@@ -136653,10 +145240,10 @@ 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_ERR(33, 1457, __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, 1500, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -136666,10 +145253,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_ERR(33, 1457, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1500, __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(33, 1457, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1500, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -136677,7 +145264,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10structsymm___get__(struct PyPe
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1456
+  /* "PETSc/Mat.pyx":1499
  *             return self.isHermitian()
  *     property structsymm:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -136698,7 +145285,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3Mat_10structsymm___get__(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1465
+/* "PETSc/Mat.pyx":1508
  *     #
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -136727,7 +145314,7 @@ static int __pyx_pf_8petsc4py_5PETSc_9NullSpace___cinit__(struct PyPetscNullSpac
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "PETSc/Mat.pyx":1466
+  /* "PETSc/Mat.pyx":1509
  * 
  *     def __cinit__(self):
  *         self.obj  = <PetscObject*> &self.nsp             # <<<<<<<<<<<<<<
@@ -136736,7 +145323,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":1467
+  /* "PETSc/Mat.pyx":1510
  *     def __cinit__(self):
  *         self.obj  = <PetscObject*> &self.nsp
  *         self.nsp = NULL             # <<<<<<<<<<<<<<
@@ -136745,7 +145332,7 @@ static int __pyx_pf_8petsc4py_5PETSc_9NullSpace___cinit__(struct PyPetscNullSpac
  */
   __pyx_v_self->nsp = NULL;
 
-  /* "PETSc/Mat.pyx":1465
+  /* "PETSc/Mat.pyx":1508
  *     #
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -136759,7 +145346,7 @@ static int __pyx_pf_8petsc4py_5PETSc_9NullSpace___cinit__(struct PyPetscNullSpac
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1469
+/* "PETSc/Mat.pyx":1512
  *         self.nsp = NULL
  * 
  *     def __call__(self, vec):             # <<<<<<<<<<<<<<
@@ -136782,6 +145369,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_3__call__(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -136792,7 +145380,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_ERR(33, 1469, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__call__") < 0)) __PYX_ERR(33, 1512, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -136803,7 +145391,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_ERR(33, 1469, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__call__", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1512, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.NullSpace.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -136825,17 +145413,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_2__call__(struct PyPetscNu
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__call__", 0);
 
-  /* "PETSc/Mat.pyx":1470
+  /* "PETSc/Mat.pyx":1513
  * 
  *     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_ERR(33, 1470, __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, 1513, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -136845,23 +145433,41 @@ 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_ERR(33, 1470, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_vec); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1513, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(33, 1470, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_vec};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1513, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_vec};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1513, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1513, __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_ERR(33, 1513, __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":1469
+  /* "PETSc/Mat.pyx":1512
  *         self.nsp = NULL
  * 
  *     def __call__(self, vec):             # <<<<<<<<<<<<<<
@@ -136885,7 +145491,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_2__call__(struct PyPetscNu
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1474
+/* "PETSc/Mat.pyx":1517
  *     #
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -136910,6 +145516,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_5view(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -136922,11 +145529,12 @@ 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_ERR(33, 1474, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(33, 1517, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -136935,13 +145543,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_ERR(33, 1474, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1517, __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_ERR(33, 1474, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) __PYX_ERR(33, 1517, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_9NullSpace_4view(((struct PyPetscNullSpaceObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
@@ -136963,7 +145571,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_4view(struct PyPetscNullSp
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("view", 0);
 
-  /* "PETSc/Mat.pyx":1475
+  /* "PETSc/Mat.pyx":1518
  * 
  *     def view(self, Viewer viewer=None):
  *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
@@ -136972,7 +145580,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_4view(struct PyPetscNullSp
  */
   __pyx_v_vwr = NULL;
 
-  /* "PETSc/Mat.pyx":1476
+  /* "PETSc/Mat.pyx":1519
  *     def view(self, Viewer viewer=None):
  *         cdef PetscViewer vwr = NULL
  *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
@@ -136986,16 +145594,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_4view(struct PyPetscNullSp
     __pyx_v_vwr = __pyx_t_3;
   }
 
-  /* "PETSc/Mat.pyx":1477
+  /* "PETSc/Mat.pyx":1520
  *         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_ERR(33, 1477, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatNullSpaceView(__pyx_v_self->nsp, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(33, 1520, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1474
+  /* "PETSc/Mat.pyx":1517
  *     #
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -137015,7 +145623,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_4view(struct PyPetscNullSp
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1479
+/* "PETSc/Mat.pyx":1522
  *         CHKERR( MatNullSpaceView(self.nsp, vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -137046,16 +145654,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_6destroy(struct PyPetscNul
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("destroy", 0);
 
-  /* "PETSc/Mat.pyx":1480
+  /* "PETSc/Mat.pyx":1523
  * 
  *     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_ERR(33, 1480, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatNullSpaceDestroy((&__pyx_v_self->nsp))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(33, 1523, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1481
+  /* "PETSc/Mat.pyx":1524
  *     def destroy(self):
  *         CHKERR( MatNullSpaceDestroy(&self.nsp) )
  *         return self             # <<<<<<<<<<<<<<
@@ -137067,7 +145675,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_6destroy(struct PyPetscNul
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1479
+  /* "PETSc/Mat.pyx":1522
  *         CHKERR( MatNullSpaceView(self.nsp, vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -137085,7 +145693,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_6destroy(struct PyPetscNul
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1483
+/* "PETSc/Mat.pyx":1526
  *         return self
  * 
  *     def create(self, constant=False, vectors=(),  comm=None):             # <<<<<<<<<<<<<<
@@ -137114,8 +145722,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_9create(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -137126,11 +145737,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_9create(PyObject *__pyx_v_
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_constant);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vectors);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -137138,13 +145751,16 @@ 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_ERR(33, 1483, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(33, 1526, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -137155,7 +145771,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_ERR(33, 1483, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1526, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.NullSpace.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -137188,17 +145804,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_8create(struct PyPetscNull
   int __pyx_t_8;
   __Pyx_RefNannySetupContext("create", 0);
 
-  /* "PETSc/Mat.pyx":1484
+  /* "PETSc/Mat.pyx":1527
  * 
  *     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_ERR(33, 1484, __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, 1527, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/Mat.pyx":1485
+  /* "PETSc/Mat.pyx":1528
  *     def create(self, constant=False, vectors=(),  comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscBool has_const = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -137207,19 +145823,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_8create(struct PyPetscNull
  */
   __pyx_v_has_const = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":1486
+  /* "PETSc/Mat.pyx":1529
  *         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_ERR(33, 1486, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_constant); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(33, 1529, __pyx_L1_error)
   if (__pyx_t_2) {
     __pyx_v_has_const = PETSC_TRUE;
   }
 
-  /* "PETSc/Mat.pyx":1487
+  /* "PETSc/Mat.pyx":1530
  *         cdef PetscBool has_const = PETSC_FALSE
  *         if constant: has_const = PETSC_TRUE
  *         cdef PetscInt i = 0, nv = <PetscInt>len(vectors)             # <<<<<<<<<<<<<<
@@ -137227,10 +145843,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_ERR(33, 1487, __pyx_L1_error)
+  __pyx_t_3 = PyObject_Length(__pyx_v_vectors); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(33, 1530, __pyx_L1_error)
   __pyx_v_nv = ((PetscInt)__pyx_t_3);
 
-  /* "PETSc/Mat.pyx":1488
+  /* "PETSc/Mat.pyx":1531
  *         if constant: has_const = PETSC_TRUE
  *         cdef PetscInt i = 0, nv = <PetscInt>len(vectors)
  *         cdef PetscVec *v = NULL             # <<<<<<<<<<<<<<
@@ -137239,22 +145855,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_8create(struct PyPetscNull
  */
   __pyx_v_v = NULL;
 
-  /* "PETSc/Mat.pyx":1489
+  /* "PETSc/Mat.pyx":1532
  *         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_ERR(33, 1489, __pyx_L1_error)
+  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_nv)); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1532, __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_ERR(33, 1489, __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, 1532, __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":1490
+  /* "PETSc/Mat.pyx":1533
  *         cdef PetscVec *v = NULL
  *         cdef object tmp2 = oarray_p(empty_p(nv), NULL, <void**>&v)
  *         for i from 0 <= i < nv:             # <<<<<<<<<<<<<<
@@ -137264,22 +145880,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":1491
+    /* "PETSc/Mat.pyx":1534
  *         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)) __PYX_ERR(33, 1491, __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, 1534, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    if (!(likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_8petsc4py_5PETSc_Vec)))) __PYX_ERR(33, 1491, __pyx_L1_error)
+    if (!(likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_8petsc4py_5PETSc_Vec)))) __PYX_ERR(33, 1534, __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":1492
+  /* "PETSc/Mat.pyx":1535
  *         for i from 0 <= i < nv:
  *             v[i] = (<Vec?>(vectors[<Py_ssize_t>i])).vec
  *         cdef PetscNullSpace newnsp = NULL             # <<<<<<<<<<<<<<
@@ -137288,16 +145904,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_8create(struct PyPetscNull
  */
   __pyx_v_newnsp = NULL;
 
-  /* "PETSc/Mat.pyx":1493
+  /* "PETSc/Mat.pyx":1536
  *             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_ERR(33, 1493, __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 == ((int)-1))) __PYX_ERR(33, 1536, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1494
+  /* "PETSc/Mat.pyx":1537
  *         cdef PetscNullSpace newnsp = NULL
  *         CHKERR( MatNullSpaceCreate(ccomm, has_const, nv, v, &newnsp) )
  *         PetscCLEAR(self.obj); self.nsp = newnsp             # <<<<<<<<<<<<<<
@@ -137307,19 +145923,19 @@ 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":1495
+  /* "PETSc/Mat.pyx":1538
  *         CHKERR( MatNullSpaceCreate(ccomm, has_const, nv, v, &newnsp) )
  *         PetscCLEAR(self.obj); self.nsp = newnsp
  *         return self             # <<<<<<<<<<<<<<
  * 
- *     def createRigidBody(self, Vec coords not None):
+ *     def createRigidBody(self, Vec coords):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1483
+  /* "PETSc/Mat.pyx":1526
  *         return self
  * 
  *     def create(self, constant=False, vectors=(),  comm=None):             # <<<<<<<<<<<<<<
@@ -137340,10 +145956,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_8create(struct PyPetscNull
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1497
+/* "PETSc/Mat.pyx":1540
  *         return self
  * 
- *     def createRigidBody(self, Vec coords not None):             # <<<<<<<<<<<<<<
+ *     def createRigidBody(self, Vec coords):             # <<<<<<<<<<<<<<
  *         cdef PetscNullSpace newnsp = NULL
  *         CHKERR( MatNullSpaceCreateRigidBody(coords.vec, &newnsp) )
  */
@@ -137364,6 +145980,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_11createRigidBody(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -137374,7 +145991,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_ERR(33, 1497, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createRigidBody") < 0)) __PYX_ERR(33, 1540, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -137385,13 +146002,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_ERR(33, 1497, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createRigidBody", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1540, __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_ERR(33, 1497, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_coords), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "coords", 0))) __PYX_ERR(33, 1540, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_9NullSpace_10createRigidBody(((struct PyPetscNullSpaceObject *)__pyx_v_self), __pyx_v_coords);
 
   /* function exit code */
@@ -137410,25 +146027,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_10createRigidBody(struct P
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("createRigidBody", 0);
 
-  /* "PETSc/Mat.pyx":1498
+  /* "PETSc/Mat.pyx":1541
  * 
- *     def createRigidBody(self, Vec coords not None):
+ *     def createRigidBody(self, Vec coords):
  *         cdef PetscNullSpace newnsp = NULL             # <<<<<<<<<<<<<<
  *         CHKERR( MatNullSpaceCreateRigidBody(coords.vec, &newnsp) )
  *         PetscCLEAR(self.obj); self.nsp = newnsp
  */
   __pyx_v_newnsp = NULL;
 
-  /* "PETSc/Mat.pyx":1499
- *     def createRigidBody(self, Vec coords not None):
+  /* "PETSc/Mat.pyx":1542
+ *     def createRigidBody(self, Vec coords):
  *         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_ERR(33, 1499, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatNullSpaceCreateRigidBody(__pyx_v_coords->vec, (&__pyx_v_newnsp))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(33, 1542, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1500
+  /* "PETSc/Mat.pyx":1543
  *         cdef PetscNullSpace newnsp = NULL
  *         CHKERR( MatNullSpaceCreateRigidBody(coords.vec, &newnsp) )
  *         PetscCLEAR(self.obj); self.nsp = newnsp             # <<<<<<<<<<<<<<
@@ -137438,7 +146055,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":1501
+  /* "PETSc/Mat.pyx":1544
  *         CHKERR( MatNullSpaceCreateRigidBody(coords.vec, &newnsp) )
  *         PetscCLEAR(self.obj); self.nsp = newnsp
  *         return self             # <<<<<<<<<<<<<<
@@ -137450,10 +146067,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_10createRigidBody(struct P
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1497
+  /* "PETSc/Mat.pyx":1540
  *         return self
  * 
- *     def createRigidBody(self, Vec coords not None):             # <<<<<<<<<<<<<<
+ *     def createRigidBody(self, Vec coords):             # <<<<<<<<<<<<<<
  *         cdef PetscNullSpace newnsp = NULL
  *         CHKERR( MatNullSpaceCreateRigidBody(coords.vec, &newnsp) )
  */
@@ -137468,7 +146085,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_10createRigidBody(struct P
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1503
+/* "PETSc/Mat.pyx":1546
  *         return self
  * 
  *     def setFunction(self, function, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -137496,8 +146113,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_13setFunction(PyObject *__
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -137506,11 +146126,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_13setFunction(PyObject *__
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_function)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -137518,12 +146140,14 @@ 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_ERR(33, 1503, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFunction") < 0)) __PYX_ERR(33, 1546, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -137535,7 +146159,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_ERR(33, 1503, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setFunction", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1546, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.NullSpace.setFunction", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -137560,7 +146184,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_12setFunction(struct PyPet
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/Mat.pyx":1504
+  /* "PETSc/Mat.pyx":1547
  * 
  *     def setFunction(self, function, args=None, kargs=None):
  *         if function is not None:             # <<<<<<<<<<<<<<
@@ -137571,16 +146195,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":1505
+    /* "PETSc/Mat.pyx":1548
  *     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_ERR(33, 1505, __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 == ((int)-1))) __PYX_ERR(33, 1548, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":1507
+    /* "PETSc/Mat.pyx":1550
  *             CHKERR( MatNullSpaceSetFunction(
  *                     self.nsp, NullSpace_Function, NULL) )
  *             if args is None: args = ()             # <<<<<<<<<<<<<<
@@ -137594,7 +146218,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_12setFunction(struct PyPet
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
     }
 
-    /* "PETSc/Mat.pyx":1508
+    /* "PETSc/Mat.pyx":1551
  *                     self.nsp, NullSpace_Function, NULL) )
  *             if args is None: args = ()
  *             if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -137604,20 +146228,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_ERR(33, 1508, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1551, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_4);
       __pyx_t_4 = 0;
     }
 
-    /* "PETSc/Mat.pyx":1509
+    /* "PETSc/Mat.pyx":1552
  *             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_ERR(33, 1509, __pyx_L1_error)
+    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(33, 1552, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_v_function);
     __Pyx_GIVEREF(__pyx_v_function);
@@ -137628,12 +146252,12 @@ 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), ((char *)"__function__"), __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(33, 1509, __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, 1552, __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
+    /* "PETSc/Mat.pyx":1547
  * 
  *     def setFunction(self, function, args=None, kargs=None):
  *         if function is not None:             # <<<<<<<<<<<<<<
@@ -137643,7 +146267,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_12setFunction(struct PyPet
     goto __pyx_L3;
   }
 
-  /* "PETSc/Mat.pyx":1511
+  /* "PETSc/Mat.pyx":1554
  *             self.set_attr('__function__', (function, args, kargs))
  *         else:
  *             CHKERR( MatNullSpaceSetFunction(self.nsp, NULL, NULL) )             # <<<<<<<<<<<<<<
@@ -137651,22 +146275,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_12setFunction(struct PyPet
  *     #
  */
   /*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)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatNullSpaceSetFunction(__pyx_v_self->nsp, NULL, NULL)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(33, 1554, __pyx_L1_error)
 
-    /* "PETSc/Mat.pyx":1512
+    /* "PETSc/Mat.pyx":1555
  *         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), ((char *)"__function__"), Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(33, 1512, __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, 1555, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
   __pyx_L3:;
 
-  /* "PETSc/Mat.pyx":1503
+  /* "PETSc/Mat.pyx":1546
  *         return self
  * 
  *     def setFunction(self, function, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -137690,7 +146314,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_12setFunction(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1515
+/* "PETSc/Mat.pyx":1558
  *     #
  * 
  *     def hasConstant(self):             # <<<<<<<<<<<<<<
@@ -137723,39 +146347,39 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_14hasConstant(struct PyPet
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("hasConstant", 0);
 
-  /* "PETSc/Mat.pyx":1516
+  /* "PETSc/Mat.pyx":1559
  * 
  *     def hasConstant(self):
  *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
  *         CHKERR( MatNullSpaceGetVecs(self.nsp, &flag, NULL, NULL) )
- *         return <bint> flag
+ *         return toBool(flag)
  */
   __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/Mat.pyx":1517
+  /* "PETSc/Mat.pyx":1560
  *     def hasConstant(self):
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( MatNullSpaceGetVecs(self.nsp, &flag, NULL, NULL) )             # <<<<<<<<<<<<<<
- *         return <bint> flag
+ *         return toBool(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_ERR(33, 1517, __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 == ((int)-1))) __PYX_ERR(33, 1560, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1518
+  /* "PETSc/Mat.pyx":1561
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( MatNullSpaceGetVecs(self.nsp, &flag, NULL, NULL) )
- *         return <bint> flag             # <<<<<<<<<<<<<<
+ *         return toBool(flag)             # <<<<<<<<<<<<<<
  * 
  *     def getVecs(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 1518, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 1561, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1515
+  /* "PETSc/Mat.pyx":1558
  *     #
  * 
  *     def hasConstant(self):             # <<<<<<<<<<<<<<
@@ -137774,8 +146398,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_14hasConstant(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1520
- *         return <bint> flag
+/* "PETSc/Mat.pyx":1563
+ *         return toBool(flag)
  * 
  *     def getVecs(self):             # <<<<<<<<<<<<<<
  *         cdef PetscInt i = 0, nv = 0
@@ -137813,7 +146437,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_16getVecs(struct PyPetscNu
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("getVecs", 0);
 
-  /* "PETSc/Mat.pyx":1521
+  /* "PETSc/Mat.pyx":1564
  * 
  *     def getVecs(self):
  *         cdef PetscInt i = 0, nv = 0             # <<<<<<<<<<<<<<
@@ -137823,7 +146447,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_16getVecs(struct PyPetscNu
   __pyx_v_i = 0;
   __pyx_v_nv = 0;
 
-  /* "PETSc/Mat.pyx":1522
+  /* "PETSc/Mat.pyx":1565
  *     def getVecs(self):
  *         cdef PetscInt i = 0, nv = 0
  *         cdef const_PetscVec *v = NULL             # <<<<<<<<<<<<<<
@@ -137832,16 +146456,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_16getVecs(struct PyPetscNu
  */
   __pyx_v_v = NULL;
 
-  /* "PETSc/Mat.pyx":1523
+  /* "PETSc/Mat.pyx":1566
  *         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_ERR(33, 1523, __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 == ((int)-1))) __PYX_ERR(33, 1566, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1524
+  /* "PETSc/Mat.pyx":1567
  *         cdef const_PetscVec *v = NULL
  *         CHKERR( MatNullSpaceGetVecs(self.nsp, NULL, &nv, &v) )
  *         cdef Vec vec = None             # <<<<<<<<<<<<<<
@@ -137851,19 +146475,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":1525
+  /* "PETSc/Mat.pyx":1568
  *         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_ERR(33, 1525, __pyx_L1_error)
+  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 1568, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_vectors = ((PyObject*)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/Mat.pyx":1526
+  /* "PETSc/Mat.pyx":1569
  *         cdef Vec vec = None
  *         cdef list vectors = []
  *         for i from 0 <= i < nv:             # <<<<<<<<<<<<<<
@@ -137873,19 +146497,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":1527
+    /* "PETSc/Mat.pyx":1570
  *         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 *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 1527, __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, 1570, __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":1528
+    /* "PETSc/Mat.pyx":1571
  *         for i from 0 <= i < nv:
  *             vec = Vec()
  *             vec.vec = v[i]             # <<<<<<<<<<<<<<
@@ -137894,7 +146518,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_16getVecs(struct PyPetscNu
  */
     __pyx_v_vec->vec = (__pyx_v_v[__pyx_v_i]);
 
-    /* "PETSc/Mat.pyx":1529
+    /* "PETSc/Mat.pyx":1572
  *             vec = Vec()
  *             vec.vec = v[i]
  *             PetscINCREF(vec.obj)             # <<<<<<<<<<<<<<
@@ -137903,17 +146527,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":1530
+    /* "PETSc/Mat.pyx":1573
  *             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_ERR(33, 1530, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyList_Append(__pyx_v_vectors, ((PyObject *)__pyx_v_vec)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(33, 1573, __pyx_L1_error)
   }
 
-  /* "PETSc/Mat.pyx":1531
+  /* "PETSc/Mat.pyx":1574
  *             PetscINCREF(vec.obj)
  *             vectors.append(vec)
  *         return vectors             # <<<<<<<<<<<<<<
@@ -137925,8 +146549,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_16getVecs(struct PyPetscNu
   __pyx_r = __pyx_v_vectors;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1520
- *         return <bint> flag
+  /* "PETSc/Mat.pyx":1563
+ *         return toBool(flag)
  * 
  *     def getVecs(self):             # <<<<<<<<<<<<<<
  *         cdef PetscInt i = 0, nv = 0
@@ -137946,7 +146570,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_16getVecs(struct PyPetscNu
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1533
+/* "PETSc/Mat.pyx":1576
  *         return vectors
  * 
  *     def getFunction(self):             # <<<<<<<<<<<<<<
@@ -137977,7 +146601,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_18getFunction(struct PyPet
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("getFunction", 0);
 
-  /* "PETSc/Mat.pyx":1534
+  /* "PETSc/Mat.pyx":1577
  * 
  *     def getFunction(self):
  *         return self.get_attr('__function__')             # <<<<<<<<<<<<<<
@@ -137985,13 +146609,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), ((char *)"__function__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1534, __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, 1577, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/Mat.pyx":1533
+  /* "PETSc/Mat.pyx":1576
  *         return vectors
  * 
  *     def getFunction(self):             # <<<<<<<<<<<<<<
@@ -138010,10 +146634,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_18getFunction(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/Mat.pyx":1538
+/* "PETSc/Mat.pyx":1581
  *     #
  * 
- *     def remove(self, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def remove(self, Vec vec):             # <<<<<<<<<<<<<<
  *         CHKERR( MatNullSpaceRemove(self.nsp, vec.vec) )
  * 
  */
@@ -138034,6 +146658,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_21remove(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -138044,7 +146669,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_ERR(33, 1538, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "remove") < 0)) __PYX_ERR(33, 1581, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -138055,13 +146680,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_ERR(33, 1538, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("remove", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1581, __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_ERR(33, 1538, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) __PYX_ERR(33, 1581, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_9NullSpace_20remove(((struct PyPetscNullSpaceObject *)__pyx_v_self), __pyx_v_vec);
 
   /* function exit code */
@@ -138079,19 +146704,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_20remove(struct PyPetscNul
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("remove", 0);
 
-  /* "PETSc/Mat.pyx":1539
+  /* "PETSc/Mat.pyx":1582
  * 
- *     def remove(self, Vec vec not None):
+ *     def remove(self, Vec vec):
  *         CHKERR( MatNullSpaceRemove(self.nsp, vec.vec) )             # <<<<<<<<<<<<<<
  * 
- * # --------------------------------------------------------------------
+ *     def test(self, Mat mat):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatNullSpaceRemove(__pyx_v_self->nsp, __pyx_v_vec->vec)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(33, 1582, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1538
+  /* "PETSc/Mat.pyx":1581
  *     #
  * 
- *     def remove(self, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def remove(self, Vec vec):             # <<<<<<<<<<<<<<
  *         CHKERR( MatNullSpaceRemove(self.nsp, vec.vec) )
  * 
  */
@@ -138108,7 +146733,130 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_9NullSpace_20remove(struct PyPetscNul
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":119
+/* "PETSc/Mat.pyx":1584
+ *         CHKERR( MatNullSpaceRemove(self.nsp, vec.vec) )
+ * 
+ *     def test(self, Mat mat):             # <<<<<<<<<<<<<<
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( MatNullSpaceTest(self.nsp, mat.mat, &flag) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_23test(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_9NullSpace_22test[] = "NullSpace.test(self, Mat mat)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_9NullSpace_23test(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscMatObject *__pyx_v_mat = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("test (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);
+        CYTHON_FALLTHROUGH;
+        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, "test") < 0)) __PYX_ERR(33, 1584, __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("test", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(33, 1584, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.NullSpace.test", __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(33, 1584, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_9NullSpace_22test(((struct PyPetscNullSpaceObject *)__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_9NullSpace_22test(struct PyPetscNullSpaceObject *__pyx_v_self, struct PyPetscMatObject *__pyx_v_mat) {
+  PetscBool __pyx_v_flag;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("test", 0);
+
+  /* "PETSc/Mat.pyx":1585
+ * 
+ *     def test(self, Mat mat):
+ *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( MatNullSpaceTest(self.nsp, mat.mat, &flag) )
+ *         return toBool(flag)
+ */
+  __pyx_v_flag = PETSC_FALSE;
+
+  /* "PETSc/Mat.pyx":1586
+ *     def test(self, Mat mat):
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( MatNullSpaceTest(self.nsp, mat.mat, &flag) )             # <<<<<<<<<<<<<<
+ *         return toBool(flag)
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(MatNullSpaceTest(__pyx_v_self->nsp, __pyx_v_mat->mat, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(33, 1586, __pyx_L1_error)
+
+  /* "PETSc/Mat.pyx":1587
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( MatNullSpaceTest(self.nsp, mat.mat, &flag) )
+ *         return toBool(flag)             # <<<<<<<<<<<<<<
+ * 
+ * # --------------------------------------------------------------------
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(33, 1587, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/Mat.pyx":1584
+ *         CHKERR( MatNullSpaceRemove(self.nsp, vec.vec) )
+ * 
+ *     def test(self, Mat mat):             # <<<<<<<<<<<<<<
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( MatNullSpaceTest(self.nsp, mat.mat, &flag) )
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.NullSpace.test", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/PC.pyx":124
  *     # --- xxx ---
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -138137,7 +146885,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2PC___cinit__(struct PyPetscPCObject *__pyx
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "PETSc/PC.pyx":120
+  /* "PETSc/PC.pyx":125
  * 
  *     def __cinit__(self):
  *         self.obj = <PetscObject*> &self.pc             # <<<<<<<<<<<<<<
@@ -138146,7 +146894,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":121
+  /* "PETSc/PC.pyx":126
  *     def __cinit__(self):
  *         self.obj = <PetscObject*> &self.pc
  *         self.pc = NULL             # <<<<<<<<<<<<<<
@@ -138155,7 +146903,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2PC___cinit__(struct PyPetscPCObject *__pyx
  */
   __pyx_v_self->pc = NULL;
 
-  /* "PETSc/PC.pyx":119
+  /* "PETSc/PC.pyx":124
  *     # --- xxx ---
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -138169,7 +146917,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2PC___cinit__(struct PyPetscPCObject *__pyx
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":123
+/* "PETSc/PC.pyx":128
  *         self.pc = NULL
  * 
  *     def __call__(self, x, y=None):             # <<<<<<<<<<<<<<
@@ -138194,7 +146942,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_3__call__(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -138203,6 +146953,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_3__call__(PyObject *__pyx_v_self,
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_y);
@@ -138210,11 +146961,12 @@ 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_ERR(34, 123, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__call__") < 0)) __PYX_ERR(34, 128, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -138225,7 +146977,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_ERR(34, 123, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__call__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 128, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -138247,11 +146999,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_2__call__(struct PyPetscPCObject
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
-  Py_ssize_t __pyx_t_7;
+  int __pyx_t_7;
   __Pyx_RefNannySetupContext("__call__", 0);
   __Pyx_INCREF(__pyx_v_y);
 
-  /* "PETSc/PC.pyx":124
+  /* "PETSc/PC.pyx":129
  * 
  *     def __call__(self, x, y=None):
  *         if y is None: # XXX do this better             # <<<<<<<<<<<<<<
@@ -138262,17 +147014,17 @@ 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":125
+    /* "PETSc/PC.pyx":130
  *     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_ERR(34, 125, __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, 130, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_t_6 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
       __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
       if (likely(__pyx_t_6)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -138282,21 +147034,21 @@ 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_ERR(34, 125, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(34, 130, __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_ERR(34, 125, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(34, 130, __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)) __PYX_ERR(34, 125, __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, 130, __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_ERR(34, 125, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_createVecLeft); if (unlikely(!__pyx_t_4)) __PYX_ERR(34, 130, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_5 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && 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);
@@ -138306,17 +147058,17 @@ 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_ERR(34, 125, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 130, __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(34, 125, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 130, __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;
 
-    /* "PETSc/PC.pyx":124
+    /* "PETSc/PC.pyx":129
  * 
  *     def __call__(self, x, y=None):
  *         if y is None: # XXX do this better             # <<<<<<<<<<<<<<
@@ -138325,18 +147077,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_2__call__(struct PyPetscPCObject
  */
   }
 
-  /* "PETSc/PC.pyx":126
+  /* "PETSc/PC.pyx":131
  *         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_ERR(34, 126, __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, 131, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_5 = NULL;
   __pyx_t_7 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -138346,24 +147098,42 @@ 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_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;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_4)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_x, __pyx_v_y};
+    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 131, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __Pyx_GOTREF(__pyx_t_3);
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_x, __pyx_v_y};
+    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 131, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __Pyx_GOTREF(__pyx_t_3);
+  } else
+  #endif
+  {
+    __pyx_t_6 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(34, 131, __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;
+    }
+    __Pyx_INCREF(__pyx_v_x);
+    __Pyx_GIVEREF(__pyx_v_x);
+    PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_7, __pyx_v_x);
+    __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_ERR(34, 131, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   }
-  __Pyx_INCREF(__pyx_v_x);
-  __Pyx_GIVEREF(__pyx_v_x);
-  PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_7, __pyx_v_x);
-  __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_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":127
+  /* "PETSc/PC.pyx":132
  *             y = self.getOperators()[0].createVecLeft()
  *         self.apply(x, y)
  *         return y             # <<<<<<<<<<<<<<
@@ -138375,7 +147145,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_2__call__(struct PyPetscPCObject
   __pyx_r = __pyx_v_y;
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":123
+  /* "PETSc/PC.pyx":128
  *         self.pc = NULL
  * 
  *     def __call__(self, x, y=None):             # <<<<<<<<<<<<<<
@@ -138398,7 +147168,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_2__call__(struct PyPetscPCObject
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":131
+/* "PETSc/PC.pyx":136
  *     # --- xxx ---
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -138423,6 +147193,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_5view(PyObject *__pyx_v_self, PyO
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -138435,11 +147206,12 @@ 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_ERR(34, 131, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(34, 136, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -138448,13 +147220,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_ERR(34, 131, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 136, __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_ERR(34, 131, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) __PYX_ERR(34, 136, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_4view(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
@@ -138476,7 +147248,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_4view(struct PyPetscPCObject *__p
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("view", 0);
 
-  /* "PETSc/PC.pyx":132
+  /* "PETSc/PC.pyx":137
  * 
  *     def view(self, Viewer viewer=None):
  *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
@@ -138485,7 +147257,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_4view(struct PyPetscPCObject *__p
  */
   __pyx_v_vwr = NULL;
 
-  /* "PETSc/PC.pyx":133
+  /* "PETSc/PC.pyx":138
  *     def view(self, Viewer viewer=None):
  *         cdef PetscViewer vwr = NULL
  *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
@@ -138499,16 +147271,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_4view(struct PyPetscPCObject *__p
     __pyx_v_vwr = __pyx_t_3;
   }
 
-  /* "PETSc/PC.pyx":134
+  /* "PETSc/PC.pyx":139
  *         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_ERR(34, 134, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCView(__pyx_v_self->pc, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(34, 139, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":131
+  /* "PETSc/PC.pyx":136
  *     # --- xxx ---
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -138528,7 +147300,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_4view(struct PyPetscPCObject *__p
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":136
+/* "PETSc/PC.pyx":141
  *         CHKERR( PCView(self.pc, vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -138559,16 +147331,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_6destroy(struct PyPetscPCObject *
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("destroy", 0);
 
-  /* "PETSc/PC.pyx":137
+  /* "PETSc/PC.pyx":142
  * 
  *     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_ERR(34, 137, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCDestroy((&__pyx_v_self->pc))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(34, 142, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":138
+  /* "PETSc/PC.pyx":143
  *     def destroy(self):
  *         CHKERR( PCDestroy(&self.pc) )
  *         self.pc = NULL             # <<<<<<<<<<<<<<
@@ -138577,7 +147349,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_6destroy(struct PyPetscPCObject *
  */
   __pyx_v_self->pc = NULL;
 
-  /* "PETSc/PC.pyx":139
+  /* "PETSc/PC.pyx":144
  *         CHKERR( PCDestroy(&self.pc) )
  *         self.pc = NULL
  *         return self             # <<<<<<<<<<<<<<
@@ -138589,7 +147361,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_6destroy(struct PyPetscPCObject *
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":136
+  /* "PETSc/PC.pyx":141
  *         CHKERR( PCView(self.pc, vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -138607,7 +147379,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_6destroy(struct PyPetscPCObject *
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":141
+/* "PETSc/PC.pyx":146
  *         return self
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
@@ -138632,6 +147404,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_9create(PyObject *__pyx_v_self, P
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -138644,11 +147417,12 @@ 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_ERR(34, 141, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(34, 146, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -138657,7 +147431,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_ERR(34, 141, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 146, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -138679,17 +147453,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_8create(struct PyPetscPCObject *_
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("create", 0);
 
-  /* "PETSc/PC.pyx":142
+  /* "PETSc/PC.pyx":147
  * 
  *     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_ERR(34, 142, __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, 147, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":143
+  /* "PETSc/PC.pyx":148
  *     def create(self, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscPC newpc = NULL             # <<<<<<<<<<<<<<
@@ -138698,16 +147472,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_8create(struct PyPetscPCObject *_
  */
   __pyx_v_newpc = NULL;
 
-  /* "PETSc/PC.pyx":144
+  /* "PETSc/PC.pyx":149
  *         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_ERR(34, 144, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCCreate(__pyx_v_ccomm, (&__pyx_v_newpc))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(34, 149, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":145
+  /* "PETSc/PC.pyx":150
  *         cdef PetscPC newpc = NULL
  *         CHKERR( PCCreate(ccomm, &newpc) )
  *         PetscCLEAR(self.obj); self.pc = newpc             # <<<<<<<<<<<<<<
@@ -138717,7 +147491,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":146
+  /* "PETSc/PC.pyx":151
  *         CHKERR( PCCreate(ccomm, &newpc) )
  *         PetscCLEAR(self.obj); self.pc = newpc
  *         return self             # <<<<<<<<<<<<<<
@@ -138729,7 +147503,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_8create(struct PyPetscPCObject *_
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":141
+  /* "PETSc/PC.pyx":146
  *         return self
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
@@ -138747,7 +147521,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_8create(struct PyPetscPCObject *_
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":148
+/* "PETSc/PC.pyx":153
  *         return self
  * 
  *     def setType(self, pc_type):             # <<<<<<<<<<<<<<
@@ -138771,6 +147545,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_11setType(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -138781,7 +147556,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_ERR(34, 148, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) __PYX_ERR(34, 153, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -138792,7 +147567,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_ERR(34, 148, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 153, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -138814,7 +147589,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_10setType(struct PyPetscPCObject
   __Pyx_RefNannySetupContext("setType", 0);
   __Pyx_INCREF(__pyx_v_pc_type);
 
-  /* "PETSc/PC.pyx":149
+  /* "PETSc/PC.pyx":154
  * 
  *     def setType(self, pc_type):
  *         cdef PetscPCType cval = NULL             # <<<<<<<<<<<<<<
@@ -138823,28 +147598,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_10setType(struct PyPetscPCObject
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/PC.pyx":150
+  /* "PETSc/PC.pyx":155
  *     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_ERR(34, 150, __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, 155, __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":151
+  /* "PETSc/PC.pyx":156
  *         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_ERR(34, 151, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCSetType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(34, 156, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":148
+  /* "PETSc/PC.pyx":153
  *         return self
  * 
  *     def setType(self, pc_type):             # <<<<<<<<<<<<<<
@@ -138866,7 +147641,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_10setType(struct PyPetscPCObject
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":153
+/* "PETSc/PC.pyx":158
  *         CHKERR( PCSetType(self.pc, cval) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
@@ -138899,7 +147674,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_12getType(struct PyPetscPCObject
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getType", 0);
 
-  /* "PETSc/PC.pyx":154
+  /* "PETSc/PC.pyx":159
  * 
  *     def getType(self):
  *         cdef PetscPCType cval = NULL             # <<<<<<<<<<<<<<
@@ -138908,16 +147683,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_12getType(struct PyPetscPCObject
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/PC.pyx":155
+  /* "PETSc/PC.pyx":160
  *     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_ERR(34, 155, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCGetType(__pyx_v_self->pc, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(34, 160, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":156
+  /* "PETSc/PC.pyx":161
  *         cdef PetscPCType cval = NULL
  *         CHKERR( PCGetType(self.pc, &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -138925,13 +147700,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_ERR(34, 156, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(34, 161, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":153
+  /* "PETSc/PC.pyx":158
  *         CHKERR( PCSetType(self.pc, cval) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
@@ -138950,7 +147725,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_12getType(struct PyPetscPCObject
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":158
+/* "PETSc/PC.pyx":163
  *         return bytes2str(cval)
  * 
  *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
@@ -138974,6 +147749,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_15setOptionsPrefix(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -138984,7 +147760,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_ERR(34, 158, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) __PYX_ERR(34, 163, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -138995,7 +147771,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_ERR(34, 158, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 163, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -139017,7 +147793,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_14setOptionsPrefix(struct PyPetsc
   __Pyx_RefNannySetupContext("setOptionsPrefix", 0);
   __Pyx_INCREF(__pyx_v_prefix);
 
-  /* "PETSc/PC.pyx":159
+  /* "PETSc/PC.pyx":164
  * 
  *     def setOptionsPrefix(self, prefix):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -139026,28 +147802,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_14setOptionsPrefix(struct PyPetsc
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/PC.pyx":160
+  /* "PETSc/PC.pyx":165
  *     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_ERR(34, 160, __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, 165, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/PC.pyx":161
+  /* "PETSc/PC.pyx":166
  *         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_ERR(34, 161, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCSetOptionsPrefix(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(34, 166, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":158
+  /* "PETSc/PC.pyx":163
  *         return bytes2str(cval)
  * 
  *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
@@ -139069,7 +147845,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_14setOptionsPrefix(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":163
+/* "PETSc/PC.pyx":168
  *         CHKERR( PCSetOptionsPrefix(self.pc, cval) )
  * 
  *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
@@ -139102,7 +147878,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_16getOptionsPrefix(struct PyPetsc
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getOptionsPrefix", 0);
 
-  /* "PETSc/PC.pyx":164
+  /* "PETSc/PC.pyx":169
  * 
  *     def getOptionsPrefix(self):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -139111,16 +147887,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_16getOptionsPrefix(struct PyPetsc
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/PC.pyx":165
+  /* "PETSc/PC.pyx":170
  *     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_ERR(34, 165, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCGetOptionsPrefix(__pyx_v_self->pc, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(34, 170, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":166
+  /* "PETSc/PC.pyx":171
  *         cdef const_char *cval = NULL
  *         CHKERR( PCGetOptionsPrefix(self.pc, &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -139128,13 +147904,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_ERR(34, 166, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(34, 171, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":163
+  /* "PETSc/PC.pyx":168
  *         CHKERR( PCSetOptionsPrefix(self.pc, cval) )
  * 
  *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
@@ -139153,7 +147929,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_16getOptionsPrefix(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":168
+/* "PETSc/PC.pyx":173
  *         return bytes2str(cval)
  * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
@@ -139184,16 +147960,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_18setFromOptions(struct PyPetscPC
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setFromOptions", 0);
 
-  /* "PETSc/PC.pyx":169
+  /* "PETSc/PC.pyx":174
  * 
  *     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_ERR(34, 169, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCSetFromOptions(__pyx_v_self->pc)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(34, 174, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":168
+  /* "PETSc/PC.pyx":173
  *         return bytes2str(cval)
  * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
@@ -139213,7 +147989,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_18setFromOptions(struct PyPetscPC
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":171
+/* "PETSc/PC.pyx":176
  *         CHKERR( PCSetFromOptions(self.pc) )
  * 
  *     def setOperators(self, Mat A=None, Mat P=None):             # <<<<<<<<<<<<<<
@@ -139240,7 +148016,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_21setOperators(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -139251,6 +148029,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_21setOperators(PyObject *__pyx_v_
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_A);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_P);
@@ -139258,12 +148037,14 @@ 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_ERR(34, 171, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOperators") < 0)) __PYX_ERR(34, 176, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -139273,14 +148054,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_ERR(34, 171, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setOperators", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 176, __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_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)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_A), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "A", 0))) __PYX_ERR(34, 176, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_P), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "P", 0))) __PYX_ERR(34, 176, __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 */
@@ -139303,7 +148084,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_20setOperators(struct PyPetscPCOb
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("setOperators", 0);
 
-  /* "PETSc/PC.pyx":172
+  /* "PETSc/PC.pyx":177
  * 
  *     def setOperators(self, Mat A=None, Mat P=None):
  *         cdef PetscMat amat=NULL             # <<<<<<<<<<<<<<
@@ -139312,7 +148093,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_20setOperators(struct PyPetscPCOb
  */
   __pyx_v_amat = NULL;
 
-  /* "PETSc/PC.pyx":173
+  /* "PETSc/PC.pyx":178
  *     def setOperators(self, Mat A=None, Mat P=None):
  *         cdef PetscMat amat=NULL
  *         if A is not None: amat = A.mat             # <<<<<<<<<<<<<<
@@ -139326,7 +148107,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_20setOperators(struct PyPetscPCOb
     __pyx_v_amat = __pyx_t_3;
   }
 
-  /* "PETSc/PC.pyx":174
+  /* "PETSc/PC.pyx":179
  *         cdef PetscMat amat=NULL
  *         if A is not None: amat = A.mat
  *         cdef PetscMat pmat=amat             # <<<<<<<<<<<<<<
@@ -139335,7 +148116,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_20setOperators(struct PyPetscPCOb
  */
   __pyx_v_pmat = __pyx_v_amat;
 
-  /* "PETSc/PC.pyx":175
+  /* "PETSc/PC.pyx":180
  *         if A is not None: amat = A.mat
  *         cdef PetscMat pmat=amat
  *         if P is not None: pmat = P.mat             # <<<<<<<<<<<<<<
@@ -139349,16 +148130,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_20setOperators(struct PyPetscPCOb
     __pyx_v_pmat = __pyx_t_3;
   }
 
-  /* "PETSc/PC.pyx":176
+  /* "PETSc/PC.pyx":181
  *         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_ERR(34, 176, __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 == ((int)-1))) __PYX_ERR(34, 181, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":171
+  /* "PETSc/PC.pyx":176
  *         CHKERR( PCSetFromOptions(self.pc) )
  * 
  *     def setOperators(self, Mat A=None, Mat P=None):             # <<<<<<<<<<<<<<
@@ -139378,7 +148159,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_20setOperators(struct PyPetscPCOb
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":178
+/* "PETSc/PC.pyx":183
  *         CHKERR( PCSetOperators(self.pc, amat, pmat) )
  * 
  *     def getOperators(self):             # <<<<<<<<<<<<<<
@@ -139412,32 +148193,32 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_22getOperators(struct PyPetscPCOb
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getOperators", 0);
 
-  /* "PETSc/PC.pyx":179
+  /* "PETSc/PC.pyx":184
  * 
  *     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 *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 179, __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, 184, __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 *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 179, __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, 184, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_P = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/PC.pyx":180
+  /* "PETSc/PC.pyx":185
  *     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_ERR(34, 180, __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 == ((int)-1))) __PYX_ERR(34, 185, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":181
+  /* "PETSc/PC.pyx":186
  *         cdef Mat A = Mat(), P = Mat()
  *         CHKERR( PCGetOperators(self.pc, &A.mat, &P.mat) )
  *         PetscINCREF(A.obj)             # <<<<<<<<<<<<<<
@@ -139446,7 +148227,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":182
+  /* "PETSc/PC.pyx":187
  *         CHKERR( PCGetOperators(self.pc, &A.mat, &P.mat) )
  *         PetscINCREF(A.obj)
  *         PetscINCREF(P.obj)             # <<<<<<<<<<<<<<
@@ -139455,7 +148236,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":183
+  /* "PETSc/PC.pyx":188
  *         PetscINCREF(A.obj)
  *         PetscINCREF(P.obj)
  *         return (A, P)             # <<<<<<<<<<<<<<
@@ -139463,7 +148244,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_ERR(34, 183, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 188, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_A));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_A));
@@ -139475,7 +148256,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_22getOperators(struct PyPetscPCOb
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":178
+  /* "PETSc/PC.pyx":183
  *         CHKERR( PCSetOperators(self.pc, amat, pmat) )
  * 
  *     def getOperators(self):             # <<<<<<<<<<<<<<
@@ -139496,7 +148277,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_22getOperators(struct PyPetscPCOb
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":185
+/* "PETSc/PC.pyx":190
  *         return (A, P)
  * 
  *     def setUseAmat(self, flag):             # <<<<<<<<<<<<<<
@@ -139520,6 +148301,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_25setUseAmat(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -139530,7 +148312,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_ERR(34, 185, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setUseAmat") < 0)) __PYX_ERR(34, 190, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -139541,7 +148323,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_ERR(34, 185, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setUseAmat", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 190, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setUseAmat", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -139562,7 +148344,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_24setUseAmat(struct PyPetscPCObje
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setUseAmat", 0);
 
-  /* "PETSc/PC.pyx":186
+  /* "PETSc/PC.pyx":191
  * 
  *     def setUseAmat(self, flag):
  *         cdef PetscBool cflag = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -139571,17 +148353,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_24setUseAmat(struct PyPetscPCObje
  */
   __pyx_v_cflag = PETSC_FALSE;
 
-  /* "PETSc/PC.pyx":187
+  /* "PETSc/PC.pyx":192
  *     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_ERR(34, 187, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_flag); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(34, 192, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "PETSc/PC.pyx":188
+    /* "PETSc/PC.pyx":193
  *         cdef PetscBool cflag = PETSC_FALSE
  *         if flag:
  *             cflag = PETSC_TRUE             # <<<<<<<<<<<<<<
@@ -139590,7 +148372,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_24setUseAmat(struct PyPetscPCObje
  */
     __pyx_v_cflag = PETSC_TRUE;
 
-    /* "PETSc/PC.pyx":187
+    /* "PETSc/PC.pyx":192
  *     def setUseAmat(self, flag):
  *         cdef PetscBool cflag = PETSC_FALSE
  *         if flag:             # <<<<<<<<<<<<<<
@@ -139599,16 +148381,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_24setUseAmat(struct PyPetscPCObje
  */
   }
 
-  /* "PETSc/PC.pyx":189
+  /* "PETSc/PC.pyx":194
  *         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_ERR(34, 189, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCSetUseAmat(__pyx_v_self->pc, __pyx_v_cflag)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(34, 194, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":185
+  /* "PETSc/PC.pyx":190
  *         return (A, P)
  * 
  *     def setUseAmat(self, flag):             # <<<<<<<<<<<<<<
@@ -139628,7 +148410,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_24setUseAmat(struct PyPetscPCObje
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":191
+/* "PETSc/PC.pyx":196
  *         CHKERR( PCSetUseAmat(self.pc, cflag) )
  * 
  *     def setUp(self):             # <<<<<<<<<<<<<<
@@ -139659,16 +148441,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_26setUp(struct PyPetscPCObject *_
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setUp", 0);
 
-  /* "PETSc/PC.pyx":192
+  /* "PETSc/PC.pyx":197
  * 
  *     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_ERR(34, 192, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCSetUp(__pyx_v_self->pc)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(34, 197, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":191
+  /* "PETSc/PC.pyx":196
  *         CHKERR( PCSetUseAmat(self.pc, cflag) )
  * 
  *     def setUp(self):             # <<<<<<<<<<<<<<
@@ -139688,7 +148470,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_26setUp(struct PyPetscPCObject *_
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":194
+/* "PETSc/PC.pyx":199
  *         CHKERR( PCSetUp(self.pc) )
  * 
  *     def reset(self):             # <<<<<<<<<<<<<<
@@ -139719,16 +148501,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_28reset(struct PyPetscPCObject *_
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("reset", 0);
 
-  /* "PETSc/PC.pyx":195
+  /* "PETSc/PC.pyx":200
  * 
  *     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_ERR(34, 195, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCReset(__pyx_v_self->pc)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(34, 200, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":194
+  /* "PETSc/PC.pyx":199
  *         CHKERR( PCSetUp(self.pc) )
  * 
  *     def reset(self):             # <<<<<<<<<<<<<<
@@ -139748,7 +148530,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_28reset(struct PyPetscPCObject *_
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":197
+/* "PETSc/PC.pyx":202
  *         CHKERR( PCReset(self.pc) )
  * 
  *     def setUpOnBlocks(self):             # <<<<<<<<<<<<<<
@@ -139779,16 +148561,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_30setUpOnBlocks(struct PyPetscPCO
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setUpOnBlocks", 0);
 
-  /* "PETSc/PC.pyx":198
+  /* "PETSc/PC.pyx":203
  * 
  *     def setUpOnBlocks(self):
  *         CHKERR( PCSetUpOnBlocks(self.pc) )             # <<<<<<<<<<<<<<
  * 
- *     def apply(self, Vec x not None, Vec y not None):
+ *     def apply(self, Vec x, Vec y):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCSetUpOnBlocks(__pyx_v_self->pc)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(34, 203, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":197
+  /* "PETSc/PC.pyx":202
  *         CHKERR( PCReset(self.pc) )
  * 
  *     def setUpOnBlocks(self):             # <<<<<<<<<<<<<<
@@ -139808,10 +148590,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_30setUpOnBlocks(struct PyPetscPCO
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":200
+/* "PETSc/PC.pyx":205
  *         CHKERR( PCSetUpOnBlocks(self.pc) )
  * 
- *     def apply(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def apply(self, Vec x, Vec y):             # <<<<<<<<<<<<<<
  *         CHKERR( PCApply(self.pc, x.vec, y.vec) )
  * 
  */
@@ -139833,7 +148615,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_33apply(PyObject *__pyx_v_self, P
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -139842,14 +148626,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_33apply(PyObject *__pyx_v_self, P
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(34, 200, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("apply", 1, 2, 2, 1); __PYX_ERR(34, 205, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "apply") < 0)) __PYX_ERR(34, 200, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "apply") < 0)) __PYX_ERR(34, 205, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -139862,14 +148647,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_ERR(34, 200, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("apply", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 205, __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_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)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(34, 205, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(34, 205, __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 */
@@ -139887,19 +148672,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_32apply(struct PyPetscPCObject *_
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("apply", 0);
 
-  /* "PETSc/PC.pyx":201
+  /* "PETSc/PC.pyx":206
  * 
- *     def apply(self, Vec x not None, Vec y not None):
+ *     def apply(self, Vec x, Vec y):
  *         CHKERR( PCApply(self.pc, x.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def applyTranspose(self, Vec x not None, Vec y not None):
+ *     def applyTranspose(self, Vec x, Vec y):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(34, 206, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":200
+  /* "PETSc/PC.pyx":205
  *         CHKERR( PCSetUpOnBlocks(self.pc) )
  * 
- *     def apply(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def apply(self, Vec x, Vec y):             # <<<<<<<<<<<<<<
  *         CHKERR( PCApply(self.pc, x.vec, y.vec) )
  * 
  */
@@ -139916,10 +148701,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_32apply(struct PyPetscPCObject *_
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":203
+/* "PETSc/PC.pyx":208
  *         CHKERR( PCApply(self.pc, x.vec, y.vec) )
  * 
- *     def applyTranspose(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def applyTranspose(self, Vec x, Vec y):             # <<<<<<<<<<<<<<
  *         CHKERR( PCApplyTranspose(self.pc, x.vec, y.vec) )
  * 
  */
@@ -139941,7 +148726,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_35applyTranspose(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -139950,14 +148737,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_35applyTranspose(PyObject *__pyx_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(34, 203, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("applyTranspose", 1, 2, 2, 1); __PYX_ERR(34, 208, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "applyTranspose") < 0)) __PYX_ERR(34, 203, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "applyTranspose") < 0)) __PYX_ERR(34, 208, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -139970,14 +148758,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_ERR(34, 203, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("applyTranspose", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 208, __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_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)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(34, 208, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(34, 208, __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 */
@@ -139995,19 +148783,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_34applyTranspose(struct PyPetscPC
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("applyTranspose", 0);
 
-  /* "PETSc/PC.pyx":204
+  /* "PETSc/PC.pyx":209
  * 
- *     def applyTranspose(self, Vec x not None, Vec y not None):
+ *     def applyTranspose(self, Vec x, Vec y):
  *         CHKERR( PCApplyTranspose(self.pc, x.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def applySymmetricLeft(self, Vec x not None, Vec y not None):
+ *     def applySymmetricLeft(self, Vec x, Vec y):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(34, 209, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":203
+  /* "PETSc/PC.pyx":208
  *         CHKERR( PCApply(self.pc, x.vec, y.vec) )
  * 
- *     def applyTranspose(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def applyTranspose(self, Vec x, Vec y):             # <<<<<<<<<<<<<<
  *         CHKERR( PCApplyTranspose(self.pc, x.vec, y.vec) )
  * 
  */
@@ -140024,10 +148812,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_34applyTranspose(struct PyPetscPC
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":206
+/* "PETSc/PC.pyx":211
  *         CHKERR( PCApplyTranspose(self.pc, x.vec, y.vec) )
  * 
- *     def applySymmetricLeft(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def applySymmetricLeft(self, Vec x, Vec y):             # <<<<<<<<<<<<<<
  *         CHKERR( PCApplySymmetricLeft(self.pc, x.vec, y.vec) )
  * 
  */
@@ -140049,7 +148837,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_37applySymmetricLeft(PyObject *__
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -140058,14 +148848,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_37applySymmetricLeft(PyObject *__
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(34, 206, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("applySymmetricLeft", 1, 2, 2, 1); __PYX_ERR(34, 211, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "applySymmetricLeft") < 0)) __PYX_ERR(34, 206, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "applySymmetricLeft") < 0)) __PYX_ERR(34, 211, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -140078,14 +148869,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_ERR(34, 206, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("applySymmetricLeft", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 211, __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_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)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(34, 211, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(34, 211, __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 */
@@ -140103,19 +148894,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_36applySymmetricLeft(struct PyPet
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("applySymmetricLeft", 0);
 
-  /* "PETSc/PC.pyx":207
+  /* "PETSc/PC.pyx":212
  * 
- *     def applySymmetricLeft(self, Vec x not None, Vec y not None):
+ *     def applySymmetricLeft(self, Vec x, Vec y):
  *         CHKERR( PCApplySymmetricLeft(self.pc, x.vec, y.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def applySymmetricRight(self, Vec x not None, Vec y not None):
+ *     def applySymmetricRight(self, Vec x, Vec y):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(34, 212, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":206
+  /* "PETSc/PC.pyx":211
  *         CHKERR( PCApplyTranspose(self.pc, x.vec, y.vec) )
  * 
- *     def applySymmetricLeft(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def applySymmetricLeft(self, Vec x, Vec y):             # <<<<<<<<<<<<<<
  *         CHKERR( PCApplySymmetricLeft(self.pc, x.vec, y.vec) )
  * 
  */
@@ -140132,10 +148923,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_36applySymmetricLeft(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":209
+/* "PETSc/PC.pyx":214
  *         CHKERR( PCApplySymmetricLeft(self.pc, x.vec, y.vec) )
  * 
- *     def applySymmetricRight(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def applySymmetricRight(self, Vec x, Vec y):             # <<<<<<<<<<<<<<
  *         CHKERR( PCApplySymmetricRight(self.pc, x.vec, y.vec) )
  * 
  */
@@ -140157,7 +148948,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_39applySymmetricRight(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -140166,14 +148959,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_39applySymmetricRight(PyObject *_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(34, 209, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("applySymmetricRight", 1, 2, 2, 1); __PYX_ERR(34, 214, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "applySymmetricRight") < 0)) __PYX_ERR(34, 209, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "applySymmetricRight") < 0)) __PYX_ERR(34, 214, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -140186,14 +148980,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_ERR(34, 209, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("applySymmetricRight", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 214, __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_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)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(34, 214, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_y), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "y", 0))) __PYX_ERR(34, 214, __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 */
@@ -140211,19 +149005,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_38applySymmetricRight(struct PyPe
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("applySymmetricRight", 0);
 
-  /* "PETSc/PC.pyx":210
+  /* "PETSc/PC.pyx":215
  * 
- *     def applySymmetricRight(self, Vec x not None, Vec y not None):
+ *     def applySymmetricRight(self, Vec x, Vec y):
  *         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_ERR(34, 210, __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 == ((int)-1))) __PYX_ERR(34, 215, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":209
+  /* "PETSc/PC.pyx":214
  *         CHKERR( PCApplySymmetricLeft(self.pc, x.vec, y.vec) )
  * 
- *     def applySymmetricRight(self, Vec x not None, Vec y not None):             # <<<<<<<<<<<<<<
+ *     def applySymmetricRight(self, Vec x, Vec y):             # <<<<<<<<<<<<<<
  *         CHKERR( PCApplySymmetricRight(self.pc, x.vec, y.vec) )
  * 
  */
@@ -140240,7 +149034,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_38applySymmetricRight(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":214
+/* "PETSc/PC.pyx":219
  *     # --- discretization space ---
  * 
  *     def getDM(self):             # <<<<<<<<<<<<<<
@@ -140275,7 +149069,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_40getDM(struct PyPetscPCObject *_
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("getDM", 0);
 
-  /* "PETSc/PC.pyx":215
+  /* "PETSc/PC.pyx":220
  * 
  *     def getDM(self):
  *         cdef PetscDM newdm = NULL             # <<<<<<<<<<<<<<
@@ -140284,32 +149078,32 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_40getDM(struct PyPetscPCObject *_
  */
   __pyx_v_newdm = NULL;
 
-  /* "PETSc/PC.pyx":216
+  /* "PETSc/PC.pyx":221
  *     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_ERR(34, 216, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCGetDM(__pyx_v_self->pc, (&__pyx_v_newdm))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(34, 221, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":217
+  /* "PETSc/PC.pyx":222
  *         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_ERR(34, 217, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_newdm)); if (unlikely(!__pyx_t_2)) __PYX_ERR(34, 222, __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_ERR(34, 217, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 222, __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_ERR(34, 217, __pyx_L1_error)
+  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(34, 222, __pyx_L1_error)
   __pyx_v_dm = ((struct PyPetscDMObject *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/PC.pyx":218
+  /* "PETSc/PC.pyx":223
  *         CHKERR( PCGetDM(self.pc, &newdm) )
  *         cdef DM dm = subtype_DM(newdm)()
  *         dm.dm = newdm             # <<<<<<<<<<<<<<
@@ -140318,7 +149112,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_40getDM(struct PyPetscPCObject *_
  */
   __pyx_v_dm->dm = __pyx_v_newdm;
 
-  /* "PETSc/PC.pyx":219
+  /* "PETSc/PC.pyx":224
  *         cdef DM dm = subtype_DM(newdm)()
  *         dm.dm = newdm
  *         PetscINCREF(dm.obj)             # <<<<<<<<<<<<<<
@@ -140327,19 +149121,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_40getDM(struct PyPetscPCObject *_
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_dm->__pyx_base.obj);
 
-  /* "PETSc/PC.pyx":220
+  /* "PETSc/PC.pyx":225
  *         dm.dm = newdm
  *         PetscINCREF(dm.obj)
  *         return dm             # <<<<<<<<<<<<<<
  * 
- *     def setDM(self, DM dm not None):
+ *     def setDM(self, DM dm):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_dm));
   __pyx_r = ((PyObject *)__pyx_v_dm);
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":214
+  /* "PETSc/PC.pyx":219
  *     # --- discretization space ---
  * 
  *     def getDM(self):             # <<<<<<<<<<<<<<
@@ -140360,10 +149154,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_40getDM(struct PyPetscPCObject *_
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":222
+/* "PETSc/PC.pyx":227
  *         return dm
  * 
- *     def setDM(self, DM dm not None):             # <<<<<<<<<<<<<<
+ *     def setDM(self, DM dm):             # <<<<<<<<<<<<<<
  *         CHKERR( PCSetDM(self.pc, dm.dm) )
  * 
  */
@@ -140384,6 +149178,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_43setDM(PyObject *__pyx_v_self, P
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -140394,7 +149189,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_ERR(34, 222, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDM") < 0)) __PYX_ERR(34, 227, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -140405,13 +149200,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_ERR(34, 222, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setDM", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 227, __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_ERR(34, 222, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dm), __pyx_ptype_8petsc4py_5PETSc_DM, 0, "dm", 0))) __PYX_ERR(34, 227, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_42setDM(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_dm);
 
   /* function exit code */
@@ -140429,19 +149224,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_42setDM(struct PyPetscPCObject *_
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setDM", 0);
 
-  /* "PETSc/PC.pyx":223
+  /* "PETSc/PC.pyx":228
  * 
- *     def setDM(self, DM dm not None):
+ *     def setDM(self, DM dm):
  *         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_ERR(34, 223, __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 == ((int)-1))) __PYX_ERR(34, 228, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":222
+  /* "PETSc/PC.pyx":227
  *         return dm
  * 
- *     def setDM(self, DM dm not None):             # <<<<<<<<<<<<<<
+ *     def setDM(self, DM dm):             # <<<<<<<<<<<<<<
  *         CHKERR( PCSetDM(self.pc, dm.dm) )
  * 
  */
@@ -140458,7 +149253,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_42setDM(struct PyPetscPCObject *_
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":225
+/* "PETSc/PC.pyx":230
  *         CHKERR( PCSetDM(self.pc, dm.dm) )
  * 
  *     def setCoordinates(self, coordinates):             # <<<<<<<<<<<<<<
@@ -140482,6 +149277,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_45setCoordinates(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -140492,7 +149288,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_ERR(34, 225, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCoordinates") < 0)) __PYX_ERR(34, 230, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -140503,7 +149299,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_ERR(34, 225, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setCoordinates", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 230, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setCoordinates", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -140529,19 +149325,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_44setCoordinates(struct PyPetscPC
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("setCoordinates", 0);
 
-  /* "PETSc/PC.pyx":226
+  /* "PETSc/PC.pyx":231
  * 
  *     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_ERR(34, 226, __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, 231, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_xyz = ((PyArrayObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/PC.pyx":227
+  /* "PETSc/PC.pyx":232
  *     def setCoordinates(self, coordinates):
  *         cdef ndarray xyz = iarray(coordinates, NPY_PETSC_REAL)
  *         if PyArray_ISFORTRAN(xyz): xyz = PyArray_Copy(xyz)             # <<<<<<<<<<<<<<
@@ -140550,13 +149346,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_ERR(34, 227, __pyx_L1_error)
+    __pyx_t_1 = ((PyObject *)PyArray_Copy(__pyx_v_xyz)); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 232, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
     __Pyx_DECREF_SET(__pyx_v_xyz, ((PyArrayObject *)__pyx_t_1));
     __pyx_t_1 = 0;
   }
 
-  /* "PETSc/PC.pyx":228
+  /* "PETSc/PC.pyx":233
  *         cdef ndarray xyz = iarray(coordinates, NPY_PETSC_REAL)
  *         if PyArray_ISFORTRAN(xyz): xyz = PyArray_Copy(xyz)
  *         if PyArray_NDIM(xyz) != 2: raise ValueError(             # <<<<<<<<<<<<<<
@@ -140566,40 +149362,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":230
+    /* "PETSc/PC.pyx":235
  *         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_ERR(34, 230, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyInt_From_int(PyArray_NDIM(__pyx_v_xyz)); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 235, __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_ERR(34, 230, __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, 235, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-    /* "PETSc/PC.pyx":228
+    /* "PETSc/PC.pyx":233
  *         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_ERR(34, 228, __pyx_L1_error)
+    __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 233, __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_ERR(34, 228, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_t_1, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 233, __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_ERR(34, 228, __pyx_L1_error)
+    __PYX_ERR(34, 233, __pyx_L1_error)
   }
 
-  /* "PETSc/PC.pyx":231
+  /* "PETSc/PC.pyx":236
  *             ("coordinates must have two dimensions: "
  *              "coordinates.ndim=%d") % (PyArray_NDIM(xyz)) )
  *         cdef PetscInt nvtx = <PetscInt> PyArray_DIM(xyz, 0)             # <<<<<<<<<<<<<<
@@ -140608,7 +149404,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_44setCoordinates(struct PyPetscPC
  */
   __pyx_v_nvtx = ((PetscInt)PyArray_DIM(__pyx_v_xyz, 0));
 
-  /* "PETSc/PC.pyx":232
+  /* "PETSc/PC.pyx":237
  *              "coordinates.ndim=%d") % (PyArray_NDIM(xyz)) )
  *         cdef PetscInt nvtx = <PetscInt> PyArray_DIM(xyz, 0)
  *         cdef PetscInt ndim = <PetscInt> PyArray_DIM(xyz, 1)             # <<<<<<<<<<<<<<
@@ -140617,7 +149413,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_44setCoordinates(struct PyPetscPC
  */
   __pyx_v_ndim = ((PetscInt)PyArray_DIM(__pyx_v_xyz, 1));
 
-  /* "PETSc/PC.pyx":233
+  /* "PETSc/PC.pyx":238
  *         cdef PetscInt nvtx = <PetscInt> PyArray_DIM(xyz, 0)
  *         cdef PetscInt ndim = <PetscInt> PyArray_DIM(xyz, 1)
  *         cdef PetscReal *coords = <PetscReal*> PyArray_DATA(xyz)             # <<<<<<<<<<<<<<
@@ -140626,16 +149422,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_44setCoordinates(struct PyPetscPC
  */
   __pyx_v_coords = ((PetscReal *)PyArray_DATA(__pyx_v_xyz));
 
-  /* "PETSc/PC.pyx":234
+  /* "PETSc/PC.pyx":239
  *         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_ERR(34, 234, __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 == ((int)-1))) __PYX_ERR(34, 239, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":225
+  /* "PETSc/PC.pyx":230
  *         CHKERR( PCSetDM(self.pc, dm.dm) )
  * 
  *     def setCoordinates(self, coordinates):             # <<<<<<<<<<<<<<
@@ -140658,7 +149454,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_44setCoordinates(struct PyPetscPC
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":238
+/* "PETSc/PC.pyx":243
  *     # --- Python ---
  * 
  *     def createPython(self, context=None, comm=None):             # <<<<<<<<<<<<<<
@@ -140685,7 +149481,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_47createPython(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -140696,6 +149494,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_47createPython(PyObject *__pyx_v_
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_context);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -140703,12 +149502,14 @@ 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_ERR(34, 238, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createPython") < 0)) __PYX_ERR(34, 243, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -140718,7 +149519,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_ERR(34, 238, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createPython", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 243, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.createPython", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -140740,17 +149541,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_46createPython(struct PyPetscPCOb
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("createPython", 0);
 
-  /* "PETSc/PC.pyx":239
+  /* "PETSc/PC.pyx":244
  * 
  *     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_ERR(34, 239, __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, 244, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":240
+  /* "PETSc/PC.pyx":245
  *     def createPython(self, context=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscPC newpc = NULL             # <<<<<<<<<<<<<<
@@ -140759,16 +149560,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_46createPython(struct PyPetscPCOb
  */
   __pyx_v_newpc = NULL;
 
-  /* "PETSc/PC.pyx":241
+  /* "PETSc/PC.pyx":246
  *         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_ERR(34, 241, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCCreate(__pyx_v_ccomm, (&__pyx_v_newpc))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(34, 246, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":242
+  /* "PETSc/PC.pyx":247
  *         cdef PetscPC newpc = NULL
  *         CHKERR( PCCreate(ccomm, &newpc) )
  *         PetscCLEAR(self.obj); self.pc = newpc             # <<<<<<<<<<<<<<
@@ -140778,25 +149579,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":243
+  /* "PETSc/PC.pyx":248
  *         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_ERR(34, 243, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCSetType(__pyx_v_self->pc, PCPYTHON)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(34, 248, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":244
+  /* "PETSc/PC.pyx":249
  *         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_ERR(34, 244, __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 == ((int)-1))) __PYX_ERR(34, 249, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":245
+  /* "PETSc/PC.pyx":250
  *         CHKERR( PCSetType(self.pc, PCPYTHON) )
  *         CHKERR( PCPythonSetContext(self.pc, <void*>context) )
  *         return self             # <<<<<<<<<<<<<<
@@ -140808,7 +149609,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_46createPython(struct PyPetscPCOb
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":238
+  /* "PETSc/PC.pyx":243
  *     # --- Python ---
  * 
  *     def createPython(self, context=None, comm=None):             # <<<<<<<<<<<<<<
@@ -140826,7 +149627,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_46createPython(struct PyPetscPCOb
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":247
+/* "PETSc/PC.pyx":252
  *         return self
  * 
  *     def setPythonContext(self, context):             # <<<<<<<<<<<<<<
@@ -140850,6 +149651,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_49setPythonContext(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -140860,7 +149662,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_ERR(34, 247, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPythonContext") < 0)) __PYX_ERR(34, 252, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -140871,7 +149673,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_ERR(34, 247, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setPythonContext", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 252, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setPythonContext", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -140890,16 +149692,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_48setPythonContext(struct PyPetsc
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setPythonContext", 0);
 
-  /* "PETSc/PC.pyx":248
+  /* "PETSc/PC.pyx":253
  * 
  *     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_ERR(34, 248, __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 == ((int)-1))) __PYX_ERR(34, 253, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":247
+  /* "PETSc/PC.pyx":252
  *         return self
  * 
  *     def setPythonContext(self, context):             # <<<<<<<<<<<<<<
@@ -140919,7 +149721,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_48setPythonContext(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":250
+/* "PETSc/PC.pyx":255
  *         CHKERR( PCPythonSetContext(self.pc, <void*>context) )
  * 
  *     def getPythonContext(self):             # <<<<<<<<<<<<<<
@@ -140952,7 +149754,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_50getPythonContext(struct PyPetsc
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getPythonContext", 0);
 
-  /* "PETSc/PC.pyx":251
+  /* "PETSc/PC.pyx":256
  * 
  *     def getPythonContext(self):
  *         cdef void *context = NULL             # <<<<<<<<<<<<<<
@@ -140961,16 +149763,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_50getPythonContext(struct PyPetsc
  */
   __pyx_v_context = NULL;
 
-  /* "PETSc/PC.pyx":252
+  /* "PETSc/PC.pyx":257
  *     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_ERR(34, 252, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCPythonGetContext(__pyx_v_self->pc, (&__pyx_v_context))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(34, 257, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":253
+  /* "PETSc/PC.pyx":258
  *         cdef void *context = NULL
  *         CHKERR( PCPythonGetContext(self.pc, &context) )
  *         if context == NULL: return None             # <<<<<<<<<<<<<<
@@ -140985,7 +149787,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_50getPythonContext(struct PyPetsc
     goto __pyx_L0;
   }
 
-  /* "PETSc/PC.pyx":254
+  /* "PETSc/PC.pyx":259
  *         CHKERR( PCPythonGetContext(self.pc, &context) )
  *         if context == NULL: return None
  *         else: return <object> context             # <<<<<<<<<<<<<<
@@ -140999,7 +149801,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_50getPythonContext(struct PyPetsc
     goto __pyx_L0;
   }
 
-  /* "PETSc/PC.pyx":250
+  /* "PETSc/PC.pyx":255
  *         CHKERR( PCPythonSetContext(self.pc, <void*>context) )
  * 
  *     def getPythonContext(self):             # <<<<<<<<<<<<<<
@@ -141017,7 +149819,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_50getPythonContext(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":256
+/* "PETSc/PC.pyx":261
  *         else: return <object> context
  * 
  *     def setPythonType(self, py_type):             # <<<<<<<<<<<<<<
@@ -141041,6 +149843,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_53setPythonType(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -141051,7 +149854,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_ERR(34, 256, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPythonType") < 0)) __PYX_ERR(34, 261, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -141062,7 +149865,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_ERR(34, 256, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setPythonType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 261, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setPythonType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -141084,7 +149887,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_52setPythonType(struct PyPetscPCO
   __Pyx_RefNannySetupContext("setPythonType", 0);
   __Pyx_INCREF(__pyx_v_py_type);
 
-  /* "PETSc/PC.pyx":257
+  /* "PETSc/PC.pyx":262
  * 
  *     def setPythonType(self, py_type):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -141093,28 +149896,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_52setPythonType(struct PyPetscPCO
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/PC.pyx":258
+  /* "PETSc/PC.pyx":263
  *     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_ERR(34, 258, __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, 263, __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":259
+  /* "PETSc/PC.pyx":264
  *         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_ERR(34, 259, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCPythonSetType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(34, 264, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":256
+  /* "PETSc/PC.pyx":261
  *         else: return <object> context
  * 
  *     def setPythonType(self, py_type):             # <<<<<<<<<<<<<<
@@ -141136,7 +149939,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_52setPythonType(struct PyPetscPCO
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":263
+/* "PETSc/PC.pyx":268
  *     # --- ASM ---
  * 
  *     def setASMType(self, asmtype):             # <<<<<<<<<<<<<<
@@ -141160,6 +149963,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_55setASMType(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -141170,7 +149974,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_ERR(34, 263, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setASMType") < 0)) __PYX_ERR(34, 268, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -141181,7 +149985,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_ERR(34, 263, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setASMType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 268, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setASMType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -141202,26 +150006,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_54setASMType(struct PyPetscPCObje
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setASMType", 0);
 
-  /* "PETSc/PC.pyx":264
+  /* "PETSc/PC.pyx":269
  * 
  *     def setASMType(self, asmtype):
  *         cdef PetscPCASMType cval = asmtype             # <<<<<<<<<<<<<<
  *         CHKERR( PCASMSetType(self.pc, cval) )
  * 
  */
-  __pyx_t_1 = ((PCASMType)__Pyx_PyInt_As_PCASMType(__pyx_v_asmtype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(34, 264, __pyx_L1_error)
+  __pyx_t_1 = ((PCASMType)__Pyx_PyInt_As_PCASMType(__pyx_v_asmtype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(34, 269, __pyx_L1_error)
   __pyx_v_cval = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":265
+  /* "PETSc/PC.pyx":270
  *     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_ERR(34, 265, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCASMSetType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(34, 270, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":263
+  /* "PETSc/PC.pyx":268
  *     # --- ASM ---
  * 
  *     def setASMType(self, asmtype):             # <<<<<<<<<<<<<<
@@ -141241,7 +150045,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_54setASMType(struct PyPetscPCObje
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":267
+/* "PETSc/PC.pyx":272
  *         CHKERR( PCASMSetType(self.pc, cval) )
  * 
  *     def setASMOverlap(self, overlap):             # <<<<<<<<<<<<<<
@@ -141265,6 +150069,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_57setASMOverlap(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -141275,7 +150080,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_ERR(34, 267, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setASMOverlap") < 0)) __PYX_ERR(34, 272, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -141286,7 +150091,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_ERR(34, 267, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setASMOverlap", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 272, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setASMOverlap", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -141307,26 +150112,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_56setASMOverlap(struct PyPetscPCO
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setASMOverlap", 0);
 
-  /* "PETSc/PC.pyx":268
+  /* "PETSc/PC.pyx":273
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(34, 268, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_overlap); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(34, 273, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":269
+  /* "PETSc/PC.pyx":274
  *     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_ERR(34, 269, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCASMSetOverlap(__pyx_v_self->pc, __pyx_v_ival)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(34, 274, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":267
+  /* "PETSc/PC.pyx":272
  *         CHKERR( PCASMSetType(self.pc, cval) )
  * 
  *     def setASMOverlap(self, overlap):             # <<<<<<<<<<<<<<
@@ -141346,7 +150151,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_56setASMOverlap(struct PyPetscPCO
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":271
+/* "PETSc/PC.pyx":276
  *         CHKERR( PCASMSetOverlap(self.pc, ival) )
  * 
  *     def setASMLocalSubdomains(self, nsd):             # <<<<<<<<<<<<<<
@@ -141370,6 +150175,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_59setASMLocalSubdomains(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -141380,7 +150186,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_ERR(34, 271, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setASMLocalSubdomains") < 0)) __PYX_ERR(34, 276, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -141391,7 +150197,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_ERR(34, 271, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setASMLocalSubdomains", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 276, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setASMLocalSubdomains", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -141412,26 +150218,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_58setASMLocalSubdomains(struct Py
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setASMLocalSubdomains", 0);
 
-  /* "PETSc/PC.pyx":272
+  /* "PETSc/PC.pyx":277
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(34, 272, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_nsd); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(34, 277, __pyx_L1_error)
   __pyx_v_n = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":273
+  /* "PETSc/PC.pyx":278
  *     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_ERR(34, 273, __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 == ((int)-1))) __PYX_ERR(34, 278, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":271
+  /* "PETSc/PC.pyx":276
  *         CHKERR( PCASMSetOverlap(self.pc, ival) )
  * 
  *     def setASMLocalSubdomains(self, nsd):             # <<<<<<<<<<<<<<
@@ -141451,7 +150257,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_58setASMLocalSubdomains(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":275
+/* "PETSc/PC.pyx":280
  *         CHKERR( PCASMSetLocalSubdomains(self.pc, n, NULL, NULL) )
  * 
  *     def setASMTotalSubdomains(self, nsd):             # <<<<<<<<<<<<<<
@@ -141475,6 +150281,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_61setASMTotalSubdomains(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -141485,7 +150292,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_ERR(34, 275, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setASMTotalSubdomains") < 0)) __PYX_ERR(34, 280, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -141496,7 +150303,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_ERR(34, 275, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setASMTotalSubdomains", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 280, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setASMTotalSubdomains", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -141517,26 +150324,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_60setASMTotalSubdomains(struct Py
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setASMTotalSubdomains", 0);
 
-  /* "PETSc/PC.pyx":276
+  /* "PETSc/PC.pyx":281
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(34, 276, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_nsd); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(34, 281, __pyx_L1_error)
   __pyx_v_N = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":277
+  /* "PETSc/PC.pyx":282
  *     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_ERR(34, 277, __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 == ((int)-1))) __PYX_ERR(34, 282, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":275
+  /* "PETSc/PC.pyx":280
  *         CHKERR( PCASMSetLocalSubdomains(self.pc, n, NULL, NULL) )
  * 
  *     def setASMTotalSubdomains(self, nsd):             # <<<<<<<<<<<<<<
@@ -141556,7 +150363,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_60setASMTotalSubdomains(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":279
+/* "PETSc/PC.pyx":284
  *         CHKERR( PCASMSetTotalSubdomains(self.pc, N, NULL, NULL) )
  * 
  *     def getASMSubKSP(self):             # <<<<<<<<<<<<<<
@@ -141593,7 +150400,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_62getASMSubKSP(struct PyPetscPCOb
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("getASMSubKSP", 0);
 
-  /* "PETSc/PC.pyx":280
+  /* "PETSc/PC.pyx":285
  * 
  *     def getASMSubKSP(self):
  *         cdef PetscInt i = 0, n = 0             # <<<<<<<<<<<<<<
@@ -141603,7 +150410,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_62getASMSubKSP(struct PyPetscPCOb
   __pyx_v_i = 0;
   __pyx_v_n = 0;
 
-  /* "PETSc/PC.pyx":281
+  /* "PETSc/PC.pyx":286
  *     def getASMSubKSP(self):
  *         cdef PetscInt i = 0, n = 0
  *         cdef PetscKSP *p = NULL             # <<<<<<<<<<<<<<
@@ -141612,16 +150419,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_62getASMSubKSP(struct PyPetscPCOb
  */
   __pyx_v_p = NULL;
 
-  /* "PETSc/PC.pyx":282
+  /* "PETSc/PC.pyx":287
  *         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_ERR(34, 282, __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 == ((int)-1))) __PYX_ERR(34, 287, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":283
+  /* "PETSc/PC.pyx":288
  *         cdef PetscKSP *p = NULL
  *         CHKERR( PCASMGetSubKSP(self.pc, &n, NULL, &p) )
  *         return [ref_KSP(p[i]) for i from 0 <= i <n]             # <<<<<<<<<<<<<<
@@ -141629,20 +150436,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_ERR(34, 283, __pyx_L1_error)
+  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(34, 288, __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_ERR(34, 283, __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, 288, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_4))) __PYX_ERR(34, 283, __pyx_L1_error)
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_4))) __PYX_ERR(34, 288, __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":279
+  /* "PETSc/PC.pyx":284
  *         CHKERR( PCASMSetTotalSubdomains(self.pc, N, NULL, NULL) )
  * 
  *     def getASMSubKSP(self):             # <<<<<<<<<<<<<<
@@ -141662,7 +150469,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_62getASMSubKSP(struct PyPetscPCOb
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":287
+/* "PETSc/PC.pyx":292
  *     # --- GASM ---
  * 
  *     def setGASMType(self, gasmtype):             # <<<<<<<<<<<<<<
@@ -141686,6 +150493,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_65setGASMType(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -141696,7 +150504,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_ERR(34, 287, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setGASMType") < 0)) __PYX_ERR(34, 292, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -141707,7 +150515,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_ERR(34, 287, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setGASMType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 292, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setGASMType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -141728,26 +150536,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_64setGASMType(struct PyPetscPCObj
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setGASMType", 0);
 
-  /* "PETSc/PC.pyx":288
+  /* "PETSc/PC.pyx":293
  * 
  *     def setGASMType(self, gasmtype):
  *         cdef PetscPCGASMType cval = gasmtype             # <<<<<<<<<<<<<<
  *         CHKERR( PCGASMSetType(self.pc, cval) )
  * 
  */
-  __pyx_t_1 = ((PCGASMType)__Pyx_PyInt_As_PCGASMType(__pyx_v_gasmtype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(34, 288, __pyx_L1_error)
+  __pyx_t_1 = ((PCGASMType)__Pyx_PyInt_As_PCGASMType(__pyx_v_gasmtype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(34, 293, __pyx_L1_error)
   __pyx_v_cval = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":289
+  /* "PETSc/PC.pyx":294
  *     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_ERR(34, 289, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCGASMSetType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(34, 294, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":287
+  /* "PETSc/PC.pyx":292
  *     # --- GASM ---
  * 
  *     def setGASMType(self, gasmtype):             # <<<<<<<<<<<<<<
@@ -141767,7 +150575,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_64setGASMType(struct PyPetscPCObj
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":291
+/* "PETSc/PC.pyx":296
  *         CHKERR( PCGASMSetType(self.pc, cval) )
  * 
  *     def setGASMOverlap(self, overlap):             # <<<<<<<<<<<<<<
@@ -141791,6 +150599,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_67setGASMOverlap(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -141801,7 +150610,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_ERR(34, 291, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setGASMOverlap") < 0)) __PYX_ERR(34, 296, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -141812,7 +150621,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_ERR(34, 291, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setGASMOverlap", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 296, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setGASMOverlap", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -141833,26 +150642,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_66setGASMOverlap(struct PyPetscPC
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setGASMOverlap", 0);
 
-  /* "PETSc/PC.pyx":292
+  /* "PETSc/PC.pyx":297
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(34, 292, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_overlap); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(34, 297, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":293
+  /* "PETSc/PC.pyx":298
  *     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_ERR(34, 293, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCGASMSetOverlap(__pyx_v_self->pc, __pyx_v_ival)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(34, 298, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":291
+  /* "PETSc/PC.pyx":296
  *         CHKERR( PCGASMSetType(self.pc, cval) )
  * 
  *     def setGASMOverlap(self, overlap):             # <<<<<<<<<<<<<<
@@ -141872,7 +150681,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_66setGASMOverlap(struct PyPetscPC
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":297
+/* "PETSc/PC.pyx":302
  *     # --- GAMG ---
  * 
  *     def setGAMGType(self, gamgtype):             # <<<<<<<<<<<<<<
@@ -141896,6 +150705,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_69setGAMGType(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -141906,7 +150716,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_ERR(34, 297, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setGAMGType") < 0)) __PYX_ERR(34, 302, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -141917,7 +150727,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_ERR(34, 297, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setGAMGType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 302, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setGAMGType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -141939,7 +150749,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_68setGAMGType(struct PyPetscPCObj
   __Pyx_RefNannySetupContext("setGAMGType", 0);
   __Pyx_INCREF(__pyx_v_gamgtype);
 
-  /* "PETSc/PC.pyx":298
+  /* "PETSc/PC.pyx":303
  * 
  *     def setGAMGType(self, gamgtype):
  *         cdef PetscPCGAMGType cval = NULL             # <<<<<<<<<<<<<<
@@ -141948,28 +150758,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_68setGAMGType(struct PyPetscPCObj
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/PC.pyx":299
+  /* "PETSc/PC.pyx":304
  *     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_ERR(34, 299, __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, 304, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_gamgtype, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/PC.pyx":300
+  /* "PETSc/PC.pyx":305
  *         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_ERR(34, 300, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCGAMGSetType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(34, 305, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":297
+  /* "PETSc/PC.pyx":302
  *     # --- GAMG ---
  * 
  *     def setGAMGType(self, gamgtype):             # <<<<<<<<<<<<<<
@@ -141991,7 +150801,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_68setGAMGType(struct PyPetscPCObj
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":302
+/* "PETSc/PC.pyx":307
  *         CHKERR( PCGAMGSetType(self.pc, cval) )
  * 
  *     def setGAMGLevels(self, levels):             # <<<<<<<<<<<<<<
@@ -142015,6 +150825,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_71setGAMGLevels(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -142025,7 +150836,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_ERR(34, 302, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setGAMGLevels") < 0)) __PYX_ERR(34, 307, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -142036,7 +150847,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_ERR(34, 302, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setGAMGLevels", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 307, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setGAMGLevels", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -142057,26 +150868,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_70setGAMGLevels(struct PyPetscPCO
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setGAMGLevels", 0);
 
-  /* "PETSc/PC.pyx":303
+  /* "PETSc/PC.pyx":308
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(34, 303, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_levels); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(34, 308, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":304
+  /* "PETSc/PC.pyx":309
  *     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_ERR(34, 304, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCGAMGSetNlevels(__pyx_v_self->pc, __pyx_v_ival)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(34, 309, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":302
+  /* "PETSc/PC.pyx":307
  *         CHKERR( PCGAMGSetType(self.pc, cval) )
  * 
  *     def setGAMGLevels(self, levels):             # <<<<<<<<<<<<<<
@@ -142096,7 +150907,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_70setGAMGLevels(struct PyPetscPCO
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":306
+/* "PETSc/PC.pyx":311
  *         CHKERR( PCGAMGSetNlevels(self.pc, ival) )
  * 
  *     def setGAMGSmooths(self, smooths):             # <<<<<<<<<<<<<<
@@ -142120,6 +150931,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_73setGAMGSmooths(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -142130,7 +150942,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_ERR(34, 306, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setGAMGSmooths") < 0)) __PYX_ERR(34, 311, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -142141,7 +150953,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_ERR(34, 306, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setGAMGSmooths", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 311, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setGAMGSmooths", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -142162,26 +150974,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_72setGAMGSmooths(struct PyPetscPC
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setGAMGSmooths", 0);
 
-  /* "PETSc/PC.pyx":307
+  /* "PETSc/PC.pyx":312
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(34, 307, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_smooths); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(34, 312, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":308
+  /* "PETSc/PC.pyx":313
  *     def setGAMGSmooths(self, smooths):
  *         cdef PetscInt ival = asInt(smooths)
  *         CHKERR( PCGAMGSetNSmooths(self.pc, ival) )             # <<<<<<<<<<<<<<
  * 
  *     # --- Hypre ---
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCGAMGSetNSmooths(__pyx_v_self->pc, __pyx_v_ival)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(34, 313, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":306
+  /* "PETSc/PC.pyx":311
  *         CHKERR( PCGAMGSetNlevels(self.pc, ival) )
  * 
  *     def setGAMGSmooths(self, smooths):             # <<<<<<<<<<<<<<
@@ -142201,7 +151013,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_72setGAMGSmooths(struct PyPetscPC
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":312
+/* "PETSc/PC.pyx":317
  *     # --- Hypre ---
  * 
  *     def getHYPREType(self):             # <<<<<<<<<<<<<<
@@ -142234,7 +151046,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_74getHYPREType(struct PyPetscPCOb
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getHYPREType", 0);
 
-  /* "PETSc/PC.pyx":313
+  /* "PETSc/PC.pyx":318
  * 
  *     def getHYPREType(self):
  *         cdef PetscPCHYPREType cval = NULL             # <<<<<<<<<<<<<<
@@ -142243,16 +151055,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_74getHYPREType(struct PyPetscPCOb
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/PC.pyx":314
+  /* "PETSc/PC.pyx":319
  *     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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCHYPREGetType(__pyx_v_self->pc, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(34, 319, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":315
+  /* "PETSc/PC.pyx":320
  *         cdef PetscPCHYPREType cval = NULL
  *         CHKERR( PCHYPREGetType(self.pc, &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -142260,13 +151072,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_74getHYPREType(struct PyPetscPCOb
  *     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_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(34, 320, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":312
+  /* "PETSc/PC.pyx":317
  *     # --- Hypre ---
  * 
  *     def getHYPREType(self):             # <<<<<<<<<<<<<<
@@ -142285,7 +151097,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_74getHYPREType(struct PyPetscPCOb
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":317
+/* "PETSc/PC.pyx":322
  *         return bytes2str(cval)
  * 
  *     def setHYPREType(self, hypretype):             # <<<<<<<<<<<<<<
@@ -142309,6 +151121,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_77setHYPREType(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -142319,7 +151132,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_77setHYPREType(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, "setHYPREType") < 0)) __PYX_ERR(34, 317, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setHYPREType") < 0)) __PYX_ERR(34, 322, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -142330,7 +151143,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_77setHYPREType(PyObject *__pyx_v_
   }
   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_RaiseArgtupleInvalid("setHYPREType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 322, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setHYPREType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -142352,7 +151165,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_76setHYPREType(struct PyPetscPCOb
   __Pyx_RefNannySetupContext("setHYPREType", 0);
   __Pyx_INCREF(__pyx_v_hypretype);
 
-  /* "PETSc/PC.pyx":318
+  /* "PETSc/PC.pyx":323
  * 
  *     def setHYPREType(self, hypretype):
  *         cdef PetscPCHYPREType cval = NULL             # <<<<<<<<<<<<<<
@@ -142361,28 +151174,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_76setHYPREType(struct PyPetscPCOb
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/PC.pyx":319
+  /* "PETSc/PC.pyx":324
  *     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_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_hypretype, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 324, __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
+  /* "PETSc/PC.pyx":325
  *         cdef PetscPCHYPREType cval = NULL
  *         hypretype = str2bytes(hypretype, &cval)
  *         CHKERR( PCHYPRESetType(self.pc, cval) )             # <<<<<<<<<<<<<<
  * 
- *     def setHYPREDiscreteCurl(self, Mat mat not None):
+ *     def setHYPREDiscreteCurl(self, Mat mat):
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCHYPRESetType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(34, 325, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":317
+  /* "PETSc/PC.pyx":322
  *         return bytes2str(cval)
  * 
  *     def setHYPREType(self, hypretype):             # <<<<<<<<<<<<<<
@@ -142404,10 +151217,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_76setHYPREType(struct PyPetscPCOb
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":322
+/* "PETSc/PC.pyx":327
  *         CHKERR( PCHYPRESetType(self.pc, cval) )
  * 
- *     def setHYPREDiscreteCurl(self, Mat mat not None):             # <<<<<<<<<<<<<<
+ *     def setHYPREDiscreteCurl(self, Mat mat):             # <<<<<<<<<<<<<<
  *         CHKERR( PCHYPRESetDiscreteCurl(self.pc, mat.mat) )
  * 
  */
@@ -142428,6 +151241,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_79setHYPREDiscreteCurl(PyObject *
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -142438,7 +151252,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_79setHYPREDiscreteCurl(PyObject *
         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)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setHYPREDiscreteCurl") < 0)) __PYX_ERR(34, 327, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -142449,13 +151263,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_79setHYPREDiscreteCurl(PyObject *
   }
   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_RaiseArgtupleInvalid("setHYPREDiscreteCurl", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 327, __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)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(34, 327, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_78setHYPREDiscreteCurl(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_mat);
 
   /* function exit code */
@@ -142473,19 +151287,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_78setHYPREDiscreteCurl(struct PyP
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setHYPREDiscreteCurl", 0);
 
-  /* "PETSc/PC.pyx":323
+  /* "PETSc/PC.pyx":328
  * 
- *     def setHYPREDiscreteCurl(self, Mat mat not None):
+ *     def setHYPREDiscreteCurl(self, Mat mat):
  *         CHKERR( PCHYPRESetDiscreteCurl(self.pc, mat.mat) )             # <<<<<<<<<<<<<<
  * 
- *     def setHYPREDiscreteGradient(self, Mat mat not None):
+ *     def setHYPREDiscreteGradient(self, Mat mat):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCHYPRESetDiscreteCurl(__pyx_v_self->pc, __pyx_v_mat->mat)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(34, 328, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":322
+  /* "PETSc/PC.pyx":327
  *         CHKERR( PCHYPRESetType(self.pc, cval) )
  * 
- *     def setHYPREDiscreteCurl(self, Mat mat not None):             # <<<<<<<<<<<<<<
+ *     def setHYPREDiscreteCurl(self, Mat mat):             # <<<<<<<<<<<<<<
  *         CHKERR( PCHYPRESetDiscreteCurl(self.pc, mat.mat) )
  * 
  */
@@ -142502,10 +151316,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_78setHYPREDiscreteCurl(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":325
+/* "PETSc/PC.pyx":330
  *         CHKERR( PCHYPRESetDiscreteCurl(self.pc, mat.mat) )
  * 
- *     def setHYPREDiscreteGradient(self, Mat mat not None):             # <<<<<<<<<<<<<<
+ *     def setHYPREDiscreteGradient(self, Mat mat):             # <<<<<<<<<<<<<<
  *         CHKERR( PCHYPRESetDiscreteGradient(self.pc, mat.mat) )
  * 
  */
@@ -142526,6 +151340,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_81setHYPREDiscreteGradient(PyObje
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -142536,7 +151351,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_81setHYPREDiscreteGradient(PyObje
         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)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setHYPREDiscreteGradient") < 0)) __PYX_ERR(34, 330, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -142547,13 +151362,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_81setHYPREDiscreteGradient(PyObje
   }
   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_RaiseArgtupleInvalid("setHYPREDiscreteGradient", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 330, __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)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(34, 330, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_80setHYPREDiscreteGradient(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_mat);
 
   /* function exit code */
@@ -142571,19 +151386,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_80setHYPREDiscreteGradient(struct
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setHYPREDiscreteGradient", 0);
 
-  /* "PETSc/PC.pyx":326
+  /* "PETSc/PC.pyx":331
  * 
- *     def setHYPREDiscreteGradient(self, Mat mat not None):
+ *     def setHYPREDiscreteGradient(self, Mat mat):
  *         CHKERR( PCHYPRESetDiscreteGradient(self.pc, mat.mat) )             # <<<<<<<<<<<<<<
  * 
- *     def setHYPRESetAlphaPoissonMatrix(self, Mat mat not None):
+ *     def setHYPRESetAlphaPoissonMatrix(self, Mat mat):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCHYPRESetDiscreteGradient(__pyx_v_self->pc, __pyx_v_mat->mat)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(34, 331, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":325
+  /* "PETSc/PC.pyx":330
  *         CHKERR( PCHYPRESetDiscreteCurl(self.pc, mat.mat) )
  * 
- *     def setHYPREDiscreteGradient(self, Mat mat not None):             # <<<<<<<<<<<<<<
+ *     def setHYPREDiscreteGradient(self, Mat mat):             # <<<<<<<<<<<<<<
  *         CHKERR( PCHYPRESetDiscreteGradient(self.pc, mat.mat) )
  * 
  */
@@ -142600,10 +151415,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_80setHYPREDiscreteGradient(struct
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":328
+/* "PETSc/PC.pyx":333
  *         CHKERR( PCHYPRESetDiscreteGradient(self.pc, mat.mat) )
  * 
- *     def setHYPRESetAlphaPoissonMatrix(self, Mat mat not None):             # <<<<<<<<<<<<<<
+ *     def setHYPRESetAlphaPoissonMatrix(self, Mat mat):             # <<<<<<<<<<<<<<
  *         CHKERR( PCHYPRESetAlphaPoissonMatrix(self.pc, mat.mat) )
  * 
  */
@@ -142624,6 +151439,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_83setHYPRESetAlphaPoissonMatrix(P
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -142634,7 +151450,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_83setHYPRESetAlphaPoissonMatrix(P
         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)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setHYPRESetAlphaPoissonMatrix") < 0)) __PYX_ERR(34, 333, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -142645,13 +151461,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_83setHYPRESetAlphaPoissonMatrix(P
   }
   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_RaiseArgtupleInvalid("setHYPRESetAlphaPoissonMatrix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 333, __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)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(34, 333, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_82setHYPRESetAlphaPoissonMatrix(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_mat);
 
   /* function exit code */
@@ -142669,19 +151485,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_82setHYPRESetAlphaPoissonMatrix(s
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setHYPRESetAlphaPoissonMatrix", 0);
 
-  /* "PETSc/PC.pyx":329
+  /* "PETSc/PC.pyx":334
  * 
- *     def setHYPRESetAlphaPoissonMatrix(self, Mat mat not None):
+ *     def setHYPRESetAlphaPoissonMatrix(self, Mat mat):
  *         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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCHYPRESetAlphaPoissonMatrix(__pyx_v_self->pc, __pyx_v_mat->mat)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(34, 334, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":328
+  /* "PETSc/PC.pyx":333
  *         CHKERR( PCHYPRESetDiscreteGradient(self.pc, mat.mat) )
  * 
- *     def setHYPRESetAlphaPoissonMatrix(self, Mat mat not None):             # <<<<<<<<<<<<<<
+ *     def setHYPRESetAlphaPoissonMatrix(self, Mat mat):             # <<<<<<<<<<<<<<
  *         CHKERR( PCHYPRESetAlphaPoissonMatrix(self.pc, mat.mat) )
  * 
  */
@@ -142698,7 +151514,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_82setHYPRESetAlphaPoissonMatrix(s
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":331
+/* "PETSc/PC.pyx":336
  *         CHKERR( PCHYPRESetAlphaPoissonMatrix(self.pc, mat.mat) )
  * 
  *     def setHYPRESetBetaPoissonMatrix(self, Mat mat=None):             # <<<<<<<<<<<<<<
@@ -142723,6 +151539,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_85setHYPRESetBetaPoissonMatrix(Py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -142735,11 +151552,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_85setHYPRESetBetaPoissonMatrix(Py
         }
       }
       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)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setHYPRESetBetaPoissonMatrix") < 0)) __PYX_ERR(34, 336, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -142748,13 +151566,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_85setHYPRESetBetaPoissonMatrix(Py
   }
   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_RaiseArgtupleInvalid("setHYPRESetBetaPoissonMatrix", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 336, __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)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "mat", 0))) __PYX_ERR(34, 336, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_84setHYPRESetBetaPoissonMatrix(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_mat);
 
   /* function exit code */
@@ -142776,7 +151594,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_84setHYPRESetBetaPoissonMatrix(st
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("setHYPRESetBetaPoissonMatrix", 0);
 
-  /* "PETSc/PC.pyx":332
+  /* "PETSc/PC.pyx":337
  * 
  *     def setHYPRESetBetaPoissonMatrix(self, Mat mat=None):
  *         cdef PetscMat pmat = NULL             # <<<<<<<<<<<<<<
@@ -142785,7 +151603,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_84setHYPRESetBetaPoissonMatrix(st
  */
   __pyx_v_pmat = NULL;
 
-  /* "PETSc/PC.pyx":333
+  /* "PETSc/PC.pyx":338
  *     def setHYPRESetBetaPoissonMatrix(self, Mat mat=None):
  *         cdef PetscMat pmat = NULL
  *         if mat is not None: pmat = mat.mat             # <<<<<<<<<<<<<<
@@ -142799,16 +151617,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_84setHYPRESetBetaPoissonMatrix(st
     __pyx_v_pmat = __pyx_t_3;
   }
 
-  /* "PETSc/PC.pyx":334
+  /* "PETSc/PC.pyx":339
  *         cdef PetscMat pmat = NULL
  *         if mat is not None: pmat = mat.mat
  *         CHKERR( PCHYPRESetBetaPoissonMatrix(self.pc, pmat) )             # <<<<<<<<<<<<<<
  * 
- *     def setHYPRESetEdgeConstantVectors(self, Vec ozz not None,
+ *     def setHYPRESetEdgeConstantVectors(self, Vec ozz, Vec zoz, Vec zzo=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)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCHYPRESetBetaPoissonMatrix(__pyx_v_self->pc, __pyx_v_pmat)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(34, 339, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":331
+  /* "PETSc/PC.pyx":336
  *         CHKERR( PCHYPRESetAlphaPoissonMatrix(self.pc, mat.mat) )
  * 
  *     def setHYPRESetBetaPoissonMatrix(self, Mat mat=None):             # <<<<<<<<<<<<<<
@@ -142828,12 +151646,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_84setHYPRESetBetaPoissonMatrix(st
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":336
+/* "PETSc/PC.pyx":341
  *         CHKERR( PCHYPRESetBetaPoissonMatrix(self.pc, pmat) )
  * 
- *     def setHYPRESetEdgeConstantVectors(self, Vec ozz not None,             # <<<<<<<<<<<<<<
- *                                        Vec zoz not None, Vec zzo=None):
+ *     def setHYPRESetEdgeConstantVectors(self, Vec ozz, Vec zoz, Vec zzo=None):             # <<<<<<<<<<<<<<
  *         cdef PetscVec zzo_vec = NULL
+ *         if zzo is not None: zzo_vec = zzo.vec
  */
 
 /* Python wrapper */
@@ -142849,22 +151667,17 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_87setHYPRESetEdgeConstantVectors(
   {
     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);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -142873,11 +151686,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_87setHYPRESetEdgeConstantVectors(
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ozz)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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)
+          __Pyx_RaiseArgtupleInvalid("setHYPRESetEdgeConstantVectors", 0, 2, 3, 1); __PYX_ERR(34, 341, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_zzo);
@@ -142885,11 +151700,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_87setHYPRESetEdgeConstantVectors(
         }
       }
       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)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setHYPRESetEdgeConstantVectors") < 0)) __PYX_ERR(34, 341, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -142902,25 +151718,17 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_87setHYPRESetEdgeConstantVectors(
   }
   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_RaiseArgtupleInvalid("setHYPRESetEdgeConstantVectors", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 341, __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)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ozz), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "ozz", 0))) __PYX_ERR(34, 341, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_zoz), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "zoz", 0))) __PYX_ERR(34, 341, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_zzo), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "zzo", 0))) __PYX_ERR(34, 341, __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:;
@@ -142940,17 +151748,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_86setHYPRESetEdgeConstantVectors(
   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):
+  /* "PETSc/PC.pyx":342
+ * 
+ *     def setHYPRESetEdgeConstantVectors(self, Vec ozz, Vec zoz, 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):
+  /* "PETSc/PC.pyx":343
+ *     def setHYPRESetEdgeConstantVectors(self, Vec ozz, Vec zoz, 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,
@@ -142963,21 +151771,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_86setHYPRESetEdgeConstantVectors(
     __pyx_v_zzo_vec = __pyx_t_3;
   }
 
-  /* "PETSc/PC.pyx":340
+  /* "PETSc/PC.pyx":344
  *         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)
+  __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 == ((int)-1))) __PYX_ERR(34, 344, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":336
+  /* "PETSc/PC.pyx":341
  *         CHKERR( PCHYPRESetBetaPoissonMatrix(self.pc, pmat) )
  * 
- *     def setHYPRESetEdgeConstantVectors(self, Vec ozz not None,             # <<<<<<<<<<<<<<
- *                                        Vec zoz not None, Vec zzo=None):
+ *     def setHYPRESetEdgeConstantVectors(self, Vec ozz, Vec zoz, Vec zzo=None):             # <<<<<<<<<<<<<<
  *         cdef PetscVec zzo_vec = NULL
+ *         if zzo is not None: zzo_vec = zzo.vec
  */
 
   /* function exit code */
@@ -142992,7 +151800,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_86setHYPRESetEdgeConstantVectors(
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":345
+/* "PETSc/PC.pyx":349
  *     # --- Factor ---
  * 
  *     def setFactorSolverPackage(self, solver):             # <<<<<<<<<<<<<<
@@ -143016,6 +151824,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_89setFactorSolverPackage(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -143026,7 +151835,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_89setFactorSolverPackage(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_ERR(34, 345, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFactorSolverPackage") < 0)) __PYX_ERR(34, 349, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -143037,7 +151846,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_89setFactorSolverPackage(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFactorSolverPackage", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 345, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setFactorSolverPackage", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 349, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setFactorSolverPackage", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -143059,7 +151868,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_88setFactorSolverPackage(struct P
   __Pyx_RefNannySetupContext("setFactorSolverPackage", 0);
   __Pyx_INCREF(__pyx_v_solver);
 
-  /* "PETSc/PC.pyx":346
+  /* "PETSc/PC.pyx":350
  * 
  *     def setFactorSolverPackage(self, solver):
  *         cdef PetscMatSolverPackage cval = NULL             # <<<<<<<<<<<<<<
@@ -143068,28 +151877,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_88setFactorSolverPackage(struct P
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/PC.pyx":347
+  /* "PETSc/PC.pyx":351
  *     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_ERR(34, 347, __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, 351, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_solver, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/PC.pyx":348
+  /* "PETSc/PC.pyx":352
  *         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_ERR(34, 348, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorSetMatSolverPackage(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(34, 352, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":345
+  /* "PETSc/PC.pyx":349
  *     # --- Factor ---
  * 
  *     def setFactorSolverPackage(self, solver):             # <<<<<<<<<<<<<<
@@ -143111,7 +151920,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_88setFactorSolverPackage(struct P
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":350
+/* "PETSc/PC.pyx":354
  *         CHKERR( PCFactorSetMatSolverPackage(self.pc, cval) )
  * 
  *     def getFactorSolverPackage(self):             # <<<<<<<<<<<<<<
@@ -143144,7 +151953,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_90getFactorSolverPackage(struct P
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getFactorSolverPackage", 0);
 
-  /* "PETSc/PC.pyx":351
+  /* "PETSc/PC.pyx":355
  * 
  *     def getFactorSolverPackage(self):
  *         cdef PetscMatSolverPackage cval = NULL             # <<<<<<<<<<<<<<
@@ -143153,16 +151962,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_90getFactorSolverPackage(struct P
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/PC.pyx":352
+  /* "PETSc/PC.pyx":356
  *     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_ERR(34, 352, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorGetMatSolverPackage(__pyx_v_self->pc, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(34, 356, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":353
+  /* "PETSc/PC.pyx":357
  *         cdef PetscMatSolverPackage cval = NULL
  *         CHKERR( PCFactorGetMatSolverPackage(self.pc, &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -143170,13 +151979,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_90getFactorSolverPackage(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_ERR(34, 353, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(34, 357, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":350
+  /* "PETSc/PC.pyx":354
  *         CHKERR( PCFactorSetMatSolverPackage(self.pc, cval) )
  * 
  *     def getFactorSolverPackage(self):             # <<<<<<<<<<<<<<
@@ -143195,7 +152004,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_90getFactorSolverPackage(struct P
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":355
+/* "PETSc/PC.pyx":359
  *         return bytes2str(cval)
  * 
  *     def setFactorOrdering(self, ord_type=None, nzdiag=None, reuse=None):             # <<<<<<<<<<<<<<
@@ -143224,8 +152033,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_93setFactorOrdering(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -143236,11 +152048,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_93setFactorOrdering(PyObject *__p
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ord_type);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nzdiag);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_reuse);
@@ -143248,13 +152062,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_93setFactorOrdering(PyObject *__p
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFactorOrdering") < 0)) __PYX_ERR(34, 355, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFactorOrdering") < 0)) __PYX_ERR(34, 359, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -143265,7 +152082,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_93setFactorOrdering(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFactorOrdering", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 355, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setFactorOrdering", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 359, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setFactorOrdering", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -143293,7 +152110,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_92setFactorOrdering(struct PyPets
   __Pyx_RefNannySetupContext("setFactorOrdering", 0);
   __Pyx_INCREF(__pyx_v_ord_type);
 
-  /* "PETSc/PC.pyx":356
+  /* "PETSc/PC.pyx":360
  * 
  *     def setFactorOrdering(self, ord_type=None, nzdiag=None, reuse=None):
  *         cdef PetscMatOrderingType cval = NULL             # <<<<<<<<<<<<<<
@@ -143302,7 +152119,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_92setFactorOrdering(struct PyPets
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/PC.pyx":357
+  /* "PETSc/PC.pyx":361
  *     def setFactorOrdering(self, ord_type=None, nzdiag=None, reuse=None):
  *         cdef PetscMatOrderingType cval = NULL
  *         if ord_type is not None:             # <<<<<<<<<<<<<<
@@ -143313,28 +152130,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_92setFactorOrdering(struct PyPets
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/PC.pyx":358
+    /* "PETSc/PC.pyx":362
  *         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_ERR(34, 358, __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, 362, __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":359
+    /* "PETSc/PC.pyx":363
  *         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_ERR(34, 359, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorSetMatOrderingType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(34, 363, __pyx_L1_error)
 
-    /* "PETSc/PC.pyx":357
+    /* "PETSc/PC.pyx":361
  *     def setFactorOrdering(self, ord_type=None, nzdiag=None, reuse=None):
  *         cdef PetscMatOrderingType cval = NULL
  *         if ord_type is not None:             # <<<<<<<<<<<<<<
@@ -143343,7 +152160,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_92setFactorOrdering(struct PyPets
  */
   }
 
-  /* "PETSc/PC.pyx":360
+  /* "PETSc/PC.pyx":364
  *             ord_type = str2bytes(ord_type, &cval)
  *             CHKERR( PCFactorSetMatOrderingType(self.pc, cval) )
  *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
@@ -143352,7 +152169,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_92setFactorOrdering(struct PyPets
  */
   __pyx_v_rval = 0.0;
 
-  /* "PETSc/PC.pyx":361
+  /* "PETSc/PC.pyx":365
  *             CHKERR( PCFactorSetMatOrderingType(self.pc, cval) )
  *         cdef PetscReal rval = 0
  *         if nzdiag is not None:             # <<<<<<<<<<<<<<
@@ -143363,26 +152180,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_92setFactorOrdering(struct PyPets
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/PC.pyx":362
+    /* "PETSc/PC.pyx":366
  *         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_ERR(34, 362, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_nzdiag); if (unlikely(__pyx_t_5 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(34, 366, __pyx_L1_error)
     __pyx_v_rval = __pyx_t_5;
 
-    /* "PETSc/PC.pyx":363
+    /* "PETSc/PC.pyx":367
  *         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_ERR(34, 363, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorReorderForNonzeroDiagonal(__pyx_v_self->pc, __pyx_v_rval)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(34, 367, __pyx_L1_error)
 
-    /* "PETSc/PC.pyx":361
+    /* "PETSc/PC.pyx":365
  *             CHKERR( PCFactorSetMatOrderingType(self.pc, cval) )
  *         cdef PetscReal rval = 0
  *         if nzdiag is not None:             # <<<<<<<<<<<<<<
@@ -143391,7 +152208,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_92setFactorOrdering(struct PyPets
  */
   }
 
-  /* "PETSc/PC.pyx":364
+  /* "PETSc/PC.pyx":368
  *             rval = asReal(nzdiag)
  *             CHKERR( PCFactorReorderForNonzeroDiagonal(self.pc, rval) )
  *         cdef PetscBool bval = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -143400,7 +152217,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_92setFactorOrdering(struct PyPets
  */
   __pyx_v_bval = PETSC_FALSE;
 
-  /* "PETSc/PC.pyx":365
+  /* "PETSc/PC.pyx":369
  *             CHKERR( PCFactorReorderForNonzeroDiagonal(self.pc, rval) )
  *         cdef PetscBool bval = PETSC_FALSE
  *         if reuse is not None:             # <<<<<<<<<<<<<<
@@ -143411,14 +152228,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_92setFactorOrdering(struct PyPets
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/PC.pyx":366
+    /* "PETSc/PC.pyx":370
  *         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_ERR(34, 366, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_reuse); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(34, 370, __pyx_L1_error)
     if (__pyx_t_2) {
       __pyx_t_6 = PETSC_TRUE;
     } else {
@@ -143426,16 +152243,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_92setFactorOrdering(struct PyPets
     }
     __pyx_v_bval = __pyx_t_6;
 
-    /* "PETSc/PC.pyx":367
+    /* "PETSc/PC.pyx":371
  *         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_ERR(34, 367, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorSetReuseOrdering(__pyx_v_self->pc, __pyx_v_bval)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(34, 371, __pyx_L1_error)
 
-    /* "PETSc/PC.pyx":365
+    /* "PETSc/PC.pyx":369
  *             CHKERR( PCFactorReorderForNonzeroDiagonal(self.pc, rval) )
  *         cdef PetscBool bval = PETSC_FALSE
  *         if reuse is not None:             # <<<<<<<<<<<<<<
@@ -143444,7 +152261,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_92setFactorOrdering(struct PyPets
  */
   }
 
-  /* "PETSc/PC.pyx":355
+  /* "PETSc/PC.pyx":359
  *         return bytes2str(cval)
  * 
  *     def setFactorOrdering(self, ord_type=None, nzdiag=None, reuse=None):             # <<<<<<<<<<<<<<
@@ -143466,7 +152283,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_92setFactorOrdering(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":369
+/* "PETSc/PC.pyx":373
  *             CHKERR( PCFactorSetReuseOrdering(self.pc, bval) )
  * 
  *     def setFactorPivot(self, zeropivot=None, inblocks=None):             # <<<<<<<<<<<<<<
@@ -143493,7 +152310,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_95setFactorPivot(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -143504,6 +152323,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_95setFactorPivot(PyObject *__pyx_
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_zeropivot);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_inblocks);
@@ -143511,12 +152331,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_95setFactorPivot(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFactorPivot") < 0)) __PYX_ERR(34, 369, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFactorPivot") < 0)) __PYX_ERR(34, 373, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -143526,7 +152348,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_95setFactorPivot(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFactorPivot", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 369, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setFactorPivot", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 373, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setFactorPivot", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -143551,7 +152373,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_94setFactorPivot(struct PyPetscPC
   PetscBool __pyx_t_5;
   __Pyx_RefNannySetupContext("setFactorPivot", 0);
 
-  /* "PETSc/PC.pyx":370
+  /* "PETSc/PC.pyx":374
  * 
  *     def setFactorPivot(self, zeropivot=None, inblocks=None):
  *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
@@ -143560,7 +152382,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_94setFactorPivot(struct PyPetscPC
  */
   __pyx_v_rval = 0.0;
 
-  /* "PETSc/PC.pyx":371
+  /* "PETSc/PC.pyx":375
  *     def setFactorPivot(self, zeropivot=None, inblocks=None):
  *         cdef PetscReal rval = 0
  *         if zeropivot is not None:             # <<<<<<<<<<<<<<
@@ -143571,26 +152393,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_94setFactorPivot(struct PyPetscPC
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/PC.pyx":372
+    /* "PETSc/PC.pyx":376
  *         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_ERR(34, 372, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_zeropivot); if (unlikely(__pyx_t_3 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(34, 376, __pyx_L1_error)
     __pyx_v_rval = __pyx_t_3;
 
-    /* "PETSc/PC.pyx":373
+    /* "PETSc/PC.pyx":377
  *         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_ERR(34, 373, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorSetZeroPivot(__pyx_v_self->pc, __pyx_v_rval)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(34, 377, __pyx_L1_error)
 
-    /* "PETSc/PC.pyx":371
+    /* "PETSc/PC.pyx":375
  *     def setFactorPivot(self, zeropivot=None, inblocks=None):
  *         cdef PetscReal rval = 0
  *         if zeropivot is not None:             # <<<<<<<<<<<<<<
@@ -143599,7 +152421,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_94setFactorPivot(struct PyPetscPC
  */
   }
 
-  /* "PETSc/PC.pyx":374
+  /* "PETSc/PC.pyx":378
  *             rval = asReal(zeropivot)
  *             CHKERR( PCFactorSetZeroPivot(self.pc, rval) )
  *         cdef PetscBool bval = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -143608,7 +152430,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_94setFactorPivot(struct PyPetscPC
  */
   __pyx_v_bval = PETSC_FALSE;
 
-  /* "PETSc/PC.pyx":375
+  /* "PETSc/PC.pyx":379
  *             CHKERR( PCFactorSetZeroPivot(self.pc, rval) )
  *         cdef PetscBool bval = PETSC_FALSE
  *         if inblocks is not None:             # <<<<<<<<<<<<<<
@@ -143619,14 +152441,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_94setFactorPivot(struct PyPetscPC
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/PC.pyx":376
+    /* "PETSc/PC.pyx":380
  *         cdef PetscBool bval = PETSC_FALSE
  *         if inblocks is not None:
  *             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_ERR(34, 376, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_inblocks); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(34, 380, __pyx_L1_error)
     if (__pyx_t_1) {
       __pyx_t_5 = PETSC_TRUE;
     } else {
@@ -143634,16 +152456,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_94setFactorPivot(struct PyPetscPC
     }
     __pyx_v_bval = __pyx_t_5;
 
-    /* "PETSc/PC.pyx":377
+    /* "PETSc/PC.pyx":381
  *         if inblocks is not None:
  *             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_ERR(34, 377, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorSetPivotInBlocks(__pyx_v_self->pc, __pyx_v_bval)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(34, 381, __pyx_L1_error)
 
-    /* "PETSc/PC.pyx":375
+    /* "PETSc/PC.pyx":379
  *             CHKERR( PCFactorSetZeroPivot(self.pc, rval) )
  *         cdef PetscBool bval = PETSC_FALSE
  *         if inblocks is not None:             # <<<<<<<<<<<<<<
@@ -143652,7 +152474,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_94setFactorPivot(struct PyPetscPC
  */
   }
 
-  /* "PETSc/PC.pyx":369
+  /* "PETSc/PC.pyx":373
  *             CHKERR( PCFactorSetReuseOrdering(self.pc, bval) )
  * 
  *     def setFactorPivot(self, zeropivot=None, inblocks=None):             # <<<<<<<<<<<<<<
@@ -143672,7 +152494,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_94setFactorPivot(struct PyPetscPC
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":379
+/* "PETSc/PC.pyx":383
  *             CHKERR( PCFactorSetPivotInBlocks(self.pc, bval) )
  * 
  *     def setFactorShift(self, shift_type=None, amount=None):             # <<<<<<<<<<<<<<
@@ -143699,7 +152521,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_97setFactorShift(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -143710,6 +152534,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_97setFactorShift(PyObject *__pyx_
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_shift_type);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_amount);
@@ -143717,12 +152542,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_97setFactorShift(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFactorShift") < 0)) __PYX_ERR(34, 379, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFactorShift") < 0)) __PYX_ERR(34, 383, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -143732,7 +152559,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_97setFactorShift(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFactorShift", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 379, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setFactorShift", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 383, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setFactorShift", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -143757,7 +152584,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_96setFactorShift(struct PyPetscPC
   PetscReal __pyx_t_5;
   __Pyx_RefNannySetupContext("setFactorShift", 0);
 
-  /* "PETSc/PC.pyx":380
+  /* "PETSc/PC.pyx":384
  * 
  *     def setFactorShift(self, shift_type=None, amount=None):
  *         cdef PetscMatFactorShiftType cval = MAT_SHIFT_NONE             # <<<<<<<<<<<<<<
@@ -143766,7 +152593,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_96setFactorShift(struct PyPetscPC
  */
   __pyx_v_cval = MAT_SHIFT_NONE;
 
-  /* "PETSc/PC.pyx":381
+  /* "PETSc/PC.pyx":385
  *     def setFactorShift(self, shift_type=None, amount=None):
  *         cdef PetscMatFactorShiftType cval = MAT_SHIFT_NONE
  *         if shift_type is not None:             # <<<<<<<<<<<<<<
@@ -143777,26 +152604,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_96setFactorShift(struct PyPetscPC
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/PC.pyx":382
+    /* "PETSc/PC.pyx":386
  *         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)-1L))) __PYX_ERR(34, 382, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_matfactorshifttype(__pyx_v_shift_type); if (unlikely(__pyx_t_3 == ((MatFactorShiftType)((MatFactorShiftType)-1L)))) __PYX_ERR(34, 386, __pyx_L1_error)
     __pyx_v_cval = __pyx_t_3;
 
-    /* "PETSc/PC.pyx":383
+    /* "PETSc/PC.pyx":387
  *         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_ERR(34, 383, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorSetShiftType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(34, 387, __pyx_L1_error)
 
-    /* "PETSc/PC.pyx":381
+    /* "PETSc/PC.pyx":385
  *     def setFactorShift(self, shift_type=None, amount=None):
  *         cdef PetscMatFactorShiftType cval = MAT_SHIFT_NONE
  *         if shift_type is not None:             # <<<<<<<<<<<<<<
@@ -143805,7 +152632,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_96setFactorShift(struct PyPetscPC
  */
   }
 
-  /* "PETSc/PC.pyx":384
+  /* "PETSc/PC.pyx":388
  *             cval = matfactorshifttype(shift_type)
  *             CHKERR( PCFactorSetShiftType(self.pc, cval) )
  *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
@@ -143814,7 +152641,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_96setFactorShift(struct PyPetscPC
  */
   __pyx_v_rval = 0.0;
 
-  /* "PETSc/PC.pyx":385
+  /* "PETSc/PC.pyx":389
  *             CHKERR( PCFactorSetShiftType(self.pc, cval) )
  *         cdef PetscReal rval = 0
  *         if amount is not None:             # <<<<<<<<<<<<<<
@@ -143825,26 +152652,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_96setFactorShift(struct PyPetscPC
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/PC.pyx":386
+    /* "PETSc/PC.pyx":390
  *         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_ERR(34, 386, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_amount); if (unlikely(__pyx_t_5 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(34, 390, __pyx_L1_error)
     __pyx_v_rval = __pyx_t_5;
 
-    /* "PETSc/PC.pyx":387
+    /* "PETSc/PC.pyx":391
  *         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_ERR(34, 387, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorSetShiftAmount(__pyx_v_self->pc, __pyx_v_rval)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(34, 391, __pyx_L1_error)
 
-    /* "PETSc/PC.pyx":385
+    /* "PETSc/PC.pyx":389
  *             CHKERR( PCFactorSetShiftType(self.pc, cval) )
  *         cdef PetscReal rval = 0
  *         if amount is not None:             # <<<<<<<<<<<<<<
@@ -143853,7 +152680,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_96setFactorShift(struct PyPetscPC
  */
   }
 
-  /* "PETSc/PC.pyx":379
+  /* "PETSc/PC.pyx":383
  *             CHKERR( PCFactorSetPivotInBlocks(self.pc, bval) )
  * 
  *     def setFactorShift(self, shift_type=None, amount=None):             # <<<<<<<<<<<<<<
@@ -143873,7 +152700,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_96setFactorShift(struct PyPetscPC
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":389
+/* "PETSc/PC.pyx":393
  *             CHKERR( PCFactorSetShiftAmount(self.pc, rval) )
  * 
  *     def setFactorLevels(self, levels):             # <<<<<<<<<<<<<<
@@ -143897,6 +152724,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_99setFactorLevels(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -143907,7 +152735,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_99setFactorLevels(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_ERR(34, 389, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFactorLevels") < 0)) __PYX_ERR(34, 393, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -143918,7 +152746,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_99setFactorLevels(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFactorLevels", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 389, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setFactorLevels", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 393, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setFactorLevels", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -143939,26 +152767,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_98setFactorLevels(struct PyPetscP
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setFactorLevels", 0);
 
-  /* "PETSc/PC.pyx":390
+  /* "PETSc/PC.pyx":394
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(34, 390, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_levels); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(34, 394, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":391
+  /* "PETSc/PC.pyx":395
  *     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_ERR(34, 391, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFactorSetLevels(__pyx_v_self->pc, __pyx_v_ival)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(34, 395, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":389
+  /* "PETSc/PC.pyx":393
  *             CHKERR( PCFactorSetShiftAmount(self.pc, rval) )
  * 
  *     def setFactorLevels(self, levels):             # <<<<<<<<<<<<<<
@@ -143978,7 +152806,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_98setFactorLevels(struct PyPetscP
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":393
+/* "PETSc/PC.pyx":397
  *         CHKERR( PCFactorSetLevels(self.pc, ival) )
  * 
  *     def getFactorMatrix(self):             # <<<<<<<<<<<<<<
@@ -144011,28 +152839,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_100getFactorMatrix(struct PyPetsc
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getFactorMatrix", 0);
 
-  /* "PETSc/PC.pyx":394
+  /* "PETSc/PC.pyx":398
  * 
  *     def getFactorMatrix(self):
  *         cdef Mat mat = Mat()             # <<<<<<<<<<<<<<
  *         CHKERR( PCFactorGetMatrix(self.pc, &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(34, 394, __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, 398, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_mat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/PC.pyx":395
+  /* "PETSc/PC.pyx":399
  *     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_ERR(34, 395, __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 == ((int)-1))) __PYX_ERR(34, 399, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":396
+  /* "PETSc/PC.pyx":400
  *         cdef Mat mat = Mat()
  *         CHKERR( PCFactorGetMatrix(self.pc, &mat.mat) )
  *         PetscINCREF(mat.obj)             # <<<<<<<<<<<<<<
@@ -144041,7 +152869,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_100getFactorMatrix(struct PyPetsc
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_mat->__pyx_base.obj);
 
-  /* "PETSc/PC.pyx":397
+  /* "PETSc/PC.pyx":401
  *         CHKERR( PCFactorGetMatrix(self.pc, &mat.mat) )
  *         PetscINCREF(mat.obj)
  *         return mat             # <<<<<<<<<<<<<<
@@ -144053,7 +152881,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_100getFactorMatrix(struct PyPetsc
   __pyx_r = ((PyObject *)__pyx_v_mat);
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":393
+  /* "PETSc/PC.pyx":397
  *         CHKERR( PCFactorSetLevels(self.pc, ival) )
  * 
  *     def getFactorMatrix(self):             # <<<<<<<<<<<<<<
@@ -144073,7 +152901,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_100getFactorMatrix(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":401
+/* "PETSc/PC.pyx":405
  *    # --- FieldSplit ---
  * 
  *     def setFieldSplitType(self, ctype):             # <<<<<<<<<<<<<<
@@ -144097,6 +152925,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_103setFieldSplitType(PyObject *__
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -144107,7 +152936,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_103setFieldSplitType(PyObject *__
         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_ERR(34, 401, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFieldSplitType") < 0)) __PYX_ERR(34, 405, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -144118,7 +152947,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_103setFieldSplitType(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFieldSplitType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 401, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setFieldSplitType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 405, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setFieldSplitType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -144139,26 +152968,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_102setFieldSplitType(struct PyPet
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setFieldSplitType", 0);
 
-  /* "PETSc/PC.pyx":402
+  /* "PETSc/PC.pyx":406
  * 
  *     def setFieldSplitType(self, ctype):
  *         cdef PetscPCCompositeType cval = ctype             # <<<<<<<<<<<<<<
  *         CHKERR( PCFieldSplitSetType(self.pc, cval) )
  * 
  */
-  __pyx_t_1 = ((PCCompositeType)__Pyx_PyInt_As_PCCompositeType(__pyx_v_ctype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(34, 402, __pyx_L1_error)
+  __pyx_t_1 = ((PCCompositeType)__Pyx_PyInt_As_PCCompositeType(__pyx_v_ctype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(34, 406, __pyx_L1_error)
   __pyx_v_cval = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":403
+  /* "PETSc/PC.pyx":407
  *     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_ERR(34, 403, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFieldSplitSetType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(34, 407, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":401
+  /* "PETSc/PC.pyx":405
  *    # --- FieldSplit ---
  * 
  *     def setFieldSplitType(self, ctype):             # <<<<<<<<<<<<<<
@@ -144178,7 +153007,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_102setFieldSplitType(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":405
+/* "PETSc/PC.pyx":409
  *         CHKERR( PCFieldSplitSetType(self.pc, cval) )
  * 
  *     def setFieldSplitIS(self, *fields):             # <<<<<<<<<<<<<<
@@ -144221,7 +153050,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_104setFieldSplitIS(struct PyPetsc
   int __pyx_t_8;
   __Pyx_RefNannySetupContext("setFieldSplitIS", 0);
 
-  /* "PETSc/PC.pyx":406
+  /* "PETSc/PC.pyx":410
  * 
  *     def setFieldSplitIS(self, *fields):
  *         cdef object name = None             # <<<<<<<<<<<<<<
@@ -144231,7 +153060,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_104setFieldSplitIS(struct PyPetsc
   __Pyx_INCREF(Py_None);
   __pyx_v_name = Py_None;
 
-  /* "PETSc/PC.pyx":407
+  /* "PETSc/PC.pyx":411
  *     def setFieldSplitIS(self, *fields):
  *         cdef object name = None
  *         cdef IS field = None             # <<<<<<<<<<<<<<
@@ -144241,7 +153070,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_104setFieldSplitIS(struct PyPetsc
   __Pyx_INCREF(Py_None);
   __pyx_v_field = ((struct PyPetscISObject *)Py_None);
 
-  /* "PETSc/PC.pyx":408
+  /* "PETSc/PC.pyx":412
  *         cdef object name = None
  *         cdef IS field = None
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
@@ -144250,7 +153079,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_104setFieldSplitIS(struct PyPetsc
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/PC.pyx":409
+  /* "PETSc/PC.pyx":413
  *         cdef IS field = None
  *         cdef const_char *cname = NULL
  *         for name, field in fields:             # <<<<<<<<<<<<<<
@@ -144260,15 +153089,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_104setFieldSplitIS(struct PyPetsc
   __pyx_t_1 = __pyx_v_fields; __Pyx_INCREF(__pyx_t_1); __pyx_t_2 = 0;
   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_ERR(34, 409, __pyx_L1_error)
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    __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, 413, __pyx_L1_error)
     #else
-    __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_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_2); __pyx_t_2++; if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 413, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     #endif
     if ((likely(PyTuple_CheckExact(__pyx_t_3))) || (PyList_CheckExact(__pyx_t_3))) {
       PyObject* sequence = __pyx_t_3;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -144276,9 +153105,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_104setFieldSplitIS(struct PyPetsc
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        __PYX_ERR(34, 409, __pyx_L1_error)
+        __PYX_ERR(34, 413, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
@@ -144289,15 +153118,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_104setFieldSplitIS(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_ERR(34, 409, __pyx_L1_error)
+      __pyx_t_4 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_4)) __PYX_ERR(34, 413, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
-      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(34, 409, __pyx_L1_error)
+      __pyx_t_5 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(34, 413, __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_ERR(34, 409, __pyx_L1_error)
+      __pyx_t_6 = PyObject_GetIter(__pyx_t_3); if (unlikely(!__pyx_t_6)) __PYX_ERR(34, 413, __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;
@@ -144305,7 +153134,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_104setFieldSplitIS(struct PyPetsc
       __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_ERR(34, 409, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_7(__pyx_t_6), 2) < 0) __PYX_ERR(34, 413, __pyx_L1_error)
       __pyx_t_7 = NULL;
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       goto __pyx_L6_unpacking_done;
@@ -144313,37 +153142,37 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_104setFieldSplitIS(struct PyPetsc
       __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
       __pyx_t_7 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      __PYX_ERR(34, 409, __pyx_L1_error)
+      __PYX_ERR(34, 413, __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_ERR(34, 409, __pyx_L1_error)
+    if (!(likely(((__pyx_t_5) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_8petsc4py_5PETSc_IS))))) __PYX_ERR(34, 413, __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":410
+    /* "PETSc/PC.pyx":414
  *         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_ERR(34, 410, __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, 414, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "PETSc/PC.pyx":411
+    /* "PETSc/PC.pyx":415
  *         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_ERR(34, 411, __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 == ((int)-1))) __PYX_ERR(34, 415, __pyx_L1_error)
 
-    /* "PETSc/PC.pyx":409
+    /* "PETSc/PC.pyx":413
  *         cdef IS field = None
  *         cdef const_char *cname = NULL
  *         for name, field in fields:             # <<<<<<<<<<<<<<
@@ -144353,7 +153182,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_104setFieldSplitIS(struct PyPetsc
   }
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/PC.pyx":405
+  /* "PETSc/PC.pyx":409
  *         CHKERR( PCFieldSplitSetType(self.pc, cval) )
  * 
  *     def setFieldSplitIS(self, *fields):             # <<<<<<<<<<<<<<
@@ -144380,7 +153209,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_104setFieldSplitIS(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":413
+/* "PETSc/PC.pyx":417
  *             CHKERR( PCFieldSplitSetIS(self.pc, cname, field.iset) )
  * 
  *     def setFieldSplitFields(self, bsize, *fields):             # <<<<<<<<<<<<<<
@@ -144416,6 +153245,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_107setFieldSplitFields(PyObject *
       switch (pos_args) {
         default:
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
       }
       kw_args = PyDict_Size(__pyx_kwds);
@@ -144426,7 +153256,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_107setFieldSplitFields(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_ERR(34, 413, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, used_pos_args, "setFieldSplitFields") < 0)) __PYX_ERR(34, 417, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) < 1) {
       goto __pyx_L5_argtuple_error;
@@ -144437,7 +153267,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_107setFieldSplitFields(PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFieldSplitFields", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 413, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setFieldSplitFields", 0, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 417, __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);
@@ -144472,26 +153302,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_106setFieldSplitFields(struct PyP
   PyObject *(*__pyx_t_9)(PyObject *);
   __Pyx_RefNannySetupContext("setFieldSplitFields", 0);
 
-  /* "PETSc/PC.pyx":414
+  /* "PETSc/PC.pyx":418
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(34, 414, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_bsize); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(34, 418, __pyx_L1_error)
   __pyx_v_bs = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":415
+  /* "PETSc/PC.pyx":419
  *     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_ERR(34, 415, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFieldSplitSetBlockSize(__pyx_v_self->pc, __pyx_v_bs)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(34, 419, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":416
+  /* "PETSc/PC.pyx":420
  *         cdef PetscInt bs = asInt(bsize)
  *         CHKERR( PCFieldSplitSetBlockSize(self.pc, bs) )
  *         cdef object name = None             # <<<<<<<<<<<<<<
@@ -144501,7 +153331,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_106setFieldSplitFields(struct PyP
   __Pyx_INCREF(Py_None);
   __pyx_v_name = Py_None;
 
-  /* "PETSc/PC.pyx":417
+  /* "PETSc/PC.pyx":421
  *         CHKERR( PCFieldSplitSetBlockSize(self.pc, bs) )
  *         cdef object name = None
  *         cdef object field = None             # <<<<<<<<<<<<<<
@@ -144511,7 +153341,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_106setFieldSplitFields(struct PyP
   __Pyx_INCREF(Py_None);
   __pyx_v_field = Py_None;
 
-  /* "PETSc/PC.pyx":418
+  /* "PETSc/PC.pyx":422
  *         cdef object name = None
  *         cdef object field = None
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
@@ -144520,7 +153350,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_106setFieldSplitFields(struct PyP
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/PC.pyx":419
+  /* "PETSc/PC.pyx":423
  *         cdef object field = None
  *         cdef const_char *cname = NULL
  *         cdef PetscInt nfields = 0, *ifields = NULL             # <<<<<<<<<<<<<<
@@ -144530,7 +153360,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_106setFieldSplitFields(struct PyP
   __pyx_v_nfields = 0;
   __pyx_v_ifields = NULL;
 
-  /* "PETSc/PC.pyx":420
+  /* "PETSc/PC.pyx":424
  *         cdef const_char *cname = NULL
  *         cdef PetscInt nfields = 0, *ifields = NULL
  *         for name, field in fields:             # <<<<<<<<<<<<<<
@@ -144540,15 +153370,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_106setFieldSplitFields(struct PyP
   __pyx_t_3 = __pyx_v_fields; __Pyx_INCREF(__pyx_t_3); __pyx_t_4 = 0;
   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_ERR(34, 420, __pyx_L1_error)
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    __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, 424, __pyx_L1_error)
     #else
-    __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_t_5 = PySequence_ITEM(__pyx_t_3, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_5)) __PYX_ERR(34, 424, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     #endif
     if ((likely(PyTuple_CheckExact(__pyx_t_5))) || (PyList_CheckExact(__pyx_t_5))) {
       PyObject* sequence = __pyx_t_5;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -144556,9 +153386,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_106setFieldSplitFields(struct PyP
       if (unlikely(size != 2)) {
         if (size > 2) __Pyx_RaiseTooManyValuesError(2);
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
-        __PYX_ERR(34, 420, __pyx_L1_error)
+        __PYX_ERR(34, 424, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_6 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_7 = PyTuple_GET_ITEM(sequence, 1); 
@@ -144569,15 +153399,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_106setFieldSplitFields(struct PyP
       __Pyx_INCREF(__pyx_t_6);
       __Pyx_INCREF(__pyx_t_7);
       #else
-      __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(34, 420, __pyx_L1_error)
+      __pyx_t_6 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_6)) __PYX_ERR(34, 424, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
-      __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 420, __pyx_L1_error)
+      __pyx_t_7 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 424, __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_ERR(34, 420, __pyx_L1_error)
+      __pyx_t_8 = PyObject_GetIter(__pyx_t_5); if (unlikely(!__pyx_t_8)) __PYX_ERR(34, 424, __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;
@@ -144585,7 +153415,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_106setFieldSplitFields(struct PyP
       __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_ERR(34, 420, __pyx_L1_error)
+      if (__Pyx_IternextUnpackEndCheck(__pyx_t_9(__pyx_t_8), 2) < 0) __PYX_ERR(34, 424, __pyx_L1_error)
       __pyx_t_9 = NULL;
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       goto __pyx_L6_unpacking_done;
@@ -144593,7 +153423,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_106setFieldSplitFields(struct PyP
       __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
       __pyx_t_9 = NULL;
       if (__Pyx_IterFinish() == 0) __Pyx_RaiseNeedMoreValuesError(index);
-      __PYX_ERR(34, 420, __pyx_L1_error)
+      __PYX_ERR(34, 424, __pyx_L1_error)
       __pyx_L6_unpacking_done:;
     }
     __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_6);
@@ -144601,40 +153431,40 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_106setFieldSplitFields(struct PyP
     __Pyx_DECREF_SET(__pyx_v_field, __pyx_t_7);
     __pyx_t_7 = 0;
 
-    /* "PETSc/PC.pyx":421
+    /* "PETSc/PC.pyx":425
  *         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_ERR(34, 421, __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, 425, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_5);
     __pyx_t_5 = 0;
 
-    /* "PETSc/PC.pyx":422
+    /* "PETSc/PC.pyx":426
  *         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_ERR(34, 422, __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, 426, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF_SET(__pyx_v_field, __pyx_t_5);
     __pyx_t_5 = 0;
 
-    /* "PETSc/PC.pyx":423
+    /* "PETSc/PC.pyx":427
  *             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_ERR(34, 423, __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 == ((int)-1))) __PYX_ERR(34, 427, __pyx_L1_error)
 
-    /* "PETSc/PC.pyx":420
+    /* "PETSc/PC.pyx":424
  *         cdef const_char *cname = NULL
  *         cdef PetscInt nfields = 0, *ifields = NULL
  *         for name, field in fields:             # <<<<<<<<<<<<<<
@@ -144644,7 +153474,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_106setFieldSplitFields(struct PyP
   }
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/PC.pyx":413
+  /* "PETSc/PC.pyx":417
  *             CHKERR( PCFieldSplitSetIS(self.pc, cname, field.iset) )
  * 
  *     def setFieldSplitFields(self, bsize, *fields):             # <<<<<<<<<<<<<<
@@ -144671,7 +153501,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_106setFieldSplitFields(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":426
+/* "PETSc/PC.pyx":430
  *                                           nfields, ifields, ifields) )
  * 
  *     def getFieldSplitSubKSP(self):             # <<<<<<<<<<<<<<
@@ -144718,7 +153548,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_108getFieldSplitSubKSP(struct PyP
   int __pyx_t_13;
   __Pyx_RefNannySetupContext("getFieldSplitSubKSP", 0);
 
-  /* "PETSc/PC.pyx":427
+  /* "PETSc/PC.pyx":431
  * 
  *     def getFieldSplitSubKSP(self):
  *         cdef PetscInt i = 0, n = 0             # <<<<<<<<<<<<<<
@@ -144728,7 +153558,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_108getFieldSplitSubKSP(struct PyP
   __pyx_v_i = 0;
   __pyx_v_n = 0;
 
-  /* "PETSc/PC.pyx":428
+  /* "PETSc/PC.pyx":432
  *     def getFieldSplitSubKSP(self):
  *         cdef PetscInt i = 0, n = 0
  *         cdef PetscKSP *p = NULL             # <<<<<<<<<<<<<<
@@ -144737,7 +153567,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_108getFieldSplitSubKSP(struct PyP
  */
   __pyx_v_p = NULL;
 
-  /* "PETSc/PC.pyx":429
+  /* "PETSc/PC.pyx":433
  *         cdef PetscInt i = 0, n = 0
  *         cdef PetscKSP *p = NULL
  *         cdef object subksp = None             # <<<<<<<<<<<<<<
@@ -144747,7 +153577,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_108getFieldSplitSubKSP(struct PyP
   __Pyx_INCREF(Py_None);
   __pyx_v_subksp = Py_None;
 
-  /* "PETSc/PC.pyx":430
+  /* "PETSc/PC.pyx":434
  *         cdef PetscKSP *p = NULL
  *         cdef object subksp = None
  *         try:             # <<<<<<<<<<<<<<
@@ -144756,36 +153586,36 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_108getFieldSplitSubKSP(struct PyP
  */
   /*try:*/ {
 
-    /* "PETSc/PC.pyx":431
+    /* "PETSc/PC.pyx":435
  *         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_ERR(34, 431, __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 == ((int)-1))) __PYX_ERR(34, 435, __pyx_L4_error)
 
-    /* "PETSc/PC.pyx":432
+    /* "PETSc/PC.pyx":436
  *         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_ERR(34, 432, __pyx_L4_error)
+    __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(34, 436, __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_ERR(34, 432, __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, 436, __pyx_L4_error)
       __Pyx_GOTREF(__pyx_t_4);
-      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_4))) __PYX_ERR(34, 432, __pyx_L4_error)
+      if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_4))) __PYX_ERR(34, 436, __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":434
+  /* "PETSc/PC.pyx":438
  *             subksp = [ref_KSP(p[i]) for i from 0 <= i <n]
  *         finally:
  *             CHKERR( PetscFree(p) )             # <<<<<<<<<<<<<<
@@ -144794,7 +153624,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_108getFieldSplitSubKSP(struct PyP
  */
   /*finally:*/ {
     /*normal exit:*/{
-      __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)
+      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscFree(__pyx_v_p)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(34, 438, __pyx_L1_error)
       goto __pyx_L5;
     }
     /*exception exit:*/{
@@ -144814,9 +153644,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_108getFieldSplitSubKSP(struct PyP
       __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_ERR(34, 434, __pyx_L9_error)
+        __pyx_t_13 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscFree(__pyx_v_p)); if (unlikely(__pyx_t_13 == ((int)-1))) __PYX_ERR(34, 438, __pyx_L9_error)
       }
-      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_10);
         __Pyx_XGIVEREF(__pyx_t_11);
@@ -144831,7 +153660,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_108getFieldSplitSubKSP(struct PyP
       __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);
@@ -144847,7 +153675,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_108getFieldSplitSubKSP(struct PyP
     __pyx_L5:;
   }
 
-  /* "PETSc/PC.pyx":435
+  /* "PETSc/PC.pyx":439
  *         finally:
  *             CHKERR( PetscFree(p) )
  *         return subksp             # <<<<<<<<<<<<<<
@@ -144859,7 +153687,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_108getFieldSplitSubKSP(struct PyP
   __pyx_r = __pyx_v_subksp;
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":426
+  /* "PETSc/PC.pyx":430
  *                                           nfields, ifields, ifields) )
  * 
  *     def getFieldSplitSubKSP(self):             # <<<<<<<<<<<<<<
@@ -144880,7 +153708,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_108getFieldSplitSubKSP(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":437
+/* "PETSc/PC.pyx":441
  *         return subksp
  * 
  *     def setFieldSplitSchurFactType(self, ctype):             # <<<<<<<<<<<<<<
@@ -144904,6 +153732,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_111setFieldSplitSchurFactType(PyO
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -144914,7 +153743,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_111setFieldSplitSchurFactType(PyO
         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_ERR(34, 437, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFieldSplitSchurFactType") < 0)) __PYX_ERR(34, 441, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -144925,7 +153754,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_111setFieldSplitSchurFactType(PyO
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFieldSplitSchurFactType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 437, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setFieldSplitSchurFactType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 441, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setFieldSplitSchurFactType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -144946,26 +153775,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_110setFieldSplitSchurFactType(str
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setFieldSplitSchurFactType", 0);
 
-  /* "PETSc/PC.pyx":438
+  /* "PETSc/PC.pyx":442
  * 
  *     def setFieldSplitSchurFactType(self, ctype):
  *         cdef PetscPCFieldSplitSchurFactType cval = ctype             # <<<<<<<<<<<<<<
  *         CHKERR( PCFieldSplitSetSchurFactType(self.pc, cval) )
  * 
  */
-  __pyx_t_1 = ((PCFieldSplitSchurFactType)__Pyx_PyInt_As_PCFieldSplitSchurFactType(__pyx_v_ctype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(34, 438, __pyx_L1_error)
+  __pyx_t_1 = ((PCFieldSplitSchurFactType)__Pyx_PyInt_As_PCFieldSplitSchurFactType(__pyx_v_ctype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(34, 442, __pyx_L1_error)
   __pyx_v_cval = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":439
+  /* "PETSc/PC.pyx":443
  *     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_ERR(34, 439, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCFieldSplitSetSchurFactType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(34, 443, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":437
+  /* "PETSc/PC.pyx":441
  *         return subksp
  * 
  *     def setFieldSplitSchurFactType(self, ctype):             # <<<<<<<<<<<<<<
@@ -144985,7 +153814,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_110setFieldSplitSchurFactType(str
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":441
+/* "PETSc/PC.pyx":445
  *         CHKERR( PCFieldSplitSetSchurFactType(self.pc, cval) )
  * 
  *     def setFieldSplitSchurPreType(self, ptype, Mat pre=None):             # <<<<<<<<<<<<<<
@@ -145011,7 +153840,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_113setFieldSplitSchurPreType(PyOb
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -145020,6 +153851,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_113setFieldSplitSchurPreType(PyOb
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ptype)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_pre);
@@ -145027,11 +153859,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_113setFieldSplitSchurPreType(PyOb
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFieldSplitSchurPreType") < 0)) __PYX_ERR(34, 441, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setFieldSplitSchurPreType") < 0)) __PYX_ERR(34, 445, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -145042,13 +153875,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_113setFieldSplitSchurPreType(PyOb
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setFieldSplitSchurPreType", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 441, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setFieldSplitSchurPreType", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 445, __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_ERR(34, 441, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_pre), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "pre", 0))) __PYX_ERR(34, 445, __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 */
@@ -145072,17 +153905,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_112setFieldSplitSchurPreType(stru
   int __pyx_t_5;
   __Pyx_RefNannySetupContext("setFieldSplitSchurPreType", 0);
 
-  /* "PETSc/PC.pyx":442
+  /* "PETSc/PC.pyx":446
  * 
  *     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)__Pyx_PyInt_As_PCFieldSplitSchurPreType(__pyx_v_ptype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(34, 442, __pyx_L1_error)
+  __pyx_t_1 = ((PCFieldSplitSchurPreType)__Pyx_PyInt_As_PCFieldSplitSchurPreType(__pyx_v_ptype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(34, 446, __pyx_L1_error)
   __pyx_v_pval = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":443
+  /* "PETSc/PC.pyx":447
  *     def setFieldSplitSchurPreType(self, ptype, Mat pre=None):
  *         cdef PetscPCFieldSplitSchurPreType pval = ptype
  *         cdef PetscMat pmat = NULL             # <<<<<<<<<<<<<<
@@ -145091,7 +153924,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_112setFieldSplitSchurPreType(stru
  */
   __pyx_v_pmat = NULL;
 
-  /* "PETSc/PC.pyx":444
+  /* "PETSc/PC.pyx":448
  *         cdef PetscPCFieldSplitSchurPreType pval = ptype
  *         cdef PetscMat pmat = NULL
  *         if pre is not None: pmat = pre.mat             # <<<<<<<<<<<<<<
@@ -145105,16 +153938,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_112setFieldSplitSchurPreType(stru
     __pyx_v_pmat = __pyx_t_4;
   }
 
-  /* "PETSc/PC.pyx":445
+  /* "PETSc/PC.pyx":449
  *         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_ERR(34, 445, __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 == ((int)-1))) __PYX_ERR(34, 449, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":441
+  /* "PETSc/PC.pyx":445
  *         CHKERR( PCFieldSplitSetSchurFactType(self.pc, cval) )
  * 
  *     def setFieldSplitSchurPreType(self, ptype, Mat pre=None):             # <<<<<<<<<<<<<<
@@ -145134,7 +153967,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_112setFieldSplitSchurPreType(stru
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":447
+/* "PETSc/PC.pyx":451
  *         CHKERR( PCFieldSplitSetSchurPre(self.pc, pval, pmat) )
  * 
  *     def setReusePreconditioner(self, flag):             # <<<<<<<<<<<<<<
@@ -145158,6 +153991,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_115setReusePreconditioner(PyObjec
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -145168,7 +154002,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_115setReusePreconditioner(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_ERR(34, 447, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setReusePreconditioner") < 0)) __PYX_ERR(34, 451, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -145179,7 +154013,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_115setReusePreconditioner(PyObjec
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setReusePreconditioner", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 447, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setReusePreconditioner", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 451, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setReusePreconditioner", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -145200,7 +154034,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_114setReusePreconditioner(struct
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setReusePreconditioner", 0);
 
-  /* "PETSc/PC.pyx":448
+  /* "PETSc/PC.pyx":452
  * 
  *     def setReusePreconditioner(self, flag):
  *         cdef PetscBool cflag = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -145209,17 +154043,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_114setReusePreconditioner(struct
  */
   __pyx_v_cflag = PETSC_FALSE;
 
-  /* "PETSc/PC.pyx":449
+  /* "PETSc/PC.pyx":453
  *     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_ERR(34, 449, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_flag); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(34, 453, __pyx_L1_error)
   if (__pyx_t_1) {
 
-    /* "PETSc/PC.pyx":450
+    /* "PETSc/PC.pyx":454
  *         cdef PetscBool cflag = PETSC_FALSE
  *         if flag:
  *             cflag = PETSC_TRUE             # <<<<<<<<<<<<<<
@@ -145228,7 +154062,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_114setReusePreconditioner(struct
  */
     __pyx_v_cflag = PETSC_TRUE;
 
-    /* "PETSc/PC.pyx":449
+    /* "PETSc/PC.pyx":453
  *     def setReusePreconditioner(self, flag):
  *         cdef PetscBool cflag = PETSC_FALSE
  *         if flag:             # <<<<<<<<<<<<<<
@@ -145237,16 +154071,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_114setReusePreconditioner(struct
  */
   }
 
-  /* "PETSc/PC.pyx":451
+  /* "PETSc/PC.pyx":455
  *         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_ERR(34, 451, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCSetReusePreconditioner(__pyx_v_self->pc, __pyx_v_cflag)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(34, 455, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":447
+  /* "PETSc/PC.pyx":451
  *         CHKERR( PCFieldSplitSetSchurPre(self.pc, pval, pmat) )
  * 
  *     def setReusePreconditioner(self, flag):             # <<<<<<<<<<<<<<
@@ -145266,7 +154100,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_114setReusePreconditioner(struct
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":455
+/* "PETSc/PC.pyx":459
  *     # --- COMPOSITE ---
  * 
  *     def setCompositeType(self, ctype):             # <<<<<<<<<<<<<<
@@ -145290,6 +154124,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_117setCompositeType(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -145300,7 +154135,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_117setCompositeType(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_ERR(34, 455, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCompositeType") < 0)) __PYX_ERR(34, 459, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -145311,7 +154146,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_117setCompositeType(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setCompositeType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 455, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setCompositeType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 459, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setCompositeType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -145332,26 +154167,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_116setCompositeType(struct PyPets
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setCompositeType", 0);
 
-  /* "PETSc/PC.pyx":456
+  /* "PETSc/PC.pyx":460
  * 
  *     def setCompositeType(self, ctype):
  *         cdef PetscPCCompositeType cval = ctype             # <<<<<<<<<<<<<<
  *         CHKERR( PCCompositeSetType(self.pc, cval) )
  * 
  */
-  __pyx_t_1 = ((PCCompositeType)__Pyx_PyInt_As_PCCompositeType(__pyx_v_ctype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(34, 456, __pyx_L1_error)
+  __pyx_t_1 = ((PCCompositeType)__Pyx_PyInt_As_PCCompositeType(__pyx_v_ctype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(34, 460, __pyx_L1_error)
   __pyx_v_cval = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":457
+  /* "PETSc/PC.pyx":461
  *     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_ERR(34, 457, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCCompositeSetType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(34, 461, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":455
+  /* "PETSc/PC.pyx":459
  *     # --- COMPOSITE ---
  * 
  *     def setCompositeType(self, ctype):             # <<<<<<<<<<<<<<
@@ -145371,7 +154206,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_116setCompositeType(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":459
+/* "PETSc/PC.pyx":463
  *         CHKERR( PCCompositeSetType(self.pc, cval) )
  * 
  *     def getCompositePC(self, n):             # <<<<<<<<<<<<<<
@@ -145395,6 +154230,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_119getCompositePC(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -145405,7 +154241,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_119getCompositePC(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_ERR(34, 459, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getCompositePC") < 0)) __PYX_ERR(34, 463, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -145416,7 +154252,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_119getCompositePC(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getCompositePC", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 459, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getCompositePC", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 463, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.getCompositePC", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -145439,42 +154275,42 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_118getCompositePC(struct PyPetscP
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("getCompositePC", 0);
 
-  /* "PETSc/PC.pyx":460
+  /* "PETSc/PC.pyx":464
  * 
  *     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 *)__pyx_ptype_8petsc4py_5PETSc_PC), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 460, __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, 464, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_pc = ((struct PyPetscPCObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/PC.pyx":461
+  /* "PETSc/PC.pyx":465
  *     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 == -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_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_n); if (unlikely(__pyx_t_2 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(34, 465, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_PetscInt(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 465, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_cn = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/PC.pyx":462
+  /* "PETSc/PC.pyx":466
  *         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_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)
+  __pyx_t_2 = __Pyx_PyInt_As_PetscInt(__pyx_v_cn); if (unlikely((__pyx_t_2 == ((PetscInt)-1)) && PyErr_Occurred())) __PYX_ERR(34, 466, __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 == ((int)-1))) __PYX_ERR(34, 466, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":463
+  /* "PETSc/PC.pyx":467
  *         cdef cn = asInt(n)
  *         CHKERR( PCCompositeGetPC(self.pc, cn, &pc.pc) )
  *         PetscINCREF(pc.obj)             # <<<<<<<<<<<<<<
@@ -145483,7 +154319,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_118getCompositePC(struct PyPetscP
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_pc->__pyx_base.obj);
 
-  /* "PETSc/PC.pyx":464
+  /* "PETSc/PC.pyx":468
  *         CHKERR( PCCompositeGetPC(self.pc, cn, &pc.pc) )
  *         PetscINCREF(pc.obj)
  *         return pc             # <<<<<<<<<<<<<<
@@ -145495,7 +154331,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_118getCompositePC(struct PyPetscP
   __pyx_r = ((PyObject *)__pyx_v_pc);
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":459
+  /* "PETSc/PC.pyx":463
  *         CHKERR( PCCompositeSetType(self.pc, cval) )
  * 
  *     def getCompositePC(self, n):             # <<<<<<<<<<<<<<
@@ -145516,7 +154352,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_118getCompositePC(struct PyPetscP
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":466
+/* "PETSc/PC.pyx":470
  *         return pc
  * 
  *     def addCompositePC(self, pc_type):             # <<<<<<<<<<<<<<
@@ -145540,6 +154376,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_121addCompositePC(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -145550,7 +154387,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_121addCompositePC(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_ERR(34, 466, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "addCompositePC") < 0)) __PYX_ERR(34, 470, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -145561,7 +154398,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_121addCompositePC(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("addCompositePC", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 466, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("addCompositePC", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 470, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.addCompositePC", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -145583,7 +154420,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_120addCompositePC(struct PyPetscP
   __Pyx_RefNannySetupContext("addCompositePC", 0);
   __Pyx_INCREF(__pyx_v_pc_type);
 
-  /* "PETSc/PC.pyx":467
+  /* "PETSc/PC.pyx":471
  * 
  *     def addCompositePC(self, pc_type):
  *         cdef PetscPCType cval = NULL             # <<<<<<<<<<<<<<
@@ -145592,28 +154429,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_120addCompositePC(struct PyPetscP
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/PC.pyx":468
+  /* "PETSc/PC.pyx":472
  *     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_ERR(34, 468, __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, 472, __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":469
+  /* "PETSc/PC.pyx":473
  *         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_ERR(34, 469, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCCompositeAddPC(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(34, 473, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":466
+  /* "PETSc/PC.pyx":470
  *         return pc
  * 
  *     def addCompositePC(self, pc_type):             # <<<<<<<<<<<<<<
@@ -145635,7 +154472,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_120addCompositePC(struct PyPetscP
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":473
+/* "PETSc/PC.pyx":477
  *     # --- KSP ---
  * 
  *     def getKSP(self):             # <<<<<<<<<<<<<<
@@ -145668,28 +154505,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_122getKSP(struct PyPetscPCObject
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getKSP", 0);
 
-  /* "PETSc/PC.pyx":474
+  /* "PETSc/PC.pyx":478
  * 
  *     def getKSP(self):
  *         cdef KSP ksp = KSP()             # <<<<<<<<<<<<<<
  *         CHKERR( PCKSPGetKSP(self.pc, &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(34, 474, __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, 478, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_ksp = ((struct PyPetscKSPObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/PC.pyx":475
+  /* "PETSc/PC.pyx":479
  *     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_ERR(34, 475, __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 == ((int)-1))) __PYX_ERR(34, 479, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":476
+  /* "PETSc/PC.pyx":480
  *         cdef KSP ksp = KSP()
  *         CHKERR( PCKSPGetKSP(self.pc, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)             # <<<<<<<<<<<<<<
@@ -145698,7 +154535,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_122getKSP(struct PyPetscPCObject
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_ksp->__pyx_base.obj);
 
-  /* "PETSc/PC.pyx":477
+  /* "PETSc/PC.pyx":481
  *         CHKERR( PCKSPGetKSP(self.pc, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)
  *         return ksp             # <<<<<<<<<<<<<<
@@ -145710,7 +154547,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_122getKSP(struct PyPetscPCObject
   __pyx_r = ((PyObject *)__pyx_v_ksp);
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":473
+  /* "PETSc/PC.pyx":477
  *     # --- KSP ---
  * 
  *     def getKSP(self):             # <<<<<<<<<<<<<<
@@ -145730,7 +154567,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_122getKSP(struct PyPetscPCObject
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":481
+/* "PETSc/PC.pyx":485
  *     # --- MG ---
  * 
  *     def getMGType(self):             # <<<<<<<<<<<<<<
@@ -145763,7 +154600,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_124getMGType(struct PyPetscPCObje
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getMGType", 0);
 
-  /* "PETSc/PC.pyx":482
+  /* "PETSc/PC.pyx":486
  * 
  *     def getMGType(self):
  *         cdef PetscPCMGType cval = PC_MG_ADDITIVE             # <<<<<<<<<<<<<<
@@ -145772,16 +154609,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_124getMGType(struct PyPetscPCObje
  */
   __pyx_v_cval = PC_MG_ADDITIVE;
 
-  /* "PETSc/PC.pyx":483
+  /* "PETSc/PC.pyx":487
  *     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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGGetType(__pyx_v_self->pc, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(34, 487, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":484
+  /* "PETSc/PC.pyx":488
  *         cdef PetscPCMGType cval = PC_MG_ADDITIVE
  *         CHKERR( PCMGGetType(self.pc, &cval) )
  *         return cval             # <<<<<<<<<<<<<<
@@ -145789,13 +154626,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_124getMGType(struct PyPetscPCObje
  *     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_t_2 = __Pyx_PyInt_From_PCMGType(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(34, 488, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":481
+  /* "PETSc/PC.pyx":485
  *     # --- MG ---
  * 
  *     def getMGType(self):             # <<<<<<<<<<<<<<
@@ -145814,7 +154651,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_124getMGType(struct PyPetscPCObje
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":486
+/* "PETSc/PC.pyx":490
  *         return cval
  * 
  *     def setMGType(self, mgtype):             # <<<<<<<<<<<<<<
@@ -145838,6 +154675,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_127setMGType(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -145848,7 +154686,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_127setMGType(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, "setMGType") < 0)) __PYX_ERR(34, 486, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMGType") < 0)) __PYX_ERR(34, 490, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -145859,7 +154697,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_127setMGType(PyObject *__pyx_v_se
   }
   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_RaiseArgtupleInvalid("setMGType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 490, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.setMGType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -145880,26 +154718,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_126setMGType(struct PyPetscPCObje
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setMGType", 0);
 
-  /* "PETSc/PC.pyx":487
+  /* "PETSc/PC.pyx":491
  * 
  *     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_t_1 = ((PCMGType)__Pyx_PyInt_As_PCMGType(__pyx_v_mgtype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(34, 491, __pyx_L1_error)
   __pyx_v_cval = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":488
+  /* "PETSc/PC.pyx":492
  *     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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGSetType(__pyx_v_self->pc, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(34, 492, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":486
+  /* "PETSc/PC.pyx":490
  *         return cval
  * 
  *     def setMGType(self, mgtype):             # <<<<<<<<<<<<<<
@@ -145919,7 +154757,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_126setMGType(struct PyPetscPCObje
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":490
+/* "PETSc/PC.pyx":494
  *         CHKERR( PCMGSetType(self.pc, cval) )
  * 
  *     def getMGLevels(self):             # <<<<<<<<<<<<<<
@@ -145952,7 +154790,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_128getMGLevels(struct PyPetscPCOb
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getMGLevels", 0);
 
-  /* "PETSc/PC.pyx":491
+  /* "PETSc/PC.pyx":495
  * 
  *     def getMGLevels(self):
  *         cdef PetscInt levels = 0             # <<<<<<<<<<<<<<
@@ -145961,16 +154799,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_128getMGLevels(struct PyPetscPCOb
  */
   __pyx_v_levels = 0;
 
-  /* "PETSc/PC.pyx":492
+  /* "PETSc/PC.pyx":496
  *     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_ERR(34, 492, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGGetLevels(__pyx_v_self->pc, (&__pyx_v_levels))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(34, 496, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":493
+  /* "PETSc/PC.pyx":497
  *         cdef PetscInt levels = 0
  *         CHKERR( PCMGGetLevels(self.pc, &levels) )
  *         return toInt(levels)             # <<<<<<<<<<<<<<
@@ -145978,13 +154816,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_128getMGLevels(struct PyPetscPCOb
  *     def getMGCoarseSolve(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_levels); if (unlikely(!__pyx_t_2)) __PYX_ERR(34, 493, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_levels); if (unlikely(!__pyx_t_2)) __PYX_ERR(34, 497, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":490
+  /* "PETSc/PC.pyx":494
  *         CHKERR( PCMGSetType(self.pc, cval) )
  * 
  *     def getMGLevels(self):             # <<<<<<<<<<<<<<
@@ -146003,7 +154841,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_128getMGLevels(struct PyPetscPCOb
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":495
+/* "PETSc/PC.pyx":499
  *         return toInt(levels)
  * 
  *     def getMGCoarseSolve(self):             # <<<<<<<<<<<<<<
@@ -146036,28 +154874,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_130getMGCoarseSolve(struct PyPets
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getMGCoarseSolve", 0);
 
-  /* "PETSc/PC.pyx":496
+  /* "PETSc/PC.pyx":500
  * 
  *     def getMGCoarseSolve(self):
  *         cdef KSP ksp = KSP()             # <<<<<<<<<<<<<<
  *         CHKERR( PCMGGetCoarseSolve(self.pc, &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(34, 496, __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, 500, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_ksp = ((struct PyPetscKSPObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/PC.pyx":497
+  /* "PETSc/PC.pyx":501
  *     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_ERR(34, 497, __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 == ((int)-1))) __PYX_ERR(34, 501, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":498
+  /* "PETSc/PC.pyx":502
  *         cdef KSP ksp = KSP()
  *         CHKERR( PCMGGetCoarseSolve(self.pc, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)             # <<<<<<<<<<<<<<
@@ -146066,19 +154904,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_130getMGCoarseSolve(struct PyPets
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_ksp->__pyx_base.obj);
 
-  /* "PETSc/PC.pyx":499
+  /* "PETSc/PC.pyx":503
  *         CHKERR( PCMGGetCoarseSolve(self.pc, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)
  *         return ksp             # <<<<<<<<<<<<<<
  * 
- *     def setMGInterpolation(self, level, Mat mat not None):
+ *     def setMGInterpolation(self, level, Mat mat):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_ksp));
   __pyx_r = ((PyObject *)__pyx_v_ksp);
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":495
+  /* "PETSc/PC.pyx":499
  *         return toInt(levels)
  * 
  *     def getMGCoarseSolve(self):             # <<<<<<<<<<<<<<
@@ -146098,10 +154936,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_130getMGCoarseSolve(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":501
+/* "PETSc/PC.pyx":505
  *         return ksp
  * 
- *     def setMGInterpolation(self, level, Mat mat not None):             # <<<<<<<<<<<<<<
+ *     def setMGInterpolation(self, level, Mat mat):             # <<<<<<<<<<<<<<
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( PCMGSetInterpolation(self.pc, clevel, mat.mat) )
  */
@@ -146123,7 +154961,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_133setMGInterpolation(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -146132,14 +154972,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_133setMGInterpolation(PyObject *_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_level)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(34, 501, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setMGInterpolation", 1, 2, 2, 1); __PYX_ERR(34, 505, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMGInterpolation") < 0)) __PYX_ERR(34, 501, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMGInterpolation") < 0)) __PYX_ERR(34, 505, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -146152,13 +154993,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_133setMGInterpolation(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMGInterpolation", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 501, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setMGInterpolation", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 505, __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_ERR(34, 501, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(34, 505, __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 */
@@ -146178,29 +155019,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_132setMGInterpolation(struct PyPe
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setMGInterpolation", 0);
 
-  /* "PETSc/PC.pyx":502
+  /* "PETSc/PC.pyx":506
  * 
- *     def setMGInterpolation(self, level, Mat mat not None):
+ *     def setMGInterpolation(self, level, Mat mat):
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(34, 502, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(34, 506, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":503
- *     def setMGInterpolation(self, level, Mat mat not None):
+  /* "PETSc/PC.pyx":507
+ *     def setMGInterpolation(self, level, Mat mat):
  *         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_ERR(34, 503, __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 == ((int)-1))) __PYX_ERR(34, 507, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":501
+  /* "PETSc/PC.pyx":505
  *         return ksp
  * 
- *     def setMGInterpolation(self, level, Mat mat not None):             # <<<<<<<<<<<<<<
+ *     def setMGInterpolation(self, level, Mat mat):             # <<<<<<<<<<<<<<
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( PCMGSetInterpolation(self.pc, clevel, mat.mat) )
  */
@@ -146217,7 +155058,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_132setMGInterpolation(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":505
+/* "PETSc/PC.pyx":509
  *         CHKERR( PCMGSetInterpolation(self.pc, clevel, mat.mat) )
  * 
  *     def getMGInterpolation(self, level):             # <<<<<<<<<<<<<<
@@ -146241,6 +155082,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_135getMGInterpolation(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -146251,7 +155093,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_135getMGInterpolation(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_ERR(34, 505, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getMGInterpolation") < 0)) __PYX_ERR(34, 509, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -146262,7 +155104,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_135getMGInterpolation(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getMGInterpolation", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 505, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getMGInterpolation", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 509, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.getMGInterpolation", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -146285,38 +155127,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_134getMGInterpolation(struct PyPe
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("getMGInterpolation", 0);
 
-  /* "PETSc/PC.pyx":506
+  /* "PETSc/PC.pyx":510
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(34, 506, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(34, 510, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":507
+  /* "PETSc/PC.pyx":511
  *     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 *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(34, 507, __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, 511, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_interpolation = ((struct PyPetscMatObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/PC.pyx":508
+  /* "PETSc/PC.pyx":512
  *         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_ERR(34, 508, __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 == ((int)-1))) __PYX_ERR(34, 512, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":509
+  /* "PETSc/PC.pyx":513
  *         cdef Mat interpolation = Mat()
  *         CHKERR( PCMGGetInterpolation(self.pc, clevel, &interpolation.mat) )
  *         PetscINCREF(interpolation.obj)             # <<<<<<<<<<<<<<
@@ -146325,19 +155167,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_134getMGInterpolation(struct PyPe
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_interpolation->__pyx_base.obj);
 
-  /* "PETSc/PC.pyx":510
+  /* "PETSc/PC.pyx":514
  *         CHKERR( PCMGGetInterpolation(self.pc, clevel, &interpolation.mat) )
  *         PetscINCREF(interpolation.obj)
  *         return interpolation             # <<<<<<<<<<<<<<
  * 
- *     def setMGRestriction(self, level, Mat mat not None):
+ *     def setMGRestriction(self, level, Mat mat):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_interpolation));
   __pyx_r = ((PyObject *)__pyx_v_interpolation);
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":505
+  /* "PETSc/PC.pyx":509
  *         CHKERR( PCMGSetInterpolation(self.pc, clevel, mat.mat) )
  * 
  *     def getMGInterpolation(self, level):             # <<<<<<<<<<<<<<
@@ -146357,10 +155199,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_134getMGInterpolation(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":512
+/* "PETSc/PC.pyx":516
  *         return interpolation
  * 
- *     def setMGRestriction(self, level, Mat mat not None):             # <<<<<<<<<<<<<<
+ *     def setMGRestriction(self, level, Mat mat):             # <<<<<<<<<<<<<<
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( PCMGSetRestriction(self.pc, clevel, mat.mat) )
  */
@@ -146382,7 +155224,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_137setMGRestriction(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -146391,14 +155235,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_137setMGRestriction(PyObject *__p
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_level)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(34, 512, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setMGRestriction", 1, 2, 2, 1); __PYX_ERR(34, 516, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMGRestriction") < 0)) __PYX_ERR(34, 512, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMGRestriction") < 0)) __PYX_ERR(34, 516, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -146411,13 +155256,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_137setMGRestriction(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMGRestriction", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 512, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setMGRestriction", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 516, __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_ERR(34, 512, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(34, 516, __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 */
@@ -146437,29 +155282,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_136setMGRestriction(struct PyPets
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setMGRestriction", 0);
 
-  /* "PETSc/PC.pyx":513
+  /* "PETSc/PC.pyx":517
  * 
- *     def setMGRestriction(self, level, Mat mat not None):
+ *     def setMGRestriction(self, level, Mat mat):
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(34, 513, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(34, 517, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":514
- *     def setMGRestriction(self, level, Mat mat not None):
+  /* "PETSc/PC.pyx":518
+ *     def setMGRestriction(self, level, Mat mat):
  *         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_ERR(34, 514, __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 == ((int)-1))) __PYX_ERR(34, 518, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":512
+  /* "PETSc/PC.pyx":516
  *         return interpolation
  * 
- *     def setMGRestriction(self, level, Mat mat not None):             # <<<<<<<<<<<<<<
+ *     def setMGRestriction(self, level, Mat mat):             # <<<<<<<<<<<<<<
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( PCMGSetRestriction(self.pc, clevel, mat.mat) )
  */
@@ -146476,7 +155321,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_136setMGRestriction(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":516
+/* "PETSc/PC.pyx":520
  *         CHKERR( PCMGSetRestriction(self.pc, clevel, mat.mat) )
  * 
  *     def getMGRestriction(self, level):             # <<<<<<<<<<<<<<
@@ -146500,6 +155345,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_139getMGRestriction(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -146510,7 +155356,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_139getMGRestriction(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_ERR(34, 516, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getMGRestriction") < 0)) __PYX_ERR(34, 520, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -146521,7 +155367,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_139getMGRestriction(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getMGRestriction", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 516, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getMGRestriction", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 520, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.getMGRestriction", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -146544,38 +155390,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_138getMGRestriction(struct PyPets
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("getMGRestriction", 0);
 
-  /* "PETSc/PC.pyx":517
+  /* "PETSc/PC.pyx":521
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(34, 517, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(34, 521, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":518
+  /* "PETSc/PC.pyx":522
  *     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 *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(34, 518, __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, 522, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_restriction = ((struct PyPetscMatObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/PC.pyx":519
+  /* "PETSc/PC.pyx":523
  *         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_ERR(34, 519, __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 == ((int)-1))) __PYX_ERR(34, 523, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":520
+  /* "PETSc/PC.pyx":524
  *         cdef Mat restriction = Mat()
  *         CHKERR( PCMGGetRestriction(self.pc, clevel, &restriction.mat) )
  *         PetscINCREF(restriction.obj)             # <<<<<<<<<<<<<<
@@ -146584,19 +155430,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_138getMGRestriction(struct PyPets
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_restriction->__pyx_base.obj);
 
-  /* "PETSc/PC.pyx":521
+  /* "PETSc/PC.pyx":525
  *         CHKERR( PCMGGetRestriction(self.pc, clevel, &restriction.mat) )
  *         PetscINCREF(restriction.obj)
  *         return restriction             # <<<<<<<<<<<<<<
  * 
- *     def setMGRScale(self, level, Vec rscale not None):
+ *     def setMGRScale(self, level, Vec rscale):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_restriction));
   __pyx_r = ((PyObject *)__pyx_v_restriction);
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":516
+  /* "PETSc/PC.pyx":520
  *         CHKERR( PCMGSetRestriction(self.pc, clevel, mat.mat) )
  * 
  *     def getMGRestriction(self, level):             # <<<<<<<<<<<<<<
@@ -146616,10 +155462,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_138getMGRestriction(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":523
+/* "PETSc/PC.pyx":527
  *         return restriction
  * 
- *     def setMGRScale(self, level, Vec rscale not None):             # <<<<<<<<<<<<<<
+ *     def setMGRScale(self, level, Vec rscale):             # <<<<<<<<<<<<<<
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( PCMGSetRScale(self.pc, clevel, rscale.vec) )
  */
@@ -146641,7 +155487,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_141setMGRScale(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -146650,14 +155498,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_141setMGRScale(PyObject *__pyx_v_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_level)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(34, 523, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setMGRScale", 1, 2, 2, 1); __PYX_ERR(34, 527, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMGRScale") < 0)) __PYX_ERR(34, 523, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMGRScale") < 0)) __PYX_ERR(34, 527, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -146670,13 +155519,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_141setMGRScale(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_ERR(34, 523, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setMGRScale", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 527, __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_ERR(34, 523, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rscale), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "rscale", 0))) __PYX_ERR(34, 527, __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 */
@@ -146696,29 +155545,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_140setMGRScale(struct PyPetscPCOb
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setMGRScale", 0);
 
-  /* "PETSc/PC.pyx":524
+  /* "PETSc/PC.pyx":528
  * 
- *     def setMGRScale(self, level, Vec rscale not None):
+ *     def setMGRScale(self, level, Vec rscale):
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(34, 524, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(34, 528, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":525
- *     def setMGRScale(self, level, Vec rscale not None):
+  /* "PETSc/PC.pyx":529
+ *     def setMGRScale(self, level, Vec rscale):
  *         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_ERR(34, 525, __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 == ((int)-1))) __PYX_ERR(34, 529, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":523
+  /* "PETSc/PC.pyx":527
  *         return restriction
  * 
- *     def setMGRScale(self, level, Vec rscale not None):             # <<<<<<<<<<<<<<
+ *     def setMGRScale(self, level, Vec rscale):             # <<<<<<<<<<<<<<
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( PCMGSetRScale(self.pc, clevel, rscale.vec) )
  */
@@ -146735,7 +155584,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_140setMGRScale(struct PyPetscPCOb
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":527
+/* "PETSc/PC.pyx":531
  *         CHKERR( PCMGSetRScale(self.pc, clevel, rscale.vec) )
  * 
  *     def getMGRScale(self, level):             # <<<<<<<<<<<<<<
@@ -146759,6 +155608,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_143getMGRScale(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -146769,7 +155619,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_143getMGRScale(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_ERR(34, 527, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getMGRScale") < 0)) __PYX_ERR(34, 531, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -146780,7 +155630,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_143getMGRScale(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_ERR(34, 527, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getMGRScale", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 531, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.getMGRScale", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -146803,38 +155653,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_142getMGRScale(struct PyPetscPCOb
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("getMGRScale", 0);
 
-  /* "PETSc/PC.pyx":528
+  /* "PETSc/PC.pyx":532
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(34, 528, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(34, 532, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":529
+  /* "PETSc/PC.pyx":533
  *     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 *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(34, 529, __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, 533, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_rscale = ((struct PyPetscVecObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/PC.pyx":530
+  /* "PETSc/PC.pyx":534
  *         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_ERR(34, 530, __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 == ((int)-1))) __PYX_ERR(34, 534, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":531
+  /* "PETSc/PC.pyx":535
  *         cdef Vec rscale = Vec()
  *         CHKERR( PCMGGetRScale(self.pc, clevel, &rscale.vec) )
  *         PetscINCREF(rscale.obj)             # <<<<<<<<<<<<<<
@@ -146843,7 +155693,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_142getMGRScale(struct PyPetscPCOb
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_rscale->__pyx_base.obj);
 
-  /* "PETSc/PC.pyx":532
+  /* "PETSc/PC.pyx":536
  *         CHKERR( PCMGGetRScale(self.pc, clevel, &rscale.vec) )
  *         PetscINCREF(rscale.obj)
  *         return rscale             # <<<<<<<<<<<<<<
@@ -146855,7 +155705,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_142getMGRScale(struct PyPetscPCOb
   __pyx_r = ((PyObject *)__pyx_v_rscale);
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":527
+  /* "PETSc/PC.pyx":531
  *         CHKERR( PCMGSetRScale(self.pc, clevel, rscale.vec) )
  * 
  *     def getMGRScale(self, level):             # <<<<<<<<<<<<<<
@@ -146875,7 +155725,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_142getMGRScale(struct PyPetscPCOb
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":534
+/* "PETSc/PC.pyx":538
  *         return rscale
  * 
  *     def getMGSmoother(self, level):             # <<<<<<<<<<<<<<
@@ -146899,6 +155749,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_145getMGSmoother(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -146909,7 +155760,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_145getMGSmoother(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_ERR(34, 534, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getMGSmoother") < 0)) __PYX_ERR(34, 538, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -146920,7 +155771,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_145getMGSmoother(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getMGSmoother", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 534, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getMGSmoother", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 538, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.getMGSmoother", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -146943,38 +155794,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_144getMGSmoother(struct PyPetscPC
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("getMGSmoother", 0);
 
-  /* "PETSc/PC.pyx":535
+  /* "PETSc/PC.pyx":539
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(34, 535, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(34, 539, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":536
+  /* "PETSc/PC.pyx":540
  *     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 *)__pyx_ptype_8petsc4py_5PETSc_KSP), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(34, 536, __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, 540, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_ksp = ((struct PyPetscKSPObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/PC.pyx":537
+  /* "PETSc/PC.pyx":541
  *         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_ERR(34, 537, __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 == ((int)-1))) __PYX_ERR(34, 541, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":538
+  /* "PETSc/PC.pyx":542
  *         cdef KSP ksp = KSP()
  *         CHKERR( PCMGGetSmoother(self.pc, clevel, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)             # <<<<<<<<<<<<<<
@@ -146983,7 +155834,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_144getMGSmoother(struct PyPetscPC
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_ksp->__pyx_base.obj);
 
-  /* "PETSc/PC.pyx":539
+  /* "PETSc/PC.pyx":543
  *         CHKERR( PCMGGetSmoother(self.pc, clevel, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)
  *         return ksp             # <<<<<<<<<<<<<<
@@ -146995,7 +155846,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_144getMGSmoother(struct PyPetscPC
   __pyx_r = ((PyObject *)__pyx_v_ksp);
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":534
+  /* "PETSc/PC.pyx":538
  *         return rscale
  * 
  *     def getMGSmoother(self, level):             # <<<<<<<<<<<<<<
@@ -147015,7 +155866,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_144getMGSmoother(struct PyPetscPC
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":541
+/* "PETSc/PC.pyx":545
  *         return ksp
  * 
  *     def getMGSmootherDown(self, level):             # <<<<<<<<<<<<<<
@@ -147039,6 +155890,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_147getMGSmootherDown(PyObject *__
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -147049,7 +155901,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_147getMGSmootherDown(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_ERR(34, 541, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getMGSmootherDown") < 0)) __PYX_ERR(34, 545, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -147060,7 +155912,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_147getMGSmootherDown(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getMGSmootherDown", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 541, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getMGSmootherDown", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 545, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.getMGSmootherDown", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -147083,38 +155935,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_146getMGSmootherDown(struct PyPet
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("getMGSmootherDown", 0);
 
-  /* "PETSc/PC.pyx":542
+  /* "PETSc/PC.pyx":546
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(34, 542, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(34, 546, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":543
+  /* "PETSc/PC.pyx":547
  *     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 *)__pyx_ptype_8petsc4py_5PETSc_KSP), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(34, 543, __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, 547, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_ksp = ((struct PyPetscKSPObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/PC.pyx":544
+  /* "PETSc/PC.pyx":548
  *         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_ERR(34, 544, __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 == ((int)-1))) __PYX_ERR(34, 548, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":545
+  /* "PETSc/PC.pyx":549
  *         cdef KSP ksp = KSP()
  *         CHKERR( PCMGGetSmootherDown(self.pc, clevel, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)             # <<<<<<<<<<<<<<
@@ -147123,7 +155975,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_146getMGSmootherDown(struct PyPet
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_ksp->__pyx_base.obj);
 
-  /* "PETSc/PC.pyx":546
+  /* "PETSc/PC.pyx":550
  *         CHKERR( PCMGGetSmootherDown(self.pc, clevel, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)
  *         return ksp             # <<<<<<<<<<<<<<
@@ -147135,7 +155987,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_146getMGSmootherDown(struct PyPet
   __pyx_r = ((PyObject *)__pyx_v_ksp);
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":541
+  /* "PETSc/PC.pyx":545
  *         return ksp
  * 
  *     def getMGSmootherDown(self, level):             # <<<<<<<<<<<<<<
@@ -147155,7 +156007,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_146getMGSmootherDown(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":548
+/* "PETSc/PC.pyx":552
  *         return ksp
  * 
  *     def getMGSmootherUp(self, level):             # <<<<<<<<<<<<<<
@@ -147179,6 +156031,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_149getMGSmootherUp(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -147189,7 +156042,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_149getMGSmootherUp(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_ERR(34, 548, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getMGSmootherUp") < 0)) __PYX_ERR(34, 552, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -147200,7 +156053,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_149getMGSmootherUp(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getMGSmootherUp", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 548, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getMGSmootherUp", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 552, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.PC.getMGSmootherUp", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -147223,38 +156076,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_148getMGSmootherUp(struct PyPetsc
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("getMGSmootherUp", 0);
 
-  /* "PETSc/PC.pyx":549
+  /* "PETSc/PC.pyx":553
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(34, 549, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(34, 553, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":550
+  /* "PETSc/PC.pyx":554
  *     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 *)__pyx_ptype_8petsc4py_5PETSc_KSP), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(34, 550, __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, 554, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_ksp = ((struct PyPetscKSPObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/PC.pyx":551
+  /* "PETSc/PC.pyx":555
  *         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_ERR(34, 551, __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 == ((int)-1))) __PYX_ERR(34, 555, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":552
+  /* "PETSc/PC.pyx":556
  *         cdef KSP ksp = KSP()
  *         CHKERR( PCMGGetSmootherUp(self.pc, clevel, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)             # <<<<<<<<<<<<<<
@@ -147263,19 +156116,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_148getMGSmootherUp(struct PyPetsc
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_ksp->__pyx_base.obj);
 
-  /* "PETSc/PC.pyx":553
+  /* "PETSc/PC.pyx":557
  *         CHKERR( PCMGGetSmootherUp(self.pc, clevel, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)
  *         return ksp             # <<<<<<<<<<<<<<
  * 
- *     def setMGCyclesOnLevel(self, level, ncycle):
+ *     def setMGCycleType(self, cycle_type):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_ksp));
   __pyx_r = ((PyObject *)__pyx_v_ksp);
   goto __pyx_L0;
 
-  /* "PETSc/PC.pyx":548
+  /* "PETSc/PC.pyx":552
  *         return ksp
  * 
  *     def getMGSmootherUp(self, level):             # <<<<<<<<<<<<<<
@@ -147295,32 +156148,140 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_148getMGSmootherUp(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":555
+/* "PETSc/PC.pyx":559
  *         return ksp
  * 
- *     def setMGCyclesOnLevel(self, level, ncycle):             # <<<<<<<<<<<<<<
+ *     def setMGCycleType(self, cycle_type):             # <<<<<<<<<<<<<<
+ *         cdef PetscPCMGCycleType ctype = cycle_type
+ *         CHKERR( PCMGSetCycleType(self.pc, ctype) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_151setMGCycleType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_150setMGCycleType[] = "PC.setMGCycleType(self, cycle_type)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_151setMGCycleType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_cycle_type = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setMGCycleType (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_cycle_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);
+        CYTHON_FALLTHROUGH;
+        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_cycle_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, "setMGCycleType") < 0)) __PYX_ERR(34, 559, __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_cycle_type = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setMGCycleType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 559, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.PC.setMGCycleType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_150setMGCycleType(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_cycle_type);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_150setMGCycleType(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_cycle_type) {
+  PCMGCycleType __pyx_v_ctype;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PCMGCycleType __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setMGCycleType", 0);
+
+  /* "PETSc/PC.pyx":560
+ * 
+ *     def setMGCycleType(self, cycle_type):
+ *         cdef PetscPCMGCycleType ctype = cycle_type             # <<<<<<<<<<<<<<
+ *         CHKERR( PCMGSetCycleType(self.pc, ctype) )
+ * 
+ */
+  __pyx_t_1 = ((PCMGCycleType)__Pyx_PyInt_As_PCMGCycleType(__pyx_v_cycle_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(34, 560, __pyx_L1_error)
+  __pyx_v_ctype = __pyx_t_1;
+
+  /* "PETSc/PC.pyx":561
+ *     def setMGCycleType(self, cycle_type):
+ *         cdef PetscPCMGCycleType ctype = cycle_type
+ *         CHKERR( PCMGSetCycleType(self.pc, ctype) )             # <<<<<<<<<<<<<<
+ * 
+ *     def setMGCycleTypeOnLevel(self, level, cycle_type):
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGSetCycleType(__pyx_v_self->pc, __pyx_v_ctype)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(34, 561, __pyx_L1_error)
+
+  /* "PETSc/PC.pyx":559
+ *         return ksp
+ * 
+ *     def setMGCycleType(self, cycle_type):             # <<<<<<<<<<<<<<
+ *         cdef PetscPCMGCycleType ctype = cycle_type
+ *         CHKERR( PCMGSetCycleType(self.pc, ctype) )
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.PC.setMGCycleType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/PC.pyx":563
+ *         CHKERR( PCMGSetCycleType(self.pc, ctype) )
+ * 
+ *     def setMGCycleTypeOnLevel(self, level, cycle_type):             # <<<<<<<<<<<<<<
  *         cdef PetscInt clevel = asInt(level)
- *         cdef PetscInt c = asInt(ncycle)
+ *         cdef PetscPCMGCycleType ctype = cycle_type
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_153setMGCycleTypeOnLevel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_152setMGCycleTypeOnLevel[] = "PC.setMGCycleTypeOnLevel(self, level, cycle_type)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_153setMGCycleTypeOnLevel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_level = 0;
-  PyObject *__pyx_v_ncycle = 0;
+  PyObject *__pyx_v_cycle_type = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setMGCyclesOnLevel (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setMGCycleTypeOnLevel (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_level,&__pyx_n_s_ncycle,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_level,&__pyx_n_s_cycle_type,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);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -147329,14 +156290,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_151setMGCyclesOnLevel(PyObject *_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_level)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ncycle)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_cycle_type)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setMGCyclesOnLevel", 1, 2, 2, 1); __PYX_ERR(34, 555, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setMGCycleTypeOnLevel", 1, 2, 2, 1); __PYX_ERR(34, 563, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMGCyclesOnLevel") < 0)) __PYX_ERR(34, 555, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMGCycleTypeOnLevel") < 0)) __PYX_ERR(34, 563, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -147345,74 +156307,75 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_151setMGCyclesOnLevel(PyObject *_
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
     __pyx_v_level = values[0];
-    __pyx_v_ncycle = values[1];
+    __pyx_v_cycle_type = values[1];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMGCyclesOnLevel", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 555, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setMGCycleTypeOnLevel", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 563, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.PC.setMGCyclesOnLevel", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.PC.setMGCycleTypeOnLevel", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_150setMGCyclesOnLevel(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_level, __pyx_v_ncycle);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_152setMGCycleTypeOnLevel(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_level, __pyx_v_cycle_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_150setMGCyclesOnLevel(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, PyObject *__pyx_v_ncycle) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_152setMGCycleTypeOnLevel(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, PyObject *__pyx_v_cycle_type) {
   PetscInt __pyx_v_clevel;
-  PetscInt __pyx_v_c;
+  PCMGCycleType __pyx_v_ctype;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PetscInt __pyx_t_1;
-  int __pyx_t_2;
-  __Pyx_RefNannySetupContext("setMGCyclesOnLevel", 0);
+  PCMGCycleType __pyx_t_2;
+  int __pyx_t_3;
+  __Pyx_RefNannySetupContext("setMGCycleTypeOnLevel", 0);
 
-  /* "PETSc/PC.pyx":556
+  /* "PETSc/PC.pyx":564
  * 
- *     def setMGCyclesOnLevel(self, level, ncycle):
+ *     def setMGCycleTypeOnLevel(self, level, cycle_type):
  *         cdef PetscInt clevel = asInt(level)             # <<<<<<<<<<<<<<
- *         cdef PetscInt c = asInt(ncycle)
- *         CHKERR( PCMGSetCyclesOnLevel(self.pc, clevel, c) )
+ *         cdef PetscPCMGCycleType ctype = cycle_type
+ *         CHKERR( PCMGSetCycleTypeOnLevel(self.pc, clevel, ctype) )
  */
-  __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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(34, 564, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":557
- *     def setMGCyclesOnLevel(self, level, ncycle):
+  /* "PETSc/PC.pyx":565
+ *     def setMGCycleTypeOnLevel(self, level, cycle_type):
  *         cdef PetscInt clevel = asInt(level)
- *         cdef PetscInt c = asInt(ncycle)             # <<<<<<<<<<<<<<
- *         CHKERR( PCMGSetCyclesOnLevel(self.pc, clevel, c) )
+ *         cdef PetscPCMGCycleType ctype = cycle_type             # <<<<<<<<<<<<<<
+ *         CHKERR( PCMGSetCycleTypeOnLevel(self.pc, clevel, ctype) )
  * 
  */
-  __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;
+  __pyx_t_2 = ((PCMGCycleType)__Pyx_PyInt_As_PCMGCycleType(__pyx_v_cycle_type)); if (unlikely(PyErr_Occurred())) __PYX_ERR(34, 565, __pyx_L1_error)
+  __pyx_v_ctype = __pyx_t_2;
 
-  /* "PETSc/PC.pyx":558
+  /* "PETSc/PC.pyx":566
  *         cdef PetscInt clevel = asInt(level)
- *         cdef PetscInt c = asInt(ncycle)
- *         CHKERR( PCMGSetCyclesOnLevel(self.pc, clevel, c) )             # <<<<<<<<<<<<<<
+ *         cdef PetscPCMGCycleType ctype = cycle_type
+ *         CHKERR( PCMGSetCycleTypeOnLevel(self.pc, clevel, ctype) )             # <<<<<<<<<<<<<<
  * 
- *     def setMGRhs(self, level, Vec rhs not None):
+ *     def setMGRhs(self, level, Vec rhs):
  */
-  __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)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(PCMGSetCycleTypeOnLevel(__pyx_v_self->pc, __pyx_v_clevel, __pyx_v_ctype)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(34, 566, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":555
- *         return ksp
+  /* "PETSc/PC.pyx":563
+ *         CHKERR( PCMGSetCycleType(self.pc, ctype) )
  * 
- *     def setMGCyclesOnLevel(self, level, ncycle):             # <<<<<<<<<<<<<<
+ *     def setMGCycleTypeOnLevel(self, level, cycle_type):             # <<<<<<<<<<<<<<
  *         cdef PetscInt clevel = asInt(level)
- *         cdef PetscInt c = asInt(ncycle)
+ *         cdef PetscPCMGCycleType ctype = cycle_type
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.PC.setMGCyclesOnLevel", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.PC.setMGCycleTypeOnLevel", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -147420,18 +156383,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_150setMGCyclesOnLevel(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":560
- *         CHKERR( PCMGSetCyclesOnLevel(self.pc, clevel, c) )
+/* "PETSc/PC.pyx":568
+ *         CHKERR( PCMGSetCycleTypeOnLevel(self.pc, clevel, ctype) )
  * 
- *     def setMGRhs(self, level, Vec rhs not None):             # <<<<<<<<<<<<<<
+ *     def setMGRhs(self, level, Vec rhs):             # <<<<<<<<<<<<<<
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( PCMGSetRhs(self.pc, clevel, rhs.vec) )
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_155setMGRhs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_154setMGRhs[] = "PC.setMGRhs(self, level, Vec rhs)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_155setMGRhs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_level = 0;
   struct PyPetscVecObject *__pyx_v_rhs = 0;
   PyObject *__pyx_r = 0;
@@ -147445,7 +156408,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_153setMGRhs(PyObject *__pyx_v_sel
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -147454,14 +156419,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_153setMGRhs(PyObject *__pyx_v_sel
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_level)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(34, 560, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setMGRhs", 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, "setMGRhs") < 0)) __PYX_ERR(34, 560, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMGRhs") < 0)) __PYX_ERR(34, 568, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -147474,14 +156440,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_153setMGRhs(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_ERR(34, 560, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setMGRhs", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 568, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_rhs), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "rhs", 0))) __PYX_ERR(34, 568, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_154setMGRhs(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_level, __pyx_v_rhs);
 
   /* function exit code */
   goto __pyx_L0;
@@ -147492,7 +156458,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_153setMGRhs(PyObject *__pyx_v_sel
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_152setMGRhs(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscVecObject *__pyx_v_rhs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_154setMGRhs(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscVecObject *__pyx_v_rhs) {
   PetscInt __pyx_v_clevel;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -147500,29 +156466,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_152setMGRhs(struct PyPetscPCObjec
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setMGRhs", 0);
 
-  /* "PETSc/PC.pyx":561
+  /* "PETSc/PC.pyx":569
  * 
- *     def setMGRhs(self, level, Vec rhs not None):
+ *     def setMGRhs(self, level, Vec rhs):
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(34, 561, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(34, 569, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":562
- *     def setMGRhs(self, level, Vec rhs not None):
+  /* "PETSc/PC.pyx":570
+ *     def setMGRhs(self, level, Vec rhs):
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( PCMGSetRhs(self.pc, clevel, rhs.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def setMGX(self, level, Vec x not None):
+ *     def setMGX(self, level, Vec x):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(34, 570, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":560
- *         CHKERR( PCMGSetCyclesOnLevel(self.pc, clevel, c) )
+  /* "PETSc/PC.pyx":568
+ *         CHKERR( PCMGSetCycleTypeOnLevel(self.pc, clevel, ctype) )
  * 
- *     def setMGRhs(self, level, Vec rhs not None):             # <<<<<<<<<<<<<<
+ *     def setMGRhs(self, level, Vec rhs):             # <<<<<<<<<<<<<<
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( PCMGSetRhs(self.pc, clevel, rhs.vec) )
  */
@@ -147539,18 +156505,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_152setMGRhs(struct PyPetscPCObjec
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":564
+/* "PETSc/PC.pyx":572
  *         CHKERR( PCMGSetRhs(self.pc, clevel, rhs.vec) )
  * 
- *     def setMGX(self, level, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def setMGX(self, level, Vec x):             # <<<<<<<<<<<<<<
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( PCMGSetX(self.pc, clevel, x.vec) )
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_157setMGX(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_156setMGX[] = "PC.setMGX(self, level, Vec x)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_157setMGX(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_level = 0;
   struct PyPetscVecObject *__pyx_v_x = 0;
   PyObject *__pyx_r = 0;
@@ -147564,7 +156530,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_155setMGX(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -147573,14 +156541,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_155setMGX(PyObject *__pyx_v_self,
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_level)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(34, 564, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setMGX", 1, 2, 2, 1); __PYX_ERR(34, 572, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMGX") < 0)) __PYX_ERR(34, 564, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMGX") < 0)) __PYX_ERR(34, 572, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -147593,14 +156562,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_155setMGX(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_ERR(34, 564, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setMGX", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 572, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(34, 572, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_156setMGX(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_level, __pyx_v_x);
 
   /* function exit code */
   goto __pyx_L0;
@@ -147611,7 +156580,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_155setMGX(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_154setMGX(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscVecObject *__pyx_v_x) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_156setMGX(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscVecObject *__pyx_v_x) {
   PetscInt __pyx_v_clevel;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -147619,29 +156588,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_154setMGX(struct PyPetscPCObject
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setMGX", 0);
 
-  /* "PETSc/PC.pyx":565
+  /* "PETSc/PC.pyx":573
  * 
- *     def setMGX(self, level, Vec x not None):
+ *     def setMGX(self, level, Vec x):
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(34, 565, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(34, 573, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":566
- *     def setMGX(self, level, Vec x not None):
+  /* "PETSc/PC.pyx":574
+ *     def setMGX(self, level, Vec x):
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( PCMGSetX(self.pc, clevel, x.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def setMGR(self, level, Vec r not None):
+ *     def setMGR(self, level, Vec r):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(34, 574, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":564
+  /* "PETSc/PC.pyx":572
  *         CHKERR( PCMGSetRhs(self.pc, clevel, rhs.vec) )
  * 
- *     def setMGX(self, level, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def setMGX(self, level, Vec x):             # <<<<<<<<<<<<<<
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( PCMGSetX(self.pc, clevel, x.vec) )
  */
@@ -147658,18 +156627,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_154setMGX(struct PyPetscPCObject
   return __pyx_r;
 }
 
-/* "PETSc/PC.pyx":568
+/* "PETSc/PC.pyx":576
  *         CHKERR( PCMGSetX(self.pc, clevel, x.vec) )
  * 
- *     def setMGR(self, level, Vec r not None):             # <<<<<<<<<<<<<<
+ *     def setMGR(self, level, Vec r):             # <<<<<<<<<<<<<<
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( PCMGSetR(self.pc, clevel, r.vec) )
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_159setMGR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2PC_158setMGR[] = "PC.setMGR(self, level, Vec r)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_159setMGR(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_level = 0;
   struct PyPetscVecObject *__pyx_v_r = 0;
   PyObject *__pyx_r = 0;
@@ -147683,7 +156652,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_157setMGR(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -147692,14 +156663,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_157setMGR(PyObject *__pyx_v_self,
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_level)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(34, 568, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setMGR", 1, 2, 2, 1); __PYX_ERR(34, 576, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMGR") < 0)) __PYX_ERR(34, 568, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMGR") < 0)) __PYX_ERR(34, 576, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -147712,14 +156684,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_157setMGR(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_ERR(34, 568, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setMGR", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(34, 576, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_r), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "r", 0))) __PYX_ERR(34, 576, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2PC_158setMGR(((struct PyPetscPCObject *)__pyx_v_self), __pyx_v_level, __pyx_v_r);
 
   /* function exit code */
   goto __pyx_L0;
@@ -147730,7 +156702,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2PC_157setMGR(PyObject *__pyx_v_self,
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_156setMGR(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscVecObject *__pyx_v_r) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_158setMGR(struct PyPetscPCObject *__pyx_v_self, PyObject *__pyx_v_level, struct PyPetscVecObject *__pyx_v_r) {
   PetscInt __pyx_v_clevel;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -147738,29 +156710,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_156setMGR(struct PyPetscPCObject
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setMGR", 0);
 
-  /* "PETSc/PC.pyx":569
+  /* "PETSc/PC.pyx":577
  * 
- *     def setMGR(self, level, Vec r not None):
+ *     def setMGR(self, level, Vec r):
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(34, 569, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(34, 577, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
-  /* "PETSc/PC.pyx":570
- *     def setMGR(self, level, Vec r not None):
+  /* "PETSc/PC.pyx":578
+ *     def setMGR(self, level, Vec r):
  *         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_ERR(34, 570, __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 == ((int)-1))) __PYX_ERR(34, 578, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":568
+  /* "PETSc/PC.pyx":576
  *         CHKERR( PCMGSetX(self.pc, clevel, x.vec) )
  * 
- *     def setMGR(self, level, Vec r not None):             # <<<<<<<<<<<<<<
+ *     def setMGR(self, level, Vec r):             # <<<<<<<<<<<<<<
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( PCMGSetR(self.pc, clevel, r.vec) )
  */
@@ -147777,7 +156749,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2PC_156setMGR(struct PyPetscPCObject
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":94
+/* "PETSc/KSP.pyx":95
  *     # --- xxx ---
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -147806,7 +156778,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP___cinit__(struct PyPetscKSPObject *__p
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "PETSc/KSP.pyx":95
+  /* "PETSc/KSP.pyx":96
  * 
  *     def __cinit__(self):
  *         self.obj = <PetscObject*> &self.ksp             # <<<<<<<<<<<<<<
@@ -147815,7 +156787,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":96
+  /* "PETSc/KSP.pyx":97
  *     def __cinit__(self):
  *         self.obj = <PetscObject*> &self.ksp
  *         self.ksp = NULL             # <<<<<<<<<<<<<<
@@ -147824,7 +156796,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP___cinit__(struct PyPetscKSPObject *__p
  */
   __pyx_v_self->ksp = NULL;
 
-  /* "PETSc/KSP.pyx":94
+  /* "PETSc/KSP.pyx":95
  *     # --- xxx ---
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -147838,7 +156810,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP___cinit__(struct PyPetscKSPObject *__p
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":98
+/* "PETSc/KSP.pyx":99
  *         self.ksp = NULL
  * 
  *     def __call__(self, b, x=None):             # <<<<<<<<<<<<<<
@@ -147863,7 +156835,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_3__call__(PyObject *__pyx_v_self
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -147872,6 +156846,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_3__call__(PyObject *__pyx_v_self
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_b)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x);
@@ -147879,11 +156854,12 @@ 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_ERR(35, 98, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "__call__") < 0)) __PYX_ERR(35, 99, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -147894,7 +156870,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_ERR(35, 98, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("__call__", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 99, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.__call__", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -147916,11 +156892,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2__call__(struct PyPetscKSPObjec
   PyObject *__pyx_t_4 = NULL;
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
-  Py_ssize_t __pyx_t_7;
+  int __pyx_t_7;
   __Pyx_RefNannySetupContext("__call__", 0);
   __Pyx_INCREF(__pyx_v_x);
 
-  /* "PETSc/KSP.pyx":99
+  /* "PETSc/KSP.pyx":100
  * 
  *     def __call__(self, b, x=None):
  *         if x is None: # XXX do this better             # <<<<<<<<<<<<<<
@@ -147931,17 +156907,17 @@ 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":100
+    /* "PETSc/KSP.pyx":101
  *     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_ERR(35, 100, __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, 101, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __pyx_t_6 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_5))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_5))) {
       __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
       if (likely(__pyx_t_6)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
@@ -147951,21 +156927,21 @@ 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_ERR(35, 100, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_CallOneArg(__pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 101, __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_ERR(35, 100, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyObject_CallNoArg(__pyx_t_5); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 101, __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)) __PYX_ERR(35, 100, __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, 101, __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_ERR(35, 100, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_createVecLeft); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 101, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
     __pyx_t_5 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+    if (CYTHON_UNPACK_METHODS && 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);
@@ -147975,17 +156951,17 @@ 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_ERR(35, 100, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallOneArg(__pyx_t_4, __pyx_t_5); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 101, __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(35, 100, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyObject_CallNoArg(__pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 101, __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;
 
-    /* "PETSc/KSP.pyx":99
+    /* "PETSc/KSP.pyx":100
  * 
  *     def __call__(self, b, x=None):
  *         if x is None: # XXX do this better             # <<<<<<<<<<<<<<
@@ -147994,18 +156970,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2__call__(struct PyPetscKSPObjec
  */
   }
 
-  /* "PETSc/KSP.pyx":101
+  /* "PETSc/KSP.pyx":102
  *         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_ERR(35, 101, __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, 102, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_t_5 = NULL;
   __pyx_t_7 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_4))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -148015,24 +156991,42 @@ 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_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;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_4)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_b, __pyx_v_x};
+    __pyx_t_3 = __Pyx_PyFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 102, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __Pyx_GOTREF(__pyx_t_3);
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_4)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_5, __pyx_v_b, __pyx_v_x};
+    __pyx_t_3 = __Pyx_PyCFunction_FastCall(__pyx_t_4, __pyx_temp+1-__pyx_t_7, 2+__pyx_t_7); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 102, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __Pyx_GOTREF(__pyx_t_3);
+  } else
+  #endif
+  {
+    __pyx_t_6 = PyTuple_New(2+__pyx_t_7); if (unlikely(!__pyx_t_6)) __PYX_ERR(35, 102, __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;
+    }
+    __Pyx_INCREF(__pyx_v_b);
+    __Pyx_GIVEREF(__pyx_v_b);
+    PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_7, __pyx_v_b);
+    __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_ERR(35, 102, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
   }
-  __Pyx_INCREF(__pyx_v_b);
-  __Pyx_GIVEREF(__pyx_v_b);
-  PyTuple_SET_ITEM(__pyx_t_6, 0+__pyx_t_7, __pyx_v_b);
-  __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_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":102
+  /* "PETSc/KSP.pyx":103
  *             x = self.getOperators()[0].createVecLeft()
  *         self.solve(b, x)
  *         return x             # <<<<<<<<<<<<<<
@@ -148044,7 +157038,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2__call__(struct PyPetscKSPObjec
   __pyx_r = __pyx_v_x;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":98
+  /* "PETSc/KSP.pyx":99
  *         self.ksp = NULL
  * 
  *     def __call__(self, b, x=None):             # <<<<<<<<<<<<<<
@@ -148067,7 +157061,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2__call__(struct PyPetscKSPObjec
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":106
+/* "PETSc/KSP.pyx":107
  *     # --- xxx ---
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -148092,6 +157086,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_5view(PyObject *__pyx_v_self, Py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -148104,11 +157099,12 @@ 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_ERR(35, 106, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(35, 107, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -148117,13 +157113,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_ERR(35, 106, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 107, __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_ERR(35, 106, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) __PYX_ERR(35, 107, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_4view(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
@@ -148145,7 +157141,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4view(struct PyPetscKSPObject *_
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("view", 0);
 
-  /* "PETSc/KSP.pyx":107
+  /* "PETSc/KSP.pyx":108
  * 
  *     def view(self, Viewer viewer=None):
  *         cdef PetscViewer vwr = NULL             # <<<<<<<<<<<<<<
@@ -148154,7 +157150,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4view(struct PyPetscKSPObject *_
  */
   __pyx_v_vwr = NULL;
 
-  /* "PETSc/KSP.pyx":108
+  /* "PETSc/KSP.pyx":109
  *     def view(self, Viewer viewer=None):
  *         cdef PetscViewer vwr = NULL
  *         if viewer is not None: vwr = viewer.vwr             # <<<<<<<<<<<<<<
@@ -148168,16 +157164,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4view(struct PyPetscKSPObject *_
     __pyx_v_vwr = __pyx_t_3;
   }
 
-  /* "PETSc/KSP.pyx":109
+  /* "PETSc/KSP.pyx":110
  *         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_ERR(35, 109, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPView(__pyx_v_self->ksp, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(35, 110, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":106
+  /* "PETSc/KSP.pyx":107
  *     # --- xxx ---
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -148197,7 +157193,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4view(struct PyPetscKSPObject *_
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":111
+/* "PETSc/KSP.pyx":112
  *         CHKERR( KSPView(self.ksp, vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -148228,16 +157224,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6destroy(struct PyPetscKSPObject
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("destroy", 0);
 
-  /* "PETSc/KSP.pyx":112
+  /* "PETSc/KSP.pyx":113
  * 
  *     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_ERR(35, 112, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPDestroy((&__pyx_v_self->ksp))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(35, 113, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":113
+  /* "PETSc/KSP.pyx":114
  *     def destroy(self):
  *         CHKERR( KSPDestroy(&self.ksp) )
  *         return self             # <<<<<<<<<<<<<<
@@ -148249,7 +157245,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6destroy(struct PyPetscKSPObject
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":111
+  /* "PETSc/KSP.pyx":112
  *         CHKERR( KSPView(self.ksp, vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -148267,7 +157263,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6destroy(struct PyPetscKSPObject
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":115
+/* "PETSc/KSP.pyx":116
  *         return self
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
@@ -148292,6 +157288,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_9create(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -148304,11 +157301,12 @@ 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_ERR(35, 115, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(35, 116, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -148317,7 +157315,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_ERR(35, 115, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 116, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -148339,17 +157337,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_8create(struct PyPetscKSPObject
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("create", 0);
 
-  /* "PETSc/KSP.pyx":116
+  /* "PETSc/KSP.pyx":117
  * 
  *     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_ERR(35, 116, __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, 117, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/KSP.pyx":117
+  /* "PETSc/KSP.pyx":118
  *     def create(self, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscKSP newksp = NULL             # <<<<<<<<<<<<<<
@@ -148358,16 +157356,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_8create(struct PyPetscKSPObject
  */
   __pyx_v_newksp = NULL;
 
-  /* "PETSc/KSP.pyx":118
+  /* "PETSc/KSP.pyx":119
  *         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_ERR(35, 118, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPCreate(__pyx_v_ccomm, (&__pyx_v_newksp))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(35, 119, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":119
+  /* "PETSc/KSP.pyx":120
  *         cdef PetscKSP newksp = NULL
  *         CHKERR( KSPCreate(ccomm, &newksp) )
  *         PetscCLEAR(self.obj); self.ksp = newksp             # <<<<<<<<<<<<<<
@@ -148377,7 +157375,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":120
+  /* "PETSc/KSP.pyx":121
  *         CHKERR( KSPCreate(ccomm, &newksp) )
  *         PetscCLEAR(self.obj); self.ksp = newksp
  *         return self             # <<<<<<<<<<<<<<
@@ -148389,7 +157387,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_8create(struct PyPetscKSPObject
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":115
+  /* "PETSc/KSP.pyx":116
  *         return self
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
@@ -148407,7 +157405,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_8create(struct PyPetscKSPObject
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":122
+/* "PETSc/KSP.pyx":123
  *         return self
  * 
  *     def setType(self, ksp_type):             # <<<<<<<<<<<<<<
@@ -148431,6 +157429,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_11setType(PyObject *__pyx_v_self
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -148441,7 +157440,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_ERR(35, 122, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) __PYX_ERR(35, 123, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -148452,7 +157451,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_ERR(35, 122, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 123, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -148474,7 +157473,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_10setType(struct PyPetscKSPObjec
   __Pyx_RefNannySetupContext("setType", 0);
   __Pyx_INCREF(__pyx_v_ksp_type);
 
-  /* "PETSc/KSP.pyx":123
+  /* "PETSc/KSP.pyx":124
  * 
  *     def setType(self, ksp_type):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -148483,28 +157482,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_10setType(struct PyPetscKSPObjec
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/KSP.pyx":124
+  /* "PETSc/KSP.pyx":125
  *     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_ERR(35, 124, __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, 125, __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":125
+  /* "PETSc/KSP.pyx":126
  *         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_ERR(35, 125, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetType(__pyx_v_self->ksp, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(35, 126, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":122
+  /* "PETSc/KSP.pyx":123
  *         return self
  * 
  *     def setType(self, ksp_type):             # <<<<<<<<<<<<<<
@@ -148526,7 +157525,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_10setType(struct PyPetscKSPObjec
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":127
+/* "PETSc/KSP.pyx":128
  *         CHKERR( KSPSetType(self.ksp, cval) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
@@ -148559,7 +157558,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_12getType(struct PyPetscKSPObjec
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getType", 0);
 
-  /* "PETSc/KSP.pyx":128
+  /* "PETSc/KSP.pyx":129
  * 
  *     def getType(self):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -148568,16 +157567,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_12getType(struct PyPetscKSPObjec
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/KSP.pyx":129
+  /* "PETSc/KSP.pyx":130
  *     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_ERR(35, 129, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetType(__pyx_v_self->ksp, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(35, 130, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":130
+  /* "PETSc/KSP.pyx":131
  *         cdef const_char *cval = NULL
  *         CHKERR( KSPGetType(self.ksp, &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -148585,13 +157584,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_ERR(35, 130, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 131, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":127
+  /* "PETSc/KSP.pyx":128
  *         CHKERR( KSPSetType(self.ksp, cval) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
@@ -148610,7 +157609,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_12getType(struct PyPetscKSPObjec
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":132
+/* "PETSc/KSP.pyx":133
  *         return bytes2str(cval)
  * 
  *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
@@ -148634,6 +157633,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_15setOptionsPrefix(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -148644,7 +157644,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_ERR(35, 132, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) __PYX_ERR(35, 133, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -148655,7 +157655,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_ERR(35, 132, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 133, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setOptionsPrefix", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -148677,7 +157677,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_14setOptionsPrefix(struct PyPets
   __Pyx_RefNannySetupContext("setOptionsPrefix", 0);
   __Pyx_INCREF(__pyx_v_prefix);
 
-  /* "PETSc/KSP.pyx":133
+  /* "PETSc/KSP.pyx":134
  * 
  *     def setOptionsPrefix(self, prefix):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -148686,28 +157686,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_14setOptionsPrefix(struct PyPets
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/KSP.pyx":134
+  /* "PETSc/KSP.pyx":135
  *     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_ERR(35, 134, __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, 135, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/KSP.pyx":135
+  /* "PETSc/KSP.pyx":136
  *         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_ERR(35, 135, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetOptionsPrefix(__pyx_v_self->ksp, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(35, 136, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":132
+  /* "PETSc/KSP.pyx":133
  *         return bytes2str(cval)
  * 
  *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
@@ -148729,7 +157729,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_14setOptionsPrefix(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":137
+/* "PETSc/KSP.pyx":138
  *         CHKERR( KSPSetOptionsPrefix(self.ksp, cval) )
  * 
  *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
@@ -148762,7 +157762,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_16getOptionsPrefix(struct PyPets
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getOptionsPrefix", 0);
 
-  /* "PETSc/KSP.pyx":138
+  /* "PETSc/KSP.pyx":139
  * 
  *     def getOptionsPrefix(self):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -148771,16 +157771,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_16getOptionsPrefix(struct PyPets
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/KSP.pyx":139
+  /* "PETSc/KSP.pyx":140
  *     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_ERR(35, 139, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetOptionsPrefix(__pyx_v_self->ksp, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(35, 140, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":140
+  /* "PETSc/KSP.pyx":141
  *         cdef const_char *cval = NULL
  *         CHKERR( KSPGetOptionsPrefix(self.ksp, &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -148788,13 +157788,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_ERR(35, 140, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 141, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":137
+  /* "PETSc/KSP.pyx":138
  *         CHKERR( KSPSetOptionsPrefix(self.ksp, cval) )
  * 
  *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
@@ -148813,7 +157813,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_16getOptionsPrefix(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":142
+/* "PETSc/KSP.pyx":143
  *         return bytes2str(cval)
  * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
@@ -148844,16 +157844,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_18setFromOptions(struct PyPetscK
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setFromOptions", 0);
 
-  /* "PETSc/KSP.pyx":143
+  /* "PETSc/KSP.pyx":144
  * 
  *     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_ERR(35, 143, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetFromOptions(__pyx_v_self->ksp)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(35, 144, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":142
+  /* "PETSc/KSP.pyx":143
  *         return bytes2str(cval)
  * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
@@ -148873,7 +157873,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_18setFromOptions(struct PyPetscK
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":147
+/* "PETSc/KSP.pyx":148
  *     # --- application context ---
  * 
  *     def setAppCtx(self, appctx):             # <<<<<<<<<<<<<<
@@ -148897,6 +157897,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_21setAppCtx(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -148907,7 +157908,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_ERR(35, 147, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setAppCtx") < 0)) __PYX_ERR(35, 148, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -148918,7 +157919,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_ERR(35, 147, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setAppCtx", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 148, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setAppCtx", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -148937,18 +157938,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_20setAppCtx(struct PyPetscKSPObj
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("setAppCtx", 0);
 
-  /* "PETSc/KSP.pyx":148
+  /* "PETSc/KSP.pyx":149
  * 
  *     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), ((char *)"__appctx__"), __pyx_v_appctx); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 148, __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, 149, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/KSP.pyx":147
+  /* "PETSc/KSP.pyx":148
  *     # --- application context ---
  * 
  *     def setAppCtx(self, appctx):             # <<<<<<<<<<<<<<
@@ -148969,7 +157970,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_20setAppCtx(struct PyPetscKSPObj
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":150
+/* "PETSc/KSP.pyx":151
  *         self.set_attr('__appctx__', appctx)
  * 
  *     def getAppCtx(self):             # <<<<<<<<<<<<<<
@@ -149000,7 +158001,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_22getAppCtx(struct PyPetscKSPObj
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("getAppCtx", 0);
 
-  /* "PETSc/KSP.pyx":151
+  /* "PETSc/KSP.pyx":152
  * 
  *     def getAppCtx(self):
  *         return self.get_attr('__appctx__')             # <<<<<<<<<<<<<<
@@ -149008,13 +158009,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), ((char *)"__appctx__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 151, __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, 152, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":150
+  /* "PETSc/KSP.pyx":151
  *         self.set_attr('__appctx__', appctx)
  * 
  *     def getAppCtx(self):             # <<<<<<<<<<<<<<
@@ -149033,7 +158034,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_22getAppCtx(struct PyPetscKSPObj
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":155
+/* "PETSc/KSP.pyx":156
  *     # --- discretization space ---
  * 
  *     def getDM(self):             # <<<<<<<<<<<<<<
@@ -149068,7 +158069,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_24getDM(struct PyPetscKSPObject
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("getDM", 0);
 
-  /* "PETSc/KSP.pyx":156
+  /* "PETSc/KSP.pyx":157
  * 
  *     def getDM(self):
  *         cdef PetscDM newdm = NULL             # <<<<<<<<<<<<<<
@@ -149077,32 +158078,32 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_24getDM(struct PyPetscKSPObject
  */
   __pyx_v_newdm = NULL;
 
-  /* "PETSc/KSP.pyx":157
+  /* "PETSc/KSP.pyx":158
  *     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_ERR(35, 157, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetDM(__pyx_v_self->ksp, (&__pyx_v_newdm))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(35, 158, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":158
+  /* "PETSc/KSP.pyx":159
  *         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_ERR(35, 158, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_newdm)); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 159, __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_ERR(35, 158, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 159, __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_ERR(35, 158, __pyx_L1_error)
+  if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(35, 159, __pyx_L1_error)
   __pyx_v_dm = ((struct PyPetscDMObject *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/KSP.pyx":159
+  /* "PETSc/KSP.pyx":160
  *         CHKERR( KSPGetDM(self.ksp, &newdm) )
  *         cdef DM dm = subtype_DM(newdm)()
  *         dm.dm = newdm             # <<<<<<<<<<<<<<
@@ -149111,7 +158112,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_24getDM(struct PyPetscKSPObject
  */
   __pyx_v_dm->dm = __pyx_v_newdm;
 
-  /* "PETSc/KSP.pyx":160
+  /* "PETSc/KSP.pyx":161
  *         cdef DM dm = subtype_DM(newdm)()
  *         dm.dm = newdm
  *         PetscINCREF(dm.obj)             # <<<<<<<<<<<<<<
@@ -149120,19 +158121,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_24getDM(struct PyPetscKSPObject
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_dm->__pyx_base.obj);
 
-  /* "PETSc/KSP.pyx":161
+  /* "PETSc/KSP.pyx":162
  *         dm.dm = newdm
  *         PetscINCREF(dm.obj)
  *         return dm             # <<<<<<<<<<<<<<
  * 
- *     def setDM(self, DM dm not None):
+ *     def setDM(self, DM dm):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_dm));
   __pyx_r = ((PyObject *)__pyx_v_dm);
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":155
+  /* "PETSc/KSP.pyx":156
  *     # --- discretization space ---
  * 
  *     def getDM(self):             # <<<<<<<<<<<<<<
@@ -149153,10 +158154,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_24getDM(struct PyPetscKSPObject
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":163
+/* "PETSc/KSP.pyx":164
  *         return dm
  * 
- *     def setDM(self, DM dm not None):             # <<<<<<<<<<<<<<
+ *     def setDM(self, DM dm):             # <<<<<<<<<<<<<<
  *         CHKERR( KSPSetDM(self.ksp, dm.dm) )
  * 
  */
@@ -149177,6 +158178,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_27setDM(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -149187,7 +158189,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_ERR(35, 163, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDM") < 0)) __PYX_ERR(35, 164, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -149198,13 +158200,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_ERR(35, 163, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setDM", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 164, __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_ERR(35, 163, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dm), __pyx_ptype_8petsc4py_5PETSc_DM, 0, "dm", 0))) __PYX_ERR(35, 164, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_26setDM(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_dm);
 
   /* function exit code */
@@ -149222,19 +158224,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_26setDM(struct PyPetscKSPObject
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setDM", 0);
 
-  /* "PETSc/KSP.pyx":164
+  /* "PETSc/KSP.pyx":165
  * 
- *     def setDM(self, DM dm not None):
+ *     def setDM(self, DM dm):
  *         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_ERR(35, 164, __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 == ((int)-1))) __PYX_ERR(35, 165, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":163
+  /* "PETSc/KSP.pyx":164
  *         return dm
  * 
- *     def setDM(self, DM dm not None):             # <<<<<<<<<<<<<<
+ *     def setDM(self, DM dm):             # <<<<<<<<<<<<<<
  *         CHKERR( KSPSetDM(self.ksp, dm.dm) )
  * 
  */
@@ -149251,7 +158253,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_26setDM(struct PyPetscKSPObject
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":166
+/* "PETSc/KSP.pyx":167
  *         CHKERR( KSPSetDM(self.ksp, dm.dm) )
  * 
  *     def setDMActive(self, bint flag):             # <<<<<<<<<<<<<<
@@ -149275,6 +158277,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_29setDMActive(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -149285,18 +158288,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_ERR(35, 166, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDMActive") < 0)) __PYX_ERR(35, 167, __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_ERR(35, 166, __pyx_L3_error)
+    __pyx_v_flag = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_flag == (int)-1) && PyErr_Occurred())) __PYX_ERR(35, 167, __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_ERR(35, 166, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setDMActive", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 167, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setDMActive", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -149317,7 +158320,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_28setDMActive(struct PyPetscKSPO
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setDMActive", 0);
 
-  /* "PETSc/KSP.pyx":167
+  /* "PETSc/KSP.pyx":168
  * 
  *     def setDMActive(self, bint flag):
  *         cdef PetscBool cflag = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -149326,7 +158329,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_28setDMActive(struct PyPetscKSPO
  */
   __pyx_v_cflag = PETSC_FALSE;
 
-  /* "PETSc/KSP.pyx":168
+  /* "PETSc/KSP.pyx":169
  *     def setDMActive(self, bint flag):
  *         cdef PetscBool cflag = PETSC_FALSE
  *         if flag: cflag = PETSC_TRUE             # <<<<<<<<<<<<<<
@@ -149338,16 +158341,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_28setDMActive(struct PyPetscKSPO
     __pyx_v_cflag = PETSC_TRUE;
   }
 
-  /* "PETSc/KSP.pyx":169
+  /* "PETSc/KSP.pyx":170
  *         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_ERR(35, 169, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetDMActive(__pyx_v_self->ksp, __pyx_v_cflag)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(35, 170, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":166
+  /* "PETSc/KSP.pyx":167
  *         CHKERR( KSPSetDM(self.ksp, dm.dm) )
  * 
  *     def setDMActive(self, bint flag):             # <<<<<<<<<<<<<<
@@ -149367,7 +158370,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_28setDMActive(struct PyPetscKSPO
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":173
+/* "PETSc/KSP.pyx":174
  *     # --- operators and preconditioner ---
  * 
  *     def setComputeRHS(self, rhs, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -149395,8 +158398,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_31setComputeRHS(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -149405,11 +158411,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_31setComputeRHS(PyObject *__pyx_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rhs)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -149417,12 +158425,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_31setComputeRHS(PyObject *__pyx_
         }
       }
       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)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setComputeRHS") < 0)) __PYX_ERR(35, 174, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -149434,7 +158444,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_31setComputeRHS(PyObject *__pyx_
   }
   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_RaiseArgtupleInvalid("setComputeRHS", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 174, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setComputeRHS", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -149459,7 +158469,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_30setComputeRHS(struct PyPetscKS
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/KSP.pyx":174
+  /* "PETSc/KSP.pyx":175
  * 
  *     def setComputeRHS(self, rhs, args=None, kargs=None):
  *         if args  is None: args  = ()             # <<<<<<<<<<<<<<
@@ -149473,7 +158483,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_30setComputeRHS(struct PyPetscKS
     __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
   }
 
-  /* "PETSc/KSP.pyx":175
+  /* "PETSc/KSP.pyx":176
  *     def setComputeRHS(self, rhs, args=None, kargs=None):
  *         if args  is None: args  = ()
  *         if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -149483,20 +158493,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_30setComputeRHS(struct PyPetscKS
   __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_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 176, __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
+  /* "PETSc/KSP.pyx":177
  *         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_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 177, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_rhs);
   __Pyx_GIVEREF(__pyx_v_rhs);
@@ -149510,27 +158520,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_30setComputeRHS(struct PyPetscKS
   __pyx_v_context = ((PyObject*)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/KSP.pyx":177
+  /* "PETSc/KSP.pyx":178
  *         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_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, 178, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/KSP.pyx":178
+  /* "PETSc/KSP.pyx":179
  *         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)
+  __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 == ((int)-1))) __PYX_ERR(35, 179, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":173
+  /* "PETSc/KSP.pyx":174
  *     # --- operators and preconditioner ---
  * 
  *     def setComputeRHS(self, rhs, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -149554,7 +158564,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_30setComputeRHS(struct PyPetscKS
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":180
+/* "PETSc/KSP.pyx":181
  *         CHKERR( KSPSetComputeRHS(self.ksp, KSP_ComputeRHS, <void*>context) )
  * 
  *     def setComputeOperators(self, operators, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -149582,8 +158592,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_33setComputeOperators(PyObject *
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -149592,11 +158605,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_33setComputeOperators(PyObject *
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_operators)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -149604,12 +158619,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_33setComputeOperators(PyObject *
         }
       }
       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)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setComputeOperators") < 0)) __PYX_ERR(35, 181, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -149621,7 +158638,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_33setComputeOperators(PyObject *
   }
   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_RaiseArgtupleInvalid("setComputeOperators", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 181, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setComputeOperators", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -149646,7 +158663,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_32setComputeOperators(struct PyP
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/KSP.pyx":181
+  /* "PETSc/KSP.pyx":182
  * 
  *     def setComputeOperators(self, operators, args=None, kargs=None):
  *         if args  is None: args  = ()             # <<<<<<<<<<<<<<
@@ -149660,7 +158677,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_32setComputeOperators(struct PyP
     __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
   }
 
-  /* "PETSc/KSP.pyx":182
+  /* "PETSc/KSP.pyx":183
  *     def setComputeOperators(self, operators, args=None, kargs=None):
  *         if args  is None: args  = ()
  *         if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -149670,20 +158687,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_32setComputeOperators(struct PyP
   __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_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 183, __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
+  /* "PETSc/KSP.pyx":184
  *         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_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 184, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_operators);
   __Pyx_GIVEREF(__pyx_v_operators);
@@ -149697,27 +158714,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_32setComputeOperators(struct PyP
   __pyx_v_context = ((PyObject*)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/KSP.pyx":184
+  /* "PETSc/KSP.pyx":185
  *         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_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, 185, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/KSP.pyx":185
+  /* "PETSc/KSP.pyx":186
  *         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)
+  __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 == ((int)-1))) __PYX_ERR(35, 186, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":180
+  /* "PETSc/KSP.pyx":181
  *         CHKERR( KSPSetComputeRHS(self.ksp, KSP_ComputeRHS, <void*>context) )
  * 
  *     def setComputeOperators(self, operators, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -149741,7 +158758,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_32setComputeOperators(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":187
+/* "PETSc/KSP.pyx":188
  *         CHKERR( KSPSetComputeOperators(self.ksp, KSP_ComputeOps, <void*>context) )
  * 
  *     def setOperators(self, Mat A=None, Mat P=None):             # <<<<<<<<<<<<<<
@@ -149768,7 +158785,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_35setOperators(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -149779,6 +158798,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_35setOperators(PyObject *__pyx_v
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_A);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_P);
@@ -149786,12 +158806,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_35setOperators(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOperators") < 0)) __PYX_ERR(35, 187, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOperators") < 0)) __PYX_ERR(35, 188, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -149801,14 +158823,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_35setOperators(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_ERR(35, 187, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setOperators", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 188, __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_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)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_A), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "A", 0))) __PYX_ERR(35, 188, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_P), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "P", 0))) __PYX_ERR(35, 188, __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 */
@@ -149831,7 +158853,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_34setOperators(struct PyPetscKSP
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("setOperators", 0);
 
-  /* "PETSc/KSP.pyx":188
+  /* "PETSc/KSP.pyx":189
  * 
  *     def setOperators(self, Mat A=None, Mat P=None):
  *         cdef PetscMat amat=NULL             # <<<<<<<<<<<<<<
@@ -149840,7 +158862,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_34setOperators(struct PyPetscKSP
  */
   __pyx_v_amat = NULL;
 
-  /* "PETSc/KSP.pyx":189
+  /* "PETSc/KSP.pyx":190
  *     def setOperators(self, Mat A=None, Mat P=None):
  *         cdef PetscMat amat=NULL
  *         if A is not None: amat = A.mat             # <<<<<<<<<<<<<<
@@ -149854,7 +158876,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_34setOperators(struct PyPetscKSP
     __pyx_v_amat = __pyx_t_3;
   }
 
-  /* "PETSc/KSP.pyx":190
+  /* "PETSc/KSP.pyx":191
  *         cdef PetscMat amat=NULL
  *         if A is not None: amat = A.mat
  *         cdef PetscMat pmat=amat             # <<<<<<<<<<<<<<
@@ -149863,7 +158885,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_34setOperators(struct PyPetscKSP
  */
   __pyx_v_pmat = __pyx_v_amat;
 
-  /* "PETSc/KSP.pyx":191
+  /* "PETSc/KSP.pyx":192
  *         if A is not None: amat = A.mat
  *         cdef PetscMat pmat=amat
  *         if P is not None: pmat = P.mat             # <<<<<<<<<<<<<<
@@ -149877,16 +158899,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_34setOperators(struct PyPetscKSP
     __pyx_v_pmat = __pyx_t_3;
   }
 
-  /* "PETSc/KSP.pyx":192
+  /* "PETSc/KSP.pyx":193
  *         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_ERR(35, 192, __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 == ((int)-1))) __PYX_ERR(35, 193, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":187
+  /* "PETSc/KSP.pyx":188
  *         CHKERR( KSPSetComputeOperators(self.ksp, KSP_ComputeOps, <void*>context) )
  * 
  *     def setOperators(self, Mat A=None, Mat P=None):             # <<<<<<<<<<<<<<
@@ -149906,7 +158928,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_34setOperators(struct PyPetscKSP
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":194
+/* "PETSc/KSP.pyx":195
  *         CHKERR( KSPSetOperators(self.ksp, amat, pmat) )
  * 
  *     def getOperators(self):             # <<<<<<<<<<<<<<
@@ -149940,32 +158962,32 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_36getOperators(struct PyPetscKSP
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getOperators", 0);
 
-  /* "PETSc/KSP.pyx":195
+  /* "PETSc/KSP.pyx":196
  * 
  *     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 *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 195, __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, 196, __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 *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 195, __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, 196, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_P = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/KSP.pyx":196
+  /* "PETSc/KSP.pyx":197
  *     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_ERR(35, 196, __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 == ((int)-1))) __PYX_ERR(35, 197, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":197
+  /* "PETSc/KSP.pyx":198
  *         cdef Mat A = Mat(), P = Mat()
  *         CHKERR( KSPGetOperators(self.ksp, &A.mat, &P.mat) )
  *         PetscINCREF(A.obj)             # <<<<<<<<<<<<<<
@@ -149974,7 +158996,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_36getOperators(struct PyPetscKSP
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_A->__pyx_base.obj);
 
-  /* "PETSc/KSP.pyx":198
+  /* "PETSc/KSP.pyx":199
  *         CHKERR( KSPGetOperators(self.ksp, &A.mat, &P.mat) )
  *         PetscINCREF(A.obj)
  *         PetscINCREF(P.obj)             # <<<<<<<<<<<<<<
@@ -149983,15 +159005,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_36getOperators(struct PyPetscKSP
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_P->__pyx_base.obj);
 
-  /* "PETSc/KSP.pyx":199
+  /* "PETSc/KSP.pyx":200
  *         PetscINCREF(A.obj)
  *         PetscINCREF(P.obj)
  *         return (A, P)             # <<<<<<<<<<<<<<
  * 
- *     def setPC(self, PC pc not None):
+ *     def setPC(self, PC pc):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 199, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 200, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_A));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_A));
@@ -150003,7 +159025,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_36getOperators(struct PyPetscKSP
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":194
+  /* "PETSc/KSP.pyx":195
  *         CHKERR( KSPSetOperators(self.ksp, amat, pmat) )
  * 
  *     def getOperators(self):             # <<<<<<<<<<<<<<
@@ -150024,10 +159046,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_36getOperators(struct PyPetscKSP
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":201
+/* "PETSc/KSP.pyx":202
  *         return (A, P)
  * 
- *     def setPC(self, PC pc not None):             # <<<<<<<<<<<<<<
+ *     def setPC(self, PC pc):             # <<<<<<<<<<<<<<
  *         CHKERR( KSPSetPC(self.ksp, pc.pc) )
  * 
  */
@@ -150048,6 +159070,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_39setPC(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -150058,7 +159081,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_39setPC(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_ERR(35, 201, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPC") < 0)) __PYX_ERR(35, 202, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -150069,13 +159092,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_39setPC(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_ERR(35, 201, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setPC", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 202, __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_ERR(35, 201, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_pc), __pyx_ptype_8petsc4py_5PETSc_PC, 0, "pc", 0))) __PYX_ERR(35, 202, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_38setPC(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_pc);
 
   /* function exit code */
@@ -150093,19 +159116,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_38setPC(struct PyPetscKSPObject
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setPC", 0);
 
-  /* "PETSc/KSP.pyx":202
+  /* "PETSc/KSP.pyx":203
  * 
- *     def setPC(self, PC pc not None):
+ *     def setPC(self, PC pc):
  *         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_ERR(35, 202, __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 == ((int)-1))) __PYX_ERR(35, 203, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":201
+  /* "PETSc/KSP.pyx":202
  *         return (A, P)
  * 
- *     def setPC(self, PC pc not None):             # <<<<<<<<<<<<<<
+ *     def setPC(self, PC pc):             # <<<<<<<<<<<<<<
  *         CHKERR( KSPSetPC(self.ksp, pc.pc) )
  * 
  */
@@ -150122,7 +159145,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_38setPC(struct PyPetscKSPObject
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":204
+/* "PETSc/KSP.pyx":205
  *         CHKERR( KSPSetPC(self.ksp, pc.pc) )
  * 
  *     def getPC(self):             # <<<<<<<<<<<<<<
@@ -150155,28 +159178,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_40getPC(struct PyPetscKSPObject
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getPC", 0);
 
-  /* "PETSc/KSP.pyx":205
+  /* "PETSc/KSP.pyx":206
  * 
  *     def getPC(self):
  *         cdef PC pc = PC()             # <<<<<<<<<<<<<<
  *         CHKERR( KSPGetPC(self.ksp, &pc.pc) )
  *         PetscINCREF(pc.obj)
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 206, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_pc = ((struct PyPetscPCObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/KSP.pyx":206
+  /* "PETSc/KSP.pyx":207
  *     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_ERR(35, 206, __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 == ((int)-1))) __PYX_ERR(35, 207, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":207
+  /* "PETSc/KSP.pyx":208
  *         cdef PC pc = PC()
  *         CHKERR( KSPGetPC(self.ksp, &pc.pc) )
  *         PetscINCREF(pc.obj)             # <<<<<<<<<<<<<<
@@ -150185,7 +159208,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_40getPC(struct PyPetscKSPObject
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_pc->__pyx_base.obj);
 
-  /* "PETSc/KSP.pyx":208
+  /* "PETSc/KSP.pyx":209
  *         CHKERR( KSPGetPC(self.ksp, &pc.pc) )
  *         PetscINCREF(pc.obj)
  *         return pc             # <<<<<<<<<<<<<<
@@ -150197,7 +159220,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_40getPC(struct PyPetscKSPObject
   __pyx_r = ((PyObject *)__pyx_v_pc);
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":204
+  /* "PETSc/KSP.pyx":205
  *         CHKERR( KSPSetPC(self.ksp, pc.pc) )
  * 
  *     def getPC(self):             # <<<<<<<<<<<<<<
@@ -150217,7 +159240,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_40getPC(struct PyPetscKSPObject
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":212
+/* "PETSc/KSP.pyx":213
  *     # --- tolerances and convergence ---
  * 
  *     def setTolerances(self, rtol=None, atol=None, divtol=None, max_it=None):             # <<<<<<<<<<<<<<
@@ -150248,9 +159271,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_43setTolerances(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -150261,16 +159288,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_43setTolerances(PyObject *__pyx_
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rtol);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_atol);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_divtol);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_max_it);
@@ -150278,14 +159308,18 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_43setTolerances(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTolerances") < 0)) __PYX_ERR(35, 212, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTolerances") < 0)) __PYX_ERR(35, 213, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -150297,7 +159331,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_43setTolerances(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setTolerances", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 212, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setTolerances", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 213, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -150324,7 +159358,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_42setTolerances(struct PyPetscKS
   int __pyx_t_5;
   __Pyx_RefNannySetupContext("setTolerances", 0);
 
-  /* "PETSc/KSP.pyx":214
+  /* "PETSc/KSP.pyx":215
  *     def setTolerances(self, rtol=None, atol=None, divtol=None, max_it=None):
  *         cdef PetscReal crtol, catol, cdivtol
  *         crtol = catol = cdivtol = PETSC_DEFAULT;             # <<<<<<<<<<<<<<
@@ -150335,7 +159369,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_42setTolerances(struct PyPetscKS
   __pyx_v_catol = PETSC_DEFAULT;
   __pyx_v_cdivtol = PETSC_DEFAULT;
 
-  /* "PETSc/KSP.pyx":215
+  /* "PETSc/KSP.pyx":216
  *         cdef PetscReal crtol, catol, cdivtol
  *         crtol = catol = cdivtol = PETSC_DEFAULT;
  *         if rtol   is not None: crtol   = asReal(rtol)             # <<<<<<<<<<<<<<
@@ -150345,11 +159379,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_42setTolerances(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_ERR(35, 215, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_rtol); if (unlikely(__pyx_t_3 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(35, 216, __pyx_L1_error)
     __pyx_v_crtol = __pyx_t_3;
   }
 
-  /* "PETSc/KSP.pyx":216
+  /* "PETSc/KSP.pyx":217
  *         crtol = catol = cdivtol = PETSC_DEFAULT;
  *         if rtol   is not None: crtol   = asReal(rtol)
  *         if atol   is not None: catol   = asReal(atol)             # <<<<<<<<<<<<<<
@@ -150359,11 +159393,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_42setTolerances(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_ERR(35, 216, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_atol); if (unlikely(__pyx_t_3 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(35, 217, __pyx_L1_error)
     __pyx_v_catol = __pyx_t_3;
   }
 
-  /* "PETSc/KSP.pyx":217
+  /* "PETSc/KSP.pyx":218
  *         if rtol   is not None: crtol   = asReal(rtol)
  *         if atol   is not None: catol   = asReal(atol)
  *         if divtol is not None: cdivtol = asReal(divtol)             # <<<<<<<<<<<<<<
@@ -150373,11 +159407,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_42setTolerances(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_ERR(35, 217, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_divtol); if (unlikely(__pyx_t_3 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(35, 218, __pyx_L1_error)
     __pyx_v_cdivtol = __pyx_t_3;
   }
 
-  /* "PETSc/KSP.pyx":218
+  /* "PETSc/KSP.pyx":219
  *         if atol   is not None: catol   = asReal(atol)
  *         if divtol is not None: cdivtol = asReal(divtol)
  *         cdef PetscInt cmaxits = PETSC_DEFAULT             # <<<<<<<<<<<<<<
@@ -150386,7 +159420,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_42setTolerances(struct PyPetscKS
  */
   __pyx_v_cmaxits = PETSC_DEFAULT;
 
-  /* "PETSc/KSP.pyx":219
+  /* "PETSc/KSP.pyx":220
  *         if divtol is not None: cdivtol = asReal(divtol)
  *         cdef PetscInt cmaxits = PETSC_DEFAULT
  *         if max_it is not None: cmaxits = asInt(max_it)             # <<<<<<<<<<<<<<
@@ -150396,20 +159430,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_42setTolerances(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 == -1L && PyErr_Occurred())) __PYX_ERR(35, 219, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_max_it); if (unlikely(__pyx_t_4 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(35, 220, __pyx_L1_error)
     __pyx_v_cmaxits = __pyx_t_4;
   }
 
-  /* "PETSc/KSP.pyx":220
+  /* "PETSc/KSP.pyx":221
  *         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_ERR(35, 220, __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 == ((int)-1))) __PYX_ERR(35, 221, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":212
+  /* "PETSc/KSP.pyx":213
  *     # --- tolerances and convergence ---
  * 
  *     def setTolerances(self, rtol=None, atol=None, divtol=None, max_it=None):             # <<<<<<<<<<<<<<
@@ -150429,7 +159463,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_42setTolerances(struct PyPetscKS
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":222
+/* "PETSc/KSP.pyx":223
  *         CHKERR( KSPSetTolerances(self.ksp, crtol, catol, cdivtol, cmaxits) )
  * 
  *     def getTolerances(self):             # <<<<<<<<<<<<<<
@@ -150469,7 +159503,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_44getTolerances(struct PyPetscKS
   PyObject *__pyx_t_6 = NULL;
   __Pyx_RefNannySetupContext("getTolerances", 0);
 
-  /* "PETSc/KSP.pyx":223
+  /* "PETSc/KSP.pyx":224
  * 
  *     def getTolerances(self):
  *         cdef PetscReal crtol=0, catol=0, cdivtol=0             # <<<<<<<<<<<<<<
@@ -150480,7 +159514,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_44getTolerances(struct PyPetscKS
   __pyx_v_catol = 0.0;
   __pyx_v_cdivtol = 0.0;
 
-  /* "PETSc/KSP.pyx":224
+  /* "PETSc/KSP.pyx":225
  *     def getTolerances(self):
  *         cdef PetscReal crtol=0, catol=0, cdivtol=0
  *         cdef PetscInt cmaxits=0             # <<<<<<<<<<<<<<
@@ -150489,16 +159523,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_44getTolerances(struct PyPetscKS
  */
   __pyx_v_cmaxits = 0;
 
-  /* "PETSc/KSP.pyx":225
+  /* "PETSc/KSP.pyx":226
  *         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_ERR(35, 225, __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 == ((int)-1))) __PYX_ERR(35, 226, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":226
+  /* "PETSc/KSP.pyx":227
  *         cdef PetscInt cmaxits=0
  *         CHKERR( KSPGetTolerances(self.ksp, &crtol, &catol, &cdivtol, &cmaxits) )
  *         return (toReal(crtol), toReal(catol), toReal(cdivtol), toInt(cmaxits))             # <<<<<<<<<<<<<<
@@ -150506,15 +159540,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_44getTolerances(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_ERR(35, 226, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_crtol); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 227, __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_ERR(35, 226, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_catol); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 227, __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_ERR(35, 226, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_cdivtol); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 227, __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_ERR(35, 226, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_cmaxits); if (unlikely(!__pyx_t_5)) __PYX_ERR(35, 227, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(35, 226, __pyx_L1_error)
+  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(35, 227, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
@@ -150532,7 +159566,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_44getTolerances(struct PyPetscKS
   __pyx_t_6 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":222
+  /* "PETSc/KSP.pyx":223
  *         CHKERR( KSPSetTolerances(self.ksp, crtol, catol, cdivtol, cmaxits) )
  * 
  *     def getTolerances(self):             # <<<<<<<<<<<<<<
@@ -150555,7 +159589,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_44getTolerances(struct PyPetscKS
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":228
+/* "PETSc/KSP.pyx":229
  *         return (toReal(crtol), toReal(catol), toReal(cdivtol), toInt(cmaxits))
  * 
  *     def setConvergenceTest(self, converged, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -150583,8 +159617,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_47setConvergenceTest(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -150593,11 +159630,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_47setConvergenceTest(PyObject *_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_converged)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -150605,12 +159644,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_47setConvergenceTest(PyObject *_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConvergenceTest") < 0)) __PYX_ERR(35, 228, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConvergenceTest") < 0)) __PYX_ERR(35, 229, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -150622,7 +159663,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_47setConvergenceTest(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setConvergenceTest", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 228, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setConvergenceTest", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 229, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setConvergenceTest", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -150649,7 +159690,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_46setConvergenceTest(struct PyPe
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/KSP.pyx":229
+  /* "PETSc/KSP.pyx":230
  * 
  *     def setConvergenceTest(self, converged, args=None, kargs=None):
  *         cdef PetscKSPNormType normtype = KSP_NORM_NONE             # <<<<<<<<<<<<<<
@@ -150658,7 +159699,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_46setConvergenceTest(struct PyPe
  */
   __pyx_v_normtype = KSP_NORM_NONE;
 
-  /* "PETSc/KSP.pyx":230
+  /* "PETSc/KSP.pyx":231
  *     def setConvergenceTest(self, converged, args=None, kargs=None):
  *         cdef PetscKSPNormType normtype = KSP_NORM_NONE
  *         cdef void* cctx = NULL             # <<<<<<<<<<<<<<
@@ -150667,7 +159708,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_46setConvergenceTest(struct PyPe
  */
   __pyx_v_cctx = NULL;
 
-  /* "PETSc/KSP.pyx":231
+  /* "PETSc/KSP.pyx":232
  *         cdef PetscKSPNormType normtype = KSP_NORM_NONE
  *         cdef void* cctx = NULL
  *         if converged is not None:             # <<<<<<<<<<<<<<
@@ -150678,16 +159719,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_46setConvergenceTest(struct PyPe
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/KSP.pyx":232
+    /* "PETSc/KSP.pyx":233
  *         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_ERR(35, 232, __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 == ((int)-1))) __PYX_ERR(35, 233, __pyx_L1_error)
 
-    /* "PETSc/KSP.pyx":234
+    /* "PETSc/KSP.pyx":235
  *             CHKERR( KSPSetConvergenceTest(
  *                     self.ksp, KSP_Converged, NULL, NULL) )
  *             if args is None: args = ()             # <<<<<<<<<<<<<<
@@ -150701,7 +159742,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_46setConvergenceTest(struct PyPe
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
     }
 
-    /* "PETSc/KSP.pyx":235
+    /* "PETSc/KSP.pyx":236
  *                     self.ksp, KSP_Converged, NULL, NULL) )
  *             if args is None: args = ()
  *             if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -150711,20 +159752,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_46setConvergenceTest(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_ERR(35, 235, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 236, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_4);
       __pyx_t_4 = 0;
     }
 
-    /* "PETSc/KSP.pyx":236
+    /* "PETSc/KSP.pyx":237
  *             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_ERR(35, 236, __pyx_L1_error)
+    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 237, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_v_converged);
     __Pyx_GIVEREF(__pyx_v_converged);
@@ -150735,12 +159776,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_46setConvergenceTest(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), ((char *)"__converged__"), __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(35, 236, __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, 237, __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
+    /* "PETSc/KSP.pyx":232
  *         cdef PetscKSPNormType normtype = KSP_NORM_NONE
  *         cdef void* cctx = NULL
  *         if converged is not None:             # <<<<<<<<<<<<<<
@@ -150750,7 +159791,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_46setConvergenceTest(struct PyPe
     goto __pyx_L3;
   }
 
-  /* "PETSc/KSP.pyx":238
+  /* "PETSc/KSP.pyx":239
  *             self.set_attr('__converged__', (converged, args, kargs))
  *         else:
  *             CHKERR( KSPGetNormType(self.ksp, &normtype) )             # <<<<<<<<<<<<<<
@@ -150758,9 +159799,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_46setConvergenceTest(struct PyPe
  *                 CHKERR( KSPConvergedDefaultCreate(&cctx) )
  */
   /*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)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetNormType(__pyx_v_self->ksp, (&__pyx_v_normtype))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(35, 239, __pyx_L1_error)
 
-    /* "PETSc/KSP.pyx":239
+    /* "PETSc/KSP.pyx":240
  *         else:
  *             CHKERR( KSPGetNormType(self.ksp, &normtype) )
  *             if normtype != KSP_NORM_NONE:             # <<<<<<<<<<<<<<
@@ -150770,25 +159811,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_46setConvergenceTest(struct PyPe
     __pyx_t_2 = ((__pyx_v_normtype != KSP_NORM_NONE) != 0);
     if (__pyx_t_2) {
 
-      /* "PETSc/KSP.pyx":240
+      /* "PETSc/KSP.pyx":241
  *             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_ERR(35, 240, __pyx_L1_error)
+      __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPConvergedDefaultCreate((&__pyx_v_cctx))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(35, 241, __pyx_L1_error)
 
-      /* "PETSc/KSP.pyx":241
+      /* "PETSc/KSP.pyx":242
  *             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_ERR(35, 241, __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 == ((int)-1))) __PYX_ERR(35, 242, __pyx_L1_error)
 
-      /* "PETSc/KSP.pyx":239
+      /* "PETSc/KSP.pyx":240
  *         else:
  *             CHKERR( KSPGetNormType(self.ksp, &normtype) )
  *             if normtype != KSP_NORM_NONE:             # <<<<<<<<<<<<<<
@@ -150798,7 +159839,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_46setConvergenceTest(struct PyPe
       goto __pyx_L6;
     }
 
-    /* "PETSc/KSP.pyx":245
+    /* "PETSc/KSP.pyx":246
  *                         cctx, KSPConvergedDefaultDestroy) )
  *             else:
  *                 CHKERR( KSPSetConvergenceTest(             # <<<<<<<<<<<<<<
@@ -150807,31 +159848,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_46setConvergenceTest(struct PyPe
  */
     /*else*/ {
 
-      /* "PETSc/KSP.pyx":247
+      /* "PETSc/KSP.pyx":248
  *                 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_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetConvergenceTest(__pyx_v_self->ksp, KSPConvergedSkip, NULL, NULL)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(35, 246, __pyx_L1_error)
     }
     __pyx_L6:;
 
-    /* "PETSc/KSP.pyx":248
+    /* "PETSc/KSP.pyx":249
  *                         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), ((char *)"__converged__"), Py_None); if (unlikely(!__pyx_t_5)) __PYX_ERR(35, 248, __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, 249, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
   __pyx_L3:;
 
-  /* "PETSc/KSP.pyx":228
+  /* "PETSc/KSP.pyx":229
  *         return (toReal(crtol), toReal(catol), toReal(cdivtol), toInt(cmaxits))
  * 
  *     def setConvergenceTest(self, converged, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -150855,7 +159896,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_46setConvergenceTest(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":250
+/* "PETSc/KSP.pyx":251
  *             self.set_attr('__converged__', None)
  * 
  *     def getConvergenceTest(self):             # <<<<<<<<<<<<<<
@@ -150886,7 +159927,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_48getConvergenceTest(struct PyPe
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("getConvergenceTest", 0);
 
-  /* "PETSc/KSP.pyx":251
+  /* "PETSc/KSP.pyx":252
  * 
  *     def getConvergenceTest(self):
  *         return self.get_attr('__converged__')             # <<<<<<<<<<<<<<
@@ -150894,13 +159935,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_48getConvergenceTest(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), ((char *)"__converged__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 251, __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, 252, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":250
+  /* "PETSc/KSP.pyx":251
  *             self.set_attr('__converged__', None)
  * 
  *     def getConvergenceTest(self):             # <<<<<<<<<<<<<<
@@ -150919,7 +159960,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_48getConvergenceTest(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":253
+/* "PETSc/KSP.pyx":254
  *         return self.get_attr('__converged__')
  * 
  *     def callConvergenceTest(self, its, rnorm):             # <<<<<<<<<<<<<<
@@ -150944,7 +159985,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_51callConvergenceTest(PyObject *
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -150953,14 +159996,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_51callConvergenceTest(PyObject *
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_its)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(35, 253, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("callConvergenceTest", 1, 2, 2, 1); __PYX_ERR(35, 254, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "callConvergenceTest") < 0)) __PYX_ERR(35, 253, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "callConvergenceTest") < 0)) __PYX_ERR(35, 254, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -150973,7 +160017,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_51callConvergenceTest(PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("callConvergenceTest", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 253, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("callConvergenceTest", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 254, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.callConvergenceTest", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -150998,27 +160042,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_50callConvergenceTest(struct PyP
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("callConvergenceTest", 0);
 
-  /* "PETSc/KSP.pyx":254
+  /* "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
  */
-  __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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_its); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(35, 255, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/KSP.pyx":255
+  /* "PETSc/KSP.pyx":256
  *     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_ERR(35, 255, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_rnorm); if (unlikely(__pyx_t_2 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(35, 256, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_2;
 
-  /* "PETSc/KSP.pyx":256
+  /* "PETSc/KSP.pyx":257
  *         cdef PetscInt  ival = asInt(its)
  *         cdef PetscReal rval = asReal(rnorm)
  *         cdef PetscKSPConvergedReason reason = KSP_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
@@ -151027,16 +160071,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_50callConvergenceTest(struct PyP
  */
   __pyx_v_reason = KSP_CONVERGED_ITERATING;
 
-  /* "PETSc/KSP.pyx":257
+  /* "PETSc/KSP.pyx":258
  *         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_ERR(35, 257, __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 == ((int)-1))) __PYX_ERR(35, 258, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":258
+  /* "PETSc/KSP.pyx":259
  *         cdef PetscKSPConvergedReason reason = KSP_CONVERGED_ITERATING
  *         CHKERR( KSPConvergenceTestCall(self.ksp, ival, rval, &reason) )
  *         return reason             # <<<<<<<<<<<<<<
@@ -151044,13 +160088,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_50callConvergenceTest(struct PyP
  *     def setConvergenceHistory(self, length=None, reset=False):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = __Pyx_PyInt_From_KSPConvergedReason(__pyx_v_reason); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 258, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyInt_From_KSPConvergedReason(__pyx_v_reason); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 259, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_r = __pyx_t_4;
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":253
+  /* "PETSc/KSP.pyx":254
  *         return self.get_attr('__converged__')
  * 
  *     def callConvergenceTest(self, its, rnorm):             # <<<<<<<<<<<<<<
@@ -151069,7 +160113,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_50callConvergenceTest(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":260
+/* "PETSc/KSP.pyx":261
  *         return reason
  * 
  *     def setConvergenceHistory(self, length=None, reset=False):             # <<<<<<<<<<<<<<
@@ -151096,7 +160140,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_53setConvergenceHistory(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -151107,6 +160153,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_53setConvergenceHistory(PyObject
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_length);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_reset);
@@ -151114,12 +160161,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_53setConvergenceHistory(PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConvergenceHistory") < 0)) __PYX_ERR(35, 260, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConvergenceHistory") < 0)) __PYX_ERR(35, 261, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -151129,7 +160178,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_53setConvergenceHistory(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setConvergenceHistory", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 260, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setConvergenceHistory", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 261, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setConvergenceHistory", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -151157,7 +160206,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_52setConvergenceHistory(struct P
   int __pyx_t_6;
   __Pyx_RefNannySetupContext("setConvergenceHistory", 0);
 
-  /* "PETSc/KSP.pyx":261
+  /* "PETSc/KSP.pyx":262
  * 
  *     def setConvergenceHistory(self, length=None, reset=False):
  *         cdef PetscReal *data = NULL             # <<<<<<<<<<<<<<
@@ -151166,7 +160215,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_52setConvergenceHistory(struct P
  */
   __pyx_v_data = NULL;
 
-  /* "PETSc/KSP.pyx":262
+  /* "PETSc/KSP.pyx":263
  *     def setConvergenceHistory(self, length=None, reset=False):
  *         cdef PetscReal *data = NULL
  *         cdef PetscInt   size = 10000             # <<<<<<<<<<<<<<
@@ -151175,7 +160224,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_52setConvergenceHistory(struct P
  */
   __pyx_v_size = 0x2710;
 
-  /* "PETSc/KSP.pyx":263
+  /* "PETSc/KSP.pyx":264
  *         cdef PetscReal *data = NULL
  *         cdef PetscInt   size = 10000
  *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -151184,7 +160233,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_52setConvergenceHistory(struct P
  */
   __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/KSP.pyx":264
+  /* "PETSc/KSP.pyx":265
  *         cdef PetscInt   size = 10000
  *         cdef PetscBool flag = PETSC_FALSE
  *         if   length is True:     pass             # <<<<<<<<<<<<<<
@@ -151197,7 +160246,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_52setConvergenceHistory(struct P
     goto __pyx_L3;
   }
 
-  /* "PETSc/KSP.pyx":265
+  /* "PETSc/KSP.pyx":266
  *         cdef PetscBool flag = PETSC_FALSE
  *         if   length is True:     pass
  *         elif length is not None: size = asInt(length)             # <<<<<<<<<<<<<<
@@ -151207,12 +160256,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_52setConvergenceHistory(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 == -1L && PyErr_Occurred())) __PYX_ERR(35, 265, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_length); if (unlikely(__pyx_t_3 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(35, 266, __pyx_L1_error)
     __pyx_v_size = __pyx_t_3;
   }
   __pyx_L3:;
 
-  /* "PETSc/KSP.pyx":266
+  /* "PETSc/KSP.pyx":267
  *         if   length is True:     pass
  *         elif length is not None: size = asInt(length)
  *         if size < 0: size = 10000             # <<<<<<<<<<<<<<
@@ -151224,54 +160273,54 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_52setConvergenceHistory(struct P
     __pyx_v_size = 0x2710;
   }
 
-  /* "PETSc/KSP.pyx":267
+  /* "PETSc/KSP.pyx":268
  *         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_ERR(35, 267, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_reset); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(35, 268, __pyx_L1_error)
   if (__pyx_t_1) {
     __pyx_v_flag = PETSC_TRUE;
   }
 
-  /* "PETSc/KSP.pyx":268
+  /* "PETSc/KSP.pyx":269
  *         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_ERR(35, 268, __pyx_L1_error)
+  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_r(__pyx_v_size)); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 269, __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_ERR(35, 268, __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, 269, __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":269
+  /* "PETSc/KSP.pyx":270
  *         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), ((char *)"__history__"), __pyx_v_hist); if (unlikely(!__pyx_t_5)) __PYX_ERR(35, 269, __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, 270, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
 
-  /* "PETSc/KSP.pyx":270
+  /* "PETSc/KSP.pyx":271
  *         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_ERR(35, 270, __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 == ((int)-1))) __PYX_ERR(35, 271, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":260
+  /* "PETSc/KSP.pyx":261
  *         return reason
  * 
  *     def setConvergenceHistory(self, length=None, reset=False):             # <<<<<<<<<<<<<<
@@ -151294,7 +160343,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_52setConvergenceHistory(struct P
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":272
+/* "PETSc/KSP.pyx":273
  *         CHKERR( KSPSetResidualHistory(self.ksp, data, size, flag) )
  * 
  *     def getConvergenceHistory(self):             # <<<<<<<<<<<<<<
@@ -151328,7 +160377,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_54getConvergenceHistory(struct P
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getConvergenceHistory", 0);
 
-  /* "PETSc/KSP.pyx":273
+  /* "PETSc/KSP.pyx":274
  * 
  *     def getConvergenceHistory(self):
  *         cdef PetscReal *data = NULL             # <<<<<<<<<<<<<<
@@ -151337,7 +160386,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_54getConvergenceHistory(struct P
  */
   __pyx_v_data = NULL;
 
-  /* "PETSc/KSP.pyx":274
+  /* "PETSc/KSP.pyx":275
  *     def getConvergenceHistory(self):
  *         cdef PetscReal *data = NULL
  *         cdef PetscInt   size = 0             # <<<<<<<<<<<<<<
@@ -151346,16 +160395,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_54getConvergenceHistory(struct P
  */
   __pyx_v_size = 0;
 
-  /* "PETSc/KSP.pyx":275
+  /* "PETSc/KSP.pyx":276
  *         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_ERR(35, 275, __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 == ((int)-1))) __PYX_ERR(35, 276, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":276
+  /* "PETSc/KSP.pyx":277
  *         cdef PetscInt   size = 0
  *         CHKERR( KSPGetResidualHistory(self.ksp, &data, &size) )
  *         return array_r(size, data)             # <<<<<<<<<<<<<<
@@ -151363,13 +160412,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_54getConvergenceHistory(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_ERR(35, 276, __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, 277, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":272
+  /* "PETSc/KSP.pyx":273
  *         CHKERR( KSPSetResidualHistory(self.ksp, data, size, flag) )
  * 
  *     def getConvergenceHistory(self):             # <<<<<<<<<<<<<<
@@ -151388,7 +160437,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_54getConvergenceHistory(struct P
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":278
+/* "PETSc/KSP.pyx":279
  *         return array_r(size, data)
  * 
  *     def logConvergenceHistory(self, rnorm):             # <<<<<<<<<<<<<<
@@ -151412,6 +160461,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_57logConvergenceHistory(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -151422,7 +160472,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_57logConvergenceHistory(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_ERR(35, 278, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "logConvergenceHistory") < 0)) __PYX_ERR(35, 279, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -151433,7 +160483,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_57logConvergenceHistory(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("logConvergenceHistory", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 278, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("logConvergenceHistory", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 279, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.logConvergenceHistory", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -151454,26 +160504,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_56logConvergenceHistory(struct P
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("logConvergenceHistory", 0);
 
-  /* "PETSc/KSP.pyx":279
+  /* "PETSc/KSP.pyx":280
  * 
  *     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_ERR(35, 279, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_rnorm); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(35, 280, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_1;
 
-  /* "PETSc/KSP.pyx":280
+  /* "PETSc/KSP.pyx":281
  *     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_ERR(35, 280, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPLogResidualHistory(__pyx_v_self->ksp, __pyx_v_rval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(35, 281, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":278
+  /* "PETSc/KSP.pyx":279
  *         return array_r(size, data)
  * 
  *     def logConvergenceHistory(self, rnorm):             # <<<<<<<<<<<<<<
@@ -151493,7 +160543,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_56logConvergenceHistory(struct P
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":284
+/* "PETSc/KSP.pyx":285
  *     # --- monitoring ---
  * 
  *     def setMonitor(self, monitor, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -151521,8 +160571,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_59setMonitor(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -151531,11 +160584,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_59setMonitor(PyObject *__pyx_v_s
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_monitor)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -151543,12 +160598,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_59setMonitor(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMonitor") < 0)) __PYX_ERR(35, 284, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMonitor") < 0)) __PYX_ERR(35, 285, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -151560,7 +160617,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_59setMonitor(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_ERR(35, 284, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setMonitor", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 285, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setMonitor", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -151586,7 +160643,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_58setMonitor(struct PyPetscKSPOb
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/KSP.pyx":285
+  /* "PETSc/KSP.pyx":286
  * 
  *     def setMonitor(self, monitor, args=None, kargs=None):
  *         if monitor is None: return             # <<<<<<<<<<<<<<
@@ -151601,19 +160658,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_58setMonitor(struct PyPetscKSPOb
     goto __pyx_L0;
   }
 
-  /* "PETSc/KSP.pyx":286
+  /* "PETSc/KSP.pyx":287
  *     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), ((char *)"__monitor__")); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 286, __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, 287, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_monitorlist = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "PETSc/KSP.pyx":287
+  /* "PETSc/KSP.pyx":288
  *         if monitor is None: return
  *         cdef object monitorlist = self.get_attr('__monitor__')
  *         if monitorlist is None:             # <<<<<<<<<<<<<<
@@ -151624,39 +160681,39 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_58setMonitor(struct PyPetscKSPOb
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/KSP.pyx":288
+    /* "PETSc/KSP.pyx":289
  *         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_ERR(35, 288, __pyx_L1_error)
+    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 289, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_monitorlist, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "PETSc/KSP.pyx":289
+    /* "PETSc/KSP.pyx":290
  *         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), ((char *)"__monitor__"), __pyx_v_monitorlist); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 289, __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, 290, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "PETSc/KSP.pyx":290
+    /* "PETSc/KSP.pyx":291
  *             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_ERR(35, 290, __pyx_L1_error)
+    __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 == ((int)-1))) __PYX_ERR(35, 291, __pyx_L1_error)
 
-    /* "PETSc/KSP.pyx":287
+    /* "PETSc/KSP.pyx":288
  *         if monitor is None: return
  *         cdef object monitorlist = self.get_attr('__monitor__')
  *         if monitorlist is None:             # <<<<<<<<<<<<<<
@@ -151665,7 +160722,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_58setMonitor(struct PyPetscKSPOb
  */
   }
 
-  /* "PETSc/KSP.pyx":291
+  /* "PETSc/KSP.pyx":292
  *             self.set_attr('__monitor__', monitorlist)
  *             CHKERR( KSPMonitorSet(self.ksp, KSP_Monitor, NULL, NULL) )
  *         if args is None: args = ()             # <<<<<<<<<<<<<<
@@ -151679,7 +160736,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_58setMonitor(struct PyPetscKSPOb
     __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
   }
 
-  /* "PETSc/KSP.pyx":292
+  /* "PETSc/KSP.pyx":293
  *             CHKERR( KSPMonitorSet(self.ksp, KSP_Monitor, NULL, NULL) )
  *         if args is None: args = ()
  *         if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -151689,20 +160746,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_58setMonitor(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_ERR(35, 292, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 293, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
     __pyx_t_3 = 0;
   }
 
-  /* "PETSc/KSP.pyx":293
+  /* "PETSc/KSP.pyx":294
  *         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_ERR(35, 293, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 294, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_monitor);
   __Pyx_GIVEREF(__pyx_v_monitor);
@@ -151713,10 +160770,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_58setMonitor(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_ERR(35, 293, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_Append(__pyx_v_monitorlist, __pyx_t_3); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(35, 294, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/KSP.pyx":284
+  /* "PETSc/KSP.pyx":285
  *     # --- monitoring ---
  * 
  *     def setMonitor(self, monitor, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -151740,7 +160797,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_58setMonitor(struct PyPetscKSPOb
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":295
+/* "PETSc/KSP.pyx":296
  *         monitorlist.append((monitor, args, kargs))
  * 
  *     def getMonitor(self):             # <<<<<<<<<<<<<<
@@ -151771,7 +160828,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_60getMonitor(struct PyPetscKSPOb
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("getMonitor", 0);
 
-  /* "PETSc/KSP.pyx":296
+  /* "PETSc/KSP.pyx":297
  * 
  *     def getMonitor(self):
  *         return self.get_attr('__monitor__')             # <<<<<<<<<<<<<<
@@ -151779,13 +160836,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_60getMonitor(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), ((char *)"__monitor__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 296, __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, 297, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":295
+  /* "PETSc/KSP.pyx":296
  *         monitorlist.append((monitor, args, kargs))
  * 
  *     def getMonitor(self):             # <<<<<<<<<<<<<<
@@ -151804,7 +160861,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_60getMonitor(struct PyPetscKSPOb
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":298
+/* "PETSc/KSP.pyx":299
  *         return self.get_attr('__monitor__')
  * 
  *     def cancelMonitor(self):             # <<<<<<<<<<<<<<
@@ -151836,27 +160893,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_62cancelMonitor(struct PyPetscKS
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("cancelMonitor", 0);
 
-  /* "PETSc/KSP.pyx":299
+  /* "PETSc/KSP.pyx":300
  * 
  *     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_ERR(35, 299, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPMonitorCancel(__pyx_v_self->ksp)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(35, 300, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":300
+  /* "PETSc/KSP.pyx":301
  *     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), ((char *)"__monitor__"), Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 300, __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, 301, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "PETSc/KSP.pyx":298
+  /* "PETSc/KSP.pyx":299
  *         return self.get_attr('__monitor__')
  * 
  *     def cancelMonitor(self):             # <<<<<<<<<<<<<<
@@ -151877,7 +160934,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_62cancelMonitor(struct PyPetscKS
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":302
+/* "PETSc/KSP.pyx":303
  *         self.set_attr('__monitor__', None)
  * 
  *     def monitor(self, its, rnorm):             # <<<<<<<<<<<<<<
@@ -151902,7 +160959,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_65monitor(PyObject *__pyx_v_self
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -151911,14 +160970,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_65monitor(PyObject *__pyx_v_self
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_its)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(35, 302, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("monitor", 1, 2, 2, 1); __PYX_ERR(35, 303, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "monitor") < 0)) __PYX_ERR(35, 302, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "monitor") < 0)) __PYX_ERR(35, 303, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -151931,7 +160991,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_65monitor(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_ERR(35, 302, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("monitor", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 303, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.monitor", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -151954,36 +161014,36 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_64monitor(struct PyPetscKSPObjec
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("monitor", 0);
 
-  /* "PETSc/KSP.pyx":303
+  /* "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_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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_its); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(35, 304, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/KSP.pyx":304
+  /* "PETSc/KSP.pyx":305
  *     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_ERR(35, 304, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_rnorm); if (unlikely(__pyx_t_2 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(35, 305, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_2;
 
-  /* "PETSc/KSP.pyx":305
+  /* "PETSc/KSP.pyx":306
  *         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_ERR(35, 305, __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 == ((int)-1))) __PYX_ERR(35, 306, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":302
+  /* "PETSc/KSP.pyx":303
  *         self.set_attr('__monitor__', None)
  * 
  *     def monitor(self, its, rnorm):             # <<<<<<<<<<<<<<
@@ -152003,7 +161063,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_64monitor(struct PyPetscKSPObjec
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":309
+/* "PETSc/KSP.pyx":310
  *     # --- customization ---
  * 
  *     def setPCSide(self, side):             # <<<<<<<<<<<<<<
@@ -152027,6 +161087,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_67setPCSide(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -152037,7 +161098,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_67setPCSide(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_ERR(35, 309, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPCSide") < 0)) __PYX_ERR(35, 310, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -152048,7 +161109,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_67setPCSide(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_ERR(35, 309, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setPCSide", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 310, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setPCSide", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -152068,17 +161129,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_66setPCSide(struct PyPetscKSPObj
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setPCSide", 0);
 
-  /* "PETSc/KSP.pyx":310
+  /* "PETSc/KSP.pyx":311
  * 
  *     def setPCSide(self, side):
  *         CHKERR( KSPSetPCSide(self.ksp, side) )             # <<<<<<<<<<<<<<
  * 
  *     def getPCSide(self):
  */
-  __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)
+  __pyx_t_1 = ((PCSide)__Pyx_PyInt_As_PCSide(__pyx_v_side)); if (unlikely(PyErr_Occurred())) __PYX_ERR(35, 311, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetPCSide(__pyx_v_self->ksp, __pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(35, 311, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":309
+  /* "PETSc/KSP.pyx":310
  *     # --- customization ---
  * 
  *     def setPCSide(self, side):             # <<<<<<<<<<<<<<
@@ -152098,7 +161159,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_66setPCSide(struct PyPetscKSPObj
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":312
+/* "PETSc/KSP.pyx":313
  *         CHKERR( KSPSetPCSide(self.ksp, side) )
  * 
  *     def getPCSide(self):             # <<<<<<<<<<<<<<
@@ -152131,7 +161192,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_68getPCSide(struct PyPetscKSPObj
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getPCSide", 0);
 
-  /* "PETSc/KSP.pyx":313
+  /* "PETSc/KSP.pyx":314
  * 
  *     def getPCSide(self):
  *         cdef PetscPCSide side = PC_LEFT             # <<<<<<<<<<<<<<
@@ -152140,16 +161201,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_68getPCSide(struct PyPetscKSPObj
  */
   __pyx_v_side = PC_LEFT;
 
-  /* "PETSc/KSP.pyx":314
+  /* "PETSc/KSP.pyx":315
  *     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_ERR(35, 314, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetPCSide(__pyx_v_self->ksp, (&__pyx_v_side))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(35, 315, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":315
+  /* "PETSc/KSP.pyx":316
  *         cdef PetscPCSide side = PC_LEFT
  *         CHKERR( KSPGetPCSide(self.ksp, &side) )
  *         return side             # <<<<<<<<<<<<<<
@@ -152157,13 +161218,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_68getPCSide(struct PyPetscKSPObj
  *     def setNormType(self, normtype):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PCSide(__pyx_v_side); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 315, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_PCSide(__pyx_v_side); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 316, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":312
+  /* "PETSc/KSP.pyx":313
  *         CHKERR( KSPSetPCSide(self.ksp, side) )
  * 
  *     def getPCSide(self):             # <<<<<<<<<<<<<<
@@ -152182,7 +161243,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_68getPCSide(struct PyPetscKSPObj
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":317
+/* "PETSc/KSP.pyx":318
  *         return side
  * 
  *     def setNormType(self, normtype):             # <<<<<<<<<<<<<<
@@ -152206,6 +161267,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_71setNormType(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -152216,7 +161278,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_71setNormType(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_ERR(35, 317, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setNormType") < 0)) __PYX_ERR(35, 318, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -152227,7 +161289,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_71setNormType(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_ERR(35, 317, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setNormType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 318, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setNormType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -152247,17 +161309,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_70setNormType(struct PyPetscKSPO
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setNormType", 0);
 
-  /* "PETSc/KSP.pyx":318
+  /* "PETSc/KSP.pyx":319
  * 
  *     def setNormType(self, normtype):
  *         CHKERR( KSPSetNormType(self.ksp, normtype) )             # <<<<<<<<<<<<<<
  * 
  *     def getNormType(self):
  */
-  __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)
+  __pyx_t_1 = ((KSPNormType)__Pyx_PyInt_As_KSPNormType(__pyx_v_normtype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(35, 319, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetNormType(__pyx_v_self->ksp, __pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(35, 319, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":317
+  /* "PETSc/KSP.pyx":318
  *         return side
  * 
  *     def setNormType(self, normtype):             # <<<<<<<<<<<<<<
@@ -152277,7 +161339,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_70setNormType(struct PyPetscKSPO
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":320
+/* "PETSc/KSP.pyx":321
  *         CHKERR( KSPSetNormType(self.ksp, normtype) )
  * 
  *     def getNormType(self):             # <<<<<<<<<<<<<<
@@ -152310,7 +161372,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_72getNormType(struct PyPetscKSPO
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getNormType", 0);
 
-  /* "PETSc/KSP.pyx":321
+  /* "PETSc/KSP.pyx":322
  * 
  *     def getNormType(self):
  *         cdef PetscKSPNormType normtype = KSP_NORM_NONE             # <<<<<<<<<<<<<<
@@ -152319,16 +161381,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_72getNormType(struct PyPetscKSPO
  */
   __pyx_v_normtype = KSP_NORM_NONE;
 
-  /* "PETSc/KSP.pyx":322
+  /* "PETSc/KSP.pyx":323
  *     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_ERR(35, 322, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetNormType(__pyx_v_self->ksp, (&__pyx_v_normtype))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(35, 323, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":323
+  /* "PETSc/KSP.pyx":324
  *         cdef PetscKSPNormType normtype = KSP_NORM_NONE
  *         CHKERR( KSPGetNormType(self.ksp, &normtype) )
  *         return normtype             # <<<<<<<<<<<<<<
@@ -152336,13 +161398,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_72getNormType(struct PyPetscKSPO
  *     def setComputeEigenvalues(self, bint flag):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_KSPNormType(__pyx_v_normtype); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 323, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_KSPNormType(__pyx_v_normtype); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 324, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":320
+  /* "PETSc/KSP.pyx":321
  *         CHKERR( KSPSetNormType(self.ksp, normtype) )
  * 
  *     def getNormType(self):             # <<<<<<<<<<<<<<
@@ -152361,7 +161423,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_72getNormType(struct PyPetscKSPO
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":325
+/* "PETSc/KSP.pyx":326
  *         return normtype
  * 
  *     def setComputeEigenvalues(self, bint flag):             # <<<<<<<<<<<<<<
@@ -152385,6 +161447,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_75setComputeEigenvalues(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -152395,18 +161458,18 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_75setComputeEigenvalues(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_ERR(35, 325, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setComputeEigenvalues") < 0)) __PYX_ERR(35, 326, __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_ERR(35, 325, __pyx_L3_error)
+    __pyx_v_flag = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_flag == (int)-1) && PyErr_Occurred())) __PYX_ERR(35, 326, __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_ERR(35, 325, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setComputeEigenvalues", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 326, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setComputeEigenvalues", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -152427,7 +161490,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_74setComputeEigenvalues(struct P
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setComputeEigenvalues", 0);
 
-  /* "PETSc/KSP.pyx":326
+  /* "PETSc/KSP.pyx":327
  * 
  *     def setComputeEigenvalues(self, bint flag):
  *         cdef PetscBool compute = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -152436,7 +161499,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_74setComputeEigenvalues(struct P
  */
   __pyx_v_compute = PETSC_FALSE;
 
-  /* "PETSc/KSP.pyx":327
+  /* "PETSc/KSP.pyx":328
  *     def setComputeEigenvalues(self, bint flag):
  *         cdef PetscBool compute = PETSC_FALSE
  *         if flag: compute = PETSC_TRUE             # <<<<<<<<<<<<<<
@@ -152448,16 +161511,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_74setComputeEigenvalues(struct P
     __pyx_v_compute = PETSC_TRUE;
   }
 
-  /* "PETSc/KSP.pyx":328
+  /* "PETSc/KSP.pyx":329
  *         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_ERR(35, 328, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetComputeEigenvalues(__pyx_v_self->ksp, __pyx_v_compute)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(35, 329, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":325
+  /* "PETSc/KSP.pyx":326
  *         return normtype
  * 
  *     def setComputeEigenvalues(self, bint flag):             # <<<<<<<<<<<<<<
@@ -152477,12 +161540,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_74setComputeEigenvalues(struct P
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":330
+/* "PETSc/KSP.pyx":331
  *         CHKERR( KSPSetComputeEigenvalues(self.ksp, compute) )
  * 
  *     def getComputeEigenvalues(self):             # <<<<<<<<<<<<<<
- *         cdef PetscBool compute = PETSC_FALSE
- *         CHKERR( KSPGetComputeEigenvalues(self.ksp, &compute) )
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( KSPGetComputeEigenvalues(self.ksp, &flag) )
  */
 
 /* Python wrapper */
@@ -152503,51 +161566,51 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_77getComputeEigenvalues(PyObject
 }
 
 static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_76getComputeEigenvalues(struct PyPetscKSPObject *__pyx_v_self) {
-  PetscBool __pyx_v_compute;
+  PetscBool __pyx_v_flag;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getComputeEigenvalues", 0);
 
-  /* "PETSc/KSP.pyx":331
+  /* "PETSc/KSP.pyx":332
  * 
  *     def getComputeEigenvalues(self):
- *         cdef PetscBool compute = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( KSPGetComputeEigenvalues(self.ksp, &compute) )
- *         return <bint>compute
+ *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( KSPGetComputeEigenvalues(self.ksp, &flag) )
+ *         return toBool(flag)
  */
-  __pyx_v_compute = PETSC_FALSE;
+  __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/KSP.pyx":332
+  /* "PETSc/KSP.pyx":333
  *     def getComputeEigenvalues(self):
- *         cdef PetscBool compute = PETSC_FALSE
- *         CHKERR( KSPGetComputeEigenvalues(self.ksp, &compute) )             # <<<<<<<<<<<<<<
- *         return <bint>compute
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( KSPGetComputeEigenvalues(self.ksp, &flag) )             # <<<<<<<<<<<<<<
+ *         return toBool(flag)
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetComputeEigenvalues(__pyx_v_self->ksp, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(35, 333, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":333
- *         cdef PetscBool compute = PETSC_FALSE
- *         CHKERR( KSPGetComputeEigenvalues(self.ksp, &compute) )
- *         return <bint>compute             # <<<<<<<<<<<<<<
+  /* "PETSc/KSP.pyx":334
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( KSPGetComputeEigenvalues(self.ksp, &flag) )
+ *         return toBool(flag)             # <<<<<<<<<<<<<<
  * 
  *     def setComputeSingularValues(self, bint flag):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_compute); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 333, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 334, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":330
+  /* "PETSc/KSP.pyx":331
  *         CHKERR( KSPSetComputeEigenvalues(self.ksp, compute) )
  * 
  *     def getComputeEigenvalues(self):             # <<<<<<<<<<<<<<
- *         cdef PetscBool compute = PETSC_FALSE
- *         CHKERR( KSPGetComputeEigenvalues(self.ksp, &compute) )
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( KSPGetComputeEigenvalues(self.ksp, &flag) )
  */
 
   /* function exit code */
@@ -152561,8 +161624,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_76getComputeEigenvalues(struct P
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":335
- *         return <bint>compute
+/* "PETSc/KSP.pyx":336
+ *         return toBool(flag)
  * 
  *     def setComputeSingularValues(self, bint flag):             # <<<<<<<<<<<<<<
  *         cdef PetscBool compute = PETSC_FALSE
@@ -152585,6 +161648,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_79setComputeSingularValues(PyObj
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -152595,18 +161659,18 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_79setComputeSingularValues(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_ERR(35, 335, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setComputeSingularValues") < 0)) __PYX_ERR(35, 336, __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_ERR(35, 335, __pyx_L3_error)
+    __pyx_v_flag = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_flag == (int)-1) && PyErr_Occurred())) __PYX_ERR(35, 336, __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_ERR(35, 335, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setComputeSingularValues", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 336, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setComputeSingularValues", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -152627,7 +161691,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_78setComputeSingularValues(struc
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setComputeSingularValues", 0);
 
-  /* "PETSc/KSP.pyx":336
+  /* "PETSc/KSP.pyx":337
  * 
  *     def setComputeSingularValues(self, bint flag):
  *         cdef PetscBool compute = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -152636,7 +161700,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_78setComputeSingularValues(struc
  */
   __pyx_v_compute = PETSC_FALSE;
 
-  /* "PETSc/KSP.pyx":337
+  /* "PETSc/KSP.pyx":338
  *     def setComputeSingularValues(self, bint flag):
  *         cdef PetscBool compute = PETSC_FALSE
  *         if flag: compute = PETSC_TRUE             # <<<<<<<<<<<<<<
@@ -152648,17 +161712,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_78setComputeSingularValues(struc
     __pyx_v_compute = PETSC_TRUE;
   }
 
-  /* "PETSc/KSP.pyx":338
+  /* "PETSc/KSP.pyx":339
  *         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_ERR(35, 338, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetComputeSingularValues(__pyx_v_self->ksp, __pyx_v_compute)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(35, 339, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":335
- *         return <bint>compute
+  /* "PETSc/KSP.pyx":336
+ *         return toBool(flag)
  * 
  *     def setComputeSingularValues(self, bint flag):             # <<<<<<<<<<<<<<
  *         cdef PetscBool compute = PETSC_FALSE
@@ -152677,12 +161741,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_78setComputeSingularValues(struc
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":340
+/* "PETSc/KSP.pyx":341
  *         CHKERR( KSPSetComputeSingularValues(self.ksp, compute) )
  * 
  *     def getComputeSingularValues(self):             # <<<<<<<<<<<<<<
- *         cdef PetscBool compute = PETSC_FALSE
- *         CHKERR( KSPGetComputeSingularValues(self.ksp, &compute) )
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( KSPGetComputeSingularValues(self.ksp, &flag) )
  */
 
 /* Python wrapper */
@@ -152703,51 +161767,51 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_81getComputeSingularValues(PyObj
 }
 
 static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_80getComputeSingularValues(struct PyPetscKSPObject *__pyx_v_self) {
-  PetscBool __pyx_v_compute;
+  PetscBool __pyx_v_flag;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getComputeSingularValues", 0);
 
-  /* "PETSc/KSP.pyx":341
+  /* "PETSc/KSP.pyx":342
  * 
  *     def getComputeSingularValues(self):
- *         cdef PetscBool compute = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( KSPGetComputeSingularValues(self.ksp, &compute) )
- *         return <bint>compute
+ *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( KSPGetComputeSingularValues(self.ksp, &flag) )
+ *         return toBool(flag)
  */
-  __pyx_v_compute = PETSC_FALSE;
+  __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/KSP.pyx":342
+  /* "PETSc/KSP.pyx":343
  *     def getComputeSingularValues(self):
- *         cdef PetscBool compute = PETSC_FALSE
- *         CHKERR( KSPGetComputeSingularValues(self.ksp, &compute) )             # <<<<<<<<<<<<<<
- *         return <bint>compute
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( KSPGetComputeSingularValues(self.ksp, &flag) )             # <<<<<<<<<<<<<<
+ *         return toBool(flag)
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetComputeSingularValues(__pyx_v_self->ksp, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(35, 343, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":343
- *         cdef PetscBool compute = PETSC_FALSE
- *         CHKERR( KSPGetComputeSingularValues(self.ksp, &compute) )
- *         return <bint>compute             # <<<<<<<<<<<<<<
+  /* "PETSc/KSP.pyx":344
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( KSPGetComputeSingularValues(self.ksp, &flag) )
+ *         return toBool(flag)             # <<<<<<<<<<<<<<
  * 
  *     # --- initial guess ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_compute); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 343, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 344, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":340
+  /* "PETSc/KSP.pyx":341
  *         CHKERR( KSPSetComputeSingularValues(self.ksp, compute) )
  * 
  *     def getComputeSingularValues(self):             # <<<<<<<<<<<<<<
- *         cdef PetscBool compute = PETSC_FALSE
- *         CHKERR( KSPGetComputeSingularValues(self.ksp, &compute) )
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( KSPGetComputeSingularValues(self.ksp, &flag) )
  */
 
   /* function exit code */
@@ -152761,7 +161825,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_80getComputeSingularValues(struc
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":347
+/* "PETSc/KSP.pyx":348
  *     # --- initial guess ---
  * 
  *     def setInitialGuessNonzero(self, bint flag):             # <<<<<<<<<<<<<<
@@ -152785,6 +161849,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_83setInitialGuessNonzero(PyObjec
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -152795,18 +161860,18 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_83setInitialGuessNonzero(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_ERR(35, 347, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setInitialGuessNonzero") < 0)) __PYX_ERR(35, 348, __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_ERR(35, 347, __pyx_L3_error)
+    __pyx_v_flag = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_flag == (int)-1) && PyErr_Occurred())) __PYX_ERR(35, 348, __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_ERR(35, 347, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setInitialGuessNonzero", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 348, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setInitialGuessNonzero", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -152827,7 +161892,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_82setInitialGuessNonzero(struct
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setInitialGuessNonzero", 0);
 
-  /* "PETSc/KSP.pyx":348
+  /* "PETSc/KSP.pyx":349
  * 
  *     def setInitialGuessNonzero(self, bint flag):
  *         cdef PetscBool guess_nonzero = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -152836,7 +161901,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_82setInitialGuessNonzero(struct
  */
   __pyx_v_guess_nonzero = PETSC_FALSE;
 
-  /* "PETSc/KSP.pyx":349
+  /* "PETSc/KSP.pyx":350
  *     def setInitialGuessNonzero(self, bint flag):
  *         cdef PetscBool guess_nonzero = PETSC_FALSE
  *         if flag: guess_nonzero = PETSC_TRUE             # <<<<<<<<<<<<<<
@@ -152848,16 +161913,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_82setInitialGuessNonzero(struct
     __pyx_v_guess_nonzero = PETSC_TRUE;
   }
 
-  /* "PETSc/KSP.pyx":350
+  /* "PETSc/KSP.pyx":351
  *         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_ERR(35, 350, __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 == ((int)-1))) __PYX_ERR(35, 351, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":347
+  /* "PETSc/KSP.pyx":348
  *     # --- initial guess ---
  * 
  *     def setInitialGuessNonzero(self, bint flag):             # <<<<<<<<<<<<<<
@@ -152877,12 +161942,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_82setInitialGuessNonzero(struct
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":352
+/* "PETSc/KSP.pyx":353
  *         CHKERR( KSPSetInitialGuessNonzero(self.ksp, guess_nonzero) )
  * 
  *     def getInitialGuessNonzero(self):             # <<<<<<<<<<<<<<
- *         cdef PetscBool guess_nonzero = PETSC_FALSE
- *         CHKERR( KSPGetInitialGuessNonzero(self.ksp, &guess_nonzero) )
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( KSPGetInitialGuessNonzero(self.ksp, &flag) )
  */
 
 /* Python wrapper */
@@ -152903,51 +161968,51 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_85getInitialGuessNonzero(PyObjec
 }
 
 static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_84getInitialGuessNonzero(struct PyPetscKSPObject *__pyx_v_self) {
-  PetscBool __pyx_v_guess_nonzero;
+  PetscBool __pyx_v_flag;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getInitialGuessNonzero", 0);
 
-  /* "PETSc/KSP.pyx":353
+  /* "PETSc/KSP.pyx":354
  * 
  *     def getInitialGuessNonzero(self):
- *         cdef PetscBool guess_nonzero = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( KSPGetInitialGuessNonzero(self.ksp, &guess_nonzero) )
- *         return <bint>guess_nonzero
+ *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( KSPGetInitialGuessNonzero(self.ksp, &flag) )
+ *         return toBool(flag)
  */
-  __pyx_v_guess_nonzero = PETSC_FALSE;
+  __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/KSP.pyx":354
+  /* "PETSc/KSP.pyx":355
  *     def getInitialGuessNonzero(self):
- *         cdef PetscBool guess_nonzero = PETSC_FALSE
- *         CHKERR( KSPGetInitialGuessNonzero(self.ksp, &guess_nonzero) )             # <<<<<<<<<<<<<<
- *         return <bint>guess_nonzero
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( KSPGetInitialGuessNonzero(self.ksp, &flag) )             # <<<<<<<<<<<<<<
+ *         return toBool(flag)
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetInitialGuessNonzero(__pyx_v_self->ksp, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(35, 355, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":355
- *         cdef PetscBool guess_nonzero = PETSC_FALSE
- *         CHKERR( KSPGetInitialGuessNonzero(self.ksp, &guess_nonzero) )
- *         return <bint>guess_nonzero             # <<<<<<<<<<<<<<
+  /* "PETSc/KSP.pyx":356
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( KSPGetInitialGuessNonzero(self.ksp, &flag) )
+ *         return toBool(flag)             # <<<<<<<<<<<<<<
  * 
  *     def setInitialGuessKnoll(self, bint flag):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_guess_nonzero); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 355, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 356, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":352
+  /* "PETSc/KSP.pyx":353
  *         CHKERR( KSPSetInitialGuessNonzero(self.ksp, guess_nonzero) )
  * 
  *     def getInitialGuessNonzero(self):             # <<<<<<<<<<<<<<
- *         cdef PetscBool guess_nonzero = PETSC_FALSE
- *         CHKERR( KSPGetInitialGuessNonzero(self.ksp, &guess_nonzero) )
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( KSPGetInitialGuessNonzero(self.ksp, &flag) )
  */
 
   /* function exit code */
@@ -152961,8 +162026,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_84getInitialGuessNonzero(struct
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":357
- *         return <bint>guess_nonzero
+/* "PETSc/KSP.pyx":358
+ *         return toBool(flag)
  * 
  *     def setInitialGuessKnoll(self, bint flag):             # <<<<<<<<<<<<<<
  *         cdef PetscBool guess_knoll = PETSC_FALSE
@@ -152985,6 +162050,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_87setInitialGuessKnoll(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -152995,18 +162061,18 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_87setInitialGuessKnoll(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_ERR(35, 357, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setInitialGuessKnoll") < 0)) __PYX_ERR(35, 358, __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_ERR(35, 357, __pyx_L3_error)
+    __pyx_v_flag = __Pyx_PyObject_IsTrue(values[0]); if (unlikely((__pyx_v_flag == (int)-1) && PyErr_Occurred())) __PYX_ERR(35, 358, __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_ERR(35, 357, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setInitialGuessKnoll", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 358, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setInitialGuessKnoll", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -153027,7 +162093,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_86setInitialGuessKnoll(struct Py
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setInitialGuessKnoll", 0);
 
-  /* "PETSc/KSP.pyx":358
+  /* "PETSc/KSP.pyx":359
  * 
  *     def setInitialGuessKnoll(self, bint flag):
  *         cdef PetscBool guess_knoll = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -153036,7 +162102,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_86setInitialGuessKnoll(struct Py
  */
   __pyx_v_guess_knoll = PETSC_FALSE;
 
-  /* "PETSc/KSP.pyx":359
+  /* "PETSc/KSP.pyx":360
  *     def setInitialGuessKnoll(self, bint flag):
  *         cdef PetscBool guess_knoll = PETSC_FALSE
  *         if flag: guess_knoll = PETSC_TRUE             # <<<<<<<<<<<<<<
@@ -153048,17 +162114,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_86setInitialGuessKnoll(struct Py
     __pyx_v_guess_knoll = PETSC_TRUE;
   }
 
-  /* "PETSc/KSP.pyx":360
+  /* "PETSc/KSP.pyx":361
  *         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_ERR(35, 360, __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 == ((int)-1))) __PYX_ERR(35, 361, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":357
- *         return <bint>guess_nonzero
+  /* "PETSc/KSP.pyx":358
+ *         return toBool(flag)
  * 
  *     def setInitialGuessKnoll(self, bint flag):             # <<<<<<<<<<<<<<
  *         cdef PetscBool guess_knoll = PETSC_FALSE
@@ -153077,12 +162143,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_86setInitialGuessKnoll(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":362
+/* "PETSc/KSP.pyx":363
  *         CHKERR( KSPSetInitialGuessKnoll(self.ksp, guess_knoll) )
  * 
  *     def getInitialGuessKnoll(self):             # <<<<<<<<<<<<<<
- *         cdef PetscBool guess_knoll = PETSC_FALSE
- *         CHKERR( KSPGetInitialGuessKnoll(self.ksp, &guess_knoll) )
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( KSPGetInitialGuessKnoll(self.ksp, &flag) )
  */
 
 /* Python wrapper */
@@ -153103,51 +162169,51 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_89getInitialGuessKnoll(PyObject
 }
 
 static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_88getInitialGuessKnoll(struct PyPetscKSPObject *__pyx_v_self) {
-  PetscBool __pyx_v_guess_knoll;
+  PetscBool __pyx_v_flag;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getInitialGuessKnoll", 0);
 
-  /* "PETSc/KSP.pyx":363
+  /* "PETSc/KSP.pyx":364
  * 
  *     def getInitialGuessKnoll(self):
- *         cdef PetscBool guess_knoll = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( KSPGetInitialGuessKnoll(self.ksp, &guess_knoll) )
- *         return <bint>guess_knoll
+ *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( KSPGetInitialGuessKnoll(self.ksp, &flag) )
+ *         return toBool(flag)
  */
-  __pyx_v_guess_knoll = PETSC_FALSE;
+  __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/KSP.pyx":364
+  /* "PETSc/KSP.pyx":365
  *     def getInitialGuessKnoll(self):
- *         cdef PetscBool guess_knoll = PETSC_FALSE
- *         CHKERR( KSPGetInitialGuessKnoll(self.ksp, &guess_knoll) )             # <<<<<<<<<<<<<<
- *         return <bint>guess_knoll
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( KSPGetInitialGuessKnoll(self.ksp, &flag) )             # <<<<<<<<<<<<<<
+ *         return toBool(flag)
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetInitialGuessKnoll(__pyx_v_self->ksp, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(35, 365, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":365
- *         cdef PetscBool guess_knoll = PETSC_FALSE
- *         CHKERR( KSPGetInitialGuessKnoll(self.ksp, &guess_knoll) )
- *         return <bint>guess_knoll             # <<<<<<<<<<<<<<
+  /* "PETSc/KSP.pyx":366
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( KSPGetInitialGuessKnoll(self.ksp, &flag) )
+ *         return toBool(flag)             # <<<<<<<<<<<<<<
  * 
  *     def setUseFischerGuess(self, model, size):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_guess_knoll); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 365, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 366, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":362
+  /* "PETSc/KSP.pyx":363
  *         CHKERR( KSPSetInitialGuessKnoll(self.ksp, guess_knoll) )
  * 
  *     def getInitialGuessKnoll(self):             # <<<<<<<<<<<<<<
- *         cdef PetscBool guess_knoll = PETSC_FALSE
- *         CHKERR( KSPGetInitialGuessKnoll(self.ksp, &guess_knoll) )
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( KSPGetInitialGuessKnoll(self.ksp, &flag) )
  */
 
   /* function exit code */
@@ -153161,8 +162227,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_88getInitialGuessKnoll(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":367
- *         return <bint>guess_knoll
+/* "PETSc/KSP.pyx":368
+ *         return toBool(flag)
  * 
  *     def setUseFischerGuess(self, model, size):             # <<<<<<<<<<<<<<
  *         cdef PetscInt ival1 = asInt(model)
@@ -153186,7 +162252,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_91setUseFischerGuess(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -153195,14 +162263,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_91setUseFischerGuess(PyObject *_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_model)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(35, 367, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setUseFischerGuess", 1, 2, 2, 1); __PYX_ERR(35, 368, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setUseFischerGuess") < 0)) __PYX_ERR(35, 367, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setUseFischerGuess") < 0)) __PYX_ERR(35, 368, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -153215,7 +162284,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_91setUseFischerGuess(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setUseFischerGuess", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 367, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setUseFischerGuess", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 368, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setUseFischerGuess", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -153237,37 +162306,37 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_90setUseFischerGuess(struct PyPe
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setUseFischerGuess", 0);
 
-  /* "PETSc/KSP.pyx":368
+  /* "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_model); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(35, 368, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_model); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(35, 369, __pyx_L1_error)
   __pyx_v_ival1 = __pyx_t_1;
 
-  /* "PETSc/KSP.pyx":369
+  /* "PETSc/KSP.pyx":370
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(35, 369, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_size); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(35, 370, __pyx_L1_error)
   __pyx_v_ival2 = __pyx_t_1;
 
-  /* "PETSc/KSP.pyx":370
+  /* "PETSc/KSP.pyx":371
  *         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_ERR(35, 370, __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 == ((int)-1))) __PYX_ERR(35, 371, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":367
- *         return <bint>guess_knoll
+  /* "PETSc/KSP.pyx":368
+ *         return toBool(flag)
  * 
  *     def setUseFischerGuess(self, model, size):             # <<<<<<<<<<<<<<
  *         cdef PetscInt ival1 = asInt(model)
@@ -153286,7 +162355,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_90setUseFischerGuess(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":374
+/* "PETSc/KSP.pyx":375
  *     # --- solving ---
  * 
  *     def setUp(self):             # <<<<<<<<<<<<<<
@@ -153317,16 +162386,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_92setUp(struct PyPetscKSPObject
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setUp", 0);
 
-  /* "PETSc/KSP.pyx":375
+  /* "PETSc/KSP.pyx":376
  * 
  *     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_ERR(35, 375, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetUp(__pyx_v_self->ksp)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(35, 376, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":374
+  /* "PETSc/KSP.pyx":375
  *     # --- solving ---
  * 
  *     def setUp(self):             # <<<<<<<<<<<<<<
@@ -153346,7 +162415,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_92setUp(struct PyPetscKSPObject
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":377
+/* "PETSc/KSP.pyx":378
  *         CHKERR( KSPSetUp(self.ksp) )
  * 
  *     def reset(self):             # <<<<<<<<<<<<<<
@@ -153377,16 +162446,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_94reset(struct PyPetscKSPObject
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("reset", 0);
 
-  /* "PETSc/KSP.pyx":378
+  /* "PETSc/KSP.pyx":379
  * 
  *     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_ERR(35, 378, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPReset(__pyx_v_self->ksp)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(35, 379, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":377
+  /* "PETSc/KSP.pyx":378
  *         CHKERR( KSPSetUp(self.ksp) )
  * 
  *     def reset(self):             # <<<<<<<<<<<<<<
@@ -153406,7 +162475,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_94reset(struct PyPetscKSPObject
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":380
+/* "PETSc/KSP.pyx":381
  *         CHKERR( KSPReset(self.ksp) )
  * 
  *     def setUpOnBlocks(self):             # <<<<<<<<<<<<<<
@@ -153437,16 +162506,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_96setUpOnBlocks(struct PyPetscKS
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setUpOnBlocks", 0);
 
-  /* "PETSc/KSP.pyx":381
+  /* "PETSc/KSP.pyx":382
  * 
  *     def setUpOnBlocks(self):
  *         CHKERR( KSPSetUpOnBlocks(self.ksp) )             # <<<<<<<<<<<<<<
  * 
- *     def solve(self, Vec b not None, Vec x not None):
+ *     def solve(self, Vec b, Vec x):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetUpOnBlocks(__pyx_v_self->ksp)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(35, 382, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":380
+  /* "PETSc/KSP.pyx":381
  *         CHKERR( KSPReset(self.ksp) )
  * 
  *     def setUpOnBlocks(self):             # <<<<<<<<<<<<<<
@@ -153466,10 +162535,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_96setUpOnBlocks(struct PyPetscKS
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":383
+/* "PETSc/KSP.pyx":384
  *         CHKERR( KSPSetUpOnBlocks(self.ksp) )
  * 
- *     def solve(self, Vec b not None, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def solve(self, Vec b, Vec x):             # <<<<<<<<<<<<<<
  *         CHKERR( KSPSolve(self.ksp, b.vec, x.vec) )
  * 
  */
@@ -153491,7 +162560,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_99solve(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -153500,14 +162571,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_99solve(PyObject *__pyx_v_self,
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_b)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("solve", 1, 2, 2, 1); __PYX_ERR(35, 383, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("solve", 1, 2, 2, 1); __PYX_ERR(35, 384, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solve") < 0)) __PYX_ERR(35, 383, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solve") < 0)) __PYX_ERR(35, 384, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -153520,14 +162592,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_99solve(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_ERR(35, 383, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("solve", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 384, __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_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)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "b", 0))) __PYX_ERR(35, 384, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(35, 384, __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 */
@@ -153545,19 +162617,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_98solve(struct PyPetscKSPObject
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("solve", 0);
 
-  /* "PETSc/KSP.pyx":384
+  /* "PETSc/KSP.pyx":385
  * 
- *     def solve(self, Vec b not None, Vec x not None):
+ *     def solve(self, Vec b, Vec x):
  *         CHKERR( KSPSolve(self.ksp, b.vec, x.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def solveTranspose(self, Vec b not None, Vec x not None):
+ *     def solveTranspose(self, Vec b, Vec x):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(35, 385, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":383
+  /* "PETSc/KSP.pyx":384
  *         CHKERR( KSPSetUpOnBlocks(self.ksp) )
  * 
- *     def solve(self, Vec b not None, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def solve(self, Vec b, Vec x):             # <<<<<<<<<<<<<<
  *         CHKERR( KSPSolve(self.ksp, b.vec, x.vec) )
  * 
  */
@@ -153574,10 +162646,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_98solve(struct PyPetscKSPObject
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":386
+/* "PETSc/KSP.pyx":387
  *         CHKERR( KSPSolve(self.ksp, b.vec, x.vec) )
  * 
- *     def solveTranspose(self, Vec b not None, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def solveTranspose(self, Vec b, Vec x):             # <<<<<<<<<<<<<<
  *         CHKERR( KSPSolveTranspose(self.ksp, b.vec, x.vec) )
  * 
  */
@@ -153599,7 +162671,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_101solveTranspose(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -153608,14 +162682,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_101solveTranspose(PyObject *__py
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_b)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(35, 386, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("solveTranspose", 1, 2, 2, 1); __PYX_ERR(35, 387, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solveTranspose") < 0)) __PYX_ERR(35, 386, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solveTranspose") < 0)) __PYX_ERR(35, 387, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -153628,14 +162703,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_101solveTranspose(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("solveTranspose", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 386, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("solveTranspose", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 387, __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_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)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "b", 0))) __PYX_ERR(35, 387, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(35, 387, __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 */
@@ -153653,19 +162728,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_100solveTranspose(struct PyPetsc
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("solveTranspose", 0);
 
-  /* "PETSc/KSP.pyx":387
+  /* "PETSc/KSP.pyx":388
  * 
- *     def solveTranspose(self, Vec b not None, Vec x not None):
+ *     def solveTranspose(self, Vec b, Vec x):
  *         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_ERR(35, 387, __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 == ((int)-1))) __PYX_ERR(35, 388, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":386
+  /* "PETSc/KSP.pyx":387
  *         CHKERR( KSPSolve(self.ksp, b.vec, x.vec) )
  * 
- *     def solveTranspose(self, Vec b not None, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def solveTranspose(self, Vec b, Vec x):             # <<<<<<<<<<<<<<
  *         CHKERR( KSPSolveTranspose(self.ksp, b.vec, x.vec) )
  * 
  */
@@ -153682,7 +162757,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_100solveTranspose(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":389
+/* "PETSc/KSP.pyx":390
  *         CHKERR( KSPSolveTranspose(self.ksp, b.vec, x.vec) )
  * 
  *     def setIterationNumber(self, its):             # <<<<<<<<<<<<<<
@@ -153706,6 +162781,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_103setIterationNumber(PyObject *
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -153716,7 +162792,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_103setIterationNumber(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_ERR(35, 389, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setIterationNumber") < 0)) __PYX_ERR(35, 390, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -153727,7 +162803,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_103setIterationNumber(PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setIterationNumber", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 389, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setIterationNumber", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 390, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setIterationNumber", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -153748,26 +162824,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_102setIterationNumber(struct PyP
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setIterationNumber", 0);
 
-  /* "PETSc/KSP.pyx":390
+  /* "PETSc/KSP.pyx":391
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(35, 390, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_its); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(35, 391, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/KSP.pyx":391
+  /* "PETSc/KSP.pyx":392
  *     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_ERR(35, 391, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetIterationNumber(__pyx_v_self->ksp, __pyx_v_ival)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(35, 392, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":389
+  /* "PETSc/KSP.pyx":390
  *         CHKERR( KSPSolveTranspose(self.ksp, b.vec, x.vec) )
  * 
  *     def setIterationNumber(self, its):             # <<<<<<<<<<<<<<
@@ -153787,7 +162863,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_102setIterationNumber(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":393
+/* "PETSc/KSP.pyx":394
  *         CHKERR( KSPSetIterationNumber(self.ksp, ival) )
  * 
  *     def getIterationNumber(self):             # <<<<<<<<<<<<<<
@@ -153820,7 +162896,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_104getIterationNumber(struct PyP
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getIterationNumber", 0);
 
-  /* "PETSc/KSP.pyx":394
+  /* "PETSc/KSP.pyx":395
  * 
  *     def getIterationNumber(self):
  *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
@@ -153829,16 +162905,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_104getIterationNumber(struct PyP
  */
   __pyx_v_ival = 0;
 
-  /* "PETSc/KSP.pyx":395
+  /* "PETSc/KSP.pyx":396
  *     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_ERR(35, 395, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetIterationNumber(__pyx_v_self->ksp, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(35, 396, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":396
+  /* "PETSc/KSP.pyx":397
  *         cdef PetscInt ival = 0
  *         CHKERR( KSPGetIterationNumber(self.ksp, &ival) )
  *         return toInt(ival)             # <<<<<<<<<<<<<<
@@ -153846,13 +162922,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_104getIterationNumber(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_ERR(35, 396, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 397, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":393
+  /* "PETSc/KSP.pyx":394
  *         CHKERR( KSPSetIterationNumber(self.ksp, ival) )
  * 
  *     def getIterationNumber(self):             # <<<<<<<<<<<<<<
@@ -153871,7 +162947,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_104getIterationNumber(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":398
+/* "PETSc/KSP.pyx":399
  *         return toInt(ival)
  * 
  *     def setResidualNorm(self, rnorm):             # <<<<<<<<<<<<<<
@@ -153895,6 +162971,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_107setResidualNorm(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -153905,7 +162982,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_107setResidualNorm(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_ERR(35, 398, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setResidualNorm") < 0)) __PYX_ERR(35, 399, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -153916,7 +162993,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_107setResidualNorm(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setResidualNorm", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 398, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setResidualNorm", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 399, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setResidualNorm", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -153937,26 +163014,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_106setResidualNorm(struct PyPets
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setResidualNorm", 0);
 
-  /* "PETSc/KSP.pyx":399
+  /* "PETSc/KSP.pyx":400
  * 
  *     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_ERR(35, 399, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_rnorm); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(35, 400, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_1;
 
-  /* "PETSc/KSP.pyx":400
+  /* "PETSc/KSP.pyx":401
  *     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_ERR(35, 400, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetResidualNorm(__pyx_v_self->ksp, __pyx_v_rval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(35, 401, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":398
+  /* "PETSc/KSP.pyx":399
  *         return toInt(ival)
  * 
  *     def setResidualNorm(self, rnorm):             # <<<<<<<<<<<<<<
@@ -153976,7 +163053,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_106setResidualNorm(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":402
+/* "PETSc/KSP.pyx":403
  *         CHKERR( KSPSetResidualNorm(self.ksp, rval) )
  * 
  *     def getResidualNorm(self):             # <<<<<<<<<<<<<<
@@ -154009,7 +163086,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_108getResidualNorm(struct PyPets
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getResidualNorm", 0);
 
-  /* "PETSc/KSP.pyx":403
+  /* "PETSc/KSP.pyx":404
  * 
  *     def getResidualNorm(self):
  *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
@@ -154018,16 +163095,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_108getResidualNorm(struct PyPets
  */
   __pyx_v_rval = 0.0;
 
-  /* "PETSc/KSP.pyx":404
+  /* "PETSc/KSP.pyx":405
  *     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_ERR(35, 404, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetResidualNorm(__pyx_v_self->ksp, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(35, 405, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":405
+  /* "PETSc/KSP.pyx":406
  *         cdef PetscReal rval = 0
  *         CHKERR( KSPGetResidualNorm(self.ksp, &rval) )
  *         return toReal(rval)             # <<<<<<<<<<<<<<
@@ -154035,13 +163112,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_108getResidualNorm(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_ERR(35, 405, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 406, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":402
+  /* "PETSc/KSP.pyx":403
  *         CHKERR( KSPSetResidualNorm(self.ksp, rval) )
  * 
  *     def getResidualNorm(self):             # <<<<<<<<<<<<<<
@@ -154060,7 +163137,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_108getResidualNorm(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":407
+/* "PETSc/KSP.pyx":408
  *         return toReal(rval)
  * 
  *     def setConvergedReason(self, reason):             # <<<<<<<<<<<<<<
@@ -154084,6 +163161,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_111setConvergedReason(PyObject *
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -154094,7 +163172,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_111setConvergedReason(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_ERR(35, 407, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConvergedReason") < 0)) __PYX_ERR(35, 408, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -154105,7 +163183,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_111setConvergedReason(PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setConvergedReason", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 407, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setConvergedReason", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 408, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setConvergedReason", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -154126,26 +163204,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_110setConvergedReason(struct PyP
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setConvergedReason", 0);
 
-  /* "PETSc/KSP.pyx":408
+  /* "PETSc/KSP.pyx":409
  * 
  *     def setConvergedReason(self, reason):
  *         cdef PetscKSPConvergedReason val = reason             # <<<<<<<<<<<<<<
  *         CHKERR( KSPSetConvergedReason(self.ksp, val) )
  * 
  */
-  __pyx_t_1 = ((KSPConvergedReason)__Pyx_PyInt_As_KSPConvergedReason(__pyx_v_reason)); if (unlikely(PyErr_Occurred())) __PYX_ERR(35, 408, __pyx_L1_error)
+  __pyx_t_1 = ((KSPConvergedReason)__Pyx_PyInt_As_KSPConvergedReason(__pyx_v_reason)); if (unlikely(PyErr_Occurred())) __PYX_ERR(35, 409, __pyx_L1_error)
   __pyx_v_val = __pyx_t_1;
 
-  /* "PETSc/KSP.pyx":409
+  /* "PETSc/KSP.pyx":410
  *     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_ERR(35, 409, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetConvergedReason(__pyx_v_self->ksp, __pyx_v_val)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(35, 410, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":407
+  /* "PETSc/KSP.pyx":408
  *         return toReal(rval)
  * 
  *     def setConvergedReason(self, reason):             # <<<<<<<<<<<<<<
@@ -154165,7 +163243,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_110setConvergedReason(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":411
+/* "PETSc/KSP.pyx":412
  *         CHKERR( KSPSetConvergedReason(self.ksp, val) )
  * 
  *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
@@ -154198,7 +163276,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_112getConvergedReason(struct PyP
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getConvergedReason", 0);
 
-  /* "PETSc/KSP.pyx":412
+  /* "PETSc/KSP.pyx":413
  * 
  *     def getConvergedReason(self):
  *         cdef PetscKSPConvergedReason reason = KSP_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
@@ -154207,16 +163285,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_112getConvergedReason(struct PyP
  */
   __pyx_v_reason = KSP_CONVERGED_ITERATING;
 
-  /* "PETSc/KSP.pyx":413
+  /* "PETSc/KSP.pyx":414
  *     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_ERR(35, 413, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetConvergedReason(__pyx_v_self->ksp, (&__pyx_v_reason))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(35, 414, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":414
+  /* "PETSc/KSP.pyx":415
  *         cdef PetscKSPConvergedReason reason = KSP_CONVERGED_ITERATING
  *         CHKERR( KSPGetConvergedReason(self.ksp, &reason) )
  *         return reason             # <<<<<<<<<<<<<<
@@ -154224,13 +163302,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_112getConvergedReason(struct PyP
  *     def getRhs(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_KSPConvergedReason(__pyx_v_reason); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 414, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_KSPConvergedReason(__pyx_v_reason); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 415, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":411
+  /* "PETSc/KSP.pyx":412
  *         CHKERR( KSPSetConvergedReason(self.ksp, val) )
  * 
  *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
@@ -154249,7 +163327,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_112getConvergedReason(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":416
+/* "PETSc/KSP.pyx":417
  *         return reason
  * 
  *     def getRhs(self):             # <<<<<<<<<<<<<<
@@ -154282,28 +163360,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getRhs(struct PyPetscKSPObjec
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getRhs", 0);
 
-  /* "PETSc/KSP.pyx":417
+  /* "PETSc/KSP.pyx":418
  * 
  *     def getRhs(self):
  *         cdef Vec vec = Vec()             # <<<<<<<<<<<<<<
  *         CHKERR( KSPGetRhs(self.ksp, &vec.vec) )
  *         PetscINCREF(vec.obj)
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 418, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/KSP.pyx":418
+  /* "PETSc/KSP.pyx":419
  *     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_ERR(35, 418, __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 == ((int)-1))) __PYX_ERR(35, 419, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":419
+  /* "PETSc/KSP.pyx":420
  *         cdef Vec vec = Vec()
  *         CHKERR( KSPGetRhs(self.ksp, &vec.vec) )
  *         PetscINCREF(vec.obj)             # <<<<<<<<<<<<<<
@@ -154312,7 +163390,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getRhs(struct PyPetscKSPObjec
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_vec->__pyx_base.obj);
 
-  /* "PETSc/KSP.pyx":420
+  /* "PETSc/KSP.pyx":421
  *         CHKERR( KSPGetRhs(self.ksp, &vec.vec) )
  *         PetscINCREF(vec.obj)
  *         return vec             # <<<<<<<<<<<<<<
@@ -154324,7 +163402,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getRhs(struct PyPetscKSPObjec
   __pyx_r = ((PyObject *)__pyx_v_vec);
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":416
+  /* "PETSc/KSP.pyx":417
  *         return reason
  * 
  *     def getRhs(self):             # <<<<<<<<<<<<<<
@@ -154344,7 +163422,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_114getRhs(struct PyPetscKSPObjec
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":422
+/* "PETSc/KSP.pyx":423
  *         return vec
  * 
  *     def getSolution(self):             # <<<<<<<<<<<<<<
@@ -154377,28 +163455,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_116getSolution(struct PyPetscKSP
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getSolution", 0);
 
-  /* "PETSc/KSP.pyx":423
+  /* "PETSc/KSP.pyx":424
  * 
  *     def getSolution(self):
  *         cdef Vec vec = Vec()             # <<<<<<<<<<<<<<
  *         CHKERR( KSPGetSolution(self.ksp, &vec.vec) )
  *         PetscINCREF(vec.obj)
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 424, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/KSP.pyx":424
+  /* "PETSc/KSP.pyx":425
  *     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_ERR(35, 424, __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 == ((int)-1))) __PYX_ERR(35, 425, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":425
+  /* "PETSc/KSP.pyx":426
  *         cdef Vec vec = Vec()
  *         CHKERR( KSPGetSolution(self.ksp, &vec.vec) )
  *         PetscINCREF(vec.obj)             # <<<<<<<<<<<<<<
@@ -154407,7 +163485,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_116getSolution(struct PyPetscKSP
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_vec->__pyx_base.obj);
 
-  /* "PETSc/KSP.pyx":426
+  /* "PETSc/KSP.pyx":427
  *         CHKERR( KSPGetSolution(self.ksp, &vec.vec) )
  *         PetscINCREF(vec.obj)
  *         return vec             # <<<<<<<<<<<<<<
@@ -154419,7 +163497,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_116getSolution(struct PyPetscKSP
   __pyx_r = ((PyObject *)__pyx_v_vec);
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":422
+  /* "PETSc/KSP.pyx":423
  *         return vec
  * 
  *     def getSolution(self):             # <<<<<<<<<<<<<<
@@ -154439,12 +163517,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_116getSolution(struct PyPetscKSP
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":428
+/* "PETSc/KSP.pyx":429
  *         return vec
  * 
  *     def getWorkVecs(self, right=None, left=None):             # <<<<<<<<<<<<<<
  *         cdef bint R = right is not None
- *         cdef bint L = left is not None
+ *         cdef bint L = left  is not None
  */
 
 /* Python wrapper */
@@ -154466,7 +163544,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_119getWorkVecs(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -154477,6 +163557,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_119getWorkVecs(PyObject *__pyx_v
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_right);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_left);
@@ -154484,12 +163565,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_119getWorkVecs(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getWorkVecs") < 0)) __PYX_ERR(35, 428, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getWorkVecs") < 0)) __PYX_ERR(35, 429, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -154499,7 +163582,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_119getWorkVecs(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_ERR(35, 428, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getWorkVecs", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 429, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.getWorkVecs", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -154541,29 +163624,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(struct PyPetscKSP
   PyObject *__pyx_t_15 = NULL;
   __Pyx_RefNannySetupContext("getWorkVecs", 0);
 
-  /* "PETSc/KSP.pyx":429
+  /* "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
+ *         cdef bint L = left  is not None
  *         cdef PetscInt i=0, nr=0, nl=0
  */
   __pyx_t_1 = (__pyx_v_right != Py_None);
   __pyx_v_R = __pyx_t_1;
 
-  /* "PETSc/KSP.pyx":430
+  /* "PETSc/KSP.pyx":431
  *     def getWorkVecs(self, right=None, left=None):
  *         cdef bint R = right is not None
- *         cdef bint L = left is not None             # <<<<<<<<<<<<<<
+ *         cdef bint L = left  is not None             # <<<<<<<<<<<<<<
  *         cdef PetscInt i=0, nr=0, nl=0
  *         cdef PetscVec *vr=NULL, *vl=NULL
  */
   __pyx_t_1 = (__pyx_v_left != Py_None);
   __pyx_v_L = __pyx_t_1;
 
-  /* "PETSc/KSP.pyx":431
+  /* "PETSc/KSP.pyx":432
  *         cdef bint R = right is not None
- *         cdef bint L = left is not None
+ *         cdef bint L = left  is not None
  *         cdef PetscInt i=0, nr=0, nl=0             # <<<<<<<<<<<<<<
  *         cdef PetscVec *vr=NULL, *vl=NULL
  *         if R: nr = asInt(right)
@@ -154572,8 +163655,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(struct PyPetscKSP
   __pyx_v_nr = 0;
   __pyx_v_nl = 0;
 
-  /* "PETSc/KSP.pyx":432
- *         cdef bint L = left is not None
+  /* "PETSc/KSP.pyx":433
+ *         cdef bint L = left  is not None
  *         cdef PetscInt i=0, nr=0, nl=0
  *         cdef PetscVec *vr=NULL, *vl=NULL             # <<<<<<<<<<<<<<
  *         if R: nr = asInt(right)
@@ -154582,7 +163665,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(struct PyPetscKSP
   __pyx_v_vr = NULL;
   __pyx_v_vl = NULL;
 
-  /* "PETSc/KSP.pyx":433
+  /* "PETSc/KSP.pyx":434
  *         cdef PetscInt i=0, nr=0, nl=0
  *         cdef PetscVec *vr=NULL, *vl=NULL
  *         if R: nr = asInt(right)             # <<<<<<<<<<<<<<
@@ -154591,11 +163674,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(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 == -1L && PyErr_Occurred())) __PYX_ERR(35, 433, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_right); if (unlikely(__pyx_t_2 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(35, 434, __pyx_L1_error)
     __pyx_v_nr = __pyx_t_2;
   }
 
-  /* "PETSc/KSP.pyx":434
+  /* "PETSc/KSP.pyx":435
  *         cdef PetscVec *vr=NULL, *vl=NULL
  *         if R: nr = asInt(right)
  *         if L: nl = asInt(left)             # <<<<<<<<<<<<<<
@@ -154604,11 +163687,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(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 == -1L && PyErr_Occurred())) __PYX_ERR(35, 434, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_left); if (unlikely(__pyx_t_2 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(35, 435, __pyx_L1_error)
     __pyx_v_nl = __pyx_t_2;
   }
 
-  /* "PETSc/KSP.pyx":435
+  /* "PETSc/KSP.pyx":436
  *         if R: nr = asInt(right)
  *         if L: nl = asInt(left)
  *         cdef object vecsr = [] if R else None             # <<<<<<<<<<<<<<
@@ -154616,7 +163699,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(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_ERR(35, 435, __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;
@@ -154627,7 +163710,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(struct PyPetscKSP
   __pyx_v_vecsr = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "PETSc/KSP.pyx":436
+  /* "PETSc/KSP.pyx":437
  *         if L: nl = asInt(left)
  *         cdef object vecsr = [] if R else None
  *         cdef object vecsl = [] if L else None             # <<<<<<<<<<<<<<
@@ -154635,7 +163718,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(struct PyPetscKSP
  *         try:
  */
   if ((__pyx_v_L != 0)) {
-    __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 436, __pyx_L1_error)
+    __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 437, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __pyx_t_3 = __pyx_t_4;
     __pyx_t_4 = 0;
@@ -154646,16 +163729,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(struct PyPetscKSP
   __pyx_v_vecsl = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "PETSc/KSP.pyx":437
+  /* "PETSc/KSP.pyx":438
  *         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_ERR(35, 437, __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 == ((int)-1))) __PYX_ERR(35, 438, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":438
+  /* "PETSc/KSP.pyx":439
  *         cdef object vecsl = [] if L else None
  *         CHKERR( KSPCreateVecs(self.ksp, nr, &vr, nl, &vr) )
  *         try:             # <<<<<<<<<<<<<<
@@ -154664,7 +163747,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(struct PyPetscKSP
  */
   /*try:*/ {
 
-    /* "PETSc/KSP.pyx":439
+    /* "PETSc/KSP.pyx":440
  *         CHKERR( KSPCreateVecs(self.ksp, nr, &vr, nl, &vr) )
  *         try:
  *             for i from 0 <= i < nr:             # <<<<<<<<<<<<<<
@@ -154674,20 +163757,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(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":440
+      /* "PETSc/KSP.pyx":441
  *         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_ERR(35, 440, __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, 441, __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_ERR(35, 440, __pyx_L6_error)
+      __pyx_t_6 = __Pyx_PyObject_Append(__pyx_v_vecsr, __pyx_t_3); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(35, 441, __pyx_L6_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     }
 
-    /* "PETSc/KSP.pyx":441
+    /* "PETSc/KSP.pyx":442
  *             for i from 0 <= i < nr:
  *                 vecsr.append(ref_Vec(vr[i]))
  *             for i from 0 <= i < nl:             # <<<<<<<<<<<<<<
@@ -154697,21 +163780,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(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":442
+      /* "PETSc/KSP.pyx":443
  *                 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_ERR(35, 442, __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, 443, __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_ERR(35, 442, __pyx_L6_error)
+      __pyx_t_6 = __Pyx_PyObject_Append(__pyx_v_vecsl, __pyx_t_3); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(35, 443, __pyx_L6_error)
       __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
     }
   }
 
-  /* "PETSc/KSP.pyx":444
+  /* "PETSc/KSP.pyx":445
  *                 vecsl.append(ref_Vec(vl[i]))
  *         finally:
  *             if nr > 0 and vr != NULL:             # <<<<<<<<<<<<<<
@@ -154731,7 +163814,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(struct PyPetscKSP
       __pyx_L13_bool_binop_done:;
       if (__pyx_t_1) {
 
-        /* "PETSc/KSP.pyx":445
+        /* "PETSc/KSP.pyx":446
  *         finally:
  *             if nr > 0 and vr != NULL:
  *                 VecDestroyVecs(nr, &vr) # XXX errors?             # <<<<<<<<<<<<<<
@@ -154740,7 +163823,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(struct PyPetscKSP
  */
         VecDestroyVecs(__pyx_v_nr, (&__pyx_v_vr));
 
-        /* "PETSc/KSP.pyx":444
+        /* "PETSc/KSP.pyx":445
  *                 vecsl.append(ref_Vec(vl[i]))
  *         finally:
  *             if nr > 0 and vr != NULL:             # <<<<<<<<<<<<<<
@@ -154749,7 +163832,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(struct PyPetscKSP
  */
       }
 
-      /* "PETSc/KSP.pyx":446
+      /* "PETSc/KSP.pyx":447
  *             if nr > 0 and vr != NULL:
  *                 VecDestroyVecs(nr, &vr) # XXX errors?
  *             if nl > 0 and vl !=NULL:             # <<<<<<<<<<<<<<
@@ -154767,7 +163850,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(struct PyPetscKSP
       __pyx_L16_bool_binop_done:;
       if (__pyx_t_1) {
 
-        /* "PETSc/KSP.pyx":447
+        /* "PETSc/KSP.pyx":448
  *                 VecDestroyVecs(nr, &vr) # XXX errors?
  *             if nl > 0 and vl !=NULL:
  *                 VecDestroyVecs(nl, &vl) # XXX errors?             # <<<<<<<<<<<<<<
@@ -154776,7 +163859,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(struct PyPetscKSP
  */
         VecDestroyVecs(__pyx_v_nl, (&__pyx_v_vl));
 
-        /* "PETSc/KSP.pyx":446
+        /* "PETSc/KSP.pyx":447
  *             if nr > 0 and vr != NULL:
  *                 VecDestroyVecs(nr, &vr) # XXX errors?
  *             if nl > 0 and vl !=NULL:             # <<<<<<<<<<<<<<
@@ -154804,7 +163887,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(struct PyPetscKSP
       __pyx_t_5 = __pyx_lineno; __pyx_t_8 = __pyx_clineno; __pyx_t_9 = __pyx_filename;
       {
 
-        /* "PETSc/KSP.pyx":444
+        /* "PETSc/KSP.pyx":445
  *                 vecsl.append(ref_Vec(vl[i]))
  *         finally:
  *             if nr > 0 and vr != NULL:             # <<<<<<<<<<<<<<
@@ -154822,7 +163905,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(struct PyPetscKSP
         __pyx_L21_bool_binop_done:;
         if (__pyx_t_1) {
 
-          /* "PETSc/KSP.pyx":445
+          /* "PETSc/KSP.pyx":446
  *         finally:
  *             if nr > 0 and vr != NULL:
  *                 VecDestroyVecs(nr, &vr) # XXX errors?             # <<<<<<<<<<<<<<
@@ -154831,7 +163914,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(struct PyPetscKSP
  */
           VecDestroyVecs(__pyx_v_nr, (&__pyx_v_vr));
 
-          /* "PETSc/KSP.pyx":444
+          /* "PETSc/KSP.pyx":445
  *                 vecsl.append(ref_Vec(vl[i]))
  *         finally:
  *             if nr > 0 and vr != NULL:             # <<<<<<<<<<<<<<
@@ -154840,7 +163923,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(struct PyPetscKSP
  */
         }
 
-        /* "PETSc/KSP.pyx":446
+        /* "PETSc/KSP.pyx":447
  *             if nr > 0 and vr != NULL:
  *                 VecDestroyVecs(nr, &vr) # XXX errors?
  *             if nl > 0 and vl !=NULL:             # <<<<<<<<<<<<<<
@@ -154858,7 +163941,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(struct PyPetscKSP
         __pyx_L24_bool_binop_done:;
         if (__pyx_t_1) {
 
-          /* "PETSc/KSP.pyx":447
+          /* "PETSc/KSP.pyx":448
  *                 VecDestroyVecs(nr, &vr) # XXX errors?
  *             if nl > 0 and vl !=NULL:
  *                 VecDestroyVecs(nl, &vl) # XXX errors?             # <<<<<<<<<<<<<<
@@ -154867,7 +163950,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(struct PyPetscKSP
  */
           VecDestroyVecs(__pyx_v_nl, (&__pyx_v_vl));
 
-          /* "PETSc/KSP.pyx":446
+          /* "PETSc/KSP.pyx":447
  *             if nr > 0 and vr != NULL:
  *                 VecDestroyVecs(nr, &vr) # XXX errors?
  *             if nl > 0 and vl !=NULL:             # <<<<<<<<<<<<<<
@@ -154876,7 +163959,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(struct PyPetscKSP
  */
         }
       }
-      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_13);
         __Pyx_XGIVEREF(__pyx_t_14);
@@ -154894,7 +163976,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(struct PyPetscKSP
     __pyx_L7:;
   }
 
-  /* "PETSc/KSP.pyx":449
+  /* "PETSc/KSP.pyx":450
  *                 VecDestroyVecs(nl, &vl) # XXX errors?
  *         #
  *         if R and L: return (vecsr, vecsl)             # <<<<<<<<<<<<<<
@@ -154912,7 +163994,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(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_ERR(35, 449, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 450, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_vecsr);
     __Pyx_GIVEREF(__pyx_v_vecsr);
@@ -154925,7 +164007,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(struct PyPetscKSP
     goto __pyx_L0;
   }
 
-  /* "PETSc/KSP.pyx":450
+  /* "PETSc/KSP.pyx":451
  *         #
  *         if R and L: return (vecsr, vecsl)
  *         elif R:     return vecsr             # <<<<<<<<<<<<<<
@@ -154940,7 +164022,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(struct PyPetscKSP
     goto __pyx_L0;
   }
 
-  /* "PETSc/KSP.pyx":451
+  /* "PETSc/KSP.pyx":452
  *         if R and L: return (vecsr, vecsl)
  *         elif R:     return vecsr
  *         elif L:     return vecsl             # <<<<<<<<<<<<<<
@@ -154955,7 +164037,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(struct PyPetscKSP
     goto __pyx_L0;
   }
 
-  /* "PETSc/KSP.pyx":452
+  /* "PETSc/KSP.pyx":453
  *         elif R:     return vecsr
  *         elif L:     return vecsl
  *         else:       return None             # <<<<<<<<<<<<<<
@@ -154969,12 +164051,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(struct PyPetscKSP
     goto __pyx_L0;
   }
 
-  /* "PETSc/KSP.pyx":428
+  /* "PETSc/KSP.pyx":429
  *         return vec
  * 
  *     def getWorkVecs(self, right=None, left=None):             # <<<<<<<<<<<<<<
  *         cdef bint R = right is not None
- *         cdef bint L = left is not None
+ *         cdef bint L = left  is not None
  */
 
   /* function exit code */
@@ -154991,7 +164073,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_118getWorkVecs(struct PyPetscKSP
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":454
+/* "PETSc/KSP.pyx":455
  *         else:       return None
  * 
  *     def buildSolution(self, Vec x=None):             # <<<<<<<<<<<<<<
@@ -155016,6 +164098,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_121buildSolution(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -155028,11 +164111,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_121buildSolution(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "buildSolution") < 0)) __PYX_ERR(35, 454, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "buildSolution") < 0)) __PYX_ERR(35, 455, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -155041,13 +164125,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_121buildSolution(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("buildSolution", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 454, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("buildSolution", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 455, __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_ERR(35, 454, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "x", 0))) __PYX_ERR(35, 455, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_120buildSolution(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_x);
 
   /* function exit code */
@@ -155069,7 +164153,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_120buildSolution(struct PyPetscK
   __Pyx_RefNannySetupContext("buildSolution", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_x);
 
-  /* "PETSc/KSP.pyx":455
+  /* "PETSc/KSP.pyx":456
  * 
  *     def buildSolution(self, Vec x=None):
  *         if x is None: x = Vec()             # <<<<<<<<<<<<<<
@@ -155079,13 +164163,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_120buildSolution(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 *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 455, __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, 456, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_x, ((struct PyPetscVecObject *)__pyx_t_3));
     __pyx_t_3 = 0;
   }
 
-  /* "PETSc/KSP.pyx":456
+  /* "PETSc/KSP.pyx":457
  *     def buildSolution(self, Vec x=None):
  *         if x is None: x = Vec()
  *         if x.vec == NULL:             # <<<<<<<<<<<<<<
@@ -155095,25 +164179,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_120buildSolution(struct PyPetscK
   __pyx_t_2 = ((__pyx_v_x->vec == NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/KSP.pyx":457
+    /* "PETSc/KSP.pyx":458
  *         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_ERR(35, 457, __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 == ((int)-1))) __PYX_ERR(35, 458, __pyx_L1_error)
 
-    /* "PETSc/KSP.pyx":458
+    /* "PETSc/KSP.pyx":459
  *         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_ERR(35, 458, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecDuplicate(__pyx_v_x->vec, (&__pyx_v_x->vec))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(35, 459, __pyx_L1_error)
 
-    /* "PETSc/KSP.pyx":456
+    /* "PETSc/KSP.pyx":457
  *     def buildSolution(self, Vec x=None):
  *         if x is None: x = Vec()
  *         if x.vec == NULL:             # <<<<<<<<<<<<<<
@@ -155122,16 +164206,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_120buildSolution(struct PyPetscK
  */
   }
 
-  /* "PETSc/KSP.pyx":459
+  /* "PETSc/KSP.pyx":460
  *             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_ERR(35, 459, __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 == ((int)-1))) __PYX_ERR(35, 460, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":460
+  /* "PETSc/KSP.pyx":461
  *             CHKERR( VecDuplicate(x.vec, &x.vec) )
  *         CHKERR( KSPBuildSolution(self.ksp, x.vec, NULL) )
  *         return x             # <<<<<<<<<<<<<<
@@ -155143,7 +164227,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_120buildSolution(struct PyPetscK
   __pyx_r = ((PyObject *)__pyx_v_x);
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":454
+  /* "PETSc/KSP.pyx":455
  *         else:       return None
  * 
  *     def buildSolution(self, Vec x=None):             # <<<<<<<<<<<<<<
@@ -155163,7 +164247,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_120buildSolution(struct PyPetscK
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":462
+/* "PETSc/KSP.pyx":463
  *         return x
  * 
  *     def buildResidual(self, Vec r=None):             # <<<<<<<<<<<<<<
@@ -155188,6 +164272,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_123buildResidual(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -155200,11 +164285,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_123buildResidual(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "buildResidual") < 0)) __PYX_ERR(35, 462, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "buildResidual") < 0)) __PYX_ERR(35, 463, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -155213,13 +164299,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_123buildResidual(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("buildResidual", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 462, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("buildResidual", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 463, __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_ERR(35, 462, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_r), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "r", 0))) __PYX_ERR(35, 463, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_3KSP_122buildResidual(((struct PyPetscKSPObject *)__pyx_v_self), __pyx_v_r);
 
   /* function exit code */
@@ -155241,7 +164327,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_122buildResidual(struct PyPetscK
   __Pyx_RefNannySetupContext("buildResidual", 0);
   __Pyx_INCREF((PyObject *)__pyx_v_r);
 
-  /* "PETSc/KSP.pyx":463
+  /* "PETSc/KSP.pyx":464
  * 
  *     def buildResidual(self, Vec r=None):
  *         if r is None: r = Vec()             # <<<<<<<<<<<<<<
@@ -155251,13 +164337,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_122buildResidual(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 *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 463, __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, 464, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_r, ((struct PyPetscVecObject *)__pyx_t_3));
     __pyx_t_3 = 0;
   }
 
-  /* "PETSc/KSP.pyx":464
+  /* "PETSc/KSP.pyx":465
  *     def buildResidual(self, Vec r=None):
  *         if r is None: r = Vec()
  *         if r.vec == NULL:             # <<<<<<<<<<<<<<
@@ -155267,25 +164353,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_122buildResidual(struct PyPetscK
   __pyx_t_2 = ((__pyx_v_r->vec == NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/KSP.pyx":465
+    /* "PETSc/KSP.pyx":466
  *         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_ERR(35, 465, __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 == ((int)-1))) __PYX_ERR(35, 466, __pyx_L1_error)
 
-    /* "PETSc/KSP.pyx":466
+    /* "PETSc/KSP.pyx":467
  *         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_ERR(35, 466, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecDuplicate(__pyx_v_r->vec, (&__pyx_v_r->vec))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(35, 467, __pyx_L1_error)
 
-    /* "PETSc/KSP.pyx":464
+    /* "PETSc/KSP.pyx":465
  *     def buildResidual(self, Vec r=None):
  *         if r is None: r = Vec()
  *         if r.vec == NULL:             # <<<<<<<<<<<<<<
@@ -155294,16 +164380,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_122buildResidual(struct PyPetscK
  */
   }
 
-  /* "PETSc/KSP.pyx":467
+  /* "PETSc/KSP.pyx":468
  *             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_ERR(35, 467, __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 == ((int)-1))) __PYX_ERR(35, 468, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":468
+  /* "PETSc/KSP.pyx":469
  *             CHKERR( VecDuplicate(r.vec, &r.vec) )
  *         CHKERR( KSPBuildResidual(self.ksp , NULL, r.vec, &r.vec) )
  *         return r             # <<<<<<<<<<<<<<
@@ -155315,7 +164401,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_122buildResidual(struct PyPetscK
   __pyx_r = ((PyObject *)__pyx_v_r);
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":462
+  /* "PETSc/KSP.pyx":463
  *         return x
  * 
  *     def buildResidual(self, Vec r=None):             # <<<<<<<<<<<<<<
@@ -155335,7 +164421,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_122buildResidual(struct PyPetscK
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":470
+/* "PETSc/KSP.pyx":471
  *         return r
  * 
  *     def computeEigenvalues(self):             # <<<<<<<<<<<<<<
@@ -155375,7 +164461,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_124computeEigenvalues(struct PyP
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("computeEigenvalues", 0);
 
-  /* "PETSc/KSP.pyx":471
+  /* "PETSc/KSP.pyx":472
  * 
  *     def computeEigenvalues(self):
  *         cdef PetscInt its = 0             # <<<<<<<<<<<<<<
@@ -155384,7 +164470,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_124computeEigenvalues(struct PyP
  */
   __pyx_v_its = 0;
 
-  /* "PETSc/KSP.pyx":472
+  /* "PETSc/KSP.pyx":473
  *     def computeEigenvalues(self):
  *         cdef PetscInt its = 0
  *         cdef PetscInt neig = 0             # <<<<<<<<<<<<<<
@@ -155393,7 +164479,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_124computeEigenvalues(struct PyP
  */
   __pyx_v_neig = 0;
 
-  /* "PETSc/KSP.pyx":473
+  /* "PETSc/KSP.pyx":474
  *         cdef PetscInt its = 0
  *         cdef PetscInt neig = 0
  *         cdef PetscReal *rdata = NULL             # <<<<<<<<<<<<<<
@@ -155402,7 +164488,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_124computeEigenvalues(struct PyP
  */
   __pyx_v_rdata = NULL;
 
-  /* "PETSc/KSP.pyx":474
+  /* "PETSc/KSP.pyx":475
  *         cdef PetscInt neig = 0
  *         cdef PetscReal *rdata = NULL
  *         cdef PetscReal *idata = NULL             # <<<<<<<<<<<<<<
@@ -155411,91 +164497,91 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_124computeEigenvalues(struct PyP
  */
   __pyx_v_idata = NULL;
 
-  /* "PETSc/KSP.pyx":475
+  /* "PETSc/KSP.pyx":476
  *         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_ERR(35, 475, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGetIterationNumber(__pyx_v_self->ksp, (&__pyx_v_its))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(35, 476, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":476
+  /* "PETSc/KSP.pyx":477
  *         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_ERR(35, 476, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_r(__pyx_v_its)); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 477, __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_ERR(35, 476, __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, 477, __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":477
+  /* "PETSc/KSP.pyx":478
  *         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_ERR(35, 477, __pyx_L1_error)
+  __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_r(__pyx_v_its)); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 478, __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_ERR(35, 477, __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, 478, __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":478
+  /* "PETSc/KSP.pyx":479
  *         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_ERR(35, 478, __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 == ((int)-1))) __PYX_ERR(35, 479, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":479
+  /* "PETSc/KSP.pyx":480
  *         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_ERR(35, 479, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_c(__pyx_v_neig)); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 480, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_eigen = ((PyArrayObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/KSP.pyx":480
+  /* "PETSc/KSP.pyx":481
  *         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_ERR(35, 480, __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, 481, __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_ERR(35, 480, __pyx_L1_error)
+  if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_eigen), __pyx_n_s_real, __pyx_t_2) < 0) __PYX_ERR(35, 481, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "PETSc/KSP.pyx":481
+  /* "PETSc/KSP.pyx":482
  *         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_ERR(35, 481, __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, 482, __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_ERR(35, 481, __pyx_L1_error)
+  if (__Pyx_PyObject_SetAttrStr(((PyObject *)__pyx_v_eigen), __pyx_n_s_imag, __pyx_t_2) < 0) __PYX_ERR(35, 482, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "PETSc/KSP.pyx":482
+  /* "PETSc/KSP.pyx":483
  *         eigen.real = r[:neig]
  *         eigen.imag = i[:neig]
  *         return eigen             # <<<<<<<<<<<<<<
@@ -155507,7 +164593,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_124computeEigenvalues(struct PyP
   __pyx_r = ((PyObject *)__pyx_v_eigen);
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":470
+  /* "PETSc/KSP.pyx":471
  *         return r
  * 
  *     def computeEigenvalues(self):             # <<<<<<<<<<<<<<
@@ -155530,7 +164616,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_124computeEigenvalues(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":484
+/* "PETSc/KSP.pyx":485
  *         return eigen
  * 
  *     def computeExtremeSingularValues(self):             # <<<<<<<<<<<<<<
@@ -155566,7 +164652,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_126computeExtremeSingularValues(
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("computeExtremeSingularValues", 0);
 
-  /* "PETSc/KSP.pyx":485
+  /* "PETSc/KSP.pyx":486
  * 
  *     def computeExtremeSingularValues(self):
  *         cdef PetscReal smax = 0             # <<<<<<<<<<<<<<
@@ -155575,7 +164661,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_126computeExtremeSingularValues(
  */
   __pyx_v_smax = 0.0;
 
-  /* "PETSc/KSP.pyx":486
+  /* "PETSc/KSP.pyx":487
  *     def computeExtremeSingularValues(self):
  *         cdef PetscReal smax = 0
  *         cdef PetscReal smin = 0             # <<<<<<<<<<<<<<
@@ -155584,16 +164670,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_126computeExtremeSingularValues(
  */
   __pyx_v_smin = 0.0;
 
-  /* "PETSc/KSP.pyx":487
+  /* "PETSc/KSP.pyx":488
  *         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_ERR(35, 487, __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 == ((int)-1))) __PYX_ERR(35, 488, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":488
+  /* "PETSc/KSP.pyx":489
  *         cdef PetscReal smin = 0
  *         CHKERR( KSPComputeExtremeSingularValues(self.ksp, &smax, &smin) )
  *         return smax, smin             # <<<<<<<<<<<<<<
@@ -155601,11 +164687,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_126computeExtremeSingularValues(
  *     # --- GMRES ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_smax); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 488, __pyx_L1_error)
+  __pyx_t_2 = PyFloat_FromDouble(__pyx_v_smax); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 489, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_smin); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 488, __pyx_L1_error)
+  __pyx_t_3 = PyFloat_FromDouble(__pyx_v_smin); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 489, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 488, __pyx_L1_error)
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 489, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -155617,7 +164703,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_126computeExtremeSingularValues(
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":484
+  /* "PETSc/KSP.pyx":485
  *         return eigen
  * 
  *     def computeExtremeSingularValues(self):             # <<<<<<<<<<<<<<
@@ -155638,7 +164724,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_126computeExtremeSingularValues(
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":492
+/* "PETSc/KSP.pyx":493
  *     # --- GMRES ---
  * 
  *     def setGMRESRestart(self, restart):             # <<<<<<<<<<<<<<
@@ -155662,6 +164748,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_129setGMRESRestart(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -155672,7 +164759,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_129setGMRESRestart(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_ERR(35, 492, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setGMRESRestart") < 0)) __PYX_ERR(35, 493, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -155683,7 +164770,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_129setGMRESRestart(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setGMRESRestart", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 492, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setGMRESRestart", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 493, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setGMRESRestart", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -155704,26 +164791,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_128setGMRESRestart(struct PyPets
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setGMRESRestart", 0);
 
-  /* "PETSc/KSP.pyx":493
+  /* "PETSc/KSP.pyx":494
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(35, 493, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_restart); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(35, 494, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/KSP.pyx":494
+  /* "PETSc/KSP.pyx":495
  *     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_ERR(35, 494, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPGMRESSetRestart(__pyx_v_self->ksp, __pyx_v_ival)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(35, 495, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":492
+  /* "PETSc/KSP.pyx":493
  *     # --- GMRES ---
  * 
  *     def setGMRESRestart(self, restart):             # <<<<<<<<<<<<<<
@@ -155743,7 +164830,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_128setGMRESRestart(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":498
+/* "PETSc/KSP.pyx":499
  *     # --- Python ---
  * 
  *     def createPython(self, context=None, comm=None):             # <<<<<<<<<<<<<<
@@ -155770,7 +164857,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_131createPython(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -155781,6 +164870,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_131createPython(PyObject *__pyx_
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_context);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -155788,12 +164878,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_131createPython(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createPython") < 0)) __PYX_ERR(35, 498, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createPython") < 0)) __PYX_ERR(35, 499, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -155803,7 +164895,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_131createPython(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createPython", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 498, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createPython", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 499, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.createPython", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -155825,17 +164917,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_130createPython(struct PyPetscKS
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("createPython", 0);
 
-  /* "PETSc/KSP.pyx":499
+  /* "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
  *         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_ERR(35, 499, __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, 500, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/KSP.pyx":500
+  /* "PETSc/KSP.pyx":501
  *     def createPython(self, context=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscKSP newksp = NULL             # <<<<<<<<<<<<<<
@@ -155844,16 +164936,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_130createPython(struct PyPetscKS
  */
   __pyx_v_newksp = NULL;
 
-  /* "PETSc/KSP.pyx":501
+  /* "PETSc/KSP.pyx":502
  *         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_ERR(35, 501, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPCreate(__pyx_v_ccomm, (&__pyx_v_newksp))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(35, 502, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":502
+  /* "PETSc/KSP.pyx":503
  *         cdef PetscKSP newksp = NULL
  *         CHKERR( KSPCreate(ccomm, &newksp) )
  *         PetscCLEAR(self.obj); self.ksp = newksp             # <<<<<<<<<<<<<<
@@ -155863,25 +164955,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_130createPython(struct PyPetscKS
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->ksp = __pyx_v_newksp;
 
-  /* "PETSc/KSP.pyx":503
+  /* "PETSc/KSP.pyx":504
  *         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_ERR(35, 503, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPSetType(__pyx_v_self->ksp, KSPPYTHON)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(35, 504, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":504
+  /* "PETSc/KSP.pyx":505
  *         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_ERR(35, 504, __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 == ((int)-1))) __PYX_ERR(35, 505, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":505
+  /* "PETSc/KSP.pyx":506
  *         CHKERR( KSPSetType(self.ksp, KSPPYTHON) )
  *         CHKERR( KSPPythonSetContext(self.ksp, <void*>context) )
  *         return self             # <<<<<<<<<<<<<<
@@ -155893,7 +164985,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_130createPython(struct PyPetscKS
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":498
+  /* "PETSc/KSP.pyx":499
  *     # --- Python ---
  * 
  *     def createPython(self, context=None, comm=None):             # <<<<<<<<<<<<<<
@@ -155911,7 +165003,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_130createPython(struct PyPetscKS
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":507
+/* "PETSc/KSP.pyx":508
  *         return self
  * 
  *     def setPythonContext(self, context):             # <<<<<<<<<<<<<<
@@ -155935,6 +165027,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_133setPythonContext(PyObject *__
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -155945,7 +165038,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_133setPythonContext(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_ERR(35, 507, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPythonContext") < 0)) __PYX_ERR(35, 508, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -155956,7 +165049,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_133setPythonContext(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setPythonContext", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 507, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setPythonContext", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 508, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setPythonContext", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -155975,16 +165068,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_132setPythonContext(struct PyPet
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setPythonContext", 0);
 
-  /* "PETSc/KSP.pyx":508
+  /* "PETSc/KSP.pyx":509
  * 
  *     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_ERR(35, 508, __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 == ((int)-1))) __PYX_ERR(35, 509, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":507
+  /* "PETSc/KSP.pyx":508
  *         return self
  * 
  *     def setPythonContext(self, context):             # <<<<<<<<<<<<<<
@@ -156004,7 +165097,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_132setPythonContext(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":510
+/* "PETSc/KSP.pyx":511
  *         CHKERR( KSPPythonSetContext(self.ksp, <void*>context) )
  * 
  *     def getPythonContext(self):             # <<<<<<<<<<<<<<
@@ -156037,7 +165130,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_134getPythonContext(struct PyPet
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getPythonContext", 0);
 
-  /* "PETSc/KSP.pyx":511
+  /* "PETSc/KSP.pyx":512
  * 
  *     def getPythonContext(self):
  *         cdef void *context = NULL             # <<<<<<<<<<<<<<
@@ -156046,16 +165139,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_134getPythonContext(struct PyPet
  */
   __pyx_v_context = NULL;
 
-  /* "PETSc/KSP.pyx":512
+  /* "PETSc/KSP.pyx":513
  *     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_ERR(35, 512, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPPythonGetContext(__pyx_v_self->ksp, (&__pyx_v_context))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(35, 513, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":513
+  /* "PETSc/KSP.pyx":514
  *         cdef void *context = NULL
  *         CHKERR( KSPPythonGetContext(self.ksp, &context) )
  *         if context == NULL: return None             # <<<<<<<<<<<<<<
@@ -156070,7 +165163,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_134getPythonContext(struct PyPet
     goto __pyx_L0;
   }
 
-  /* "PETSc/KSP.pyx":514
+  /* "PETSc/KSP.pyx":515
  *         CHKERR( KSPPythonGetContext(self.ksp, &context) )
  *         if context == NULL: return None
  *         else: return <object> context             # <<<<<<<<<<<<<<
@@ -156084,7 +165177,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_134getPythonContext(struct PyPet
     goto __pyx_L0;
   }
 
-  /* "PETSc/KSP.pyx":510
+  /* "PETSc/KSP.pyx":511
  *         CHKERR( KSPPythonSetContext(self.ksp, <void*>context) )
  * 
  *     def getPythonContext(self):             # <<<<<<<<<<<<<<
@@ -156102,7 +165195,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_134getPythonContext(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":516
+/* "PETSc/KSP.pyx":517
  *         else: return <object> context
  * 
  *     def setPythonType(self, py_type):             # <<<<<<<<<<<<<<
@@ -156126,6 +165219,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_137setPythonType(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -156136,7 +165230,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_137setPythonType(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_ERR(35, 516, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPythonType") < 0)) __PYX_ERR(35, 517, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -156147,7 +165241,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3KSP_137setPythonType(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setPythonType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 516, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setPythonType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(35, 517, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.KSP.setPythonType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -156169,7 +165263,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_136setPythonType(struct PyPetscK
   __Pyx_RefNannySetupContext("setPythonType", 0);
   __Pyx_INCREF(__pyx_v_py_type);
 
-  /* "PETSc/KSP.pyx":517
+  /* "PETSc/KSP.pyx":518
  * 
  *     def setPythonType(self, py_type):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -156178,28 +165272,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_136setPythonType(struct PyPetscK
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/KSP.pyx":518
+  /* "PETSc/KSP.pyx":519
  *     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_ERR(35, 518, __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, 519, __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":519
+  /* "PETSc/KSP.pyx":520
  *         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_ERR(35, 519, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(KSPPythonSetType(__pyx_v_self->ksp, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(35, 520, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":516
+  /* "PETSc/KSP.pyx":517
  *         else: return <object> context
  * 
  *     def setPythonType(self, py_type):             # <<<<<<<<<<<<<<
@@ -156221,7 +165315,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_136setPythonType(struct PyPetscK
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":524
+/* "PETSc/KSP.pyx":525
  * 
  *     property appctx:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -156250,7 +165344,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6appctx___get__(struct PyPetscKS
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/KSP.pyx":525
+  /* "PETSc/KSP.pyx":526
  *     property appctx:
  *         def __get__(self):
  *             return self.getAppCtx()             # <<<<<<<<<<<<<<
@@ -156258,10 +165352,10 @@ 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_ERR(35, 525, __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, 526, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -156271,10 +165365,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_ERR(35, 525, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 526, __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(35, 525, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 526, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -156282,7 +165376,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6appctx___get__(struct PyPetscKS
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":524
+  /* "PETSc/KSP.pyx":525
  * 
  *     property appctx:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -156303,7 +165397,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6appctx___get__(struct PyPetscKS
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":526
+/* "PETSc/KSP.pyx":527
  *         def __get__(self):
  *             return self.getAppCtx()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -156333,17 +165427,17 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_6appctx_2__set__(struct PyPetscKSPObje
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/KSP.pyx":527
+  /* "PETSc/KSP.pyx":528
  *             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_ERR(35, 527, __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, 528, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -156353,23 +165447,41 @@ 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_ERR(35, 527, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 528, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(35, 527, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 528, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 528, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 528, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 528, __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":526
+  /* "PETSc/KSP.pyx":527
  *         def __get__(self):
  *             return self.getAppCtx()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -156392,7 +165504,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_6appctx_2__set__(struct PyPetscKSPObje
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":532
+/* "PETSc/KSP.pyx":533
  * 
  *     property dm:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -156421,7 +165533,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2dm___get__(struct PyPetscKSPObj
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/KSP.pyx":533
+  /* "PETSc/KSP.pyx":534
  *     property dm:
  *         def __get__(self):
  *             return self.getDM()             # <<<<<<<<<<<<<<
@@ -156429,10 +165541,10 @@ 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_ERR(35, 533, __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, 534, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -156442,10 +165554,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_ERR(35, 533, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 534, __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(35, 533, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 534, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -156453,7 +165565,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2dm___get__(struct PyPetscKSPObj
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":532
+  /* "PETSc/KSP.pyx":533
  * 
  *     property dm:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -156474,7 +165586,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2dm___get__(struct PyPetscKSPObj
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":534
+/* "PETSc/KSP.pyx":535
  *         def __get__(self):
  *             return self.getDM()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -156504,17 +165616,17 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_2dm_2__set__(struct PyPetscKSPObject *
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/KSP.pyx":535
+  /* "PETSc/KSP.pyx":536
  *             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_ERR(35, 535, __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, 536, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -156524,23 +165636,41 @@ 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_ERR(35, 535, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 536, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(35, 535, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 536, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 536, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 536, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 536, __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":534
+  /* "PETSc/KSP.pyx":535
  *         def __get__(self):
  *             return self.getDM()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -156563,7 +165693,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_2dm_2__set__(struct PyPetscKSPObject *
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":540
+/* "PETSc/KSP.pyx":541
  * 
  *     property vec_sol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -156592,7 +165722,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7vec_sol___get__(struct PyPetscK
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/KSP.pyx":541
+  /* "PETSc/KSP.pyx":542
  *     property vec_sol:
  *         def __get__(self):
  *             return self.getSolution()             # <<<<<<<<<<<<<<
@@ -156600,10 +165730,10 @@ 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_ERR(35, 541, __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, 542, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -156613,10 +165743,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_ERR(35, 541, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 542, __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(35, 541, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 542, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -156624,7 +165754,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7vec_sol___get__(struct PyPetscK
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":540
+  /* "PETSc/KSP.pyx":541
  * 
  *     property vec_sol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -156645,7 +165775,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7vec_sol___get__(struct PyPetscK
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":544
+/* "PETSc/KSP.pyx":545
  * 
  *     property vec_rhs:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -156674,7 +165804,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7vec_rhs___get__(struct PyPetscK
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/KSP.pyx":545
+  /* "PETSc/KSP.pyx":546
  *     property vec_rhs:
  *         def __get__(self):
  *             return self.getRhs()             # <<<<<<<<<<<<<<
@@ -156682,10 +165812,10 @@ 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_ERR(35, 545, __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, 546, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -156695,10 +165825,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_ERR(35, 545, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 546, __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(35, 545, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 546, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -156706,7 +165836,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7vec_rhs___get__(struct PyPetscK
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":544
+  /* "PETSc/KSP.pyx":545
  * 
  *     property vec_rhs:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -156727,7 +165857,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7vec_rhs___get__(struct PyPetscK
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":550
+/* "PETSc/KSP.pyx":551
  * 
  *     property mat_op:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -156756,7 +165886,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6mat_op___get__(struct PyPetscKS
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/KSP.pyx":551
+  /* "PETSc/KSP.pyx":552
  *     property mat_op:
  *         def __get__(self):
  *             return self.getOperators()[0]             # <<<<<<<<<<<<<<
@@ -156764,10 +165894,10 @@ 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_ERR(35, 551, __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, 552, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -156777,21 +165907,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_ERR(35, 551, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 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_ERR(35, 551, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 552, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 551, __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, 552, __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":550
+  /* "PETSc/KSP.pyx":551
  * 
  *     property mat_op:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -156812,7 +165942,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6mat_op___get__(struct PyPetscKS
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":554
+/* "PETSc/KSP.pyx":555
  * 
  *     property mat_pc:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -156841,7 +165971,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6mat_pc___get__(struct PyPetscKS
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/KSP.pyx":555
+  /* "PETSc/KSP.pyx":556
  *     property mat_pc:
  *         def __get__(self):
  *             return self.getOperators()[1]             # <<<<<<<<<<<<<<
@@ -156849,10 +165979,10 @@ 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_ERR(35, 555, __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, 556, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -156862,21 +165992,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_ERR(35, 555, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 556, __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(35, 555, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 556, __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(35, 555, __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, 556, __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":554
+  /* "PETSc/KSP.pyx":555
  * 
  *     property mat_pc:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -156897,7 +166027,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6mat_pc___get__(struct PyPetscKS
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":560
+/* "PETSc/KSP.pyx":561
  * 
  *     property guess_nonzero:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -156926,7 +166056,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_13guess_nonzero___get__(struct P
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/KSP.pyx":561
+  /* "PETSc/KSP.pyx":562
  *     property guess_nonzero:
  *         def __get__(self):
  *             return self.getInitialGuessNonzero()             # <<<<<<<<<<<<<<
@@ -156934,10 +166064,10 @@ 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_ERR(35, 561, __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, 562, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -156947,10 +166077,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_ERR(35, 561, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 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_ERR(35, 561, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 562, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -156958,7 +166088,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_13guess_nonzero___get__(struct P
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":560
+  /* "PETSc/KSP.pyx":561
  * 
  *     property guess_nonzero:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -156979,7 +166109,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_13guess_nonzero___get__(struct P
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":562
+/* "PETSc/KSP.pyx":563
  *         def __get__(self):
  *             return self.getInitialGuessNonzero()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -157009,17 +166139,17 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_13guess_nonzero_2__set__(struct PyPets
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/KSP.pyx":563
+  /* "PETSc/KSP.pyx":564
  *             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_ERR(35, 563, __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, 564, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -157029,23 +166159,41 @@ 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_ERR(35, 563, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 564, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(35, 563, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 564, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 564, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 564, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 564, __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":562
+  /* "PETSc/KSP.pyx":563
  *         def __get__(self):
  *             return self.getInitialGuessNonzero()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -157068,7 +166216,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_13guess_nonzero_2__set__(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":566
+/* "PETSc/KSP.pyx":567
  * 
  *     property guess_knoll:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -157097,7 +166245,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_11guess_knoll___get__(struct PyP
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/KSP.pyx":567
+  /* "PETSc/KSP.pyx":568
  *     property guess_knoll:
  *         def __get__(self):
  *             return self.getInitialGuessKnoll()             # <<<<<<<<<<<<<<
@@ -157105,10 +166253,10 @@ 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_ERR(35, 567, __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, 568, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -157118,10 +166266,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_ERR(35, 567, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 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_ERR(35, 567, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 568, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -157129,7 +166277,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_11guess_knoll___get__(struct PyP
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":566
+  /* "PETSc/KSP.pyx":567
  * 
  *     property guess_knoll:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -157150,7 +166298,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_11guess_knoll___get__(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":568
+/* "PETSc/KSP.pyx":569
  *         def __get__(self):
  *             return self.getInitialGuessKnoll()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -157180,17 +166328,17 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_11guess_knoll_2__set__(struct PyPetscK
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/KSP.pyx":569
+  /* "PETSc/KSP.pyx":570
  *             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_ERR(35, 569, __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, 570, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -157200,23 +166348,41 @@ 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_ERR(35, 569, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 570, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(35, 569, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 570, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 570, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 570, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 570, __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":568
+  /* "PETSc/KSP.pyx":569
  *         def __get__(self):
  *             return self.getInitialGuessKnoll()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -157239,7 +166405,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_11guess_knoll_2__set__(struct PyPetscK
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":574
+/* "PETSc/KSP.pyx":575
  * 
  *     property pc:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -157268,7 +166434,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2pc___get__(struct PyPetscKSPObj
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/KSP.pyx":575
+  /* "PETSc/KSP.pyx":576
  *     property pc:
  *         def __get__(self):
  *             return self.getPC()             # <<<<<<<<<<<<<<
@@ -157276,10 +166442,10 @@ 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_ERR(35, 575, __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, 576, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -157289,10 +166455,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_ERR(35, 575, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 576, __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(35, 575, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 576, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -157300,7 +166466,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2pc___get__(struct PyPetscKSPObj
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":574
+  /* "PETSc/KSP.pyx":575
  * 
  *     property pc:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -157321,7 +166487,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_2pc___get__(struct PyPetscKSPObj
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":578
+/* "PETSc/KSP.pyx":579
  * 
  *     property pc_side:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -157350,7 +166516,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7pc_side___get__(struct PyPetscK
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/KSP.pyx":579
+  /* "PETSc/KSP.pyx":580
  *     property pc_side:
  *         def __get__(self):
  *             return self.getPCSide()             # <<<<<<<<<<<<<<
@@ -157358,10 +166524,10 @@ 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_ERR(35, 579, __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, 580, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -157371,10 +166537,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_ERR(35, 579, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 580, __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(35, 579, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 580, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -157382,7 +166548,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7pc_side___get__(struct PyPetscK
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":578
+  /* "PETSc/KSP.pyx":579
  * 
  *     property pc_side:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -157403,7 +166569,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7pc_side___get__(struct PyPetscK
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":580
+/* "PETSc/KSP.pyx":581
  *         def __get__(self):
  *             return self.getPCSide()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -157433,17 +166599,17 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_7pc_side_2__set__(struct PyPetscKSPObj
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/KSP.pyx":581
+  /* "PETSc/KSP.pyx":582
  *             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_ERR(35, 581, __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, 582, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -157453,23 +166619,41 @@ 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_ERR(35, 581, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 582, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(35, 581, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 582, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 582, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 582, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 582, __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":580
+  /* "PETSc/KSP.pyx":581
  *         def __get__(self):
  *             return self.getPCSide()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -157492,7 +166676,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_7pc_side_2__set__(struct PyPetscKSPObj
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":584
+/* "PETSc/KSP.pyx":585
  * 
  *     property norm_type:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -157521,7 +166705,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_9norm_type___get__(struct PyPets
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/KSP.pyx":585
+  /* "PETSc/KSP.pyx":586
  *     property norm_type:
  *         def __get__(self):
  *             return self.getNormType()             # <<<<<<<<<<<<<<
@@ -157529,10 +166713,10 @@ 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_ERR(35, 585, __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, 586, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -157542,10 +166726,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_ERR(35, 585, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 586, __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(35, 585, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 586, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -157553,7 +166737,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_9norm_type___get__(struct PyPets
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":584
+  /* "PETSc/KSP.pyx":585
  * 
  *     property norm_type:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -157574,7 +166758,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_9norm_type___get__(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":586
+/* "PETSc/KSP.pyx":587
  *         def __get__(self):
  *             return self.getNormType()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -157604,17 +166788,17 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_9norm_type_2__set__(struct PyPetscKSPO
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/KSP.pyx":587
+  /* "PETSc/KSP.pyx":588
  *             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_ERR(35, 587, __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, 588, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -157624,23 +166808,41 @@ 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_ERR(35, 587, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 588, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(35, 587, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 588, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 588, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 588, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 588, __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":586
+  /* "PETSc/KSP.pyx":587
  *         def __get__(self):
  *             return self.getNormType()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -157663,7 +166865,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_9norm_type_2__set__(struct PyPetscKSPO
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":592
+/* "PETSc/KSP.pyx":593
  * 
  *     property rtol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -157692,7 +166894,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4rtol___get__(struct PyPetscKSPO
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/KSP.pyx":593
+  /* "PETSc/KSP.pyx":594
  *     property rtol:
  *         def __get__(self):
  *             return self.getTolerances()[0]             # <<<<<<<<<<<<<<
@@ -157700,10 +166902,10 @@ 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_ERR(35, 593, __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, 594, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -157713,21 +166915,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_ERR(35, 593, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 594, __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(35, 593, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 594, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 593, __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, 594, __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":592
+  /* "PETSc/KSP.pyx":593
  * 
  *     property rtol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -157748,7 +166950,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4rtol___get__(struct PyPetscKSPO
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":594
+/* "PETSc/KSP.pyx":595
  *         def __get__(self):
  *             return self.getTolerances()[0]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -157777,25 +166979,25 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_4rtol_2__set__(struct PyPetscKSPObject
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/KSP.pyx":595
+  /* "PETSc/KSP.pyx":596
  *             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_ERR(35, 595, __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, 596, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 595, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 596, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  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)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_rtol, __pyx_v_value) < 0) __PYX_ERR(35, 596, __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, 596, __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":594
+  /* "PETSc/KSP.pyx":595
  *         def __get__(self):
  *             return self.getTolerances()[0]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -157817,7 +167019,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_4rtol_2__set__(struct PyPetscKSPObject
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":598
+/* "PETSc/KSP.pyx":599
  * 
  *     property atol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -157846,7 +167048,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4atol___get__(struct PyPetscKSPO
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/KSP.pyx":599
+  /* "PETSc/KSP.pyx":600
  *     property atol:
  *         def __get__(self):
  *             return self.getTolerances()[1]             # <<<<<<<<<<<<<<
@@ -157854,10 +167056,10 @@ 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_ERR(35, 599, __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, 600, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -157867,21 +167069,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_ERR(35, 599, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 600, __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(35, 599, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 600, __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(35, 599, __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, 600, __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":598
+  /* "PETSc/KSP.pyx":599
  * 
  *     property atol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -157902,7 +167104,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4atol___get__(struct PyPetscKSPO
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":600
+/* "PETSc/KSP.pyx":601
  *         def __get__(self):
  *             return self.getTolerances()[1]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -157931,25 +167133,25 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_4atol_2__set__(struct PyPetscKSPObject
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/KSP.pyx":601
+  /* "PETSc/KSP.pyx":602
  *             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_ERR(35, 601, __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, 602, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 601, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 602, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  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)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_atol, __pyx_v_value) < 0) __PYX_ERR(35, 602, __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, 602, __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":600
+  /* "PETSc/KSP.pyx":601
  *         def __get__(self):
  *             return self.getTolerances()[1]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -157971,7 +167173,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_4atol_2__set__(struct PyPetscKSPObject
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":604
+/* "PETSc/KSP.pyx":605
  * 
  *     property divtol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -158000,7 +167202,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6divtol___get__(struct PyPetscKS
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/KSP.pyx":605
+  /* "PETSc/KSP.pyx":606
  *     property divtol:
  *         def __get__(self):
  *             return self.getTolerances()[2]             # <<<<<<<<<<<<<<
@@ -158008,10 +167210,10 @@ 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_ERR(35, 605, __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, 606, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -158021,21 +167223,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_ERR(35, 605, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 606, __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(35, 605, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 606, __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(35, 605, __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, 606, __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":604
+  /* "PETSc/KSP.pyx":605
  * 
  *     property divtol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -158056,7 +167258,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6divtol___get__(struct PyPetscKS
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":606
+/* "PETSc/KSP.pyx":607
  *         def __get__(self):
  *             return self.getTolerances()[2]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -158085,25 +167287,25 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_6divtol_2__set__(struct PyPetscKSPObje
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/KSP.pyx":607
+  /* "PETSc/KSP.pyx":608
  *             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_ERR(35, 607, __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, 608, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 607, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 608, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  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)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_divtol, __pyx_v_value) < 0) __PYX_ERR(35, 608, __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, 608, __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":606
+  /* "PETSc/KSP.pyx":607
  *         def __get__(self):
  *             return self.getTolerances()[2]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -158125,7 +167327,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_6divtol_2__set__(struct PyPetscKSPObje
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":610
+/* "PETSc/KSP.pyx":611
  * 
  *     property max_it:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -158154,7 +167356,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6max_it___get__(struct PyPetscKS
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/KSP.pyx":611
+  /* "PETSc/KSP.pyx":612
  *     property max_it:
  *         def __get__(self):
  *             return self.getTolerances()[3]             # <<<<<<<<<<<<<<
@@ -158162,10 +167364,10 @@ 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_ERR(35, 611, __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, 612, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -158175,21 +167377,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_ERR(35, 611, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 612, __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(35, 611, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 612, __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)) __PYX_ERR(35, 611, __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, 612, __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":610
+  /* "PETSc/KSP.pyx":611
  * 
  *     property max_it:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -158210,7 +167412,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6max_it___get__(struct PyPetscKS
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":612
+/* "PETSc/KSP.pyx":613
  *         def __get__(self):
  *             return self.getTolerances()[3]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -158239,25 +167441,25 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_6max_it_2__set__(struct PyPetscKSPObje
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/KSP.pyx":613
+  /* "PETSc/KSP.pyx":614
  *             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_ERR(35, 613, __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, 614, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 613, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(35, 614, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_max_it, __pyx_v_value) < 0) __PYX_ERR(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)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_max_it, __pyx_v_value) < 0) __PYX_ERR(35, 614, __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, 614, __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":612
+  /* "PETSc/KSP.pyx":613
  *         def __get__(self):
  *             return self.getTolerances()[3]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -158279,7 +167481,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_6max_it_2__set__(struct PyPetscKSPObje
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":618
+/* "PETSc/KSP.pyx":619
  * 
  *     property its:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -158308,7 +167510,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_3its___get__(struct PyPetscKSPOb
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/KSP.pyx":619
+  /* "PETSc/KSP.pyx":620
  *     property its:
  *         def __get__(self):
  *             return self.getIterationNumber()             # <<<<<<<<<<<<<<
@@ -158316,10 +167518,10 @@ 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_ERR(35, 619, __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, 620, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -158329,10 +167531,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_ERR(35, 619, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 620, __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(35, 619, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 620, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -158340,7 +167542,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_3its___get__(struct PyPetscKSPOb
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":618
+  /* "PETSc/KSP.pyx":619
  * 
  *     property its:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -158361,7 +167563,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_3its___get__(struct PyPetscKSPOb
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":620
+/* "PETSc/KSP.pyx":621
  *         def __get__(self):
  *             return self.getIterationNumber()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -158391,17 +167593,17 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_3its_2__set__(struct PyPetscKSPObject
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/KSP.pyx":621
+  /* "PETSc/KSP.pyx":622
  *             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_ERR(35, 621, __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, 622, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -158411,23 +167613,41 @@ 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_ERR(35, 621, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 622, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(35, 621, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 622, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 622, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 622, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 622, __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":620
+  /* "PETSc/KSP.pyx":621
  *         def __get__(self):
  *             return self.getIterationNumber()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -158450,7 +167670,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_3its_2__set__(struct PyPetscKSPObject
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":624
+/* "PETSc/KSP.pyx":625
  * 
  *     property norm:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -158479,7 +167699,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4norm___get__(struct PyPetscKSPO
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/KSP.pyx":625
+  /* "PETSc/KSP.pyx":626
  *     property norm:
  *         def __get__(self):
  *             return self.getResidualNorm()             # <<<<<<<<<<<<<<
@@ -158487,10 +167707,10 @@ 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_ERR(35, 625, __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, 626, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -158500,10 +167720,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_ERR(35, 625, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 626, __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(35, 625, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 626, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -158511,7 +167731,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4norm___get__(struct PyPetscKSPO
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":624
+  /* "PETSc/KSP.pyx":625
  * 
  *     property norm:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -158532,7 +167752,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_4norm___get__(struct PyPetscKSPO
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":626
+/* "PETSc/KSP.pyx":627
  *         def __get__(self):
  *             return self.getResidualNorm()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -158562,17 +167782,17 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_4norm_2__set__(struct PyPetscKSPObject
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/KSP.pyx":627
+  /* "PETSc/KSP.pyx":628
  *             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_ERR(35, 627, __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, 628, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -158582,23 +167802,41 @@ 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_ERR(35, 627, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 628, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(35, 627, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 628, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 628, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 628, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 628, __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":626
+  /* "PETSc/KSP.pyx":627
  *         def __get__(self):
  *             return self.getResidualNorm()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -158621,7 +167859,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_4norm_2__set__(struct PyPetscKSPObject
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":630
+/* "PETSc/KSP.pyx":631
  * 
  *     property history:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -158650,7 +167888,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7history___get__(struct PyPetscK
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/KSP.pyx":631
+  /* "PETSc/KSP.pyx":632
  *     property history:
  *         def __get__(self):
  *             return self.getConvergenceHistory()             # <<<<<<<<<<<<<<
@@ -158658,10 +167896,10 @@ 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_ERR(35, 631, __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, 632, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -158671,10 +167909,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_ERR(35, 631, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 632, __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(35, 631, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 632, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -158682,7 +167920,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7history___get__(struct PyPetscK
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":630
+  /* "PETSc/KSP.pyx":631
  * 
  *     property history:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -158703,7 +167941,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_7history___get__(struct PyPetscK
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":636
+/* "PETSc/KSP.pyx":637
  * 
  *     property reason:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -158732,7 +167970,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6reason___get__(struct PyPetscKS
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/KSP.pyx":637
+  /* "PETSc/KSP.pyx":638
  *     property reason:
  *         def __get__(self):
  *             return self.getConvergedReason()             # <<<<<<<<<<<<<<
@@ -158740,10 +167978,10 @@ 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_ERR(35, 637, __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, 638, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -158753,10 +167991,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_ERR(35, 637, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 638, __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(35, 637, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 638, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -158764,7 +168002,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6reason___get__(struct PyPetscKS
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/KSP.pyx":636
+  /* "PETSc/KSP.pyx":637
  * 
  *     property reason:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -158785,7 +168023,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_6reason___get__(struct PyPetscKS
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":638
+/* "PETSc/KSP.pyx":639
  *         def __get__(self):
  *             return self.getConvergedReason()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -158815,17 +168053,17 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_6reason_2__set__(struct PyPetscKSPObje
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/KSP.pyx":639
+  /* "PETSc/KSP.pyx":640
  *             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_ERR(35, 639, __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, 640, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -158835,23 +168073,41 @@ 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_ERR(35, 639, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 640, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(35, 639, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 640, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 640, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(35, 640, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 640, __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":638
+  /* "PETSc/KSP.pyx":639
  *         def __get__(self):
  *             return self.getConvergedReason()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -158874,7 +168130,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3KSP_6reason_2__set__(struct PyPetscKSPObje
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":642
+/* "PETSc/KSP.pyx":643
  * 
  *     property iterating:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -158902,7 +168158,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_9iterating___get__(struct PyPets
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/KSP.pyx":643
+  /* "PETSc/KSP.pyx":644
  *     property iterating:
  *         def __get__(self):
  *             return self.reason == 0             # <<<<<<<<<<<<<<
@@ -158910,16 +168166,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_ERR(35, 643, __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, 644, __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(35, 643, __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, 644, __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":642
+  /* "PETSc/KSP.pyx":643
  * 
  *     property iterating:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -158939,7 +168195,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_9iterating___get__(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":646
+/* "PETSc/KSP.pyx":647
  * 
  *     property converged:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -158967,7 +168223,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_9converged___get__(struct PyPets
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/KSP.pyx":647
+  /* "PETSc/KSP.pyx":648
  *     property converged:
  *         def __get__(self):
  *             return self.reason > 0             # <<<<<<<<<<<<<<
@@ -158975,15 +168231,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_ERR(35, 647, __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, 648, __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(35, 647, __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, 648, __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":646
+  /* "PETSc/KSP.pyx":647
  * 
  *     property converged:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -159003,7 +168259,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_9converged___get__(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/KSP.pyx":650
+/* "PETSc/KSP.pyx":651
  * 
  *     property diverged:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -159031,7 +168287,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3KSP_8diverged___get__(struct PyPetsc
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/KSP.pyx":651
+  /* "PETSc/KSP.pyx":652
  *     property diverged:
  *         def __get__(self):
  *             return self.reason < 0             # <<<<<<<<<<<<<<
@@ -159039,15 +168295,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_ERR(35, 651, __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, 652, __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(35, 651, __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, 652, __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":650
+  /* "PETSc/KSP.pyx":651
  * 
  *     property diverged:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -159153,6 +168409,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_3view(PyObject *__pyx_v_self, P
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -159170,6 +168427,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_3view(PyObject *__pyx_v_self, P
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -159236,7 +168494,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_ERR(36, 78, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESView(__pyx_v_self->snes, __pyx_v_cviewer)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(36, 78, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":75
  *     # --- xxx ---
@@ -159296,7 +168554,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_ERR(36, 81, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESDestroy((&__pyx_v_self->snes))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(36, 81, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":82
  *     def destroy(self):
@@ -159353,6 +168611,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_7create(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -159370,6 +168629,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_7create(PyObject *__pyx_v_self,
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -159426,7 +168686,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_ERR(36, 87, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESCreate(__pyx_v_ccomm, (&__pyx_v_newsnes))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(36, 87, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":88
  *         cdef PetscSNES newsnes = NULL
@@ -159492,6 +168752,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_9setType(PyObject *__pyx_v_self
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -159563,7 +168824,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_ERR(36, 94, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetType(__pyx_v_self->snes, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(36, 94, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":91
  *         return self
@@ -159636,7 +168897,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_ERR(36, 98, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetType(__pyx_v_self->snes, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(36, 98, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":99
  *         cdef PetscSNESType cval = NULL
@@ -159695,6 +168956,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_13setOptionsPrefix(PyObject *__
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -159766,7 +169028,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_ERR(36, 104, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetOptionsPrefix(__pyx_v_self->snes, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(36, 104, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":101
  *         return bytes2str(cval)
@@ -159839,7 +169101,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_ERR(36, 108, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetOptionsPrefix(__pyx_v_self->snes, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(36, 108, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":109
  *         cdef const_char *cval = NULL
@@ -159912,7 +169174,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_ERR(36, 112, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetFromOptions(__pyx_v_self->snes)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(36, 112, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":111
  *         return bytes2str(cval)
@@ -159958,6 +169220,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_19setAppCtx(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -160145,7 +169408,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_ERR(36, 126, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetDM(__pyx_v_self->snes, (&__pyx_v_newdm))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(36, 126, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":127
  *         cdef PetscDM newdm = NULL
@@ -160186,7 +169449,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_22getDM(struct PyPetscSNESObjec
  *         PetscINCREF(dm.obj)
  *         return dm             # <<<<<<<<<<<<<<
  * 
- *     def setDM(self, DM dm not None):
+ *     def setDM(self, DM dm):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_dm));
@@ -160217,7 +169480,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_22getDM(struct PyPetscSNESObjec
 /* "PETSc/SNES.pyx":132
  *         return dm
  * 
- *     def setDM(self, DM dm not None):             # <<<<<<<<<<<<<<
+ *     def setDM(self, DM dm):             # <<<<<<<<<<<<<<
  *         CHKERR( SNESSetDM(self.snes, dm.dm) )
  * 
  */
@@ -160238,6 +169501,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_25setDM(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -160285,17 +169549,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_24setDM(struct PyPetscSNESObjec
 
   /* "PETSc/SNES.pyx":133
  * 
- *     def setDM(self, DM dm not None):
+ *     def setDM(self, DM dm):
  *         CHKERR( SNESSetDM(self.snes, dm.dm) )             # <<<<<<<<<<<<<<
  * 
  *     # --- 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_ERR(36, 133, __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 == ((int)-1))) __PYX_ERR(36, 133, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":132
  *         return dm
  * 
- *     def setDM(self, DM dm not None):             # <<<<<<<<<<<<<<
+ *     def setDM(self, DM dm):             # <<<<<<<<<<<<<<
  *         CHKERR( SNESSetDM(self.snes, dm.dm) )
  * 
  */
@@ -160315,7 +169579,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_24setDM(struct PyPetscSNESObjec
 /* "PETSc/SNES.pyx":136
  * 
  *     # --- FAS ---
- *     def setFASInterpolation(self, level, Mat mat not None):             # <<<<<<<<<<<<<<
+ *     def setFASInterpolation(self, level, Mat mat):             # <<<<<<<<<<<<<<
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( SNESFASSetInterpolation(self.snes, clevel, mat.mat) )
  */
@@ -160337,7 +169601,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_27setFASInterpolation(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -160346,6 +169612,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_27setFASInterpolation(PyObject
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_level)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mat)) != 0)) kw_args--;
         else {
@@ -160394,27 +169661,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_26setFASInterpolation(struct Py
 
   /* "PETSc/SNES.pyx":137
  *     # --- FAS ---
- *     def setFASInterpolation(self, level, Mat mat not None):
+ *     def setFASInterpolation(self, level, Mat mat):
  *         cdef PetscInt clevel = asInt(level)             # <<<<<<<<<<<<<<
  *         CHKERR( SNESFASSetInterpolation(self.snes, clevel, mat.mat) )
  * 
  */
-  __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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(36, 137, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":138
- *     def setFASInterpolation(self, level, Mat mat not None):
+ *     def setFASInterpolation(self, level, Mat mat):
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( SNESFASSetInterpolation(self.snes, clevel, mat.mat) )             # <<<<<<<<<<<<<<
  * 
  *     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_ERR(36, 138, __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 == ((int)-1))) __PYX_ERR(36, 138, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":136
  * 
  *     # --- FAS ---
- *     def setFASInterpolation(self, level, Mat mat not None):             # <<<<<<<<<<<<<<
+ *     def setFASInterpolation(self, level, Mat mat):             # <<<<<<<<<<<<<<
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( SNESFASSetInterpolation(self.snes, clevel, mat.mat) )
  */
@@ -160455,6 +169722,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_29getFASInterpolation(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -160506,7 +169774,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 == -1L && PyErr_Occurred())) __PYX_ERR(36, 141, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(36, 141, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":142
@@ -160528,7 +169796,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_ERR(36, 143, __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 == ((int)-1))) __PYX_ERR(36, 143, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":144
  *         cdef Mat mat = Mat()
@@ -160544,7 +169812,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_28getFASInterpolation(struct Py
  *         PetscINCREF(mat.obj)
  *         return mat             # <<<<<<<<<<<<<<
  * 
- *     def setFASRestriction(self, level, Mat mat not None):
+ *     def setFASRestriction(self, level, Mat mat):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_mat));
@@ -160574,7 +169842,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_28getFASInterpolation(struct Py
 /* "PETSc/SNES.pyx":147
  *         return mat
  * 
- *     def setFASRestriction(self, level, Mat mat not None):             # <<<<<<<<<<<<<<
+ *     def setFASRestriction(self, level, Mat mat):             # <<<<<<<<<<<<<<
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( SNESFASSetRestriction(self.snes, clevel, mat.mat) )
  */
@@ -160596,7 +169864,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_31setFASRestriction(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -160605,6 +169875,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_31setFASRestriction(PyObject *_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_level)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mat)) != 0)) kw_args--;
         else {
@@ -160653,27 +169924,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_30setFASRestriction(struct PyPe
 
   /* "PETSc/SNES.pyx":148
  * 
- *     def setFASRestriction(self, level, Mat mat not None):
+ *     def setFASRestriction(self, level, Mat mat):
  *         cdef PetscInt clevel = asInt(level)             # <<<<<<<<<<<<<<
  *         CHKERR( SNESFASSetRestriction(self.snes, clevel, mat.mat) )
  * 
  */
-  __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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(36, 148, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":149
- *     def setFASRestriction(self, level, Mat mat not None):
+ *     def setFASRestriction(self, level, Mat mat):
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( SNESFASSetRestriction(self.snes, clevel, mat.mat) )             # <<<<<<<<<<<<<<
  * 
  *     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_ERR(36, 149, __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 == ((int)-1))) __PYX_ERR(36, 149, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":147
  *         return mat
  * 
- *     def setFASRestriction(self, level, Mat mat not None):             # <<<<<<<<<<<<<<
+ *     def setFASRestriction(self, level, Mat mat):             # <<<<<<<<<<<<<<
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( SNESFASSetRestriction(self.snes, clevel, mat.mat) )
  */
@@ -160714,6 +169985,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_33getFASRestriction(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -160765,7 +170037,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 == -1L && PyErr_Occurred())) __PYX_ERR(36, 152, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(36, 152, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":153
@@ -160787,7 +170059,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_ERR(36, 154, __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 == ((int)-1))) __PYX_ERR(36, 154, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":155
  *         cdef Mat mat = Mat()
@@ -160803,7 +170075,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_32getFASRestriction(struct PyPe
  *         PetscINCREF(mat.obj)
  *         return mat             # <<<<<<<<<<<<<<
  * 
- *     def setFASInjection(self, level, Mat mat not None):
+ *     def setFASInjection(self, level, Mat mat):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_mat));
@@ -160833,7 +170105,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_32getFASRestriction(struct PyPe
 /* "PETSc/SNES.pyx":158
  *         return mat
  * 
- *     def setFASInjection(self, level, Mat mat not None):             # <<<<<<<<<<<<<<
+ *     def setFASInjection(self, level, Mat mat):             # <<<<<<<<<<<<<<
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( SNESFASSetInjection(self.snes, clevel, mat.mat) )
  */
@@ -160855,7 +170127,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_35setFASInjection(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -160864,6 +170138,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_35setFASInjection(PyObject *__p
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_level)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mat)) != 0)) kw_args--;
         else {
@@ -160912,27 +170187,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_34setFASInjection(struct PyPets
 
   /* "PETSc/SNES.pyx":159
  * 
- *     def setFASInjection(self, level, Mat mat not None):
+ *     def setFASInjection(self, level, Mat mat):
  *         cdef PetscInt clevel = asInt(level)             # <<<<<<<<<<<<<<
  *         CHKERR( SNESFASSetInjection(self.snes, clevel, mat.mat) )
  * 
  */
-  __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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(36, 159, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":160
- *     def setFASInjection(self, level, Mat mat not None):
+ *     def setFASInjection(self, level, Mat mat):
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( SNESFASSetInjection(self.snes, clevel, mat.mat) )             # <<<<<<<<<<<<<<
  * 
  *     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_ERR(36, 160, __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 == ((int)-1))) __PYX_ERR(36, 160, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":158
  *         return mat
  * 
- *     def setFASInjection(self, level, Mat mat not None):             # <<<<<<<<<<<<<<
+ *     def setFASInjection(self, level, Mat mat):             # <<<<<<<<<<<<<<
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( SNESFASSetInjection(self.snes, clevel, mat.mat) )
  */
@@ -160973,6 +170248,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_37getFASInjection(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -161024,7 +170300,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 == -1L && PyErr_Occurred())) __PYX_ERR(36, 163, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(36, 163, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":164
@@ -161046,7 +170322,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_ERR(36, 165, __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 == ((int)-1))) __PYX_ERR(36, 165, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":166
  *         cdef Mat mat = Mat()
@@ -161062,7 +170338,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_36getFASInjection(struct PyPets
  *         PetscINCREF(mat.obj)
  *         return mat             # <<<<<<<<<<<<<<
  * 
- *     def setFASRScale(self, level, Vec vec not None):
+ *     def setFASRScale(self, level, Vec vec):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_mat));
@@ -161092,7 +170368,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_36getFASInjection(struct PyPets
 /* "PETSc/SNES.pyx":169
  *         return mat
  * 
- *     def setFASRScale(self, level, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def setFASRScale(self, level, Vec vec):             # <<<<<<<<<<<<<<
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( SNESFASSetRScale(self.snes, clevel, vec.vec) )
  */
@@ -161114,7 +170390,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_39setFASRScale(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -161123,6 +170401,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_39setFASRScale(PyObject *__pyx_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_level)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vec)) != 0)) kw_args--;
         else {
@@ -161171,27 +170450,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_38setFASRScale(struct PyPetscSN
 
   /* "PETSc/SNES.pyx":170
  * 
- *     def setFASRScale(self, level, Vec vec not None):
+ *     def setFASRScale(self, level, Vec vec):
  *         cdef PetscInt clevel = asInt(level)             # <<<<<<<<<<<<<<
  *         CHKERR( SNESFASSetRScale(self.snes, clevel, vec.vec) )
  * 
  */
-  __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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(36, 170, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":171
- *     def setFASRScale(self, level, Vec vec not None):
+ *     def setFASRScale(self, level, Vec vec):
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( SNESFASSetRScale(self.snes, clevel, vec.vec) )             # <<<<<<<<<<<<<<
  * 
  *     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_ERR(36, 171, __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 == ((int)-1))) __PYX_ERR(36, 171, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":169
  *         return mat
  * 
- *     def setFASRScale(self, level, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def setFASRScale(self, level, Vec vec):             # <<<<<<<<<<<<<<
  *         cdef PetscInt clevel = asInt(level)
  *         CHKERR( SNESFASSetRScale(self.snes, clevel, vec.vec) )
  */
@@ -161234,7 +170513,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_41setFASLevels(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -161243,6 +170524,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_41setFASLevels(PyObject *__pyx_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_levels)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comms);
@@ -161255,6 +170537,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_41setFASLevels(PyObject *__pyx_
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -161313,7 +170596,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 == -1L && PyErr_Occurred())) __PYX_ERR(36, 174, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_levels); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(36, 174, __pyx_L1_error)
   __pyx_v_clevels = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":175
@@ -161352,7 +170635,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_ERR(36, 178, __pyx_L1_error)
+    __pyx_t_4 = PyObject_Length(__pyx_v_comms); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(36, 178, __pyx_L1_error)
     __pyx_t_3 = ((__pyx_v_clevels != ((PetscInt)__pyx_t_4)) != 0);
     if (__pyx_t_3) {
 
@@ -161363,7 +170646,7 @@ 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__59, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(36, 179, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__62, 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;
@@ -161385,7 +170668,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_ERR(36, 180, __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 == ((int)-1))) __PYX_ERR(36, 180, __pyx_L1_error)
 
     /* "PETSc/SNES.pyx":181
  *                 raise ValueError("Must provide as many communicators as levels")
@@ -161416,7 +170699,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_40setFASLevels(struct PyPetscSN
         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
+            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
             __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_ERR(36, 182, __pyx_L6_error)
@@ -161424,7 +170707,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_40setFASLevels(struct PyPetscSN
             #endif
           } else {
             if (__pyx_t_7 >= PyTuple_GET_SIZE(__pyx_t_5)) break;
-            #if CYTHON_COMPILING_IN_CPYTHON
+            #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
             __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_ERR(36, 182, __pyx_L6_error)
@@ -161436,7 +170719,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_40setFASLevels(struct PyPetscSN
           if (unlikely(!__pyx_t_9)) {
             PyObject* exc_type = PyErr_Occurred();
             if (exc_type) {
-              if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
+              if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
               else __PYX_ERR(36, 182, __pyx_L6_error)
             }
             break;
@@ -161475,7 +170758,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_ERR(36, 184, __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 == ((int)-1))) __PYX_ERR(36, 184, __pyx_L6_error)
     }
 
     /* "PETSc/SNES.pyx":186
@@ -161487,7 +170770,7 @@ 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_ERR(36, 186, __pyx_L1_error)
+        __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscFree(__pyx_v_ccomms)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(36, 186, __pyx_L1_error)
         goto __pyx_L7;
       }
       /*exception exit:*/{
@@ -161507,9 +170790,8 @@ 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_ERR(36, 186, __pyx_L11_error)
+          __pyx_t_19 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscFree(__pyx_v_ccomms)); if (unlikely(__pyx_t_19 == ((int)-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);
@@ -161524,7 +170806,6 @@ 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);
@@ -161558,7 +170839,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_40setFASLevels(struct PyPetscSN
  *     def getFASLevels(self):
  */
   /*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_t_11 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASSetLevels(__pyx_v_self->snes, __pyx_v_clevels, __pyx_v_ccomms)); if (unlikely(__pyx_t_11 == ((int)-1))) __PYX_ERR(36, 188, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -161634,7 +170915,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_ERR(36, 192, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESFASGetLevels(__pyx_v_self->snes, (&__pyx_v_levels))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(36, 192, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":193
  *         cdef PetscInt levels = 0
@@ -161693,6 +170974,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_45getFASCycleSNES(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -161744,7 +171026,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 == -1L && PyErr_Occurred())) __PYX_ERR(36, 196, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(36, 196, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":197
@@ -161766,7 +171048,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_ERR(36, 198, __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 == ((int)-1))) __PYX_ERR(36, 198, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":199
  *         cdef SNES lsnes = SNES()
@@ -161861,7 +171143,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_ERR(36, 204, __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 == ((int)-1))) __PYX_ERR(36, 204, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":205
  *         cdef SNES smooth = SNES()
@@ -161928,6 +171210,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_49getFASSmoother(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -161979,7 +171262,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 == -1L && PyErr_Occurred())) __PYX_ERR(36, 209, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(36, 209, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":210
@@ -162001,7 +171284,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_ERR(36, 211, __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 == ((int)-1))) __PYX_ERR(36, 211, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":212
  *         cdef SNES smooth = SNES()
@@ -162068,6 +171351,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_51getFASSmootherDown(PyObject *
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -162119,7 +171403,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 == -1L && PyErr_Occurred())) __PYX_ERR(36, 216, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(36, 216, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":217
@@ -162141,7 +171425,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_ERR(36, 218, __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 == ((int)-1))) __PYX_ERR(36, 218, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":219
  *         cdef SNES smooth = SNES()
@@ -162208,6 +171492,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_53getFASSmootherUp(PyObject *__
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -162259,7 +171544,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 == -1L && PyErr_Occurred())) __PYX_ERR(36, 223, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(36, 223, __pyx_L1_error)
   __pyx_v_clevel = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":224
@@ -162281,7 +171566,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_ERR(36, 225, __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 == ((int)-1))) __PYX_ERR(36, 225, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":226
  *         cdef SNES smooth = SNES()
@@ -162376,7 +171661,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_ERR(36, 232, __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 == ((int)-1))) __PYX_ERR(36, 232, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":233
  *         cdef SNES snes = SNES()
@@ -162423,8 +171708,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_54getNPC(struct PyPetscSNESObje
  *         return snes
  * 
  *     def hasNPC(self):             # <<<<<<<<<<<<<<
- *         cdef PetscBool has_npc = PETSC_FALSE
- *         CHKERR( SNESHasNPC(self.snes, &has_npc) )
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( SNESHasNPC(self.snes, &flag) )
  */
 
 /* Python wrapper */
@@ -162445,7 +171730,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_57hasNPC(PyObject *__pyx_v_self
 }
 
 static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_56hasNPC(struct PyPetscSNESObject *__pyx_v_self) {
-  PetscBool __pyx_v_has_npc;
+  PetscBool __pyx_v_flag;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
@@ -162455,30 +171740,30 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_56hasNPC(struct PyPetscSNESObje
   /* "PETSc/SNES.pyx":237
  * 
  *     def hasNPC(self):
- *         cdef PetscBool has_npc = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( SNESHasNPC(self.snes, &has_npc) )
- *         return <bint> has_npc
+ *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( SNESHasNPC(self.snes, &flag) )
+ *         return toBool(flag)
  */
-  __pyx_v_has_npc = PETSC_FALSE;
+  __pyx_v_flag = PETSC_FALSE;
 
   /* "PETSc/SNES.pyx":238
  *     def hasNPC(self):
- *         cdef PetscBool has_npc = PETSC_FALSE
- *         CHKERR( SNESHasNPC(self.snes, &has_npc) )             # <<<<<<<<<<<<<<
- *         return <bint> has_npc
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( SNESHasNPC(self.snes, &flag) )             # <<<<<<<<<<<<<<
+ *         return toBool(flag)
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESHasNPC(__pyx_v_self->snes, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(36, 238, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":239
- *         cdef PetscBool has_npc = PETSC_FALSE
- *         CHKERR( SNESHasNPC(self.snes, &has_npc) )
- *         return <bint> has_npc             # <<<<<<<<<<<<<<
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( SNESHasNPC(self.snes, &flag) )
+ *         return toBool(flag)             # <<<<<<<<<<<<<<
  * 
- *     def setNPC(self, SNES snes not None):
+ *     def setNPC(self, SNES snes):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_has_npc); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 239, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toBool(__pyx_v_flag); 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;
@@ -162488,8 +171773,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_56hasNPC(struct PyPetscSNESObje
  *         return snes
  * 
  *     def hasNPC(self):             # <<<<<<<<<<<<<<
- *         cdef PetscBool has_npc = PETSC_FALSE
- *         CHKERR( SNESHasNPC(self.snes, &has_npc) )
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( SNESHasNPC(self.snes, &flag) )
  */
 
   /* function exit code */
@@ -162504,9 +171789,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_56hasNPC(struct PyPetscSNESObje
 }
 
 /* "PETSc/SNES.pyx":241
- *         return <bint> has_npc
+ *         return toBool(flag)
  * 
- *     def setNPC(self, SNES snes not None):             # <<<<<<<<<<<<<<
+ *     def setNPC(self, SNES snes):             # <<<<<<<<<<<<<<
  *         CHKERR( SNESSetNPC(self.snes, snes.snes) )
  * 
  */
@@ -162527,6 +171812,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_59setNPC(PyObject *__pyx_v_self
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -162574,17 +171860,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_58setNPC(struct PyPetscSNESObje
 
   /* "PETSc/SNES.pyx":242
  * 
- *     def setNPC(self, SNES snes not None):
+ *     def setNPC(self, SNES snes):
  *         CHKERR( SNESSetNPC(self.snes, snes.snes) )             # <<<<<<<<<<<<<<
  * 
  *     # --- 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_ERR(36, 242, __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 == ((int)-1))) __PYX_ERR(36, 242, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":241
- *         return <bint> has_npc
+ *         return toBool(flag)
  * 
- *     def setNPC(self, SNES snes not None):             # <<<<<<<<<<<<<<
+ *     def setNPC(self, SNES snes):             # <<<<<<<<<<<<<<
  *         CHKERR( SNESSetNPC(self.snes, snes.snes) )
  * 
  */
@@ -162629,8 +171915,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_61setInitialGuess(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -162639,11 +171928,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_61setInitialGuess(PyObject *__p
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_initialguess)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -162656,7 +171947,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_61setInitialGuess(PyObject *__p
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -162728,7 +172021,7 @@ 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_ERR(36, 249, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyDict_NewPresized(0); 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;
@@ -162773,7 +172066,7 @@ 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_ERR(36, 252, __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 == ((int)-1))) __PYX_ERR(36, 252, __pyx_L1_error)
 
     /* "PETSc/SNES.pyx":247
  * 
@@ -162804,7 +172097,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_ERR(36, 255, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetComputeInitialGuess(__pyx_v_self->snes, NULL, NULL)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(36, 255, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -162925,9 +172218,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_65setFunction(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -162936,16 +172233,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_65setFunction(PyObject *__pyx_v
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_function)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(36, 260, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -162958,7 +172258,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_65setFunction(PyObject *__pyx_v
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -162978,7 +172280,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_65setFunction(PyObject *__pyx_v
   __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_ERR(36, 260, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "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 */
@@ -163062,7 +172364,7 @@ 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_ERR(36, 265, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); 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;
@@ -163107,7 +172409,7 @@ 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_ERR(36, 268, __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 == ((int)-1))) __PYX_ERR(36, 268, __pyx_L1_error)
 
     /* "PETSc/SNES.pyx":263
  *         cdef PetscVec fvec=NULL
@@ -163127,7 +172429,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_64setFunction(struct PyPetscSNE
  *     def getFunction(self):
  */
   /*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_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetFunction(__pyx_v_self->snes, __pyx_v_fvec, NULL, NULL)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(36, 270, __pyx_L1_error)
   }
   __pyx_L4:;
 
@@ -163208,7 +172510,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_ERR(36, 274, __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 == ((int)-1))) __PYX_ERR(36, 274, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":275
  *         cdef Vec f = Vec()
@@ -163300,8 +172602,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_69setUpdate(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -163310,11 +172615,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_69setUpdate(PyObject *__pyx_v_s
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_update)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -163327,7 +172634,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_69setUpdate(PyObject *__pyx_v_s
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -163399,7 +172708,7 @@ 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_ERR(36, 282, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyDict_NewPresized(0); 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;
@@ -163444,7 +172753,7 @@ 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_ERR(36, 285, __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 == ((int)-1))) __PYX_ERR(36, 285, __pyx_L1_error)
 
     /* "PETSc/SNES.pyx":280
  * 
@@ -163475,7 +172784,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_ERR(36, 288, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetUpdate(__pyx_v_self->snes, NULL)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(36, 288, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -163539,7 +172848,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_70getUpdate(struct PyPetscSNESO
  *     def getUpdate(self):
  *         return self.get_attr('__update__')             # <<<<<<<<<<<<<<
  * 
- *     def setJacobian(self, jacobian, Mat J, Mat P=None, args=None, kargs=None):
+ *     def setJacobian(self, jacobian, Mat J=None, 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), ((char *)"__update__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 291, __pyx_L1_error)
@@ -163570,14 +172879,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_70getUpdate(struct PyPetscSNESO
 /* "PETSc/SNES.pyx":293
  *         return self.get_attr('__update__')
  * 
- *     def setJacobian(self, jacobian, Mat J, Mat P=None, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *     def setJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None):             # <<<<<<<<<<<<<<
  *         cdef PetscMat Jmat=NULL
  *         if J is not None: Jmat = J.mat
  */
 
 /* Python wrapper */
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_73setJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_72setJacobian[] = "SNES.setJacobian(self, jacobian, Mat J, Mat P=None, args=None, kargs=None)";
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_72setJacobian[] = "SNES.setJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None)";
 static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_73setJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_jacobian = 0;
   struct PyPetscMatObject *__pyx_v_J = 0;
@@ -163590,6 +172899,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_73setJacobian(PyObject *__pyx_v
   {
     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);
     values[3] = ((PyObject *)Py_None);
     values[4] = ((PyObject *)Py_None);
@@ -163598,10 +172908,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_73setJacobian(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -163610,21 +172925,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_73setJacobian(PyObject *__pyx_v
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_jacobian)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(36, 293, __pyx_L3_error)
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_J);
+          if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_P);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[3] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  4:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -163637,10 +172956,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_73setJacobian(PyObject *__pyx_v
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -163653,7 +172976,7 @@ 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_ERR(36, 293, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setJacobian", 0, 1, 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();
@@ -163689,7 +173012,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_72setJacobian(struct PyPetscSNE
 
   /* "PETSc/SNES.pyx":294
  * 
- *     def setJacobian(self, jacobian, Mat J, Mat P=None, args=None, kargs=None):
+ *     def setJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None):
  *         cdef PetscMat Jmat=NULL             # <<<<<<<<<<<<<<
  *         if J is not None: Jmat = J.mat
  *         cdef PetscMat Pmat=Jmat
@@ -163697,7 +173020,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_72setJacobian(struct PyPetscSNE
   __pyx_v_Jmat = NULL;
 
   /* "PETSc/SNES.pyx":295
- *     def setJacobian(self, jacobian, Mat J, Mat P=None, args=None, kargs=None):
+ *     def setJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None):
  *         cdef PetscMat Jmat=NULL
  *         if J is not None: Jmat = J.mat             # <<<<<<<<<<<<<<
  *         cdef PetscMat Pmat=Jmat
@@ -163768,7 +173091,7 @@ 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_ERR(36, 300, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); 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;
@@ -163813,7 +173136,7 @@ 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_ERR(36, 303, __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 == ((int)-1))) __PYX_ERR(36, 303, __pyx_L1_error)
 
     /* "PETSc/SNES.pyx":298
  *         cdef PetscMat Pmat=Jmat
@@ -163833,14 +173156,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_72setJacobian(struct PyPetscSNE
  *     def getJacobian(self):
  */
   /*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_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 == ((int)-1))) __PYX_ERR(36, 305, __pyx_L1_error)
   }
   __pyx_L5:;
 
   /* "PETSc/SNES.pyx":293
  *         return self.get_attr('__update__')
  * 
- *     def setJacobian(self, jacobian, Mat J, Mat P=None, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *     def setJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None):             # <<<<<<<<<<<<<<
  *         cdef PetscMat Jmat=NULL
  *         if J is not None: Jmat = J.mat
  */
@@ -163927,7 +173250,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_ERR(36, 310, __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 == ((int)-1))) __PYX_ERR(36, 310, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":311
  *         cdef Mat P = Mat()
@@ -164032,8 +173355,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_77setObjective(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -164042,11 +173368,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_77setObjective(PyObject *__pyx_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_objective)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -164059,7 +173387,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_77setObjective(PyObject *__pyx_
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -164131,7 +173461,7 @@ 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_ERR(36, 319, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyDict_NewPresized(0); 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;
@@ -164176,7 +173506,7 @@ 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_ERR(36, 322, __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 == ((int)-1))) __PYX_ERR(36, 322, __pyx_L1_error)
 
     /* "PETSc/SNES.pyx":317
  * 
@@ -164196,7 +173526,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_76setObjective(struct PyPetscSN
  *     def getObjective(self):
  */
   /*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_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetObjective(__pyx_v_self->snes, NULL, NULL)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(36, 324, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -164264,7 +173594,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_ERR(36, 327, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetObjective(__pyx_v_self->snes, NULL, NULL)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(36, 327, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":328
  *     def getObjective(self):
@@ -164283,7 +173613,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_78getObjective(struct PyPetscSN
  *         cdef object objective = self.get_attr('__objective__')
  *         return objective             # <<<<<<<<<<<<<<
  * 
- *     def computeFunction(self, Vec x not None, Vec f not None):
+ *     def computeFunction(self, Vec x, Vec f):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(__pyx_v_objective);
@@ -164313,7 +173643,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_78getObjective(struct PyPetscSN
 /* "PETSc/SNES.pyx":331
  *         return objective
  * 
- *     def computeFunction(self, Vec x not None, Vec f not None):             # <<<<<<<<<<<<<<
+ *     def computeFunction(self, Vec x, Vec f):             # <<<<<<<<<<<<<<
  *         CHKERR( SNESComputeFunction(self.snes, x.vec, f.vec) )
  * 
  */
@@ -164335,7 +173665,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_81computeFunction(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -164344,6 +173676,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_81computeFunction(PyObject *__p
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_f)) != 0)) kw_args--;
         else {
@@ -164391,17 +173724,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_80computeFunction(struct PyPets
 
   /* "PETSc/SNES.pyx":332
  * 
- *     def computeFunction(self, Vec x not None, Vec f not None):
+ *     def computeFunction(self, Vec x, Vec f):
  *         CHKERR( SNESComputeFunction(self.snes, x.vec, f.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def computeJacobian(self, Vec x not None, Mat J not None, Mat P=None):
+ *     def computeJacobian(self, Vec x, Mat J, 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_ERR(36, 332, __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 == ((int)-1))) __PYX_ERR(36, 332, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":331
  *         return objective
  * 
- *     def computeFunction(self, Vec x not None, Vec f not None):             # <<<<<<<<<<<<<<
+ *     def computeFunction(self, Vec x, Vec f):             # <<<<<<<<<<<<<<
  *         CHKERR( SNESComputeFunction(self.snes, x.vec, f.vec) )
  * 
  */
@@ -164421,7 +173754,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_80computeFunction(struct PyPets
 /* "PETSc/SNES.pyx":334
  *         CHKERR( SNESComputeFunction(self.snes, x.vec, f.vec) )
  * 
- *     def computeJacobian(self, Vec x not None, Mat J not None, Mat P=None):             # <<<<<<<<<<<<<<
+ *     def computeJacobian(self, Vec x, Mat J, Mat P=None):             # <<<<<<<<<<<<<<
  *         cdef PetscMat jmat = J.mat, pmat = J.mat
  *         if P is not None: pmat = P.mat
  */
@@ -164445,8 +173778,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_83computeJacobian(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -164455,11 +173791,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_83computeJacobian(PyObject *__p
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(36, 334, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_P);
@@ -164472,6 +173810,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_83computeJacobian(PyObject *__p
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -164517,7 +173856,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_82computeJacobian(struct PyPets
 
   /* "PETSc/SNES.pyx":335
  * 
- *     def computeJacobian(self, Vec x not None, Mat J not None, Mat P=None):
+ *     def computeJacobian(self, Vec x, Mat J, Mat P=None):
  *         cdef PetscMat jmat = J.mat, pmat = J.mat             # <<<<<<<<<<<<<<
  *         if P is not None: pmat = P.mat
  *         CHKERR( SNESComputeJacobian(self.snes, x.vec, jmat, pmat) )
@@ -164528,7 +173867,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_82computeJacobian(struct PyPets
   __pyx_v_pmat = __pyx_t_1;
 
   /* "PETSc/SNES.pyx":336
- *     def computeJacobian(self, Vec x not None, Mat J not None, Mat P=None):
+ *     def computeJacobian(self, Vec x, Mat J, Mat P=None):
  *         cdef PetscMat jmat = J.mat, pmat = J.mat
  *         if P is not None: pmat = P.mat             # <<<<<<<<<<<<<<
  *         CHKERR( SNESComputeJacobian(self.snes, x.vec, jmat, pmat) )
@@ -164546,14 +173885,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_82computeJacobian(struct PyPets
  *         if P is not None: pmat = P.mat
  *         CHKERR( SNESComputeJacobian(self.snes, x.vec, jmat, pmat) )             # <<<<<<<<<<<<<<
  * 
- *     def computeObjective(self, Vec x not None):
+ *     def computeObjective(self, Vec x):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(36, 337, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":334
  *         CHKERR( SNESComputeFunction(self.snes, x.vec, f.vec) )
  * 
- *     def computeJacobian(self, Vec x not None, Mat J not None, Mat P=None):             # <<<<<<<<<<<<<<
+ *     def computeJacobian(self, Vec x, Mat J, Mat P=None):             # <<<<<<<<<<<<<<
  *         cdef PetscMat jmat = J.mat, pmat = J.mat
  *         if P is not None: pmat = P.mat
  */
@@ -164573,7 +173912,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_82computeJacobian(struct PyPets
 /* "PETSc/SNES.pyx":339
  *         CHKERR( SNESComputeJacobian(self.snes, x.vec, jmat, pmat) )
  * 
- *     def computeObjective(self, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def computeObjective(self, Vec x):             # <<<<<<<<<<<<<<
  *         cdef PetscReal o = 0
  *         CHKERR( SNESComputeObjective(self.snes, x.vec, &o) )
  */
@@ -164594,6 +173933,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_85computeObjective(PyObject *__
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -164643,7 +173983,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_84computeObjective(struct PyPet
 
   /* "PETSc/SNES.pyx":340
  * 
- *     def computeObjective(self, Vec x not None):
+ *     def computeObjective(self, Vec x):
  *         cdef PetscReal o = 0             # <<<<<<<<<<<<<<
  *         CHKERR( SNESComputeObjective(self.snes, x.vec, &o) )
  *         return toReal(o)
@@ -164651,20 +173991,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_84computeObjective(struct PyPet
   __pyx_v_o = 0.0;
 
   /* "PETSc/SNES.pyx":341
- *     def computeObjective(self, Vec x not None):
+ *     def computeObjective(self, Vec x):
  *         cdef PetscReal o = 0
  *         CHKERR( SNESComputeObjective(self.snes, x.vec, &o) )             # <<<<<<<<<<<<<<
  *         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_ERR(36, 341, __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 == ((int)-1))) __PYX_ERR(36, 341, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":342
  *         cdef PetscReal o = 0
  *         CHKERR( SNESComputeObjective(self.snes, x.vec, &o) )
  *         return toReal(o)             # <<<<<<<<<<<<<<
  * 
- *     # --- tolerances and convergence ---
+ *     def setNGS(self, ngs, args=None, kargs=None):
  */
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_o); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 342, __pyx_L1_error)
@@ -164676,7 +174016,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_84computeObjective(struct PyPet
   /* "PETSc/SNES.pyx":339
  *         CHKERR( SNESComputeJacobian(self.snes, x.vec, jmat, pmat) )
  * 
- *     def computeObjective(self, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def computeObjective(self, Vec x):             # <<<<<<<<<<<<<<
  *         cdef PetscReal o = 0
  *         CHKERR( SNESComputeObjective(self.snes, x.vec, &o) )
  */
@@ -164692,7 +174032,429 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_84computeObjective(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":346
+/* "PETSc/SNES.pyx":344
+ *         return toReal(o)
+ * 
+ *     def setNGS(self, ngs, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         if args  is None: args  = ()
+ *         if kargs is None: kargs = {}
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_87setNGS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_86setNGS[] = "SNES.setNGS(self, ngs, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_87setNGS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_ngs = 0;
+  PyObject *__pyx_v_args = 0;
+  PyObject *__pyx_v_kargs = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setNGS (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ngs,&__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);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        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_ngs)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        CYTHON_FALLTHROUGH;
+        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, "setNGS") < 0)) __PYX_ERR(36, 344, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_ngs = values[0];
+    __pyx_v_args = values[1];
+    __pyx_v_kargs = values[2];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setNGS", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 344, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.SNES.setNGS", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_86setNGS(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_ngs, __pyx_v_args, __pyx_v_kargs);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_86setNGS(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_ngs, 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("setNGS", 0);
+  __Pyx_INCREF(__pyx_v_args);
+  __Pyx_INCREF(__pyx_v_kargs);
+
+  /* "PETSc/SNES.pyx":345
+ * 
+ *     def setNGS(self, ngs, args=None, kargs=None):
+ *         if args  is None: args  = ()             # <<<<<<<<<<<<<<
+ *         if kargs is None: kargs = {}
+ *         context = (ngs, 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/SNES.pyx":346
+ *     def setNGS(self, ngs, args=None, kargs=None):
+ *         if args  is None: args  = ()
+ *         if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
+ *         context = (ngs, args, kargs)
+ *         self.set_attr('__ngs__', context)
+ */
+  __pyx_t_2 = (__pyx_v_kargs == Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+    __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 346, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
+    __pyx_t_3 = 0;
+  }
+
+  /* "PETSc/SNES.pyx":347
+ *         if args  is None: args  = ()
+ *         if kargs is None: kargs = {}
+ *         context = (ngs, args, kargs)             # <<<<<<<<<<<<<<
+ *         self.set_attr('__ngs__', context)
+ *         CHKERR( SNESSetNGS(self.snes, SNES_NGS, <void*>context) )
+ */
+  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 347, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(__pyx_v_ngs);
+  __Pyx_GIVEREF(__pyx_v_ngs);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_ngs);
+  __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/SNES.pyx":348
+ *         if kargs is None: kargs = {}
+ *         context = (ngs, args, kargs)
+ *         self.set_attr('__ngs__', context)             # <<<<<<<<<<<<<<
+ *         CHKERR( SNESSetNGS(self.snes, SNES_NGS, <void*>context) )
+ * 
+ */
+  __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 *)"__ngs__"), __pyx_v_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 348, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+  /* "PETSc/SNES.pyx":349
+ *         context = (ngs, args, kargs)
+ *         self.set_attr('__ngs__', context)
+ *         CHKERR( SNESSetNGS(self.snes, SNES_NGS, <void*>context) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getNGS(self):
+ */
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetNGS(__pyx_v_self->snes, __pyx_f_8petsc4py_5PETSc_SNES_NGS, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(36, 349, __pyx_L1_error)
+
+  /* "PETSc/SNES.pyx":344
+ *         return toReal(o)
+ * 
+ *     def setNGS(self, ngs, 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.SNES.setNGS", __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/SNES.pyx":351
+ *         CHKERR( SNESSetNGS(self.snes, SNES_NGS, <void*>context) )
+ * 
+ *     def getNGS(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( SNESGetNGS(self.snes, NULL, NULL) )
+ *         cdef object ngs = self.get_attr('__ngs__')
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_89getNGS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_88getNGS[] = "SNES.getNGS(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_89getNGS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getNGS (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getNGS", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getNGS", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_88getNGS(((struct PyPetscSNESObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_88getNGS(struct PyPetscSNESObject *__pyx_v_self) {
+  PyObject *__pyx_v_ngs = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getNGS", 0);
+
+  /* "PETSc/SNES.pyx":352
+ * 
+ *     def getNGS(self):
+ *         CHKERR( SNESGetNGS(self.snes, NULL, NULL) )             # <<<<<<<<<<<<<<
+ *         cdef object ngs = self.get_attr('__ngs__')
+ *         return ngs
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetNGS(__pyx_v_self->snes, NULL, NULL)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(36, 352, __pyx_L1_error)
+
+  /* "PETSc/SNES.pyx":353
+ *     def getNGS(self):
+ *         CHKERR( SNESGetNGS(self.snes, NULL, NULL) )
+ *         cdef object ngs = self.get_attr('__ngs__')             # <<<<<<<<<<<<<<
+ *         return ngs
+ * 
+ */
+  __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 *)"__ngs__")); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 353, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_v_ngs = __pyx_t_2;
+  __pyx_t_2 = 0;
+
+  /* "PETSc/SNES.pyx":354
+ *         CHKERR( SNESGetNGS(self.snes, NULL, NULL) )
+ *         cdef object ngs = self.get_attr('__ngs__')
+ *         return ngs             # <<<<<<<<<<<<<<
+ * 
+ *     def computeNGS(self, Vec x, Vec b=None):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(__pyx_v_ngs);
+  __pyx_r = __pyx_v_ngs;
+  goto __pyx_L0;
+
+  /* "PETSc/SNES.pyx":351
+ *         CHKERR( SNESSetNGS(self.snes, SNES_NGS, <void*>context) )
+ * 
+ *     def getNGS(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( SNESGetNGS(self.snes, NULL, NULL) )
+ *         cdef object ngs = self.get_attr('__ngs__')
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.SNES.getNGS", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_ngs);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/SNES.pyx":356
+ *         return ngs
+ * 
+ *     def computeNGS(self, Vec x, Vec b=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscVec bvec = NULL
+ *         if b is not None: bvec = b.vec
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_91computeNGS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_90computeNGS[] = "SNES.computeNGS(self, Vec x, Vec b=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_91computeNGS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscVecObject *__pyx_v_x = 0;
+  struct PyPetscVecObject *__pyx_v_b = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("computeNGS (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_x,&__pyx_n_s_b,0};
+    PyObject* values[2] = {0,0};
+    values[1] = (PyObject *)((struct PyPetscVecObject *)Py_None);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_b);
+          if (value) { values[1] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeNGS") < 0)) __PYX_ERR(36, 356, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_x = ((struct PyPetscVecObject *)values[0]);
+    __pyx_v_b = ((struct PyPetscVecObject *)values[1]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("computeNGS", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 356, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.SNES.computeNGS", __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_ERR(36, 356, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "b", 0))) __PYX_ERR(36, 356, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_90computeNGS(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_x, __pyx_v_b);
+
+  /* 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_4SNES_90computeNGS(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_b) {
+  Vec __pyx_v_bvec;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  Vec __pyx_t_3;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("computeNGS", 0);
+
+  /* "PETSc/SNES.pyx":357
+ * 
+ *     def computeNGS(self, Vec x, Vec b=None):
+ *         cdef PetscVec bvec = NULL             # <<<<<<<<<<<<<<
+ *         if b is not None: bvec = b.vec
+ *         CHKERR( SNESComputeNGS(self.snes, bvec, x.vec) )
+ */
+  __pyx_v_bvec = NULL;
+
+  /* "PETSc/SNES.pyx":358
+ *     def computeNGS(self, Vec x, Vec b=None):
+ *         cdef PetscVec bvec = NULL
+ *         if b is not None: bvec = b.vec             # <<<<<<<<<<<<<<
+ *         CHKERR( SNESComputeNGS(self.snes, bvec, x.vec) )
+ * 
+ */
+  __pyx_t_1 = (((PyObject *)__pyx_v_b) != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_v_b->vec;
+    __pyx_v_bvec = __pyx_t_3;
+  }
+
+  /* "PETSc/SNES.pyx":359
+ *         cdef PetscVec bvec = NULL
+ *         if b is not None: bvec = b.vec
+ *         CHKERR( SNESComputeNGS(self.snes, bvec, x.vec) )             # <<<<<<<<<<<<<<
+ * 
+ *     # --- tolerances and convergence ---
+ */
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESComputeNGS(__pyx_v_self->snes, __pyx_v_bvec, __pyx_v_x->vec)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(36, 359, __pyx_L1_error)
+
+  /* "PETSc/SNES.pyx":356
+ *         return ngs
+ * 
+ *     def computeNGS(self, Vec x, Vec b=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscVec bvec = NULL
+ *         if b is not None: bvec = b.vec
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.SNES.computeNGS", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/SNES.pyx":363
  *     # --- tolerances and convergence ---
  * 
  *     def setTolerances(self, rtol=None, atol=None, stol=None, max_it=None):             # <<<<<<<<<<<<<<
@@ -164701,9 +174463,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_84computeObjective(struct PyPet
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_87setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_86setTolerances[] = "SNES.setTolerances(self, rtol=None, atol=None, stol=None, max_it=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_87setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_93setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_92setTolerances[] = "SNES.setTolerances(self, rtol=None, atol=None, stol=None, max_it=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_93setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_rtol = 0;
   PyObject *__pyx_v_atol = 0;
   PyObject *__pyx_v_stol = 0;
@@ -164723,9 +174485,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_87setTolerances(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -164736,16 +174502,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_87setTolerances(PyObject *__pyx
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rtol);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_atol);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_stol);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_max_it);
@@ -164753,14 +174522,18 @@ 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_ERR(36, 346, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTolerances") < 0)) __PYX_ERR(36, 363, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -164772,20 +174545,20 @@ 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_ERR(36, 346, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setTolerances", 0, 0, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 363, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setTolerances", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_86setTolerances(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_rtol, __pyx_v_atol, __pyx_v_stol, __pyx_v_max_it);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_92setTolerances(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_rtol, __pyx_v_atol, __pyx_v_stol, __pyx_v_max_it);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_92setTolerances(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_rtol, PyObject *__pyx_v_atol, PyObject *__pyx_v_stol, PyObject *__pyx_v_max_it) {
   PetscReal __pyx_v_crtol;
   PetscReal __pyx_v_catol;
   PetscReal __pyx_v_cstol;
@@ -164799,7 +174572,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_86setTolerances(struct PyPetscS
   int __pyx_t_5;
   __Pyx_RefNannySetupContext("setTolerances", 0);
 
-  /* "PETSc/SNES.pyx":348
+  /* "PETSc/SNES.pyx":365
  *     def setTolerances(self, rtol=None, atol=None, stol=None, max_it=None):
  *         cdef PetscReal crtol, catol, cstol
  *         crtol = catol = cstol = PETSC_DEFAULT             # <<<<<<<<<<<<<<
@@ -164810,7 +174583,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_86setTolerances(struct PyPetscS
   __pyx_v_catol = PETSC_DEFAULT;
   __pyx_v_cstol = PETSC_DEFAULT;
 
-  /* "PETSc/SNES.pyx":349
+  /* "PETSc/SNES.pyx":366
  *         cdef PetscReal crtol, catol, cstol
  *         crtol = catol = cstol = PETSC_DEFAULT
  *         cdef PetscInt cmaxit = PETSC_DEFAULT             # <<<<<<<<<<<<<<
@@ -164819,7 +174592,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_86setTolerances(struct PyPetscS
  */
   __pyx_v_cmaxit = PETSC_DEFAULT;
 
-  /* "PETSc/SNES.pyx":350
+  /* "PETSc/SNES.pyx":367
  *         crtol = catol = cstol = PETSC_DEFAULT
  *         cdef PetscInt cmaxit = PETSC_DEFAULT
  *         if rtol   is not None: crtol  = asReal(rtol)             # <<<<<<<<<<<<<<
@@ -164829,11 +174602,11 @@ 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_ERR(36, 350, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_rtol); if (unlikely(__pyx_t_3 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(36, 367, __pyx_L1_error)
     __pyx_v_crtol = __pyx_t_3;
   }
 
-  /* "PETSc/SNES.pyx":351
+  /* "PETSc/SNES.pyx":368
  *         cdef PetscInt cmaxit = PETSC_DEFAULT
  *         if rtol   is not None: crtol  = asReal(rtol)
  *         if atol   is not None: catol  = asReal(atol)             # <<<<<<<<<<<<<<
@@ -164843,11 +174616,11 @@ 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_ERR(36, 351, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_atol); if (unlikely(__pyx_t_3 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(36, 368, __pyx_L1_error)
     __pyx_v_catol = __pyx_t_3;
   }
 
-  /* "PETSc/SNES.pyx":352
+  /* "PETSc/SNES.pyx":369
  *         if rtol   is not None: crtol  = asReal(rtol)
  *         if atol   is not None: catol  = asReal(atol)
  *         if stol   is not None: cstol  = asReal(stol)             # <<<<<<<<<<<<<<
@@ -164857,11 +174630,11 @@ 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_ERR(36, 352, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_stol); if (unlikely(__pyx_t_3 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(36, 369, __pyx_L1_error)
     __pyx_v_cstol = __pyx_t_3;
   }
 
-  /* "PETSc/SNES.pyx":353
+  /* "PETSc/SNES.pyx":370
  *         if atol   is not None: catol  = asReal(atol)
  *         if stol   is not None: cstol  = asReal(stol)
  *         if max_it is not None: cmaxit = asInt(max_it)             # <<<<<<<<<<<<<<
@@ -164871,20 +174644,20 @@ 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 == -1L && PyErr_Occurred())) __PYX_ERR(36, 353, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_max_it); if (unlikely(__pyx_t_4 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(36, 370, __pyx_L1_error)
     __pyx_v_cmaxit = __pyx_t_4;
   }
 
-  /* "PETSc/SNES.pyx":354
+  /* "PETSc/SNES.pyx":371
  *         if stol   is not None: cstol  = asReal(stol)
  *         if max_it is not None: cmaxit = asInt(max_it)
  *         CHKERR( SNESSetTolerances(self.snes, catol, crtol, cstol,             # <<<<<<<<<<<<<<
  *                                   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_ERR(36, 354, __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 == ((int)-1))) __PYX_ERR(36, 371, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":346
+  /* "PETSc/SNES.pyx":363
  *     # --- tolerances and convergence ---
  * 
  *     def setTolerances(self, rtol=None, atol=None, stol=None, max_it=None):             # <<<<<<<<<<<<<<
@@ -164904,7 +174677,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_86setTolerances(struct PyPetscS
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":357
+/* "PETSc/SNES.pyx":374
  *                                   cmaxit, PETSC_DEFAULT) )
  * 
  *     def getTolerances(self):             # <<<<<<<<<<<<<<
@@ -164913,23 +174686,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_86setTolerances(struct PyPetscS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_89getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_88getTolerances[] = "SNES.getTolerances(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_89getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_95getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_94getTolerances[] = "SNES.getTolerances(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_95getTolerances(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_4SNES_88getTolerances(((struct PyPetscSNESObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_94getTolerances(((struct PyPetscSNESObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_88getTolerances(struct PyPetscSNESObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_94getTolerances(struct PyPetscSNESObject *__pyx_v_self) {
   PetscReal __pyx_v_crtol;
   PetscReal __pyx_v_catol;
   PetscReal __pyx_v_cstol;
@@ -164944,7 +174717,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_88getTolerances(struct PyPetscS
   PyObject *__pyx_t_6 = NULL;
   __Pyx_RefNannySetupContext("getTolerances", 0);
 
-  /* "PETSc/SNES.pyx":358
+  /* "PETSc/SNES.pyx":375
  * 
  *     def getTolerances(self):
  *         cdef PetscReal crtol=0, catol=0, cstol=0             # <<<<<<<<<<<<<<
@@ -164955,7 +174728,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_88getTolerances(struct PyPetscS
   __pyx_v_catol = 0.0;
   __pyx_v_cstol = 0.0;
 
-  /* "PETSc/SNES.pyx":359
+  /* "PETSc/SNES.pyx":376
  *     def getTolerances(self):
  *         cdef PetscReal crtol=0, catol=0, cstol=0
  *         cdef PetscInt cmaxit=0             # <<<<<<<<<<<<<<
@@ -164964,16 +174737,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_88getTolerances(struct PyPetscS
  */
   __pyx_v_cmaxit = 0;
 
-  /* "PETSc/SNES.pyx":360
+  /* "PETSc/SNES.pyx":377
  *         cdef PetscReal crtol=0, catol=0, cstol=0
  *         cdef PetscInt cmaxit=0
  *         CHKERR( SNESGetTolerances(self.snes, &catol, &crtol, &cstol,             # <<<<<<<<<<<<<<
  *                                   &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_ERR(36, 360, __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 == ((int)-1))) __PYX_ERR(36, 377, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":362
+  /* "PETSc/SNES.pyx":379
  *         CHKERR( SNESGetTolerances(self.snes, &catol, &crtol, &cstol,
  *                                   &cmaxit, NULL) )
  *         return (toReal(crtol), toReal(catol), toReal(cstol), toInt(cmaxit))             # <<<<<<<<<<<<<<
@@ -164981,15 +174754,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_ERR(36, 362, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_crtol); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 379, __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_ERR(36, 362, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_catol); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 379, __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_ERR(36, 362, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_cstol); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 379, __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_ERR(36, 362, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_cmaxit); if (unlikely(!__pyx_t_5)) __PYX_ERR(36, 379, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(36, 362, __pyx_L1_error)
+  __pyx_t_6 = PyTuple_New(4); if (unlikely(!__pyx_t_6)) __PYX_ERR(36, 379, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_2);
@@ -165007,7 +174780,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_88getTolerances(struct PyPetscS
   __pyx_t_6 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":357
+  /* "PETSc/SNES.pyx":374
  *                                   cmaxit, PETSC_DEFAULT) )
  * 
  *     def getTolerances(self):             # <<<<<<<<<<<<<<
@@ -165030,7 +174803,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_88getTolerances(struct PyPetscS
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":364
+/* "PETSc/SNES.pyx":381
  *         return (toReal(crtol), toReal(catol), toReal(cstol), toInt(cmaxit))
  * 
  *     def setNormSchedule(self, normsched):             # <<<<<<<<<<<<<<
@@ -165039,9 +174812,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_88getTolerances(struct PyPetscS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_91setNormSchedule(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_97setNormSchedule(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_96setNormSchedule[] = "SNES.setNormSchedule(self, normsched)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_97setNormSchedule(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_normsched = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -165054,6 +174827,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_91setNormSchedule(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -165064,7 +174838,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_ERR(36, 364, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setNormSchedule") < 0)) __PYX_ERR(36, 381, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -165075,37 +174849,37 @@ 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_ERR(36, 364, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setNormSchedule", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 381, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setNormSchedule", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_90setNormSchedule(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_normsched);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_96setNormSchedule(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_normsched);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_90setNormSchedule(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_normsched) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_96setNormSchedule(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_normsched) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   SNESNormSchedule __pyx_t_1;
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setNormSchedule", 0);
 
-  /* "PETSc/SNES.pyx":365
+  /* "PETSc/SNES.pyx":382
  * 
  *     def setNormSchedule(self, normsched):
  *         CHKERR( SNESSetNormSchedule(self.snes, normsched) )             # <<<<<<<<<<<<<<
  * 
  *     def getNormSchedule(self):
  */
-  __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)
+  __pyx_t_1 = ((SNESNormSchedule)__Pyx_PyInt_As_SNESNormSchedule(__pyx_v_normsched)); if (unlikely(PyErr_Occurred())) __PYX_ERR(36, 382, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetNormSchedule(__pyx_v_self->snes, __pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(36, 382, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":364
+  /* "PETSc/SNES.pyx":381
  *         return (toReal(crtol), toReal(catol), toReal(cstol), toInt(cmaxit))
  * 
  *     def setNormSchedule(self, normsched):             # <<<<<<<<<<<<<<
@@ -165125,7 +174899,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_90setNormSchedule(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":367
+/* "PETSc/SNES.pyx":384
  *         CHKERR( SNESSetNormSchedule(self.snes, normsched) )
  * 
  *     def getNormSchedule(self):             # <<<<<<<<<<<<<<
@@ -165134,23 +174908,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_90setNormSchedule(struct PyPets
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_93getNormSchedule(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_92getNormSchedule[] = "SNES.getNormSchedule(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_93getNormSchedule(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_99getNormSchedule(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_98getNormSchedule[] = "SNES.getNormSchedule(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_99getNormSchedule(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getNormSchedule (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getNormSchedule", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getNormSchedule", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_92getNormSchedule(((struct PyPetscSNESObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_98getNormSchedule(((struct PyPetscSNESObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_92getNormSchedule(struct PyPetscSNESObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_98getNormSchedule(struct PyPetscSNESObject *__pyx_v_self) {
   SNESNormSchedule __pyx_v_normsched;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -165158,7 +174932,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_92getNormSchedule(struct PyPets
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getNormSchedule", 0);
 
-  /* "PETSc/SNES.pyx":368
+  /* "PETSc/SNES.pyx":385
  * 
  *     def getNormSchedule(self):
  *         cdef PetscSNESNormSchedule normsched = SNES_NORM_NONE             # <<<<<<<<<<<<<<
@@ -165167,16 +174941,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_92getNormSchedule(struct PyPets
  */
   __pyx_v_normsched = SNES_NORM_NONE;
 
-  /* "PETSc/SNES.pyx":369
+  /* "PETSc/SNES.pyx":386
  *     def getNormSchedule(self):
  *         cdef PetscSNESNormSchedule normsched = SNES_NORM_NONE
  *         CHKERR( SNESGetNormSchedule(self.snes, &normsched) )             # <<<<<<<<<<<<<<
  *         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_ERR(36, 369, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetNormSchedule(__pyx_v_self->snes, (&__pyx_v_normsched))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(36, 386, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":370
+  /* "PETSc/SNES.pyx":387
  *         cdef PetscSNESNormSchedule normsched = SNES_NORM_NONE
  *         CHKERR( SNESGetNormSchedule(self.snes, &normsched) )
  *         return normsched             # <<<<<<<<<<<<<<
@@ -165184,13 +174958,13 @@ 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 = __Pyx_PyInt_From_SNESNormSchedule(__pyx_v_normsched); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 370, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_SNESNormSchedule(__pyx_v_normsched); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 387, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":367
+  /* "PETSc/SNES.pyx":384
  *         CHKERR( SNESSetNormSchedule(self.snes, normsched) )
  * 
  *     def getNormSchedule(self):             # <<<<<<<<<<<<<<
@@ -165209,7 +174983,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_92getNormSchedule(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":372
+/* "PETSc/SNES.pyx":389
  *         return normsched
  * 
  *     def setConvergenceTest(self, converged, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -165218,9 +174992,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_92getNormSchedule(struct PyPets
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_95setConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_94setConvergenceTest[] = "SNES.setConvergenceTest(self, converged, args=None, kargs=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_95setConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_101setConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_100setConvergenceTest[] = "SNES.setConvergenceTest(self, converged, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_101setConvergenceTest(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;
@@ -165237,8 +175011,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_95setConvergenceTest(PyObject *
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -165247,11 +175024,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_95setConvergenceTest(PyObject *
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_converged)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -165259,12 +175038,14 @@ 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_ERR(36, 372, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConvergenceTest") < 0)) __PYX_ERR(36, 389, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -165276,20 +175057,20 @@ 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_ERR(36, 372, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setConvergenceTest", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 389, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setConvergenceTest", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_94setConvergenceTest(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_converged, __pyx_v_args, __pyx_v_kargs);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_100setConvergenceTest(((struct PyPetscSNESObject *)__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_4SNES_94setConvergenceTest(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_converged, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_100setConvergenceTest(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_converged, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
   PyObject *__pyx_v_context = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -165301,7 +175082,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_94setConvergenceTest(struct PyP
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/SNES.pyx":373
+  /* "PETSc/SNES.pyx":390
  * 
  *     def setConvergenceTest(self, converged, args=None, kargs=None):
  *         if converged is not None:             # <<<<<<<<<<<<<<
@@ -165312,7 +175093,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_94setConvergenceTest(struct PyP
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/SNES.pyx":374
+    /* "PETSc/SNES.pyx":391
  *     def setConvergenceTest(self, converged, args=None, kargs=None):
  *         if converged is not None:
  *             if args  is None: args  = ()             # <<<<<<<<<<<<<<
@@ -165326,7 +175107,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_94setConvergenceTest(struct PyP
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
     }
 
-    /* "PETSc/SNES.pyx":375
+    /* "PETSc/SNES.pyx":392
  *         if converged is not None:
  *             if args  is None: args  = ()
  *             if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -165336,20 +175117,20 @@ 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_ERR(36, 375, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 392, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
       __pyx_t_3 = 0;
     }
 
-    /* "PETSc/SNES.pyx":376
+    /* "PETSc/SNES.pyx":393
  *             if args  is None: args  = ()
  *             if kargs is None: kargs = {}
  *             context = (converged, args, kargs)             # <<<<<<<<<<<<<<
  *             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_ERR(36, 376, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 393, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_converged);
     __Pyx_GIVEREF(__pyx_v_converged);
@@ -165363,27 +175144,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_94setConvergenceTest(struct PyP
     __pyx_v_context = ((PyObject*)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "PETSc/SNES.pyx":377
+    /* "PETSc/SNES.pyx":394
  *             if kargs is None: kargs = {}
  *             context = (converged, args, kargs)
  *             self.set_attr('__converged__', context)             # <<<<<<<<<<<<<<
  *             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), ((char *)"__converged__"), __pyx_v_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 377, __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, 394, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "PETSc/SNES.pyx":378
+    /* "PETSc/SNES.pyx":395
  *             context = (converged, args, kargs)
  *             self.set_attr('__converged__', context)
  *             CHKERR( SNESSetConvergenceTest(self.snes, SNES_Converged, <void*>context, NULL) )             # <<<<<<<<<<<<<<
  *         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_ERR(36, 378, __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 == ((int)-1))) __PYX_ERR(36, 395, __pyx_L1_error)
 
-    /* "PETSc/SNES.pyx":373
+    /* "PETSc/SNES.pyx":390
  * 
  *     def setConvergenceTest(self, converged, args=None, kargs=None):
  *         if converged is not None:             # <<<<<<<<<<<<<<
@@ -165393,7 +175174,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_94setConvergenceTest(struct PyP
     goto __pyx_L3;
   }
 
-  /* "PETSc/SNES.pyx":380
+  /* "PETSc/SNES.pyx":397
  *             CHKERR( SNESSetConvergenceTest(self.snes, SNES_Converged, <void*>context, NULL) )
  *         else:
  *             CHKERR( SNESSetConvergenceTest(self.snes, SNESConvergedDefault, NULL, NULL) )             # <<<<<<<<<<<<<<
@@ -165401,22 +175182,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_94setConvergenceTest(struct PyP
  * 
  */
   /*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)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetConvergenceTest(__pyx_v_self->snes, SNESConvergedDefault, NULL, NULL)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(36, 397, __pyx_L1_error)
 
-    /* "PETSc/SNES.pyx":381
+    /* "PETSc/SNES.pyx":398
  *         else:
  *             CHKERR( SNESSetConvergenceTest(self.snes, SNESConvergedDefault, NULL, NULL) )
  *             self.set_attr('__converged__', None)             # <<<<<<<<<<<<<<
  * 
  *     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), ((char *)"__converged__"), Py_None); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 381, __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, 398, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   }
   __pyx_L3:;
 
-  /* "PETSc/SNES.pyx":372
+  /* "PETSc/SNES.pyx":389
  *         return normsched
  * 
  *     def setConvergenceTest(self, converged, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -165440,7 +175221,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_94setConvergenceTest(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":383
+/* "PETSc/SNES.pyx":400
  *             self.set_attr('__converged__', None)
  * 
  *     def getConvergenceTest(self):             # <<<<<<<<<<<<<<
@@ -165449,29 +175230,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_94setConvergenceTest(struct PyP
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_97getConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_96getConvergenceTest[] = "SNES.getConvergenceTest(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_97getConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_103getConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_102getConvergenceTest[] = "SNES.getConvergenceTest(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_103getConvergenceTest(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_4SNES_96getConvergenceTest(((struct PyPetscSNESObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_102getConvergenceTest(((struct PyPetscSNESObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_96getConvergenceTest(struct PyPetscSNESObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_102getConvergenceTest(struct PyPetscSNESObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("getConvergenceTest", 0);
 
-  /* "PETSc/SNES.pyx":384
+  /* "PETSc/SNES.pyx":401
  * 
  *     def getConvergenceTest(self):
  *         return self.get_attr('__converged__')             # <<<<<<<<<<<<<<
@@ -165479,13 +175260,13 @@ 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), ((char *)"__converged__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 384, __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, 401, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":383
+  /* "PETSc/SNES.pyx":400
  *             self.set_attr('__converged__', None)
  * 
  *     def getConvergenceTest(self):             # <<<<<<<<<<<<<<
@@ -165504,7 +175285,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_96getConvergenceTest(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":386
+/* "PETSc/SNES.pyx":403
  *         return self.get_attr('__converged__')
  * 
  *     def callConvergenceTest(self, its, xnorm, ynorm, fnorm):             # <<<<<<<<<<<<<<
@@ -165513,9 +175294,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_96getConvergenceTest(struct PyP
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_99callConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_98callConvergenceTest[] = "SNES.callConvergenceTest(self, its, xnorm, ynorm, fnorm)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_99callConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_105callConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_104callConvergenceTest[] = "SNES.callConvergenceTest(self, its, xnorm, ynorm, fnorm)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_105callConvergenceTest(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_its = 0;
   PyObject *__pyx_v_xnorm = 0;
   PyObject *__pyx_v_ynorm = 0;
@@ -165531,9 +175312,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_99callConvergenceTest(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -165542,24 +175327,27 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_99callConvergenceTest(PyObject
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_its)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(36, 386, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("callConvergenceTest", 1, 4, 4, 1); __PYX_ERR(36, 403, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(36, 386, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("callConvergenceTest", 1, 4, 4, 2); __PYX_ERR(36, 403, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(36, 386, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("callConvergenceTest", 1, 4, 4, 3); __PYX_ERR(36, 403, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "callConvergenceTest") < 0)) __PYX_ERR(36, 386, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "callConvergenceTest") < 0)) __PYX_ERR(36, 403, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 4) {
       goto __pyx_L5_argtuple_error;
@@ -165576,20 +175364,20 @@ 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_ERR(36, 386, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("callConvergenceTest", 1, 4, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 403, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.callConvergenceTest", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_98callConvergenceTest(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_its, __pyx_v_xnorm, __pyx_v_ynorm, __pyx_v_fnorm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_104callConvergenceTest(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_its, __pyx_v_xnorm, __pyx_v_ynorm, __pyx_v_fnorm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_104callConvergenceTest(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_its, PyObject *__pyx_v_xnorm, PyObject *__pyx_v_ynorm, PyObject *__pyx_v_fnorm) {
   PetscInt __pyx_v_ival;
   PetscReal __pyx_v_rval1;
   PetscReal __pyx_v_rval2;
@@ -165603,47 +175391,47 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_98callConvergenceTest(struct Py
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("callConvergenceTest", 0);
 
-  /* "PETSc/SNES.pyx":387
+  /* "PETSc/SNES.pyx":404
  * 
  *     def callConvergenceTest(self, its, xnorm, ynorm, fnorm):
  *         cdef PetscInt  ival  = asInt(its)             # <<<<<<<<<<<<<<
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(36, 387, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_its); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(36, 404, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/SNES.pyx":388
+  /* "PETSc/SNES.pyx":405
  *     def callConvergenceTest(self, its, xnorm, ynorm, fnorm):
  *         cdef PetscInt  ival  = asInt(its)
  *         cdef PetscReal rval1 = asReal(xnorm)             # <<<<<<<<<<<<<<
  *         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_ERR(36, 388, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_xnorm); if (unlikely(__pyx_t_2 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(36, 405, __pyx_L1_error)
   __pyx_v_rval1 = __pyx_t_2;
 
-  /* "PETSc/SNES.pyx":389
+  /* "PETSc/SNES.pyx":406
  *         cdef PetscInt  ival  = asInt(its)
  *         cdef PetscReal rval1 = asReal(xnorm)
  *         cdef PetscReal rval2 = asReal(ynorm)             # <<<<<<<<<<<<<<
  *         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_ERR(36, 389, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_ynorm); if (unlikely(__pyx_t_2 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(36, 406, __pyx_L1_error)
   __pyx_v_rval2 = __pyx_t_2;
 
-  /* "PETSc/SNES.pyx":390
+  /* "PETSc/SNES.pyx":407
  *         cdef PetscReal rval1 = asReal(xnorm)
  *         cdef PetscReal rval2 = asReal(ynorm)
  *         cdef PetscReal rval3 = asReal(fnorm)             # <<<<<<<<<<<<<<
  *         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_ERR(36, 390, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_fnorm); if (unlikely(__pyx_t_2 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(36, 407, __pyx_L1_error)
   __pyx_v_rval3 = __pyx_t_2;
 
-  /* "PETSc/SNES.pyx":391
+  /* "PETSc/SNES.pyx":408
  *         cdef PetscReal rval2 = asReal(ynorm)
  *         cdef PetscReal rval3 = asReal(fnorm)
  *         cdef PetscSNESConvergedReason reason = SNES_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
@@ -165652,16 +175440,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_98callConvergenceTest(struct Py
  */
   __pyx_v_reason = SNES_CONVERGED_ITERATING;
 
-  /* "PETSc/SNES.pyx":392
+  /* "PETSc/SNES.pyx":409
  *         cdef PetscReal rval3 = asReal(fnorm)
  *         cdef PetscSNESConvergedReason reason = SNES_CONVERGED_ITERATING
  *         CHKERR( SNESConvergenceTestCall(self.snes, ival,             # <<<<<<<<<<<<<<
  *                                         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_ERR(36, 392, __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 == ((int)-1))) __PYX_ERR(36, 409, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":394
+  /* "PETSc/SNES.pyx":411
  *         CHKERR( SNESConvergenceTestCall(self.snes, ival,
  *                                         rval1, rval2, rval3, &reason) )
  *         return reason             # <<<<<<<<<<<<<<
@@ -165669,13 +175457,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_98callConvergenceTest(struct Py
  *     def setConvergenceHistory(self, length=None, reset=False):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_4 = __Pyx_PyInt_From_SNESConvergedReason(__pyx_v_reason); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 394, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyInt_From_SNESConvergedReason(__pyx_v_reason); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 411, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __pyx_r = __pyx_t_4;
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":386
+  /* "PETSc/SNES.pyx":403
  *         return self.get_attr('__converged__')
  * 
  *     def callConvergenceTest(self, its, xnorm, ynorm, fnorm):             # <<<<<<<<<<<<<<
@@ -165694,7 +175482,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_98callConvergenceTest(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":396
+/* "PETSc/SNES.pyx":413
  *         return reason
  * 
  *     def setConvergenceHistory(self, length=None, reset=False):             # <<<<<<<<<<<<<<
@@ -165703,9 +175491,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_98callConvergenceTest(struct Py
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_101setConvergenceHistory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_100setConvergenceHistory[] = "SNES.setConvergenceHistory(self, length=None, reset=False)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_101setConvergenceHistory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_107setConvergenceHistory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_106setConvergenceHistory[] = "SNES.setConvergenceHistory(self, length=None, reset=False)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_107setConvergenceHistory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_length = 0;
   PyObject *__pyx_v_reset = 0;
   PyObject *__pyx_r = 0;
@@ -165721,7 +175509,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_101setConvergenceHistory(PyObje
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -165732,6 +175522,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_101setConvergenceHistory(PyObje
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_length);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_reset);
@@ -165739,12 +175530,14 @@ 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_ERR(36, 396, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConvergenceHistory") < 0)) __PYX_ERR(36, 413, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -165754,20 +175547,20 @@ 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_ERR(36, 396, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setConvergenceHistory", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 413, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setConvergenceHistory", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_100setConvergenceHistory(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_length, __pyx_v_reset);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_106setConvergenceHistory(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_length, __pyx_v_reset);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_100setConvergenceHistory(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_length, PyObject *__pyx_v_reset) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_106setConvergenceHistory(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_length, PyObject *__pyx_v_reset) {
   PetscReal *__pyx_v_rdata;
   PetscInt *__pyx_v_idata;
   PetscInt __pyx_v_size;
@@ -165784,7 +175577,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_100setConvergenceHistory(struct
   int __pyx_t_6;
   __Pyx_RefNannySetupContext("setConvergenceHistory", 0);
 
-  /* "PETSc/SNES.pyx":397
+  /* "PETSc/SNES.pyx":414
  * 
  *     def setConvergenceHistory(self, length=None, reset=False):
  *         cdef PetscReal *rdata = NULL             # <<<<<<<<<<<<<<
@@ -165793,7 +175586,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_100setConvergenceHistory(struct
  */
   __pyx_v_rdata = NULL;
 
-  /* "PETSc/SNES.pyx":398
+  /* "PETSc/SNES.pyx":415
  *     def setConvergenceHistory(self, length=None, reset=False):
  *         cdef PetscReal *rdata = NULL
  *         cdef PetscInt  *idata = NULL             # <<<<<<<<<<<<<<
@@ -165802,7 +175595,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_100setConvergenceHistory(struct
  */
   __pyx_v_idata = NULL;
 
-  /* "PETSc/SNES.pyx":399
+  /* "PETSc/SNES.pyx":416
  *         cdef PetscReal *rdata = NULL
  *         cdef PetscInt  *idata = NULL
  *         cdef PetscInt   size = 1000             # <<<<<<<<<<<<<<
@@ -165811,7 +175604,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_100setConvergenceHistory(struct
  */
   __pyx_v_size = 0x3E8;
 
-  /* "PETSc/SNES.pyx":400
+  /* "PETSc/SNES.pyx":417
  *         cdef PetscInt  *idata = NULL
  *         cdef PetscInt   size = 1000
  *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -165820,7 +175613,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_100setConvergenceHistory(struct
  */
   __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/SNES.pyx":401
+  /* "PETSc/SNES.pyx":418
  *         cdef PetscInt   size = 1000
  *         cdef PetscBool flag = PETSC_FALSE
  *         if   length is True:     pass             # <<<<<<<<<<<<<<
@@ -165833,7 +175626,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_100setConvergenceHistory(struct
     goto __pyx_L3;
   }
 
-  /* "PETSc/SNES.pyx":402
+  /* "PETSc/SNES.pyx":419
  *         cdef PetscBool flag = PETSC_FALSE
  *         if   length is True:     pass
  *         elif length is not None: size = asInt(length)             # <<<<<<<<<<<<<<
@@ -165843,12 +175636,12 @@ 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 == -1L && PyErr_Occurred())) __PYX_ERR(36, 402, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_length); if (unlikely(__pyx_t_3 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(36, 419, __pyx_L1_error)
     __pyx_v_size = __pyx_t_3;
   }
   __pyx_L3:;
 
-  /* "PETSc/SNES.pyx":403
+  /* "PETSc/SNES.pyx":420
  *         if   length is True:     pass
  *         elif length is not None: size = asInt(length)
  *         if size < 0: size = 1000             # <<<<<<<<<<<<<<
@@ -165860,56 +175653,56 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_100setConvergenceHistory(struct
     __pyx_v_size = 0x3E8;
   }
 
-  /* "PETSc/SNES.pyx":404
+  /* "PETSc/SNES.pyx":421
  *         elif length is not None: size = asInt(length)
  *         if size < 0: size = 1000
  *         if reset: flag = PETSC_TRUE             # <<<<<<<<<<<<<<
  *         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_ERR(36, 404, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_reset); if (unlikely(__pyx_t_1 < 0)) __PYX_ERR(36, 421, __pyx_L1_error)
   if (__pyx_t_1) {
     __pyx_v_flag = PETSC_TRUE;
   }
 
-  /* "PETSc/SNES.pyx":405
+  /* "PETSc/SNES.pyx":422
  *         if size < 0: size = 1000
  *         if reset: flag = PETSC_TRUE
  *         cdef object rhist = oarray_r(empty_r(size), NULL, &rdata)             # <<<<<<<<<<<<<<
  *         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_ERR(36, 405, __pyx_L1_error)
+  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_r(__pyx_v_size)); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 422, __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_ERR(36, 405, __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, 422, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
   __pyx_v_rhist = __pyx_t_5;
   __pyx_t_5 = 0;
 
-  /* "PETSc/SNES.pyx":406
+  /* "PETSc/SNES.pyx":423
  *         if reset: flag = PETSC_TRUE
  *         cdef object rhist = oarray_r(empty_r(size), NULL, &rdata)
  *         cdef object ihist = oarray_i(empty_i(size), NULL, &idata)             # <<<<<<<<<<<<<<
  *         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_ERR(36, 406, __pyx_L1_error)
+  __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_i(__pyx_v_size)); if (unlikely(!__pyx_t_5)) __PYX_ERR(36, 423, __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_ERR(36, 406, __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, 423, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   __pyx_v_ihist = __pyx_t_4;
   __pyx_t_4 = 0;
 
-  /* "PETSc/SNES.pyx":407
+  /* "PETSc/SNES.pyx":424
  *         cdef object rhist = oarray_r(empty_r(size), NULL, &rdata)
  *         cdef object ihist = oarray_i(empty_i(size), NULL, &idata)
  *         self.set_attr('__history__', (rhist, ihist))             # <<<<<<<<<<<<<<
  *         CHKERR( SNESSetConvergenceHistory(self.snes, rdata, idata, size, flag) )
  * 
  */
-  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 407, __pyx_L1_error)
+  __pyx_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 424, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_INCREF(__pyx_v_rhist);
   __Pyx_GIVEREF(__pyx_v_rhist);
@@ -165917,21 +175710,21 @@ 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), ((char *)"__history__"), __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(36, 407, __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, 424, __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/SNES.pyx":408
+  /* "PETSc/SNES.pyx":425
  *         cdef object ihist = oarray_i(empty_i(size), NULL, &idata)
  *         self.set_attr('__history__', (rhist, ihist))
  *         CHKERR( SNESSetConvergenceHistory(self.snes, rdata, idata, size, flag) )             # <<<<<<<<<<<<<<
  * 
  *     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_ERR(36, 408, __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 == ((int)-1))) __PYX_ERR(36, 425, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":396
+  /* "PETSc/SNES.pyx":413
  *         return reason
  * 
  *     def setConvergenceHistory(self, length=None, reset=False):             # <<<<<<<<<<<<<<
@@ -165955,7 +175748,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_100setConvergenceHistory(struct
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":410
+/* "PETSc/SNES.pyx":427
  *         CHKERR( SNESSetConvergenceHistory(self.snes, rdata, idata, size, flag) )
  * 
  *     def getConvergenceHistory(self):             # <<<<<<<<<<<<<<
@@ -165964,23 +175757,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_100setConvergenceHistory(struct
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_103getConvergenceHistory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_102getConvergenceHistory[] = "SNES.getConvergenceHistory(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_103getConvergenceHistory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_109getConvergenceHistory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_108getConvergenceHistory[] = "SNES.getConvergenceHistory(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_109getConvergenceHistory(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_4SNES_102getConvergenceHistory(((struct PyPetscSNESObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_108getConvergenceHistory(((struct PyPetscSNESObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_102getConvergenceHistory(struct PyPetscSNESObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_108getConvergenceHistory(struct PyPetscSNESObject *__pyx_v_self) {
   PetscReal *__pyx_v_rdata;
   PetscInt *__pyx_v_idata;
   PetscInt __pyx_v_size;
@@ -165992,7 +175785,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_102getConvergenceHistory(struct
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getConvergenceHistory", 0);
 
-  /* "PETSc/SNES.pyx":411
+  /* "PETSc/SNES.pyx":428
  * 
  *     def getConvergenceHistory(self):
  *         cdef PetscReal *rdata = NULL             # <<<<<<<<<<<<<<
@@ -166001,7 +175794,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_102getConvergenceHistory(struct
  */
   __pyx_v_rdata = NULL;
 
-  /* "PETSc/SNES.pyx":412
+  /* "PETSc/SNES.pyx":429
  *     def getConvergenceHistory(self):
  *         cdef PetscReal *rdata = NULL
  *         cdef PetscInt  *idata = NULL             # <<<<<<<<<<<<<<
@@ -166010,7 +175803,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_102getConvergenceHistory(struct
  */
   __pyx_v_idata = NULL;
 
-  /* "PETSc/SNES.pyx":413
+  /* "PETSc/SNES.pyx":430
  *         cdef PetscReal *rdata = NULL
  *         cdef PetscInt  *idata = NULL
  *         cdef PetscInt   size = 0             # <<<<<<<<<<<<<<
@@ -166019,40 +175812,40 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_102getConvergenceHistory(struct
  */
   __pyx_v_size = 0;
 
-  /* "PETSc/SNES.pyx":414
+  /* "PETSc/SNES.pyx":431
  *         cdef PetscInt  *idata = NULL
  *         cdef PetscInt   size = 0
  *         CHKERR( SNESGetConvergenceHistory(self.snes, &rdata, &idata, &size) )             # <<<<<<<<<<<<<<
  *         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_ERR(36, 414, __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 == ((int)-1))) __PYX_ERR(36, 431, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":415
+  /* "PETSc/SNES.pyx":432
  *         cdef PetscInt   size = 0
  *         CHKERR( SNESGetConvergenceHistory(self.snes, &rdata, &idata, &size) )
  *         cdef object rhist = array_r(size, rdata)             # <<<<<<<<<<<<<<
  *         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_ERR(36, 415, __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, 432, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_rhist = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/SNES.pyx":416
+  /* "PETSc/SNES.pyx":433
  *         CHKERR( SNESGetConvergenceHistory(self.snes, &rdata, &idata, &size) )
  *         cdef object rhist = array_r(size, rdata)
  *         cdef object ihist = array_i(size, idata)             # <<<<<<<<<<<<<<
  *         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_ERR(36, 416, __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, 433, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_ihist = __pyx_t_2;
   __pyx_t_2 = 0;
 
-  /* "PETSc/SNES.pyx":417
+  /* "PETSc/SNES.pyx":434
  *         cdef object rhist = array_r(size, rdata)
  *         cdef object ihist = array_i(size, idata)
  *         return (rhist, ihist)             # <<<<<<<<<<<<<<
@@ -166060,7 +175853,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_ERR(36, 417, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(2); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 434, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_v_rhist);
   __Pyx_GIVEREF(__pyx_v_rhist);
@@ -166072,7 +175865,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_102getConvergenceHistory(struct
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":410
+  /* "PETSc/SNES.pyx":427
  *         CHKERR( SNESSetConvergenceHistory(self.snes, rdata, idata, size, flag) )
  * 
  *     def getConvergenceHistory(self):             # <<<<<<<<<<<<<<
@@ -166093,7 +175886,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_102getConvergenceHistory(struct
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":419
+/* "PETSc/SNES.pyx":436
  *         return (rhist, ihist)
  * 
  *     def logConvergenceHistory(self, norm, linear_its=0):             # <<<<<<<<<<<<<<
@@ -166102,9 +175895,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_102getConvergenceHistory(struct
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_105logConvergenceHistory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_104logConvergenceHistory[] = "SNES.logConvergenceHistory(self, norm, linear_its=0)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_105logConvergenceHistory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_111logConvergenceHistory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_110logConvergenceHistory[] = "SNES.logConvergenceHistory(self, norm, linear_its=0)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_111logConvergenceHistory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_norm = 0;
   PyObject *__pyx_v_linear_its = 0;
   PyObject *__pyx_r = 0;
@@ -166119,7 +175912,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_105logConvergenceHistory(PyObje
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -166128,6 +175923,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_105logConvergenceHistory(PyObje
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_norm)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_linear_its);
@@ -166135,11 +175931,12 @@ 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_ERR(36, 419, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "logConvergenceHistory") < 0)) __PYX_ERR(36, 436, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -166150,20 +175947,20 @@ 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_ERR(36, 419, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("logConvergenceHistory", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 436, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.logConvergenceHistory", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_104logConvergenceHistory(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_norm, __pyx_v_linear_its);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_110logConvergenceHistory(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_norm, __pyx_v_linear_its);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_104logConvergenceHistory(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_norm, PyObject *__pyx_v_linear_its) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_110logConvergenceHistory(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_norm, PyObject *__pyx_v_linear_its) {
   PetscReal __pyx_v_rval;
   PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
@@ -166173,36 +175970,36 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_104logConvergenceHistory(struct
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("logConvergenceHistory", 0);
 
-  /* "PETSc/SNES.pyx":420
+  /* "PETSc/SNES.pyx":437
  * 
  *     def logConvergenceHistory(self, norm, linear_its=0):
  *         cdef PetscReal rval = asReal(norm)             # <<<<<<<<<<<<<<
  *         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_ERR(36, 420, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_norm); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(36, 437, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_1;
 
-  /* "PETSc/SNES.pyx":421
+  /* "PETSc/SNES.pyx":438
  *     def logConvergenceHistory(self, norm, linear_its=0):
  *         cdef PetscReal rval = asReal(norm)
  *         cdef PetscInt  ival = asInt(linear_its)             # <<<<<<<<<<<<<<
  *         CHKERR( SNESLogConvergenceHistory(self.snes, rval, ival) )
  * 
  */
-  __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_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_linear_its); if (unlikely(__pyx_t_2 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(36, 438, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_2;
 
-  /* "PETSc/SNES.pyx":422
+  /* "PETSc/SNES.pyx":439
  *         cdef PetscReal rval = asReal(norm)
  *         cdef PetscInt  ival = asInt(linear_its)
  *         CHKERR( SNESLogConvergenceHistory(self.snes, rval, ival) )             # <<<<<<<<<<<<<<
  * 
  *     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_ERR(36, 422, __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 == ((int)-1))) __PYX_ERR(36, 439, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":419
+  /* "PETSc/SNES.pyx":436
  *         return (rhist, ihist)
  * 
  *     def logConvergenceHistory(self, norm, linear_its=0):             # <<<<<<<<<<<<<<
@@ -166222,7 +176019,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_104logConvergenceHistory(struct
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":424
+/* "PETSc/SNES.pyx":441
  *         CHKERR( SNESLogConvergenceHistory(self.snes, rval, ival) )
  * 
  *     def setResetCounters(self, reset=True):             # <<<<<<<<<<<<<<
@@ -166231,9 +176028,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_104logConvergenceHistory(struct
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_107setResetCounters(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_113setResetCounters(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_112setResetCounters[] = "SNES.setResetCounters(self, reset=True)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_113setResetCounters(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_reset = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -166247,6 +176044,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_107setResetCounters(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -166259,11 +176057,12 @@ 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_ERR(36, 424, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setResetCounters") < 0)) __PYX_ERR(36, 441, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -166272,20 +176071,20 @@ 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_ERR(36, 424, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setResetCounters", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 441, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setResetCounters", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_106setResetCounters(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_reset);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_112setResetCounters(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_reset);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_106setResetCounters(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_reset) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_112setResetCounters(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_reset) {
   PetscBool __pyx_v_flag;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -166293,26 +176092,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_106setResetCounters(struct PyPe
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setResetCounters", 0);
 
-  /* "PETSc/SNES.pyx":425
+  /* "PETSc/SNES.pyx":442
  * 
  *     def setResetCounters(self, reset=True):
  *         cdef PetscBool flag = reset             # <<<<<<<<<<<<<<
  *         CHKERR( SNESSetCountersReset(self.snes, flag) )
  * 
  */
-  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_reset)); if (unlikely(PyErr_Occurred())) __PYX_ERR(36, 425, __pyx_L1_error)
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_reset)); if (unlikely(PyErr_Occurred())) __PYX_ERR(36, 442, __pyx_L1_error)
   __pyx_v_flag = __pyx_t_1;
 
-  /* "PETSc/SNES.pyx":426
+  /* "PETSc/SNES.pyx":443
  *     def setResetCounters(self, reset=True):
  *         cdef PetscBool flag = reset
  *         CHKERR( SNESSetCountersReset(self.snes, flag) )             # <<<<<<<<<<<<<<
  * 
  *     # --- monitoring ---
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetCountersReset(__pyx_v_self->snes, __pyx_v_flag)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(36, 443, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":424
+  /* "PETSc/SNES.pyx":441
  *         CHKERR( SNESLogConvergenceHistory(self.snes, rval, ival) )
  * 
  *     def setResetCounters(self, reset=True):             # <<<<<<<<<<<<<<
@@ -166332,7 +176131,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_106setResetCounters(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":430
+/* "PETSc/SNES.pyx":447
  *     # --- monitoring ---
  * 
  *     def setMonitor(self, monitor, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -166341,9 +176140,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_106setResetCounters(struct PyPe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_109setMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_108setMonitor[] = "SNES.setMonitor(self, monitor, args=None, kargs=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_109setMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_115setMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_114setMonitor[] = "SNES.setMonitor(self, monitor, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_115setMonitor(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;
@@ -166360,8 +176159,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_109setMonitor(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -166370,11 +176172,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_109setMonitor(PyObject *__pyx_v
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_monitor)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -166382,12 +176186,14 @@ 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_ERR(36, 430, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMonitor") < 0)) __PYX_ERR(36, 447, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -166399,20 +176205,20 @@ 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_ERR(36, 430, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setMonitor", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 447, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setMonitor", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_108setMonitor(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_monitor, __pyx_v_args, __pyx_v_kargs);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_114setMonitor(((struct PyPetscSNESObject *)__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_4SNES_108setMonitor(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_monitor, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_114setMonitor(struct PyPetscSNESObject *__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;
@@ -166426,7 +176232,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_108setMonitor(struct PyPetscSNE
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/SNES.pyx":431
+  /* "PETSc/SNES.pyx":448
  * 
  *     def setMonitor(self, monitor, args=None, kargs=None):
  *         if monitor is None: return             # <<<<<<<<<<<<<<
@@ -166441,19 +176247,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_108setMonitor(struct PyPetscSNE
     goto __pyx_L0;
   }
 
-  /* "PETSc/SNES.pyx":432
+  /* "PETSc/SNES.pyx":449
  *     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_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_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, 449, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_monitorlist = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "PETSc/SNES.pyx":433
+  /* "PETSc/SNES.pyx":450
  *         if monitor is None: return
  *         cdef object monitorlist = self.get_attr('__monitor__')
  *         if monitorlist is None:             # <<<<<<<<<<<<<<
@@ -166464,39 +176270,39 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_108setMonitor(struct PyPetscSNE
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/SNES.pyx":434
+    /* "PETSc/SNES.pyx":451
  *         cdef object monitorlist = self.get_attr('__monitor__')
  *         if monitorlist is None:
  *             monitorlist = []             # <<<<<<<<<<<<<<
  *             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_ERR(36, 434, __pyx_L1_error)
+    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 451, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_monitorlist, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "PETSc/SNES.pyx":435
+    /* "PETSc/SNES.pyx":452
  *         if monitorlist is None:
  *             monitorlist = []
  *             self.set_attr('__monitor__', monitorlist)             # <<<<<<<<<<<<<<
  *             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), ((char *)"__monitor__"), __pyx_v_monitorlist); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 435, __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, 452, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "PETSc/SNES.pyx":436
+    /* "PETSc/SNES.pyx":453
  *             monitorlist = []
  *             self.set_attr('__monitor__', monitorlist)
  *             CHKERR( SNESMonitorSet(self.snes, SNES_Monitor, NULL, NULL) )             # <<<<<<<<<<<<<<
  *         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_ERR(36, 436, __pyx_L1_error)
+    __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 == ((int)-1))) __PYX_ERR(36, 453, __pyx_L1_error)
 
-    /* "PETSc/SNES.pyx":433
+    /* "PETSc/SNES.pyx":450
  *         if monitor is None: return
  *         cdef object monitorlist = self.get_attr('__monitor__')
  *         if monitorlist is None:             # <<<<<<<<<<<<<<
@@ -166505,7 +176311,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_108setMonitor(struct PyPetscSNE
  */
   }
 
-  /* "PETSc/SNES.pyx":437
+  /* "PETSc/SNES.pyx":454
  *             self.set_attr('__monitor__', monitorlist)
  *             CHKERR( SNESMonitorSet(self.snes, SNES_Monitor, NULL, NULL) )
  *         if args  is None: args  = ()             # <<<<<<<<<<<<<<
@@ -166519,7 +176325,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_108setMonitor(struct PyPetscSNE
     __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
   }
 
-  /* "PETSc/SNES.pyx":438
+  /* "PETSc/SNES.pyx":455
  *             CHKERR( SNESMonitorSet(self.snes, SNES_Monitor, NULL, NULL) )
  *         if args  is None: args  = ()
  *         if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -166529,20 +176335,20 @@ 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_ERR(36, 438, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 455, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
     __pyx_t_3 = 0;
   }
 
-  /* "PETSc/SNES.pyx":439
+  /* "PETSc/SNES.pyx":456
  *         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_ERR(36, 439, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 456, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_monitor);
   __Pyx_GIVEREF(__pyx_v_monitor);
@@ -166556,16 +176362,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_108setMonitor(struct PyPetscSNE
   __pyx_v_context = ((PyObject*)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/SNES.pyx":440
+  /* "PETSc/SNES.pyx":457
  *         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_ERR(36, 440, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_Append(__pyx_v_monitorlist, __pyx_v_context); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(36, 457, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":430
+  /* "PETSc/SNES.pyx":447
  *     # --- monitoring ---
  * 
  *     def setMonitor(self, monitor, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -166590,7 +176396,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_108setMonitor(struct PyPetscSNE
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":442
+/* "PETSc/SNES.pyx":459
  *         monitorlist.append(context)
  * 
  *     def getMonitor(self):             # <<<<<<<<<<<<<<
@@ -166599,29 +176405,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_108setMonitor(struct PyPetscSNE
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_111getMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_110getMonitor[] = "SNES.getMonitor(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_111getMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_117getMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_116getMonitor[] = "SNES.getMonitor(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_117getMonitor(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_4SNES_110getMonitor(((struct PyPetscSNESObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_116getMonitor(((struct PyPetscSNESObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_110getMonitor(struct PyPetscSNESObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_116getMonitor(struct PyPetscSNESObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("getMonitor", 0);
 
-  /* "PETSc/SNES.pyx":443
+  /* "PETSc/SNES.pyx":460
  * 
  *     def getMonitor(self):
  *         return self.get_attr('__monitor__')             # <<<<<<<<<<<<<<
@@ -166629,13 +176435,13 @@ 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), ((char *)"__monitor__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 443, __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, 460, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":442
+  /* "PETSc/SNES.pyx":459
  *         monitorlist.append(context)
  * 
  *     def getMonitor(self):             # <<<<<<<<<<<<<<
@@ -166654,7 +176460,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_110getMonitor(struct PyPetscSNE
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":445
+/* "PETSc/SNES.pyx":462
  *         return self.get_attr('__monitor__')
  * 
  *     def cancelMonitor(self):             # <<<<<<<<<<<<<<
@@ -166663,50 +176469,50 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_110getMonitor(struct PyPetscSNE
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_113cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_112cancelMonitor[] = "SNES.cancelMonitor(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_113cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_119cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_118cancelMonitor[] = "SNES.cancelMonitor(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_119cancelMonitor(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_4SNES_112cancelMonitor(((struct PyPetscSNESObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_118cancelMonitor(((struct PyPetscSNESObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_112cancelMonitor(struct PyPetscSNESObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_118cancelMonitor(struct PyPetscSNESObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("cancelMonitor", 0);
 
-  /* "PETSc/SNES.pyx":446
+  /* "PETSc/SNES.pyx":463
  * 
  *     def cancelMonitor(self):
  *         CHKERR( SNESMonitorCancel(self.snes) )             # <<<<<<<<<<<<<<
  *         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_ERR(36, 446, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESMonitorCancel(__pyx_v_self->snes)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(36, 463, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":447
+  /* "PETSc/SNES.pyx":464
  *     def cancelMonitor(self):
  *         CHKERR( SNESMonitorCancel(self.snes) )
  *         self.set_attr('__monitor__', None)             # <<<<<<<<<<<<<<
  * 
  *     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), ((char *)"__monitor__"), Py_None); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 447, __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, 464, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
 
-  /* "PETSc/SNES.pyx":445
+  /* "PETSc/SNES.pyx":462
  *         return self.get_attr('__monitor__')
  * 
  *     def cancelMonitor(self):             # <<<<<<<<<<<<<<
@@ -166727,7 +176533,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_112cancelMonitor(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":449
+/* "PETSc/SNES.pyx":466
  *         self.set_attr('__monitor__', None)
  * 
  *     def monitor(self, its, rnorm):             # <<<<<<<<<<<<<<
@@ -166736,9 +176542,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_112cancelMonitor(struct PyPetsc
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_115monitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_114monitor[] = "SNES.monitor(self, its, rnorm)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_115monitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_121monitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_120monitor[] = "SNES.monitor(self, its, rnorm)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_121monitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_its = 0;
   PyObject *__pyx_v_rnorm = 0;
   PyObject *__pyx_r = 0;
@@ -166752,7 +176558,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_115monitor(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -166761,14 +176569,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_115monitor(PyObject *__pyx_v_se
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_its)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(36, 449, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("monitor", 1, 2, 2, 1); __PYX_ERR(36, 466, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "monitor") < 0)) __PYX_ERR(36, 449, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "monitor") < 0)) __PYX_ERR(36, 466, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -166781,20 +176590,20 @@ 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_ERR(36, 449, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("monitor", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 466, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.monitor", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_114monitor(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_its, __pyx_v_rnorm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_120monitor(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_its, __pyx_v_rnorm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_114monitor(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_its, PyObject *__pyx_v_rnorm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_120monitor(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_its, PyObject *__pyx_v_rnorm) {
   PetscInt __pyx_v_ival;
   PetscReal __pyx_v_rval;
   PyObject *__pyx_r = NULL;
@@ -166804,36 +176613,36 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_114monitor(struct PyPetscSNESOb
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("monitor", 0);
 
-  /* "PETSc/SNES.pyx":450
+  /* "PETSc/SNES.pyx":467
  * 
  *     def monitor(self, its, rnorm):
  *         cdef PetscInt  ival = asInt(its)             # <<<<<<<<<<<<<<
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(36, 450, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_its); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(36, 467, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/SNES.pyx":451
+  /* "PETSc/SNES.pyx":468
  *     def monitor(self, its, rnorm):
  *         cdef PetscInt  ival = asInt(its)
  *         cdef PetscReal rval = asReal(rnorm)             # <<<<<<<<<<<<<<
  *         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_ERR(36, 451, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_rnorm); if (unlikely(__pyx_t_2 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(36, 468, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_2;
 
-  /* "PETSc/SNES.pyx":452
+  /* "PETSc/SNES.pyx":469
  *         cdef PetscInt  ival = asInt(its)
  *         cdef PetscReal rval = asReal(rnorm)
  *         CHKERR( SNESMonitor(self.snes, ival, rval) )             # <<<<<<<<<<<<<<
  * 
  *     # --- 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_ERR(36, 452, __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 == ((int)-1))) __PYX_ERR(36, 469, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":449
+  /* "PETSc/SNES.pyx":466
  *         self.set_attr('__monitor__', None)
  * 
  *     def monitor(self, its, rnorm):             # <<<<<<<<<<<<<<
@@ -166853,7 +176662,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_114monitor(struct PyPetscSNESOb
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":456
+/* "PETSc/SNES.pyx":473
  *     # --- more tolerances ---
  * 
  *     def setMaxFunctionEvaluations(self, max_funcs):             # <<<<<<<<<<<<<<
@@ -166862,9 +176671,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_114monitor(struct PyPetscSNESOb
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_117setMaxFunctionEvaluations(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_123setMaxFunctionEvaluations(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_122setMaxFunctionEvaluations[] = "SNES.setMaxFunctionEvaluations(self, max_funcs)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_123setMaxFunctionEvaluations(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_max_funcs = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -166877,6 +176686,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_117setMaxFunctionEvaluations(Py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -166887,7 +176697,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_ERR(36, 456, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMaxFunctionEvaluations") < 0)) __PYX_ERR(36, 473, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -166898,20 +176708,20 @@ 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_ERR(36, 456, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setMaxFunctionEvaluations", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 473, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setMaxFunctionEvaluations", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_116setMaxFunctionEvaluations(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_max_funcs);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_122setMaxFunctionEvaluations(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_max_funcs);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_116setMaxFunctionEvaluations(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_max_funcs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_122setMaxFunctionEvaluations(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_max_funcs) {
   PetscReal __pyx_v_r;
   PetscInt __pyx_v_i;
   PetscInt __pyx_v_ival;
@@ -166921,7 +176731,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_116setMaxFunctionEvaluations(st
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setMaxFunctionEvaluations", 0);
 
-  /* "PETSc/SNES.pyx":457
+  /* "PETSc/SNES.pyx":474
  * 
  *     def setMaxFunctionEvaluations(self, max_funcs):
  *         cdef PetscReal r = PETSC_DEFAULT             # <<<<<<<<<<<<<<
@@ -166930,7 +176740,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_116setMaxFunctionEvaluations(st
  */
   __pyx_v_r = PETSC_DEFAULT;
 
-  /* "PETSc/SNES.pyx":458
+  /* "PETSc/SNES.pyx":475
  *     def setMaxFunctionEvaluations(self, max_funcs):
  *         cdef PetscReal r = PETSC_DEFAULT
  *         cdef PetscInt  i = PETSC_DEFAULT             # <<<<<<<<<<<<<<
@@ -166939,26 +176749,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_116setMaxFunctionEvaluations(st
  */
   __pyx_v_i = PETSC_DEFAULT;
 
-  /* "PETSc/SNES.pyx":459
+  /* "PETSc/SNES.pyx":476
  *         cdef PetscReal r = PETSC_DEFAULT
  *         cdef PetscInt  i = PETSC_DEFAULT
  *         cdef PetscInt ival = asInt(max_funcs)             # <<<<<<<<<<<<<<
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(36, 459, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_max_funcs); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(36, 476, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/SNES.pyx":460
+  /* "PETSc/SNES.pyx":477
  *         cdef PetscInt  i = PETSC_DEFAULT
  *         cdef PetscInt ival = asInt(max_funcs)
  *         CHKERR( SNESSetTolerances(self.snes, r, r, r, i, ival) )             # <<<<<<<<<<<<<<
  * 
  *     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_ERR(36, 460, __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 == ((int)-1))) __PYX_ERR(36, 477, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":456
+  /* "PETSc/SNES.pyx":473
  *     # --- more tolerances ---
  * 
  *     def setMaxFunctionEvaluations(self, max_funcs):             # <<<<<<<<<<<<<<
@@ -166978,7 +176788,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_116setMaxFunctionEvaluations(st
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":462
+/* "PETSc/SNES.pyx":479
  *         CHKERR( SNESSetTolerances(self.snes, r, r, r, i, ival) )
  * 
  *     def getMaxFunctionEvaluations(self):             # <<<<<<<<<<<<<<
@@ -166987,23 +176797,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_116setMaxFunctionEvaluations(st
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_119getMaxFunctionEvaluations(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_118getMaxFunctionEvaluations[] = "SNES.getMaxFunctionEvaluations(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_119getMaxFunctionEvaluations(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_125getMaxFunctionEvaluations(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_124getMaxFunctionEvaluations[] = "SNES.getMaxFunctionEvaluations(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_125getMaxFunctionEvaluations(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getMaxFunctionEvaluations (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getMaxFunctionEvaluations", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getMaxFunctionEvaluations", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_118getMaxFunctionEvaluations(((struct PyPetscSNESObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_124getMaxFunctionEvaluations(((struct PyPetscSNESObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_118getMaxFunctionEvaluations(struct PyPetscSNESObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_124getMaxFunctionEvaluations(struct PyPetscSNESObject *__pyx_v_self) {
   PetscReal *__pyx_v_r;
   PetscInt *__pyx_v_i;
   PetscInt __pyx_v_ival;
@@ -167013,7 +176823,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_118getMaxFunctionEvaluations(st
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getMaxFunctionEvaluations", 0);
 
-  /* "PETSc/SNES.pyx":463
+  /* "PETSc/SNES.pyx":480
  * 
  *     def getMaxFunctionEvaluations(self):
  *         cdef PetscReal *r = NULL             # <<<<<<<<<<<<<<
@@ -167022,7 +176832,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_118getMaxFunctionEvaluations(st
  */
   __pyx_v_r = NULL;
 
-  /* "PETSc/SNES.pyx":464
+  /* "PETSc/SNES.pyx":481
  *     def getMaxFunctionEvaluations(self):
  *         cdef PetscReal *r = NULL
  *         cdef PetscInt  *i = NULL             # <<<<<<<<<<<<<<
@@ -167031,7 +176841,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_118getMaxFunctionEvaluations(st
  */
   __pyx_v_i = NULL;
 
-  /* "PETSc/SNES.pyx":465
+  /* "PETSc/SNES.pyx":482
  *         cdef PetscReal *r = NULL
  *         cdef PetscInt  *i = NULL
  *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
@@ -167040,16 +176850,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_118getMaxFunctionEvaluations(st
  */
   __pyx_v_ival = 0;
 
-  /* "PETSc/SNES.pyx":466
+  /* "PETSc/SNES.pyx":483
  *         cdef PetscInt  *i = NULL
  *         cdef PetscInt ival = 0
  *         CHKERR( SNESGetTolerances(self.snes, r, r, r, i, &ival) )             # <<<<<<<<<<<<<<
  *         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_ERR(36, 466, __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 == ((int)-1))) __PYX_ERR(36, 483, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":467
+  /* "PETSc/SNES.pyx":484
  *         cdef PetscInt ival = 0
  *         CHKERR( SNESGetTolerances(self.snes, r, r, r, i, &ival) )
  *         return toInt(ival)             # <<<<<<<<<<<<<<
@@ -167057,13 +176867,13 @@ 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_ERR(36, 467, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 484, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":462
+  /* "PETSc/SNES.pyx":479
  *         CHKERR( SNESSetTolerances(self.snes, r, r, r, i, ival) )
  * 
  *     def getMaxFunctionEvaluations(self):             # <<<<<<<<<<<<<<
@@ -167082,7 +176892,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_118getMaxFunctionEvaluations(st
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":469
+/* "PETSc/SNES.pyx":486
  *         return toInt(ival)
  * 
  *     def getFunctionEvaluations(self):             # <<<<<<<<<<<<<<
@@ -167091,23 +176901,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_118getMaxFunctionEvaluations(st
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_121getFunctionEvaluations(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_120getFunctionEvaluations[] = "SNES.getFunctionEvaluations(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_121getFunctionEvaluations(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_127getFunctionEvaluations(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_126getFunctionEvaluations[] = "SNES.getFunctionEvaluations(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_127getFunctionEvaluations(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getFunctionEvaluations (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getFunctionEvaluations", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getFunctionEvaluations", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_120getFunctionEvaluations(((struct PyPetscSNESObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_126getFunctionEvaluations(((struct PyPetscSNESObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_120getFunctionEvaluations(struct PyPetscSNESObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_126getFunctionEvaluations(struct PyPetscSNESObject *__pyx_v_self) {
   PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -167115,7 +176925,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_120getFunctionEvaluations(struc
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getFunctionEvaluations", 0);
 
-  /* "PETSc/SNES.pyx":470
+  /* "PETSc/SNES.pyx":487
  * 
  *     def getFunctionEvaluations(self):
  *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
@@ -167124,16 +176934,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_120getFunctionEvaluations(struc
  */
   __pyx_v_ival = 0;
 
-  /* "PETSc/SNES.pyx":471
+  /* "PETSc/SNES.pyx":488
  *     def getFunctionEvaluations(self):
  *         cdef PetscInt ival = 0
  *         CHKERR( SNESGetNumberFunctionEvals(self.snes, &ival) )             # <<<<<<<<<<<<<<
  *         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_ERR(36, 471, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetNumberFunctionEvals(__pyx_v_self->snes, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(36, 488, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":472
+  /* "PETSc/SNES.pyx":489
  *         cdef PetscInt ival = 0
  *         CHKERR( SNESGetNumberFunctionEvals(self.snes, &ival) )
  *         return toInt(ival)             # <<<<<<<<<<<<<<
@@ -167141,13 +176951,13 @@ 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_ERR(36, 472, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 489, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":469
+  /* "PETSc/SNES.pyx":486
  *         return toInt(ival)
  * 
  *     def getFunctionEvaluations(self):             # <<<<<<<<<<<<<<
@@ -167166,7 +176976,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_120getFunctionEvaluations(struc
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":474
+/* "PETSc/SNES.pyx":491
  *         return toInt(ival)
  * 
  *     def setMaxStepFailures(self, max_fails):             # <<<<<<<<<<<<<<
@@ -167175,9 +176985,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_120getFunctionEvaluations(struc
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_123setMaxStepFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_129setMaxStepFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_128setMaxStepFailures[] = "SNES.setMaxStepFailures(self, max_fails)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_129setMaxStepFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_max_fails = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -167190,6 +177000,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_123setMaxStepFailures(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -167200,7 +177011,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_ERR(36, 474, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMaxStepFailures") < 0)) __PYX_ERR(36, 491, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -167211,20 +177022,20 @@ 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_ERR(36, 474, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setMaxStepFailures", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 491, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setMaxStepFailures", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_122setMaxStepFailures(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_max_fails);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_128setMaxStepFailures(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_max_fails);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_122setMaxStepFailures(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_max_fails) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_128setMaxStepFailures(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_max_fails) {
   PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -167232,26 +177043,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_122setMaxStepFailures(struct Py
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setMaxStepFailures", 0);
 
-  /* "PETSc/SNES.pyx":475
+  /* "PETSc/SNES.pyx":492
  * 
  *     def setMaxStepFailures(self, max_fails):
  *         cdef PetscInt ival = asInt(max_fails)             # <<<<<<<<<<<<<<
  *         CHKERR( SNESSetMaxNonlinearStepFailures(self.snes, ival) )
  * 
  */
-  __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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_max_fails); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(36, 492, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/SNES.pyx":476
+  /* "PETSc/SNES.pyx":493
  *     def setMaxStepFailures(self, max_fails):
  *         cdef PetscInt ival = asInt(max_fails)
  *         CHKERR( SNESSetMaxNonlinearStepFailures(self.snes, ival) )             # <<<<<<<<<<<<<<
  * 
  *     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_ERR(36, 476, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetMaxNonlinearStepFailures(__pyx_v_self->snes, __pyx_v_ival)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(36, 493, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":474
+  /* "PETSc/SNES.pyx":491
  *         return toInt(ival)
  * 
  *     def setMaxStepFailures(self, max_fails):             # <<<<<<<<<<<<<<
@@ -167271,7 +177082,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_122setMaxStepFailures(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":478
+/* "PETSc/SNES.pyx":495
  *         CHKERR( SNESSetMaxNonlinearStepFailures(self.snes, ival) )
  * 
  *     def getMaxStepFailures(self):             # <<<<<<<<<<<<<<
@@ -167280,23 +177091,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_122setMaxStepFailures(struct Py
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_125getMaxStepFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_124getMaxStepFailures[] = "SNES.getMaxStepFailures(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_125getMaxStepFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_131getMaxStepFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_130getMaxStepFailures[] = "SNES.getMaxStepFailures(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_131getMaxStepFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getMaxStepFailures (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getMaxStepFailures", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getMaxStepFailures", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_124getMaxStepFailures(((struct PyPetscSNESObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_130getMaxStepFailures(((struct PyPetscSNESObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_124getMaxStepFailures(struct PyPetscSNESObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_130getMaxStepFailures(struct PyPetscSNESObject *__pyx_v_self) {
   PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -167304,7 +177115,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_124getMaxStepFailures(struct Py
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getMaxStepFailures", 0);
 
-  /* "PETSc/SNES.pyx":479
+  /* "PETSc/SNES.pyx":496
  * 
  *     def getMaxStepFailures(self):
  *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
@@ -167313,16 +177124,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_124getMaxStepFailures(struct Py
  */
   __pyx_v_ival = 0;
 
-  /* "PETSc/SNES.pyx":480
+  /* "PETSc/SNES.pyx":497
  *     def getMaxStepFailures(self):
  *         cdef PetscInt ival = 0
  *         CHKERR( SNESGetMaxNonlinearStepFailures(self.snes, &ival) )             # <<<<<<<<<<<<<<
  *         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_ERR(36, 480, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetMaxNonlinearStepFailures(__pyx_v_self->snes, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(36, 497, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":481
+  /* "PETSc/SNES.pyx":498
  *         cdef PetscInt ival = 0
  *         CHKERR( SNESGetMaxNonlinearStepFailures(self.snes, &ival) )
  *         return toInt(ival)             # <<<<<<<<<<<<<<
@@ -167330,13 +177141,13 @@ 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_ERR(36, 481, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 498, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":478
+  /* "PETSc/SNES.pyx":495
  *         CHKERR( SNESSetMaxNonlinearStepFailures(self.snes, ival) )
  * 
  *     def getMaxStepFailures(self):             # <<<<<<<<<<<<<<
@@ -167355,7 +177166,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_124getMaxStepFailures(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":483
+/* "PETSc/SNES.pyx":500
  *         return toInt(ival)
  * 
  *     def getStepFailures(self):             # <<<<<<<<<<<<<<
@@ -167364,23 +177175,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_124getMaxStepFailures(struct Py
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_127getStepFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_126getStepFailures[] = "SNES.getStepFailures(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_127getStepFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_133getStepFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_132getStepFailures[] = "SNES.getStepFailures(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_133getStepFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getStepFailures (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getStepFailures", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getStepFailures", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_126getStepFailures(((struct PyPetscSNESObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_132getStepFailures(((struct PyPetscSNESObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_126getStepFailures(struct PyPetscSNESObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_132getStepFailures(struct PyPetscSNESObject *__pyx_v_self) {
   PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -167388,7 +177199,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_126getStepFailures(struct PyPet
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getStepFailures", 0);
 
-  /* "PETSc/SNES.pyx":484
+  /* "PETSc/SNES.pyx":501
  * 
  *     def getStepFailures(self):
  *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
@@ -167397,16 +177208,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_126getStepFailures(struct PyPet
  */
   __pyx_v_ival = 0;
 
-  /* "PETSc/SNES.pyx":485
+  /* "PETSc/SNES.pyx":502
  *     def getStepFailures(self):
  *         cdef PetscInt ival = 0
  *         CHKERR( SNESGetNonlinearStepFailures(self.snes, &ival) )             # <<<<<<<<<<<<<<
  *         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_ERR(36, 485, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetNonlinearStepFailures(__pyx_v_self->snes, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(36, 502, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":486
+  /* "PETSc/SNES.pyx":503
  *         cdef PetscInt ival = 0
  *         CHKERR( SNESGetNonlinearStepFailures(self.snes, &ival) )
  *         return toInt(ival)             # <<<<<<<<<<<<<<
@@ -167414,13 +177225,13 @@ 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_ERR(36, 486, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 503, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":483
+  /* "PETSc/SNES.pyx":500
  *         return toInt(ival)
  * 
  *     def getStepFailures(self):             # <<<<<<<<<<<<<<
@@ -167439,7 +177250,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_126getStepFailures(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":488
+/* "PETSc/SNES.pyx":505
  *         return toInt(ival)
  * 
  *     def setMaxKSPFailures(self, max_fails):             # <<<<<<<<<<<<<<
@@ -167448,9 +177259,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_126getStepFailures(struct PyPet
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_129setMaxKSPFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_135setMaxKSPFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_134setMaxKSPFailures[] = "SNES.setMaxKSPFailures(self, max_fails)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_135setMaxKSPFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_max_fails = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -167463,6 +177274,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_129setMaxKSPFailures(PyObject *
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -167473,7 +177285,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_ERR(36, 488, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMaxKSPFailures") < 0)) __PYX_ERR(36, 505, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -167484,20 +177296,20 @@ 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_ERR(36, 488, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setMaxKSPFailures", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 505, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setMaxKSPFailures", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_128setMaxKSPFailures(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_max_fails);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_134setMaxKSPFailures(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_max_fails);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_128setMaxKSPFailures(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_max_fails) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_134setMaxKSPFailures(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_max_fails) {
   PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -167505,26 +177317,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_128setMaxKSPFailures(struct PyP
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setMaxKSPFailures", 0);
 
-  /* "PETSc/SNES.pyx":489
+  /* "PETSc/SNES.pyx":506
  * 
  *     def setMaxKSPFailures(self, max_fails):
  *         cdef PetscInt ival = asInt(max_fails)             # <<<<<<<<<<<<<<
  *         CHKERR( SNESSetMaxLinearSolveFailures(self.snes, ival) )
  * 
  */
-  __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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_max_fails); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(36, 506, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/SNES.pyx":490
+  /* "PETSc/SNES.pyx":507
  *     def setMaxKSPFailures(self, max_fails):
  *         cdef PetscInt ival = asInt(max_fails)
  *         CHKERR( SNESSetMaxLinearSolveFailures(self.snes, ival) )             # <<<<<<<<<<<<<<
  * 
  *     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_ERR(36, 490, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetMaxLinearSolveFailures(__pyx_v_self->snes, __pyx_v_ival)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(36, 507, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":488
+  /* "PETSc/SNES.pyx":505
  *         return toInt(ival)
  * 
  *     def setMaxKSPFailures(self, max_fails):             # <<<<<<<<<<<<<<
@@ -167544,7 +177356,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_128setMaxKSPFailures(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":492
+/* "PETSc/SNES.pyx":509
  *         CHKERR( SNESSetMaxLinearSolveFailures(self.snes, ival) )
  * 
  *     def getMaxKSPFailures(self):             # <<<<<<<<<<<<<<
@@ -167553,23 +177365,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_128setMaxKSPFailures(struct PyP
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_131getMaxKSPFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_130getMaxKSPFailures[] = "SNES.getMaxKSPFailures(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_131getMaxKSPFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_137getMaxKSPFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_136getMaxKSPFailures[] = "SNES.getMaxKSPFailures(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_137getMaxKSPFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getMaxKSPFailures (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getMaxKSPFailures", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getMaxKSPFailures", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_130getMaxKSPFailures(((struct PyPetscSNESObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_136getMaxKSPFailures(((struct PyPetscSNESObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_130getMaxKSPFailures(struct PyPetscSNESObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_136getMaxKSPFailures(struct PyPetscSNESObject *__pyx_v_self) {
   PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -167577,7 +177389,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_130getMaxKSPFailures(struct PyP
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getMaxKSPFailures", 0);
 
-  /* "PETSc/SNES.pyx":493
+  /* "PETSc/SNES.pyx":510
  * 
  *     def getMaxKSPFailures(self):
  *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
@@ -167586,16 +177398,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_130getMaxKSPFailures(struct PyP
  */
   __pyx_v_ival = 0;
 
-  /* "PETSc/SNES.pyx":494
+  /* "PETSc/SNES.pyx":511
  *     def getMaxKSPFailures(self):
  *         cdef PetscInt ival = 0
  *         CHKERR( SNESGetMaxLinearSolveFailures(self.snes, &ival) )             # <<<<<<<<<<<<<<
  *         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_ERR(36, 494, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetMaxLinearSolveFailures(__pyx_v_self->snes, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(36, 511, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":495
+  /* "PETSc/SNES.pyx":512
  *         cdef PetscInt ival = 0
  *         CHKERR( SNESGetMaxLinearSolveFailures(self.snes, &ival) )
  *         return toInt(ival)             # <<<<<<<<<<<<<<
@@ -167603,13 +177415,13 @@ 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_ERR(36, 495, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 512, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":492
+  /* "PETSc/SNES.pyx":509
  *         CHKERR( SNESSetMaxLinearSolveFailures(self.snes, ival) )
  * 
  *     def getMaxKSPFailures(self):             # <<<<<<<<<<<<<<
@@ -167628,7 +177440,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_130getMaxKSPFailures(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":497
+/* "PETSc/SNES.pyx":514
  *         return toInt(ival)
  * 
  *     def getKSPFailures(self):             # <<<<<<<<<<<<<<
@@ -167637,23 +177449,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_130getMaxKSPFailures(struct PyP
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_133getKSPFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_132getKSPFailures[] = "SNES.getKSPFailures(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_133getKSPFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_139getKSPFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_138getKSPFailures[] = "SNES.getKSPFailures(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_139getKSPFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getKSPFailures (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getKSPFailures", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getKSPFailures", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_132getKSPFailures(((struct PyPetscSNESObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_138getKSPFailures(((struct PyPetscSNESObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_132getKSPFailures(struct PyPetscSNESObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_138getKSPFailures(struct PyPetscSNESObject *__pyx_v_self) {
   PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -167661,7 +177473,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_132getKSPFailures(struct PyPets
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getKSPFailures", 0);
 
-  /* "PETSc/SNES.pyx":498
+  /* "PETSc/SNES.pyx":515
  * 
  *     def getKSPFailures(self):
  *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
@@ -167670,16 +177482,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_132getKSPFailures(struct PyPets
  */
   __pyx_v_ival = 0;
 
-  /* "PETSc/SNES.pyx":499
+  /* "PETSc/SNES.pyx":516
  *     def getKSPFailures(self):
  *         cdef PetscInt ival = 0
  *         CHKERR( SNESGetLinearSolveFailures(self.snes, &ival) )             # <<<<<<<<<<<<<<
  *         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_ERR(36, 499, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetLinearSolveFailures(__pyx_v_self->snes, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(36, 516, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":500
+  /* "PETSc/SNES.pyx":517
  *         cdef PetscInt ival = 0
  *         CHKERR( SNESGetLinearSolveFailures(self.snes, &ival) )
  *         return toInt(ival)             # <<<<<<<<<<<<<<
@@ -167687,13 +177499,13 @@ 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_ERR(36, 500, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 517, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":497
+  /* "PETSc/SNES.pyx":514
  *         return toInt(ival)
  * 
  *     def getKSPFailures(self):             # <<<<<<<<<<<<<<
@@ -167712,7 +177524,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_132getKSPFailures(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":511
+/* "PETSc/SNES.pyx":528
  *     # --- solving ---
  * 
  *     def setUp(self):             # <<<<<<<<<<<<<<
@@ -167721,38 +177533,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_132getKSPFailures(struct PyPets
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_135setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_134setUp[] = "SNES.setUp(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_135setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_141setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_140setUp[] = "SNES.setUp(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_141setUp(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_4SNES_134setUp(((struct PyPetscSNESObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_140setUp(((struct PyPetscSNESObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_134setUp(struct PyPetscSNESObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_140setUp(struct PyPetscSNESObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setUp", 0);
 
-  /* "PETSc/SNES.pyx":512
+  /* "PETSc/SNES.pyx":529
  * 
  *     def setUp(self):
  *         CHKERR( SNESSetUp(self.snes) )             # <<<<<<<<<<<<<<
  * 
  *     def reset(self):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetUp(__pyx_v_self->snes)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(36, 529, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":511
+  /* "PETSc/SNES.pyx":528
  *     # --- solving ---
  * 
  *     def setUp(self):             # <<<<<<<<<<<<<<
@@ -167772,7 +177584,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_134setUp(struct PyPetscSNESObje
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":514
+/* "PETSc/SNES.pyx":531
  *         CHKERR( SNESSetUp(self.snes) )
  * 
  *     def reset(self):             # <<<<<<<<<<<<<<
@@ -167781,38 +177593,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_134setUp(struct PyPetscSNESObje
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_137reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_136reset[] = "SNES.reset(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_137reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_143reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_142reset[] = "SNES.reset(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_143reset(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_4SNES_136reset(((struct PyPetscSNESObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_142reset(((struct PyPetscSNESObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_136reset(struct PyPetscSNESObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_142reset(struct PyPetscSNESObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("reset", 0);
 
-  /* "PETSc/SNES.pyx":515
+  /* "PETSc/SNES.pyx":532
  * 
  *     def reset(self):
  *         CHKERR( SNESReset(self.snes) )             # <<<<<<<<<<<<<<
  * 
- *     def solve(self, Vec b, Vec x not None):
+ *     def solve(self, Vec b or None, Vec x):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESReset(__pyx_v_self->snes)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(36, 532, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":514
+  /* "PETSc/SNES.pyx":531
  *         CHKERR( SNESSetUp(self.snes) )
  * 
  *     def reset(self):             # <<<<<<<<<<<<<<
@@ -167832,18 +177644,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_136reset(struct PyPetscSNESObje
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":517
+/* "PETSc/SNES.pyx":534
  *         CHKERR( SNESReset(self.snes) )
  * 
- *     def solve(self, Vec b, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def solve(self, Vec b or None, Vec x):             # <<<<<<<<<<<<<<
  *         cdef PetscVec rhs = NULL
  *         if b is not None: rhs = b.vec
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_139solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_138solve[] = "SNES.solve(self, Vec b, Vec x)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_139solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_145solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_144solve[] = "SNES.solve(self, Vec b, Vec x)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_145solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_b = 0;
   struct PyPetscVecObject *__pyx_v_x = 0;
   PyObject *__pyx_r = 0;
@@ -167857,7 +177669,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_139solve(PyObject *__pyx_v_self
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -167866,14 +177680,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_139solve(PyObject *__pyx_v_self
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_b)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("solve", 1, 2, 2, 1); __PYX_ERR(36, 517, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("solve", 1, 2, 2, 1); __PYX_ERR(36, 534, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solve") < 0)) __PYX_ERR(36, 517, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "solve") < 0)) __PYX_ERR(36, 534, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -167886,15 +177701,15 @@ 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_ERR(36, 517, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("solve", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 534, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_b), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "b", 0))) __PYX_ERR(36, 534, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(36, 534, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_144solve(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_b, __pyx_v_x);
 
   /* function exit code */
   goto __pyx_L0;
@@ -167905,7 +177720,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_139solve(PyObject *__pyx_v_self
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_138solve(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_144solve(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_b, struct PyPetscVecObject *__pyx_v_x) {
   Vec __pyx_v_rhs;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -167915,17 +177730,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_138solve(struct PyPetscSNESObje
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("solve", 0);
 
-  /* "PETSc/SNES.pyx":518
+  /* "PETSc/SNES.pyx":535
  * 
- *     def solve(self, Vec b, Vec x not None):
+ *     def solve(self, Vec b or None, Vec x):
  *         cdef PetscVec rhs = NULL             # <<<<<<<<<<<<<<
  *         if b is not None: rhs = b.vec
  *         CHKERR( SNESSolve(self.snes, rhs, x.vec) )
  */
   __pyx_v_rhs = NULL;
 
-  /* "PETSc/SNES.pyx":519
- *     def solve(self, Vec b, Vec x not None):
+  /* "PETSc/SNES.pyx":536
+ *     def solve(self, Vec b or None, Vec x):
  *         cdef PetscVec rhs = NULL
  *         if b is not None: rhs = b.vec             # <<<<<<<<<<<<<<
  *         CHKERR( SNESSolve(self.snes, rhs, x.vec) )
@@ -167938,19 +177753,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_138solve(struct PyPetscSNESObje
     __pyx_v_rhs = __pyx_t_3;
   }
 
-  /* "PETSc/SNES.pyx":520
+  /* "PETSc/SNES.pyx":537
  *         cdef PetscVec rhs = NULL
  *         if b is not None: rhs = b.vec
  *         CHKERR( SNESSolve(self.snes, rhs, x.vec) )             # <<<<<<<<<<<<<<
  * 
  *     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_ERR(36, 520, __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 == ((int)-1))) __PYX_ERR(36, 537, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":517
+  /* "PETSc/SNES.pyx":534
  *         CHKERR( SNESReset(self.snes) )
  * 
- *     def solve(self, Vec b, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def solve(self, Vec b or None, Vec x):             # <<<<<<<<<<<<<<
  *         cdef PetscVec rhs = NULL
  *         if b is not None: rhs = b.vec
  */
@@ -167967,7 +177782,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_138solve(struct PyPetscSNESObje
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":522
+/* "PETSc/SNES.pyx":539
  *         CHKERR( SNESSolve(self.snes, rhs, x.vec) )
  * 
  *     def setConvergedReason(self, reason):             # <<<<<<<<<<<<<<
@@ -167976,9 +177791,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_138solve(struct PyPetscSNESObje
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_141setConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_147setConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_146setConvergedReason[] = "SNES.setConvergedReason(self, reason)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_147setConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_reason = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -167991,6 +177806,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_141setConvergedReason(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -168001,7 +177817,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_ERR(36, 522, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConvergedReason") < 0)) __PYX_ERR(36, 539, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -168012,20 +177828,20 @@ 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_ERR(36, 522, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setConvergedReason", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 539, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setConvergedReason", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_140setConvergedReason(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_reason);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_146setConvergedReason(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_reason);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_140setConvergedReason(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_reason) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_146setConvergedReason(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_reason) {
   SNESConvergedReason __pyx_v_eval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -168033,26 +177849,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_140setConvergedReason(struct Py
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setConvergedReason", 0);
 
-  /* "PETSc/SNES.pyx":523
+  /* "PETSc/SNES.pyx":540
  * 
  *     def setConvergedReason(self, reason):
  *         cdef PetscSNESConvergedReason eval = reason             # <<<<<<<<<<<<<<
  *         CHKERR( SNESSetConvergedReason(self.snes, eval) )
  * 
  */
-  __pyx_t_1 = ((SNESConvergedReason)__Pyx_PyInt_As_SNESConvergedReason(__pyx_v_reason)); if (unlikely(PyErr_Occurred())) __PYX_ERR(36, 523, __pyx_L1_error)
+  __pyx_t_1 = ((SNESConvergedReason)__Pyx_PyInt_As_SNESConvergedReason(__pyx_v_reason)); if (unlikely(PyErr_Occurred())) __PYX_ERR(36, 540, __pyx_L1_error)
   __pyx_v_eval = __pyx_t_1;
 
-  /* "PETSc/SNES.pyx":524
+  /* "PETSc/SNES.pyx":541
  *     def setConvergedReason(self, reason):
  *         cdef PetscSNESConvergedReason eval = reason
  *         CHKERR( SNESSetConvergedReason(self.snes, eval) )             # <<<<<<<<<<<<<<
  * 
  *     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_ERR(36, 524, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetConvergedReason(__pyx_v_self->snes, __pyx_v_eval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(36, 541, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":522
+  /* "PETSc/SNES.pyx":539
  *         CHKERR( SNESSolve(self.snes, rhs, x.vec) )
  * 
  *     def setConvergedReason(self, reason):             # <<<<<<<<<<<<<<
@@ -168072,7 +177888,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_140setConvergedReason(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":526
+/* "PETSc/SNES.pyx":543
  *         CHKERR( SNESSetConvergedReason(self.snes, eval) )
  * 
  *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
@@ -168081,23 +177897,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_140setConvergedReason(struct Py
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_143getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_142getConvergedReason[] = "SNES.getConvergedReason(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_143getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_149getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_148getConvergedReason[] = "SNES.getConvergedReason(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_149getConvergedReason(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_4SNES_142getConvergedReason(((struct PyPetscSNESObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_148getConvergedReason(((struct PyPetscSNESObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_142getConvergedReason(struct PyPetscSNESObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_148getConvergedReason(struct PyPetscSNESObject *__pyx_v_self) {
   SNESConvergedReason __pyx_v_reason;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -168105,7 +177921,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_142getConvergedReason(struct Py
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getConvergedReason", 0);
 
-  /* "PETSc/SNES.pyx":527
+  /* "PETSc/SNES.pyx":544
  * 
  *     def getConvergedReason(self):
  *         cdef PetscSNESConvergedReason reason = SNES_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
@@ -168114,16 +177930,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_142getConvergedReason(struct Py
  */
   __pyx_v_reason = SNES_CONVERGED_ITERATING;
 
-  /* "PETSc/SNES.pyx":528
+  /* "PETSc/SNES.pyx":545
  *     def getConvergedReason(self):
  *         cdef PetscSNESConvergedReason reason = SNES_CONVERGED_ITERATING
  *         CHKERR( SNESGetConvergedReason(self.snes, &reason) )             # <<<<<<<<<<<<<<
  *         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_ERR(36, 528, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetConvergedReason(__pyx_v_self->snes, (&__pyx_v_reason))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(36, 545, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":529
+  /* "PETSc/SNES.pyx":546
  *         cdef PetscSNESConvergedReason reason = SNES_CONVERGED_ITERATING
  *         CHKERR( SNESGetConvergedReason(self.snes, &reason) )
  *         return reason             # <<<<<<<<<<<<<<
@@ -168131,13 +177947,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_142getConvergedReason(struct Py
  *     def setIterationNumber(self, its):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_SNESConvergedReason(__pyx_v_reason); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 529, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_SNESConvergedReason(__pyx_v_reason); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 546, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":526
+  /* "PETSc/SNES.pyx":543
  *         CHKERR( SNESSetConvergedReason(self.snes, eval) )
  * 
  *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
@@ -168156,7 +177972,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_142getConvergedReason(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":531
+/* "PETSc/SNES.pyx":548
  *         return reason
  * 
  *     def setIterationNumber(self, its):             # <<<<<<<<<<<<<<
@@ -168165,9 +177981,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_142getConvergedReason(struct Py
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_145setIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_151setIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_150setIterationNumber[] = "SNES.setIterationNumber(self, its)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_151setIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_its = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -168180,6 +177996,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_145setIterationNumber(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -168190,7 +178007,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_ERR(36, 531, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setIterationNumber") < 0)) __PYX_ERR(36, 548, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -168201,20 +178018,20 @@ 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_ERR(36, 531, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setIterationNumber", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 548, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setIterationNumber", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_144setIterationNumber(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_its);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_150setIterationNumber(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_its);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_144setIterationNumber(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_its) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_150setIterationNumber(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_its) {
   PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -168222,26 +178039,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_144setIterationNumber(struct Py
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setIterationNumber", 0);
 
-  /* "PETSc/SNES.pyx":532
+  /* "PETSc/SNES.pyx":549
  * 
  *     def setIterationNumber(self, its):
  *         cdef PetscInt ival = asInt(its)             # <<<<<<<<<<<<<<
  *         CHKERR( SNESSetIterationNumber(self.snes, ival) )
  * 
  */
-  __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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_its); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(36, 549, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/SNES.pyx":533
+  /* "PETSc/SNES.pyx":550
  *     def setIterationNumber(self, its):
  *         cdef PetscInt ival = asInt(its)
  *         CHKERR( SNESSetIterationNumber(self.snes, ival) )             # <<<<<<<<<<<<<<
  * 
  *     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_ERR(36, 533, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetIterationNumber(__pyx_v_self->snes, __pyx_v_ival)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(36, 550, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":531
+  /* "PETSc/SNES.pyx":548
  *         return reason
  * 
  *     def setIterationNumber(self, its):             # <<<<<<<<<<<<<<
@@ -168261,7 +178078,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_144setIterationNumber(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":535
+/* "PETSc/SNES.pyx":552
  *         CHKERR( SNESSetIterationNumber(self.snes, ival) )
  * 
  *     def getIterationNumber(self):             # <<<<<<<<<<<<<<
@@ -168270,23 +178087,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_144setIterationNumber(struct Py
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_147getIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_146getIterationNumber[] = "SNES.getIterationNumber(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_147getIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_153getIterationNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_152getIterationNumber[] = "SNES.getIterationNumber(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_153getIterationNumber(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_4SNES_146getIterationNumber(((struct PyPetscSNESObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_152getIterationNumber(((struct PyPetscSNESObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_146getIterationNumber(struct PyPetscSNESObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_152getIterationNumber(struct PyPetscSNESObject *__pyx_v_self) {
   PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -168294,7 +178111,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_146getIterationNumber(struct Py
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getIterationNumber", 0);
 
-  /* "PETSc/SNES.pyx":536
+  /* "PETSc/SNES.pyx":553
  * 
  *     def getIterationNumber(self):
  *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
@@ -168303,30 +178120,30 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_146getIterationNumber(struct Py
  */
   __pyx_v_ival = 0;
 
-  /* "PETSc/SNES.pyx":537
+  /* "PETSc/SNES.pyx":554
  *     def getIterationNumber(self):
  *         cdef PetscInt ival = 0
  *         CHKERR( SNESGetIterationNumber(self.snes, &ival) )             # <<<<<<<<<<<<<<
  *         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_ERR(36, 537, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetIterationNumber(__pyx_v_self->snes, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(36, 554, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":538
+  /* "PETSc/SNES.pyx":555
  *         cdef PetscInt ival = 0
  *         CHKERR( SNESGetIterationNumber(self.snes, &ival) )
  *         return toInt(ival)             # <<<<<<<<<<<<<<
  * 
- *     def getLinearSolveIterations(self):
+ *     def setFunctionNorm(self, norm):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 538, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 555, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":535
+  /* "PETSc/SNES.pyx":552
  *         CHKERR( SNESSetIterationNumber(self.snes, ival) )
  * 
  *     def getIterationNumber(self):             # <<<<<<<<<<<<<<
@@ -168345,32 +178162,222 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_146getIterationNumber(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":540
+/* "PETSc/SNES.pyx":557
  *         return toInt(ival)
  * 
+ *     def setFunctionNorm(self, norm):             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = asReal(norm)
+ *         CHKERR( SNESSetFunctionNorm(self.snes, rval) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_155setFunctionNorm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_154setFunctionNorm[] = "SNES.setFunctionNorm(self, norm)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_155setFunctionNorm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_norm = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setFunctionNorm (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_norm,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);
+        CYTHON_FALLTHROUGH;
+        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_norm)) != 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, "setFunctionNorm") < 0)) __PYX_ERR(36, 557, __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_norm = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setFunctionNorm", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 557, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.SNES.setFunctionNorm", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_154setFunctionNorm(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_norm);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_154setFunctionNorm(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_norm) {
+  PetscReal __pyx_v_rval;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscReal __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setFunctionNorm", 0);
+
+  /* "PETSc/SNES.pyx":558
+ * 
+ *     def setFunctionNorm(self, norm):
+ *         cdef PetscReal rval = asReal(norm)             # <<<<<<<<<<<<<<
+ *         CHKERR( SNESSetFunctionNorm(self.snes, rval) )
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_norm); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(36, 558, __pyx_L1_error)
+  __pyx_v_rval = __pyx_t_1;
+
+  /* "PETSc/SNES.pyx":559
+ *     def setFunctionNorm(self, norm):
+ *         cdef PetscReal rval = asReal(norm)
+ *         CHKERR( SNESSetFunctionNorm(self.snes, rval) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getFunctionNorm(self):
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetFunctionNorm(__pyx_v_self->snes, __pyx_v_rval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(36, 559, __pyx_L1_error)
+
+  /* "PETSc/SNES.pyx":557
+ *         return toInt(ival)
+ * 
+ *     def setFunctionNorm(self, norm):             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = asReal(norm)
+ *         CHKERR( SNESSetFunctionNorm(self.snes, rval) )
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.SNES.setFunctionNorm", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/SNES.pyx":561
+ *         CHKERR( SNESSetFunctionNorm(self.snes, rval) )
+ * 
+ *     def getFunctionNorm(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = 0
+ *         CHKERR( SNESGetFunctionNorm(self.snes, &rval) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_157getFunctionNorm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_156getFunctionNorm[] = "SNES.getFunctionNorm(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_157getFunctionNorm(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getFunctionNorm (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getFunctionNorm", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getFunctionNorm", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_156getFunctionNorm(((struct PyPetscSNESObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_156getFunctionNorm(struct PyPetscSNESObject *__pyx_v_self) {
+  PetscReal __pyx_v_rval;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getFunctionNorm", 0);
+
+  /* "PETSc/SNES.pyx":562
+ * 
+ *     def getFunctionNorm(self):
+ *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( SNESGetFunctionNorm(self.snes, &rval) )
+ *         return toReal(rval)
+ */
+  __pyx_v_rval = 0.0;
+
+  /* "PETSc/SNES.pyx":563
+ *     def getFunctionNorm(self):
+ *         cdef PetscReal rval = 0
+ *         CHKERR( SNESGetFunctionNorm(self.snes, &rval) )             # <<<<<<<<<<<<<<
+ *         return toReal(rval)
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetFunctionNorm(__pyx_v_self->snes, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(36, 563, __pyx_L1_error)
+
+  /* "PETSc/SNES.pyx":564
+ *         cdef PetscReal rval = 0
+ *         CHKERR( SNESGetFunctionNorm(self.snes, &rval) )
+ *         return toReal(rval)             # <<<<<<<<<<<<<<
+ * 
+ *     def getLinearSolveIterations(self):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 564, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/SNES.pyx":561
+ *         CHKERR( SNESSetFunctionNorm(self.snes, rval) )
+ * 
+ *     def getFunctionNorm(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = 0
+ *         CHKERR( SNESGetFunctionNorm(self.snes, &rval) )
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.SNES.getFunctionNorm", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/SNES.pyx":566
+ *         return toReal(rval)
+ * 
  *     def getLinearSolveIterations(self):             # <<<<<<<<<<<<<<
  *         cdef PetscInt ival = 0
  *         CHKERR( SNESGetLinearSolveIterations(self.snes, &ival) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_149getLinearSolveIterations(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_148getLinearSolveIterations[] = "SNES.getLinearSolveIterations(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_149getLinearSolveIterations(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_159getLinearSolveIterations(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_158getLinearSolveIterations[] = "SNES.getLinearSolveIterations(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_159getLinearSolveIterations(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getLinearSolveIterations (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getLinearSolveIterations", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getLinearSolveIterations", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_148getLinearSolveIterations(((struct PyPetscSNESObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_158getLinearSolveIterations(((struct PyPetscSNESObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_148getLinearSolveIterations(struct PyPetscSNESObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_158getLinearSolveIterations(struct PyPetscSNESObject *__pyx_v_self) {
   PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -168378,7 +178385,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_148getLinearSolveIterations(str
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getLinearSolveIterations", 0);
 
-  /* "PETSc/SNES.pyx":541
+  /* "PETSc/SNES.pyx":567
  * 
  *     def getLinearSolveIterations(self):
  *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
@@ -168387,16 +178394,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_148getLinearSolveIterations(str
  */
   __pyx_v_ival = 0;
 
-  /* "PETSc/SNES.pyx":542
+  /* "PETSc/SNES.pyx":568
  *     def getLinearSolveIterations(self):
  *         cdef PetscInt ival = 0
  *         CHKERR( SNESGetLinearSolveIterations(self.snes, &ival) )             # <<<<<<<<<<<<<<
  *         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_ERR(36, 542, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetLinearSolveIterations(__pyx_v_self->snes, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(36, 568, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":543
+  /* "PETSc/SNES.pyx":569
  *         cdef PetscInt ival = 0
  *         CHKERR( SNESGetLinearSolveIterations(self.snes, &ival) )
  *         return toInt(ival)             # <<<<<<<<<<<<<<
@@ -168404,14 +178411,14 @@ 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_ERR(36, 543, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 569, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":540
- *         return toInt(ival)
+  /* "PETSc/SNES.pyx":566
+ *         return toReal(rval)
  * 
  *     def getLinearSolveIterations(self):             # <<<<<<<<<<<<<<
  *         cdef PetscInt ival = 0
@@ -168429,7 +178436,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_148getLinearSolveIterations(str
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":545
+/* "PETSc/SNES.pyx":571
  *         return toInt(ival)
  * 
  *     def getRhs(self):             # <<<<<<<<<<<<<<
@@ -168438,23 +178445,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_148getLinearSolveIterations(str
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_151getRhs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_150getRhs[] = "SNES.getRhs(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_151getRhs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_161getRhs(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_160getRhs[] = "SNES.getRhs(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_161getRhs(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_4SNES_150getRhs(((struct PyPetscSNESObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_160getRhs(((struct PyPetscSNESObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_150getRhs(struct PyPetscSNESObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_160getRhs(struct PyPetscSNESObject *__pyx_v_self) {
   struct PyPetscVecObject *__pyx_v_vec = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -168462,28 +178469,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_150getRhs(struct PyPetscSNESObj
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getRhs", 0);
 
-  /* "PETSc/SNES.pyx":546
+  /* "PETSc/SNES.pyx":572
  * 
  *     def getRhs(self):
  *         cdef Vec vec = Vec()             # <<<<<<<<<<<<<<
  *         CHKERR( SNESGetRhs(self.snes, &vec.vec) )
  *         PetscINCREF(vec.obj)
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 572, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":547
+  /* "PETSc/SNES.pyx":573
  *     def getRhs(self):
  *         cdef Vec vec = Vec()
  *         CHKERR( SNESGetRhs(self.snes, &vec.vec) )             # <<<<<<<<<<<<<<
  *         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_ERR(36, 547, __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 == ((int)-1))) __PYX_ERR(36, 573, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":548
+  /* "PETSc/SNES.pyx":574
  *         cdef Vec vec = Vec()
  *         CHKERR( SNESGetRhs(self.snes, &vec.vec) )
  *         PetscINCREF(vec.obj)             # <<<<<<<<<<<<<<
@@ -168492,7 +178499,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_150getRhs(struct PyPetscSNESObj
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_vec->__pyx_base.obj);
 
-  /* "PETSc/SNES.pyx":549
+  /* "PETSc/SNES.pyx":575
  *         CHKERR( SNESGetRhs(self.snes, &vec.vec) )
  *         PetscINCREF(vec.obj)
  *         return vec             # <<<<<<<<<<<<<<
@@ -168504,7 +178511,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_150getRhs(struct PyPetscSNESObj
   __pyx_r = ((PyObject *)__pyx_v_vec);
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":545
+  /* "PETSc/SNES.pyx":571
  *         return toInt(ival)
  * 
  *     def getRhs(self):             # <<<<<<<<<<<<<<
@@ -168524,7 +178531,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_150getRhs(struct PyPetscSNESObj
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":551
+/* "PETSc/SNES.pyx":577
  *         return vec
  * 
  *     def getSolution(self):             # <<<<<<<<<<<<<<
@@ -168533,23 +178540,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_150getRhs(struct PyPetscSNESObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_153getSolution(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_152getSolution[] = "SNES.getSolution(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_153getSolution(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_163getSolution(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_162getSolution[] = "SNES.getSolution(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_163getSolution(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_4SNES_152getSolution(((struct PyPetscSNESObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_162getSolution(((struct PyPetscSNESObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_152getSolution(struct PyPetscSNESObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_162getSolution(struct PyPetscSNESObject *__pyx_v_self) {
   struct PyPetscVecObject *__pyx_v_vec = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -168557,28 +178564,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_152getSolution(struct PyPetscSN
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getSolution", 0);
 
-  /* "PETSc/SNES.pyx":552
+  /* "PETSc/SNES.pyx":578
  * 
  *     def getSolution(self):
  *         cdef Vec vec = Vec()             # <<<<<<<<<<<<<<
  *         CHKERR( SNESGetSolution(self.snes, &vec.vec) )
  *         PetscINCREF(vec.obj)
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 578, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":553
+  /* "PETSc/SNES.pyx":579
  *     def getSolution(self):
  *         cdef Vec vec = Vec()
  *         CHKERR( SNESGetSolution(self.snes, &vec.vec) )             # <<<<<<<<<<<<<<
  *         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_ERR(36, 553, __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 == ((int)-1))) __PYX_ERR(36, 579, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":554
+  /* "PETSc/SNES.pyx":580
  *         cdef Vec vec = Vec()
  *         CHKERR( SNESGetSolution(self.snes, &vec.vec) )
  *         PetscINCREF(vec.obj)             # <<<<<<<<<<<<<<
@@ -168587,19 +178594,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_152getSolution(struct PyPetscSN
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_vec->__pyx_base.obj);
 
-  /* "PETSc/SNES.pyx":555
+  /* "PETSc/SNES.pyx":581
  *         CHKERR( SNESGetSolution(self.snes, &vec.vec) )
  *         PetscINCREF(vec.obj)
  *         return vec             # <<<<<<<<<<<<<<
  * 
- *     def setSolution(self, Vec vec not None):
+ *     def setSolution(self, Vec vec):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_vec));
   __pyx_r = ((PyObject *)__pyx_v_vec);
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":551
+  /* "PETSc/SNES.pyx":577
  *         return vec
  * 
  *     def getSolution(self):             # <<<<<<<<<<<<<<
@@ -168619,18 +178626,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_152getSolution(struct PyPetscSN
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":557
+/* "PETSc/SNES.pyx":583
  *         return vec
  * 
- *     def setSolution(self, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def setSolution(self, Vec vec):             # <<<<<<<<<<<<<<
  *         CHKERR( SNESSetSolution(self.snes, vec.vec) )
  * 
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_155setSolution(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_165setSolution(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_164setSolution[] = "SNES.setSolution(self, Vec vec)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_165setSolution(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_vec = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -168643,6 +178650,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_155setSolution(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -168653,7 +178661,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_ERR(36, 557, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setSolution") < 0)) __PYX_ERR(36, 583, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -168664,14 +178672,14 @@ 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_ERR(36, 557, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setSolution", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 583, __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_ERR(36, 557, __pyx_L1_error)
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_154setSolution(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_vec);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) __PYX_ERR(36, 583, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_164setSolution(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_vec);
 
   /* function exit code */
   goto __pyx_L0;
@@ -168682,25 +178690,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_155setSolution(PyObject *__pyx_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_154setSolution(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_164setSolution(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vec) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setSolution", 0);
 
-  /* "PETSc/SNES.pyx":558
+  /* "PETSc/SNES.pyx":584
  * 
- *     def setSolution(self, Vec vec not None):
+ *     def setSolution(self, Vec vec):
  *         CHKERR( SNESSetSolution(self.snes, vec.vec) )             # <<<<<<<<<<<<<<
  * 
  *     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_ERR(36, 558, __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 == ((int)-1))) __PYX_ERR(36, 584, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":557
+  /* "PETSc/SNES.pyx":583
  *         return vec
  * 
- *     def setSolution(self, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def setSolution(self, Vec vec):             # <<<<<<<<<<<<<<
  *         CHKERR( SNESSetSolution(self.snes, vec.vec) )
  * 
  */
@@ -168717,7 +178725,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_154setSolution(struct PyPetscSN
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":560
+/* "PETSc/SNES.pyx":586
  *         CHKERR( SNESSetSolution(self.snes, vec.vec) )
  * 
  *     def getSolutionUpdate(self):             # <<<<<<<<<<<<<<
@@ -168726,23 +178734,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_154setSolution(struct PyPetscSN
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_157getSolutionUpdate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_156getSolutionUpdate[] = "SNES.getSolutionUpdate(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_157getSolutionUpdate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_167getSolutionUpdate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_166getSolutionUpdate[] = "SNES.getSolutionUpdate(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_167getSolutionUpdate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getSolutionUpdate (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getSolutionUpdate", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getSolutionUpdate", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_156getSolutionUpdate(((struct PyPetscSNESObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_166getSolutionUpdate(((struct PyPetscSNESObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_156getSolutionUpdate(struct PyPetscSNESObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_166getSolutionUpdate(struct PyPetscSNESObject *__pyx_v_self) {
   struct PyPetscVecObject *__pyx_v_vec = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -168750,28 +178758,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_156getSolutionUpdate(struct PyP
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getSolutionUpdate", 0);
 
-  /* "PETSc/SNES.pyx":561
+  /* "PETSc/SNES.pyx":587
  * 
  *     def getSolutionUpdate(self):
  *         cdef Vec vec = Vec()             # <<<<<<<<<<<<<<
  *         CHKERR( SNESGetSolutionUpdate(self.snes, &vec.vec) )
  *         PetscINCREF(vec.obj)
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 587, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_vec = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":562
+  /* "PETSc/SNES.pyx":588
  *     def getSolutionUpdate(self):
  *         cdef Vec vec = Vec()
  *         CHKERR( SNESGetSolutionUpdate(self.snes, &vec.vec) )             # <<<<<<<<<<<<<<
  *         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_ERR(36, 562, __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 == ((int)-1))) __PYX_ERR(36, 588, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":563
+  /* "PETSc/SNES.pyx":589
  *         cdef Vec vec = Vec()
  *         CHKERR( SNESGetSolutionUpdate(self.snes, &vec.vec) )
  *         PetscINCREF(vec.obj)             # <<<<<<<<<<<<<<
@@ -168780,7 +178788,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_156getSolutionUpdate(struct PyP
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_vec->__pyx_base.obj);
 
-  /* "PETSc/SNES.pyx":564
+  /* "PETSc/SNES.pyx":590
  *         CHKERR( SNESGetSolutionUpdate(self.snes, &vec.vec) )
  *         PetscINCREF(vec.obj)
  *         return vec             # <<<<<<<<<<<<<<
@@ -168792,7 +178800,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_156getSolutionUpdate(struct PyP
   __pyx_r = ((PyObject *)__pyx_v_vec);
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":560
+  /* "PETSc/SNES.pyx":586
  *         CHKERR( SNESSetSolution(self.snes, vec.vec) )
  * 
  *     def getSolutionUpdate(self):             # <<<<<<<<<<<<<<
@@ -168812,18 +178820,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_156getSolutionUpdate(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":568
+/* "PETSc/SNES.pyx":594
  *     # --- linear solver ---
  * 
- *     def setKSP(self, KSP ksp not None):             # <<<<<<<<<<<<<<
+ *     def setKSP(self, KSP ksp):             # <<<<<<<<<<<<<<
  *         CHKERR( SNESSetKSP(self.snes, ksp.ksp) )
  * 
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_159setKSP(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_169setKSP(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_168setKSP[] = "SNES.setKSP(self, KSP ksp)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_169setKSP(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscKSPObject *__pyx_v_ksp = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -168836,6 +178844,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_159setKSP(PyObject *__pyx_v_sel
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -168846,7 +178855,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_ERR(36, 568, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setKSP") < 0)) __PYX_ERR(36, 594, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -168857,14 +178866,14 @@ 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_ERR(36, 568, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setKSP", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 594, __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_ERR(36, 568, __pyx_L1_error)
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_158setKSP(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_ksp);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_ksp), __pyx_ptype_8petsc4py_5PETSc_KSP, 0, "ksp", 0))) __PYX_ERR(36, 594, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_168setKSP(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_ksp);
 
   /* function exit code */
   goto __pyx_L0;
@@ -168875,25 +178884,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_159setKSP(PyObject *__pyx_v_sel
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_158setKSP(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscKSPObject *__pyx_v_ksp) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_168setKSP(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscKSPObject *__pyx_v_ksp) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setKSP", 0);
 
-  /* "PETSc/SNES.pyx":569
+  /* "PETSc/SNES.pyx":595
  * 
- *     def setKSP(self, KSP ksp not None):
+ *     def setKSP(self, KSP ksp):
  *         CHKERR( SNESSetKSP(self.snes, ksp.ksp) )             # <<<<<<<<<<<<<<
  * 
  *     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_ERR(36, 569, __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 == ((int)-1))) __PYX_ERR(36, 595, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":568
+  /* "PETSc/SNES.pyx":594
  *     # --- linear solver ---
  * 
- *     def setKSP(self, KSP ksp not None):             # <<<<<<<<<<<<<<
+ *     def setKSP(self, KSP ksp):             # <<<<<<<<<<<<<<
  *         CHKERR( SNESSetKSP(self.snes, ksp.ksp) )
  * 
  */
@@ -168910,7 +178919,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_158setKSP(struct PyPetscSNESObj
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":571
+/* "PETSc/SNES.pyx":597
  *         CHKERR( SNESSetKSP(self.snes, ksp.ksp) )
  * 
  *     def getKSP(self):             # <<<<<<<<<<<<<<
@@ -168919,23 +178928,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_158setKSP(struct PyPetscSNESObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_161getKSP(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_160getKSP[] = "SNES.getKSP(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_161getKSP(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_171getKSP(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_170getKSP[] = "SNES.getKSP(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_171getKSP(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_4SNES_160getKSP(((struct PyPetscSNESObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_170getKSP(((struct PyPetscSNESObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_160getKSP(struct PyPetscSNESObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_170getKSP(struct PyPetscSNESObject *__pyx_v_self) {
   struct PyPetscKSPObject *__pyx_v_ksp = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -168943,28 +178952,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_160getKSP(struct PyPetscSNESObj
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getKSP", 0);
 
-  /* "PETSc/SNES.pyx":572
+  /* "PETSc/SNES.pyx":598
  * 
  *     def getKSP(self):
  *         cdef KSP ksp = KSP()             # <<<<<<<<<<<<<<
  *         CHKERR( SNESGetKSP(self.snes, &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(36, 572, __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, 598, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_ksp = ((struct PyPetscKSPObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":573
+  /* "PETSc/SNES.pyx":599
  *     def getKSP(self):
  *         cdef KSP ksp = KSP()
  *         CHKERR( SNESGetKSP(self.snes, &ksp.ksp) )             # <<<<<<<<<<<<<<
  *         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_ERR(36, 573, __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 == ((int)-1))) __PYX_ERR(36, 599, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":574
+  /* "PETSc/SNES.pyx":600
  *         cdef KSP ksp = KSP()
  *         CHKERR( SNESGetKSP(self.snes, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)             # <<<<<<<<<<<<<<
@@ -168973,7 +178982,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_160getKSP(struct PyPetscSNESObj
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_ksp->__pyx_base.obj);
 
-  /* "PETSc/SNES.pyx":575
+  /* "PETSc/SNES.pyx":601
  *         CHKERR( SNESGetKSP(self.snes, &ksp.ksp) )
  *         PetscINCREF(ksp.obj)
  *         return ksp             # <<<<<<<<<<<<<<
@@ -168985,7 +178994,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_160getKSP(struct PyPetscSNESObj
   __pyx_r = ((PyObject *)__pyx_v_ksp);
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":571
+  /* "PETSc/SNES.pyx":597
  *         CHKERR( SNESSetKSP(self.snes, ksp.ksp) )
  * 
  *     def getKSP(self):             # <<<<<<<<<<<<<<
@@ -169005,7 +179014,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_160getKSP(struct PyPetscSNESObj
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":577
+/* "PETSc/SNES.pyx":603
  *         return ksp
  * 
  *     def setUseEW(self, flag=True, *targs, **kargs):             # <<<<<<<<<<<<<<
@@ -169014,9 +179023,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_160getKSP(struct PyPetscSNESObj
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_163setUseEW(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_162setUseEW[] = "SNES.setUseEW(self, flag=True, *targs, **kargs)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_163setUseEW(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_173setUseEW(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_172setUseEW[] = "SNES.setUseEW(self, flag=True, *targs, **kargs)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_173setUseEW(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_flag = 0;
   PyObject *__pyx_v_targs = 0;
   PyObject *__pyx_v_kargs = 0;
@@ -169046,6 +179055,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_163setUseEW(PyObject *__pyx_v_s
       switch (pos_args) {
         default:
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
       }
       kw_args = PyDict_Size(__pyx_kwds);
@@ -169058,12 +179068,13 @@ 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_ERR(36, 577, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, __pyx_v_kargs, values, used_pos_args, "setUseEW") < 0)) __PYX_ERR(36, 603, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         default:
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
       }
     }
@@ -169077,7 +179088,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_163setUseEW(PyObject *__pyx_v_s
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_162setUseEW(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_flag, __pyx_v_targs, __pyx_v_kargs);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_172setUseEW(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_flag, __pyx_v_targs, __pyx_v_kargs);
 
   /* function exit code */
   __Pyx_XDECREF(__pyx_v_targs);
@@ -169086,7 +179097,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_163setUseEW(PyObject *__pyx_v_s
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_172setUseEW(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_flag, PyObject *__pyx_v_targs, PyObject *__pyx_v_kargs) {
   PetscBool __pyx_v_bval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -169098,26 +179109,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_162setUseEW(struct PyPetscSNESO
   PyObject *__pyx_t_6 = NULL;
   __Pyx_RefNannySetupContext("setUseEW", 0);
 
-  /* "PETSc/SNES.pyx":578
+  /* "PETSc/SNES.pyx":604
  * 
  *     def setUseEW(self, flag=True, *targs, **kargs):
  *         cdef PetscBool bval = flag             # <<<<<<<<<<<<<<
  *         CHKERR( SNESKSPSetUseEW(self.snes, bval) )
  *         if targs or kargs: self.setParamsEW(*targs, **kargs)
  */
-  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) __PYX_ERR(36, 578, __pyx_L1_error)
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) __PYX_ERR(36, 604, __pyx_L1_error)
   __pyx_v_bval = __pyx_t_1;
 
-  /* "PETSc/SNES.pyx":579
+  /* "PETSc/SNES.pyx":605
  *     def setUseEW(self, flag=True, *targs, **kargs):
  *         cdef PetscBool bval = flag
  *         CHKERR( SNESKSPSetUseEW(self.snes, bval) )             # <<<<<<<<<<<<<<
  *         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_ERR(36, 579, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESKSPSetUseEW(__pyx_v_self->snes, __pyx_v_bval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(36, 605, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":580
+  /* "PETSc/SNES.pyx":606
  *         cdef PetscBool bval = flag
  *         CHKERR( SNESKSPSetUseEW(self.snes, bval) )
  *         if targs or kargs: self.setParamsEW(*targs, **kargs)             # <<<<<<<<<<<<<<
@@ -169130,19 +179141,19 @@ 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_ERR(36, 580, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_kargs); if (unlikely(__pyx_t_4 < 0)) __PYX_ERR(36, 606, __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_ERR(36, 580, __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, 606, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
-    __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_t_6 = __Pyx_PyObject_Call(__pyx_t_5, __pyx_v_targs, __pyx_v_kargs); if (unlikely(!__pyx_t_6)) __PYX_ERR(36, 606, __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/SNES.pyx":577
+  /* "PETSc/SNES.pyx":603
  *         return ksp
  * 
  *     def setUseEW(self, flag=True, *targs, **kargs):             # <<<<<<<<<<<<<<
@@ -169164,7 +179175,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_162setUseEW(struct PyPetscSNESO
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":582
+/* "PETSc/SNES.pyx":608
  *         if targs or kargs: self.setParamsEW(*targs, **kargs)
  * 
  *     def getUseEW(self):             # <<<<<<<<<<<<<<
@@ -169173,23 +179184,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_162setUseEW(struct PyPetscSNESO
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_165getUseEW(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_164getUseEW[] = "SNES.getUseEW(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_165getUseEW(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_175getUseEW(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_174getUseEW[] = "SNES.getUseEW(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_175getUseEW(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getUseEW (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getUseEW", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getUseEW", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_164getUseEW(((struct PyPetscSNESObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_174getUseEW(((struct PyPetscSNESObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_164getUseEW(struct PyPetscSNESObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_174getUseEW(struct PyPetscSNESObject *__pyx_v_self) {
   PetscBool __pyx_v_flag;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -169197,39 +179208,39 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_164getUseEW(struct PyPetscSNESO
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getUseEW", 0);
 
-  /* "PETSc/SNES.pyx":583
+  /* "PETSc/SNES.pyx":609
  * 
  *     def getUseEW(self):
  *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
  *         CHKERR( SNESKSPGetUseEW(self.snes, &flag) )
- *         return <bint> flag
+ *         return toBool(flag)
  */
   __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/SNES.pyx":584
+  /* "PETSc/SNES.pyx":610
  *     def getUseEW(self):
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( SNESKSPGetUseEW(self.snes, &flag) )             # <<<<<<<<<<<<<<
- *         return <bint> flag
+ *         return toBool(flag)
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESKSPGetUseEW(__pyx_v_self->snes, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(36, 610, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":585
+  /* "PETSc/SNES.pyx":611
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( SNESKSPGetUseEW(self.snes, &flag) )
- *         return <bint> flag             # <<<<<<<<<<<<<<
+ *         return toBool(flag)             # <<<<<<<<<<<<<<
  * 
  *     def setParamsEW(self, version=None,
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 585, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 611, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":582
+  /* "PETSc/SNES.pyx":608
  *         if targs or kargs: self.setParamsEW(*targs, **kargs)
  * 
  *     def getUseEW(self):             # <<<<<<<<<<<<<<
@@ -169248,8 +179259,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_164getUseEW(struct PyPetscSNESO
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":587
- *         return <bint> flag
+/* "PETSc/SNES.pyx":613
+ *         return toBool(flag)
  * 
  *     def setParamsEW(self, version=None,             # <<<<<<<<<<<<<<
  *                     rtol_0=None, rtol_max=None,
@@ -169257,9 +179268,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_164getUseEW(struct PyPetscSNESO
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_167setParamsEW(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_166setParamsEW[] = "SNES.setParamsEW(self, version=None, rtol_0=None, rtol_max=None, gamma=None, alpha=None, alpha2=None, threshold=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_167setParamsEW(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_177setParamsEW(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_176setParamsEW[] = "SNES.setParamsEW(self, version=None, rtol_0=None, rtol_max=None, gamma=None, alpha=None, alpha2=None, threshold=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_177setParamsEW(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_version = 0;
   PyObject *__pyx_v_rtol_0 = 0;
   PyObject *__pyx_v_rtol_max = 0;
@@ -169275,7 +179286,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_167setParamsEW(PyObject *__pyx_
     PyObject* values[7] = {0,0,0,0,0,0,0};
     values[0] = ((PyObject *)Py_None);
 
-    /* "PETSc/SNES.pyx":588
+    /* "PETSc/SNES.pyx":614
  * 
  *     def setParamsEW(self, version=None,
  *                     rtol_0=None, rtol_max=None,             # <<<<<<<<<<<<<<
@@ -169285,7 +179296,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_167setParamsEW(PyObject *__pyx_
     values[1] = ((PyObject *)Py_None);
     values[2] = ((PyObject *)Py_None);
 
-    /* "PETSc/SNES.pyx":589
+    /* "PETSc/SNES.pyx":615
  *     def setParamsEW(self, version=None,
  *                     rtol_0=None, rtol_max=None,
  *                     gamma=None, alpha=None, alpha2=None,             # <<<<<<<<<<<<<<
@@ -169296,7 +179307,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_167setParamsEW(PyObject *__pyx_
     values[4] = ((PyObject *)Py_None);
     values[5] = ((PyObject *)Py_None);
 
-    /* "PETSc/SNES.pyx":590
+    /* "PETSc/SNES.pyx":616
  *                     rtol_0=None, rtol_max=None,
  *                     gamma=None, alpha=None, alpha2=None,
  *                     threshold=None):             # <<<<<<<<<<<<<<
@@ -169309,12 +179320,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_167setParamsEW(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
+        CYTHON_FALLTHROUGH;
         case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -169325,31 +179343,37 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_167setParamsEW(PyObject *__pyx_
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_version);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rtol_0);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rtol_max);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_gamma);
           if (value) { values[3] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  4:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_alpha);
           if (value) { values[4] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  5:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_alpha2);
           if (value) { values[5] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  6:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_threshold);
@@ -169357,17 +179381,24 @@ 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_ERR(36, 587, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setParamsEW") < 0)) __PYX_ERR(36, 613, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
+        CYTHON_FALLTHROUGH;
         case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -169382,16 +179413,16 @@ 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_ERR(36, 587, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setParamsEW", 0, 0, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 613, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setParamsEW", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_166setParamsEW(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_version, __pyx_v_rtol_0, __pyx_v_rtol_max, __pyx_v_gamma, __pyx_v_alpha, __pyx_v_alpha2, __pyx_v_threshold);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_176setParamsEW(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_version, __pyx_v_rtol_0, __pyx_v_rtol_max, __pyx_v_gamma, __pyx_v_alpha, __pyx_v_alpha2, __pyx_v_threshold);
 
-  /* "PETSc/SNES.pyx":587
- *         return <bint> flag
+  /* "PETSc/SNES.pyx":613
+ *         return toBool(flag)
  * 
  *     def setParamsEW(self, version=None,             # <<<<<<<<<<<<<<
  *                     rtol_0=None, rtol_max=None,
@@ -169403,7 +179434,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_167setParamsEW(PyObject *__pyx_
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_176setParamsEW(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) {
   PetscInt __pyx_v_cversion;
   PetscReal __pyx_v_crtol_0;
   PetscReal __pyx_v_crtol_max;
@@ -169420,7 +179451,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_166setParamsEW(struct PyPetscSN
   int __pyx_t_5;
   __Pyx_RefNannySetupContext("setParamsEW", 0);
 
-  /* "PETSc/SNES.pyx":591
+  /* "PETSc/SNES.pyx":617
  *                     gamma=None, alpha=None, alpha2=None,
  *                     threshold=None):
  *         cdef PetscInt  cversion   = PETSC_DEFAULT             # <<<<<<<<<<<<<<
@@ -169429,7 +179460,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_166setParamsEW(struct PyPetscSN
  */
   __pyx_v_cversion = PETSC_DEFAULT;
 
-  /* "PETSc/SNES.pyx":592
+  /* "PETSc/SNES.pyx":618
  *                     threshold=None):
  *         cdef PetscInt  cversion   = PETSC_DEFAULT
  *         cdef PetscReal crtol_0    = PETSC_DEFAULT             # <<<<<<<<<<<<<<
@@ -169438,7 +179469,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_166setParamsEW(struct PyPetscSN
  */
   __pyx_v_crtol_0 = PETSC_DEFAULT;
 
-  /* "PETSc/SNES.pyx":593
+  /* "PETSc/SNES.pyx":619
  *         cdef PetscInt  cversion   = PETSC_DEFAULT
  *         cdef PetscReal crtol_0    = PETSC_DEFAULT
  *         cdef PetscReal crtol_max  = PETSC_DEFAULT             # <<<<<<<<<<<<<<
@@ -169447,7 +179478,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_166setParamsEW(struct PyPetscSN
  */
   __pyx_v_crtol_max = PETSC_DEFAULT;
 
-  /* "PETSc/SNES.pyx":594
+  /* "PETSc/SNES.pyx":620
  *         cdef PetscReal crtol_0    = PETSC_DEFAULT
  *         cdef PetscReal crtol_max  = PETSC_DEFAULT
  *         cdef PetscReal cgamma     = PETSC_DEFAULT             # <<<<<<<<<<<<<<
@@ -169456,7 +179487,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_166setParamsEW(struct PyPetscSN
  */
   __pyx_v_cgamma = PETSC_DEFAULT;
 
-  /* "PETSc/SNES.pyx":595
+  /* "PETSc/SNES.pyx":621
  *         cdef PetscReal crtol_max  = PETSC_DEFAULT
  *         cdef PetscReal cgamma     = PETSC_DEFAULT
  *         cdef PetscReal calpha     = PETSC_DEFAULT             # <<<<<<<<<<<<<<
@@ -169465,7 +179496,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_166setParamsEW(struct PyPetscSN
  */
   __pyx_v_calpha = PETSC_DEFAULT;
 
-  /* "PETSc/SNES.pyx":596
+  /* "PETSc/SNES.pyx":622
  *         cdef PetscReal cgamma     = PETSC_DEFAULT
  *         cdef PetscReal calpha     = PETSC_DEFAULT
  *         cdef PetscReal calpha2    = PETSC_DEFAULT             # <<<<<<<<<<<<<<
@@ -169474,7 +179505,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_166setParamsEW(struct PyPetscSN
  */
   __pyx_v_calpha2 = PETSC_DEFAULT;
 
-  /* "PETSc/SNES.pyx":597
+  /* "PETSc/SNES.pyx":623
  *         cdef PetscReal calpha     = PETSC_DEFAULT
  *         cdef PetscReal calpha2    = PETSC_DEFAULT
  *         cdef PetscReal cthreshold = PETSC_DEFAULT             # <<<<<<<<<<<<<<
@@ -169483,7 +179514,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_166setParamsEW(struct PyPetscSN
  */
   __pyx_v_cthreshold = PETSC_DEFAULT;
 
-  /* "PETSc/SNES.pyx":598
+  /* "PETSc/SNES.pyx":624
  *         cdef PetscReal calpha2    = PETSC_DEFAULT
  *         cdef PetscReal cthreshold = PETSC_DEFAULT
  *         if version   is not None: cversion   = asInt(version)             # <<<<<<<<<<<<<<
@@ -169493,11 +179524,11 @@ 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 == -1L && PyErr_Occurred())) __PYX_ERR(36, 598, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_version); if (unlikely(__pyx_t_3 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(36, 624, __pyx_L1_error)
     __pyx_v_cversion = __pyx_t_3;
   }
 
-  /* "PETSc/SNES.pyx":599
+  /* "PETSc/SNES.pyx":625
  *         cdef PetscReal cthreshold = PETSC_DEFAULT
  *         if version   is not None: cversion   = asInt(version)
  *         if rtol_0    is not None: crtol_0    = asReal(rtol_0)             # <<<<<<<<<<<<<<
@@ -169507,11 +179538,11 @@ 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_ERR(36, 599, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_rtol_0); if (unlikely(__pyx_t_4 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(36, 625, __pyx_L1_error)
     __pyx_v_crtol_0 = __pyx_t_4;
   }
 
-  /* "PETSc/SNES.pyx":600
+  /* "PETSc/SNES.pyx":626
  *         if version   is not None: cversion   = asInt(version)
  *         if rtol_0    is not None: crtol_0    = asReal(rtol_0)
  *         if rtol_max  is not None: crtol_max  = asReal(rtol_max)             # <<<<<<<<<<<<<<
@@ -169521,11 +179552,11 @@ 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_ERR(36, 600, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_rtol_max); if (unlikely(__pyx_t_4 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(36, 626, __pyx_L1_error)
     __pyx_v_crtol_max = __pyx_t_4;
   }
 
-  /* "PETSc/SNES.pyx":601
+  /* "PETSc/SNES.pyx":627
  *         if rtol_0    is not None: crtol_0    = asReal(rtol_0)
  *         if rtol_max  is not None: crtol_max  = asReal(rtol_max)
  *         if gamma     is not None: cgamma     = asReal(gamma)             # <<<<<<<<<<<<<<
@@ -169535,11 +179566,11 @@ 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_ERR(36, 601, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_gamma); if (unlikely(__pyx_t_4 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(36, 627, __pyx_L1_error)
     __pyx_v_cgamma = __pyx_t_4;
   }
 
-  /* "PETSc/SNES.pyx":602
+  /* "PETSc/SNES.pyx":628
  *         if rtol_max  is not None: crtol_max  = asReal(rtol_max)
  *         if gamma     is not None: cgamma     = asReal(gamma)
  *         if alpha     is not None: calpha     = asReal(alpha)             # <<<<<<<<<<<<<<
@@ -169549,11 +179580,11 @@ 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_ERR(36, 602, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_alpha); if (unlikely(__pyx_t_4 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(36, 628, __pyx_L1_error)
     __pyx_v_calpha = __pyx_t_4;
   }
 
-  /* "PETSc/SNES.pyx":603
+  /* "PETSc/SNES.pyx":629
  *         if gamma     is not None: cgamma     = asReal(gamma)
  *         if alpha     is not None: calpha     = asReal(alpha)
  *         if alpha2    is not None: calpha2    = asReal(alpha2)             # <<<<<<<<<<<<<<
@@ -169563,11 +179594,11 @@ 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_ERR(36, 603, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_alpha2); if (unlikely(__pyx_t_4 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(36, 629, __pyx_L1_error)
     __pyx_v_calpha2 = __pyx_t_4;
   }
 
-  /* "PETSc/SNES.pyx":604
+  /* "PETSc/SNES.pyx":630
  *         if alpha     is not None: calpha     = asReal(alpha)
  *         if alpha2    is not None: calpha2    = asReal(alpha2)
  *         if threshold is not None: cthreshold = asReal(threshold)             # <<<<<<<<<<<<<<
@@ -169577,21 +179608,21 @@ 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_ERR(36, 604, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_threshold); if (unlikely(__pyx_t_4 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(36, 630, __pyx_L1_error)
     __pyx_v_cthreshold = __pyx_t_4;
   }
 
-  /* "PETSc/SNES.pyx":605
+  /* "PETSc/SNES.pyx":631
  *         if alpha2    is not None: calpha2    = asReal(alpha2)
  *         if threshold is not None: cthreshold = asReal(threshold)
  *         CHKERR( SNESKSPSetParametersEW(             # <<<<<<<<<<<<<<
  *             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_ERR(36, 605, __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 == ((int)-1))) __PYX_ERR(36, 631, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":587
- *         return <bint> flag
+  /* "PETSc/SNES.pyx":613
+ *         return toBool(flag)
  * 
  *     def setParamsEW(self, version=None,             # <<<<<<<<<<<<<<
  *                     rtol_0=None, rtol_max=None,
@@ -169610,7 +179641,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_166setParamsEW(struct PyPetscSN
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":609
+/* "PETSc/SNES.pyx":635
  *             cgamma, calpha, calpha2, cthreshold) )
  * 
  *     def getParamsEW(self):             # <<<<<<<<<<<<<<
@@ -169619,23 +179650,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_166setParamsEW(struct PyPetscSN
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_169getParamsEW(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_168getParamsEW[] = "SNES.getParamsEW(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_169getParamsEW(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_179getParamsEW(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_178getParamsEW[] = "SNES.getParamsEW(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_179getParamsEW(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getParamsEW (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getParamsEW", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getParamsEW", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_168getParamsEW(((struct PyPetscSNESObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_178getParamsEW(((struct PyPetscSNESObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_168getParamsEW(struct PyPetscSNESObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_178getParamsEW(struct PyPetscSNESObject *__pyx_v_self) {
   PetscInt __pyx_v_version;
   PetscReal __pyx_v_rtol_0;
   PetscReal __pyx_v_rtol_max;
@@ -169650,7 +179681,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_168getParamsEW(struct PyPetscSN
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("getParamsEW", 0);
 
-  /* "PETSc/SNES.pyx":610
+  /* "PETSc/SNES.pyx":636
  * 
  *     def getParamsEW(self):
  *         cdef PetscInt  version=0             # <<<<<<<<<<<<<<
@@ -169659,7 +179690,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_168getParamsEW(struct PyPetscSN
  */
   __pyx_v_version = 0;
 
-  /* "PETSc/SNES.pyx":611
+  /* "PETSc/SNES.pyx":637
  *     def getParamsEW(self):
  *         cdef PetscInt  version=0
  *         cdef PetscReal rtol_0=0, rtol_max=0             # <<<<<<<<<<<<<<
@@ -169669,7 +179700,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_168getParamsEW(struct PyPetscSN
   __pyx_v_rtol_0 = 0.0;
   __pyx_v_rtol_max = 0.0;
 
-  /* "PETSc/SNES.pyx":612
+  /* "PETSc/SNES.pyx":638
  *         cdef PetscInt  version=0
  *         cdef PetscReal rtol_0=0, rtol_max=0
  *         cdef PetscReal gamma=0, alpha=0, alpha2=0             # <<<<<<<<<<<<<<
@@ -169680,7 +179711,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_168getParamsEW(struct PyPetscSN
   __pyx_v_alpha = 0.0;
   __pyx_v_alpha2 = 0.0;
 
-  /* "PETSc/SNES.pyx":613
+  /* "PETSc/SNES.pyx":639
  *         cdef PetscReal rtol_0=0, rtol_max=0
  *         cdef PetscReal gamma=0, alpha=0, alpha2=0
  *         cdef PetscReal threshold=0             # <<<<<<<<<<<<<<
@@ -169689,16 +179720,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_168getParamsEW(struct PyPetscSN
  */
   __pyx_v_threshold = 0.0;
 
-  /* "PETSc/SNES.pyx":614
+  /* "PETSc/SNES.pyx":640
  *         cdef PetscReal gamma=0, alpha=0, alpha2=0
  *         cdef PetscReal threshold=0
  *         CHKERR( SNESKSPGetParametersEW(             # <<<<<<<<<<<<<<
  *             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_ERR(36, 614, __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 == ((int)-1))) __PYX_ERR(36, 640, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":617
+  /* "PETSc/SNES.pyx":643
  *             self.snes, &version, &rtol_0, &rtol_max,
  *             &gamma, &alpha, &alpha2, &threshold) )
  *         return {'version'   : toInt(version),             # <<<<<<<<<<<<<<
@@ -169706,89 +179737,89 @@ 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_ERR(36, 617, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(7); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 643, __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_ERR(36, 617, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_version); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 643, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_version, __pyx_t_3) < 0) __PYX_ERR(36, 617, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_version, __pyx_t_3) < 0) __PYX_ERR(36, 643, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/SNES.pyx":618
+  /* "PETSc/SNES.pyx":644
  *             &gamma, &alpha, &alpha2, &threshold) )
  *         return {'version'   : toInt(version),
  *                 'rtol_0'    : toReal(rtol_0),             # <<<<<<<<<<<<<<
  *                 '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_ERR(36, 618, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rtol_0); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 644, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_rtol_0, __pyx_t_3) < 0) __PYX_ERR(36, 617, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_rtol_0, __pyx_t_3) < 0) __PYX_ERR(36, 643, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/SNES.pyx":619
+  /* "PETSc/SNES.pyx":645
  *         return {'version'   : toInt(version),
  *                 'rtol_0'    : toReal(rtol_0),
  *                 'rtol_max'  : toReal(rtol_max),             # <<<<<<<<<<<<<<
  *                 'gamma'     : toReal(gamma),
  *                 'alpha'     : toReal(alpha),
  */
-  __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_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rtol_max); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 645, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_rtol_max, __pyx_t_3) < 0) __PYX_ERR(36, 617, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_rtol_max, __pyx_t_3) < 0) __PYX_ERR(36, 643, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/SNES.pyx":620
+  /* "PETSc/SNES.pyx":646
  *                 'rtol_0'    : toReal(rtol_0),
  *                 'rtol_max'  : toReal(rtol_max),
  *                 'gamma'     : toReal(gamma),             # <<<<<<<<<<<<<<
  *                 'alpha'     : toReal(alpha),
  *                 'alpha2'    : toReal(alpha2),
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_gamma); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 620, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_gamma); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 646, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_gamma, __pyx_t_3) < 0) __PYX_ERR(36, 617, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_gamma, __pyx_t_3) < 0) __PYX_ERR(36, 643, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/SNES.pyx":621
+  /* "PETSc/SNES.pyx":647
  *                 'rtol_max'  : toReal(rtol_max),
  *                 'gamma'     : toReal(gamma),
  *                 'alpha'     : toReal(alpha),             # <<<<<<<<<<<<<<
  *                 'alpha2'    : toReal(alpha2),
  *                 'threshold' : toReal(threshold),}
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_alpha); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 621, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_alpha); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 647, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_alpha, __pyx_t_3) < 0) __PYX_ERR(36, 617, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_alpha, __pyx_t_3) < 0) __PYX_ERR(36, 643, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/SNES.pyx":622
+  /* "PETSc/SNES.pyx":648
  *                 'gamma'     : toReal(gamma),
  *                 'alpha'     : toReal(alpha),
  *                 'alpha2'    : toReal(alpha2),             # <<<<<<<<<<<<<<
  *                 'threshold' : toReal(threshold),}
  * 
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_alpha2); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 622, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_alpha2); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 648, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_alpha2, __pyx_t_3) < 0) __PYX_ERR(36, 617, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_alpha2, __pyx_t_3) < 0) __PYX_ERR(36, 643, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/SNES.pyx":623
+  /* "PETSc/SNES.pyx":649
  *                 'alpha'     : toReal(alpha),
  *                 'alpha2'    : toReal(alpha2),
  *                 'threshold' : toReal(threshold),}             # <<<<<<<<<<<<<<
  * 
  *     # --- matrix free / finite diferences ---
  */
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_threshold); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 623, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_threshold); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 649, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_threshold, __pyx_t_3) < 0) __PYX_ERR(36, 617, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_threshold, __pyx_t_3) < 0) __PYX_ERR(36, 643, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":609
+  /* "PETSc/SNES.pyx":635
  *             cgamma, calpha, calpha2, cthreshold) )
  * 
  *     def getParamsEW(self):             # <<<<<<<<<<<<<<
@@ -169808,7 +179839,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_168getParamsEW(struct PyPetscSN
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":627
+/* "PETSc/SNES.pyx":653
  *     # --- matrix free / finite diferences ---
  * 
  *     def setUseMF(self, flag=True):             # <<<<<<<<<<<<<<
@@ -169817,9 +179848,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_168getParamsEW(struct PyPetscSN
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_171setUseMF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_181setUseMF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_180setUseMF[] = "SNES.setUseMF(self, flag=True)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_181setUseMF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_flag = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -169833,6 +179864,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_171setUseMF(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -169845,11 +179877,12 @@ 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_ERR(36, 627, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setUseMF") < 0)) __PYX_ERR(36, 653, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -169858,20 +179891,20 @@ 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_ERR(36, 627, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setUseMF", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 653, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setUseMF", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_170setUseMF(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_flag);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_180setUseMF(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_flag);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_170setUseMF(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_flag) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_180setUseMF(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_flag) {
   PetscBool __pyx_v_bval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -169879,26 +179912,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_170setUseMF(struct PyPetscSNESO
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setUseMF", 0);
 
-  /* "PETSc/SNES.pyx":628
+  /* "PETSc/SNES.pyx":654
  * 
  *     def setUseMF(self, flag=True):
  *         cdef PetscBool bval = flag             # <<<<<<<<<<<<<<
  *         CHKERR( SNESSetUseMFFD(self.snes, bval) )
  * 
  */
-  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) __PYX_ERR(36, 628, __pyx_L1_error)
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) __PYX_ERR(36, 654, __pyx_L1_error)
   __pyx_v_bval = __pyx_t_1;
 
-  /* "PETSc/SNES.pyx":629
+  /* "PETSc/SNES.pyx":655
  *     def setUseMF(self, flag=True):
  *         cdef PetscBool bval = flag
  *         CHKERR( SNESSetUseMFFD(self.snes, bval) )             # <<<<<<<<<<<<<<
  * 
  *     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_ERR(36, 629, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetUseMFFD(__pyx_v_self->snes, __pyx_v_bval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(36, 655, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":627
+  /* "PETSc/SNES.pyx":653
  *     # --- matrix free / finite diferences ---
  * 
  *     def setUseMF(self, flag=True):             # <<<<<<<<<<<<<<
@@ -169918,77 +179951,77 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_170setUseMF(struct PyPetscSNESO
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":631
+/* "PETSc/SNES.pyx":657
  *         CHKERR( SNESSetUseMFFD(self.snes, bval) )
  * 
  *     def getUseMF(self):             # <<<<<<<<<<<<<<
- *         cdef PetscBool bval = PETSC_FALSE
- *         CHKERR( SNESGetUseMFFD(self.snes, &bval) )
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( SNESGetUseMFFD(self.snes, &flag) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_173getUseMF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_172getUseMF[] = "SNES.getUseMF(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_173getUseMF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_183getUseMF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_182getUseMF[] = "SNES.getUseMF(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_183getUseMF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getUseMF (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getUseMF", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getUseMF", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_172getUseMF(((struct PyPetscSNESObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_182getUseMF(((struct PyPetscSNESObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_172getUseMF(struct PyPetscSNESObject *__pyx_v_self) {
-  PetscBool __pyx_v_bval;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_182getUseMF(struct PyPetscSNESObject *__pyx_v_self) {
+  PetscBool __pyx_v_flag;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getUseMF", 0);
 
-  /* "PETSc/SNES.pyx":632
+  /* "PETSc/SNES.pyx":658
  * 
  *     def getUseMF(self):
- *         cdef PetscBool bval = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( SNESGetUseMFFD(self.snes, &bval) )
- *         return <bint> bval
+ *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( SNESGetUseMFFD(self.snes, &flag) )
+ *         return toBool(flag)
  */
-  __pyx_v_bval = PETSC_FALSE;
+  __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/SNES.pyx":633
+  /* "PETSc/SNES.pyx":659
  *     def getUseMF(self):
- *         cdef PetscBool bval = PETSC_FALSE
- *         CHKERR( SNESGetUseMFFD(self.snes, &bval) )             # <<<<<<<<<<<<<<
- *         return <bint> bval
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( SNESGetUseMFFD(self.snes, &flag) )             # <<<<<<<<<<<<<<
+ *         return toBool(flag)
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetUseMFFD(__pyx_v_self->snes, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(36, 659, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":634
- *         cdef PetscBool bval = PETSC_FALSE
- *         CHKERR( SNESGetUseMFFD(self.snes, &bval) )
- *         return <bint> bval             # <<<<<<<<<<<<<<
+  /* "PETSc/SNES.pyx":660
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( SNESGetUseMFFD(self.snes, &flag) )
+ *         return toBool(flag)             # <<<<<<<<<<<<<<
  * 
  *     def setUseFD(self, flag=True):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_bval); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 634, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 660, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":631
+  /* "PETSc/SNES.pyx":657
  *         CHKERR( SNESSetUseMFFD(self.snes, bval) )
  * 
  *     def getUseMF(self):             # <<<<<<<<<<<<<<
- *         cdef PetscBool bval = PETSC_FALSE
- *         CHKERR( SNESGetUseMFFD(self.snes, &bval) )
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( SNESGetUseMFFD(self.snes, &flag) )
  */
 
   /* function exit code */
@@ -170002,8 +180035,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_172getUseMF(struct PyPetscSNESO
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":636
- *         return <bint> bval
+/* "PETSc/SNES.pyx":662
+ *         return toBool(flag)
  * 
  *     def setUseFD(self, flag=True):             # <<<<<<<<<<<<<<
  *         cdef PetscBool bval = flag
@@ -170011,9 +180044,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_172getUseMF(struct PyPetscSNESO
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_175setUseFD(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_185setUseFD(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_184setUseFD[] = "SNES.setUseFD(self, flag=True)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_185setUseFD(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_flag = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -170027,6 +180060,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_175setUseFD(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -170039,11 +180073,12 @@ 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_ERR(36, 636, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setUseFD") < 0)) __PYX_ERR(36, 662, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -170052,20 +180087,20 @@ 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_ERR(36, 636, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setUseFD", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 662, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setUseFD", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_174setUseFD(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_flag);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_184setUseFD(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_flag);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_174setUseFD(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_flag) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_184setUseFD(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_flag) {
   PetscBool __pyx_v_bval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -170073,27 +180108,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_174setUseFD(struct PyPetscSNESO
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setUseFD", 0);
 
-  /* "PETSc/SNES.pyx":637
+  /* "PETSc/SNES.pyx":663
  * 
  *     def setUseFD(self, flag=True):
  *         cdef PetscBool bval = flag             # <<<<<<<<<<<<<<
  *         CHKERR( SNESSetUseFDColoring(self.snes, bval) )
  * 
  */
-  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) __PYX_ERR(36, 637, __pyx_L1_error)
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) __PYX_ERR(36, 663, __pyx_L1_error)
   __pyx_v_bval = __pyx_t_1;
 
-  /* "PETSc/SNES.pyx":638
+  /* "PETSc/SNES.pyx":664
  *     def setUseFD(self, flag=True):
  *         cdef PetscBool bval = flag
  *         CHKERR( SNESSetUseFDColoring(self.snes, bval) )             # <<<<<<<<<<<<<<
  * 
  *     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_ERR(36, 638, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetUseFDColoring(__pyx_v_self->snes, __pyx_v_bval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(36, 664, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":636
- *         return <bint> bval
+  /* "PETSc/SNES.pyx":662
+ *         return toBool(flag)
  * 
  *     def setUseFD(self, flag=True):             # <<<<<<<<<<<<<<
  *         cdef PetscBool bval = flag
@@ -170112,77 +180147,77 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_174setUseFD(struct PyPetscSNESO
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":640
+/* "PETSc/SNES.pyx":666
  *         CHKERR( SNESSetUseFDColoring(self.snes, bval) )
  * 
  *     def getUseFD(self):             # <<<<<<<<<<<<<<
- *         cdef PetscBool bval = PETSC_FALSE
- *         CHKERR( SNESGetUseFDColoring(self.snes, &bval) )
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( SNESGetUseFDColoring(self.snes, &flag) )
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_177getUseFD(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_176getUseFD[] = "SNES.getUseFD(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_177getUseFD(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_187getUseFD(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_186getUseFD[] = "SNES.getUseFD(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_187getUseFD(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getUseFD (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getUseFD", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getUseFD", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_176getUseFD(((struct PyPetscSNESObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_186getUseFD(((struct PyPetscSNESObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_176getUseFD(struct PyPetscSNESObject *__pyx_v_self) {
-  PetscBool __pyx_v_bval;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_186getUseFD(struct PyPetscSNESObject *__pyx_v_self) {
+  PetscBool __pyx_v_flag;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getUseFD", 0);
 
-  /* "PETSc/SNES.pyx":641
+  /* "PETSc/SNES.pyx":667
  * 
  *     def getUseFD(self):
- *         cdef PetscBool bval = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( SNESGetUseFDColoring(self.snes, &bval) )
- *         return <bint> bval
+ *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( SNESGetUseFDColoring(self.snes, &flag) )
+ *         return toBool(flag)
  */
-  __pyx_v_bval = PETSC_FALSE;
+  __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/SNES.pyx":642
+  /* "PETSc/SNES.pyx":668
  *     def getUseFD(self):
- *         cdef PetscBool bval = PETSC_FALSE
- *         CHKERR( SNESGetUseFDColoring(self.snes, &bval) )             # <<<<<<<<<<<<<<
- *         return <bint> bval
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( SNESGetUseFDColoring(self.snes, &flag) )             # <<<<<<<<<<<<<<
+ *         return toBool(flag)
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESGetUseFDColoring(__pyx_v_self->snes, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(36, 668, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":643
- *         cdef PetscBool bval = PETSC_FALSE
- *         CHKERR( SNESGetUseFDColoring(self.snes, &bval) )
- *         return <bint> bval             # <<<<<<<<<<<<<<
+  /* "PETSc/SNES.pyx":669
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( SNESGetUseFDColoring(self.snes, &flag) )
+ *         return toBool(flag)             # <<<<<<<<<<<<<<
  * 
  *     # --- VI ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_bval); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 643, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 669, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":640
+  /* "PETSc/SNES.pyx":666
  *         CHKERR( SNESSetUseFDColoring(self.snes, bval) )
  * 
  *     def getUseFD(self):             # <<<<<<<<<<<<<<
- *         cdef PetscBool bval = PETSC_FALSE
- *         CHKERR( SNESGetUseFDColoring(self.snes, &bval) )
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( SNESGetUseFDColoring(self.snes, &flag) )
  */
 
   /* function exit code */
@@ -170196,18 +180231,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_176getUseFD(struct PyPetscSNESO
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":647
+/* "PETSc/SNES.pyx":673
  *     # --- VI ---
  * 
- *     def setVariableBounds(self, Vec xl not None, Vec xu not None):             # <<<<<<<<<<<<<<
+ *     def setVariableBounds(self, Vec xl, Vec xu):             # <<<<<<<<<<<<<<
  *         CHKERR( SNESVISetVariableBounds(self.snes, xl.vec, xu.vec) )
  * 
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_179setVariableBounds(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_178setVariableBounds[] = "SNES.setVariableBounds(self, Vec xl, Vec xu)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_179setVariableBounds(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_189setVariableBounds(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_188setVariableBounds[] = "SNES.setVariableBounds(self, Vec xl, Vec xu)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_189setVariableBounds(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_xl = 0;
   struct PyPetscVecObject *__pyx_v_xu = 0;
   PyObject *__pyx_r = 0;
@@ -170221,7 +180256,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_179setVariableBounds(PyObject *
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -170230,14 +180267,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_179setVariableBounds(PyObject *
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_xl)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(36, 647, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setVariableBounds", 1, 2, 2, 1); __PYX_ERR(36, 673, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setVariableBounds") < 0)) __PYX_ERR(36, 647, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setVariableBounds") < 0)) __PYX_ERR(36, 673, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -170250,15 +180288,15 @@ 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_ERR(36, 647, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setVariableBounds", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 673, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_xl), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "xl", 0))) __PYX_ERR(36, 673, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_xu), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "xu", 0))) __PYX_ERR(36, 673, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_188setVariableBounds(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_xl, __pyx_v_xu);
 
   /* function exit code */
   goto __pyx_L0;
@@ -170269,25 +180307,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_179setVariableBounds(PyObject *
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_178setVariableBounds(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_xl, struct PyPetscVecObject *__pyx_v_xu) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_188setVariableBounds(struct PyPetscSNESObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_xl, struct PyPetscVecObject *__pyx_v_xu) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setVariableBounds", 0);
 
-  /* "PETSc/SNES.pyx":648
+  /* "PETSc/SNES.pyx":674
  * 
- *     def setVariableBounds(self, Vec xl not None, Vec xu not None):
+ *     def setVariableBounds(self, Vec xl, Vec xu):
  *         CHKERR( SNESVISetVariableBounds(self.snes, xl.vec, xu.vec) )             # <<<<<<<<<<<<<<
  * 
  *     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_ERR(36, 648, __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 == ((int)-1))) __PYX_ERR(36, 674, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":647
+  /* "PETSc/SNES.pyx":673
  *     # --- VI ---
  * 
- *     def setVariableBounds(self, Vec xl not None, Vec xu not None):             # <<<<<<<<<<<<<<
+ *     def setVariableBounds(self, Vec xl, Vec xu):             # <<<<<<<<<<<<<<
  *         CHKERR( SNESVISetVariableBounds(self.snes, xl.vec, xu.vec) )
  * 
  */
@@ -170304,7 +180342,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_178setVariableBounds(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":650
+/* "PETSc/SNES.pyx":676
  *         CHKERR( SNESVISetVariableBounds(self.snes, xl.vec, xu.vec) )
  * 
  *     def getVIInactiveSet(self):             # <<<<<<<<<<<<<<
@@ -170313,23 +180351,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_178setVariableBounds(struct PyP
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_181getVIInactiveSet(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_180getVIInactiveSet[] = "SNES.getVIInactiveSet(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_181getVIInactiveSet(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_191getVIInactiveSet(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_190getVIInactiveSet[] = "SNES.getVIInactiveSet(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_191getVIInactiveSet(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getVIInactiveSet (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getVIInactiveSet", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getVIInactiveSet", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_180getVIInactiveSet(((struct PyPetscSNESObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_190getVIInactiveSet(((struct PyPetscSNESObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_180getVIInactiveSet(struct PyPetscSNESObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_190getVIInactiveSet(struct PyPetscSNESObject *__pyx_v_self) {
   struct PyPetscISObject *__pyx_v_inact = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -170337,28 +180375,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_180getVIInactiveSet(struct PyPe
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getVIInactiveSet", 0);
 
-  /* "PETSc/SNES.pyx":651
+  /* "PETSc/SNES.pyx":677
  * 
  *     def getVIInactiveSet(self):
  *         cdef IS inact = IS()             # <<<<<<<<<<<<<<
  *         CHKERR( SNESVIGetInactiveSet(self.snes, &inact.iset) )
  *         PetscINCREF(inact.obj)
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 677, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_inact = ((struct PyPetscISObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":652
+  /* "PETSc/SNES.pyx":678
  *     def getVIInactiveSet(self):
  *         cdef IS inact = IS()
  *         CHKERR( SNESVIGetInactiveSet(self.snes, &inact.iset) )             # <<<<<<<<<<<<<<
  *         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_ERR(36, 652, __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 == ((int)-1))) __PYX_ERR(36, 678, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":653
+  /* "PETSc/SNES.pyx":679
  *         cdef IS inact = IS()
  *         CHKERR( SNESVIGetInactiveSet(self.snes, &inact.iset) )
  *         PetscINCREF(inact.obj)             # <<<<<<<<<<<<<<
@@ -170367,7 +180405,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_180getVIInactiveSet(struct PyPe
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_inact->__pyx_base.obj);
 
-  /* "PETSc/SNES.pyx":654
+  /* "PETSc/SNES.pyx":680
  *         CHKERR( SNESVIGetInactiveSet(self.snes, &inact.iset) )
  *         PetscINCREF(inact.obj)
  *         return inact             # <<<<<<<<<<<<<<
@@ -170379,7 +180417,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_180getVIInactiveSet(struct PyPe
   __pyx_r = ((PyObject *)__pyx_v_inact);
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":650
+  /* "PETSc/SNES.pyx":676
  *         CHKERR( SNESVISetVariableBounds(self.snes, xl.vec, xu.vec) )
  * 
  *     def getVIInactiveSet(self):             # <<<<<<<<<<<<<<
@@ -170399,7 +180437,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_180getVIInactiveSet(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":658
+/* "PETSc/SNES.pyx":684
  *     # --- Python ---
  * 
  *     def createPython(self, context=None, comm=None):             # <<<<<<<<<<<<<<
@@ -170408,9 +180446,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_180getVIInactiveSet(struct PyPe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_183createPython(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_182createPython[] = "SNES.createPython(self, context=None, comm=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_183createPython(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_193createPython(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_192createPython[] = "SNES.createPython(self, context=None, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_193createPython(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_context = 0;
   PyObject *__pyx_v_comm = 0;
   PyObject *__pyx_r = 0;
@@ -170426,7 +180464,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_183createPython(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -170437,6 +180477,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_183createPython(PyObject *__pyx
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_context);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -170444,12 +180485,14 @@ 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_ERR(36, 658, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createPython") < 0)) __PYX_ERR(36, 684, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -170459,20 +180502,20 @@ 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_ERR(36, 658, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createPython", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 684, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.createPython", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_182createPython(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_context, __pyx_v_comm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_192createPython(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_context, __pyx_v_comm);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_182createPython(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_context, PyObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_192createPython(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_context, PyObject *__pyx_v_comm) {
   MPI_Comm __pyx_v_ccomm;
   SNES __pyx_v_newsnes;
   PyObject *__pyx_r = NULL;
@@ -170481,17 +180524,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_182createPython(struct PyPetscS
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("createPython", 0);
 
-  /* "PETSc/SNES.pyx":659
+  /* "PETSc/SNES.pyx":685
  * 
  *     def createPython(self, context=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         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_ERR(36, 659, __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, 685, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/SNES.pyx":660
+  /* "PETSc/SNES.pyx":686
  *     def createPython(self, context=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscSNES newsnes = NULL             # <<<<<<<<<<<<<<
@@ -170500,16 +180543,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_182createPython(struct PyPetscS
  */
   __pyx_v_newsnes = NULL;
 
-  /* "PETSc/SNES.pyx":661
+  /* "PETSc/SNES.pyx":687
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscSNES newsnes = NULL
  *         CHKERR( SNESCreate(ccomm, &newsnes) )             # <<<<<<<<<<<<<<
  *         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_ERR(36, 661, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESCreate(__pyx_v_ccomm, (&__pyx_v_newsnes))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(36, 687, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":662
+  /* "PETSc/SNES.pyx":688
  *         cdef PetscSNES newsnes = NULL
  *         CHKERR( SNESCreate(ccomm, &newsnes) )
  *         PetscCLEAR(self.obj); self.snes = newsnes             # <<<<<<<<<<<<<<
@@ -170519,25 +180562,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_182createPython(struct PyPetscS
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->snes = __pyx_v_newsnes;
 
-  /* "PETSc/SNES.pyx":663
+  /* "PETSc/SNES.pyx":689
  *         CHKERR( SNESCreate(ccomm, &newsnes) )
  *         PetscCLEAR(self.obj); self.snes = newsnes
  *         CHKERR( SNESSetType(self.snes, SNESPYTHON) )             # <<<<<<<<<<<<<<
  *         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_ERR(36, 663, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESSetType(__pyx_v_self->snes, SNESPYTHON)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(36, 689, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":664
+  /* "PETSc/SNES.pyx":690
  *         PetscCLEAR(self.obj); self.snes = newsnes
  *         CHKERR( SNESSetType(self.snes, SNESPYTHON) )
  *         CHKERR( SNESPythonSetContext(self.snes, <void*>context) )             # <<<<<<<<<<<<<<
  *         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_ERR(36, 664, __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 == ((int)-1))) __PYX_ERR(36, 690, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":665
+  /* "PETSc/SNES.pyx":691
  *         CHKERR( SNESSetType(self.snes, SNESPYTHON) )
  *         CHKERR( SNESPythonSetContext(self.snes, <void*>context) )
  *         return self             # <<<<<<<<<<<<<<
@@ -170549,7 +180592,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_182createPython(struct PyPetscS
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":658
+  /* "PETSc/SNES.pyx":684
  *     # --- Python ---
  * 
  *     def createPython(self, context=None, comm=None):             # <<<<<<<<<<<<<<
@@ -170567,7 +180610,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_182createPython(struct PyPetscS
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":667
+/* "PETSc/SNES.pyx":693
  *         return self
  * 
  *     def setPythonContext(self, context):             # <<<<<<<<<<<<<<
@@ -170576,9 +180619,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_182createPython(struct PyPetscS
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_185setPythonContext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_195setPythonContext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_194setPythonContext[] = "SNES.setPythonContext(self, context)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_195setPythonContext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_context = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -170591,6 +180634,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_185setPythonContext(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -170601,7 +180645,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_ERR(36, 667, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPythonContext") < 0)) __PYX_ERR(36, 693, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -170612,35 +180656,35 @@ 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_ERR(36, 667, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setPythonContext", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 693, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setPythonContext", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_184setPythonContext(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_context);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_194setPythonContext(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_context);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_184setPythonContext(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_context) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_194setPythonContext(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_context) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setPythonContext", 0);
 
-  /* "PETSc/SNES.pyx":668
+  /* "PETSc/SNES.pyx":694
  * 
  *     def setPythonContext(self, context):
  *         CHKERR( SNESPythonSetContext(self.snes, <void*>context) )             # <<<<<<<<<<<<<<
  * 
  *     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_ERR(36, 668, __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 == ((int)-1))) __PYX_ERR(36, 694, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":667
+  /* "PETSc/SNES.pyx":693
  *         return self
  * 
  *     def setPythonContext(self, context):             # <<<<<<<<<<<<<<
@@ -170660,7 +180704,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_184setPythonContext(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":670
+/* "PETSc/SNES.pyx":696
  *         CHKERR( SNESPythonSetContext(self.snes, <void*>context) )
  * 
  *     def getPythonContext(self):             # <<<<<<<<<<<<<<
@@ -170669,23 +180713,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_184setPythonContext(struct PyPe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_187getPythonContext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_186getPythonContext[] = "SNES.getPythonContext(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_187getPythonContext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_197getPythonContext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_196getPythonContext[] = "SNES.getPythonContext(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_197getPythonContext(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_4SNES_186getPythonContext(((struct PyPetscSNESObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_196getPythonContext(((struct PyPetscSNESObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_186getPythonContext(struct PyPetscSNESObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_196getPythonContext(struct PyPetscSNESObject *__pyx_v_self) {
   void *__pyx_v_context;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -170693,7 +180737,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_186getPythonContext(struct PyPe
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getPythonContext", 0);
 
-  /* "PETSc/SNES.pyx":671
+  /* "PETSc/SNES.pyx":697
  * 
  *     def getPythonContext(self):
  *         cdef void *context = NULL             # <<<<<<<<<<<<<<
@@ -170702,16 +180746,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_186getPythonContext(struct PyPe
  */
   __pyx_v_context = NULL;
 
-  /* "PETSc/SNES.pyx":672
+  /* "PETSc/SNES.pyx":698
  *     def getPythonContext(self):
  *         cdef void *context = NULL
  *         CHKERR( SNESPythonGetContext(self.snes, &context) )             # <<<<<<<<<<<<<<
  *         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_ERR(36, 672, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESPythonGetContext(__pyx_v_self->snes, (&__pyx_v_context))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(36, 698, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":673
+  /* "PETSc/SNES.pyx":699
  *         cdef void *context = NULL
  *         CHKERR( SNESPythonGetContext(self.snes, &context) )
  *         if context == NULL: return None             # <<<<<<<<<<<<<<
@@ -170726,7 +180770,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_186getPythonContext(struct PyPe
     goto __pyx_L0;
   }
 
-  /* "PETSc/SNES.pyx":674
+  /* "PETSc/SNES.pyx":700
  *         CHKERR( SNESPythonGetContext(self.snes, &context) )
  *         if context == NULL: return None
  *         else: return <object> context             # <<<<<<<<<<<<<<
@@ -170740,7 +180784,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_186getPythonContext(struct PyPe
     goto __pyx_L0;
   }
 
-  /* "PETSc/SNES.pyx":670
+  /* "PETSc/SNES.pyx":696
  *         CHKERR( SNESPythonSetContext(self.snes, <void*>context) )
  * 
  *     def getPythonContext(self):             # <<<<<<<<<<<<<<
@@ -170758,7 +180802,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_186getPythonContext(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":676
+/* "PETSc/SNES.pyx":702
  *         else: return <object> context
  * 
  *     def setPythonType(self, py_type):             # <<<<<<<<<<<<<<
@@ -170767,9 +180811,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_186getPythonContext(struct PyPe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_189setPythonType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_199setPythonType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_198setPythonType[] = "SNES.setPythonType(self, py_type)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_199setPythonType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_py_type = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -170782,6 +180826,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_189setPythonType(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -170792,7 +180837,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_ERR(36, 676, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPythonType") < 0)) __PYX_ERR(36, 702, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -170803,20 +180848,20 @@ 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_ERR(36, 676, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setPythonType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 702, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.setPythonType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_188setPythonType(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_py_type);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_198setPythonType(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_py_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_188setPythonType(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_py_type) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_198setPythonType(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_py_type) {
   const char *__pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -170825,7 +180870,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_188setPythonType(struct PyPetsc
   __Pyx_RefNannySetupContext("setPythonType", 0);
   __Pyx_INCREF(__pyx_v_py_type);
 
-  /* "PETSc/SNES.pyx":677
+  /* "PETSc/SNES.pyx":703
  * 
  *     def setPythonType(self, py_type):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -170834,28 +180879,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_188setPythonType(struct PyPetsc
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/SNES.pyx":678
+  /* "PETSc/SNES.pyx":704
  *     def setPythonType(self, py_type):
  *         cdef const_char *cval = NULL
  *         py_type = str2bytes(py_type, &cval)             # <<<<<<<<<<<<<<
  *         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_ERR(36, 678, __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, 704, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_py_type, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":679
+  /* "PETSc/SNES.pyx":705
  *         cdef const_char *cval = NULL
  *         py_type = str2bytes(py_type, &cval)
  *         CHKERR( SNESPythonSetType(self.snes, cval) )             # <<<<<<<<<<<<<<
  * 
  *     # --- Composite ---
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESPythonSetType(__pyx_v_self->snes, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(36, 705, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":676
+  /* "PETSc/SNES.pyx":702
  *         else: return <object> context
  * 
  *     def setPythonType(self, py_type):             # <<<<<<<<<<<<<<
@@ -170877,7 +180922,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_188setPythonType(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":683
+/* "PETSc/SNES.pyx":709
  *     # --- Composite ---
  * 
  *     def getCompositeSNES(self, n):             # <<<<<<<<<<<<<<
@@ -170886,9 +180931,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_188setPythonType(struct PyPetsc
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_191getCompositeSNES(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_201getCompositeSNES(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_200getCompositeSNES[] = "SNES.getCompositeSNES(self, n)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_201getCompositeSNES(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_n = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -170901,6 +180946,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_191getCompositeSNES(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -170911,7 +180957,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_ERR(36, 683, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getCompositeSNES") < 0)) __PYX_ERR(36, 709, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -170922,20 +180968,20 @@ 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_ERR(36, 683, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getCompositeSNES", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 709, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.SNES.getCompositeSNES", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_190getCompositeSNES(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_n);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_200getCompositeSNES(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_n);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_190getCompositeSNES(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_n) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_200getCompositeSNES(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_n) {
   PetscInt __pyx_v_cn;
   struct PyPetscSNESObject *__pyx_v_snes = 0;
   PyObject *__pyx_r = NULL;
@@ -170945,38 +180991,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_190getCompositeSNES(struct PyPe
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("getCompositeSNES", 0);
 
-  /* "PETSc/SNES.pyx":685
+  /* "PETSc/SNES.pyx":711
  *     def getCompositeSNES(self, n):
  *         cdef PetscInt cn
  *         cdef SNES snes = SNES()             # <<<<<<<<<<<<<<
  *         cn = asInt(n)
  *         CHKERR( SNESCompositeGetSNES(self.snes, cn, &snes.snes) )
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 711, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_snes = ((struct PyPetscSNESObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/SNES.pyx":686
+  /* "PETSc/SNES.pyx":712
  *         cdef PetscInt cn
  *         cdef SNES snes = SNES()
  *         cn = asInt(n)             # <<<<<<<<<<<<<<
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(36, 686, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_n); if (unlikely(__pyx_t_2 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(36, 712, __pyx_L1_error)
   __pyx_v_cn = __pyx_t_2;
 
-  /* "PETSc/SNES.pyx":687
+  /* "PETSc/SNES.pyx":713
  *         cdef SNES snes = SNES()
  *         cn = asInt(n)
  *         CHKERR( SNESCompositeGetSNES(self.snes, cn, &snes.snes) )             # <<<<<<<<<<<<<<
  *         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_ERR(36, 687, __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 == ((int)-1))) __PYX_ERR(36, 713, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":688
+  /* "PETSc/SNES.pyx":714
  *         cn = asInt(n)
  *         CHKERR( SNESCompositeGetSNES(self.snes, cn, &snes.snes) )
  *         PetscINCREF(snes.obj)             # <<<<<<<<<<<<<<
@@ -170985,7 +181031,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_190getCompositeSNES(struct PyPe
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_snes->__pyx_base.obj);
 
-  /* "PETSc/SNES.pyx":689
+  /* "PETSc/SNES.pyx":715
  *         CHKERR( SNESCompositeGetSNES(self.snes, cn, &snes.snes) )
  *         PetscINCREF(snes.obj)
  *         return snes             # <<<<<<<<<<<<<<
@@ -170997,7 +181043,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_190getCompositeSNES(struct PyPe
   __pyx_r = ((PyObject *)__pyx_v_snes);
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":683
+  /* "PETSc/SNES.pyx":709
  *     # --- Composite ---
  * 
  *     def getCompositeSNES(self, n):             # <<<<<<<<<<<<<<
@@ -171017,7 +181063,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_190getCompositeSNES(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":691
+/* "PETSc/SNES.pyx":717
  *         return snes
  * 
  *     def getCompositeNumber(self):             # <<<<<<<<<<<<<<
@@ -171026,23 +181072,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_190getCompositeSNES(struct PyPe
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_193getCompositeNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_4SNES_192getCompositeNumber[] = "SNES.getCompositeNumber(self)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_193getCompositeNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_203getCompositeNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_202getCompositeNumber[] = "SNES.getCompositeNumber(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_203getCompositeNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getCompositeNumber (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getCompositeNumber", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getCompositeNumber", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_192getCompositeNumber(((struct PyPetscSNESObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_202getCompositeNumber(((struct PyPetscSNESObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_192getCompositeNumber(struct PyPetscSNESObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_202getCompositeNumber(struct PyPetscSNESObject *__pyx_v_self) {
   PetscInt __pyx_v_cn;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -171050,7 +181096,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_192getCompositeNumber(struct Py
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getCompositeNumber", 0);
 
-  /* "PETSc/SNES.pyx":692
+  /* "PETSc/SNES.pyx":718
  * 
  *     def getCompositeNumber(self):
  *         cdef PetscInt cn = 0             # <<<<<<<<<<<<<<
@@ -171059,30 +181105,30 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_192getCompositeNumber(struct Py
  */
   __pyx_v_cn = 0;
 
-  /* "PETSc/SNES.pyx":693
+  /* "PETSc/SNES.pyx":719
  *     def getCompositeNumber(self):
  *         cdef PetscInt cn = 0
  *         CHKERR( SNESCompositeGetNumber(self.snes, &cn) )             # <<<<<<<<<<<<<<
  *         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_ERR(36, 693, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESCompositeGetNumber(__pyx_v_self->snes, (&__pyx_v_cn))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(36, 719, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":694
+  /* "PETSc/SNES.pyx":720
  *         cdef PetscInt cn = 0
  *         CHKERR( SNESCompositeGetNumber(self.snes, &cn) )
  *         return toInt(cn)             # <<<<<<<<<<<<<<
  * 
- *     # --- application context ---
+ *     # --- NASM ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_cn); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 694, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_cn); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 720, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":691
+  /* "PETSc/SNES.pyx":717
  *         return snes
  * 
  *     def getCompositeNumber(self):             # <<<<<<<<<<<<<<
@@ -171101,7 +181147,232 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_192getCompositeNumber(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":699
+/* "PETSc/SNES.pyx":724
+ *     # --- NASM ---
+ * 
+ *     def getNASMSNES(self, n):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cn = asInt(n)
+ *         cdef SNES snes = SNES()
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_205getNASMSNES(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_204getNASMSNES[] = "SNES.getNASMSNES(self, n)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_205getNASMSNES(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_n = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getNASMSNES (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_n,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);
+        CYTHON_FALLTHROUGH;
+        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_n)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getNASMSNES") < 0)) __PYX_ERR(36, 724, __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_n = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("getNASMSNES", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(36, 724, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.SNES.getNASMSNES", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_204getNASMSNES(((struct PyPetscSNESObject *)__pyx_v_self), __pyx_v_n);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_204getNASMSNES(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_n) {
+  PetscInt __pyx_v_cn;
+  struct PyPetscSNESObject *__pyx_v_snes = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
+  __Pyx_RefNannySetupContext("getNASMSNES", 0);
+
+  /* "PETSc/SNES.pyx":725
+ * 
+ *     def getNASMSNES(self, n):
+ *         cdef PetscInt cn = asInt(n)             # <<<<<<<<<<<<<<
+ *         cdef SNES snes = SNES()
+ *         CHKERR( SNESNASMGetSNES(self.snes, cn, &snes.snes) )
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_n); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(36, 725, __pyx_L1_error)
+  __pyx_v_cn = __pyx_t_1;
+
+  /* "PETSc/SNES.pyx":726
+ *     def getNASMSNES(self, n):
+ *         cdef PetscInt cn = asInt(n)
+ *         cdef SNES snes = SNES()             # <<<<<<<<<<<<<<
+ *         CHKERR( SNESNASMGetSNES(self.snes, cn, &snes.snes) )
+ *         PetscINCREF(snes.obj)
+ */
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 726, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_v_snes = ((struct PyPetscSNESObject *)__pyx_t_2);
+  __pyx_t_2 = 0;
+
+  /* "PETSc/SNES.pyx":727
+ *         cdef PetscInt cn = asInt(n)
+ *         cdef SNES snes = SNES()
+ *         CHKERR( SNESNASMGetSNES(self.snes, cn, &snes.snes) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(snes.obj)
+ *         return snes
+ */
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESNASMGetSNES(__pyx_v_self->snes, __pyx_v_cn, (&__pyx_v_snes->snes))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(36, 727, __pyx_L1_error)
+
+  /* "PETSc/SNES.pyx":728
+ *         cdef SNES snes = SNES()
+ *         CHKERR( SNESNASMGetSNES(self.snes, cn, &snes.snes) )
+ *         PetscINCREF(snes.obj)             # <<<<<<<<<<<<<<
+ *         return snes
+ * 
+ */
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_snes->__pyx_base.obj);
+
+  /* "PETSc/SNES.pyx":729
+ *         CHKERR( SNESNASMGetSNES(self.snes, cn, &snes.snes) )
+ *         PetscINCREF(snes.obj)
+ *         return snes             # <<<<<<<<<<<<<<
+ * 
+ *     def getNASMNumber(self):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_snes));
+  __pyx_r = ((PyObject *)__pyx_v_snes);
+  goto __pyx_L0;
+
+  /* "PETSc/SNES.pyx":724
+ *     # --- NASM ---
+ * 
+ *     def getNASMSNES(self, n):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cn = asInt(n)
+ *         cdef SNES snes = SNES()
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.SNES.getNASMSNES", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_snes);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/SNES.pyx":731
+ *         return snes
+ * 
+ *     def getNASMNumber(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cn = 0
+ *         CHKERR( SNESNASMGetNumber(self.snes, &cn) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_207getNASMNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_4SNES_206getNASMNumber[] = "SNES.getNASMNumber(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_207getNASMNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getNASMNumber (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getNASMNumber", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getNASMNumber", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_206getNASMNumber(((struct PyPetscSNESObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_206getNASMNumber(struct PyPetscSNESObject *__pyx_v_self) {
+  PetscInt __pyx_v_cn;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getNASMNumber", 0);
+
+  /* "PETSc/SNES.pyx":732
+ * 
+ *     def getNASMNumber(self):
+ *         cdef PetscInt cn = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( SNESNASMGetNumber(self.snes, &cn) )
+ *         return toInt(cn)
+ */
+  __pyx_v_cn = 0;
+
+  /* "PETSc/SNES.pyx":733
+ *     def getNASMNumber(self):
+ *         cdef PetscInt cn = 0
+ *         CHKERR( SNESNASMGetNumber(self.snes, &cn) )             # <<<<<<<<<<<<<<
+ *         return toInt(cn)
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(SNESNASMGetNumber(__pyx_v_self->snes, (&__pyx_v_cn))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(36, 733, __pyx_L1_error)
+
+  /* "PETSc/SNES.pyx":734
+ *         cdef PetscInt cn = 0
+ *         CHKERR( SNESNASMGetNumber(self.snes, &cn) )
+ *         return toInt(cn)             # <<<<<<<<<<<<<<
+ * 
+ *     # --- application context ---
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_cn); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 734, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/SNES.pyx":731
+ *         return snes
+ * 
+ *     def getNASMNumber(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cn = 0
+ *         CHKERR( SNESNASMGetNumber(self.snes, &cn) )
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.SNES.getNASMNumber", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/SNES.pyx":739
  * 
  *     property appctx:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -171130,7 +181401,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6appctx___get__(struct PyPetscS
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/SNES.pyx":700
+  /* "PETSc/SNES.pyx":740
  *     property appctx:
  *         def __get__(self):
  *             return self.getAppCtx()             # <<<<<<<<<<<<<<
@@ -171138,10 +181409,10 @@ 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_ERR(36, 700, __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, 740, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -171151,10 +181422,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_ERR(36, 700, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 740, __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(36, 700, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 740, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -171162,7 +181433,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6appctx___get__(struct PyPetscS
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":699
+  /* "PETSc/SNES.pyx":739
  * 
  *     property appctx:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -171183,7 +181454,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6appctx___get__(struct PyPetscS
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":701
+/* "PETSc/SNES.pyx":741
  *         def __get__(self):
  *             return self.getAppCtx()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -171213,17 +181484,17 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_6appctx_2__set__(struct PyPetscSNESOb
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/SNES.pyx":702
+  /* "PETSc/SNES.pyx":742
  *             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_ERR(36, 702, __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, 742, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -171233,23 +181504,41 @@ 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_ERR(36, 702, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 742, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(36, 702, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 742, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 742, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 742, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 742, __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/SNES.pyx":701
+  /* "PETSc/SNES.pyx":741
  *         def __get__(self):
  *             return self.getAppCtx()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -171272,7 +181561,7 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_6appctx_2__set__(struct PyPetscSNESOb
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":707
+/* "PETSc/SNES.pyx":747
  * 
  *     property dm:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -171301,7 +181590,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_2dm___get__(struct PyPetscSNESO
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/SNES.pyx":708
+  /* "PETSc/SNES.pyx":748
  *     property dm:
  *         def __get__(self):
  *             return self.getDM()             # <<<<<<<<<<<<<<
@@ -171309,10 +181598,10 @@ 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_ERR(36, 708, __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, 748, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -171322,10 +181611,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_ERR(36, 708, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 748, __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(36, 708, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 748, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -171333,7 +181622,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_2dm___get__(struct PyPetscSNESO
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":707
+  /* "PETSc/SNES.pyx":747
  * 
  *     property dm:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -171354,7 +181643,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_2dm___get__(struct PyPetscSNESO
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":709
+/* "PETSc/SNES.pyx":749
  *         def __get__(self):
  *             return self.getDM()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -171384,17 +181673,17 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_2dm_2__set__(struct PyPetscSNESObject
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/SNES.pyx":710
+  /* "PETSc/SNES.pyx":750
  *             return self.getDM()
  *         def __set__(self, value):
  *             self.setDM(value)             # <<<<<<<<<<<<<<
  * 
  *     # --- nonlinear preconditioner ---
  */
-  __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_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setDM); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 750, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -171404,23 +181693,41 @@ 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_ERR(36, 710, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 750, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(36, 710, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 750, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 750, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 750, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 750, __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/SNES.pyx":709
+  /* "PETSc/SNES.pyx":749
  *         def __get__(self):
  *             return self.getDM()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -171443,7 +181750,7 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_2dm_2__set__(struct PyPetscSNESObject
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":715
+/* "PETSc/SNES.pyx":755
  * 
  *     property npc:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -171472,7 +181779,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_3npc___get__(struct PyPetscSNES
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/SNES.pyx":716
+  /* "PETSc/SNES.pyx":756
  *     property npc:
  *         def __get__(self):
  *             return self.getNPC()             # <<<<<<<<<<<<<<
@@ -171480,10 +181787,10 @@ 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_ERR(36, 716, __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, 756, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -171493,10 +181800,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_ERR(36, 716, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 756, __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(36, 716, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 756, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -171504,7 +181811,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_3npc___get__(struct PyPetscSNES
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":715
+  /* "PETSc/SNES.pyx":755
  * 
  *     property npc:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -171525,7 +181832,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_3npc___get__(struct PyPetscSNES
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":717
+/* "PETSc/SNES.pyx":757
  *         def __get__(self):
  *             return self.getNPC()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -171555,17 +181862,17 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_3npc_2__set__(struct PyPetscSNESObjec
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/SNES.pyx":718
+  /* "PETSc/SNES.pyx":758
  *             return self.getNPC()
  *         def __set__(self, value):
  *             self.setNPC(value)             # <<<<<<<<<<<<<<
  * 
  *     # --- vectors ---
  */
-  __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_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setNPC); 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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -171575,23 +181882,41 @@ 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_ERR(36, 718, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 758, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(36, 718, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 758, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 758, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 758, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 758, __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/SNES.pyx":717
+  /* "PETSc/SNES.pyx":757
  *         def __get__(self):
  *             return self.getNPC()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -171614,7 +181939,7 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_3npc_2__set__(struct PyPetscSNESObjec
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":723
+/* "PETSc/SNES.pyx":763
  * 
  *     property vec_sol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -171643,7 +181968,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7vec_sol___get__(struct PyPetsc
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/SNES.pyx":724
+  /* "PETSc/SNES.pyx":764
  *     property vec_sol:
  *         def __get__(self):
  *             return self.getSolution()             # <<<<<<<<<<<<<<
@@ -171651,10 +181976,10 @@ 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_ERR(36, 724, __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, 764, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -171664,10 +181989,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_ERR(36, 724, __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_ERR(36, 724, __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;
@@ -171675,7 +182000,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7vec_sol___get__(struct PyPetsc
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":723
+  /* "PETSc/SNES.pyx":763
  * 
  *     property vec_sol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -171696,7 +182021,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7vec_sol___get__(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":727
+/* "PETSc/SNES.pyx":767
  * 
  *     property vec_upd:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -171725,7 +182050,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7vec_upd___get__(struct PyPetsc
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/SNES.pyx":728
+  /* "PETSc/SNES.pyx":768
  *     property vec_upd:
  *         def __get__(self):
  *             return self.getSolutionUpdate()             # <<<<<<<<<<<<<<
@@ -171733,10 +182058,10 @@ 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_ERR(36, 728, __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, 768, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -171746,10 +182071,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_ERR(36, 728, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 768, __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(36, 728, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 768, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -171757,7 +182082,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7vec_upd___get__(struct PyPetsc
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":727
+  /* "PETSc/SNES.pyx":767
  * 
  *     property vec_upd:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -171778,7 +182103,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7vec_upd___get__(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":731
+/* "PETSc/SNES.pyx":771
  * 
  *     property vec_rhs:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -171807,7 +182132,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7vec_rhs___get__(struct PyPetsc
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/SNES.pyx":732
+  /* "PETSc/SNES.pyx":772
  *     property vec_rhs:
  *         def __get__(self):
  *             return self.getRhs()             # <<<<<<<<<<<<<<
@@ -171815,10 +182140,10 @@ 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_ERR(36, 732, __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, 772, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -171828,10 +182153,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_ERR(36, 732, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 772, __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(36, 732, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 772, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -171839,7 +182164,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7vec_rhs___get__(struct PyPetsc
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":731
+  /* "PETSc/SNES.pyx":771
  * 
  *     property vec_rhs:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -171860,7 +182185,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7vec_rhs___get__(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":737
+/* "PETSc/SNES.pyx":777
  * 
  *     property ksp:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -171889,7 +182214,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_3ksp___get__(struct PyPetscSNES
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/SNES.pyx":738
+  /* "PETSc/SNES.pyx":778
  *     property ksp:
  *         def __get__(self):
  *             return self.getKSP()             # <<<<<<<<<<<<<<
@@ -171897,10 +182222,10 @@ 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_ERR(36, 738, __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, 778, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -171910,10 +182235,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_ERR(36, 738, __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_ERR(36, 738, __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;
@@ -171921,7 +182246,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_3ksp___get__(struct PyPetscSNES
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":737
+  /* "PETSc/SNES.pyx":777
  * 
  *     property ksp:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -171942,7 +182267,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_3ksp___get__(struct PyPetscSNES
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":739
+/* "PETSc/SNES.pyx":779
  *         def __get__(self):
  *             return self.getKSP()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -171972,17 +182297,17 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_3ksp_2__set__(struct PyPetscSNESObjec
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/SNES.pyx":740
+  /* "PETSc/SNES.pyx":780
  *             return self.getKSP()
  *         def __set__(self, value):
  *             self.setKSP(value)             # <<<<<<<<<<<<<<
  * 
  *     property use_ew:
  */
-  __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_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setKSP); 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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -171992,23 +182317,41 @@ 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_ERR(36, 740, __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_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_ERR(36, 740, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 780, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 780, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __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_ERR(36, 780, __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/SNES.pyx":739
+  /* "PETSc/SNES.pyx":779
  *         def __get__(self):
  *             return self.getKSP()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -172031,7 +182374,7 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_3ksp_2__set__(struct PyPetscSNESObjec
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":743
+/* "PETSc/SNES.pyx":783
  * 
  *     property use_ew:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -172060,7 +182403,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6use_ew___get__(struct PyPetscS
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/SNES.pyx":744
+  /* "PETSc/SNES.pyx":784
  *     property use_ew:
  *         def __get__(self):
  *             return self.getUseEW()             # <<<<<<<<<<<<<<
@@ -172068,10 +182411,10 @@ 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_ERR(36, 744, __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, 784, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -172081,10 +182424,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_ERR(36, 744, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 784, __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(36, 744, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 784, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -172092,7 +182435,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6use_ew___get__(struct PyPetscS
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":743
+  /* "PETSc/SNES.pyx":783
  * 
  *     property use_ew:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -172113,7 +182456,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6use_ew___get__(struct PyPetscS
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":745
+/* "PETSc/SNES.pyx":785
  *         def __get__(self):
  *             return self.getUseEW()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -172143,17 +182486,17 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_6use_ew_2__set__(struct PyPetscSNESOb
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/SNES.pyx":746
+  /* "PETSc/SNES.pyx":786
  *             return self.getUseEW()
  *         def __set__(self, value):
  *             self.setUseEW(value)             # <<<<<<<<<<<<<<
  * 
  *     # --- tolerances ---
  */
-  __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_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setUseEW); 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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -172163,23 +182506,41 @@ 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_ERR(36, 746, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 786, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(36, 746, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 786, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 786, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 786, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 786, __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/SNES.pyx":745
+  /* "PETSc/SNES.pyx":785
  *         def __get__(self):
  *             return self.getUseEW()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -172202,7 +182563,7 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_6use_ew_2__set__(struct PyPetscSNESOb
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":751
+/* "PETSc/SNES.pyx":791
  * 
  *     property rtol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -172231,7 +182592,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_4rtol___get__(struct PyPetscSNE
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/SNES.pyx":752
+  /* "PETSc/SNES.pyx":792
  *     property rtol:
  *         def __get__(self):
  *             return self.getTolerances()[0]             # <<<<<<<<<<<<<<
@@ -172239,10 +182600,10 @@ 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_ERR(36, 752, __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, 792, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -172252,21 +182613,21 @@ 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_ERR(36, 752, __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_ERR(36, 752, __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;
-  __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_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, 792, __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/SNES.pyx":751
+  /* "PETSc/SNES.pyx":791
  * 
  *     property rtol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -172287,7 +182648,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_4rtol___get__(struct PyPetscSNE
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":753
+/* "PETSc/SNES.pyx":793
  *         def __get__(self):
  *             return self.getTolerances()[0]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -172316,25 +182677,25 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_4rtol_2__set__(struct PyPetscSNESObje
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/SNES.pyx":754
+  /* "PETSc/SNES.pyx":794
  *             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_ERR(36, 754, __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, 794, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 754, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 794, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  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)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_rtol, __pyx_v_value) < 0) __PYX_ERR(36, 794, __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, 794, __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/SNES.pyx":753
+  /* "PETSc/SNES.pyx":793
  *         def __get__(self):
  *             return self.getTolerances()[0]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -172356,7 +182717,7 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_4rtol_2__set__(struct PyPetscSNESObje
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":757
+/* "PETSc/SNES.pyx":797
  * 
  *     property atol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -172385,7 +182746,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_4atol___get__(struct PyPetscSNE
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/SNES.pyx":758
+  /* "PETSc/SNES.pyx":798
  *     property atol:
  *         def __get__(self):
  *             return self.getTolerances()[1]             # <<<<<<<<<<<<<<
@@ -172393,10 +182754,10 @@ 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_ERR(36, 758, __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, 798, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -172406,21 +182767,21 @@ 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_ERR(36, 758, __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_ERR(36, 758, __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;
-  __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_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, 798, __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/SNES.pyx":757
+  /* "PETSc/SNES.pyx":797
  * 
  *     property atol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -172441,7 +182802,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_4atol___get__(struct PyPetscSNE
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":759
+/* "PETSc/SNES.pyx":799
  *         def __get__(self):
  *             return self.getTolerances()[1]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -172470,25 +182831,25 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_4atol_2__set__(struct PyPetscSNESObje
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/SNES.pyx":760
+  /* "PETSc/SNES.pyx":800
  *             return self.getTolerances()[1]
  *         def __set__(self, value):
  *             self.setTolerances(atol=value)             # <<<<<<<<<<<<<<
  * 
  *     property stol:
  */
-  __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_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setTolerances); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 800, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 760, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 800, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  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)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_atol, __pyx_v_value) < 0) __PYX_ERR(36, 800, __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, 800, __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/SNES.pyx":759
+  /* "PETSc/SNES.pyx":799
  *         def __get__(self):
  *             return self.getTolerances()[1]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -172510,7 +182871,7 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_4atol_2__set__(struct PyPetscSNESObje
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":763
+/* "PETSc/SNES.pyx":803
  * 
  *     property stol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -172539,7 +182900,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_4stol___get__(struct PyPetscSNE
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/SNES.pyx":764
+  /* "PETSc/SNES.pyx":804
  *     property stol:
  *         def __get__(self):
  *             return self.getTolerances()[2]             # <<<<<<<<<<<<<<
@@ -172547,10 +182908,10 @@ 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_ERR(36, 764, __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, 804, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -172560,21 +182921,21 @@ 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_ERR(36, 764, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 804, __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(36, 764, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 804, __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(36, 764, __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, 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;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":763
+  /* "PETSc/SNES.pyx":803
  * 
  *     property stol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -172595,7 +182956,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_4stol___get__(struct PyPetscSNE
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":765
+/* "PETSc/SNES.pyx":805
  *         def __get__(self):
  *             return self.getTolerances()[2]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -172624,25 +182985,25 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_4stol_2__set__(struct PyPetscSNESObje
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/SNES.pyx":766
+  /* "PETSc/SNES.pyx":806
  *             return self.getTolerances()[2]
  *         def __set__(self, value):
  *             self.setTolerances(stol=value)             # <<<<<<<<<<<<<<
  * 
  *     property max_it:
  */
-  __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_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setTolerances); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 806, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 766, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 806, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  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)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_stol, __pyx_v_value) < 0) __PYX_ERR(36, 806, __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, 806, __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/SNES.pyx":765
+  /* "PETSc/SNES.pyx":805
  *         def __get__(self):
  *             return self.getTolerances()[2]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -172664,7 +183025,7 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_4stol_2__set__(struct PyPetscSNESObje
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":769
+/* "PETSc/SNES.pyx":809
  * 
  *     property max_it:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -172693,7 +183054,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6max_it___get__(struct PyPetscS
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/SNES.pyx":770
+  /* "PETSc/SNES.pyx":810
  *     property max_it:
  *         def __get__(self):
  *             return self.getTolerances()[3]             # <<<<<<<<<<<<<<
@@ -172701,10 +183062,10 @@ 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_ERR(36, 770, __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, 810, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -172714,21 +183075,21 @@ 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_ERR(36, 770, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 810, __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(36, 770, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 810, __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)) __PYX_ERR(36, 770, __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, 810, __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/SNES.pyx":769
+  /* "PETSc/SNES.pyx":809
  * 
  *     property max_it:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -172749,7 +183110,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6max_it___get__(struct PyPetscS
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":771
+/* "PETSc/SNES.pyx":811
  *         def __get__(self):
  *             return self.getTolerances()[3]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -172778,25 +183139,25 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_6max_it_2__set__(struct PyPetscSNESOb
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/SNES.pyx":772
+  /* "PETSc/SNES.pyx":812
  *             return self.getTolerances()[3]
  *         def __set__(self, value):
  *             self.setTolerances(max_it=value)             # <<<<<<<<<<<<<<
  * 
  *     # --- more tolerances ---
  */
-  __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_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setTolerances); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 812, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 772, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 812, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_max_it, __pyx_v_value) < 0) __PYX_ERR(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)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_max_it, __pyx_v_value) < 0) __PYX_ERR(36, 812, __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, 812, __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/SNES.pyx":771
+  /* "PETSc/SNES.pyx":811
  *         def __get__(self):
  *             return self.getTolerances()[3]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -172818,7 +183179,7 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_6max_it_2__set__(struct PyPetscSNESOb
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":777
+/* "PETSc/SNES.pyx":817
  * 
  *     property max_funcs:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -172847,7 +183208,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_9max_funcs___get__(struct PyPet
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/SNES.pyx":778
+  /* "PETSc/SNES.pyx":818
  *     property max_funcs:
  *         def __get__(self):
  *             return self.getMaxFunctionEvaluations()             # <<<<<<<<<<<<<<
@@ -172855,10 +183216,10 @@ 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_ERR(36, 778, __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, 818, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -172868,10 +183229,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_ERR(36, 778, __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_ERR(36, 778, __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;
@@ -172879,7 +183240,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_9max_funcs___get__(struct PyPet
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":777
+  /* "PETSc/SNES.pyx":817
  * 
  *     property max_funcs:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -172900,7 +183261,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_9max_funcs___get__(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":779
+/* "PETSc/SNES.pyx":819
  *         def __get__(self):
  *             return self.getMaxFunctionEvaluations()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -172930,17 +183291,17 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_9max_funcs_2__set__(struct PyPetscSNE
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/SNES.pyx":780
+  /* "PETSc/SNES.pyx":820
  *             return self.getMaxFunctionEvaluations()
  *         def __set__(self, value):
  *             self.setMaxFunctionEvaluations(value)             # <<<<<<<<<<<<<<
  * 
  *     # --- iteration ---
  */
-  __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_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setMaxFunctionEvaluations); 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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -172950,23 +183311,41 @@ 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_ERR(36, 780, __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_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_ERR(36, 780, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 820, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 820, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __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_ERR(36, 820, __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/SNES.pyx":779
+  /* "PETSc/SNES.pyx":819
  *         def __get__(self):
  *             return self.getMaxFunctionEvaluations()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -172989,7 +183368,7 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_9max_funcs_2__set__(struct PyPetscSNE
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":785
+/* "PETSc/SNES.pyx":825
  * 
  *     property its:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -173018,7 +183397,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_3its___get__(struct PyPetscSNES
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/SNES.pyx":786
+  /* "PETSc/SNES.pyx":826
  *     property its:
  *         def __get__(self):
  *             return self.getIterationNumber()             # <<<<<<<<<<<<<<
@@ -173026,10 +183405,10 @@ 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_ERR(36, 786, __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, 826, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -173039,10 +183418,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_ERR(36, 786, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 826, __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(36, 786, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 826, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -173050,7 +183429,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_3its___get__(struct PyPetscSNES
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":785
+  /* "PETSc/SNES.pyx":825
  * 
  *     property its:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -173071,7 +183450,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_3its___get__(struct PyPetscSNES
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":787
+/* "PETSc/SNES.pyx":827
  *         def __get__(self):
  *             return self.getIterationNumber()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -173101,17 +183480,17 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_3its_2__set__(struct PyPetscSNESObjec
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/SNES.pyx":788
+  /* "PETSc/SNES.pyx":828
  *             return self.getIterationNumber()
  *         def __set__(self, value):
  *             self.setIterationNumber(value)             # <<<<<<<<<<<<<<
  * 
- *     property history:
+ *     property norm:
  */
-  __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_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setIterationNumber); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 828, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -173121,23 +183500,41 @@ 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_ERR(36, 788, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 828, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(36, 788, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 828, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 828, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 828, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 828, __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/SNES.pyx":787
+  /* "PETSc/SNES.pyx":827
  *         def __get__(self):
  *             return self.getIterationNumber()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -173160,7 +183557,196 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_3its_2__set__(struct PyPetscSNESObjec
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":791
+/* "PETSc/SNES.pyx":831
+ * 
+ *     property norm:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getFunctionNorm()
+ *         def __set__(self, value):
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_4norm_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_8petsc4py_5PETSc_4SNES_4norm_1__get__(PyObject *__pyx_v_self) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_4norm___get__(((struct PyPetscSNESObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_4norm___get__(struct PyPetscSNESObject *__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/SNES.pyx":832
+ *     property norm:
+ *         def __get__(self):
+ *             return self.getFunctionNorm()             # <<<<<<<<<<<<<<
+ *         def __set__(self, value):
+ *             self.setFunctionNorm(value)
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_getFunctionNorm); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 832, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = NULL;
+  if (CYTHON_UNPACK_METHODS && 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(36, 832, __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(36, 832, __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/SNES.pyx":831
+ * 
+ *     property norm:
+ *         def __get__(self):             # <<<<<<<<<<<<<<
+ *             return self.getFunctionNorm()
+ *         def __set__(self, value):
+ */
+
+  /* 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.SNES.norm.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/SNES.pyx":833
+ *         def __get__(self):
+ *             return self.getFunctionNorm()
+ *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             self.setFunctionNorm(value)
+ * 
+ */
+
+/* Python wrapper */
+static int __pyx_pw_8petsc4py_5PETSc_4SNES_4norm_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_pw_8petsc4py_5PETSc_4SNES_4norm_3__set__(PyObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("__set__ (wrapper)", 0);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_4SNES_4norm_2__set__(((struct PyPetscSNESObject *)__pyx_v_self), ((PyObject *)__pyx_v_value));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static int __pyx_pf_8petsc4py_5PETSc_4SNES_4norm_2__set__(struct PyPetscSNESObject *__pyx_v_self, PyObject *__pyx_v_value) {
+  int __pyx_r;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  PyObject *__pyx_t_2 = NULL;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  __Pyx_RefNannySetupContext("__set__", 0);
+
+  /* "PETSc/SNES.pyx":834
+ *             return self.getFunctionNorm()
+ *         def __set__(self, value):
+ *             self.setFunctionNorm(value)             # <<<<<<<<<<<<<<
+ * 
+ *     property history:
+ */
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setFunctionNorm); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 834, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = NULL;
+  if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
+    __pyx_t_3 = PyMethod_GET_SELF(__pyx_t_2);
+    if (likely(__pyx_t_3)) {
+      PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
+      __Pyx_INCREF(__pyx_t_3);
+      __Pyx_INCREF(function);
+      __Pyx_DECREF_SET(__pyx_t_2, function);
+    }
+  }
+  if (!__pyx_t_3) {
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 834, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+  } else {
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 834, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 834, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 834, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 834, __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/SNES.pyx":833
+ *         def __get__(self):
+ *             return self.getFunctionNorm()
+ *         def __set__(self, value):             # <<<<<<<<<<<<<<
+ *             self.setFunctionNorm(value)
+ * 
+ */
+
+  /* function exit code */
+  __pyx_r = 0;
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("petsc4py.PETSc.SNES.norm.__set__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = -1;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/SNES.pyx":837
  * 
  *     property history:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -173189,7 +183775,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7history___get__(struct PyPetsc
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/SNES.pyx":792
+  /* "PETSc/SNES.pyx":838
  *     property history:
  *         def __get__(self):
  *             return self.getConvergenceHistory()             # <<<<<<<<<<<<<<
@@ -173197,10 +183783,10 @@ 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_ERR(36, 792, __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, 838, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -173210,10 +183796,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_ERR(36, 792, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 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_ERR(36, 792, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 838, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -173221,7 +183807,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7history___get__(struct PyPetsc
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":791
+  /* "PETSc/SNES.pyx":837
  * 
  *     property history:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -173242,7 +183828,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_7history___get__(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":797
+/* "PETSc/SNES.pyx":843
  * 
  *     property reason:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -173271,7 +183857,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6reason___get__(struct PyPetscS
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/SNES.pyx":798
+  /* "PETSc/SNES.pyx":844
  *     property reason:
  *         def __get__(self):
  *             return self.getConvergedReason()             # <<<<<<<<<<<<<<
@@ -173279,10 +183865,10 @@ 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_ERR(36, 798, __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, 844, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -173292,10 +183878,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_ERR(36, 798, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 844, __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(36, 798, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 844, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -173303,7 +183889,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6reason___get__(struct PyPetscS
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":797
+  /* "PETSc/SNES.pyx":843
  * 
  *     property reason:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -173324,7 +183910,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6reason___get__(struct PyPetscS
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":799
+/* "PETSc/SNES.pyx":845
  *         def __get__(self):
  *             return self.getConvergedReason()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -173354,17 +183940,17 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_6reason_2__set__(struct PyPetscSNESOb
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/SNES.pyx":800
+  /* "PETSc/SNES.pyx":846
  *             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_ERR(36, 800, __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, 846, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -173374,23 +183960,41 @@ 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_ERR(36, 800, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 846, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(36, 800, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 846, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 846, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 846, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 846, __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/SNES.pyx":799
+  /* "PETSc/SNES.pyx":845
  *         def __get__(self):
  *             return self.getConvergedReason()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -173413,7 +184017,7 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_6reason_2__set__(struct PyPetscSNESOb
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":803
+/* "PETSc/SNES.pyx":849
  * 
  *     property iterating:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -173441,7 +184045,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_9iterating___get__(struct PyPet
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/SNES.pyx":804
+  /* "PETSc/SNES.pyx":850
  *     property iterating:
  *         def __get__(self):
  *             return self.reason == 0             # <<<<<<<<<<<<<<
@@ -173449,16 +184053,16 @@ 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_ERR(36, 804, __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, 850, __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(36, 804, __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, 850, __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/SNES.pyx":803
+  /* "PETSc/SNES.pyx":849
  * 
  *     property iterating:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -173478,7 +184082,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_9iterating___get__(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":807
+/* "PETSc/SNES.pyx":853
  * 
  *     property converged:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -173506,7 +184110,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_9converged___get__(struct PyPet
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/SNES.pyx":808
+  /* "PETSc/SNES.pyx":854
  *     property converged:
  *         def __get__(self):
  *             return self.reason > 0             # <<<<<<<<<<<<<<
@@ -173514,15 +184118,15 @@ 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_ERR(36, 808, __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, 854, __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(36, 808, __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, 854, __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/SNES.pyx":807
+  /* "PETSc/SNES.pyx":853
  * 
  *     property converged:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -173542,7 +184146,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_9converged___get__(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":811
+/* "PETSc/SNES.pyx":857
  * 
  *     property diverged:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -173570,7 +184174,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_8diverged___get__(struct PyPets
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/SNES.pyx":812
+  /* "PETSc/SNES.pyx":858
  *     property diverged:
  *         def __get__(self):
  *             return self.reason < 0             # <<<<<<<<<<<<<<
@@ -173578,15 +184182,15 @@ 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_ERR(36, 812, __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, 858, __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(36, 812, __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, 858, __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/SNES.pyx":811
+  /* "PETSc/SNES.pyx":857
  * 
  *     property diverged:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -173606,7 +184210,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_8diverged___get__(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":817
+/* "PETSc/SNES.pyx":863
  * 
  *     property use_mf:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -173635,7 +184239,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6use_mf___get__(struct PyPetscS
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/SNES.pyx":818
+  /* "PETSc/SNES.pyx":864
  *     property use_mf:
  *         def __get__(self):
  *             return self.getUseMF()             # <<<<<<<<<<<<<<
@@ -173643,10 +184247,10 @@ 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_ERR(36, 818, __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, 864, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -173656,10 +184260,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_ERR(36, 818, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 864, __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(36, 818, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 864, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -173667,7 +184271,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6use_mf___get__(struct PyPetscS
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":817
+  /* "PETSc/SNES.pyx":863
  * 
  *     property use_mf:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -173688,7 +184292,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6use_mf___get__(struct PyPetscS
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":819
+/* "PETSc/SNES.pyx":865
  *         def __get__(self):
  *             return self.getUseMF()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -173718,17 +184322,17 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_6use_mf_2__set__(struct PyPetscSNESOb
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/SNES.pyx":820
+  /* "PETSc/SNES.pyx":866
  *             return self.getUseMF()
  *         def __set__(self, value):
  *             self.setUseMF(value)             # <<<<<<<<<<<<<<
  * 
  *     property use_fd:
  */
-  __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_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setUseMF); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 866, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -173738,23 +184342,41 @@ 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_ERR(36, 820, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 866, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(36, 820, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 866, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 866, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 866, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 866, __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/SNES.pyx":819
+  /* "PETSc/SNES.pyx":865
  *         def __get__(self):
  *             return self.getUseMF()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -173777,7 +184399,7 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_6use_mf_2__set__(struct PyPetscSNESOb
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":823
+/* "PETSc/SNES.pyx":869
  * 
  *     property use_fd:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -173806,7 +184428,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6use_fd___get__(struct PyPetscS
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/SNES.pyx":824
+  /* "PETSc/SNES.pyx":870
  *     property use_fd:
  *         def __get__(self):
  *             return self.getUseFD()             # <<<<<<<<<<<<<<
@@ -173814,10 +184436,10 @@ 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_ERR(36, 824, __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, 870, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -173827,10 +184449,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_ERR(36, 824, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 870, __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(36, 824, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 870, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -173838,7 +184460,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6use_fd___get__(struct PyPetscS
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/SNES.pyx":823
+  /* "PETSc/SNES.pyx":869
  * 
  *     property use_fd:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -173859,7 +184481,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4SNES_6use_fd___get__(struct PyPetscS
   return __pyx_r;
 }
 
-/* "PETSc/SNES.pyx":825
+/* "PETSc/SNES.pyx":871
  *         def __get__(self):
  *             return self.getUseFD()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -173889,17 +184511,17 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_6use_fd_2__set__(struct PyPetscSNESOb
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/SNES.pyx":826
+  /* "PETSc/SNES.pyx":872
  *             return self.getUseFD()
  *         def __set__(self, value):
  *             self.setUseFD(value)             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-  __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_t_2 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_setUseFD); if (unlikely(!__pyx_t_2)) __PYX_ERR(36, 872, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -173909,23 +184531,41 @@ 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_ERR(36, 826, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 872, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(36, 826, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 872, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 872, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(36, 872, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 872, __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/SNES.pyx":825
+  /* "PETSc/SNES.pyx":871
  *         def __get__(self):
  *             return self.getUseFD()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -173948,7 +184588,7 @@ static int __pyx_pf_8petsc4py_5PETSc_4SNES_6use_fd_2__set__(struct PyPetscSNESOb
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":80
+/* "PETSc/TS.pyx":91
  *     # --- xxx ---
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -173977,7 +184617,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS___cinit__(struct PyPetscTSObject *__pyx
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("__cinit__", 0);
 
-  /* "PETSc/TS.pyx":81
+  /* "PETSc/TS.pyx":92
  * 
  *     def __cinit__(self):
  *         self.obj = <PetscObject*> &self.ts             # <<<<<<<<<<<<<<
@@ -173986,7 +184626,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":82
+  /* "PETSc/TS.pyx":93
  *     def __cinit__(self):
  *         self.obj = <PetscObject*> &self.ts
  *         self.ts = NULL             # <<<<<<<<<<<<<<
@@ -173995,7 +184635,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS___cinit__(struct PyPetscTSObject *__pyx
  */
   __pyx_v_self->ts = NULL;
 
-  /* "PETSc/TS.pyx":80
+  /* "PETSc/TS.pyx":91
  *     # --- xxx ---
  * 
  *     def __cinit__(self):             # <<<<<<<<<<<<<<
@@ -174009,7 +184649,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS___cinit__(struct PyPetscTSObject *__pyx
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":86
+/* "PETSc/TS.pyx":97
  *     # --- xxx ---
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -174034,6 +184674,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_3view(PyObject *__pyx_v_self, PyO
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -174046,11 +184687,12 @@ 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_ERR(37, 86, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "view") < 0)) __PYX_ERR(37, 97, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -174059,13 +184701,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_ERR(37, 86, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("view", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 97, __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_ERR(37, 86, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 1, "viewer", 0))) __PYX_ERR(37, 97, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_2view(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
@@ -174087,7 +184729,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_2view(struct PyPetscTSObject *__p
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("view", 0);
 
-  /* "PETSc/TS.pyx":87
+  /* "PETSc/TS.pyx":98
  * 
  *     def view(self, Viewer viewer=None):
  *         cdef PetscViewer cviewer = NULL             # <<<<<<<<<<<<<<
@@ -174096,7 +184738,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_2view(struct PyPetscTSObject *__p
  */
   __pyx_v_cviewer = NULL;
 
-  /* "PETSc/TS.pyx":88
+  /* "PETSc/TS.pyx":99
  *     def view(self, Viewer viewer=None):
  *         cdef PetscViewer cviewer = NULL
  *         if viewer is not None: cviewer = viewer.vwr             # <<<<<<<<<<<<<<
@@ -174110,16 +184752,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_2view(struct PyPetscTSObject *__p
     __pyx_v_cviewer = __pyx_t_3;
   }
 
-  /* "PETSc/TS.pyx":89
+  /* "PETSc/TS.pyx":100
  *         cdef PetscViewer cviewer = NULL
  *         if viewer is not None: cviewer = viewer.vwr
  *         CHKERR( TSView(self.ts, cviewer) )             # <<<<<<<<<<<<<<
  * 
- *     def load(self, Viewer viewer not None):
+ *     def load(self, Viewer viewer):
  */
-  __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)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSView(__pyx_v_self->ts, __pyx_v_cviewer)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(37, 100, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":86
+  /* "PETSc/TS.pyx":97
  *     # --- xxx ---
  * 
  *     def view(self, Viewer viewer=None):             # <<<<<<<<<<<<<<
@@ -174139,10 +184781,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_2view(struct PyPetscTSObject *__p
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":91
+/* "PETSc/TS.pyx":102
  *         CHKERR( TSView(self.ts, cviewer) )
  * 
- *     def load(self, Viewer viewer not None):             # <<<<<<<<<<<<<<
+ *     def load(self, Viewer viewer):             # <<<<<<<<<<<<<<
  *         CHKERR( TSLoad(self.ts, viewer.vwr) )
  * 
  */
@@ -174163,6 +184805,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_5load(PyObject *__pyx_v_self, PyO
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -174173,7 +184816,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_5load(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, "load") < 0)) __PYX_ERR(37, 91, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "load") < 0)) __PYX_ERR(37, 102, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -174184,13 +184827,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_5load(PyObject *__pyx_v_self, PyO
   }
   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_RaiseArgtupleInvalid("load", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 102, __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)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 0, "viewer", 0))) __PYX_ERR(37, 102, __pyx_L1_error)
   __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_4load(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_viewer);
 
   /* function exit code */
@@ -174208,19 +184851,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4load(struct PyPetscTSObject *__p
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("load", 0);
 
-  /* "PETSc/TS.pyx":92
+  /* "PETSc/TS.pyx":103
  * 
- *     def load(self, Viewer viewer not None):
+ *     def load(self, Viewer viewer):
  *         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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSLoad(__pyx_v_self->ts, __pyx_v_viewer->vwr)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(37, 103, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":91
+  /* "PETSc/TS.pyx":102
  *         CHKERR( TSView(self.ts, cviewer) )
  * 
- *     def load(self, Viewer viewer not None):             # <<<<<<<<<<<<<<
+ *     def load(self, Viewer viewer):             # <<<<<<<<<<<<<<
  *         CHKERR( TSLoad(self.ts, viewer.vwr) )
  * 
  */
@@ -174237,7 +184880,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4load(struct PyPetscTSObject *__p
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":94
+/* "PETSc/TS.pyx":105
  *         CHKERR( TSLoad(self.ts, viewer.vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -174268,16 +184911,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_6destroy(struct PyPetscTSObject *
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("destroy", 0);
 
-  /* "PETSc/TS.pyx":95
+  /* "PETSc/TS.pyx":106
  * 
  *     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_ERR(37, 95, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSDestroy((&__pyx_v_self->ts))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(37, 106, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":96
+  /* "PETSc/TS.pyx":107
  *     def destroy(self):
  *         CHKERR( TSDestroy(&self.ts) )
  *         return self             # <<<<<<<<<<<<<<
@@ -174289,7 +184932,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_6destroy(struct PyPetscTSObject *
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":94
+  /* "PETSc/TS.pyx":105
  *         CHKERR( TSLoad(self.ts, viewer.vwr) )
  * 
  *     def destroy(self):             # <<<<<<<<<<<<<<
@@ -174307,7 +184950,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_6destroy(struct PyPetscTSObject *
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":98
+/* "PETSc/TS.pyx":109
  *         return self
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
@@ -174332,6 +184975,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_9create(PyObject *__pyx_v_self, P
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -174344,11 +184988,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_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_ERR(37, 98, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "create") < 0)) __PYX_ERR(37, 109, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -174357,7 +185002,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_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_ERR(37, 98, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("create", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 109, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.create", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -174379,17 +185024,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_8create(struct PyPetscTSObject *_
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("create", 0);
 
-  /* "PETSc/TS.pyx":99
+  /* "PETSc/TS.pyx":110
  * 
  *     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_ERR(37, 99, __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, 110, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":100
+  /* "PETSc/TS.pyx":111
  *     def create(self, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscTS newts = NULL             # <<<<<<<<<<<<<<
@@ -174398,16 +185043,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_8create(struct PyPetscTSObject *_
  */
   __pyx_v_newts = NULL;
 
-  /* "PETSc/TS.pyx":101
+  /* "PETSc/TS.pyx":112
  *         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_ERR(37, 101, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSCreate(__pyx_v_ccomm, (&__pyx_v_newts))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(37, 112, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":102
+  /* "PETSc/TS.pyx":113
  *         cdef PetscTS newts = NULL
  *         CHKERR( TSCreate(ccomm, &newts) )
  *         PetscCLEAR(self.obj); self.ts = newts             # <<<<<<<<<<<<<<
@@ -174417,7 +185062,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_8create(struct PyPetscTSObject *_
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->ts = __pyx_v_newts;
 
-  /* "PETSc/TS.pyx":103
+  /* "PETSc/TS.pyx":114
  *         CHKERR( TSCreate(ccomm, &newts) )
  *         PetscCLEAR(self.obj); self.ts = newts
  *         return self             # <<<<<<<<<<<<<<
@@ -174429,7 +185074,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_8create(struct PyPetscTSObject *_
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":98
+  /* "PETSc/TS.pyx":109
  *         return self
  * 
  *     def create(self, comm=None):             # <<<<<<<<<<<<<<
@@ -174447,7 +185092,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_8create(struct PyPetscTSObject *_
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":105
+/* "PETSc/TS.pyx":116
  *         return self
  * 
  *     def clone(self):             # <<<<<<<<<<<<<<
@@ -174480,28 +185125,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_10clone(struct PyPetscTSObject *_
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("clone", 0);
 
-  /* "PETSc/TS.pyx":106
+  /* "PETSc/TS.pyx":117
  * 
  *     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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 117, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_ts = ((struct PyPetscTSObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":107
+  /* "PETSc/TS.pyx":118
  *     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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSClone(__pyx_v_self->ts, (&__pyx_v_ts->ts))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(37, 118, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":108
+  /* "PETSc/TS.pyx":119
  *         cdef TS ts = TS()
  *         CHKERR( TSClone(self.ts, &ts.ts) )
  *         return ts             # <<<<<<<<<<<<<<
@@ -174513,7 +185158,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_10clone(struct PyPetscTSObject *_
   __pyx_r = ((PyObject *)__pyx_v_ts);
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":105
+  /* "PETSc/TS.pyx":116
  *         return self
  * 
  *     def clone(self):             # <<<<<<<<<<<<<<
@@ -174533,7 +185178,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_10clone(struct PyPetscTSObject *_
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":110
+/* "PETSc/TS.pyx":121
  *         return ts
  * 
  *     def setType(self, ts_type):             # <<<<<<<<<<<<<<
@@ -174557,6 +185202,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_13setType(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -174567,7 +185213,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_13setType(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_ERR(37, 110, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setType") < 0)) __PYX_ERR(37, 121, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -174578,7 +185224,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_13setType(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_ERR(37, 110, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 121, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.TS.setType", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -174600,7 +185246,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_12setType(struct PyPetscTSObject
   __Pyx_RefNannySetupContext("setType", 0);
   __Pyx_INCREF(__pyx_v_ts_type);
 
-  /* "PETSc/TS.pyx":111
+  /* "PETSc/TS.pyx":122
  * 
  *     def setType(self, ts_type):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -174609,28 +185255,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_12setType(struct PyPetscTSObject
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/TS.pyx":112
+  /* "PETSc/TS.pyx":123
  *     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_ERR(37, 112, __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, 123, __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":113
+  /* "PETSc/TS.pyx":124
  *         cdef const_char *cval = NULL
  *         ts_type = str2bytes(ts_type, &cval)
  *         CHKERR( TSSetType(self.ts, cval) )             # <<<<<<<<<<<<<<
  * 
- *     def getType(self):
+ *     def setRKType(self, ts_type):
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetType(__pyx_v_self->ts, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(37, 124, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":110
+  /* "PETSc/TS.pyx":121
  *         return ts
  * 
  *     def setType(self, ts_type):             # <<<<<<<<<<<<<<
@@ -174652,32 +185298,152 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_12setType(struct PyPetscTSObject
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":115
+/* "PETSc/TS.pyx":126
+ *         CHKERR( TSSetType(self.ts, cval) )
+ * 
+ *     def setRKType(self, ts_type):             # <<<<<<<<<<<<<<
+ *         cdef const_char *cval = NULL
+ *         ts_type = str2bytes(ts_type, &cval)
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_15setRKType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_14setRKType[] = "TS.setRKType(self, ts_type)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_15setRKType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_ts_type = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setRKType (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_ts_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);
+        CYTHON_FALLTHROUGH;
+        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_ts_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, "setRKType") < 0)) __PYX_ERR(37, 126, __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_ts_type = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setRKType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 126, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.setRKType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_14setRKType(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_ts_type);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_14setRKType(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;
+  __Pyx_RefNannySetupContext("setRKType", 0);
+  __Pyx_INCREF(__pyx_v_ts_type);
+
+  /* "PETSc/TS.pyx":127
+ * 
+ *     def setRKType(self, ts_type):
+ *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
+ *         ts_type = str2bytes(ts_type, &cval)
+ *         CHKERR( TSRKSetType(self.ts, cval) )
+ */
+  __pyx_v_cval = NULL;
+
+  /* "PETSc/TS.pyx":128
+ *     def setRKType(self, ts_type):
+ *         cdef const_char *cval = NULL
+ *         ts_type = str2bytes(ts_type, &cval)             # <<<<<<<<<<<<<<
+ *         CHKERR( TSRKSetType(self.ts, cval) )
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_ts_type, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 128, __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":129
+ *         cdef const_char *cval = NULL
+ *         ts_type = str2bytes(ts_type, &cval)
+ *         CHKERR( TSRKSetType(self.ts, cval) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getType(self):
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSRKSetType(__pyx_v_self->ts, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(37, 129, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":126
  *         CHKERR( TSSetType(self.ts, cval) )
  * 
+ *     def setRKType(self, ts_type):             # <<<<<<<<<<<<<<
+ *         cdef const_char *cval = NULL
+ *         ts_type = str2bytes(ts_type, &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.TS.setRKType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_ts_type);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TS.pyx":131
+ *         CHKERR( TSRKSetType(self.ts, cval) )
+ * 
  *     def getType(self):             # <<<<<<<<<<<<<<
  *         cdef PetscTSType cval = NULL
  *         CHKERR( TSGetType(self.ts, &cval) )
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_17getType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_16getType[] = "TS.getType(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_17getType(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_14getType(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_16getType(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_14getType(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_16getType(struct PyPetscTSObject *__pyx_v_self) {
   const char* __pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -174685,7 +185451,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_14getType(struct PyPetscTSObject
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getType", 0);
 
-  /* "PETSc/TS.pyx":116
+  /* "PETSc/TS.pyx":132
  * 
  *     def getType(self):
  *         cdef PetscTSType cval = NULL             # <<<<<<<<<<<<<<
@@ -174694,31 +185460,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_14getType(struct PyPetscTSObject
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/TS.pyx":117
+  /* "PETSc/TS.pyx":133
  *     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_ERR(37, 117, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetType(__pyx_v_self->ts, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(37, 133, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":118
+  /* "PETSc/TS.pyx":134
  *         cdef PetscTSType cval = NULL
  *         CHKERR( TSGetType(self.ts, &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
  * 
- *     def setProblemType(self, ptype):
+ *     def getRKType(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 118, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); 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
- *         CHKERR( TSSetType(self.ts, cval) )
+  /* "PETSc/TS.pyx":131
+ *         CHKERR( TSRKSetType(self.ts, cval) )
  * 
  *     def getType(self):             # <<<<<<<<<<<<<<
  *         cdef PetscTSType cval = NULL
@@ -174736,7 +185502,91 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_14getType(struct PyPetscTSObject
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":120
+/* "PETSc/TS.pyx":136
+ *         return bytes2str(cval)
+ * 
+ *     def getRKType(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscTSRKType cval = NULL
+ *         CHKERR( TSRKGetType(self.ts, &cval) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_19getRKType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_18getRKType[] = "TS.getRKType(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_19getRKType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getRKType (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getRKType", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getRKType", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_18getRKType(((struct PyPetscTSObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_18getRKType(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;
+  __Pyx_RefNannySetupContext("getRKType", 0);
+
+  /* "PETSc/TS.pyx":137
+ * 
+ *     def getRKType(self):
+ *         cdef PetscTSRKType cval = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( TSRKGetType(self.ts, &cval) )
+ *         return bytes2str(cval)
+ */
+  __pyx_v_cval = NULL;
+
+  /* "PETSc/TS.pyx":138
+ *     def getRKType(self):
+ *         cdef PetscTSRKType cval = NULL
+ *         CHKERR( TSRKGetType(self.ts, &cval) )             # <<<<<<<<<<<<<<
+ *         return bytes2str(cval)
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSRKGetType(__pyx_v_self->ts, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(37, 138, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":139
+ *         cdef PetscTSRKType cval = NULL
+ *         CHKERR( TSRKGetType(self.ts, &cval) )
+ *         return bytes2str(cval)             # <<<<<<<<<<<<<<
+ * 
+ *     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_ERR(37, 139, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/TS.pyx":136
+ *         return bytes2str(cval)
+ * 
+ *     def getRKType(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscTSRKType cval = NULL
+ *         CHKERR( TSRKGetType(self.ts, &cval) )
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.getRKType", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TS.pyx":141
  *         return bytes2str(cval)
  * 
  *     def setProblemType(self, ptype):             # <<<<<<<<<<<<<<
@@ -174745,9 +185595,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_14getType(struct PyPetscTSObject
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_21setProblemType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_20setProblemType[] = "TS.setProblemType(self, ptype)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_21setProblemType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_ptype = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -174760,6 +185610,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_17setProblemType(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -174770,7 +185621,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_17setProblemType(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_ERR(37, 120, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setProblemType") < 0)) __PYX_ERR(37, 141, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -174781,37 +185632,37 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_17setProblemType(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setProblemType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 120, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setProblemType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 141, __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_16setProblemType(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_ptype);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_20setProblemType(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_ptype);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_16setProblemType(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_ptype) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_20setProblemType(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_ptype) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   TSProblemType __pyx_t_1;
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setProblemType", 0);
 
-  /* "PETSc/TS.pyx":121
+  /* "PETSc/TS.pyx":142
  * 
  *     def setProblemType(self, ptype):
  *         CHKERR( TSSetProblemType(self.ts, ptype) )             # <<<<<<<<<<<<<<
  * 
  *     def getProblemType(self):
  */
-  __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)
+  __pyx_t_1 = ((TSProblemType)__Pyx_PyInt_As_TSProblemType(__pyx_v_ptype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(37, 142, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetProblemType(__pyx_v_self->ts, __pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(37, 142, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":120
+  /* "PETSc/TS.pyx":141
  *         return bytes2str(cval)
  * 
  *     def setProblemType(self, ptype):             # <<<<<<<<<<<<<<
@@ -174831,7 +185682,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_16setProblemType(struct PyPetscTS
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":123
+/* "PETSc/TS.pyx":144
  *         CHKERR( TSSetProblemType(self.ts, ptype) )
  * 
  *     def getProblemType(self):             # <<<<<<<<<<<<<<
@@ -174840,23 +185691,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_16setProblemType(struct PyPetscTS
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_23getProblemType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_22getProblemType[] = "TS.getProblemType(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_23getProblemType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getProblemType (wrapper)", 0);
   if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
     __Pyx_RaiseArgtupleInvalid("getProblemType", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
   if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getProblemType", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_18getProblemType(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_22getProblemType(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_18getProblemType(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_22getProblemType(struct PyPetscTSObject *__pyx_v_self) {
   TSProblemType __pyx_v_ptype;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -174864,7 +185715,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_18getProblemType(struct PyPetscTS
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getProblemType", 0);
 
-  /* "PETSc/TS.pyx":124
+  /* "PETSc/TS.pyx":145
  * 
  *     def getProblemType(self):
  *         cdef PetscTSProblemType ptype = TS_NONLINEAR             # <<<<<<<<<<<<<<
@@ -174873,16 +185724,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_18getProblemType(struct PyPetscTS
  */
   __pyx_v_ptype = TS_NONLINEAR;
 
-  /* "PETSc/TS.pyx":125
+  /* "PETSc/TS.pyx":146
  *     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_ERR(37, 125, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetProblemType(__pyx_v_self->ts, (&__pyx_v_ptype))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(37, 146, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":126
+  /* "PETSc/TS.pyx":147
  *         cdef PetscTSProblemType ptype = TS_NONLINEAR
  *         CHKERR( TSGetProblemType(self.ts, &ptype) )
  *         return ptype             # <<<<<<<<<<<<<<
@@ -174890,13 +185741,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_18getProblemType(struct PyPetscTS
  *     def setEquationType(self, eqtype):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_TSProblemType(__pyx_v_ptype); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 126, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_TSProblemType(__pyx_v_ptype); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 147, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":123
+  /* "PETSc/TS.pyx":144
  *         CHKERR( TSSetProblemType(self.ts, ptype) )
  * 
  *     def getProblemType(self):             # <<<<<<<<<<<<<<
@@ -174915,7 +185766,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_18getProblemType(struct PyPetscTS
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":128
+/* "PETSc/TS.pyx":149
  *         return ptype
  * 
  *     def setEquationType(self, eqtype):             # <<<<<<<<<<<<<<
@@ -174924,9 +185775,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_18getProblemType(struct PyPetscTS
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_25setEquationType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_24setEquationType[] = "TS.setEquationType(self, eqtype)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_25setEquationType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_eqtype = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -174939,6 +185790,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_21setEquationType(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -174949,7 +185801,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_21setEquationType(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_ERR(37, 128, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setEquationType") < 0)) __PYX_ERR(37, 149, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -174960,37 +185812,37 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_21setEquationType(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setEquationType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 128, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setEquationType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 149, __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_20setEquationType(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_eqtype);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_24setEquationType(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_eqtype);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_20setEquationType(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_eqtype) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_24setEquationType(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_eqtype) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   TSEquationType __pyx_t_1;
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setEquationType", 0);
 
-  /* "PETSc/TS.pyx":129
+  /* "PETSc/TS.pyx":150
  * 
  *     def setEquationType(self, eqtype):
  *         CHKERR( TSSetEquationType(self.ts, eqtype) )             # <<<<<<<<<<<<<<
  * 
  *     def getEquationType(self):
  */
-  __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)
+  __pyx_t_1 = ((TSEquationType)__Pyx_PyInt_As_TSEquationType(__pyx_v_eqtype)); if (unlikely(PyErr_Occurred())) __PYX_ERR(37, 150, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetEquationType(__pyx_v_self->ts, __pyx_t_1)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(37, 150, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":128
+  /* "PETSc/TS.pyx":149
  *         return ptype
  * 
  *     def setEquationType(self, eqtype):             # <<<<<<<<<<<<<<
@@ -175010,7 +185862,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_20setEquationType(struct PyPetscT
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":131
+/* "PETSc/TS.pyx":152
  *         CHKERR( TSSetEquationType(self.ts, eqtype) )
  * 
  *     def getEquationType(self):             # <<<<<<<<<<<<<<
@@ -175019,23 +185871,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_20setEquationType(struct PyPetscT
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_27getEquationType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_26getEquationType[] = "TS.getEquationType(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_27getEquationType(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_22getEquationType(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_26getEquationType(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_22getEquationType(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_26getEquationType(struct PyPetscTSObject *__pyx_v_self) {
   TSEquationType __pyx_v_eqtype;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -175043,7 +185895,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_22getEquationType(struct PyPetscT
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getEquationType", 0);
 
-  /* "PETSc/TS.pyx":132
+  /* "PETSc/TS.pyx":153
  * 
  *     def getEquationType(self):
  *         cdef PetscTSEquationType eqtype = TS_EQ_UNSPECIFIED             # <<<<<<<<<<<<<<
@@ -175052,16 +185904,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_22getEquationType(struct PyPetscT
  */
   __pyx_v_eqtype = TS_EQ_UNSPECIFIED;
 
-  /* "PETSc/TS.pyx":133
+  /* "PETSc/TS.pyx":154
  *     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_ERR(37, 133, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetEquationType(__pyx_v_self->ts, (&__pyx_v_eqtype))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(37, 154, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":134
+  /* "PETSc/TS.pyx":155
  *         cdef PetscTSEquationType eqtype = TS_EQ_UNSPECIFIED
  *         CHKERR( TSGetEquationType(self.ts, &eqtype) )
  *         return eqtype             # <<<<<<<<<<<<<<
@@ -175069,13 +185921,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_22getEquationType(struct PyPetscT
  *     def setOptionsPrefix(self, prefix):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_TSEquationType(__pyx_v_eqtype); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 134, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_TSEquationType(__pyx_v_eqtype); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 155, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":131
+  /* "PETSc/TS.pyx":152
  *         CHKERR( TSSetEquationType(self.ts, eqtype) )
  * 
  *     def getEquationType(self):             # <<<<<<<<<<<<<<
@@ -175094,7 +185946,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_22getEquationType(struct PyPetscT
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":136
+/* "PETSc/TS.pyx":157
  *         return eqtype
  * 
  *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
@@ -175103,9 +185955,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_22getEquationType(struct PyPetscT
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_29setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_28setOptionsPrefix[] = "TS.setOptionsPrefix(self, prefix)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_29setOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_prefix = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -175118,6 +185970,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_25setOptionsPrefix(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -175128,7 +185981,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_25setOptionsPrefix(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_ERR(37, 136, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setOptionsPrefix") < 0)) __PYX_ERR(37, 157, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -175139,20 +185992,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_25setOptionsPrefix(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 136, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setOptionsPrefix", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 157, __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_24setOptionsPrefix(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_prefix);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_28setOptionsPrefix(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_prefix);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_24setOptionsPrefix(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_28setOptionsPrefix(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_prefix) {
   const char *__pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -175161,7 +186014,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_24setOptionsPrefix(struct PyPetsc
   __Pyx_RefNannySetupContext("setOptionsPrefix", 0);
   __Pyx_INCREF(__pyx_v_prefix);
 
-  /* "PETSc/TS.pyx":137
+  /* "PETSc/TS.pyx":158
  * 
  *     def setOptionsPrefix(self, prefix):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -175170,28 +186023,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_24setOptionsPrefix(struct PyPetsc
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/TS.pyx":138
+  /* "PETSc/TS.pyx":159
  *     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_ERR(37, 138, __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, 159, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_prefix, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":139
+  /* "PETSc/TS.pyx":160
  *         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_ERR(37, 139, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetOptionsPrefix(__pyx_v_self->ts, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(37, 160, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":136
+  /* "PETSc/TS.pyx":157
  *         return eqtype
  * 
  *     def setOptionsPrefix(self, prefix):             # <<<<<<<<<<<<<<
@@ -175213,7 +186066,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_24setOptionsPrefix(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":141
+/* "PETSc/TS.pyx":162
  *         CHKERR( TSSetOptionsPrefix(self.ts, cval) )
  * 
  *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
@@ -175222,23 +186075,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_24setOptionsPrefix(struct PyPetsc
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_31getOptionsPrefix(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_30getOptionsPrefix[] = "TS.getOptionsPrefix(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_31getOptionsPrefix(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_26getOptionsPrefix(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_30getOptionsPrefix(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_26getOptionsPrefix(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_30getOptionsPrefix(struct PyPetscTSObject *__pyx_v_self) {
   const char *__pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -175246,7 +186099,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_26getOptionsPrefix(struct PyPetsc
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getOptionsPrefix", 0);
 
-  /* "PETSc/TS.pyx":142
+  /* "PETSc/TS.pyx":163
  * 
  *     def getOptionsPrefix(self):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -175255,16 +186108,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_26getOptionsPrefix(struct PyPetsc
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/TS.pyx":143
+  /* "PETSc/TS.pyx":164
  *     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_ERR(37, 143, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetOptionsPrefix(__pyx_v_self->ts, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(37, 164, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":144
+  /* "PETSc/TS.pyx":165
  *         cdef const_char *cval = NULL
  *         CHKERR( TSGetOptionsPrefix(self.ts, &cval) )
  *         return bytes2str(cval)             # <<<<<<<<<<<<<<
@@ -175272,13 +186125,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_26getOptionsPrefix(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_ERR(37, 144, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cval); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 165, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":141
+  /* "PETSc/TS.pyx":162
  *         CHKERR( TSSetOptionsPrefix(self.ts, cval) )
  * 
  *     def getOptionsPrefix(self):             # <<<<<<<<<<<<<<
@@ -175297,7 +186150,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_26getOptionsPrefix(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":146
+/* "PETSc/TS.pyx":167
  *         return bytes2str(cval)
  * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
@@ -175306,38 +186159,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_26getOptionsPrefix(struct PyPetsc
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_33setFromOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_32setFromOptions[] = "TS.setFromOptions(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_33setFromOptions(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_28setFromOptions(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_32setFromOptions(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_28setFromOptions(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_32setFromOptions(struct PyPetscTSObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setFromOptions", 0);
 
-  /* "PETSc/TS.pyx":147
+  /* "PETSc/TS.pyx":168
  * 
  *     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_ERR(37, 147, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetFromOptions(__pyx_v_self->ts)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(37, 168, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":146
+  /* "PETSc/TS.pyx":167
  *         return bytes2str(cval)
  * 
  *     def setFromOptions(self):             # <<<<<<<<<<<<<<
@@ -175357,7 +186210,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_28setFromOptions(struct PyPetscTS
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":151
+/* "PETSc/TS.pyx":172
  *     # --- application context ---
  * 
  *     def setAppCtx(self, appctx):             # <<<<<<<<<<<<<<
@@ -175366,9 +186219,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_28setFromOptions(struct PyPetscTS
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_35setAppCtx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_34setAppCtx[] = "TS.setAppCtx(self, appctx)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_35setAppCtx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_appctx = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -175381,6 +186234,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_31setAppCtx(PyObject *__pyx_v_sel
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -175391,7 +186245,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_31setAppCtx(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_ERR(37, 151, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setAppCtx") < 0)) __PYX_ERR(37, 172, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -175402,37 +186256,37 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_31setAppCtx(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_ERR(37, 151, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setAppCtx", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 172, __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_30setAppCtx(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_appctx);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_34setAppCtx(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_appctx);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_30setAppCtx(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_appctx) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_34setAppCtx(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_appctx) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("setAppCtx", 0);
 
-  /* "PETSc/TS.pyx":152
+  /* "PETSc/TS.pyx":173
  * 
  *     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), ((char *)"__appctx__"), __pyx_v_appctx); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 152, __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, 173, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":151
+  /* "PETSc/TS.pyx":172
  *     # --- application context ---
  * 
  *     def setAppCtx(self, appctx):             # <<<<<<<<<<<<<<
@@ -175453,7 +186307,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_30setAppCtx(struct PyPetscTSObjec
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":154
+/* "PETSc/TS.pyx":175
  *         self.set_attr('__appctx__', appctx)
  * 
  *     def getAppCtx(self):             # <<<<<<<<<<<<<<
@@ -175462,29 +186316,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_30setAppCtx(struct PyPetscTSObjec
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_37getAppCtx(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_36getAppCtx[] = "TS.getAppCtx(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_37getAppCtx(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_32getAppCtx(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_36getAppCtx(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_32getAppCtx(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_36getAppCtx(struct PyPetscTSObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("getAppCtx", 0);
 
-  /* "PETSc/TS.pyx":155
+  /* "PETSc/TS.pyx":176
  * 
  *     def getAppCtx(self):
  *         return self.get_attr('__appctx__')             # <<<<<<<<<<<<<<
@@ -175492,13 +186346,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_32getAppCtx(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), ((char *)"__appctx__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 155, __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, 176, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":154
+  /* "PETSc/TS.pyx":175
  *         self.set_attr('__appctx__', appctx)
  * 
  *     def getAppCtx(self):             # <<<<<<<<<<<<<<
@@ -175517,7 +186371,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_32getAppCtx(struct PyPetscTSObjec
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":159
+/* "PETSc/TS.pyx":180
  *     # --- user RHS Function/Jacobian routines ---
  * 
  *     def setRHSFunction(self, function, Vec f=None, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -175526,9 +186380,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_32getAppCtx(struct PyPetscTSObjec
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_39setRHSFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_38setRHSFunction[] = "TS.setRHSFunction(self, function, Vec f=None, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_39setRHSFunction(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;
@@ -175547,9 +186401,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_35setRHSFunction(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -175558,16 +186416,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_35setRHSFunction(PyObject *__pyx_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_function)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_f);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -175575,13 +186436,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_35setRHSFunction(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRHSFunction") < 0)) __PYX_ERR(37, 159, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRHSFunction") < 0)) __PYX_ERR(37, 180, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -175594,14 +186458,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_35setRHSFunction(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setRHSFunction", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 159, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setRHSFunction", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 180, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "f", 0))) __PYX_ERR(37, 180, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_38setRHSFunction(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_function, __pyx_v_f, __pyx_v_args, __pyx_v_kargs);
 
   /* function exit code */
   goto __pyx_L0;
@@ -175612,7 +186476,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_35setRHSFunction(PyObject *__pyx_
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_38setRHSFunction(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;
@@ -175626,7 +186490,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_34setRHSFunction(struct PyPetscTS
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/TS.pyx":160
+  /* "PETSc/TS.pyx":181
  * 
  *     def setRHSFunction(self, function, Vec f=None, args=None, kargs=None):
  *         cdef PetscVec fvec=NULL             # <<<<<<<<<<<<<<
@@ -175635,7 +186499,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_34setRHSFunction(struct PyPetscTS
  */
   __pyx_v_fvec = NULL;
 
-  /* "PETSc/TS.pyx":161
+  /* "PETSc/TS.pyx":182
  *     def setRHSFunction(self, function, Vec f=None, args=None, kargs=None):
  *         cdef PetscVec fvec=NULL
  *         if f is not None: fvec = f.vec             # <<<<<<<<<<<<<<
@@ -175649,7 +186513,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_34setRHSFunction(struct PyPetscTS
     __pyx_v_fvec = __pyx_t_3;
   }
 
-  /* "PETSc/TS.pyx":162
+  /* "PETSc/TS.pyx":183
  *         cdef PetscVec fvec=NULL
  *         if f is not None: fvec = f.vec
  *         if function is not None:             # <<<<<<<<<<<<<<
@@ -175660,7 +186524,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_34setRHSFunction(struct PyPetscTS
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/TS.pyx":163
+    /* "PETSc/TS.pyx":184
  *         if f is not None: fvec = f.vec
  *         if function is not None:
  *             if args  is None: args  = ()             # <<<<<<<<<<<<<<
@@ -175674,7 +186538,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_34setRHSFunction(struct PyPetscTS
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
     }
 
-    /* "PETSc/TS.pyx":164
+    /* "PETSc/TS.pyx":185
  *         if function is not None:
  *             if args  is None: args  = ()
  *             if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -175684,20 +186548,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_34setRHSFunction(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_ERR(37, 164, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 185, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_4);
       __pyx_t_4 = 0;
     }
 
-    /* "PETSc/TS.pyx":165
+    /* "PETSc/TS.pyx":186
  *             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_ERR(37, 165, __pyx_L1_error)
+    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 186, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_v_function);
     __Pyx_GIVEREF(__pyx_v_function);
@@ -175711,27 +186575,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_34setRHSFunction(struct PyPetscTS
     __pyx_v_context = ((PyObject*)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "PETSc/TS.pyx":166
+    /* "PETSc/TS.pyx":187
  *             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), ((char *)"__rhsfunction__"), __pyx_v_context); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 166, __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, 187, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "PETSc/TS.pyx":167
+    /* "PETSc/TS.pyx":188
  *             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_ERR(37, 167, __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 == ((int)-1))) __PYX_ERR(37, 188, __pyx_L1_error)
 
-    /* "PETSc/TS.pyx":162
+    /* "PETSc/TS.pyx":183
  *         cdef PetscVec fvec=NULL
  *         if f is not None: fvec = f.vec
  *         if function is not None:             # <<<<<<<<<<<<<<
@@ -175741,7 +186605,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_34setRHSFunction(struct PyPetscTS
     goto __pyx_L4;
   }
 
-  /* "PETSc/TS.pyx":169
+  /* "PETSc/TS.pyx":190
  *             CHKERR( TSSetRHSFunction(self.ts, fvec, TS_RHSFunction, <void*>context) )
  *         else:
  *             CHKERR( TSSetRHSFunction(self.ts, fvec, NULL, NULL) )             # <<<<<<<<<<<<<<
@@ -175749,11 +186613,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_34setRHSFunction(struct PyPetscTS
  *     def setRHSJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None):
  */
   /*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_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetRHSFunction(__pyx_v_self->ts, __pyx_v_fvec, NULL, NULL)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(37, 190, __pyx_L1_error)
   }
   __pyx_L4:;
 
-  /* "PETSc/TS.pyx":159
+  /* "PETSc/TS.pyx":180
  *     # --- user RHS Function/Jacobian routines ---
  * 
  *     def setRHSFunction(self, function, Vec f=None, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -175777,7 +186641,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_34setRHSFunction(struct PyPetscTS
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":171
+/* "PETSc/TS.pyx":192
  *             CHKERR( TSSetRHSFunction(self.ts, fvec, NULL, NULL) )
  * 
  *     def setRHSJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -175786,9 +186650,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_34setRHSFunction(struct PyPetscTS
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_41setRHSJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_40setRHSJacobian[] = "TS.setRHSJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_41setRHSJacobian(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;
@@ -175809,10 +186673,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_37setRHSJacobian(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -175821,21 +186690,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_37setRHSJacobian(PyObject *__pyx_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_jacobian)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_J);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_P);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[3] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  4:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -175843,14 +186716,18 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_37setRHSJacobian(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRHSJacobian") < 0)) __PYX_ERR(37, 171, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRHSJacobian") < 0)) __PYX_ERR(37, 192, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -175864,15 +186741,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_37setRHSJacobian(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setRHSJacobian", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 171, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setRHSJacobian", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 192, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_J), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "J", 0))) __PYX_ERR(37, 192, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_P), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "P", 0))) __PYX_ERR(37, 192, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_40setRHSJacobian(((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;
@@ -175883,7 +186760,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_37setRHSJacobian(PyObject *__pyx_
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_40setRHSJacobian(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;
@@ -175898,7 +186775,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_36setRHSJacobian(struct PyPetscTS
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/TS.pyx":172
+  /* "PETSc/TS.pyx":193
  * 
  *     def setRHSJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None):
  *         cdef PetscMat Jmat=NULL             # <<<<<<<<<<<<<<
@@ -175907,7 +186784,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_36setRHSJacobian(struct PyPetscTS
  */
   __pyx_v_Jmat = NULL;
 
-  /* "PETSc/TS.pyx":173
+  /* "PETSc/TS.pyx":194
  *     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             # <<<<<<<<<<<<<<
@@ -175921,7 +186798,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_36setRHSJacobian(struct PyPetscTS
     __pyx_v_Jmat = __pyx_t_3;
   }
 
-  /* "PETSc/TS.pyx":174
+  /* "PETSc/TS.pyx":195
  *         cdef PetscMat Jmat=NULL
  *         if J is not None: Jmat = J.mat
  *         cdef PetscMat Pmat=Jmat             # <<<<<<<<<<<<<<
@@ -175930,7 +186807,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_36setRHSJacobian(struct PyPetscTS
  */
   __pyx_v_Pmat = __pyx_v_Jmat;
 
-  /* "PETSc/TS.pyx":175
+  /* "PETSc/TS.pyx":196
  *         if J is not None: Jmat = J.mat
  *         cdef PetscMat Pmat=Jmat
  *         if P is not None: Pmat = P.mat             # <<<<<<<<<<<<<<
@@ -175944,7 +186821,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_36setRHSJacobian(struct PyPetscTS
     __pyx_v_Pmat = __pyx_t_3;
   }
 
-  /* "PETSc/TS.pyx":176
+  /* "PETSc/TS.pyx":197
  *         cdef PetscMat Pmat=Jmat
  *         if P is not None: Pmat = P.mat
  *         if jacobian is not None:             # <<<<<<<<<<<<<<
@@ -175955,7 +186832,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_36setRHSJacobian(struct PyPetscTS
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/TS.pyx":177
+    /* "PETSc/TS.pyx":198
  *         if P is not None: Pmat = P.mat
  *         if jacobian is not None:
  *             if args  is None: args  = ()             # <<<<<<<<<<<<<<
@@ -175969,7 +186846,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_36setRHSJacobian(struct PyPetscTS
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
     }
 
-    /* "PETSc/TS.pyx":178
+    /* "PETSc/TS.pyx":199
  *         if jacobian is not None:
  *             if args  is None: args  = ()
  *             if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -175979,20 +186856,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_36setRHSJacobian(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_ERR(37, 178, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 199, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_4);
       __pyx_t_4 = 0;
     }
 
-    /* "PETSc/TS.pyx":179
+    /* "PETSc/TS.pyx":200
  *             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_ERR(37, 179, __pyx_L1_error)
+    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 200, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_v_jacobian);
     __Pyx_GIVEREF(__pyx_v_jacobian);
@@ -176006,27 +186883,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_36setRHSJacobian(struct PyPetscTS
     __pyx_v_context = ((PyObject*)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "PETSc/TS.pyx":180
+    /* "PETSc/TS.pyx":201
  *             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), ((char *)"__rhsjacobian__"), __pyx_v_context); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 180, __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, 201, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "PETSc/TS.pyx":181
+    /* "PETSc/TS.pyx":202
  *             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_ERR(37, 181, __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 == ((int)-1))) __PYX_ERR(37, 202, __pyx_L1_error)
 
-    /* "PETSc/TS.pyx":176
+    /* "PETSc/TS.pyx":197
  *         cdef PetscMat Pmat=Jmat
  *         if P is not None: Pmat = P.mat
  *         if jacobian is not None:             # <<<<<<<<<<<<<<
@@ -176036,19 +186913,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_36setRHSJacobian(struct PyPetscTS
     goto __pyx_L5;
   }
 
-  /* "PETSc/TS.pyx":183
+  /* "PETSc/TS.pyx":204
  *             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):
+ *     def computeRHSFunction(self, t, Vec x, Vec f):
  */
   /*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_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 == ((int)-1))) __PYX_ERR(37, 204, __pyx_L1_error)
   }
   __pyx_L5:;
 
-  /* "PETSc/TS.pyx":171
+  /* "PETSc/TS.pyx":192
  *             CHKERR( TSSetRHSFunction(self.ts, fvec, NULL, NULL) )
  * 
  *     def setRHSJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -176072,18 +186949,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_36setRHSJacobian(struct PyPetscTS
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":185
+/* "PETSc/TS.pyx":206
  *             CHKERR( TSSetRHSJacobian(self.ts, Jmat, Pmat, NULL, NULL) )
  * 
- *     def computeRHSFunction(self, t, Vec x not None, Vec f not None):             # <<<<<<<<<<<<<<
+ *     def computeRHSFunction(self, t, Vec x, Vec f):             # <<<<<<<<<<<<<<
  *         cdef PetscReal time = asReal(t)
  *         CHKERR( TSComputeRHSFunction(self.ts, time, x.vec, f.vec) )
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_43computeRHSFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_42computeRHSFunction[] = "TS.computeRHSFunction(self, t, Vec x, Vec f)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_43computeRHSFunction(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;
@@ -176098,8 +186975,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_39computeRHSFunction(PyObject *__
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -176108,19 +186988,21 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_39computeRHSFunction(PyObject *__
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_t)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(37, 185, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("computeRHSFunction", 1, 3, 3, 1); __PYX_ERR(37, 206, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(37, 185, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("computeRHSFunction", 1, 3, 3, 2); __PYX_ERR(37, 206, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeRHSFunction") < 0)) __PYX_ERR(37, 185, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeRHSFunction") < 0)) __PYX_ERR(37, 206, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -176135,15 +187017,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_39computeRHSFunction(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("computeRHSFunction", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 185, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("computeRHSFunction", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 206, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(37, 206, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "f", 0))) __PYX_ERR(37, 206, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_42computeRHSFunction(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_t, __pyx_v_x, __pyx_v_f);
 
   /* function exit code */
   goto __pyx_L0;
@@ -176154,7 +187036,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_39computeRHSFunction(PyObject *__
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_42computeRHSFunction(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
@@ -176162,29 +187044,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_38computeRHSFunction(struct PyPet
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("computeRHSFunction", 0);
 
-  /* "PETSc/TS.pyx":186
+  /* "PETSc/TS.pyx":207
  * 
- *     def computeRHSFunction(self, t, Vec x not None, Vec f not None):
+ *     def computeRHSFunction(self, t, Vec x, Vec f):
  *         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_ERR(37, 186, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_t); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(37, 207, __pyx_L1_error)
   __pyx_v_time = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":187
- *     def computeRHSFunction(self, t, Vec x not None, Vec f not None):
+  /* "PETSc/TS.pyx":208
+ *     def computeRHSFunction(self, t, Vec x, Vec f):
  *         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):
+ *     def computeRHSFunctionLinear(self, t, Vec x, Vec f):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(37, 208, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":185
+  /* "PETSc/TS.pyx":206
  *             CHKERR( TSSetRHSJacobian(self.ts, Jmat, Pmat, NULL, NULL) )
  * 
- *     def computeRHSFunction(self, t, Vec x not None, Vec f not None):             # <<<<<<<<<<<<<<
+ *     def computeRHSFunction(self, t, Vec x, Vec f):             # <<<<<<<<<<<<<<
  *         cdef PetscReal time = asReal(t)
  *         CHKERR( TSComputeRHSFunction(self.ts, time, x.vec, f.vec) )
  */
@@ -176201,18 +187083,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_38computeRHSFunction(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":189
+/* "PETSc/TS.pyx":210
  *         CHKERR( TSComputeRHSFunction(self.ts, time, x.vec, f.vec) )
  * 
- *     def computeRHSFunctionLinear(self, t, Vec x not None, Vec f not None):             # <<<<<<<<<<<<<<
+ *     def computeRHSFunctionLinear(self, t, Vec x, Vec f):             # <<<<<<<<<<<<<<
  *         cdef PetscReal time = asReal(t)
  *         CHKERR( TSComputeRHSFunctionLinear(self.ts, time, x.vec, f.vec, NULL) )
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_45computeRHSFunctionLinear(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_44computeRHSFunctionLinear[] = "TS.computeRHSFunctionLinear(self, t, Vec x, Vec f)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_45computeRHSFunctionLinear(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;
@@ -176227,8 +187109,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_41computeRHSFunctionLinear(PyObje
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -176237,19 +187122,21 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_41computeRHSFunctionLinear(PyObje
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_t)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(37, 189, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("computeRHSFunctionLinear", 1, 3, 3, 1); __PYX_ERR(37, 210, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(37, 189, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("computeRHSFunctionLinear", 1, 3, 3, 2); __PYX_ERR(37, 210, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeRHSFunctionLinear") < 0)) __PYX_ERR(37, 189, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeRHSFunctionLinear") < 0)) __PYX_ERR(37, 210, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -176264,15 +187151,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_41computeRHSFunctionLinear(PyObje
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("computeRHSFunctionLinear", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 189, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("computeRHSFunctionLinear", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 210, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(37, 210, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "f", 0))) __PYX_ERR(37, 210, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_44computeRHSFunctionLinear(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_t, __pyx_v_x, __pyx_v_f);
 
   /* function exit code */
   goto __pyx_L0;
@@ -176283,7 +187170,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_41computeRHSFunctionLinear(PyObje
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_44computeRHSFunctionLinear(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
@@ -176291,29 +187178,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_40computeRHSFunctionLinear(struct
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("computeRHSFunctionLinear", 0);
 
-  /* "PETSc/TS.pyx":190
+  /* "PETSc/TS.pyx":211
  * 
- *     def computeRHSFunctionLinear(self, t, Vec x not None, Vec f not None):
+ *     def computeRHSFunctionLinear(self, t, Vec x, Vec f):
  *         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_ERR(37, 190, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_t); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(37, 211, __pyx_L1_error)
   __pyx_v_time = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":191
- *     def computeRHSFunctionLinear(self, t, Vec x not None, Vec f not None):
+  /* "PETSc/TS.pyx":212
+ *     def computeRHSFunctionLinear(self, t, Vec x, Vec f):
  *         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):
+ *     def computeRHSJacobian(self, t, Vec x, Mat J, 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_ERR(37, 191, __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 == ((int)-1))) __PYX_ERR(37, 212, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":189
+  /* "PETSc/TS.pyx":210
  *         CHKERR( TSComputeRHSFunction(self.ts, time, x.vec, f.vec) )
  * 
- *     def computeRHSFunctionLinear(self, t, Vec x not None, Vec f not None):             # <<<<<<<<<<<<<<
+ *     def computeRHSFunctionLinear(self, t, Vec x, Vec f):             # <<<<<<<<<<<<<<
  *         cdef PetscReal time = asReal(t)
  *         CHKERR( TSComputeRHSFunctionLinear(self.ts, time, x.vec, f.vec, NULL) )
  */
@@ -176330,18 +187217,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_40computeRHSFunctionLinear(struct
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":193
+/* "PETSc/TS.pyx":214
  *         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):             # <<<<<<<<<<<<<<
+ *     def computeRHSJacobian(self, t, Vec x, Mat J, Mat P=None):             # <<<<<<<<<<<<<<
  *         cdef PetscReal time = asReal(t)
  *         cdef PetscMat jmat = J.mat, pmat = J.mat
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_47computeRHSJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_46computeRHSJacobian[] = "TS.computeRHSJacobian(self, t, Vec x, Mat J, Mat P=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_47computeRHSJacobian(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;
@@ -176358,9 +187245,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_43computeRHSJacobian(PyObject *__
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -176369,16 +187260,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_43computeRHSJacobian(PyObject *__
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_t)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(37, 193, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("computeRHSJacobian", 0, 3, 4, 1); __PYX_ERR(37, 214, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(37, 193, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("computeRHSJacobian", 0, 3, 4, 2); __PYX_ERR(37, 214, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_P);
@@ -176386,11 +187280,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_43computeRHSJacobian(PyObject *__
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeRHSJacobian") < 0)) __PYX_ERR(37, 193, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeRHSJacobian") < 0)) __PYX_ERR(37, 214, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         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);
@@ -176405,16 +187300,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_43computeRHSJacobian(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("computeRHSJacobian", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 193, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("computeRHSJacobian", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 214, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(37, 214, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_J), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "J", 0))) __PYX_ERR(37, 214, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_P), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "P", 0))) __PYX_ERR(37, 214, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_46computeRHSJacobian(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_t, __pyx_v_x, __pyx_v_J, __pyx_v_P);
 
   /* function exit code */
   goto __pyx_L0;
@@ -176425,7 +187320,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_43computeRHSJacobian(PyObject *__
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_46computeRHSJacobian(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;
@@ -176438,18 +187333,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_42computeRHSJacobian(struct PyPet
   int __pyx_t_5;
   __Pyx_RefNannySetupContext("computeRHSJacobian", 0);
 
-  /* "PETSc/TS.pyx":194
+  /* "PETSc/TS.pyx":215
  * 
- *     def computeRHSJacobian(self, t, Vec x not None, Mat J not None, Mat P=None):
+ *     def computeRHSJacobian(self, t, Vec x, Mat J, 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_ERR(37, 194, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_t); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(37, 215, __pyx_L1_error)
   __pyx_v_time = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":195
- *     def computeRHSJacobian(self, t, Vec x not None, Mat J not None, Mat P=None):
+  /* "PETSc/TS.pyx":216
+ *     def computeRHSJacobian(self, t, Vec x, Mat J, Mat P=None):
  *         cdef PetscReal time = asReal(t)
  *         cdef PetscMat jmat = J.mat, pmat = J.mat             # <<<<<<<<<<<<<<
  *         if P is not None: pmat = P.mat
@@ -176460,7 +187355,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_42computeRHSJacobian(struct PyPet
   __pyx_t_2 = __pyx_v_J->mat;
   __pyx_v_pmat = __pyx_t_2;
 
-  /* "PETSc/TS.pyx":196
+  /* "PETSc/TS.pyx":217
  *         cdef PetscReal time = asReal(t)
  *         cdef PetscMat jmat = J.mat, pmat = J.mat
  *         if P is not None: pmat = P.mat             # <<<<<<<<<<<<<<
@@ -176474,19 +187369,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_42computeRHSJacobian(struct PyPet
     __pyx_v_pmat = __pyx_t_2;
   }
 
-  /* "PETSc/TS.pyx":197
+  /* "PETSc/TS.pyx":218
  *         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):
+ *     def computeRHSJacobianConstant(self, t, Vec x, Mat J, 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_ERR(37, 197, __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 == ((int)-1))) __PYX_ERR(37, 218, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":193
+  /* "PETSc/TS.pyx":214
  *         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):             # <<<<<<<<<<<<<<
+ *     def computeRHSJacobian(self, t, Vec x, Mat J, Mat P=None):             # <<<<<<<<<<<<<<
  *         cdef PetscReal time = asReal(t)
  *         cdef PetscMat jmat = J.mat, pmat = J.mat
  */
@@ -176503,18 +187398,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_42computeRHSJacobian(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":199
+/* "PETSc/TS.pyx":220
  *         CHKERR( TSComputeRHSJacobian(self.ts, time, x.vec, jmat, pmat) )
  * 
- *     def computeRHSJacobianConstant(self, t, Vec x not None, Mat J not None, Mat P=None):             # <<<<<<<<<<<<<<
+ *     def computeRHSJacobianConstant(self, t, Vec x, Mat J, Mat P=None):             # <<<<<<<<<<<<<<
  *         cdef PetscReal time = asReal(t)
  *         cdef PetscMat jmat = J.mat, pmat = J.mat
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_49computeRHSJacobianConstant(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_48computeRHSJacobianConstant[] = "TS.computeRHSJacobianConstant(self, t, Vec x, Mat J, Mat P=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_49computeRHSJacobianConstant(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;
@@ -176531,9 +187426,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_45computeRHSJacobianConstant(PyOb
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -176542,16 +187441,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_45computeRHSJacobianConstant(PyOb
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_t)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(37, 199, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("computeRHSJacobianConstant", 0, 3, 4, 1); __PYX_ERR(37, 220, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(37, 199, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("computeRHSJacobianConstant", 0, 3, 4, 2); __PYX_ERR(37, 220, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_P);
@@ -176559,11 +187461,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_45computeRHSJacobianConstant(PyOb
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeRHSJacobianConstant") < 0)) __PYX_ERR(37, 199, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeRHSJacobianConstant") < 0)) __PYX_ERR(37, 220, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         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);
@@ -176578,16 +187481,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_45computeRHSJacobianConstant(PyOb
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("computeRHSJacobianConstant", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 199, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("computeRHSJacobianConstant", 0, 3, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 220, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(37, 220, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_J), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "J", 0))) __PYX_ERR(37, 220, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_P), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "P", 0))) __PYX_ERR(37, 220, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_48computeRHSJacobianConstant(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_t, __pyx_v_x, __pyx_v_J, __pyx_v_P);
 
   /* function exit code */
   goto __pyx_L0;
@@ -176598,7 +187501,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_45computeRHSJacobianConstant(PyOb
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_48computeRHSJacobianConstant(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;
@@ -176611,18 +187514,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_44computeRHSJacobianConstant(stru
   int __pyx_t_5;
   __Pyx_RefNannySetupContext("computeRHSJacobianConstant", 0);
 
-  /* "PETSc/TS.pyx":200
+  /* "PETSc/TS.pyx":221
  * 
- *     def computeRHSJacobianConstant(self, t, Vec x not None, Mat J not None, Mat P=None):
+ *     def computeRHSJacobianConstant(self, t, Vec x, Mat J, 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_ERR(37, 200, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_t); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(37, 221, __pyx_L1_error)
   __pyx_v_time = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":201
- *     def computeRHSJacobianConstant(self, t, Vec x not None, Mat J not None, Mat P=None):
+  /* "PETSc/TS.pyx":222
+ *     def computeRHSJacobianConstant(self, t, Vec x, Mat J, Mat P=None):
  *         cdef PetscReal time = asReal(t)
  *         cdef PetscMat jmat = J.mat, pmat = J.mat             # <<<<<<<<<<<<<<
  *         if P is not None: pmat = P.mat
@@ -176633,7 +187536,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_44computeRHSJacobianConstant(stru
   __pyx_t_2 = __pyx_v_J->mat;
   __pyx_v_pmat = __pyx_t_2;
 
-  /* "PETSc/TS.pyx":202
+  /* "PETSc/TS.pyx":223
  *         cdef PetscReal time = asReal(t)
  *         cdef PetscMat jmat = J.mat, pmat = J.mat
  *         if P is not None: pmat = P.mat             # <<<<<<<<<<<<<<
@@ -176647,19 +187550,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_44computeRHSJacobianConstant(stru
     __pyx_v_pmat = __pyx_t_2;
   }
 
-  /* "PETSc/TS.pyx":203
+  /* "PETSc/TS.pyx":224
  *         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_ERR(37, 203, __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 == ((int)-1))) __PYX_ERR(37, 224, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":199
+  /* "PETSc/TS.pyx":220
  *         CHKERR( TSComputeRHSJacobian(self.ts, time, x.vec, jmat, pmat) )
  * 
- *     def computeRHSJacobianConstant(self, t, Vec x not None, Mat J not None, Mat P=None):             # <<<<<<<<<<<<<<
+ *     def computeRHSJacobianConstant(self, t, Vec x, Mat J, Mat P=None):             # <<<<<<<<<<<<<<
  *         cdef PetscReal time = asReal(t)
  *         cdef PetscMat jmat = J.mat, pmat = J.mat
  */
@@ -176676,7 +187579,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_44computeRHSJacobianConstant(stru
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":205
+/* "PETSc/TS.pyx":226
  *         CHKERR( TSComputeRHSJacobianConstant(self.ts, time, x.vec, jmat, pmat, NULL) )
  * 
  *     def getRHSFunction(self):             # <<<<<<<<<<<<<<
@@ -176685,23 +187588,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_44computeRHSJacobianConstant(stru
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_51getRHSFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_50getRHSFunction[] = "TS.getRHSFunction(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_51getRHSFunction(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_46getRHSFunction(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_50getRHSFunction(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_46getRHSFunction(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_50getRHSFunction(struct PyPetscTSObject *__pyx_v_self) {
   struct PyPetscVecObject *__pyx_v_f = 0;
   PyObject *__pyx_v_function = 0;
   PyObject *__pyx_r = NULL;
@@ -176710,28 +187613,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_46getRHSFunction(struct PyPetscTS
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getRHSFunction", 0);
 
-  /* "PETSc/TS.pyx":206
+  /* "PETSc/TS.pyx":227
  * 
  *     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 *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 206, __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, 227, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_f = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":207
+  /* "PETSc/TS.pyx":228
  *     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_ERR(37, 207, __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 == ((int)-1))) __PYX_ERR(37, 228, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":208
+  /* "PETSc/TS.pyx":229
  *         cdef Vec f = Vec()
  *         CHKERR( TSGetRHSFunction(self.ts, &f.vec, NULL, NULL) )
  *         PetscINCREF(f.obj)             # <<<<<<<<<<<<<<
@@ -176740,19 +187643,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_46getRHSFunction(struct PyPetscTS
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_f->__pyx_base.obj);
 
-  /* "PETSc/TS.pyx":209
+  /* "PETSc/TS.pyx":230
  *         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), ((char *)"__rhsfunction__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 209, __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, 230, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_function = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":210
+  /* "PETSc/TS.pyx":231
  *         PetscINCREF(f.obj)
  *         cdef object function = self.get_attr('__rhsfunction__')
  *         return (f, function)             # <<<<<<<<<<<<<<
@@ -176760,7 +187663,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_46getRHSFunction(struct PyPetscTS
  *     def getRHSJacobian(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 210, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 231, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_f));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_f));
@@ -176772,7 +187675,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_46getRHSFunction(struct PyPetscTS
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":205
+  /* "PETSc/TS.pyx":226
  *         CHKERR( TSComputeRHSJacobianConstant(self.ts, time, x.vec, jmat, pmat, NULL) )
  * 
  *     def getRHSFunction(self):             # <<<<<<<<<<<<<<
@@ -176793,7 +187696,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_46getRHSFunction(struct PyPetscTS
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":212
+/* "PETSc/TS.pyx":233
  *         return (f, function)
  * 
  *     def getRHSJacobian(self):             # <<<<<<<<<<<<<<
@@ -176802,23 +187705,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_46getRHSFunction(struct PyPetscTS
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_53getRHSJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_52getRHSJacobian[] = "TS.getRHSJacobian(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_53getRHSJacobian(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_48getRHSJacobian(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_52getRHSJacobian(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_48getRHSJacobian(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_52getRHSJacobian(struct PyPetscTSObject *__pyx_v_self) {
   struct PyPetscMatObject *__pyx_v_J = 0;
   struct PyPetscMatObject *__pyx_v_P = 0;
   PyObject *__pyx_v_jacobian = 0;
@@ -176828,32 +187731,32 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_48getRHSJacobian(struct PyPetscTS
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getRHSJacobian", 0);
 
-  /* "PETSc/TS.pyx":213
+  /* "PETSc/TS.pyx":234
  * 
  *     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 *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 213, __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, 234, __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 *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 213, __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, 234, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_P = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":214
+  /* "PETSc/TS.pyx":235
  *     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_ERR(37, 214, __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 == ((int)-1))) __PYX_ERR(37, 235, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":215
+  /* "PETSc/TS.pyx":236
  *         cdef Mat J = Mat(), P = Mat()
  *         CHKERR( TSGetRHSJacobian(self.ts, &J.mat, &P.mat, NULL, NULL) )
  *         PetscINCREF(J.obj); PetscINCREF(P.obj)             # <<<<<<<<<<<<<<
@@ -176863,19 +187766,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_48getRHSJacobian(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":216
+  /* "PETSc/TS.pyx":237
  *         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), ((char *)"__rhsjacobian__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 216, __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, 237, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_jacobian = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":217
+  /* "PETSc/TS.pyx":238
  *         PetscINCREF(J.obj); PetscINCREF(P.obj)
  *         cdef object jacobian = self.get_attr('__rhsjacobian__')
  *         return (J, P, jacobian)             # <<<<<<<<<<<<<<
@@ -176883,7 +187786,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_48getRHSJacobian(struct PyPetscTS
  *     # --- user Implicit Function/Jacobian routines ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 217, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 238, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_J));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_J));
@@ -176898,7 +187801,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_48getRHSJacobian(struct PyPetscTS
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":212
+  /* "PETSc/TS.pyx":233
  *         return (f, function)
  * 
  *     def getRHSJacobian(self):             # <<<<<<<<<<<<<<
@@ -176920,7 +187823,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_48getRHSJacobian(struct PyPetscTS
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":221
+/* "PETSc/TS.pyx":242
  *     # --- user Implicit Function/Jacobian routines ---
  * 
  *     def setIFunction(self, function, Vec f=None, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -176929,9 +187832,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_48getRHSJacobian(struct PyPetscTS
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_55setIFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_54setIFunction[] = "TS.setIFunction(self, function, Vec f=None, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_55setIFunction(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;
@@ -176950,9 +187853,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_51setIFunction(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -176961,16 +187868,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_51setIFunction(PyObject *__pyx_v_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_function)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_f);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -176978,13 +187888,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_51setIFunction(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setIFunction") < 0)) __PYX_ERR(37, 221, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setIFunction") < 0)) __PYX_ERR(37, 242, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -176997,14 +187910,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_51setIFunction(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_ERR(37, 221, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setIFunction", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 242, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "f", 0))) __PYX_ERR(37, 242, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_54setIFunction(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_function, __pyx_v_f, __pyx_v_args, __pyx_v_kargs);
 
   /* function exit code */
   goto __pyx_L0;
@@ -177015,7 +187928,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_51setIFunction(PyObject *__pyx_v_
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_54setIFunction(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;
@@ -177029,7 +187942,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_50setIFunction(struct PyPetscTSOb
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/TS.pyx":222
+  /* "PETSc/TS.pyx":243
  * 
  *     def setIFunction(self, function, Vec f=None, args=None, kargs=None):
  *         cdef PetscVec fvec=NULL             # <<<<<<<<<<<<<<
@@ -177038,7 +187951,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_50setIFunction(struct PyPetscTSOb
  */
   __pyx_v_fvec = NULL;
 
-  /* "PETSc/TS.pyx":223
+  /* "PETSc/TS.pyx":244
  *     def setIFunction(self, function, Vec f=None, args=None, kargs=None):
  *         cdef PetscVec fvec=NULL
  *         if f is not None: fvec = f.vec             # <<<<<<<<<<<<<<
@@ -177052,7 +187965,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_50setIFunction(struct PyPetscTSOb
     __pyx_v_fvec = __pyx_t_3;
   }
 
-  /* "PETSc/TS.pyx":224
+  /* "PETSc/TS.pyx":245
  *         cdef PetscVec fvec=NULL
  *         if f is not None: fvec = f.vec
  *         if function is not None:             # <<<<<<<<<<<<<<
@@ -177063,7 +187976,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_50setIFunction(struct PyPetscTSOb
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/TS.pyx":225
+    /* "PETSc/TS.pyx":246
  *         if f is not None: fvec = f.vec
  *         if function is not None:
  *             if args  is None: args  = ()             # <<<<<<<<<<<<<<
@@ -177077,7 +187990,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_50setIFunction(struct PyPetscTSOb
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
     }
 
-    /* "PETSc/TS.pyx":226
+    /* "PETSc/TS.pyx":247
  *         if function is not None:
  *             if args  is None: args  = ()
  *             if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -177087,20 +188000,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_50setIFunction(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_ERR(37, 226, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 247, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_4);
       __pyx_t_4 = 0;
     }
 
-    /* "PETSc/TS.pyx":227
+    /* "PETSc/TS.pyx":248
  *             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_ERR(37, 227, __pyx_L1_error)
+    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 248, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_v_function);
     __Pyx_GIVEREF(__pyx_v_function);
@@ -177114,27 +188027,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_50setIFunction(struct PyPetscTSOb
     __pyx_v_context = ((PyObject*)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "PETSc/TS.pyx":228
+    /* "PETSc/TS.pyx":249
  *             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), ((char *)"__ifunction__"), __pyx_v_context); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 228, __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, 249, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "PETSc/TS.pyx":229
+    /* "PETSc/TS.pyx":250
  *             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_ERR(37, 229, __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 == ((int)-1))) __PYX_ERR(37, 250, __pyx_L1_error)
 
-    /* "PETSc/TS.pyx":224
+    /* "PETSc/TS.pyx":245
  *         cdef PetscVec fvec=NULL
  *         if f is not None: fvec = f.vec
  *         if function is not None:             # <<<<<<<<<<<<<<
@@ -177144,7 +188057,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_50setIFunction(struct PyPetscTSOb
     goto __pyx_L4;
   }
 
-  /* "PETSc/TS.pyx":231
+  /* "PETSc/TS.pyx":252
  *             CHKERR( TSSetIFunction(self.ts, fvec, TS_IFunction, <void*>context) )
  *         else:
  *             CHKERR( TSSetIFunction(self.ts, fvec, NULL, NULL) )             # <<<<<<<<<<<<<<
@@ -177152,11 +188065,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_50setIFunction(struct PyPetscTSOb
  *     def setIJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None):
  */
   /*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_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetIFunction(__pyx_v_self->ts, __pyx_v_fvec, NULL, NULL)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(37, 252, __pyx_L1_error)
   }
   __pyx_L4:;
 
-  /* "PETSc/TS.pyx":221
+  /* "PETSc/TS.pyx":242
  *     # --- user Implicit Function/Jacobian routines ---
  * 
  *     def setIFunction(self, function, Vec f=None, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -177180,7 +188093,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_50setIFunction(struct PyPetscTSOb
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":233
+/* "PETSc/TS.pyx":254
  *             CHKERR( TSSetIFunction(self.ts, fvec, NULL, NULL) )
  * 
  *     def setIJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -177189,9 +188102,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_50setIFunction(struct PyPetscTSOb
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_57setIJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_56setIJacobian[] = "TS.setIJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_57setIJacobian(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;
@@ -177212,10 +188125,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_53setIJacobian(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -177224,21 +188142,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_53setIJacobian(PyObject *__pyx_v_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_jacobian)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_J);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_P);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[3] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  4:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -177246,14 +188168,18 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_53setIJacobian(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setIJacobian") < 0)) __PYX_ERR(37, 233, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setIJacobian") < 0)) __PYX_ERR(37, 254, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -177267,15 +188193,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_53setIJacobian(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_ERR(37, 233, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setIJacobian", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 254, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_J), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "J", 0))) __PYX_ERR(37, 254, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_P), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "P", 0))) __PYX_ERR(37, 254, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_56setIJacobian(((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;
@@ -177286,7 +188212,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_53setIJacobian(PyObject *__pyx_v_
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_56setIJacobian(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;
@@ -177301,7 +188227,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_52setIJacobian(struct PyPetscTSOb
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/TS.pyx":234
+  /* "PETSc/TS.pyx":255
  * 
  *     def setIJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None):
  *         cdef PetscMat Jmat=NULL             # <<<<<<<<<<<<<<
@@ -177310,7 +188236,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_52setIJacobian(struct PyPetscTSOb
  */
   __pyx_v_Jmat = NULL;
 
-  /* "PETSc/TS.pyx":235
+  /* "PETSc/TS.pyx":256
  *     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             # <<<<<<<<<<<<<<
@@ -177324,7 +188250,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_52setIJacobian(struct PyPetscTSOb
     __pyx_v_Jmat = __pyx_t_3;
   }
 
-  /* "PETSc/TS.pyx":236
+  /* "PETSc/TS.pyx":257
  *         cdef PetscMat Jmat=NULL
  *         if J is not None: Jmat = J.mat
  *         cdef PetscMat Pmat=Jmat             # <<<<<<<<<<<<<<
@@ -177333,7 +188259,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_52setIJacobian(struct PyPetscTSOb
  */
   __pyx_v_Pmat = __pyx_v_Jmat;
 
-  /* "PETSc/TS.pyx":237
+  /* "PETSc/TS.pyx":258
  *         if J is not None: Jmat = J.mat
  *         cdef PetscMat Pmat=Jmat
  *         if P is not None: Pmat = P.mat             # <<<<<<<<<<<<<<
@@ -177347,7 +188273,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_52setIJacobian(struct PyPetscTSOb
     __pyx_v_Pmat = __pyx_t_3;
   }
 
-  /* "PETSc/TS.pyx":238
+  /* "PETSc/TS.pyx":259
  *         cdef PetscMat Pmat=Jmat
  *         if P is not None: Pmat = P.mat
  *         if jacobian is not None:             # <<<<<<<<<<<<<<
@@ -177358,7 +188284,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_52setIJacobian(struct PyPetscTSOb
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/TS.pyx":239
+    /* "PETSc/TS.pyx":260
  *         if P is not None: Pmat = P.mat
  *         if jacobian is not None:
  *             if args  is None: args  = ()             # <<<<<<<<<<<<<<
@@ -177372,7 +188298,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_52setIJacobian(struct PyPetscTSOb
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
     }
 
-    /* "PETSc/TS.pyx":240
+    /* "PETSc/TS.pyx":261
  *         if jacobian is not None:
  *             if args  is None: args  = ()
  *             if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -177382,20 +188308,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_52setIJacobian(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_ERR(37, 240, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 261, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_4);
       __pyx_t_4 = 0;
     }
 
-    /* "PETSc/TS.pyx":241
+    /* "PETSc/TS.pyx":262
  *             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_ERR(37, 241, __pyx_L1_error)
+    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 262, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_INCREF(__pyx_v_jacobian);
     __Pyx_GIVEREF(__pyx_v_jacobian);
@@ -177409,27 +188335,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_52setIJacobian(struct PyPetscTSOb
     __pyx_v_context = ((PyObject*)__pyx_t_4);
     __pyx_t_4 = 0;
 
-    /* "PETSc/TS.pyx":242
+    /* "PETSc/TS.pyx":263
  *             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), ((char *)"__ijacobian__"), __pyx_v_context); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 242, __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, 263, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
     __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "PETSc/TS.pyx":243
+    /* "PETSc/TS.pyx":264
  *             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_ERR(37, 243, __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 == ((int)-1))) __PYX_ERR(37, 264, __pyx_L1_error)
 
-    /* "PETSc/TS.pyx":238
+    /* "PETSc/TS.pyx":259
  *         cdef PetscMat Pmat=Jmat
  *         if P is not None: Pmat = P.mat
  *         if jacobian is not None:             # <<<<<<<<<<<<<<
@@ -177439,7 +188365,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_52setIJacobian(struct PyPetscTSOb
     goto __pyx_L5;
   }
 
-  /* "PETSc/TS.pyx":245
+  /* "PETSc/TS.pyx":266
  *             CHKERR( TSSetIJacobian(self.ts, Jmat, Pmat, TS_IJacobian, <void*>context) )
  *         else:
  *             CHKERR( TSSetIJacobian(self.ts, Jmat, Pmat, NULL, NULL) )             # <<<<<<<<<<<<<<
@@ -177447,11 +188373,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_52setIJacobian(struct PyPetscTSOb
  *     def computeIFunction(self,
  */
   /*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_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 == ((int)-1))) __PYX_ERR(37, 266, __pyx_L1_error)
   }
   __pyx_L5:;
 
-  /* "PETSc/TS.pyx":233
+  /* "PETSc/TS.pyx":254
  *             CHKERR( TSSetIFunction(self.ts, fvec, NULL, NULL) )
  * 
  *     def setIJacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -177475,18 +188401,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_52setIJacobian(struct PyPetscTSOb
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":247
+/* "PETSc/TS.pyx":268
  *             CHKERR( TSSetIJacobian(self.ts, Jmat, Pmat, NULL, NULL) )
  * 
  *     def computeIFunction(self,             # <<<<<<<<<<<<<<
- *                          t, Vec x not None, Vec xdot not None,
- *                          Vec f not None, imex=False):
+ *                          t, Vec x, Vec xdot,
+ *                          Vec f, imex=False):
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_59computeIFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_58computeIFunction[] = "TS.computeIFunction(self, t, Vec x, Vec xdot, Vec f, imex=False)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_59computeIFunction(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;
@@ -177499,10 +188425,10 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_55computeIFunction(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":249
+    /* "PETSc/TS.pyx":270
  *     def computeIFunction(self,
- *                          t, Vec x not None, Vec xdot not None,
- *                          Vec f not None, imex=False):             # <<<<<<<<<<<<<<
+ *                          t, Vec x, Vec xdot,
+ *                          Vec f, imex=False):             # <<<<<<<<<<<<<<
  *         cdef PetscReal rval = asReal(t)
  *         cdef PetscBool bval = imex
  */
@@ -177512,10 +188438,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_55computeIFunction(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -177524,21 +188455,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_55computeIFunction(PyObject *__py
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_t)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(37, 247, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("computeIFunction", 0, 4, 5, 1); __PYX_ERR(37, 268, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(37, 247, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("computeIFunction", 0, 4, 5, 2); __PYX_ERR(37, 268, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(37, 247, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("computeIFunction", 0, 4, 5, 3); __PYX_ERR(37, 268, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  4:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_imex);
@@ -177546,11 +188481,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_55computeIFunction(PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeIFunction") < 0)) __PYX_ERR(37, 247, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeIFunction") < 0)) __PYX_ERR(37, 268, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
         values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
         values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
@@ -177567,23 +188503,23 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_55computeIFunction(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("computeIFunction", 0, 4, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 247, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("computeIFunction", 0, 4, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 268, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(37, 269, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_xdot), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "xdot", 0))) __PYX_ERR(37, 269, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "f", 0))) __PYX_ERR(37, 270, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_58computeIFunction(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_t, __pyx_v_x, __pyx_v_xdot, __pyx_v_f, __pyx_v_imex);
 
-  /* "PETSc/TS.pyx":247
+  /* "PETSc/TS.pyx":268
  *             CHKERR( TSSetIJacobian(self.ts, Jmat, Pmat, NULL, NULL) )
  * 
  *     def computeIFunction(self,             # <<<<<<<<<<<<<<
- *                          t, Vec x not None, Vec xdot not None,
- *                          Vec f not None, imex=False):
+ *                          t, Vec x, Vec xdot,
+ *                          Vec f, imex=False):
  */
 
   /* function exit code */
@@ -177595,7 +188531,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_55computeIFunction(PyObject *__py
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_58computeIFunction(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;
@@ -177605,41 +188541,41 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_54computeIFunction(struct PyPetsc
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("computeIFunction", 0);
 
-  /* "PETSc/TS.pyx":250
- *                          t, Vec x not None, Vec xdot not None,
- *                          Vec f not None, imex=False):
+  /* "PETSc/TS.pyx":271
+ *                          t, Vec x, Vec xdot,
+ *                          Vec f, 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_ERR(37, 250, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_t); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(37, 271, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":251
- *                          Vec f not None, imex=False):
+  /* "PETSc/TS.pyx":272
+ *                          Vec f, 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)__Pyx_PyInt_As_PetscBool(__pyx_v_imex)); if (unlikely(PyErr_Occurred())) __PYX_ERR(37, 251, __pyx_L1_error)
+  __pyx_t_2 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_imex)); if (unlikely(PyErr_Occurred())) __PYX_ERR(37, 272, __pyx_L1_error)
   __pyx_v_bval = __pyx_t_2;
 
-  /* "PETSc/TS.pyx":252
+  /* "PETSc/TS.pyx":273
  *         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_ERR(37, 252, __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 == ((int)-1))) __PYX_ERR(37, 273, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":247
+  /* "PETSc/TS.pyx":268
  *             CHKERR( TSSetIJacobian(self.ts, Jmat, Pmat, NULL, NULL) )
  * 
  *     def computeIFunction(self,             # <<<<<<<<<<<<<<
- *                          t, Vec x not None, Vec xdot not None,
- *                          Vec f not None, imex=False):
+ *                          t, Vec x, Vec xdot,
+ *                          Vec f, imex=False):
  */
 
   /* function exit code */
@@ -177654,18 +188590,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_54computeIFunction(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":255
+/* "PETSc/TS.pyx":276
  *                                    f.vec, bval) )
  * 
  *     def computeIJacobian(self,             # <<<<<<<<<<<<<<
- *                          t, Vec x not None, Vec xdot not None, a,
- *                          Mat J not None, Mat P=None, imex=False):
+ *                          t, Vec x, Vec xdot, a,
+ *                          Mat J, Mat P=None, imex=False):
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_61computeIJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_60computeIJacobian[] = "TS.computeIJacobian(self, t, Vec x, Vec xdot, a, Mat J, Mat P=None, imex=False)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_61computeIJacobian(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;
@@ -177680,10 +188616,10 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_57computeIJacobian(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":257
+    /* "PETSc/TS.pyx":278
  *     def computeIJacobian(self,
- *                          t, Vec x not None, Vec xdot not None, a,
- *                          Mat J not None, Mat P=None, imex=False):             # <<<<<<<<<<<<<<
+ *                          t, Vec x, Vec xdot, a,
+ *                          Mat J, Mat P=None, imex=False):             # <<<<<<<<<<<<<<
  *         cdef PetscReal rval1 = asReal(t)
  *         cdef PetscReal rval2 = asReal(a)
  */
@@ -177694,12 +188630,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_57computeIJacobian(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
+        CYTHON_FALLTHROUGH;
         case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -177708,31 +188651,37 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_57computeIJacobian(PyObject *__py
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_t)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(37, 255, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("computeIJacobian", 0, 5, 7, 1); __PYX_ERR(37, 276, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(37, 255, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("computeIJacobian", 0, 5, 7, 2); __PYX_ERR(37, 276, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(37, 255, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("computeIJacobian", 0, 5, 7, 3); __PYX_ERR(37, 276, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(37, 255, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("computeIJacobian", 0, 5, 7, 4); __PYX_ERR(37, 276, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  5:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_P);
           if (value) { values[5] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  6:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_imex);
@@ -177740,12 +188689,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_57computeIJacobian(PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeIJacobian") < 0)) __PYX_ERR(37, 255, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeIJacobian") < 0)) __PYX_ERR(37, 276, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
+        CYTHON_FALLTHROUGH;
         case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
         values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
         values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
@@ -177765,24 +188716,24 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_57computeIJacobian(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("computeIJacobian", 0, 5, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 255, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("computeIJacobian", 0, 5, 7, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 276, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(37, 277, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_xdot), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "xdot", 0))) __PYX_ERR(37, 277, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_J), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "J", 0))) __PYX_ERR(37, 278, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_P), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "P", 0))) __PYX_ERR(37, 278, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_60computeIJacobian(((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":255
+  /* "PETSc/TS.pyx":276
  *                                    f.vec, bval) )
  * 
  *     def computeIJacobian(self,             # <<<<<<<<<<<<<<
- *                          t, Vec x not None, Vec xdot not None, a,
- *                          Mat J not None, Mat P=None, imex=False):
+ *                          t, Vec x, Vec xdot, a,
+ *                          Mat J, Mat P=None, imex=False):
  */
 
   /* function exit code */
@@ -177794,7 +188745,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_57computeIJacobian(PyObject *__py
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_60computeIJacobian(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;
@@ -177810,37 +188761,37 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_56computeIJacobian(struct PyPetsc
   int __pyx_t_6;
   __Pyx_RefNannySetupContext("computeIJacobian", 0);
 
-  /* "PETSc/TS.pyx":258
- *                          t, Vec x not None, Vec xdot not None, a,
- *                          Mat J not None, Mat P=None, imex=False):
+  /* "PETSc/TS.pyx":279
+ *                          t, Vec x, Vec xdot, a,
+ *                          Mat J, 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_ERR(37, 258, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_t); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(37, 279, __pyx_L1_error)
   __pyx_v_rval1 = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":259
- *                          Mat J not None, Mat P=None, imex=False):
+  /* "PETSc/TS.pyx":280
+ *                          Mat J, 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_ERR(37, 259, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_a); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(37, 280, __pyx_L1_error)
   __pyx_v_rval2 = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":260
+  /* "PETSc/TS.pyx":281
  *         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)__Pyx_PyInt_As_PetscBool(__pyx_v_imex)); if (unlikely(PyErr_Occurred())) __PYX_ERR(37, 260, __pyx_L1_error)
+  __pyx_t_2 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_imex)); if (unlikely(PyErr_Occurred())) __PYX_ERR(37, 281, __pyx_L1_error)
   __pyx_v_bval = __pyx_t_2;
 
-  /* "PETSc/TS.pyx":261
+  /* "PETSc/TS.pyx":282
  *         cdef PetscReal rval2 = asReal(a)
  *         cdef PetscBool bval  = imex
  *         cdef PetscMat jmat = J.mat, pmat = J.mat             # <<<<<<<<<<<<<<
@@ -177852,7 +188803,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_56computeIJacobian(struct PyPetsc
   __pyx_t_3 = __pyx_v_J->mat;
   __pyx_v_pmat = __pyx_t_3;
 
-  /* "PETSc/TS.pyx":262
+  /* "PETSc/TS.pyx":283
  *         cdef PetscBool bval  = imex
  *         cdef PetscMat jmat = J.mat, pmat = J.mat
  *         if P is not None: pmat = P.mat             # <<<<<<<<<<<<<<
@@ -177866,21 +188817,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_56computeIJacobian(struct PyPetsc
     __pyx_v_pmat = __pyx_t_3;
   }
 
-  /* "PETSc/TS.pyx":263
+  /* "PETSc/TS.pyx":284
  *         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_ERR(37, 263, __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 == ((int)-1))) __PYX_ERR(37, 284, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":255
+  /* "PETSc/TS.pyx":276
  *                                    f.vec, bval) )
  * 
  *     def computeIJacobian(self,             # <<<<<<<<<<<<<<
- *                          t, Vec x not None, Vec xdot not None, a,
- *                          Mat J not None, Mat P=None, imex=False):
+ *                          t, Vec x, Vec xdot, a,
+ *                          Mat J, Mat P=None, imex=False):
  */
 
   /* function exit code */
@@ -177895,7 +188846,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_56computeIJacobian(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":266
+/* "PETSc/TS.pyx":287
  *                                    jmat, pmat, bval) )
  * 
  *     def getIFunction(self):             # <<<<<<<<<<<<<<
@@ -177904,23 +188855,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_56computeIJacobian(struct PyPetsc
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_63getIFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_62getIFunction[] = "TS.getIFunction(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_63getIFunction(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_58getIFunction(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_62getIFunction(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_58getIFunction(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_62getIFunction(struct PyPetscTSObject *__pyx_v_self) {
   struct PyPetscVecObject *__pyx_v_f = 0;
   PyObject *__pyx_v_function = 0;
   PyObject *__pyx_r = NULL;
@@ -177929,28 +188880,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_58getIFunction(struct PyPetscTSOb
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getIFunction", 0);
 
-  /* "PETSc/TS.pyx":267
+  /* "PETSc/TS.pyx":288
  * 
  *     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 *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 267, __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, 288, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_f = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":268
+  /* "PETSc/TS.pyx":289
  *     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_ERR(37, 268, __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 == ((int)-1))) __PYX_ERR(37, 289, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":269
+  /* "PETSc/TS.pyx":290
  *         cdef Vec f = Vec()
  *         CHKERR( TSGetIFunction(self.ts, &f.vec, NULL, NULL) )
  *         PetscINCREF(f.obj)             # <<<<<<<<<<<<<<
@@ -177959,19 +188910,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_58getIFunction(struct PyPetscTSOb
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_f->__pyx_base.obj);
 
-  /* "PETSc/TS.pyx":270
+  /* "PETSc/TS.pyx":291
  *         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), ((char *)"__ifunction__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 270, __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, 291, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_function = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":271
+  /* "PETSc/TS.pyx":292
  *         PetscINCREF(f.obj)
  *         cdef object function = self.get_attr('__ifunction__')
  *         return (f, function)             # <<<<<<<<<<<<<<
@@ -177979,7 +188930,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_58getIFunction(struct PyPetscTSOb
  *     def getIJacobian(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 271, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 292, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_f));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_f));
@@ -177991,7 +188942,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_58getIFunction(struct PyPetscTSOb
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":266
+  /* "PETSc/TS.pyx":287
  *                                    jmat, pmat, bval) )
  * 
  *     def getIFunction(self):             # <<<<<<<<<<<<<<
@@ -178012,7 +188963,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_58getIFunction(struct PyPetscTSOb
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":273
+/* "PETSc/TS.pyx":294
  *         return (f, function)
  * 
  *     def getIJacobian(self):             # <<<<<<<<<<<<<<
@@ -178021,23 +188972,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_58getIFunction(struct PyPetscTSOb
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_65getIJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_64getIJacobian[] = "TS.getIJacobian(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_65getIJacobian(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_60getIJacobian(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_64getIJacobian(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_60getIJacobian(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_64getIJacobian(struct PyPetscTSObject *__pyx_v_self) {
   struct PyPetscMatObject *__pyx_v_J = 0;
   struct PyPetscMatObject *__pyx_v_P = 0;
   PyObject *__pyx_v_jacobian = 0;
@@ -178047,32 +188998,32 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_60getIJacobian(struct PyPetscTSOb
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getIJacobian", 0);
 
-  /* "PETSc/TS.pyx":274
+  /* "PETSc/TS.pyx":295
  * 
  *     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 *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 274, __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, 295, __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 *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 274, __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, 295, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_P = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":275
+  /* "PETSc/TS.pyx":296
  *     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_ERR(37, 275, __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 == ((int)-1))) __PYX_ERR(37, 296, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":276
+  /* "PETSc/TS.pyx":297
  *         cdef Mat J = Mat(), P = Mat()
  *         CHKERR( TSGetIJacobian(self.ts, &J.mat, &P.mat, NULL, NULL) )
  *         PetscINCREF(J.obj); PetscINCREF(P.obj)             # <<<<<<<<<<<<<<
@@ -178082,27 +189033,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_60getIJacobian(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":277
+  /* "PETSc/TS.pyx":298
  *         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), ((char *)"__ijacobian__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 277, __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, 298, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_jacobian = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":278
+  /* "PETSc/TS.pyx":299
  *         PetscINCREF(J.obj); PetscINCREF(P.obj)
  *         cdef object jacobian = self.get_attr('__ijacobian__')
  *         return (J, P, jacobian)             # <<<<<<<<<<<<<<
  * 
- *     # --- solution vector ---
+ *     def setI2Function(self, function, Vec f=None, args=None, kargs=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 278, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 299, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_J));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_J));
@@ -178117,7 +189068,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_60getIJacobian(struct PyPetscTSOb
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":273
+  /* "PETSc/TS.pyx":294
  *         return (f, function)
  * 
  *     def getIJacobian(self):             # <<<<<<<<<<<<<<
@@ -178139,59 +189090,101 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_60getIJacobian(struct PyPetscTSOb
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":282
- *     # --- solution vector ---
- * 
- *     def setSolution(self, Vec u not None):             # <<<<<<<<<<<<<<
- *         CHKERR( TSSetSolution(self.ts, u.vec) )
+/* "PETSc/TS.pyx":301
+ *         return (J, P, jacobian)
  * 
+ *     def setI2Function(self, function, Vec f=None, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscVec fvec=NULL
+ *         if f is not None: fvec = f.vec
  */
 
 /* Python wrapper */
-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;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_67setI2Function(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_66setI2Function[] = "TS.setI2Function(self, function, Vec f=None, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_67setI2Function(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;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setSolution (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setI2Function (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_u,0};
-    PyObject* values[1] = {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);
+    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);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         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_u)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_function)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_f);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
+          if (value) { values[2] = value; kw_args--; }
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
+          if (value) { values[3] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setSolution") < 0)) __PYX_ERR(37, 282, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setI2Function") < 0)) __PYX_ERR(37, 301, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
     } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
     }
-    __pyx_v_u = ((struct PyPetscVecObject *)values[0]);
+    __pyx_v_function = values[0];
+    __pyx_v_f = ((struct PyPetscVecObject *)values[1]);
+    __pyx_v_args = values[2];
+    __pyx_v_kargs = values[3];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setSolution", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 282, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setI2Function", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 301, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.setSolution", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.setI2Function", __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_ERR(37, 282, __pyx_L1_error)
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_62setSolution(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_u);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "f", 0))) __PYX_ERR(37, 301, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_66setI2Function(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_function, __pyx_v_f, __pyx_v_args, __pyx_v_kargs);
 
   /* function exit code */
   goto __pyx_L0;
@@ -178202,499 +189195,580 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_63setSolution(PyObject *__pyx_v_s
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_62setSolution(struct PyPetscTSObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_u) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_66setI2Function(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;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  __Pyx_RefNannySetupContext("setSolution", 0);
-
-  /* "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_ERR(37, 283, __pyx_L1_error)
-
-  /* "PETSc/TS.pyx":282
- *     # --- solution vector ---
- * 
- *     def setSolution(self, Vec u not None):             # <<<<<<<<<<<<<<
- *         CHKERR( TSSetSolution(self.ts, u.vec) )
- * 
- */
-
-  /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.setSolution", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/TS.pyx":285
- *         CHKERR( TSSetSolution(self.ts, u.vec) )
- * 
- *     def getSolution(self):             # <<<<<<<<<<<<<<
- *         cdef Vec u = Vec()
- *         CHKERR( TSGetSolution(self.ts, &u.vec) )
- */
-
-/* Python wrapper */
-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_64getSolution(((struct PyPetscTSObject *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-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;
-  __Pyx_RefNannySetupContext("getSolution", 0);
+  Vec __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  int __pyx_t_5;
+  __Pyx_RefNannySetupContext("setI2Function", 0);
+  __Pyx_INCREF(__pyx_v_args);
+  __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/TS.pyx":286
+  /* "PETSc/TS.pyx":302
  * 
- *     def getSolution(self):
- *         cdef Vec u = Vec()             # <<<<<<<<<<<<<<
- *         CHKERR( TSGetSolution(self.ts, &u.vec) )
- *         PetscINCREF(u.obj)
+ *     def setI2Function(self, function, Vec f=None, args=None, kargs=None):
+ *         cdef PetscVec fvec=NULL             # <<<<<<<<<<<<<<
+ *         if f is not None: fvec = f.vec
+ *         if function is not None:
  */
-  __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;
+  __pyx_v_fvec = NULL;
 
-  /* "PETSc/TS.pyx":287
- *     def getSolution(self):
- *         cdef Vec u = Vec()
- *         CHKERR( TSGetSolution(self.ts, &u.vec) )             # <<<<<<<<<<<<<<
- *         PetscINCREF(u.obj)
- *         return u
+  /* "PETSc/TS.pyx":303
+ *     def setI2Function(self, function, Vec f=None, args=None, kargs=None):
+ *         cdef PetscVec fvec=NULL
+ *         if f is not None: fvec = f.vec             # <<<<<<<<<<<<<<
+ *         if function is not None:
+ *             if args  is None: args  = ()
  */
-  __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)
+  __pyx_t_1 = (((PyObject *)__pyx_v_f) != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_v_f->vec;
+    __pyx_v_fvec = __pyx_t_3;
+  }
 
-  /* "PETSc/TS.pyx":288
- *         cdef Vec u = Vec()
- *         CHKERR( TSGetSolution(self.ts, &u.vec) )
- *         PetscINCREF(u.obj)             # <<<<<<<<<<<<<<
- *         return u
- * 
+  /* "PETSc/TS.pyx":304
+ *         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 = {}
  */
-  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_u->__pyx_base.obj);
+  __pyx_t_2 = (__pyx_v_function != Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
 
-  /* "PETSc/TS.pyx":289
- *         CHKERR( TSGetSolution(self.ts, &u.vec) )
- *         PetscINCREF(u.obj)
- *         return u             # <<<<<<<<<<<<<<
- * 
- *     # --- inner solver ---
+    /* "PETSc/TS.pyx":305
+ *         if f is not None: fvec = f.vec
+ *         if function is not None:
+ *             if args  is None: args  = ()             # <<<<<<<<<<<<<<
+ *             if kargs is None: kargs = {}
+ *             context = (function, args, kargs)
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_u));
-  __pyx_r = ((PyObject *)__pyx_v_u);
-  goto __pyx_L0;
+    __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/TS.pyx":285
- *         CHKERR( TSSetSolution(self.ts, u.vec) )
- * 
- *     def getSolution(self):             # <<<<<<<<<<<<<<
- *         cdef Vec u = Vec()
- *         CHKERR( TSGetSolution(self.ts, &u.vec) )
+    /* "PETSc/TS.pyx":306
+ *         if function is not None:
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
+ *             context = (function, args, kargs)
+ *             self.set_attr('__i2function__', context)
  */
+    __pyx_t_2 = (__pyx_v_kargs == Py_None);
+    __pyx_t_1 = (__pyx_t_2 != 0);
+    if (__pyx_t_1) {
+      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 306, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_4);
+      __pyx_t_4 = 0;
+    }
 
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.getSolution", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_u);
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/TS.pyx":293
- *     # --- inner solver ---
- * 
- *     def getSNES(self):             # <<<<<<<<<<<<<<
- *         cdef SNES snes = SNES()
- *         CHKERR( TSGetSNES(self.ts, &snes.snes) )
+    /* "PETSc/TS.pyx":307
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}
+ *             context = (function, args, kargs)             # <<<<<<<<<<<<<<
+ *             self.set_attr('__i2function__', context)
+ *             CHKERR( TSSetI2Function(self.ts, fvec, TS_I2Function, <void*>context) )
  */
+    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 307, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_INCREF(__pyx_v_function);
+    __Pyx_GIVEREF(__pyx_v_function);
+    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_function);
+    __Pyx_INCREF(__pyx_v_args);
+    __Pyx_GIVEREF(__pyx_v_args);
+    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_args);
+    __Pyx_INCREF(__pyx_v_kargs);
+    __Pyx_GIVEREF(__pyx_v_kargs);
+    PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_kargs);
+    __pyx_v_context = ((PyObject*)__pyx_t_4);
+    __pyx_t_4 = 0;
 
-/* Python wrapper */
-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_66getSNES(((struct PyPetscTSObject *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-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;
-  __Pyx_RefNannySetupContext("getSNES", 0);
-
-  /* "PETSc/TS.pyx":294
- * 
- *     def getSNES(self):
- *         cdef SNES snes = SNES()             # <<<<<<<<<<<<<<
- *         CHKERR( TSGetSNES(self.ts, &snes.snes) )
- *         PetscINCREF(snes.obj)
+    /* "PETSc/TS.pyx":308
+ *             if kargs is None: kargs = {}
+ *             context = (function, args, kargs)
+ *             self.set_attr('__i2function__', context)             # <<<<<<<<<<<<<<
+ *             CHKERR( TSSetI2Function(self.ts, fvec, TS_I2Function, <void*>context) )
+ *         else:
  */
-  __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;
+    __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 *)"__i2function__"), __pyx_v_context); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 308, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/TS.pyx":295
- *     def getSNES(self):
- *         cdef SNES snes = SNES()
- *         CHKERR( TSGetSNES(self.ts, &snes.snes) )             # <<<<<<<<<<<<<<
- *         PetscINCREF(snes.obj)
- *         return snes
+    /* "PETSc/TS.pyx":309
+ *             context = (function, args, kargs)
+ *             self.set_attr('__i2function__', context)
+ *             CHKERR( TSSetI2Function(self.ts, fvec, TS_I2Function, <void*>context) )             # <<<<<<<<<<<<<<
+ *         else:
+ *             CHKERR( TSSetI2Function(self.ts, fvec, NULL, NULL) )
  */
-  __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)
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetI2Function(__pyx_v_self->ts, __pyx_v_fvec, __pyx_f_8petsc4py_5PETSc_TS_I2Function, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(37, 309, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":296
- *         cdef SNES snes = SNES()
- *         CHKERR( TSGetSNES(self.ts, &snes.snes) )
- *         PetscINCREF(snes.obj)             # <<<<<<<<<<<<<<
- *         return snes
- * 
+    /* "PETSc/TS.pyx":304
+ *         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 = {}
  */
-  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_snes->__pyx_base.obj);
+    goto __pyx_L4;
+  }
 
-  /* "PETSc/TS.pyx":297
- *         CHKERR( TSGetSNES(self.ts, &snes.snes) )
- *         PetscINCREF(snes.obj)
- *         return snes             # <<<<<<<<<<<<<<
+  /* "PETSc/TS.pyx":311
+ *             CHKERR( TSSetI2Function(self.ts, fvec, TS_I2Function, <void*>context) )
+ *         else:
+ *             CHKERR( TSSetI2Function(self.ts, fvec, NULL, NULL) )             # <<<<<<<<<<<<<<
  * 
- *     def getKSP(self):
+ *     def setI2Jacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_snes));
-  __pyx_r = ((PyObject *)__pyx_v_snes);
-  goto __pyx_L0;
+  /*else*/ {
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetI2Function(__pyx_v_self->ts, __pyx_v_fvec, NULL, NULL)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(37, 311, __pyx_L1_error)
+  }
+  __pyx_L4:;
 
-  /* "PETSc/TS.pyx":293
- *     # --- inner solver ---
+  /* "PETSc/TS.pyx":301
+ *         return (J, P, jacobian)
  * 
- *     def getSNES(self):             # <<<<<<<<<<<<<<
- *         cdef SNES snes = SNES()
- *         CHKERR( TSGetSNES(self.ts, &snes.snes) )
+ *     def setI2Function(self, function, Vec f=None, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscVec fvec=NULL
+ *         if f is not None: fvec = f.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.TS.getSNES", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.setI2Function", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_snes);
+  __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/TS.pyx":299
- *         return snes
+/* "PETSc/TS.pyx":313
+ *             CHKERR( TSSetI2Function(self.ts, fvec, NULL, NULL) )
  * 
- *     def getKSP(self):             # <<<<<<<<<<<<<<
- *         cdef KSP ksp = KSP()
- *         CHKERR( TSGetKSP(self.ts, &ksp.ksp) )
+ *     def setI2Jacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscMat Jmat=NULL
+ *         if J is not None: Jmat = J.mat
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_69setI2Jacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_68setI2Jacobian[] = "TS.setI2Jacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_69setI2Jacobian(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;
   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_68getKSP(((struct PyPetscTSObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("setI2Jacobian (wrapper)", 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);
+    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);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_jacobian)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_J);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_P);
+          if (value) { values[2] = value; kw_args--; }
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
+          if (value) { values[3] = value; kw_args--; }
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
+          if (value) { values[4] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setI2Jacobian") < 0)) __PYX_ERR(37, 313, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_jacobian = values[0];
+    __pyx_v_J = ((struct PyPetscMatObject *)values[1]);
+    __pyx_v_P = ((struct PyPetscMatObject *)values[2]);
+    __pyx_v_args = values[3];
+    __pyx_v_kargs = values[4];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setI2Jacobian", 0, 1, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 313, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.setI2Jacobian", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_J), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "J", 0))) __PYX_ERR(37, 313, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_P), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "P", 0))) __PYX_ERR(37, 313, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_68setI2Jacobian(((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;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_68getKSP(struct PyPetscTSObject *__pyx_v_self) {
-  struct PyPetscKSPObject *__pyx_v_ksp = 0;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_68setI2Jacobian(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;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_1;
   int __pyx_t_2;
-  __Pyx_RefNannySetupContext("getKSP", 0);
+  Mat __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  int __pyx_t_5;
+  __Pyx_RefNannySetupContext("setI2Jacobian", 0);
+  __Pyx_INCREF(__pyx_v_args);
+  __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/TS.pyx":300
+  /* "PETSc/TS.pyx":314
  * 
- *     def getKSP(self):
- *         cdef KSP ksp = KSP()             # <<<<<<<<<<<<<<
- *         CHKERR( TSGetKSP(self.ts, &ksp.ksp) )
- *         PetscINCREF(ksp.obj)
+ *     def setI2Jacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None):
+ *         cdef PetscMat Jmat=NULL             # <<<<<<<<<<<<<<
+ *         if J is not None: Jmat = J.mat
+ *         cdef PetscMat Pmat=Jmat
  */
-  __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;
+  __pyx_v_Jmat = NULL;
 
-  /* "PETSc/TS.pyx":301
- *     def getKSP(self):
- *         cdef KSP ksp = KSP()
- *         CHKERR( TSGetKSP(self.ts, &ksp.ksp) )             # <<<<<<<<<<<<<<
- *         PetscINCREF(ksp.obj)
- *         return ksp
+  /* "PETSc/TS.pyx":315
+ *     def setI2Jacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None):
+ *         cdef PetscMat Jmat=NULL
+ *         if J is not None: Jmat = J.mat             # <<<<<<<<<<<<<<
+ *         cdef PetscMat Pmat=Jmat
+ *         if P is not None: Pmat = P.mat
  */
-  __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)
+  __pyx_t_1 = (((PyObject *)__pyx_v_J) != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_v_J->mat;
+    __pyx_v_Jmat = __pyx_t_3;
+  }
 
-  /* "PETSc/TS.pyx":302
- *         cdef KSP ksp = KSP()
- *         CHKERR( TSGetKSP(self.ts, &ksp.ksp) )
- *         PetscINCREF(ksp.obj)             # <<<<<<<<<<<<<<
- *         return ksp
- * 
+  /* "PETSc/TS.pyx":316
+ *         cdef PetscMat Jmat=NULL
+ *         if J is not None: Jmat = J.mat
+ *         cdef PetscMat Pmat=Jmat             # <<<<<<<<<<<<<<
+ *         if P is not None: Pmat = P.mat
+ *         if jacobian is not None:
  */
-  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_ksp->__pyx_base.obj);
+  __pyx_v_Pmat = __pyx_v_Jmat;
 
-  /* "PETSc/TS.pyx":303
- *         CHKERR( TSGetKSP(self.ts, &ksp.ksp) )
- *         PetscINCREF(ksp.obj)
- *         return ksp             # <<<<<<<<<<<<<<
- * 
- *     # --- discretization space ---
+  /* "PETSc/TS.pyx":317
+ *         if J is not None: Jmat = J.mat
+ *         cdef PetscMat Pmat=Jmat
+ *         if P is not None: Pmat = P.mat             # <<<<<<<<<<<<<<
+ *         if jacobian is not None:
+ *             if args  is None: args  = ()
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_ksp));
-  __pyx_r = ((PyObject *)__pyx_v_ksp);
-  goto __pyx_L0;
+  __pyx_t_2 = (((PyObject *)__pyx_v_P) != Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+    __pyx_t_3 = __pyx_v_P->mat;
+    __pyx_v_Pmat = __pyx_t_3;
+  }
 
-  /* "PETSc/TS.pyx":299
- *         return snes
- * 
- *     def getKSP(self):             # <<<<<<<<<<<<<<
- *         cdef KSP ksp = KSP()
- *         CHKERR( TSGetKSP(self.ts, &ksp.ksp) )
+  /* "PETSc/TS.pyx":318
+ *         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 = {}
  */
+  __pyx_t_1 = (__pyx_v_jacobian != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
 
-  /* function exit code */
-  __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.getKSP", __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/TS.pyx":307
- *     # --- discretization space ---
- * 
- *     def getDM(self):             # <<<<<<<<<<<<<<
- *         cdef PetscDM newdm = NULL
- *         CHKERR( TSGetDM(self.ts, &newdm) )
+    /* "PETSc/TS.pyx":319
+ *         if P is not None: Pmat = P.mat
+ *         if jacobian is not None:
+ *             if args  is None: args  = ()             # <<<<<<<<<<<<<<
+ *             if kargs is None: kargs = {}
+ *             context = (jacobian, 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);
+    }
 
-/* Python wrapper */
-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_70getDM(((struct PyPetscTSObject *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-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;
-  __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  __Pyx_RefNannySetupContext("getDM", 0);
-
-  /* "PETSc/TS.pyx":308
- * 
- *     def getDM(self):
- *         cdef PetscDM newdm = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( TSGetDM(self.ts, &newdm) )
- *         cdef DM dm = subtype_DM(newdm)()
+    /* "PETSc/TS.pyx":320
+ *         if jacobian is not None:
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
+ *             context = (jacobian, args, kargs)
+ *             self.set_attr('__i2jacobian__', context)
  */
-  __pyx_v_newdm = NULL;
+    __pyx_t_1 = (__pyx_v_kargs == Py_None);
+    __pyx_t_2 = (__pyx_t_1 != 0);
+    if (__pyx_t_2) {
+      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 320, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_4);
+      __pyx_t_4 = 0;
+    }
 
-  /* "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
+    /* "PETSc/TS.pyx":321
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}
+ *             context = (jacobian, args, kargs)             # <<<<<<<<<<<<<<
+ *             self.set_attr('__i2jacobian__', context)
+ *             CHKERR( TSSetI2Jacobian(self.ts, Jmat, Pmat, TS_I2Jacobian, <void*>context) )
  */
-  __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)
+    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 321, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_INCREF(__pyx_v_jacobian);
+    __Pyx_GIVEREF(__pyx_v_jacobian);
+    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_jacobian);
+    __Pyx_INCREF(__pyx_v_args);
+    __Pyx_GIVEREF(__pyx_v_args);
+    PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_args);
+    __Pyx_INCREF(__pyx_v_kargs);
+    __Pyx_GIVEREF(__pyx_v_kargs);
+    PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_kargs);
+    __pyx_v_context = ((PyObject*)__pyx_t_4);
+    __pyx_t_4 = 0;
 
-  /* "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)
+    /* "PETSc/TS.pyx":322
+ *             if kargs is None: kargs = {}
+ *             context = (jacobian, args, kargs)
+ *             self.set_attr('__i2jacobian__', context)             # <<<<<<<<<<<<<<
+ *             CHKERR( TSSetI2Jacobian(self.ts, Jmat, Pmat, TS_I2Jacobian, <void*>context) )
+ *         else:
  */
-  __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_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_ERR(37, 310, __pyx_L1_error)
-  __pyx_v_dm = ((struct PyPetscDMObject *)__pyx_t_3);
-  __pyx_t_3 = 0;
+    __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 *)"__i2jacobian__"), __pyx_v_context); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 322, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/TS.pyx":311
- *         CHKERR( TSGetDM(self.ts, &newdm) )
- *         cdef DM dm = subtype_DM(newdm)()
- *         dm.dm = newdm             # <<<<<<<<<<<<<<
- *         PetscINCREF(dm.obj)
- *         return dm
+    /* "PETSc/TS.pyx":323
+ *             context = (jacobian, args, kargs)
+ *             self.set_attr('__i2jacobian__', context)
+ *             CHKERR( TSSetI2Jacobian(self.ts, Jmat, Pmat, TS_I2Jacobian, <void*>context) )             # <<<<<<<<<<<<<<
+ *         else:
+ *             CHKERR( TSSetI2Jacobian(self.ts, Jmat, Pmat, NULL, NULL) )
  */
-  __pyx_v_dm->dm = __pyx_v_newdm;
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetI2Jacobian(__pyx_v_self->ts, __pyx_v_Jmat, __pyx_v_Pmat, __pyx_f_8petsc4py_5PETSc_TS_I2Jacobian, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(37, 323, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":312
- *         cdef DM dm = subtype_DM(newdm)()
- *         dm.dm = newdm
- *         PetscINCREF(dm.obj)             # <<<<<<<<<<<<<<
- *         return dm
- * 
+    /* "PETSc/TS.pyx":318
+ *         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 = {}
  */
-  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_dm->__pyx_base.obj);
+    goto __pyx_L5;
+  }
 
-  /* "PETSc/TS.pyx":313
- *         dm.dm = newdm
- *         PetscINCREF(dm.obj)
- *         return dm             # <<<<<<<<<<<<<<
+  /* "PETSc/TS.pyx":325
+ *             CHKERR( TSSetI2Jacobian(self.ts, Jmat, Pmat, TS_I2Jacobian, <void*>context) )
+ *         else:
+ *             CHKERR( TSSetI2Jacobian(self.ts, Jmat, Pmat, NULL, NULL) )             # <<<<<<<<<<<<<<
  * 
- *     def setDM(self, DM dm not None):
+ *     def computeI2Function(self, t, Vec x, Vec xdot, Vec xdotdot, Vec f):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_dm));
-  __pyx_r = ((PyObject *)__pyx_v_dm);
-  goto __pyx_L0;
+  /*else*/ {
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetI2Jacobian(__pyx_v_self->ts, __pyx_v_Jmat, __pyx_v_Pmat, NULL, NULL)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(37, 325, __pyx_L1_error)
+  }
+  __pyx_L5:;
 
-  /* "PETSc/TS.pyx":307
- *     # --- discretization space ---
+  /* "PETSc/TS.pyx":313
+ *             CHKERR( TSSetI2Function(self.ts, fvec, NULL, NULL) )
  * 
- *     def getDM(self):             # <<<<<<<<<<<<<<
- *         cdef PetscDM newdm = NULL
- *         CHKERR( TSGetDM(self.ts, &newdm) )
+ *     def setI2Jacobian(self, jacobian, Mat J=None, Mat P=None, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscMat Jmat=NULL
+ *         if J is not None: Jmat = J.mat
  */
 
   /* 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.TS.getDM", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.setI2Jacobian", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_dm);
+  __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/TS.pyx":315
- *         return dm
- * 
- *     def setDM(self, DM dm not None):             # <<<<<<<<<<<<<<
- *         CHKERR( TSSetDM(self.ts, dm.dm) )
+/* "PETSc/TS.pyx":327
+ *             CHKERR( TSSetI2Jacobian(self.ts, Jmat, Pmat, NULL, NULL) )
  * 
+ *     def computeI2Function(self, t, Vec x, Vec xdot, Vec xdotdot, Vec f):             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = asReal(t)
+ *         CHKERR( TSComputeI2Function(self.ts, rval, x.vec, xdot.vec, xdotdot.vec,
  */
 
 /* Python wrapper */
-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;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_71computeI2Function(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_70computeI2Function[] = "TS.computeI2Function(self, t, Vec x, Vec xdot, Vec xdotdot, Vec f)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_71computeI2Function(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_xdotdot = 0;
+  struct PyPetscVecObject *__pyx_v_f = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setDM (wrapper)", 0);
+  __Pyx_RefNannySetupContext("computeI2Function (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dm,0};
-    PyObject* values[1] = {0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_t,&__pyx_n_s_x,&__pyx_n_s_xdot,&__pyx_n_s_xdotdot,&__pyx_n_s_f,0};
+    PyObject* values[5] = {0,0,0,0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         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--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_t)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("computeI2Function", 1, 5, 5, 1); __PYX_ERR(37, 327, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_xdot)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("computeI2Function", 1, 5, 5, 2); __PYX_ERR(37, 327, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_xdotdot)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("computeI2Function", 1, 5, 5, 3); __PYX_ERR(37, 327, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_f)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("computeI2Function", 1, 5, 5, 4); __PYX_ERR(37, 327, __pyx_L3_error)
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDM") < 0)) __PYX_ERR(37, 315, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeI2Function") < 0)) __PYX_ERR(37, 327, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 5) {
       goto __pyx_L5_argtuple_error;
     } else {
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+      values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+      values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
     }
-    __pyx_v_dm = ((struct PyPetscDMObject *)values[0]);
+    __pyx_v_t = values[0];
+    __pyx_v_x = ((struct PyPetscVecObject *)values[1]);
+    __pyx_v_xdot = ((struct PyPetscVecObject *)values[2]);
+    __pyx_v_xdotdot = ((struct PyPetscVecObject *)values[3]);
+    __pyx_v_f = ((struct PyPetscVecObject *)values[4]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setDM", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 315, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("computeI2Function", 1, 5, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 327, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.setDM", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.computeI2Function", __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(37, 315, __pyx_L1_error)
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_72setDM(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_dm);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(37, 327, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_xdot), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "xdot", 0))) __PYX_ERR(37, 327, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_xdotdot), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "xdotdot", 0))) __PYX_ERR(37, 327, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_f), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "f", 0))) __PYX_ERR(37, 327, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_70computeI2Function(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_t, __pyx_v_x, __pyx_v_xdot, __pyx_v_xdotdot, __pyx_v_f);
 
   /* function exit code */
   goto __pyx_L0;
@@ -178705,34 +189779,46 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_73setDM(PyObject *__pyx_v_self, P
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_72setDM(struct PyPetscTSObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_70computeI2Function(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_xdot, struct PyPetscVecObject *__pyx_v_xdotdot, struct PyPetscVecObject *__pyx_v_f) {
+  PetscReal __pyx_v_rval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  __Pyx_RefNannySetupContext("setDM", 0);
+  PetscReal __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("computeI2Function", 0);
 
-  /* "PETSc/TS.pyx":316
- * 
- *     def setDM(self, DM dm not None):
- *         CHKERR( TSSetDM(self.ts, dm.dm) )             # <<<<<<<<<<<<<<
+  /* "PETSc/TS.pyx":328
  * 
- *     # --- customization ---
+ *     def computeI2Function(self, t, Vec x, Vec xdot, Vec xdotdot, Vec f):
+ *         cdef PetscReal rval = asReal(t)             # <<<<<<<<<<<<<<
+ *         CHKERR( TSComputeI2Function(self.ts, rval, x.vec, xdot.vec, xdotdot.vec,
+ *                                    f.vec) )
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_t); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(37, 328, __pyx_L1_error)
+  __pyx_v_rval = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":315
- *         return dm
+  /* "PETSc/TS.pyx":329
+ *     def computeI2Function(self, t, Vec x, Vec xdot, Vec xdotdot, Vec f):
+ *         cdef PetscReal rval = asReal(t)
+ *         CHKERR( TSComputeI2Function(self.ts, rval, x.vec, xdot.vec, xdotdot.vec,             # <<<<<<<<<<<<<<
+ *                                    f.vec) )
  * 
- *     def setDM(self, DM dm not None):             # <<<<<<<<<<<<<<
- *         CHKERR( TSSetDM(self.ts, dm.dm) )
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSComputeI2Function(__pyx_v_self->ts, __pyx_v_rval, __pyx_v_x->vec, __pyx_v_xdot->vec, __pyx_v_xdotdot->vec, __pyx_v_f->vec)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(37, 329, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":327
+ *             CHKERR( TSSetI2Jacobian(self.ts, Jmat, Pmat, NULL, NULL) )
  * 
+ *     def computeI2Function(self, t, Vec x, Vec xdot, Vec xdotdot, Vec f):             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = asReal(t)
+ *         CHKERR( TSComputeI2Function(self.ts, rval, x.vec, xdot.vec, xdotdot.vec,
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.setDM", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.computeI2Function", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -178740,30 +189826,53 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_72setDM(struct PyPetscTSObject *_
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":320
- *     # --- customization ---
+/* "PETSc/TS.pyx":332
+ *                                    f.vec) )
  * 
- *     def setTime(self, t):             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval = asReal(t)
- *         CHKERR( TSSetTime(self.ts, rval) )
+ *     def computeI2Jacobian(self, t, Vec x, Vec xdot, Vec xdotdot, v, a, Mat J, Mat P=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval1 = asReal(t)
+ *         cdef PetscReal rval2 = asReal(v)
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_73computeI2Jacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_72computeI2Jacobian[] = "TS.computeI2Jacobian(self, t, Vec x, Vec xdot, Vec xdotdot, v, a, Mat J, Mat P=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_73computeI2Jacobian(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_xdotdot = 0;
+  PyObject *__pyx_v_v = 0;
+  PyObject *__pyx_v_a = 0;
+  struct PyPetscMatObject *__pyx_v_J = 0;
+  struct PyPetscMatObject *__pyx_v_P = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setTime (wrapper)", 0);
+  __Pyx_RefNannySetupContext("computeI2Jacobian (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_t,0};
-    PyObject* values[1] = {0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_t,&__pyx_n_s_x,&__pyx_n_s_xdot,&__pyx_n_s_xdotdot,&__pyx_n_s_v,&__pyx_n_s_a,&__pyx_n_s_J,&__pyx_n_s_P,0};
+    PyObject* values[8] = {0,0,0,0,0,0,0,0};
+    values[7] = (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  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
+        CYTHON_FALLTHROUGH;
+        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
+        CYTHON_FALLTHROUGH;
+        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -178772,72 +189881,193 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_75setTime(PyObject *__pyx_v_self,
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_t)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("computeI2Jacobian", 0, 7, 8, 1); __PYX_ERR(37, 332, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_xdot)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("computeI2Jacobian", 0, 7, 8, 2); __PYX_ERR(37, 332, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_xdotdot)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("computeI2Jacobian", 0, 7, 8, 3); __PYX_ERR(37, 332, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_v)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("computeI2Jacobian", 0, 7, 8, 4); __PYX_ERR(37, 332, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  5:
+        if (likely((values[5] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_a)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("computeI2Jacobian", 0, 7, 8, 5); __PYX_ERR(37, 332, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  6:
+        if (likely((values[6] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_J)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("computeI2Jacobian", 0, 7, 8, 6); __PYX_ERR(37, 332, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  7:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_P);
+          if (value) { values[7] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTime") < 0)) __PYX_ERR(37, 320, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeI2Jacobian") < 0)) __PYX_ERR(37, 332, __pyx_L3_error)
       }
-    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
-      goto __pyx_L5_argtuple_error;
     } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
+        CYTHON_FALLTHROUGH;
+        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
+        values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        values[3] = PyTuple_GET_ITEM(__pyx_args, 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_t = values[0];
+    __pyx_v_x = ((struct PyPetscVecObject *)values[1]);
+    __pyx_v_xdot = ((struct PyPetscVecObject *)values[2]);
+    __pyx_v_xdotdot = ((struct PyPetscVecObject *)values[3]);
+    __pyx_v_v = values[4];
+    __pyx_v_a = values[5];
+    __pyx_v_J = ((struct PyPetscMatObject *)values[6]);
+    __pyx_v_P = ((struct PyPetscMatObject *)values[7]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setTime", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 320, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("computeI2Jacobian", 0, 7, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 332, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.setTime", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.computeI2Jacobian", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_74setTime(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_t);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(37, 332, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_xdot), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "xdot", 0))) __PYX_ERR(37, 332, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_xdotdot), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "xdotdot", 0))) __PYX_ERR(37, 332, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_J), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "J", 0))) __PYX_ERR(37, 332, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_P), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "P", 0))) __PYX_ERR(37, 332, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_72computeI2Jacobian(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_t, __pyx_v_x, __pyx_v_xdot, __pyx_v_xdotdot, __pyx_v_v, __pyx_v_a, __pyx_v_J, __pyx_v_P);
 
   /* 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_74setTime(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t) {
-  PetscReal __pyx_v_rval;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_72computeI2Jacobian(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_x, struct PyPetscVecObject *__pyx_v_xdot, struct PyPetscVecObject *__pyx_v_xdotdot, PyObject *__pyx_v_v, PyObject *__pyx_v_a, struct PyPetscMatObject *__pyx_v_J, struct PyPetscMatObject *__pyx_v_P) {
+  PetscReal __pyx_v_rval1;
+  PetscReal __pyx_v_rval2;
+  PetscReal __pyx_v_rval3;
+  Mat __pyx_v_jmat;
+  Mat __pyx_v_pmat;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PetscReal __pyx_t_1;
-  int __pyx_t_2;
-  __Pyx_RefNannySetupContext("setTime", 0);
+  Mat __pyx_t_2;
+  int __pyx_t_3;
+  int __pyx_t_4;
+  int __pyx_t_5;
+  __Pyx_RefNannySetupContext("computeI2Jacobian", 0);
 
-  /* "PETSc/TS.pyx":321
- * 
- *     def setTime(self, t):
- *         cdef PetscReal rval = asReal(t)             # <<<<<<<<<<<<<<
- *         CHKERR( TSSetTime(self.ts, rval) )
+  /* "PETSc/TS.pyx":333
  * 
+ *     def computeI2Jacobian(self, t, Vec x, Vec xdot, Vec xdotdot, v, a, Mat J, Mat P=None):
+ *         cdef PetscReal rval1 = asReal(t)             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval2 = asReal(v)
+ *         cdef PetscReal rval3 = asReal(a)
  */
-  __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;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_t); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(37, 333, __pyx_L1_error)
+  __pyx_v_rval1 = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":322
- *     def setTime(self, t):
- *         cdef PetscReal rval = asReal(t)
- *         CHKERR( TSSetTime(self.ts, rval) )             # <<<<<<<<<<<<<<
+  /* "PETSc/TS.pyx":334
+ *     def computeI2Jacobian(self, t, Vec x, Vec xdot, Vec xdotdot, v, a, Mat J, Mat P=None):
+ *         cdef PetscReal rval1 = asReal(t)
+ *         cdef PetscReal rval2 = asReal(v)             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval3 = asReal(a)
+ *         cdef PetscMat jmat = J.mat, pmat = J.mat
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_v); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(37, 334, __pyx_L1_error)
+  __pyx_v_rval2 = __pyx_t_1;
+
+  /* "PETSc/TS.pyx":335
+ *         cdef PetscReal rval1 = asReal(t)
+ *         cdef PetscReal rval2 = asReal(v)
+ *         cdef PetscReal rval3 = asReal(a)             # <<<<<<<<<<<<<<
+ *         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_a); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(37, 335, __pyx_L1_error)
+  __pyx_v_rval3 = __pyx_t_1;
+
+  /* "PETSc/TS.pyx":336
+ *         cdef PetscReal rval2 = asReal(v)
+ *         cdef PetscReal rval3 = asReal(a)
+ *         cdef PetscMat jmat = J.mat, pmat = J.mat             # <<<<<<<<<<<<<<
+ *         if P is not None: pmat = P.mat
+ *         CHKERR( TSComputeI2Jacobian(self.ts, rval1, x.vec, xdot.vec, xdotdot.vec, rval2, rval3,
+ */
+  __pyx_t_2 = __pyx_v_J->mat;
+  __pyx_v_jmat = __pyx_t_2;
+  __pyx_t_2 = __pyx_v_J->mat;
+  __pyx_v_pmat = __pyx_t_2;
+
+  /* "PETSc/TS.pyx":337
+ *         cdef PetscReal rval3 = asReal(a)
+ *         cdef PetscMat jmat = J.mat, pmat = J.mat
+ *         if P is not None: pmat = P.mat             # <<<<<<<<<<<<<<
+ *         CHKERR( TSComputeI2Jacobian(self.ts, rval1, x.vec, xdot.vec, xdotdot.vec, rval2, rval3,
+ *                                    jmat, pmat) )
+ */
+  __pyx_t_3 = (((PyObject *)__pyx_v_P) != Py_None);
+  __pyx_t_4 = (__pyx_t_3 != 0);
+  if (__pyx_t_4) {
+    __pyx_t_2 = __pyx_v_P->mat;
+    __pyx_v_pmat = __pyx_t_2;
+  }
+
+  /* "PETSc/TS.pyx":338
+ *         cdef PetscMat jmat = J.mat, pmat = J.mat
+ *         if P is not None: pmat = P.mat
+ *         CHKERR( TSComputeI2Jacobian(self.ts, rval1, x.vec, xdot.vec, xdotdot.vec, rval2, rval3,             # <<<<<<<<<<<<<<
+ *                                    jmat, pmat) )
  * 
- *     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_ERR(37, 322, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSComputeI2Jacobian(__pyx_v_self->ts, __pyx_v_rval1, __pyx_v_x->vec, __pyx_v_xdot->vec, __pyx_v_xdotdot->vec, __pyx_v_rval2, __pyx_v_rval3, __pyx_v_jmat, __pyx_v_pmat)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(37, 338, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":320
- *     # --- customization ---
+  /* "PETSc/TS.pyx":332
+ *                                    f.vec) )
  * 
- *     def setTime(self, t):             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval = asReal(t)
- *         CHKERR( TSSetTime(self.ts, rval) )
+ *     def computeI2Jacobian(self, t, Vec x, Vec xdot, Vec xdotdot, v, a, Mat J, Mat P=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval1 = asReal(t)
+ *         cdef PetscReal rval2 = asReal(v)
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.setTime", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.computeI2Jacobian", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -178845,300 +190075,489 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_74setTime(struct PyPetscTSObject
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":324
- *         CHKERR( TSSetTime(self.ts, rval) )
+/* "PETSc/TS.pyx":341
+ *                                    jmat, pmat) )
  * 
- *     def getTime(self):             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval = 0
- *         CHKERR( TSGetTime(self.ts, &rval) )
+ *     def getI2Function(self):             # <<<<<<<<<<<<<<
+ *         cdef Vec f = Vec()
+ *         CHKERR( TSGetI2Function(self.ts, &f.vec, NULL, NULL) )
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_75getI2Function(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_74getI2Function[] = "TS.getI2Function(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_75getI2Function(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getTime (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getI2Function (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_76getTime(((struct PyPetscTSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("getI2Function", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getI2Function", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_74getI2Function(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_76getTime(struct PyPetscTSObject *__pyx_v_self) {
-  PetscReal __pyx_v_rval;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_74getI2Function(struct PyPetscTSObject *__pyx_v_self) {
+  struct PyPetscVecObject *__pyx_v_f = 0;
+  PyObject *__pyx_v_function = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  __Pyx_RefNannySetupContext("getTime", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getI2Function", 0);
 
-  /* "PETSc/TS.pyx":325
+  /* "PETSc/TS.pyx":342
  * 
- *     def getTime(self):
- *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
- *         CHKERR( TSGetTime(self.ts, &rval) )
- *         return toReal(rval)
+ *     def getI2Function(self):
+ *         cdef Vec f = Vec()             # <<<<<<<<<<<<<<
+ *         CHKERR( TSGetI2Function(self.ts, &f.vec, NULL, NULL) )
+ *         PetscINCREF(f.obj)
  */
-  __pyx_v_rval = 0.0;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 342, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_f = ((struct PyPetscVecObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":326
- *     def getTime(self):
- *         cdef PetscReal rval = 0
- *         CHKERR( TSGetTime(self.ts, &rval) )             # <<<<<<<<<<<<<<
- *         return toReal(rval)
- * 
+  /* "PETSc/TS.pyx":343
+ *     def getI2Function(self):
+ *         cdef Vec f = Vec()
+ *         CHKERR( TSGetI2Function(self.ts, &f.vec, NULL, NULL) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(f.obj)
+ *         cdef object function = self.get_attr('__i2function__')
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetI2Function(__pyx_v_self->ts, (&__pyx_v_f->vec), NULL, NULL)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(37, 343, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":327
- *         cdef PetscReal rval = 0
- *         CHKERR( TSGetTime(self.ts, &rval) )
- *         return toReal(rval)             # <<<<<<<<<<<<<<
- * 
- *     def getPrevTime(self):
+  /* "PETSc/TS.pyx":344
+ *         cdef Vec f = Vec()
+ *         CHKERR( TSGetI2Function(self.ts, &f.vec, NULL, NULL) )
+ *         PetscINCREF(f.obj)             # <<<<<<<<<<<<<<
+ *         cdef object function = self.get_attr('__i2function__')
+ *         return (f, function)
+ */
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_f->__pyx_base.obj);
+
+  /* "PETSc/TS.pyx":345
+ *         CHKERR( TSGetI2Function(self.ts, &f.vec, NULL, NULL) )
+ *         PetscINCREF(f.obj)
+ *         cdef object function = self.get_attr('__i2function__')             # <<<<<<<<<<<<<<
+ *         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), ((char *)"__i2function__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 345, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_function = __pyx_t_1;
+  __pyx_t_1 = 0;
+
+  /* "PETSc/TS.pyx":346
+ *         PetscINCREF(f.obj)
+ *         cdef object function = self.get_attr('__i2function__')
+ *         return (f, function)             # <<<<<<<<<<<<<<
+ * 
+ *     def getI2Jacobian(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __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;
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 346, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_INCREF(((PyObject *)__pyx_v_f));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_f));
+  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_f));
+  __Pyx_INCREF(__pyx_v_function);
+  __Pyx_GIVEREF(__pyx_v_function);
+  PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_v_function);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":324
- *         CHKERR( TSSetTime(self.ts, rval) )
+  /* "PETSc/TS.pyx":341
+ *                                    jmat, pmat) )
  * 
- *     def getTime(self):             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval = 0
- *         CHKERR( TSGetTime(self.ts, &rval) )
+ *     def getI2Function(self):             # <<<<<<<<<<<<<<
+ *         cdef Vec f = Vec()
+ *         CHKERR( TSGetI2Function(self.ts, &f.vec, NULL, NULL) )
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.getTime", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.getI2Function", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_f);
+  __Pyx_XDECREF(__pyx_v_function);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":329
- *         return toReal(rval)
+/* "PETSc/TS.pyx":348
+ *         return (f, function)
  * 
- *     def getPrevTime(self):             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval = 0
- *         CHKERR( TSGetPrevTime(self.ts, &rval) )
+ *     def getI2Jacobian(self):             # <<<<<<<<<<<<<<
+ *         cdef Mat J = Mat(), P = Mat()
+ *         CHKERR( TSGetI2Jacobian(self.ts, &J.mat, &P.mat, NULL, NULL) )
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_77getI2Jacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_76getI2Jacobian[] = "TS.getI2Jacobian(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_77getI2Jacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getPrevTime (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getI2Jacobian (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));
+    __Pyx_RaiseArgtupleInvalid("getI2Jacobian", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getI2Jacobian", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_76getI2Jacobian(((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;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_76getI2Jacobian(struct PyPetscTSObject *__pyx_v_self) {
+  struct PyPetscMatObject *__pyx_v_J = 0;
+  struct PyPetscMatObject *__pyx_v_P = 0;
+  PyObject *__pyx_v_jacobian = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  __Pyx_RefNannySetupContext("getPrevTime", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getI2Jacobian", 0);
 
-  /* "PETSc/TS.pyx":330
+  /* "PETSc/TS.pyx":349
  * 
- *     def getPrevTime(self):
- *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
- *         CHKERR( TSGetPrevTime(self.ts, &rval) )
- *         return toReal(rval)
+ *     def getI2Jacobian(self):
+ *         cdef Mat J = Mat(), P = Mat()             # <<<<<<<<<<<<<<
+ *         CHKERR( TSGetI2Jacobian(self.ts, &J.mat, &P.mat, NULL, NULL) )
+ *         PetscINCREF(J.obj); PetscINCREF(P.obj)
  */
-  __pyx_v_rval = 0.0;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 349, __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 *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 349, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_P = ((struct PyPetscMatObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":331
- *     def getPrevTime(self):
- *         cdef PetscReal rval = 0
- *         CHKERR( TSGetPrevTime(self.ts, &rval) )             # <<<<<<<<<<<<<<
- *         return toReal(rval)
+  /* "PETSc/TS.pyx":350
+ *     def getI2Jacobian(self):
+ *         cdef Mat J = Mat(), P = Mat()
+ *         CHKERR( TSGetI2Jacobian(self.ts, &J.mat, &P.mat, NULL, NULL) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(J.obj); PetscINCREF(P.obj)
+ *         cdef object jacobian = self.get_attr('__i2jacobian__')
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetI2Jacobian(__pyx_v_self->ts, (&__pyx_v_J->mat), (&__pyx_v_P->mat), NULL, NULL)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(37, 350, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":351
+ *         cdef Mat J = Mat(), P = Mat()
+ *         CHKERR( TSGetI2Jacobian(self.ts, &J.mat, &P.mat, NULL, NULL) )
+ *         PetscINCREF(J.obj); PetscINCREF(P.obj)             # <<<<<<<<<<<<<<
+ *         cdef object jacobian = self.get_attr('__i2jacobian__')
+ *         return (J, P, jacobian)
+ */
+  __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":352
+ *         CHKERR( TSGetI2Jacobian(self.ts, &J.mat, &P.mat, NULL, NULL) )
+ *         PetscINCREF(J.obj); PetscINCREF(P.obj)
+ *         cdef object jacobian = self.get_attr('__i2jacobian__')             # <<<<<<<<<<<<<<
+ *         return (J, P, jacobian)
  * 
  */
-  __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)
+  __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 *)"__i2jacobian__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 352, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_jacobian = __pyx_t_1;
+  __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":332
- *         cdef PetscReal rval = 0
- *         CHKERR( TSGetPrevTime(self.ts, &rval) )
- *         return toReal(rval)             # <<<<<<<<<<<<<<
+  /* "PETSc/TS.pyx":353
+ *         PetscINCREF(J.obj); PetscINCREF(P.obj)
+ *         cdef object jacobian = self.get_attr('__i2jacobian__')
+ *         return (J, P, jacobian)             # <<<<<<<<<<<<<<
  * 
- *     def getSolveTime(self):
+ *     # --- solution vector ---
  */
   __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;
+  __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 353, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_INCREF(((PyObject *)__pyx_v_J));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_J));
+  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_J));
+  __Pyx_INCREF(((PyObject *)__pyx_v_P));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_P));
+  PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_P));
+  __Pyx_INCREF(__pyx_v_jacobian);
+  __Pyx_GIVEREF(__pyx_v_jacobian);
+  PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_jacobian);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":329
- *         return toReal(rval)
+  /* "PETSc/TS.pyx":348
+ *         return (f, function)
  * 
- *     def getPrevTime(self):             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval = 0
- *         CHKERR( TSGetPrevTime(self.ts, &rval) )
+ *     def getI2Jacobian(self):             # <<<<<<<<<<<<<<
+ *         cdef Mat J = Mat(), P = Mat()
+ *         CHKERR( TSGetI2Jacobian(self.ts, &J.mat, &P.mat, NULL, NULL) )
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.getPrevTime", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.getI2Jacobian", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_J);
+  __Pyx_XDECREF((PyObject *)__pyx_v_P);
+  __Pyx_XDECREF(__pyx_v_jacobian);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":334
- *         return toReal(rval)
+/* "PETSc/TS.pyx":357
+ *     # --- solution vector ---
+ * 
+ *     def setSolution(self, Vec u):             # <<<<<<<<<<<<<<
+ *         CHKERR( TSSetSolution(self.ts, u.vec) )
  * 
- *     def getSolveTime(self):             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval = 0
- *         CHKERR( TSGetSolveTime(self.ts, &rval) )
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_79setSolution(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_78setSolution[] = "TS.setSolution(self, Vec u)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_79setSolution(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscVecObject *__pyx_v_u = 0;
   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_80getSolveTime(((struct PyPetscTSObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("setSolution (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_u,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);
+        CYTHON_FALLTHROUGH;
+        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_u)) != 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, "setSolution") < 0)) __PYX_ERR(37, 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_u = ((struct PyPetscVecObject *)values[0]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setSolution", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 357, __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_ERR(37, 357, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_78setSolution(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_u);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_80getSolveTime(struct PyPetscTSObject *__pyx_v_self) {
-  PetscReal __pyx_v_rval;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_78setSolution(struct PyPetscTSObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_u) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  __Pyx_RefNannySetupContext("getSolveTime", 0);
+  __Pyx_RefNannySetupContext("setSolution", 0);
 
-  /* "PETSc/TS.pyx":335
+  /* "PETSc/TS.pyx":358
  * 
- *     def getSolveTime(self):
- *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
- *         CHKERR( TSGetSolveTime(self.ts, &rval) )
- *         return toReal(rval)
+ *     def setSolution(self, Vec u):
+ *         CHKERR( TSSetSolution(self.ts, u.vec) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getSolution(self):
  */
-  __pyx_v_rval = 0.0;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetSolution(__pyx_v_self->ts, __pyx_v_u->vec)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(37, 358, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":336
- *     def getSolveTime(self):
- *         cdef PetscReal rval = 0
- *         CHKERR( TSGetSolveTime(self.ts, &rval) )             # <<<<<<<<<<<<<<
- *         return toReal(rval)
+  /* "PETSc/TS.pyx":357
+ *     # --- solution vector ---
+ * 
+ *     def setSolution(self, Vec u):             # <<<<<<<<<<<<<<
+ *         CHKERR( TSSetSolution(self.ts, u.vec) )
  * 
  */
-  __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":337
- *         cdef PetscReal rval = 0
- *         CHKERR( TSGetSolveTime(self.ts, &rval) )
- *         return toReal(rval)             # <<<<<<<<<<<<<<
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.setSolution", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TS.pyx":360
+ *         CHKERR( TSSetSolution(self.ts, u.vec) )
+ * 
+ *     def getSolution(self):             # <<<<<<<<<<<<<<
+ *         cdef Vec u = Vec()
+ *         CHKERR( TSGetSolution(self.ts, &u.vec) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_81getSolution(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_80getSolution[] = "TS.getSolution(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_81getSolution(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_80getSolution(((struct PyPetscTSObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_80getSolution(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;
+  __Pyx_RefNannySetupContext("getSolution", 0);
+
+  /* "PETSc/TS.pyx":361
+ * 
+ *     def getSolution(self):
+ *         cdef Vec u = Vec()             # <<<<<<<<<<<<<<
+ *         CHKERR( TSGetSolution(self.ts, &u.vec) )
+ *         PetscINCREF(u.obj)
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 361, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_u = ((struct PyPetscVecObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/TS.pyx":362
+ *     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 == ((int)-1))) __PYX_ERR(37, 362, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":363
+ *         cdef Vec u = Vec()
+ *         CHKERR( TSGetSolution(self.ts, &u.vec) )
+ *         PetscINCREF(u.obj)             # <<<<<<<<<<<<<<
+ *         return u
  * 
- *     def setInitialTimeStep(self, initial_time, initial_time_step):
+ */
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_u->__pyx_base.obj);
+
+  /* "PETSc/TS.pyx":364
+ *         CHKERR( TSGetSolution(self.ts, &u.vec) )
+ *         PetscINCREF(u.obj)
+ *         return u             # <<<<<<<<<<<<<<
+ * 
+ *     def setSolution2(self, Vec u, Vec v):
  */
   __Pyx_XDECREF(__pyx_r);
-  __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;
+  __Pyx_INCREF(((PyObject *)__pyx_v_u));
+  __pyx_r = ((PyObject *)__pyx_v_u);
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":334
- *         return toReal(rval)
+  /* "PETSc/TS.pyx":360
+ *         CHKERR( TSSetSolution(self.ts, u.vec) )
  * 
- *     def getSolveTime(self):             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval = 0
- *         CHKERR( TSGetSolveTime(self.ts, &rval) )
+ *     def getSolution(self):             # <<<<<<<<<<<<<<
+ *         cdef Vec u = Vec()
+ *         CHKERR( TSGetSolution(self.ts, &u.vec) )
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.getSolveTime", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.getSolution", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_u);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":339
- *         return toReal(rval)
+/* "PETSc/TS.pyx":366
+ *         return u
+ * 
+ *     def setSolution2(self, Vec u, Vec v):             # <<<<<<<<<<<<<<
+ *         CHKERR( TS2SetSolution(self.ts, u.vec, v.vec) )
  * 
- *     def setInitialTimeStep(self, initial_time, initial_time_step):             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval1 = asReal(initial_time)
- *         cdef PetscReal rval2 = asReal(initial_time_step)
  */
 
 /* Python wrapper */
-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;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_83setSolution2(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_82setSolution2[] = "TS.setSolution2(self, Vec u, Vec v)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_83setSolution2(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscVecObject *__pyx_v_u = 0;
+  struct PyPetscVecObject *__pyx_v_v = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setInitialTimeStep (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setSolution2 (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_initial_time,&__pyx_n_s_initial_time_step,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_u,&__pyx_n_s_v,0};
     PyObject* values[2] = {0,0};
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         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_initial_time)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_u)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_initial_time_step)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_v)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setInitialTimeStep", 1, 2, 2, 1); __PYX_ERR(37, 339, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setSolution2", 1, 2, 2, 1); __PYX_ERR(37, 366, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setInitialTimeStep") < 0)) __PYX_ERR(37, 339, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setSolution2") < 0)) __PYX_ERR(37, 366, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -179146,75 +190565,58 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_83setInitialTimeStep(PyObject *__
       values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
       values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
     }
-    __pyx_v_initial_time = values[0];
-    __pyx_v_initial_time_step = values[1];
+    __pyx_v_u = ((struct PyPetscVecObject *)values[0]);
+    __pyx_v_v = ((struct PyPetscVecObject *)values[1]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setInitialTimeStep", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 339, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setSolution2", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 366, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.setInitialTimeStep", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.setSolution2", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_82setInitialTimeStep(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_initial_time, __pyx_v_initial_time_step);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_u), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "u", 0))) __PYX_ERR(37, 366, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_v), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "v", 0))) __PYX_ERR(37, 366, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_82setSolution2(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_u, __pyx_v_v);
 
   /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_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;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_82setSolution2(struct PyPetscTSObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_u, struct PyPetscVecObject *__pyx_v_v) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscReal __pyx_t_1;
-  int __pyx_t_2;
-  __Pyx_RefNannySetupContext("setInitialTimeStep", 0);
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("setSolution2", 0);
 
-  /* "PETSc/TS.pyx":340
+  /* "PETSc/TS.pyx":367
  * 
- *     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_ERR(37, 340, __pyx_L1_error)
-  __pyx_v_rval1 = __pyx_t_1;
-
-  /* "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) )
+ *     def setSolution2(self, Vec u, Vec v):
+ *         CHKERR( TS2SetSolution(self.ts, u.vec, v.vec) )             # <<<<<<<<<<<<<<
  * 
+ *     def getSolution2(self):
  */
-  __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;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TS2SetSolution(__pyx_v_self->ts, __pyx_v_u->vec, __pyx_v_v->vec)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(37, 367, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":342
- *         cdef PetscReal rval1 = asReal(initial_time)
- *         cdef PetscReal rval2 = asReal(initial_time_step)
- *         CHKERR( TSSetInitialTimeStep(self.ts, rval1, rval2) )             # <<<<<<<<<<<<<<
+  /* "PETSc/TS.pyx":366
+ *         return u
  * 
- *     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_ERR(37, 342, __pyx_L1_error)
-
-  /* "PETSc/TS.pyx":339
- *         return toReal(rval)
+ *     def setSolution2(self, Vec u, Vec v):             # <<<<<<<<<<<<<<
+ *         CHKERR( TS2SetSolution(self.ts, u.vec, v.vec) )
  * 
- *     def setInitialTimeStep(self, initial_time, initial_time_step):             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval1 = asReal(initial_time)
- *         cdef PetscReal rval2 = asReal(initial_time_step)
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.setInitialTimeStep", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.setSolution2", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -179222,585 +190624,534 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_82setInitialTimeStep(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":344
- *         CHKERR( TSSetInitialTimeStep(self.ts, rval1, rval2) )
+/* "PETSc/TS.pyx":369
+ *         CHKERR( TS2SetSolution(self.ts, u.vec, v.vec) )
  * 
- *     def setTimeStep(self, time_step):             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval = asReal(time_step)
- *         CHKERR( TSSetTimeStep(self.ts, rval) )
+ *     def getSolution2(self):             # <<<<<<<<<<<<<<
+ *         cdef Vec u = Vec()
+ *         cdef Vec v = Vec()
  */
 
 /* Python wrapper */
-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;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_85getSolution2(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_84getSolution2[] = "TS.getSolution2(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_85getSolution2(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setTimeStep (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_time_step,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_time_step)) != 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, "setTimeStep") < 0)) __PYX_ERR(37, 344, __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_time_step = values[0];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_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_84setTimeStep(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_time_step);
+  __Pyx_RefNannySetupContext("getSolution2 (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getSolution2", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getSolution2", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_84getSolution2(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_84setTimeStep(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_time_step) {
-  PetscReal __pyx_v_rval;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_84getSolution2(struct PyPetscTSObject *__pyx_v_self) {
+  struct PyPetscVecObject *__pyx_v_u = 0;
+  struct PyPetscVecObject *__pyx_v_v = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscReal __pyx_t_1;
+  PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
-  __Pyx_RefNannySetupContext("setTimeStep", 0);
+  __Pyx_RefNannySetupContext("getSolution2", 0);
 
-  /* "PETSc/TS.pyx":345
+  /* "PETSc/TS.pyx":370
  * 
- *     def setTimeStep(self, time_step):
- *         cdef PetscReal rval = asReal(time_step)             # <<<<<<<<<<<<<<
- *         CHKERR( TSSetTimeStep(self.ts, rval) )
+ *     def getSolution2(self):
+ *         cdef Vec u = Vec()             # <<<<<<<<<<<<<<
+ *         cdef Vec v = Vec()
+ *         CHKERR( TS2GetSolution(self.ts, &u.vec, &v.vec) )
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 370, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_u = ((struct PyPetscVecObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/TS.pyx":371
+ *     def getSolution2(self):
+ *         cdef Vec u = Vec()
+ *         cdef Vec v = Vec()             # <<<<<<<<<<<<<<
+ *         CHKERR( TS2GetSolution(self.ts, &u.vec, &v.vec) )
+ *         PetscINCREF(u.obj)
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 371, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_v = ((struct PyPetscVecObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/TS.pyx":372
+ *         cdef Vec u = Vec()
+ *         cdef Vec v = Vec()
+ *         CHKERR( TS2GetSolution(self.ts, &u.vec, &v.vec) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(u.obj)
+ *         PetscINCREF(v.obj)
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TS2GetSolution(__pyx_v_self->ts, (&__pyx_v_u->vec), (&__pyx_v_v->vec))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(37, 372, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":373
+ *         cdef Vec v = Vec()
+ *         CHKERR( TS2GetSolution(self.ts, &u.vec, &v.vec) )
+ *         PetscINCREF(u.obj)             # <<<<<<<<<<<<<<
+ *         PetscINCREF(v.obj)
+ *         return (u, v)
+ */
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_u->__pyx_base.obj);
+
+  /* "PETSc/TS.pyx":374
+ *         CHKERR( TS2GetSolution(self.ts, &u.vec, &v.vec) )
+ *         PetscINCREF(u.obj)
+ *         PetscINCREF(v.obj)             # <<<<<<<<<<<<<<
+ *         return (u, v)
  * 
  */
-  __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;
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_v->__pyx_base.obj);
 
-  /* "PETSc/TS.pyx":346
- *     def setTimeStep(self, time_step):
- *         cdef PetscReal rval = asReal(time_step)
- *         CHKERR( TSSetTimeStep(self.ts, rval) )             # <<<<<<<<<<<<<<
+  /* "PETSc/TS.pyx":375
+ *         PetscINCREF(u.obj)
+ *         PetscINCREF(v.obj)
+ *         return (u, v)             # <<<<<<<<<<<<<<
  * 
- *     def getTimeStep(self):
+ *     # --- inner solver ---
  */
-  __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)
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 375, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_INCREF(((PyObject *)__pyx_v_u));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_u));
+  PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)__pyx_v_u));
+  __Pyx_INCREF(((PyObject *)__pyx_v_v));
+  __Pyx_GIVEREF(((PyObject *)__pyx_v_v));
+  PyTuple_SET_ITEM(__pyx_t_1, 1, ((PyObject *)__pyx_v_v));
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":344
- *         CHKERR( TSSetInitialTimeStep(self.ts, rval1, rval2) )
+  /* "PETSc/TS.pyx":369
+ *         CHKERR( TS2SetSolution(self.ts, u.vec, v.vec) )
  * 
- *     def setTimeStep(self, time_step):             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval = asReal(time_step)
- *         CHKERR( TSSetTimeStep(self.ts, rval) )
+ *     def getSolution2(self):             # <<<<<<<<<<<<<<
+ *         cdef Vec u = Vec()
+ *         cdef Vec v = Vec()
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.setTimeStep", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.getSolution2", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_u);
+  __Pyx_XDECREF((PyObject *)__pyx_v_v);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":348
- *         CHKERR( TSSetTimeStep(self.ts, rval) )
+/* "PETSc/TS.pyx":379
+ *     # --- inner solver ---
  * 
- *     def getTimeStep(self):             # <<<<<<<<<<<<<<
- *         cdef PetscReal tstep = 0
- *         CHKERR( TSGetTimeStep(self.ts, &tstep) )
+ *     def getSNES(self):             # <<<<<<<<<<<<<<
+ *         cdef SNES snes = SNES()
+ *         CHKERR( TSGetSNES(self.ts, &snes.snes) )
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_87getSNES(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_86getSNES[] = "TS.getSNES(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_87getSNES(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getTimeStep (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getSNES (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_86getTimeStep(((struct PyPetscTSObject *)__pyx_v_self));
+    __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_86getSNES(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_86getTimeStep(struct PyPetscTSObject *__pyx_v_self) {
-  PetscReal __pyx_v_tstep;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_86getSNES(struct PyPetscTSObject *__pyx_v_self) {
+  struct PyPetscSNESObject *__pyx_v_snes = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  __Pyx_RefNannySetupContext("getTimeStep", 0);
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getSNES", 0);
 
-  /* "PETSc/TS.pyx":349
+  /* "PETSc/TS.pyx":380
  * 
- *     def getTimeStep(self):
- *         cdef PetscReal tstep = 0             # <<<<<<<<<<<<<<
- *         CHKERR( TSGetTimeStep(self.ts, &tstep) )
- *         return toReal(tstep)
+ *     def getSNES(self):
+ *         cdef SNES snes = SNES()             # <<<<<<<<<<<<<<
+ *         CHKERR( TSGetSNES(self.ts, &snes.snes) )
+ *         PetscINCREF(snes.obj)
  */
-  __pyx_v_tstep = 0.0;
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 380, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_snes = ((struct PyPetscSNESObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":350
- *     def getTimeStep(self):
- *         cdef PetscReal tstep = 0
- *         CHKERR( TSGetTimeStep(self.ts, &tstep) )             # <<<<<<<<<<<<<<
- *         return toReal(tstep)
+  /* "PETSc/TS.pyx":381
+ *     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 == ((int)-1))) __PYX_ERR(37, 381, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":382
+ *         cdef SNES snes = SNES()
+ *         CHKERR( TSGetSNES(self.ts, &snes.snes) )
+ *         PetscINCREF(snes.obj)             # <<<<<<<<<<<<<<
+ *         return snes
  * 
  */
-  __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)
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_snes->__pyx_base.obj);
 
-  /* "PETSc/TS.pyx":351
- *         cdef PetscReal tstep = 0
- *         CHKERR( TSGetTimeStep(self.ts, &tstep) )
- *         return toReal(tstep)             # <<<<<<<<<<<<<<
+  /* "PETSc/TS.pyx":383
+ *         CHKERR( TSGetSNES(self.ts, &snes.snes) )
+ *         PetscINCREF(snes.obj)
+ *         return snes             # <<<<<<<<<<<<<<
  * 
- *     def setStepNumber(self, step_number):
+ *     def getKSP(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __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;
+  __Pyx_INCREF(((PyObject *)__pyx_v_snes));
+  __pyx_r = ((PyObject *)__pyx_v_snes);
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":348
- *         CHKERR( TSSetTimeStep(self.ts, rval) )
+  /* "PETSc/TS.pyx":379
+ *     # --- inner solver ---
  * 
- *     def getTimeStep(self):             # <<<<<<<<<<<<<<
- *         cdef PetscReal tstep = 0
- *         CHKERR( TSGetTimeStep(self.ts, &tstep) )
+ *     def getSNES(self):             # <<<<<<<<<<<<<<
+ *         cdef SNES snes = SNES()
+ *         CHKERR( TSGetSNES(self.ts, &snes.snes) )
  */
 
   /* function exit code */
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.getTimeStep", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.getSNES", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_snes);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":353
- *         return toReal(tstep)
+/* "PETSc/TS.pyx":385
+ *         return snes
  * 
- *     def setStepNumber(self, step_number):             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival = asInt(step_number)
- *         CHKERR( TSSetTimeStepNumber(self.ts, ival) )
+ *     def getKSP(self):             # <<<<<<<<<<<<<<
+ *         cdef KSP ksp = KSP()
+ *         CHKERR( TSGetKSP(self.ts, &ksp.ksp) )
  */
 
 /* Python wrapper */
-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;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_89getKSP(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_88getKSP[] = "TS.getKSP(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_89getKSP(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setStepNumber (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_step_number,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_step_number)) != 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, "setStepNumber") < 0)) __PYX_ERR(37, 353, __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_step_number = values[0];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_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_88setStepNumber(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_step_number);
+  __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_88getKSP(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_88setStepNumber(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_step_number) {
-  PetscInt __pyx_v_ival;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_88getKSP(struct PyPetscTSObject *__pyx_v_self) {
+  struct PyPetscKSPObject *__pyx_v_ksp = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscInt __pyx_t_1;
+  PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
-  __Pyx_RefNannySetupContext("setStepNumber", 0);
+  __Pyx_RefNannySetupContext("getKSP", 0);
 
-  /* "PETSc/TS.pyx":354
+  /* "PETSc/TS.pyx":386
  * 
- *     def setStepNumber(self, step_number):
- *         cdef PetscInt ival = asInt(step_number)             # <<<<<<<<<<<<<<
- *         CHKERR( TSSetTimeStepNumber(self.ts, ival) )
+ *     def getKSP(self):
+ *         cdef KSP ksp = KSP()             # <<<<<<<<<<<<<<
+ *         CHKERR( TSGetKSP(self.ts, &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(37, 386, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_ksp = ((struct PyPetscKSPObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/TS.pyx":387
+ *     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 == ((int)-1))) __PYX_ERR(37, 387, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":388
+ *         cdef KSP ksp = KSP()
+ *         CHKERR( TSGetKSP(self.ts, &ksp.ksp) )
+ *         PetscINCREF(ksp.obj)             # <<<<<<<<<<<<<<
+ *         return ksp
  * 
  */
-  __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;
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_ksp->__pyx_base.obj);
 
-  /* "PETSc/TS.pyx":355
- *     def setStepNumber(self, step_number):
- *         cdef PetscInt ival = asInt(step_number)
- *         CHKERR( TSSetTimeStepNumber(self.ts, ival) )             # <<<<<<<<<<<<<<
+  /* "PETSc/TS.pyx":389
+ *         CHKERR( TSGetKSP(self.ts, &ksp.ksp) )
+ *         PetscINCREF(ksp.obj)
+ *         return ksp             # <<<<<<<<<<<<<<
  * 
- *     def getStepNumber(self):
+ *     # --- discretization space ---
  */
-  __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)
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_ksp));
+  __pyx_r = ((PyObject *)__pyx_v_ksp);
+  goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":353
- *         return toReal(tstep)
+  /* "PETSc/TS.pyx":385
+ *         return snes
  * 
- *     def setStepNumber(self, step_number):             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival = asInt(step_number)
- *         CHKERR( TSSetTimeStepNumber(self.ts, ival) )
+ *     def getKSP(self):             # <<<<<<<<<<<<<<
+ *         cdef KSP ksp = KSP()
+ *         CHKERR( TSGetKSP(self.ts, &ksp.ksp) )
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.setStepNumber", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.getKSP", __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/TS.pyx":357
- *         CHKERR( TSSetTimeStepNumber(self.ts, ival) )
+/* "PETSc/TS.pyx":393
+ *     # --- discretization space ---
  * 
- *     def getStepNumber(self):             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival = 0
- *         CHKERR( TSGetTimeStepNumber(self.ts, &ival) )
+ *     def getDM(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscDM newdm = NULL
+ *         CHKERR( TSGetDM(self.ts, &newdm) )
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_91getDM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_90getDM[] = "TS.getDM(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_91getDM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getStepNumber (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getDM (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_90getStepNumber(((struct PyPetscTSObject *)__pyx_v_self));
+    __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_90getDM(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_90getStepNumber(struct PyPetscTSObject *__pyx_v_self) {
-  PetscInt __pyx_v_ival;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_90getDM(struct PyPetscTSObject *__pyx_v_self) {
+  DM __pyx_v_newdm;
+  struct PyPetscDMObject *__pyx_v_dm = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  __Pyx_RefNannySetupContext("getStepNumber", 0);
+  PyObject *__pyx_t_3 = NULL;
+  __Pyx_RefNannySetupContext("getDM", 0);
 
-  /* "PETSc/TS.pyx":358
+  /* "PETSc/TS.pyx":394
  * 
- *     def getStepNumber(self):
- *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
- *         CHKERR( TSGetTimeStepNumber(self.ts, &ival) )
- *         return toInt(ival)
+ *     def getDM(self):
+ *         cdef PetscDM newdm = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( TSGetDM(self.ts, &newdm) )
+ *         cdef DM dm = subtype_DM(newdm)()
  */
-  __pyx_v_ival = 0;
+  __pyx_v_newdm = NULL;
 
-  /* "PETSc/TS.pyx":359
- *     def getStepNumber(self):
- *         cdef PetscInt ival = 0
- *         CHKERR( TSGetTimeStepNumber(self.ts, &ival) )             # <<<<<<<<<<<<<<
- *         return toInt(ival)
+  /* "PETSc/TS.pyx":395
+ *     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 == ((int)-1))) __PYX_ERR(37, 395, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":396
+ *         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_ERR(37, 396, __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_ERR(37, 396, __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_ERR(37, 396, __pyx_L1_error)
+  __pyx_v_dm = ((struct PyPetscDMObject *)__pyx_t_3);
+  __pyx_t_3 = 0;
+
+  /* "PETSc/TS.pyx":397
+ *         CHKERR( TSGetDM(self.ts, &newdm) )
+ *         cdef DM dm = subtype_DM(newdm)()
+ *         dm.dm = newdm             # <<<<<<<<<<<<<<
+ *         PetscINCREF(dm.obj)
+ *         return dm
+ */
+  __pyx_v_dm->dm = __pyx_v_newdm;
+
+  /* "PETSc/TS.pyx":398
+ *         cdef DM dm = subtype_DM(newdm)()
+ *         dm.dm = newdm
+ *         PetscINCREF(dm.obj)             # <<<<<<<<<<<<<<
+ *         return dm
  * 
  */
-  __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)
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_dm->__pyx_base.obj);
 
-  /* "PETSc/TS.pyx":360
- *         cdef PetscInt ival = 0
- *         CHKERR( TSGetTimeStepNumber(self.ts, &ival) )
- *         return toInt(ival)             # <<<<<<<<<<<<<<
+  /* "PETSc/TS.pyx":399
+ *         dm.dm = newdm
+ *         PetscINCREF(dm.obj)
+ *         return dm             # <<<<<<<<<<<<<<
  * 
- *     def setMaxTime(self, max_time):
+ *     def setDM(self, DM dm):
  */
   __Pyx_XDECREF(__pyx_r);
-  __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;
+  __Pyx_INCREF(((PyObject *)__pyx_v_dm));
+  __pyx_r = ((PyObject *)__pyx_v_dm);
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":357
- *         CHKERR( TSSetTimeStepNumber(self.ts, ival) )
+  /* "PETSc/TS.pyx":393
+ *     # --- discretization space ---
  * 
- *     def getStepNumber(self):             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival = 0
- *         CHKERR( TSGetTimeStepNumber(self.ts, &ival) )
+ *     def getDM(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscDM newdm = NULL
+ *         CHKERR( TSGetDM(self.ts, &newdm) )
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.getStepNumber", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.getDM", __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/TS.pyx":362
- *         return toInt(ival)
+/* "PETSc/TS.pyx":401
+ *         return dm
+ * 
+ *     def setDM(self, DM dm):             # <<<<<<<<<<<<<<
+ *         CHKERR( TSSetDM(self.ts, dm.dm) )
  * 
- *     def setMaxTime(self, max_time):             # <<<<<<<<<<<<<<
- *         cdef PetscInt  ival = 0
- *         cdef PetscReal rval = asReal(max_time)
  */
 
 /* Python wrapper */
-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;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_93setDM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_92setDM[] = "TS.setDM(self, DM dm)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_93setDM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscDMObject *__pyx_v_dm = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setMaxTime (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setDM (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_max_time,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);
+        CYTHON_FALLTHROUGH;
         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_max_time)) != 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, "setMaxTime") < 0)) __PYX_ERR(37, 362, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDM") < 0)) __PYX_ERR(37, 401, __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_max_time = values[0];
+    __pyx_v_dm = ((struct PyPetscDMObject *)values[0]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMaxTime", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 362, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setDM", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 401, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.setMaxTime", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.setDM", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __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_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;
-  __Pyx_RefNannySetupContext("setMaxTime", 0);
-
-  /* "PETSc/TS.pyx":363
- * 
- *     def setMaxTime(self, max_time):
- *         cdef PetscInt  ival = 0             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval = asReal(max_time)
- *         CHKERR( TSGetDuration(self.ts, &ival, NULL) )
- */
-  __pyx_v_ival = 0;
-
-  /* "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_ERR(37, 364, __pyx_L1_error)
-  __pyx_v_rval = __pyx_t_1;
-
-  /* "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_ERR(37, 365, __pyx_L1_error)
-
-  /* "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_ERR(37, 366, __pyx_L1_error)
-
-  /* "PETSc/TS.pyx":362
- *         return toInt(ival)
- * 
- *     def setMaxTime(self, max_time):             # <<<<<<<<<<<<<<
- *         cdef PetscInt  ival = 0
- *         cdef PetscReal rval = asReal(max_time)
- */
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dm), __pyx_ptype_8petsc4py_5PETSc_DM, 0, "dm", 0))) __PYX_ERR(37, 401, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_92setDM(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_dm);
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.setMaxTime", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/TS.pyx":368
- *         CHKERR( TSSetDuration(self.ts, ival, rval) )
- * 
- *     def getMaxTime(self):             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval = 0
- *         CHKERR( TSGetDuration(self.ts, NULL, &rval) )
- */
-
-/* Python wrapper */
-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_94getMaxTime(((struct PyPetscTSObject *)__pyx_v_self));
-
-  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_94getMaxTime(struct PyPetscTSObject *__pyx_v_self) {
-  PetscReal __pyx_v_rval;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_92setDM(struct PyPetscTSObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  __Pyx_RefNannySetupContext("getMaxTime", 0);
+  __Pyx_RefNannySetupContext("setDM", 0);
 
-  /* "PETSc/TS.pyx":369
+  /* "PETSc/TS.pyx":402
  * 
- *     def getMaxTime(self):
- *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
- *         CHKERR( TSGetDuration(self.ts, NULL, &rval) )
- *         return toReal(rval)
- */
-  __pyx_v_rval = 0.0;
-
-  /* "PETSc/TS.pyx":370
- *     def getMaxTime(self):
- *         cdef PetscReal rval = 0
- *         CHKERR( TSGetDuration(self.ts, NULL, &rval) )             # <<<<<<<<<<<<<<
- *         return toReal(rval)
+ *     def setDM(self, DM dm):
+ *         CHKERR( TSSetDM(self.ts, dm.dm) )             # <<<<<<<<<<<<<<
  * 
+ *     # --- customization ---
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetDM(__pyx_v_self->ts, __pyx_v_dm->dm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(37, 402, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":371
- *         cdef PetscReal rval = 0
- *         CHKERR( TSGetDuration(self.ts, NULL, &rval) )
- *         return toReal(rval)             # <<<<<<<<<<<<<<
+  /* "PETSc/TS.pyx":401
+ *         return dm
  * 
- *     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_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":368
- *         CHKERR( TSSetDuration(self.ts, ival, rval) )
+ *     def setDM(self, DM dm):             # <<<<<<<<<<<<<<
+ *         CHKERR( TSSetDM(self.ts, dm.dm) )
  * 
- *     def getMaxTime(self):             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval = 0
- *         CHKERR( TSGetDuration(self.ts, NULL, &rval) )
  */
 
   /* 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.TS.getMaxTime", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.setDM", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -179808,123 +191159,105 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_94getMaxTime(struct PyPetscTSObje
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":373
- *         return toReal(rval)
+/* "PETSc/TS.pyx":406
+ *     # --- customization ---
  * 
- *     def setMaxSteps(self, max_steps):             # <<<<<<<<<<<<<<
- *         cdef PetscInt  ival = asInt(max_steps)
- *         cdef PetscReal rval = 0
+ *     def setTime(self, t):             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = asReal(t)
+ *         CHKERR( TSSetTime(self.ts, rval) )
  */
 
 /* Python wrapper */
-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;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_95setTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_94setTime[] = "TS.setTime(self, t)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_95setTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_t = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setMaxSteps (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setTime (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_max_steps,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_t,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);
+        CYTHON_FALLTHROUGH;
         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_max_steps)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_t)) != 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, "setMaxSteps") < 0)) __PYX_ERR(37, 373, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTime") < 0)) __PYX_ERR(37, 406, __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_max_steps = values[0];
+    __pyx_v_t = values[0];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMaxSteps", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 373, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setTime", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 406, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.setMaxSteps", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __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_96setMaxSteps(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_max_steps);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_94setTime(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_t);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_96setMaxSteps(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_max_steps) {
-  PetscInt __pyx_v_ival;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_94setTime(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t) {
   PetscReal __pyx_v_rval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscInt __pyx_t_1;
+  PetscReal __pyx_t_1;
   int __pyx_t_2;
-  __Pyx_RefNannySetupContext("setMaxSteps", 0);
+  __Pyx_RefNannySetupContext("setTime", 0);
 
-  /* "PETSc/TS.pyx":374
+  /* "PETSc/TS.pyx":407
  * 
- *     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 == -1L && PyErr_Occurred())) __PYX_ERR(37, 374, __pyx_L1_error)
-  __pyx_v_ival = __pyx_t_1;
-
-  /* "PETSc/TS.pyx":375
- *     def setMaxSteps(self, max_steps):
- *         cdef PetscInt  ival = asInt(max_steps)
- *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
- *         CHKERR( TSGetDuration(self.ts, NULL, &rval) )
- *         CHKERR( TSSetDuration(self.ts, ival, rval) )
- */
-  __pyx_v_rval = 0.0;
-
-  /* "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) )
+ *     def setTime(self, t):
+ *         cdef PetscReal rval = asReal(t)             # <<<<<<<<<<<<<<
+ *         CHKERR( TSSetTime(self.ts, 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_ERR(37, 376, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_t); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(37, 407, __pyx_L1_error)
+  __pyx_v_rval = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":377
- *         cdef PetscReal rval = 0
- *         CHKERR( TSGetDuration(self.ts, NULL, &rval) )
- *         CHKERR( TSSetDuration(self.ts, ival, rval) )             # <<<<<<<<<<<<<<
+  /* "PETSc/TS.pyx":408
+ *     def setTime(self, t):
+ *         cdef PetscReal rval = asReal(t)
+ *         CHKERR( TSSetTime(self.ts, rval) )             # <<<<<<<<<<<<<<
  * 
- *     def getMaxSteps(self):
+ *     def getTime(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_ERR(37, 377, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetTime(__pyx_v_self->ts, __pyx_v_rval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(37, 408, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":373
- *         return toReal(rval)
+  /* "PETSc/TS.pyx":406
+ *     # --- customization ---
  * 
- *     def setMaxSteps(self, max_steps):             # <<<<<<<<<<<<<<
- *         cdef PetscInt  ival = asInt(max_steps)
- *         cdef PetscReal rval = 0
+ *     def setTime(self, t):             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = asReal(t)
+ *         CHKERR( TSSetTime(self.ts, rval) )
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.setMaxSteps", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.setTime", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -179932,83 +191265,83 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_96setMaxSteps(struct PyPetscTSObj
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":379
- *         CHKERR( TSSetDuration(self.ts, ival, rval) )
+/* "PETSc/TS.pyx":410
+ *         CHKERR( TSSetTime(self.ts, rval) )
  * 
- *     def getMaxSteps(self):             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival = 0
- *         CHKERR( TSGetDuration(self.ts, &ival, NULL) )
+ *     def getTime(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = 0
+ *         CHKERR( TSGetTime(self.ts, &rval) )
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_97getTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_96getTime[] = "TS.getTime(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_97getTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getMaxSteps (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getTime (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_98getMaxSteps(((struct PyPetscTSObject *)__pyx_v_self));
+    __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_96getTime(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_98getMaxSteps(struct PyPetscTSObject *__pyx_v_self) {
-  PetscInt __pyx_v_ival;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_96getTime(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("getMaxSteps", 0);
+  __Pyx_RefNannySetupContext("getTime", 0);
 
-  /* "PETSc/TS.pyx":380
+  /* "PETSc/TS.pyx":411
  * 
- *     def getMaxSteps(self):
- *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
- *         CHKERR( TSGetDuration(self.ts, &ival, NULL) )
- *         return toInt(ival)
+ *     def getTime(self):
+ *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( TSGetTime(self.ts, &rval) )
+ *         return toReal(rval)
  */
-  __pyx_v_ival = 0;
+  __pyx_v_rval = 0.0;
 
-  /* "PETSc/TS.pyx":381
- *     def getMaxSteps(self):
- *         cdef PetscInt ival = 0
- *         CHKERR( TSGetDuration(self.ts, &ival, NULL) )             # <<<<<<<<<<<<<<
- *         return toInt(ival)
+  /* "PETSc/TS.pyx":412
+ *     def getTime(self):
+ *         cdef PetscReal rval = 0
+ *         CHKERR( TSGetTime(self.ts, &rval) )             # <<<<<<<<<<<<<<
+ *         return toReal(rval)
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetTime(__pyx_v_self->ts, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(37, 412, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":382
- *         cdef PetscInt ival = 0
- *         CHKERR( TSGetDuration(self.ts, &ival, NULL) )
- *         return toInt(ival)             # <<<<<<<<<<<<<<
+  /* "PETSc/TS.pyx":413
+ *         cdef PetscReal rval = 0
+ *         CHKERR( TSGetTime(self.ts, &rval) )
+ *         return toReal(rval)             # <<<<<<<<<<<<<<
  * 
- *     def setDuration(self, max_time, max_steps=None):
+ *     def getPrevTime(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 382, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 413, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":379
- *         CHKERR( TSSetDuration(self.ts, ival, rval) )
+  /* "PETSc/TS.pyx":410
+ *         CHKERR( TSSetTime(self.ts, rval) )
  * 
- *     def getMaxSteps(self):             # <<<<<<<<<<<<<<
- *         cdef PetscInt ival = 0
- *         CHKERR( TSGetDuration(self.ts, &ival, NULL) )
+ *     def getTime(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = 0
+ *         CHKERR( TSGetTime(self.ts, &rval) )
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.getMaxSteps", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.getTime", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -180016,165 +191349,463 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_98getMaxSteps(struct PyPetscTSObj
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":384
- *         return toInt(ival)
+/* "PETSc/TS.pyx":415
+ *         return toReal(rval)
  * 
- *     def setDuration(self, max_time, max_steps=None):             # <<<<<<<<<<<<<<
- *         cdef PetscInt  ival = 0
+ *     def getPrevTime(self):             # <<<<<<<<<<<<<<
  *         cdef PetscReal rval = 0
+ *         CHKERR( TSGetPrevTime(self.ts, &rval) )
  */
 
 /* Python wrapper */
-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;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_99getPrevTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_98getPrevTime[] = "TS.getPrevTime(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_99getPrevTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setDuration (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_max_time,&__pyx_n_s_max_steps,0};
-    PyObject* values[2] = {0,0};
-    values[1] = ((PyObject *)Py_None);
-    if (unlikely(__pyx_kwds)) {
-      Py_ssize_t kw_args;
-      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
-      switch (pos_args) {
-        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-      kw_args = PyDict_Size(__pyx_kwds);
-      switch (pos_args) {
-        case  0:
-        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_max_time)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_max_steps);
-          if (value) { values[1] = value; kw_args--; }
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        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)) {
-        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_max_time = values[0];
-    __pyx_v_max_steps = values[1];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_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_100setDuration(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_max_time, __pyx_v_max_steps);
+  __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_98getPrevTime(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-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;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_98getPrevTime(struct PyPetscTSObject *__pyx_v_self) {
   PetscReal __pyx_v_rval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  int __pyx_t_2;
-  int __pyx_t_3;
-  PetscInt __pyx_t_4;
-  PetscReal __pyx_t_5;
-  __Pyx_RefNannySetupContext("setDuration", 0);
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getPrevTime", 0);
 
-  /* "PETSc/TS.pyx":385
+  /* "PETSc/TS.pyx":416
  * 
- *     def setDuration(self, max_time, max_steps=None):
- *         cdef PetscInt  ival = 0             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval = 0
- *         CHKERR( TSGetDuration(self.ts, &ival, &rval) )
+ *     def getPrevTime(self):
+ *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( TSGetPrevTime(self.ts, &rval) )
+ *         return toReal(rval)
  */
-  __pyx_v_ival = 0;
+  __pyx_v_rval = 0.0;
 
-  /* "PETSc/TS.pyx":386
- *     def setDuration(self, max_time, max_steps=None):
- *         cdef PetscInt  ival = 0
+  /* "PETSc/TS.pyx":417
+ *     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 == ((int)-1))) __PYX_ERR(37, 417, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":418
+ *         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, 418, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/TS.pyx":415
+ *         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":420
+ *         return toReal(rval)
+ * 
+ *     def getSolveTime(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = 0
+ *         CHKERR( TSGetSolveTime(self.ts, &rval) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_101getSolveTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_100getSolveTime[] = "TS.getSolveTime(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_101getSolveTime(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_100getSolveTime(((struct PyPetscTSObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_100getSolveTime(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("getSolveTime", 0);
+
+  /* "PETSc/TS.pyx":421
+ * 
+ *     def getSolveTime(self):
  *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
- *         CHKERR( TSGetDuration(self.ts, &ival, &rval) )
- *         if max_steps is not None: ival = asInt(max_steps)
+ *         CHKERR( TSGetSolveTime(self.ts, &rval) )
+ *         return toReal(rval)
  */
   __pyx_v_rval = 0.0;
 
-  /* "PETSc/TS.pyx":387
- *         cdef PetscInt  ival = 0
+  /* "PETSc/TS.pyx":422
+ *     def getSolveTime(self):
  *         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)
+ *         CHKERR( TSGetSolveTime(self.ts, &rval) )             # <<<<<<<<<<<<<<
+ *         return toReal(rval)
+ * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetSolveTime(__pyx_v_self->ts, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(37, 422, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":388
+  /* "PETSc/TS.pyx":423
  *         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)
- *         CHKERR( TSSetDuration(self.ts, ival, rval) )
+ *         CHKERR( TSGetSolveTime(self.ts, &rval) )
+ *         return toReal(rval)             # <<<<<<<<<<<<<<
+ * 
+ *     def setTimeStep(self, time_step):
  */
-  __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 == -1L && PyErr_Occurred())) __PYX_ERR(37, 388, __pyx_L1_error)
-    __pyx_v_ival = __pyx_t_4;
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 423, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/TS.pyx":420
+ *         return toReal(rval)
+ * 
+ *     def getSolveTime(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = 0
+ *         CHKERR( TSGetSolveTime(self.ts, &rval) )
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.getSolveTime", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TS.pyx":425
+ *         return toReal(rval)
+ * 
+ *     def setTimeStep(self, time_step):             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = asReal(time_step)
+ *         CHKERR( TSSetTimeStep(self.ts, rval) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_103setTimeStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_102setTimeStep[] = "TS.setTimeStep(self, time_step)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_103setTimeStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_time_step = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setTimeStep (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_time_step,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);
+        CYTHON_FALLTHROUGH;
+        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_time_step)) != 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, "setTimeStep") < 0)) __PYX_ERR(37, 425, __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_time_step = values[0];
   }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setTimeStep", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 425, __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_102setTimeStep(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_time_step);
 
-  /* "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)             # <<<<<<<<<<<<<<
- *         CHKERR( TSSetDuration(self.ts, ival, rval) )
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_102setTimeStep(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;
+  __Pyx_RefNannySetupContext("setTimeStep", 0);
+
+  /* "PETSc/TS.pyx":426
+ * 
+ *     def setTimeStep(self, time_step):
+ *         cdef PetscReal rval = asReal(time_step)             # <<<<<<<<<<<<<<
+ *         CHKERR( TSSetTimeStep(self.ts, rval) )
  * 
  */
-  __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_ERR(37, 389, __pyx_L1_error)
-    __pyx_v_rval = __pyx_t_5;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_time_step); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(37, 426, __pyx_L1_error)
+  __pyx_v_rval = __pyx_t_1;
+
+  /* "PETSc/TS.pyx":427
+ *     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 == ((int)-1))) __PYX_ERR(37, 427, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":425
+ *         return toReal(rval)
+ * 
+ *     def setTimeStep(self, time_step):             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = asReal(time_step)
+ *         CHKERR( TSSetTimeStep(self.ts, rval) )
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.setTimeStep", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TS.pyx":429
+ *         CHKERR( TSSetTimeStep(self.ts, rval) )
+ * 
+ *     def getTimeStep(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscReal tstep = 0
+ *         CHKERR( TSGetTimeStep(self.ts, &tstep) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_105getTimeStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_104getTimeStep[] = "TS.getTimeStep(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_105getTimeStep(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_104getTimeStep(((struct PyPetscTSObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_104getTimeStep(struct PyPetscTSObject *__pyx_v_self) {
+  PetscReal __pyx_v_tstep;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getTimeStep", 0);
+
+  /* "PETSc/TS.pyx":430
+ * 
+ *     def getTimeStep(self):
+ *         cdef PetscReal tstep = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( TSGetTimeStep(self.ts, &tstep) )
+ *         return toReal(tstep)
+ */
+  __pyx_v_tstep = 0.0;
+
+  /* "PETSc/TS.pyx":431
+ *     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 == ((int)-1))) __PYX_ERR(37, 431, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":432
+ *         cdef PetscReal tstep = 0
+ *         CHKERR( TSGetTimeStep(self.ts, &tstep) )
+ *         return toReal(tstep)             # <<<<<<<<<<<<<<
+ * 
+ *     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_ERR(37, 432, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/TS.pyx":429
+ *         CHKERR( TSSetTimeStep(self.ts, rval) )
+ * 
+ *     def getTimeStep(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscReal tstep = 0
+ *         CHKERR( TSGetTimeStep(self.ts, &tstep) )
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.getTimeStep", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TS.pyx":434
+ *         return toReal(tstep)
+ * 
+ *     def setStepNumber(self, step_number):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival = asInt(step_number)
+ *         CHKERR( TSSetStepNumber(self.ts, ival) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_107setStepNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_106setStepNumber[] = "TS.setStepNumber(self, step_number)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_107setStepNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_step_number = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setStepNumber (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_step_number,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);
+        CYTHON_FALLTHROUGH;
+        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_step_number)) != 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, "setStepNumber") < 0)) __PYX_ERR(37, 434, __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_step_number = values[0];
   }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setStepNumber", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 434, __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_106setStepNumber(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_step_number);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
 
-  /* "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) )             # <<<<<<<<<<<<<<
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_106setStepNumber(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;
+  __Pyx_RefNannySetupContext("setStepNumber", 0);
+
+  /* "PETSc/TS.pyx":435
+ * 
+ *     def setStepNumber(self, step_number):
+ *         cdef PetscInt ival = asInt(step_number)             # <<<<<<<<<<<<<<
+ *         CHKERR( TSSetStepNumber(self.ts, ival) )
  * 
- *     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_ERR(37, 390, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_step_number); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(37, 435, __pyx_L1_error)
+  __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":384
- *         return toInt(ival)
+  /* "PETSc/TS.pyx":436
+ *     def setStepNumber(self, step_number):
+ *         cdef PetscInt ival = asInt(step_number)
+ *         CHKERR( TSSetStepNumber(self.ts, ival) )             # <<<<<<<<<<<<<<
  * 
- *     def setDuration(self, max_time, max_steps=None):             # <<<<<<<<<<<<<<
- *         cdef PetscInt  ival = 0
- *         cdef PetscReal rval = 0
+ *     def getStepNumber(self):
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetStepNumber(__pyx_v_self->ts, __pyx_v_ival)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(37, 436, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":434
+ *         return toReal(tstep)
+ * 
+ *     def setStepNumber(self, step_number):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival = asInt(step_number)
+ *         CHKERR( TSSetStepNumber(self.ts, ival) )
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.setDuration", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.setStepNumber", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -180182,107 +191813,273 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_100setDuration(struct PyPetscTSOb
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":392
- *         CHKERR( TSSetDuration(self.ts, ival, rval) )
+/* "PETSc/TS.pyx":438
+ *         CHKERR( TSSetStepNumber(self.ts, ival) )
  * 
- *     def getDuration(self):             # <<<<<<<<<<<<<<
- *         cdef PetscInt  ival = 0
- *         cdef PetscReal rval = 0
+ *     def getStepNumber(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival = 0
+ *         CHKERR( TSGetStepNumber(self.ts, &ival) )
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_109getStepNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_108getStepNumber[] = "TS.getStepNumber(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_109getStepNumber(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getDuration (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getStepNumber (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_102getDuration(((struct PyPetscTSObject *)__pyx_v_self));
+    __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_108getStepNumber(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_102getDuration(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_108getStepNumber(struct PyPetscTSObject *__pyx_v_self) {
   PetscInt __pyx_v_ival;
-  PetscReal __pyx_v_rval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
-  PyObject *__pyx_t_3 = NULL;
-  PyObject *__pyx_t_4 = NULL;
-  __Pyx_RefNannySetupContext("getDuration", 0);
+  __Pyx_RefNannySetupContext("getStepNumber", 0);
 
-  /* "PETSc/TS.pyx":393
+  /* "PETSc/TS.pyx":439
  * 
- *     def getDuration(self):
- *         cdef PetscInt  ival = 0             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval = 0
- *         CHKERR( TSGetDuration(self.ts, &ival, &rval) )
+ *     def getStepNumber(self):
+ *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( TSGetStepNumber(self.ts, &ival) )
+ *         return toInt(ival)
  */
   __pyx_v_ival = 0;
 
-  /* "PETSc/TS.pyx":394
- *     def getDuration(self):
- *         cdef PetscInt  ival = 0
+  /* "PETSc/TS.pyx":440
+ *     def getStepNumber(self):
+ *         cdef PetscInt ival = 0
+ *         CHKERR( TSGetStepNumber(self.ts, &ival) )             # <<<<<<<<<<<<<<
+ *         return toInt(ival)
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetStepNumber(__pyx_v_self->ts, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(37, 440, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":441
+ *         cdef PetscInt ival = 0
+ *         CHKERR( TSGetStepNumber(self.ts, &ival) )
+ *         return toInt(ival)             # <<<<<<<<<<<<<<
+ * 
+ *     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_ERR(37, 441, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/TS.pyx":438
+ *         CHKERR( TSSetStepNumber(self.ts, ival) )
+ * 
+ *     def getStepNumber(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival = 0
+ *         CHKERR( TSGetStepNumber(self.ts, &ival) )
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.getStepNumber", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TS.pyx":443
+ *         return toInt(ival)
+ * 
+ *     def setMaxTime(self, max_time):             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = asReal(max_time)
+ *         CHKERR( TSSetMaxTime(self.ts, rval) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_111setMaxTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_110setMaxTime[] = "TS.setMaxTime(self, max_time)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_111setMaxTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_max_time = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setMaxTime (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_max_time,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);
+        CYTHON_FALLTHROUGH;
+        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_max_time)) != 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, "setMaxTime") < 0)) __PYX_ERR(37, 443, __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_max_time = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setMaxTime", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 443, __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_110setMaxTime(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_max_time);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_110setMaxTime(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_max_time) {
+  PetscReal __pyx_v_rval;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscReal __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setMaxTime", 0);
+
+  /* "PETSc/TS.pyx":444
+ * 
+ *     def setMaxTime(self, max_time):
+ *         cdef PetscReal rval = asReal(max_time)             # <<<<<<<<<<<<<<
+ *         CHKERR( TSSetMaxTime(self.ts, rval) )
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_max_time); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(37, 444, __pyx_L1_error)
+  __pyx_v_rval = __pyx_t_1;
+
+  /* "PETSc/TS.pyx":445
+ *     def setMaxTime(self, max_time):
+ *         cdef PetscReal rval = asReal(max_time)
+ *         CHKERR( TSSetMaxTime(self.ts, rval) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getMaxTime(self):
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetMaxTime(__pyx_v_self->ts, __pyx_v_rval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(37, 445, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":443
+ *         return toInt(ival)
+ * 
+ *     def setMaxTime(self, max_time):             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = asReal(max_time)
+ *         CHKERR( TSSetMaxTime(self.ts, rval) )
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.setMaxTime", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TS.pyx":447
+ *         CHKERR( TSSetMaxTime(self.ts, rval) )
+ * 
+ *     def getMaxTime(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = 0
+ *         CHKERR( TSGetMaxTime(self.ts, &rval) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_113getMaxTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_112getMaxTime[] = "TS.getMaxTime(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_113getMaxTime(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_112getMaxTime(((struct PyPetscTSObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_112getMaxTime(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("getMaxTime", 0);
+
+  /* "PETSc/TS.pyx":448
+ * 
+ *     def getMaxTime(self):
  *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
- *         CHKERR( TSGetDuration(self.ts, &ival, &rval) )
- *         return (toReal(rval), toInt(ival))
+ *         CHKERR( TSGetMaxTime(self.ts, &rval) )
+ *         return toReal(rval)
  */
   __pyx_v_rval = 0.0;
 
-  /* "PETSc/TS.pyx":395
- *         cdef PetscInt  ival = 0
+  /* "PETSc/TS.pyx":449
+ *     def getMaxTime(self):
  *         cdef PetscReal rval = 0
- *         CHKERR( TSGetDuration(self.ts, &ival, &rval) )             # <<<<<<<<<<<<<<
- *         return (toReal(rval), toInt(ival))
+ *         CHKERR( TSGetMaxTime(self.ts, &rval) )             # <<<<<<<<<<<<<<
+ *         return toReal(rval)
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetMaxTime(__pyx_v_self->ts, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(37, 449, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":396
+  /* "PETSc/TS.pyx":450
  *         cdef PetscReal rval = 0
- *         CHKERR( TSGetDuration(self.ts, &ival, &rval) )
- *         return (toReal(rval), toInt(ival))             # <<<<<<<<<<<<<<
+ *         CHKERR( TSGetMaxTime(self.ts, &rval) )
+ *         return toReal(rval)             # <<<<<<<<<<<<<<
  * 
- *     def getTotalSteps(self):
+ *     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_ERR(37, 396, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 450, __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_ERR(37, 396, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_3);
-  __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);
-  __Pyx_GIVEREF(__pyx_t_3);
-  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_3);
+  __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
-  __pyx_t_3 = 0;
-  __pyx_r = __pyx_t_4;
-  __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":392
- *         CHKERR( TSSetDuration(self.ts, ival, rval) )
+  /* "PETSc/TS.pyx":447
+ *         CHKERR( TSSetMaxTime(self.ts, rval) )
  * 
- *     def getDuration(self):             # <<<<<<<<<<<<<<
- *         cdef PetscInt  ival = 0
+ *     def getMaxTime(self):             # <<<<<<<<<<<<<<
  *         cdef PetscReal rval = 0
+ *         CHKERR( TSGetMaxTime(self.ts, &rval) )
  */
 
   /* 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.TS.getDuration", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.getMaxTime", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -180290,83 +192087,189 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_102getDuration(struct PyPetscTSOb
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":398
- *         return (toReal(rval), toInt(ival))
+/* "PETSc/TS.pyx":452
+ *         return toReal(rval)
  * 
- *     def getTotalSteps(self):             # <<<<<<<<<<<<<<
+ *     def setMaxSteps(self, max_steps):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt  ival = asInt(max_steps)
+ *         CHKERR( TSSetMaxSteps(self.ts, ival) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_115setMaxSteps(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_114setMaxSteps[] = "TS.setMaxSteps(self, max_steps)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_115setMaxSteps(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_max_steps = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setMaxSteps (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_max_steps,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);
+        CYTHON_FALLTHROUGH;
+        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_max_steps)) != 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, "setMaxSteps") < 0)) __PYX_ERR(37, 452, __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_max_steps = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setMaxSteps", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 452, __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_114setMaxSteps(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_max_steps);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_114setMaxSteps(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_max_steps) {
+  PetscInt __pyx_v_ival;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setMaxSteps", 0);
+
+  /* "PETSc/TS.pyx":453
+ * 
+ *     def setMaxSteps(self, max_steps):
+ *         cdef PetscInt  ival = asInt(max_steps)             # <<<<<<<<<<<<<<
+ *         CHKERR( TSSetMaxSteps(self.ts, ival) )
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_max_steps); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(37, 453, __pyx_L1_error)
+  __pyx_v_ival = __pyx_t_1;
+
+  /* "PETSc/TS.pyx":454
+ *     def setMaxSteps(self, max_steps):
+ *         cdef PetscInt  ival = asInt(max_steps)
+ *         CHKERR( TSSetMaxSteps(self.ts, ival) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getMaxSteps(self):
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetMaxSteps(__pyx_v_self->ts, __pyx_v_ival)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(37, 454, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":452
+ *         return toReal(rval)
+ * 
+ *     def setMaxSteps(self, max_steps):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt  ival = asInt(max_steps)
+ *         CHKERR( TSSetMaxSteps(self.ts, ival) )
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.setMaxSteps", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TS.pyx":456
+ *         CHKERR( TSSetMaxSteps(self.ts, ival) )
+ * 
+ *     def getMaxSteps(self):             # <<<<<<<<<<<<<<
  *         cdef PetscInt ival = 0
- *         CHKERR( TSGetTotalSteps(self.ts, &ival) )
+ *         CHKERR( TSGetMaxSteps(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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_117getMaxSteps(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_116getMaxSteps[] = "TS.getMaxSteps(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_117getMaxSteps(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("getTotalSteps (wrapper)", 0);
+  __Pyx_RefNannySetupContext("getMaxSteps (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));
+    __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_116getMaxSteps(((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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_116getMaxSteps(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);
+  __Pyx_RefNannySetupContext("getMaxSteps", 0);
 
-  /* "PETSc/TS.pyx":399
+  /* "PETSc/TS.pyx":457
  * 
- *     def getTotalSteps(self):
+ *     def getMaxSteps(self):
  *         cdef PetscInt ival = 0             # <<<<<<<<<<<<<<
- *         CHKERR( TSGetTotalSteps(self.ts, &ival) )
+ *         CHKERR( TSGetMaxSteps(self.ts, &ival) )
  *         return toInt(ival)
  */
   __pyx_v_ival = 0;
 
-  /* "PETSc/TS.pyx":400
- *     def getTotalSteps(self):
+  /* "PETSc/TS.pyx":458
+ *     def getMaxSteps(self):
  *         cdef PetscInt ival = 0
- *         CHKERR( TSGetTotalSteps(self.ts, &ival) )             # <<<<<<<<<<<<<<
+ *         CHKERR( TSGetMaxSteps(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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetMaxSteps(__pyx_v_self->ts, (&__pyx_v_ival))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(37, 458, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":401
+  /* "PETSc/TS.pyx":459
  *         cdef PetscInt ival = 0
- *         CHKERR( TSGetTotalSteps(self.ts, &ival) )
+ *         CHKERR( TSGetMaxSteps(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_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ival); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 459, __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))
+  /* "PETSc/TS.pyx":456
+ *         CHKERR( TSSetMaxSteps(self.ts, ival) )
  * 
- *     def getTotalSteps(self):             # <<<<<<<<<<<<<<
+ *     def getMaxSteps(self):             # <<<<<<<<<<<<<<
  *         cdef PetscInt ival = 0
- *         CHKERR( TSGetTotalSteps(self.ts, &ival) )
+ *         CHKERR( TSGetMaxSteps(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_AddTraceback("petsc4py.PETSc.TS.getMaxSteps", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -180374,7 +192277,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_104getTotalSteps(struct PyPetscTS
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":403
+/* "PETSc/TS.pyx":461
  *         return toInt(ival)
  * 
  *     def getSNESIterations(self):             # <<<<<<<<<<<<<<
@@ -180383,23 +192286,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_104getTotalSteps(struct PyPetscTS
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_119getSNESIterations(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_118getSNESIterations[] = "TS.getSNESIterations(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_119getSNESIterations(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_106getSNESIterations(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_118getSNESIterations(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_106getSNESIterations(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_118getSNESIterations(struct PyPetscTSObject *__pyx_v_self) {
   PetscInt __pyx_v_n;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -180407,7 +192310,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_106getSNESIterations(struct PyPet
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getSNESIterations", 0);
 
-  /* "PETSc/TS.pyx":404
+  /* "PETSc/TS.pyx":462
  * 
  *     def getSNESIterations(self):
  *         cdef PetscInt n = 0             # <<<<<<<<<<<<<<
@@ -180416,16 +192319,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_106getSNESIterations(struct PyPet
  */
   __pyx_v_n = 0;
 
-  /* "PETSc/TS.pyx":405
+  /* "PETSc/TS.pyx":463
  *     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_ERR(37, 405, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetSNESIterations(__pyx_v_self->ts, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(37, 463, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":406
+  /* "PETSc/TS.pyx":464
  *         cdef PetscInt n = 0
  *         CHKERR( TSGetSNESIterations(self.ts, &n) )
  *         return toInt(n)             # <<<<<<<<<<<<<<
@@ -180433,13 +192336,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_106getSNESIterations(struct PyPet
  *     def getKSPIterations(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 406, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 464, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":403
+  /* "PETSc/TS.pyx":461
  *         return toInt(ival)
  * 
  *     def getSNESIterations(self):             # <<<<<<<<<<<<<<
@@ -180458,7 +192361,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_106getSNESIterations(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":408
+/* "PETSc/TS.pyx":466
  *         return toInt(n)
  * 
  *     def getKSPIterations(self):             # <<<<<<<<<<<<<<
@@ -180467,23 +192370,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_106getSNESIterations(struct PyPet
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_121getKSPIterations(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_120getKSPIterations[] = "TS.getKSPIterations(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_121getKSPIterations(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_108getKSPIterations(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_120getKSPIterations(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_108getKSPIterations(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_120getKSPIterations(struct PyPetscTSObject *__pyx_v_self) {
   PetscInt __pyx_v_n;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -180491,7 +192394,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_108getKSPIterations(struct PyPets
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getKSPIterations", 0);
 
-  /* "PETSc/TS.pyx":409
+  /* "PETSc/TS.pyx":467
  * 
  *     def getKSPIterations(self):
  *         cdef PetscInt n = 0             # <<<<<<<<<<<<<<
@@ -180500,16 +192403,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_108getKSPIterations(struct PyPets
  */
   __pyx_v_n = 0;
 
-  /* "PETSc/TS.pyx":410
+  /* "PETSc/TS.pyx":468
  *     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_ERR(37, 410, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetKSPIterations(__pyx_v_self->ts, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(37, 468, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":411
+  /* "PETSc/TS.pyx":469
  *         cdef PetscInt n = 0
  *         CHKERR( TSGetKSPIterations(self.ts, &n) )
  *         return toInt(n)             # <<<<<<<<<<<<<<
@@ -180517,13 +192420,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_108getKSPIterations(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_ERR(37, 411, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 469, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":408
+  /* "PETSc/TS.pyx":466
  *         return toInt(n)
  * 
  *     def getKSPIterations(self):             # <<<<<<<<<<<<<<
@@ -180542,7 +192445,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_108getKSPIterations(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":413
+/* "PETSc/TS.pyx":471
  *         return toInt(n)
  * 
  *     def setMaxStepRejections(self, n):             # <<<<<<<<<<<<<<
@@ -180551,9 +192454,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_108getKSPIterations(struct PyPets
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_123setMaxStepRejections(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_122setMaxStepRejections[] = "TS.setMaxStepRejections(self, n)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_123setMaxStepRejections(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_n = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -180566,6 +192469,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_111setMaxStepRejections(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -180576,7 +192480,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_111setMaxStepRejections(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_ERR(37, 413, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMaxStepRejections") < 0)) __PYX_ERR(37, 471, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -180587,20 +192491,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_111setMaxStepRejections(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMaxStepRejections", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 413, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setMaxStepRejections", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 471, __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_110setMaxStepRejections(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_n);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_122setMaxStepRejections(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_n);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_110setMaxStepRejections(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_n) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122setMaxStepRejections(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_n) {
   PetscInt __pyx_v_rej;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -180608,26 +192512,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_110setMaxStepRejections(struct Py
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setMaxStepRejections", 0);
 
-  /* "PETSc/TS.pyx":414
+  /* "PETSc/TS.pyx":472
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(37, 414, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_n); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(37, 472, __pyx_L1_error)
   __pyx_v_rej = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":415
+  /* "PETSc/TS.pyx":473
  *     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_ERR(37, 415, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetMaxStepRejections(__pyx_v_self->ts, __pyx_v_rej)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(37, 473, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":413
+  /* "PETSc/TS.pyx":471
  *         return toInt(n)
  * 
  *     def setMaxStepRejections(self, n):             # <<<<<<<<<<<<<<
@@ -180647,7 +192551,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_110setMaxStepRejections(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":422
+/* "PETSc/TS.pyx":480
  *     #    return toInt(n)
  * 
  *     def getStepRejections(self):             # <<<<<<<<<<<<<<
@@ -180656,23 +192560,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_110setMaxStepRejections(struct Py
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_125getStepRejections(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_124getStepRejections[] = "TS.getStepRejections(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_125getStepRejections(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_112getStepRejections(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_124getStepRejections(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_112getStepRejections(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_124getStepRejections(struct PyPetscTSObject *__pyx_v_self) {
   PetscInt __pyx_v_n;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -180680,7 +192584,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_112getStepRejections(struct PyPet
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getStepRejections", 0);
 
-  /* "PETSc/TS.pyx":423
+  /* "PETSc/TS.pyx":481
  * 
  *     def getStepRejections(self):
  *         cdef PetscInt n = 0             # <<<<<<<<<<<<<<
@@ -180689,16 +192593,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_112getStepRejections(struct PyPet
  */
   __pyx_v_n = 0;
 
-  /* "PETSc/TS.pyx":424
+  /* "PETSc/TS.pyx":482
  *     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_ERR(37, 424, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetStepRejections(__pyx_v_self->ts, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(37, 482, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":425
+  /* "PETSc/TS.pyx":483
  *         cdef PetscInt n = 0
  *         CHKERR( TSGetStepRejections(self.ts, &n) )
  *         return toInt(n)             # <<<<<<<<<<<<<<
@@ -180706,13 +192610,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_112getStepRejections(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_ERR(37, 425, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 483, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":422
+  /* "PETSc/TS.pyx":480
  *     #    return toInt(n)
  * 
  *     def getStepRejections(self):             # <<<<<<<<<<<<<<
@@ -180731,7 +192635,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_112getStepRejections(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":427
+/* "PETSc/TS.pyx":485
  *         return toInt(n)
  * 
  *     def setMaxSNESFailures(self, n):             # <<<<<<<<<<<<<<
@@ -180740,9 +192644,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_112getStepRejections(struct PyPet
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_127setMaxSNESFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_126setMaxSNESFailures[] = "TS.setMaxSNESFailures(self, n)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_127setMaxSNESFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_n = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -180755,6 +192659,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_115setMaxSNESFailures(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -180765,7 +192670,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_115setMaxSNESFailures(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_ERR(37, 427, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMaxSNESFailures") < 0)) __PYX_ERR(37, 485, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -180776,20 +192681,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_115setMaxSNESFailures(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMaxSNESFailures", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 427, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setMaxSNESFailures", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 485, __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_114setMaxSNESFailures(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_n);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_126setMaxSNESFailures(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_n);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_114setMaxSNESFailures(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_n) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_126setMaxSNESFailures(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_n) {
   PetscInt __pyx_v_fails;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -180797,26 +192702,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_114setMaxSNESFailures(struct PyPe
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setMaxSNESFailures", 0);
 
-  /* "PETSc/TS.pyx":428
+  /* "PETSc/TS.pyx":486
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(37, 428, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_n); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(37, 486, __pyx_L1_error)
   __pyx_v_fails = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":429
+  /* "PETSc/TS.pyx":487
  *     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_ERR(37, 429, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetMaxSNESFailures(__pyx_v_self->ts, __pyx_v_fails)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(37, 487, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":427
+  /* "PETSc/TS.pyx":485
  *         return toInt(n)
  * 
  *     def setMaxSNESFailures(self, n):             # <<<<<<<<<<<<<<
@@ -180836,7 +192741,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_114setMaxSNESFailures(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":436
+/* "PETSc/TS.pyx":494
  *     #    return toInt(n)
  * 
  *     def getSNESFailures(self):             # <<<<<<<<<<<<<<
@@ -180845,23 +192750,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_114setMaxSNESFailures(struct PyPe
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_129getSNESFailures(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_128getSNESFailures[] = "TS.getSNESFailures(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_129getSNESFailures(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_116getSNESFailures(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_128getSNESFailures(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_116getSNESFailures(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_128getSNESFailures(struct PyPetscTSObject *__pyx_v_self) {
   PetscInt __pyx_v_n;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -180869,7 +192774,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_116getSNESFailures(struct PyPetsc
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getSNESFailures", 0);
 
-  /* "PETSc/TS.pyx":437
+  /* "PETSc/TS.pyx":495
  * 
  *     def getSNESFailures(self):
  *         cdef PetscInt n = 0             # <<<<<<<<<<<<<<
@@ -180878,16 +192783,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_116getSNESFailures(struct PyPetsc
  */
   __pyx_v_n = 0;
 
-  /* "PETSc/TS.pyx":438
+  /* "PETSc/TS.pyx":496
  *     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_ERR(37, 438, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetSNESFailures(__pyx_v_self->ts, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(37, 496, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":439
+  /* "PETSc/TS.pyx":497
  *         cdef PetscInt n = 0
  *         CHKERR( TSGetSNESFailures(self.ts, &n) )
  *         return toInt(n)             # <<<<<<<<<<<<<<
@@ -180895,13 +192800,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_116getSNESFailures(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_ERR(37, 439, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 497, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":436
+  /* "PETSc/TS.pyx":494
  *     #    return toInt(n)
  * 
  *     def getSNESFailures(self):             # <<<<<<<<<<<<<<
@@ -180920,7 +192825,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_116getSNESFailures(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":441
+/* "PETSc/TS.pyx":499
  *         return toInt(n)
  * 
  *     def setErrorIfStepFails(self, flag=True):             # <<<<<<<<<<<<<<
@@ -180929,9 +192834,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_116getSNESFailures(struct PyPetsc
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_131setErrorIfStepFails(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_130setErrorIfStepFails[] = "TS.setErrorIfStepFails(self, flag=True)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_131setErrorIfStepFails(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_flag = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -180945,6 +192850,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_119setErrorIfStepFails(PyObject *
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -180957,11 +192863,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_119setErrorIfStepFails(PyObject *
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setErrorIfStepFails") < 0)) __PYX_ERR(37, 441, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setErrorIfStepFails") < 0)) __PYX_ERR(37, 499, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -180970,20 +192877,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_119setErrorIfStepFails(PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setErrorIfStepFails", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 441, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setErrorIfStepFails", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 499, __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_118setErrorIfStepFails(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_flag);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_130setErrorIfStepFails(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_flag);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_118setErrorIfStepFails(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_flag) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_130setErrorIfStepFails(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_flag) {
   PetscBool __pyx_v_bval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -180991,26 +192898,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_118setErrorIfStepFails(struct PyP
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setErrorIfStepFails", 0);
 
-  /* "PETSc/TS.pyx":442
+  /* "PETSc/TS.pyx":500
  * 
  *     def setErrorIfStepFails(self, flag=True):
  *         cdef PetscBool bval = flag             # <<<<<<<<<<<<<<
  *         CHKERR( TSSetErrorIfStepFails(self.ts, bval))
  * 
  */
-  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) __PYX_ERR(37, 442, __pyx_L1_error)
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) __PYX_ERR(37, 500, __pyx_L1_error)
   __pyx_v_bval = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":443
+  /* "PETSc/TS.pyx":501
  *     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_ERR(37, 443, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetErrorIfStepFails(__pyx_v_self->ts, __pyx_v_bval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(37, 501, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":441
+  /* "PETSc/TS.pyx":499
  *         return toInt(n)
  * 
  *     def setErrorIfStepFails(self, flag=True):             # <<<<<<<<<<<<<<
@@ -181030,7 +192937,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_118setErrorIfStepFails(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":445
+/* "PETSc/TS.pyx":503
  *         CHKERR( TSSetErrorIfStepFails(self.ts, bval))
  * 
  *     def setTolerances(self, rtol=None, atol=None):             # <<<<<<<<<<<<<<
@@ -181039,9 +192946,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_118setErrorIfStepFails(struct PyP
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_133setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_132setTolerances[] = "TS.setTolerances(self, rtol=None, atol=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_133setTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_rtol = 0;
   PyObject *__pyx_v_atol = 0;
   PyObject *__pyx_r = 0;
@@ -181057,7 +192964,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_121setTolerances(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -181068,6 +192977,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_121setTolerances(PyObject *__pyx_
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rtol);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_atol);
@@ -181075,12 +192985,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_121setTolerances(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTolerances") < 0)) __PYX_ERR(37, 445, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTolerances") < 0)) __PYX_ERR(37, 503, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -181090,20 +193002,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_121setTolerances(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setTolerances", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 445, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setTolerances", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 503, __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_120setTolerances(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_rtol, __pyx_v_atol);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_132setTolerances(((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_120setTolerances(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_rtol, PyObject *__pyx_v_atol) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_132setTolerances(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;
@@ -181117,7 +193029,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_120setTolerances(struct PyPetscTS
   int __pyx_t_5;
   __Pyx_RefNannySetupContext("setTolerances", 0);
 
-  /* "PETSc/TS.pyx":446
+  /* "PETSc/TS.pyx":504
  * 
  *     def setTolerances(self, rtol=None, atol=None):
  *         cdef PetscReal rrtol = PETSC_DEFAULT             # <<<<<<<<<<<<<<
@@ -181126,7 +193038,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_120setTolerances(struct PyPetscTS
  */
   __pyx_v_rrtol = PETSC_DEFAULT;
 
-  /* "PETSc/TS.pyx":447
+  /* "PETSc/TS.pyx":505
  *     def setTolerances(self, rtol=None, atol=None):
  *         cdef PetscReal rrtol = PETSC_DEFAULT
  *         cdef PetscReal ratol = PETSC_DEFAULT             # <<<<<<<<<<<<<<
@@ -181135,7 +193047,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_120setTolerances(struct PyPetscTS
  */
   __pyx_v_ratol = PETSC_DEFAULT;
 
-  /* "PETSc/TS.pyx":448
+  /* "PETSc/TS.pyx":506
  *         cdef PetscReal rrtol = PETSC_DEFAULT
  *         cdef PetscReal ratol = PETSC_DEFAULT
  *         cdef PetscVec  vrtol = NULL             # <<<<<<<<<<<<<<
@@ -181144,7 +193056,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_120setTolerances(struct PyPetscTS
  */
   __pyx_v_vrtol = NULL;
 
-  /* "PETSc/TS.pyx":449
+  /* "PETSc/TS.pyx":507
  *         cdef PetscReal ratol = PETSC_DEFAULT
  *         cdef PetscVec  vrtol = NULL
  *         cdef PetscVec  vatol = NULL             # <<<<<<<<<<<<<<
@@ -181153,7 +193065,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_120setTolerances(struct PyPetscTS
  */
   __pyx_v_vatol = NULL;
 
-  /* "PETSc/TS.pyx":450
+  /* "PETSc/TS.pyx":508
  *         cdef PetscVec  vrtol = NULL
  *         cdef PetscVec  vatol = NULL
  *         if rtol is None:             # <<<<<<<<<<<<<<
@@ -181166,7 +193078,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_120setTolerances(struct PyPetscTS
     goto __pyx_L3;
   }
 
-  /* "PETSc/TS.pyx":452
+  /* "PETSc/TS.pyx":510
  *         if rtol is None:
  *             pass
  *         elif isinstance(rtol, Vec):             # <<<<<<<<<<<<<<
@@ -181177,7 +193089,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_120setTolerances(struct PyPetscTS
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/TS.pyx":453
+    /* "PETSc/TS.pyx":511
  *             pass
  *         elif isinstance(rtol, Vec):
  *             vrtol = (<Vec>rtol).vec             # <<<<<<<<<<<<<<
@@ -181187,7 +193099,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_120setTolerances(struct PyPetscTS
     __pyx_t_3 = ((struct PyPetscVecObject *)__pyx_v_rtol)->vec;
     __pyx_v_vrtol = __pyx_t_3;
 
-    /* "PETSc/TS.pyx":452
+    /* "PETSc/TS.pyx":510
  *         if rtol is None:
  *             pass
  *         elif isinstance(rtol, Vec):             # <<<<<<<<<<<<<<
@@ -181197,7 +193109,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_120setTolerances(struct PyPetscTS
     goto __pyx_L3;
   }
 
-  /* "PETSc/TS.pyx":455
+  /* "PETSc/TS.pyx":513
  *             vrtol = (<Vec>rtol).vec
  *         else:
  *             rrtol = asReal(rtol)             # <<<<<<<<<<<<<<
@@ -181205,12 +193117,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_120setTolerances(struct PyPetscTS
  *             pass
  */
   /*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_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_rtol); if (unlikely(__pyx_t_4 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(37, 513, __pyx_L1_error)
     __pyx_v_rrtol = __pyx_t_4;
   }
   __pyx_L3:;
 
-  /* "PETSc/TS.pyx":456
+  /* "PETSc/TS.pyx":514
  *         else:
  *             rrtol = asReal(rtol)
  *         if atol is None:             # <<<<<<<<<<<<<<
@@ -181223,7 +193135,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_120setTolerances(struct PyPetscTS
     goto __pyx_L4;
   }
 
-  /* "PETSc/TS.pyx":458
+  /* "PETSc/TS.pyx":516
  *         if atol is None:
  *             pass
  *         elif isinstance(atol, Vec):             # <<<<<<<<<<<<<<
@@ -181234,7 +193146,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_120setTolerances(struct PyPetscTS
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/TS.pyx":459
+    /* "PETSc/TS.pyx":517
  *             pass
  *         elif isinstance(atol, Vec):
  *             vatol = (<Vec>atol).vec             # <<<<<<<<<<<<<<
@@ -181244,7 +193156,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_120setTolerances(struct PyPetscTS
     __pyx_t_3 = ((struct PyPetscVecObject *)__pyx_v_atol)->vec;
     __pyx_v_vatol = __pyx_t_3;
 
-    /* "PETSc/TS.pyx":458
+    /* "PETSc/TS.pyx":516
  *         if atol is None:
  *             pass
  *         elif isinstance(atol, Vec):             # <<<<<<<<<<<<<<
@@ -181254,7 +193166,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_120setTolerances(struct PyPetscTS
     goto __pyx_L4;
   }
 
-  /* "PETSc/TS.pyx":461
+  /* "PETSc/TS.pyx":519
  *             vatol = (<Vec>atol).vec
  *         else:
  *             ratol = asReal(atol)             # <<<<<<<<<<<<<<
@@ -181262,21 +193174,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_120setTolerances(struct PyPetscTS
  * 
  */
   /*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_t_4 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_atol); if (unlikely(__pyx_t_4 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(37, 519, __pyx_L1_error)
     __pyx_v_ratol = __pyx_t_4;
   }
   __pyx_L4:;
 
-  /* "PETSc/TS.pyx":462
+  /* "PETSc/TS.pyx":520
  *         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_ERR(37, 462, __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 == ((int)-1))) __PYX_ERR(37, 520, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":445
+  /* "PETSc/TS.pyx":503
  *         CHKERR( TSSetErrorIfStepFails(self.ts, bval))
  * 
  *     def setTolerances(self, rtol=None, atol=None):             # <<<<<<<<<<<<<<
@@ -181296,7 +193208,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_120setTolerances(struct PyPetscTS
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":464
+/* "PETSc/TS.pyx":522
  *         CHKERR( TSSetTolerances(self.ts, ratol, vatol, rrtol, vrtol) )
  * 
  *     def getTolerances(self):             # <<<<<<<<<<<<<<
@@ -181305,23 +193217,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_120setTolerances(struct PyPetscTS
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_135getTolerances(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_134getTolerances[] = "TS.getTolerances(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_135getTolerances(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_122getTolerances(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_134getTolerances(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122getTolerances(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_134getTolerances(struct PyPetscTSObject *__pyx_v_self) {
   PetscReal __pyx_v_rrtol;
   PetscReal __pyx_v_ratol;
   Vec __pyx_v_vrtol;
@@ -181335,7 +193247,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122getTolerances(struct PyPetscTS
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("getTolerances", 0);
 
-  /* "PETSc/TS.pyx":465
+  /* "PETSc/TS.pyx":523
  * 
  *     def getTolerances(self):
  *         cdef PetscReal rrtol = PETSC_DEFAULT             # <<<<<<<<<<<<<<
@@ -181344,7 +193256,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122getTolerances(struct PyPetscTS
  */
   __pyx_v_rrtol = PETSC_DEFAULT;
 
-  /* "PETSc/TS.pyx":466
+  /* "PETSc/TS.pyx":524
  *     def getTolerances(self):
  *         cdef PetscReal rrtol = PETSC_DEFAULT
  *         cdef PetscReal ratol = PETSC_DEFAULT             # <<<<<<<<<<<<<<
@@ -181353,7 +193265,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122getTolerances(struct PyPetscTS
  */
   __pyx_v_ratol = PETSC_DEFAULT;
 
-  /* "PETSc/TS.pyx":467
+  /* "PETSc/TS.pyx":525
  *         cdef PetscReal rrtol = PETSC_DEFAULT
  *         cdef PetscReal ratol = PETSC_DEFAULT
  *         cdef PetscVec  vrtol = NULL             # <<<<<<<<<<<<<<
@@ -181362,7 +193274,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122getTolerances(struct PyPetscTS
  */
   __pyx_v_vrtol = NULL;
 
-  /* "PETSc/TS.pyx":468
+  /* "PETSc/TS.pyx":526
  *         cdef PetscReal ratol = PETSC_DEFAULT
  *         cdef PetscVec  vrtol = NULL
  *         cdef PetscVec  vatol = NULL             # <<<<<<<<<<<<<<
@@ -181371,16 +193283,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122getTolerances(struct PyPetscTS
  */
   __pyx_v_vatol = NULL;
 
-  /* "PETSc/TS.pyx":469
+  /* "PETSc/TS.pyx":527
  *         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_ERR(37, 469, __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 == ((int)-1))) __PYX_ERR(37, 527, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":470
+  /* "PETSc/TS.pyx":528
  *         cdef PetscVec  vatol = NULL
  *         CHKERR( TSGetTolerances(self.ts, &ratol, &vatol, &rrtol, &vrtol) )
  *         cdef object rtol = None             # <<<<<<<<<<<<<<
@@ -181390,7 +193302,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122getTolerances(struct PyPetscTS
   __Pyx_INCREF(Py_None);
   __pyx_v_rtol = Py_None;
 
-  /* "PETSc/TS.pyx":471
+  /* "PETSc/TS.pyx":529
  *         CHKERR( TSGetTolerances(self.ts, &ratol, &vatol, &rrtol, &vrtol) )
  *         cdef object rtol = None
  *         if vrtol != NULL:             # <<<<<<<<<<<<<<
@@ -181400,19 +193312,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122getTolerances(struct PyPetscTS
   __pyx_t_2 = ((__pyx_v_vrtol != NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/TS.pyx":472
+    /* "PETSc/TS.pyx":530
  *         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_ERR(37, 472, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_vrtol)); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 530, __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
+    /* "PETSc/TS.pyx":529
  *         CHKERR( TSGetTolerances(self.ts, &ratol, &vatol, &rrtol, &vrtol) )
  *         cdef object rtol = None
  *         if vrtol != NULL:             # <<<<<<<<<<<<<<
@@ -181422,7 +193334,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122getTolerances(struct PyPetscTS
     goto __pyx_L3;
   }
 
-  /* "PETSc/TS.pyx":474
+  /* "PETSc/TS.pyx":532
  *             rtol = ref_Vec(vrtol)
  *         else:
  *             rtol = toReal(rrtol)             # <<<<<<<<<<<<<<
@@ -181430,14 +193342,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122getTolerances(struct PyPetscTS
  *         if vatol != NULL:
  */
   /*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_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rrtol); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 532, __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":475
+  /* "PETSc/TS.pyx":533
  *         else:
  *             rtol = toReal(rrtol)
  *         cdef object atol = None             # <<<<<<<<<<<<<<
@@ -181447,7 +193359,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122getTolerances(struct PyPetscTS
   __Pyx_INCREF(Py_None);
   __pyx_v_atol = Py_None;
 
-  /* "PETSc/TS.pyx":476
+  /* "PETSc/TS.pyx":534
  *             rtol = toReal(rrtol)
  *         cdef object atol = None
  *         if vatol != NULL:             # <<<<<<<<<<<<<<
@@ -181457,19 +193369,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122getTolerances(struct PyPetscTS
   __pyx_t_2 = ((__pyx_v_vatol != NULL) != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/TS.pyx":477
+    /* "PETSc/TS.pyx":535
  *         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_ERR(37, 477, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_ref_Vec(__pyx_v_vatol)); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 535, __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
+    /* "PETSc/TS.pyx":534
  *             rtol = toReal(rrtol)
  *         cdef object atol = None
  *         if vatol != NULL:             # <<<<<<<<<<<<<<
@@ -181479,7 +193391,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122getTolerances(struct PyPetscTS
     goto __pyx_L4;
   }
 
-  /* "PETSc/TS.pyx":479
+  /* "PETSc/TS.pyx":537
  *             atol = ref_Vec(vatol)
  *         else:
  *             atol = toReal(ratol)             # <<<<<<<<<<<<<<
@@ -181487,14 +193399,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122getTolerances(struct PyPetscTS
  * 
  */
   /*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_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_ratol); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 537, __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":480
+  /* "PETSc/TS.pyx":538
  *         else:
  *             atol = toReal(ratol)
  *         return (rtol, atol)             # <<<<<<<<<<<<<<
@@ -181502,7 +193414,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122getTolerances(struct PyPetscTS
  *     def setExactFinalTime(self, option):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 480, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 538, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_rtol);
   __Pyx_GIVEREF(__pyx_v_rtol);
@@ -181514,7 +193426,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122getTolerances(struct PyPetscTS
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":464
+  /* "PETSc/TS.pyx":522
  *         CHKERR( TSSetTolerances(self.ts, ratol, vatol, rrtol, vrtol) )
  * 
  *     def getTolerances(self):             # <<<<<<<<<<<<<<
@@ -181535,7 +193447,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122getTolerances(struct PyPetscTS
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":482
+/* "PETSc/TS.pyx":540
  *         return (rtol, atol)
  * 
  *     def setExactFinalTime(self, option):             # <<<<<<<<<<<<<<
@@ -181544,9 +193456,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_122getTolerances(struct PyPetscTS
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_137setExactFinalTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_136setExactFinalTime[] = "TS.setExactFinalTime(self, option)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_137setExactFinalTime(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_option = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -181559,6 +193471,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_125setExactFinalTime(PyObject *__
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -181569,7 +193482,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_125setExactFinalTime(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_ERR(37, 482, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setExactFinalTime") < 0)) __PYX_ERR(37, 540, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -181580,20 +193493,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_125setExactFinalTime(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setExactFinalTime", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 482, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setExactFinalTime", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 540, __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_124setExactFinalTime(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_option);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_136setExactFinalTime(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_option);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_124setExactFinalTime(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_option) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_136setExactFinalTime(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_option) {
   TSExactFinalTimeOption __pyx_v_oval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -181601,26 +193514,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_124setExactFinalTime(struct PyPet
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setExactFinalTime", 0);
 
-  /* "PETSc/TS.pyx":483
+  /* "PETSc/TS.pyx":541
  * 
  *     def setExactFinalTime(self, option):
  *         cdef PetscTSExactFinalTimeOption oval = option             # <<<<<<<<<<<<<<
  *         CHKERR( TSSetExactFinalTime(self.ts, oval) )
  * 
  */
-  __pyx_t_1 = ((TSExactFinalTimeOption)__Pyx_PyInt_As_TSExactFinalTimeOption(__pyx_v_option)); if (unlikely(PyErr_Occurred())) __PYX_ERR(37, 483, __pyx_L1_error)
+  __pyx_t_1 = ((TSExactFinalTimeOption)__Pyx_PyInt_As_TSExactFinalTimeOption(__pyx_v_option)); if (unlikely(PyErr_Occurred())) __PYX_ERR(37, 541, __pyx_L1_error)
   __pyx_v_oval = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":484
+  /* "PETSc/TS.pyx":542
  *     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_ERR(37, 484, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetExactFinalTime(__pyx_v_self->ts, __pyx_v_oval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(37, 542, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":482
+  /* "PETSc/TS.pyx":540
  *         return (rtol, atol)
  * 
  *     def setExactFinalTime(self, option):             # <<<<<<<<<<<<<<
@@ -181640,7 +193553,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_124setExactFinalTime(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":486
+/* "PETSc/TS.pyx":544
  *         CHKERR( TSSetExactFinalTime(self.ts, oval) )
  * 
  *     def setConvergedReason(self, reason):             # <<<<<<<<<<<<<<
@@ -181649,9 +193562,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_124setExactFinalTime(struct PyPet
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_139setConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_138setConvergedReason[] = "TS.setConvergedReason(self, reason)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_139setConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_reason = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -181664,6 +193577,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_127setConvergedReason(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -181674,7 +193588,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_127setConvergedReason(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_ERR(37, 486, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConvergedReason") < 0)) __PYX_ERR(37, 544, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -181685,20 +193599,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_127setConvergedReason(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setConvergedReason", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 486, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setConvergedReason", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 544, __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_126setConvergedReason(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_reason);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_138setConvergedReason(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_reason);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_126setConvergedReason(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_reason) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_138setConvergedReason(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_reason) {
   TSConvergedReason __pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -181706,26 +193620,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_126setConvergedReason(struct PyPe
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setConvergedReason", 0);
 
-  /* "PETSc/TS.pyx":487
+  /* "PETSc/TS.pyx":545
  * 
  *     def setConvergedReason(self, reason):
  *         cdef PetscTSConvergedReason cval = reason             # <<<<<<<<<<<<<<
  *         CHKERR( TSSetConvergedReason(self.ts, cval) )
  * 
  */
-  __pyx_t_1 = ((TSConvergedReason)__Pyx_PyInt_As_TSConvergedReason(__pyx_v_reason)); if (unlikely(PyErr_Occurred())) __PYX_ERR(37, 487, __pyx_L1_error)
+  __pyx_t_1 = ((TSConvergedReason)__Pyx_PyInt_As_TSConvergedReason(__pyx_v_reason)); if (unlikely(PyErr_Occurred())) __PYX_ERR(37, 545, __pyx_L1_error)
   __pyx_v_cval = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":488
+  /* "PETSc/TS.pyx":546
  *     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_ERR(37, 488, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetConvergedReason(__pyx_v_self->ts, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(37, 546, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":486
+  /* "PETSc/TS.pyx":544
  *         CHKERR( TSSetExactFinalTime(self.ts, oval) )
  * 
  *     def setConvergedReason(self, reason):             # <<<<<<<<<<<<<<
@@ -181745,7 +193659,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_126setConvergedReason(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":490
+/* "PETSc/TS.pyx":548
  *         CHKERR( TSSetConvergedReason(self.ts, cval) )
  * 
  *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
@@ -181754,23 +193668,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_126setConvergedReason(struct PyPe
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_141getConvergedReason(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_140getConvergedReason[] = "TS.getConvergedReason(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_141getConvergedReason(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_128getConvergedReason(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_140getConvergedReason(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_128getConvergedReason(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_140getConvergedReason(struct PyPetscTSObject *__pyx_v_self) {
   TSConvergedReason __pyx_v_reason;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -181778,7 +193692,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_128getConvergedReason(struct PyPe
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getConvergedReason", 0);
 
-  /* "PETSc/TS.pyx":491
+  /* "PETSc/TS.pyx":549
  * 
  *     def getConvergedReason(self):
  *         cdef PetscTSConvergedReason reason = TS_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
@@ -181787,16 +193701,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_128getConvergedReason(struct PyPe
  */
   __pyx_v_reason = TS_CONVERGED_ITERATING;
 
-  /* "PETSc/TS.pyx":492
+  /* "PETSc/TS.pyx":550
  *     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_ERR(37, 492, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetConvergedReason(__pyx_v_self->ts, (&__pyx_v_reason))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(37, 550, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":493
+  /* "PETSc/TS.pyx":551
  *         cdef PetscTSConvergedReason reason = TS_CONVERGED_ITERATING
  *         CHKERR( TSGetConvergedReason(self.ts, &reason) )
  *         return reason             # <<<<<<<<<<<<<<
@@ -181804,13 +193718,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_128getConvergedReason(struct PyPe
  *     # --- monitoring ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_TSConvergedReason(__pyx_v_reason); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 493, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyInt_From_TSConvergedReason(__pyx_v_reason); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 551, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":490
+  /* "PETSc/TS.pyx":548
  *         CHKERR( TSSetConvergedReason(self.ts, cval) )
  * 
  *     def getConvergedReason(self):             # <<<<<<<<<<<<<<
@@ -181829,7 +193743,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_128getConvergedReason(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":497
+/* "PETSc/TS.pyx":555
  *     # --- monitoring ---
  * 
  *     def setMonitor(self, monitor, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -181838,9 +193752,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_128getConvergedReason(struct PyPe
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_143setMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_142setMonitor[] = "TS.setMonitor(self, monitor, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_143setMonitor(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;
@@ -181857,8 +193771,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_131setMonitor(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -181867,11 +193784,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_131setMonitor(PyObject *__pyx_v_s
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_monitor)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -181879,12 +193798,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_131setMonitor(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMonitor") < 0)) __PYX_ERR(37, 497, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMonitor") < 0)) __PYX_ERR(37, 555, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -181896,20 +193817,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_131setMonitor(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_ERR(37, 497, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setMonitor", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 555, __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_130setMonitor(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_monitor, __pyx_v_args, __pyx_v_kargs);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_142setMonitor(((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_130setMonitor(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_monitor, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_142setMonitor(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;
@@ -181923,7 +193844,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_130setMonitor(struct PyPetscTSObj
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/TS.pyx":498
+  /* "PETSc/TS.pyx":556
  * 
  *     def setMonitor(self, monitor, args=None, kargs=None):
  *         if monitor is None: return             # <<<<<<<<<<<<<<
@@ -181938,19 +193859,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_130setMonitor(struct PyPetscTSObj
     goto __pyx_L0;
   }
 
-  /* "PETSc/TS.pyx":499
+  /* "PETSc/TS.pyx":557
  *     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), ((char *)"__monitor__")); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 499, __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, 557, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_monitorlist = __pyx_t_3;
   __pyx_t_3 = 0;
 
-  /* "PETSc/TS.pyx":500
+  /* "PETSc/TS.pyx":558
  *         if monitor is None: return
  *         cdef object monitorlist = self.get_attr('__monitor__')
  *         if monitorlist is None:             # <<<<<<<<<<<<<<
@@ -181961,39 +193882,39 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_130setMonitor(struct PyPetscTSObj
   __pyx_t_1 = (__pyx_t_2 != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/TS.pyx":501
+    /* "PETSc/TS.pyx":559
  *         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_ERR(37, 501, __pyx_L1_error)
+    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 559, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_monitorlist, __pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "PETSc/TS.pyx":502
+    /* "PETSc/TS.pyx":560
  *         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), ((char *)"__monitor__"), __pyx_v_monitorlist); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 502, __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, 560, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "PETSc/TS.pyx":503
+    /* "PETSc/TS.pyx":561
  *             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_ERR(37, 503, __pyx_L1_error)
+    __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 == ((int)-1))) __PYX_ERR(37, 561, __pyx_L1_error)
 
-    /* "PETSc/TS.pyx":500
+    /* "PETSc/TS.pyx":558
  *         if monitor is None: return
  *         cdef object monitorlist = self.get_attr('__monitor__')
  *         if monitorlist is None:             # <<<<<<<<<<<<<<
@@ -182002,7 +193923,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_130setMonitor(struct PyPetscTSObj
  */
   }
 
-  /* "PETSc/TS.pyx":504
+  /* "PETSc/TS.pyx":562
  *             self.set_attr('__monitor__', monitorlist)
  *             CHKERR( TSMonitorSet(self.ts, TS_Monitor, NULL, NULL) )
  *         if args  is None: args  = ()             # <<<<<<<<<<<<<<
@@ -182016,7 +193937,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_130setMonitor(struct PyPetscTSObj
     __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
   }
 
-  /* "PETSc/TS.pyx":505
+  /* "PETSc/TS.pyx":563
  *             CHKERR( TSMonitorSet(self.ts, TS_Monitor, NULL, NULL) )
  *         if args  is None: args  = ()
  *         if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -182026,20 +193947,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_130setMonitor(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_ERR(37, 505, __pyx_L1_error)
+    __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 563, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
     __pyx_t_3 = 0;
   }
 
-  /* "PETSc/TS.pyx":506
+  /* "PETSc/TS.pyx":564
  *         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_ERR(37, 506, __pyx_L1_error)
+  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 564, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(__pyx_v_monitor);
   __Pyx_GIVEREF(__pyx_v_monitor);
@@ -182053,16 +193974,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_130setMonitor(struct PyPetscTSObj
   __pyx_v_context = ((PyObject*)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/TS.pyx":507
+  /* "PETSc/TS.pyx":565
  *         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_ERR(37, 507, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_Append(__pyx_v_monitorlist, __pyx_v_context); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(37, 565, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":497
+  /* "PETSc/TS.pyx":555
  *     # --- monitoring ---
  * 
  *     def setMonitor(self, monitor, args=None, kargs=None):             # <<<<<<<<<<<<<<
@@ -182087,7 +194008,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_130setMonitor(struct PyPetscTSObj
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":509
+/* "PETSc/TS.pyx":567
  *         monitorlist.append(context)
  * 
  *     def getMonitor(self):             # <<<<<<<<<<<<<<
@@ -182096,29 +194017,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_130setMonitor(struct PyPetscTSObj
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_145getMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_144getMonitor[] = "TS.getMonitor(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_145getMonitor(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_132getMonitor(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_144getMonitor(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_132getMonitor(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_144getMonitor(struct PyPetscTSObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   __Pyx_RefNannySetupContext("getMonitor", 0);
 
-  /* "PETSc/TS.pyx":510
+  /* "PETSc/TS.pyx":568
  * 
  *     def getMonitor(self):
  *         return self.get_attr('__monitor__')             # <<<<<<<<<<<<<<
@@ -182126,13 +194047,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_132getMonitor(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), ((char *)"__monitor__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 510, __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, 568, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":509
+  /* "PETSc/TS.pyx":567
  *         monitorlist.append(context)
  * 
  *     def getMonitor(self):             # <<<<<<<<<<<<<<
@@ -182151,7 +194072,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_132getMonitor(struct PyPetscTSObj
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":512
+/* "PETSc/TS.pyx":570
  *         return self.get_attr('__monitor__')
  * 
  *     def cancelMonitor(self):             # <<<<<<<<<<<<<<
@@ -182160,50 +194081,50 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_132getMonitor(struct PyPetscTSObj
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_147cancelMonitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_146cancelMonitor[] = "TS.cancelMonitor(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_147cancelMonitor(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_134cancelMonitor(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_146cancelMonitor(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_134cancelMonitor(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_146cancelMonitor(struct PyPetscTSObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PyObject *__pyx_t_1 = NULL;
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("cancelMonitor", 0);
 
-  /* "PETSc/TS.pyx":513
+  /* "PETSc/TS.pyx":571
  * 
  *     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), ((char *)"__monitor__"), Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 513, __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, 571, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":514
+  /* "PETSc/TS.pyx":572
  *     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_ERR(37, 514, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSMonitorCancel(__pyx_v_self->ts)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(37, 572, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":512
+  /* "PETSc/TS.pyx":570
  *         return self.get_attr('__monitor__')
  * 
  *     def cancelMonitor(self):             # <<<<<<<<<<<<<<
@@ -182224,7 +194145,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_134cancelMonitor(struct PyPetscTS
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":516
+/* "PETSc/TS.pyx":574
  *         CHKERR( TSMonitorCancel(self.ts) )
  * 
  *     def monitor(self, step, time, Vec u=None):             # <<<<<<<<<<<<<<
@@ -182233,9 +194154,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_134cancelMonitor(struct PyPetscTS
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_149monitor(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_148monitor[] = "TS.monitor(self, step, time, Vec u=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_149monitor(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;
@@ -182251,8 +194172,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_137monitor(PyObject *__pyx_v_self
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -182261,11 +194185,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_137monitor(PyObject *__pyx_v_self
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_step)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(37, 516, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("monitor", 0, 2, 3, 1); __PYX_ERR(37, 574, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_u);
@@ -182273,11 +194199,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_137monitor(PyObject *__pyx_v_self
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "monitor") < 0)) __PYX_ERR(37, 516, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "monitor") < 0)) __PYX_ERR(37, 574, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -182290,654 +194217,2670 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_137monitor(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_ERR(37, 516, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("monitor", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 574, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_u), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "u", 0))) __PYX_ERR(37, 574, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_148monitor(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_step, __pyx_v_time, __pyx_v_u);
+
+  /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_148monitor(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;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  PetscReal __pyx_t_2;
+  int __pyx_t_3;
+  int __pyx_t_4;
+  Vec __pyx_t_5;
+  int __pyx_t_6;
+  __Pyx_RefNannySetupContext("monitor", 0);
+
+  /* "PETSc/TS.pyx":575
+ * 
+ *     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 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(37, 575, __pyx_L1_error)
+  __pyx_v_ival = __pyx_t_1;
+
+  /* "PETSc/TS.pyx":576
+ *     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 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(37, 576, __pyx_L1_error)
+  __pyx_v_rval = __pyx_t_2;
+
+  /* "PETSc/TS.pyx":577
+ *         cdef PetscInt  ival = asInt(step)
+ *         cdef PetscReal rval = asReal(time)
+ *         cdef PetscVec  uvec = NULL             # <<<<<<<<<<<<<<
+ *         if u is not None: uvec = u.vec
+ *         if uvec == NULL:
+ */
+  __pyx_v_uvec = NULL;
+
+  /* "PETSc/TS.pyx":578
+ *         cdef PetscReal rval = asReal(time)
+ *         cdef PetscVec  uvec = NULL
+ *         if u is not None: uvec = u.vec             # <<<<<<<<<<<<<<
+ *         if uvec == NULL:
+ *             CHKERR( TSGetSolution(self.ts, &uvec) )
+ */
+  __pyx_t_3 = (((PyObject *)__pyx_v_u) != Py_None);
+  __pyx_t_4 = (__pyx_t_3 != 0);
+  if (__pyx_t_4) {
+    __pyx_t_5 = __pyx_v_u->vec;
+    __pyx_v_uvec = __pyx_t_5;
+  }
+
+  /* "PETSc/TS.pyx":579
+ *         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_t_4 = ((__pyx_v_uvec == NULL) != 0);
+  if (__pyx_t_4) {
+
+    /* "PETSc/TS.pyx":580
+ *         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 == ((int)-1))) __PYX_ERR(37, 580, __pyx_L1_error)
+
+    /* "PETSc/TS.pyx":579
+ *         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) )
+ */
+  }
+
+  /* "PETSc/TS.pyx":581
+ *         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 == ((int)-1))) __PYX_ERR(37, 581, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":574
+ *         CHKERR( TSMonitorCancel(self.ts) )
+ * 
+ *     def monitor(self, step, time, Vec u=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt  ival = asInt(step)
+ *         cdef PetscReal rval = asReal(time)
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.monitor", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TS.pyx":585
+ *     # --- solving ---
+ * 
+ *     def setPreStep(self, prestep, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         if prestep is not None:
+ *             if args  is None: args  = ()
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_151setPreStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_150setPreStep[] = "TS.setPreStep(self, prestep, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_151setPreStep(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;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setPreStep (wrapper)", 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);
+    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);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        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_prestep)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        CYTHON_FALLTHROUGH;
+        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, "setPreStep") < 0)) __PYX_ERR(37, 585, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_prestep = values[0];
+    __pyx_v_args = values[1];
+    __pyx_v_kargs = values[2];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setPreStep", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 585, __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_150setPreStep(((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_150setPreStep(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
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("setPreStep", 0);
+  __Pyx_INCREF(__pyx_v_args);
+  __Pyx_INCREF(__pyx_v_kargs);
+
+  /* "PETSc/TS.pyx":586
+ * 
+ *     def setPreStep(self, prestep, args=None, kargs=None):
+ *         if prestep is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}
+ */
+  __pyx_t_1 = (__pyx_v_prestep != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+
+    /* "PETSc/TS.pyx":587
+ *     def setPreStep(self, prestep, args=None, kargs=None):
+ *         if prestep is not None:
+ *             if args  is None: args  = ()             # <<<<<<<<<<<<<<
+ *             if kargs is None: kargs = {}
+ *             context = (prestep, 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/TS.pyx":588
+ *         if prestep is not None:
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
+ *             context = (prestep, args, kargs)
+ *             self.set_attr('__prestep__', context)
+ */
+    __pyx_t_1 = (__pyx_v_kargs == Py_None);
+    __pyx_t_2 = (__pyx_t_1 != 0);
+    if (__pyx_t_2) {
+      __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 588, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
+      __pyx_t_3 = 0;
+    }
+
+    /* "PETSc/TS.pyx":589
+ *             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_ERR(37, 589, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_v_prestep);
+    __Pyx_GIVEREF(__pyx_v_prestep);
+    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_prestep);
+    __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/TS.pyx":590
+ *             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), ((char *)"__prestep__"), __pyx_v_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 590, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+    /* "PETSc/TS.pyx":591
+ *             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 == ((int)-1))) __PYX_ERR(37, 591, __pyx_L1_error)
+
+    /* "PETSc/TS.pyx":586
+ * 
+ *     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;
+  }
+
+  /* "PETSc/TS.pyx":593
+ *             CHKERR( TSSetPreStep(self.ts, TS_PreStep) )
+ *         else:
+ *             self.set_attr('__prestep__', None)             # <<<<<<<<<<<<<<
+ *             CHKERR( TSSetPreStep(self.ts, NULL) )
+ * 
+ */
+  /*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, 593, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+    /* "PETSc/TS.pyx":594
+ *         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 == ((int)-1))) __PYX_ERR(37, 594, __pyx_L1_error)
+  }
+  __pyx_L3:;
+
+  /* "PETSc/TS.pyx":585
+ *     # --- solving ---
+ * 
+ *     def setPreStep(self, prestep, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         if prestep 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.TS.setPreStep", __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/TS.pyx":596
+ *             CHKERR( TSSetPreStep(self.ts, NULL) )
+ * 
+ *     def getPreStep(self):             # <<<<<<<<<<<<<<
+ *         return self.get_attr('__prestep__')
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_153getPreStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_152getPreStep[] = "TS.getPreStep(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_153getPreStep(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_152getPreStep(((struct PyPetscTSObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_152getPreStep(struct PyPetscTSObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("getPreStep", 0);
+
+  /* "PETSc/TS.pyx":597
+ * 
+ *     def getPreStep(self):
+ *         return self.get_attr('__prestep__')             # <<<<<<<<<<<<<<
+ * 
+ *     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), ((char *)"__prestep__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 597, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/TS.pyx":596
+ *             CHKERR( TSSetPreStep(self.ts, NULL) )
+ * 
+ *     def getPreStep(self):             # <<<<<<<<<<<<<<
+ *         return self.get_attr('__prestep__')
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.getPreStep", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TS.pyx":599
+ *         return self.get_attr('__prestep__')
+ * 
+ *     def setPostStep(self, poststep, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         if poststep is not None:
+ *             if args  is None: args  = ()
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_155setPostStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_154setPostStep[] = "TS.setPostStep(self, poststep, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_155setPostStep(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;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setPostStep (wrapper)", 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);
+    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);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        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_poststep)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        CYTHON_FALLTHROUGH;
+        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, "setPostStep") < 0)) __PYX_ERR(37, 599, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_poststep = values[0];
+    __pyx_v_args = values[1];
+    __pyx_v_kargs = values[2];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setPostStep", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 599, __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_154setPostStep(((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_154setPostStep(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
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("setPostStep", 0);
+  __Pyx_INCREF(__pyx_v_args);
+  __Pyx_INCREF(__pyx_v_kargs);
+
+  /* "PETSc/TS.pyx":600
+ * 
+ *     def setPostStep(self, poststep, args=None, kargs=None):
+ *         if poststep is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}
+ */
+  __pyx_t_1 = (__pyx_v_poststep != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+
+    /* "PETSc/TS.pyx":601
+ *     def setPostStep(self, poststep, args=None, kargs=None):
+ *         if poststep is not None:
+ *             if args  is None: args  = ()             # <<<<<<<<<<<<<<
+ *             if kargs is None: kargs = {}
+ *             context = (poststep, 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/TS.pyx":602
+ *         if poststep is not None:
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
+ *             context = (poststep, args, kargs)
+ *             self.set_attr('__poststep__', context)
+ */
+    __pyx_t_1 = (__pyx_v_kargs == Py_None);
+    __pyx_t_2 = (__pyx_t_1 != 0);
+    if (__pyx_t_2) {
+      __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 602, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
+      __pyx_t_3 = 0;
+    }
+
+    /* "PETSc/TS.pyx":603
+ *             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_ERR(37, 603, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_v_poststep);
+    __Pyx_GIVEREF(__pyx_v_poststep);
+    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_poststep);
+    __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/TS.pyx":604
+ *             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), ((char *)"__poststep__"), __pyx_v_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 604, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+    /* "PETSc/TS.pyx":605
+ *             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 == ((int)-1))) __PYX_ERR(37, 605, __pyx_L1_error)
+
+    /* "PETSc/TS.pyx":600
+ * 
+ *     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;
+  }
+
+  /* "PETSc/TS.pyx":607
+ *             CHKERR( TSSetPostStep(self.ts, TS_PostStep) )
+ *         else:
+ *             self.set_attr('__poststep__', None)             # <<<<<<<<<<<<<<
+ *             CHKERR( TSSetPostStep(self.ts, NULL) )
+ * 
+ */
+  /*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, 607, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+    /* "PETSc/TS.pyx":608
+ *         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 == ((int)-1))) __PYX_ERR(37, 608, __pyx_L1_error)
+  }
+  __pyx_L3:;
+
+  /* "PETSc/TS.pyx":599
+ *         return self.get_attr('__prestep__')
+ * 
+ *     def setPostStep(self, poststep, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         if poststep 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.TS.setPostStep", __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/TS.pyx":610
+ *             CHKERR( TSSetPostStep(self.ts, NULL) )
+ * 
+ *     def getPostStep(self):             # <<<<<<<<<<<<<<
+ *         return self.get_attr('__poststep__')
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_157getPostStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_156getPostStep[] = "TS.getPostStep(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_157getPostStep(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_156getPostStep(((struct PyPetscTSObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_156getPostStep(struct PyPetscTSObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  __Pyx_RefNannySetupContext("getPostStep", 0);
+
+  /* "PETSc/TS.pyx":611
+ * 
+ *     def getPostStep(self):
+ *         return self.get_attr('__poststep__')             # <<<<<<<<<<<<<<
+ * 
+ *     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), ((char *)"__poststep__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 611, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/TS.pyx":610
+ *             CHKERR( TSSetPostStep(self.ts, NULL) )
+ * 
+ *     def getPostStep(self):             # <<<<<<<<<<<<<<
+ *         return self.get_attr('__poststep__')
+ * 
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.getPostStep", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TS.pyx":613
+ *         return self.get_attr('__poststep__')
+ * 
+ *     def setUp(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( TSSetUp(self.ts) )
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_159setUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_158setUp[] = "TS.setUp(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_159setUp(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_158setUp(((struct PyPetscTSObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_158setUp(struct PyPetscTSObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("setUp", 0);
+
+  /* "PETSc/TS.pyx":614
+ * 
+ *     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 == ((int)-1))) __PYX_ERR(37, 614, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":613
+ *         return self.get_attr('__poststep__')
+ * 
+ *     def setUp(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( TSSetUp(self.ts) )
+ * 
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.setUp", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TS.pyx":616
+ *         CHKERR( TSSetUp(self.ts) )
+ * 
+ *     def reset(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( TSReset(self.ts) )
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_161reset(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_160reset[] = "TS.reset(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_161reset(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_160reset(((struct PyPetscTSObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_160reset(struct PyPetscTSObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("reset", 0);
+
+  /* "PETSc/TS.pyx":617
+ * 
+ *     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 == ((int)-1))) __PYX_ERR(37, 617, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":616
+ *         CHKERR( TSSetUp(self.ts) )
+ * 
+ *     def reset(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( TSReset(self.ts) )
+ * 
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.reset", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TS.pyx":619
+ *         CHKERR( TSReset(self.ts) )
+ * 
+ *     def step(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( TSStep(self.ts) )
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_163step(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_162step[] = "TS.step(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_163step(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_162step(((struct PyPetscTSObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_162step(struct PyPetscTSObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("step", 0);
+
+  /* "PETSc/TS.pyx":620
+ * 
+ *     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 == ((int)-1))) __PYX_ERR(37, 620, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":619
+ *         CHKERR( TSReset(self.ts) )
+ * 
+ *     def step(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( TSStep(self.ts) )
+ * 
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.step", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TS.pyx":622
+ *         CHKERR( TSStep(self.ts) )
+ * 
+ *     def rollBack(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( TSRollBack(self.ts) )
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_165rollBack(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_164rollBack[] = "TS.rollBack(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_165rollBack(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_164rollBack(((struct PyPetscTSObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_164rollBack(struct PyPetscTSObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("rollBack", 0);
+
+  /* "PETSc/TS.pyx":623
+ * 
+ *     def rollBack(self):
+ *         CHKERR( TSRollBack(self.ts) )             # <<<<<<<<<<<<<<
+ * 
+ *     def solve(self, Vec u):
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSRollBack(__pyx_v_self->ts)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(37, 623, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":622
+ *         CHKERR( TSStep(self.ts) )
+ * 
+ *     def rollBack(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( TSRollBack(self.ts) )
+ * 
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.rollBack", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TS.pyx":625
+ *         CHKERR( TSRollBack(self.ts) )
+ * 
+ *     def solve(self, Vec u):             # <<<<<<<<<<<<<<
+ *         CHKERR( TSSolve(self.ts, u.vec) )
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_167solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_166solve[] = "TS.solve(self, Vec u)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_167solve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscVecObject *__pyx_v_u = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("solve (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_u,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);
+        CYTHON_FALLTHROUGH;
+        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_u)) != 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, "solve") < 0)) __PYX_ERR(37, 625, __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_u = ((struct PyPetscVecObject *)values[0]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("solve", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 625, __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_ERR(37, 625, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_166solve(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_u);
+
+  /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_166solve(struct PyPetscTSObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_u) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("solve", 0);
+
+  /* "PETSc/TS.pyx":626
+ * 
+ *     def solve(self, Vec u):
+ *         CHKERR( TSSolve(self.ts, u.vec) )             # <<<<<<<<<<<<<<
+ * 
+ *     def interpolate(self, t, Vec u):
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSolve(__pyx_v_self->ts, __pyx_v_u->vec)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(37, 626, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":625
+ *         CHKERR( TSRollBack(self.ts) )
+ * 
+ *     def solve(self, Vec u):             # <<<<<<<<<<<<<<
+ *         CHKERR( TSSolve(self.ts, u.vec) )
+ * 
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.solve", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TS.pyx":628
+ *         CHKERR( TSSolve(self.ts, u.vec) )
+ * 
+ *     def interpolate(self, t, Vec u):             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = asReal(t)
+ *         CHKERR( TSInterpolate(self.ts, rval, u.vec) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_169interpolate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_168interpolate[] = "TS.interpolate(self, t, Vec u)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_169interpolate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_t = 0;
+  struct PyPetscVecObject *__pyx_v_u = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("interpolate (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_t,&__pyx_n_s_u,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);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        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_t)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        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_ERR(37, 628, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "interpolate") < 0)) __PYX_ERR(37, 628, __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_t = values[0];
+    __pyx_v_u = ((struct PyPetscVecObject *)values[1]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("interpolate", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 628, __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_ERR(37, 628, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_168interpolate(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_t, __pyx_v_u);
+
+  /* function exit code */
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_168interpolate(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;
+  __Pyx_RefNannySetupContext("interpolate", 0);
+
+  /* "PETSc/TS.pyx":629
+ * 
+ *     def interpolate(self, t, Vec u):
+ *         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 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(37, 629, __pyx_L1_error)
+  __pyx_v_rval = __pyx_t_1;
+
+  /* "PETSc/TS.pyx":630
+ *     def interpolate(self, t, Vec u):
+ *         cdef PetscReal rval = asReal(t)
+ *         CHKERR( TSInterpolate(self.ts, rval, u.vec) )             # <<<<<<<<<<<<<<
+ * 
+ *     # --- Adjoint methods ---
+ */
+  __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 == ((int)-1))) __PYX_ERR(37, 630, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":628
+ *         CHKERR( TSSolve(self.ts, u.vec) )
+ * 
+ *     def interpolate(self, t, Vec u):             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = asReal(t)
+ *         CHKERR( TSInterpolate(self.ts, rval, u.vec) )
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.interpolate", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TS.pyx":634
+ *     # --- Adjoint methods ---
+ * 
+ *     def setSaveTrajectory(self):             # <<<<<<<<<<<<<<
+ *         CHKERR(TSSetSaveTrajectory(self.ts))
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_171setSaveTrajectory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_170setSaveTrajectory[] = "TS.setSaveTrajectory(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_171setSaveTrajectory(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setSaveTrajectory (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("setSaveTrajectory", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "setSaveTrajectory", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_170setSaveTrajectory(((struct PyPetscTSObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_170setSaveTrajectory(struct PyPetscTSObject *__pyx_v_self) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("setSaveTrajectory", 0);
+
+  /* "PETSc/TS.pyx":635
+ * 
+ *     def setSaveTrajectory(self):
+ *         CHKERR(TSSetSaveTrajectory(self.ts))             # <<<<<<<<<<<<<<
+ * 
+ *     def getCostIntegral(self):
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetSaveTrajectory(__pyx_v_self->ts)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(37, 635, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":634
+ *     # --- Adjoint methods ---
+ * 
+ *     def setSaveTrajectory(self):             # <<<<<<<<<<<<<<
+ *         CHKERR(TSSetSaveTrajectory(self.ts))
+ * 
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.setSaveTrajectory", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TS.pyx":637
+ *         CHKERR(TSSetSaveTrajectory(self.ts))
+ * 
+ *     def getCostIntegral(self):             # <<<<<<<<<<<<<<
+ *         cdef Vec cost = Vec()
+ *         CHKERR( TSGetCostIntegral(self.ts, &cost.vec) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_173getCostIntegral(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_172getCostIntegral[] = "TS.getCostIntegral(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_173getCostIntegral(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getCostIntegral (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getCostIntegral", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getCostIntegral", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_172getCostIntegral(((struct PyPetscTSObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_172getCostIntegral(struct PyPetscTSObject *__pyx_v_self) {
+  struct PyPetscVecObject *__pyx_v_cost = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getCostIntegral", 0);
+
+  /* "PETSc/TS.pyx":638
+ * 
+ *     def getCostIntegral(self):
+ *         cdef Vec cost = Vec()             # <<<<<<<<<<<<<<
+ *         CHKERR( TSGetCostIntegral(self.ts, &cost.vec) )
+ *         PetscINCREF(cost.obj)
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 638, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_cost = ((struct PyPetscVecObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/TS.pyx":639
+ *     def getCostIntegral(self):
+ *         cdef Vec cost = Vec()
+ *         CHKERR( TSGetCostIntegral(self.ts, &cost.vec) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(cost.obj)
+ *         return cost
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetCostIntegral(__pyx_v_self->ts, (&__pyx_v_cost->vec))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(37, 639, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":640
+ *         cdef Vec cost = Vec()
+ *         CHKERR( TSGetCostIntegral(self.ts, &cost.vec) )
+ *         PetscINCREF(cost.obj)             # <<<<<<<<<<<<<<
+ *         return cost
+ * 
+ */
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_cost->__pyx_base.obj);
+
+  /* "PETSc/TS.pyx":641
+ *         CHKERR( TSGetCostIntegral(self.ts, &cost.vec) )
+ *         PetscINCREF(cost.obj)
+ *         return cost             # <<<<<<<<<<<<<<
+ * 
+ *     def setCostGradients(self, vl, vm=None):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_cost));
+  __pyx_r = ((PyObject *)__pyx_v_cost);
+  goto __pyx_L0;
+
+  /* "PETSc/TS.pyx":637
+ *         CHKERR(TSSetSaveTrajectory(self.ts))
+ * 
+ *     def getCostIntegral(self):             # <<<<<<<<<<<<<<
+ *         cdef Vec cost = Vec()
+ *         CHKERR( TSGetCostIntegral(self.ts, &cost.vec) )
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.getCostIntegral", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_cost);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/TS.pyx":643
+ *         return cost
+ * 
+ *     def setCostGradients(self, vl, vm=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt n = 0;
+ *         cdef PetscVec *vecl = NULL
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_175setCostGradients(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_174setCostGradients[] = "TS.setCostGradients(self, vl, vm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_175setCostGradients(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_vl = 0;
+  PyObject *__pyx_v_vm = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setCostGradients (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_vl,&__pyx_n_s_vm,0};
+    PyObject* values[2] = {0,0};
+    values[1] = ((PyObject *)Py_None);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        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;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vm);
+          if (value) { values[1] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCostGradients") < 0)) __PYX_ERR(37, 643, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_vl = values[0];
+    __pyx_v_vm = values[1];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setCostGradients", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 643, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.setCostGradients", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_174setCostGradients(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_vl, __pyx_v_vm);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_174setCostGradients(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_vl, PyObject *__pyx_v_vm) {
+  PetscInt __pyx_v_n;
+  Vec *__pyx_v_vecl;
+  Vec *__pyx_v_vecm;
+  PyObject *__pyx_v_mem1 = 0;
+  PyObject *__pyx_v_mem2 = 0;
+  long __pyx_v_i;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  Py_ssize_t __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  PetscInt __pyx_t_6;
+  Vec __pyx_t_7;
+  int __pyx_t_8;
+  __Pyx_RefNannySetupContext("setCostGradients", 0);
+  __Pyx_INCREF(__pyx_v_vl);
+  __Pyx_INCREF(__pyx_v_vm);
+
+  /* "PETSc/TS.pyx":644
+ * 
+ *     def setCostGradients(self, vl, vm=None):
+ *         cdef PetscInt n = 0;             # <<<<<<<<<<<<<<
+ *         cdef PetscVec *vecl = NULL
+ *         cdef PetscVec *vecm = NULL
+ */
+  __pyx_v_n = 0;
+
+  /* "PETSc/TS.pyx":645
+ *     def setCostGradients(self, vl, vm=None):
+ *         cdef PetscInt n = 0;
+ *         cdef PetscVec *vecl = NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscVec *vecm = NULL
+ *         cdef mem1 = None, mem2 = None
+ */
+  __pyx_v_vecl = NULL;
+
+  /* "PETSc/TS.pyx":646
+ *         cdef PetscInt n = 0;
+ *         cdef PetscVec *vecl = NULL
+ *         cdef PetscVec *vecm = NULL             # <<<<<<<<<<<<<<
+ *         cdef mem1 = None, mem2 = None
+ *         if isinstance(vl, Vec): vl = [vl]
+ */
+  __pyx_v_vecm = NULL;
+
+  /* "PETSc/TS.pyx":647
+ *         cdef PetscVec *vecl = NULL
+ *         cdef PetscVec *vecm = NULL
+ *         cdef mem1 = None, mem2 = None             # <<<<<<<<<<<<<<
+ *         if isinstance(vl, Vec): vl = [vl]
+ *         if isinstance(vm, Vec): vm = [vm]
+ */
+  __Pyx_INCREF(Py_None);
+  __pyx_v_mem1 = Py_None;
+  __Pyx_INCREF(Py_None);
+  __pyx_v_mem2 = Py_None;
+
+  /* "PETSc/TS.pyx":648
+ *         cdef PetscVec *vecm = NULL
+ *         cdef mem1 = None, mem2 = None
+ *         if isinstance(vl, Vec): vl = [vl]             # <<<<<<<<<<<<<<
+ *         if isinstance(vm, Vec): vm = [vm]
+ *         if vl is not None:
+ */
+  __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_vl, __pyx_ptype_8petsc4py_5PETSc_Vec); 
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 648, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_v_vl);
+    __Pyx_GIVEREF(__pyx_v_vl);
+    PyList_SET_ITEM(__pyx_t_3, 0, __pyx_v_vl);
+    __Pyx_DECREF_SET(__pyx_v_vl, __pyx_t_3);
+    __pyx_t_3 = 0;
+  }
+
+  /* "PETSc/TS.pyx":649
+ *         cdef mem1 = None, mem2 = None
+ *         if isinstance(vl, Vec): vl = [vl]
+ *         if isinstance(vm, Vec): vm = [vm]             # <<<<<<<<<<<<<<
+ *         if vl is not None:
+ *             n = <PetscInt>len(vl)
+ */
+  __pyx_t_2 = __Pyx_TypeCheck(__pyx_v_vm, __pyx_ptype_8petsc4py_5PETSc_Vec); 
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+    __pyx_t_3 = PyList_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 649, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_v_vm);
+    __Pyx_GIVEREF(__pyx_v_vm);
+    PyList_SET_ITEM(__pyx_t_3, 0, __pyx_v_vm);
+    __Pyx_DECREF_SET(__pyx_v_vm, __pyx_t_3);
+    __pyx_t_3 = 0;
+  }
+
+  /* "PETSc/TS.pyx":650
+ *         if isinstance(vl, Vec): vl = [vl]
+ *         if isinstance(vm, Vec): vm = [vm]
+ *         if vl is not None:             # <<<<<<<<<<<<<<
+ *             n = <PetscInt>len(vl)
+ *         elif vm is not None:
+ */
+  __pyx_t_1 = (__pyx_v_vl != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+
+    /* "PETSc/TS.pyx":651
+ *         if isinstance(vm, Vec): vm = [vm]
+ *         if vl is not None:
+ *             n = <PetscInt>len(vl)             # <<<<<<<<<<<<<<
+ *         elif vm is not None:
+ *             n = <PetscInt>len(vm)
+ */
+    __pyx_t_4 = PyObject_Length(__pyx_v_vl); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(37, 651, __pyx_L1_error)
+    __pyx_v_n = ((PetscInt)__pyx_t_4);
+
+    /* "PETSc/TS.pyx":650
+ *         if isinstance(vl, Vec): vl = [vl]
+ *         if isinstance(vm, Vec): vm = [vm]
+ *         if vl is not None:             # <<<<<<<<<<<<<<
+ *             n = <PetscInt>len(vl)
+ *         elif vm is not None:
+ */
+    goto __pyx_L5;
+  }
+
+  /* "PETSc/TS.pyx":652
+ *         if vl is not None:
+ *             n = <PetscInt>len(vl)
+ *         elif vm is not None:             # <<<<<<<<<<<<<<
+ *             n = <PetscInt>len(vm)
+ *         if vl is not None:
+ */
+  __pyx_t_2 = (__pyx_v_vm != Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+
+    /* "PETSc/TS.pyx":653
+ *             n = <PetscInt>len(vl)
+ *         elif vm is not None:
+ *             n = <PetscInt>len(vm)             # <<<<<<<<<<<<<<
+ *         if vl is not None:
+ *             assert len(vl) == <Py_ssize_t>n
+ */
+    __pyx_t_4 = PyObject_Length(__pyx_v_vm); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(37, 653, __pyx_L1_error)
+    __pyx_v_n = ((PetscInt)__pyx_t_4);
+
+    /* "PETSc/TS.pyx":652
+ *         if vl is not None:
+ *             n = <PetscInt>len(vl)
+ *         elif vm is not None:             # <<<<<<<<<<<<<<
+ *             n = <PetscInt>len(vm)
+ *         if vl is not None:
+ */
+  }
+  __pyx_L5:;
+
+  /* "PETSc/TS.pyx":654
+ *         elif vm is not None:
+ *             n = <PetscInt>len(vm)
+ *         if vl is not None:             # <<<<<<<<<<<<<<
+ *             assert len(vl) == <Py_ssize_t>n
+ *             mem1 = oarray_p(empty_p(n), NULL, <void**>&vecl)
+ */
+  __pyx_t_1 = (__pyx_v_vl != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+
+    /* "PETSc/TS.pyx":655
+ *             n = <PetscInt>len(vm)
+ *         if vl is not None:
+ *             assert len(vl) == <Py_ssize_t>n             # <<<<<<<<<<<<<<
+ *             mem1 = oarray_p(empty_p(n), NULL, <void**>&vecl)
+ *             for i from 0 <= i < n:
+ */
+    #ifndef CYTHON_WITHOUT_ASSERTIONS
+    if (unlikely(!Py_OptimizeFlag)) {
+      __pyx_t_4 = PyObject_Length(__pyx_v_vl); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(37, 655, __pyx_L1_error)
+      if (unlikely(!((__pyx_t_4 == ((Py_ssize_t)__pyx_v_n)) != 0))) {
+        PyErr_SetNone(PyExc_AssertionError);
+        __PYX_ERR(37, 655, __pyx_L1_error)
+      }
+    }
+    #endif
+
+    /* "PETSc/TS.pyx":656
+ *         if vl is not None:
+ *             assert len(vl) == <Py_ssize_t>n
+ *             mem1 = oarray_p(empty_p(n), NULL, <void**>&vecl)             # <<<<<<<<<<<<<<
+ *             for i from 0 <= i < n:
+ *                 vecl[i] = (<Vec?>vl[i]).vec
+ */
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_n)); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 656, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_3, NULL, ((void **)(&__pyx_v_vecl)))); if (unlikely(!__pyx_t_5)) __PYX_ERR(37, 656, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_DECREF_SET(__pyx_v_mem1, __pyx_t_5);
+    __pyx_t_5 = 0;
+
+    /* "PETSc/TS.pyx":657
+ *             assert len(vl) == <Py_ssize_t>n
+ *             mem1 = oarray_p(empty_p(n), NULL, <void**>&vecl)
+ *             for i from 0 <= i < n:             # <<<<<<<<<<<<<<
+ *                 vecl[i] = (<Vec?>vl[i]).vec
+ *         if vm is not None:
+ */
+    __pyx_t_6 = __pyx_v_n;
+    for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_6; __pyx_v_i++) {
+
+      /* "PETSc/TS.pyx":658
+ *             mem1 = oarray_p(empty_p(n), NULL, <void**>&vecl)
+ *             for i from 0 <= i < n:
+ *                 vecl[i] = (<Vec?>vl[i]).vec             # <<<<<<<<<<<<<<
+ *         if vm is not None:
+ *             assert len(vm) == <Py_ssize_t>n
+ */
+      __pyx_t_5 = __Pyx_GetItemInt(__pyx_v_vl, __pyx_v_i, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(37, 658, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      if (!(likely(__Pyx_TypeTest(__pyx_t_5, __pyx_ptype_8petsc4py_5PETSc_Vec)))) __PYX_ERR(37, 658, __pyx_L1_error)
+      __pyx_t_7 = ((struct PyPetscVecObject *)__pyx_t_5)->vec;
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+      (__pyx_v_vecl[__pyx_v_i]) = __pyx_t_7;
+    }
+
+    /* "PETSc/TS.pyx":654
+ *         elif vm is not None:
+ *             n = <PetscInt>len(vm)
+ *         if vl is not None:             # <<<<<<<<<<<<<<
+ *             assert len(vl) == <Py_ssize_t>n
+ *             mem1 = oarray_p(empty_p(n), NULL, <void**>&vecl)
+ */
+  }
+
+  /* "PETSc/TS.pyx":659
+ *             for i from 0 <= i < n:
+ *                 vecl[i] = (<Vec?>vl[i]).vec
+ *         if vm is not None:             # <<<<<<<<<<<<<<
+ *             assert len(vm) == <Py_ssize_t>n
+ *             mem2 = oarray_p(empty_p(n), NULL, <void**>&vecm)
+ */
+  __pyx_t_2 = (__pyx_v_vm != Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+
+    /* "PETSc/TS.pyx":660
+ *                 vecl[i] = (<Vec?>vl[i]).vec
+ *         if vm is not None:
+ *             assert len(vm) == <Py_ssize_t>n             # <<<<<<<<<<<<<<
+ *             mem2 = oarray_p(empty_p(n), NULL, <void**>&vecm)
+ *             for i from 0 <= i < n:
+ */
+    #ifndef CYTHON_WITHOUT_ASSERTIONS
+    if (unlikely(!Py_OptimizeFlag)) {
+      __pyx_t_4 = PyObject_Length(__pyx_v_vm); if (unlikely(__pyx_t_4 == ((Py_ssize_t)-1))) __PYX_ERR(37, 660, __pyx_L1_error)
+      if (unlikely(!((__pyx_t_4 == ((Py_ssize_t)__pyx_v_n)) != 0))) {
+        PyErr_SetNone(PyExc_AssertionError);
+        __PYX_ERR(37, 660, __pyx_L1_error)
+      }
+    }
+    #endif
+
+    /* "PETSc/TS.pyx":661
+ *         if vm is not None:
+ *             assert len(vm) == <Py_ssize_t>n
+ *             mem2 = oarray_p(empty_p(n), NULL, <void**>&vecm)             # <<<<<<<<<<<<<<
+ *             for i from 0 <= i < n:
+ *                 vecm[i] = (<Vec?>vm[i]).vec
+ */
+    __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_n)); if (unlikely(!__pyx_t_5)) __PYX_ERR(37, 661, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_oarray_p(__pyx_t_5, NULL, ((void **)(&__pyx_v_vecm)))); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 661, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    __Pyx_DECREF_SET(__pyx_v_mem2, __pyx_t_3);
+    __pyx_t_3 = 0;
+
+    /* "PETSc/TS.pyx":662
+ *             assert len(vm) == <Py_ssize_t>n
+ *             mem2 = oarray_p(empty_p(n), NULL, <void**>&vecm)
+ *             for i from 0 <= i < n:             # <<<<<<<<<<<<<<
+ *                 vecm[i] = (<Vec?>vm[i]).vec
+ *         self.set_attr('__costgradients_memory', (mem1, mem2))
+ */
+    __pyx_t_6 = __pyx_v_n;
+    for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_6; __pyx_v_i++) {
+
+      /* "PETSc/TS.pyx":663
+ *             mem2 = oarray_p(empty_p(n), NULL, <void**>&vecm)
+ *             for i from 0 <= i < n:
+ *                 vecm[i] = (<Vec?>vm[i]).vec             # <<<<<<<<<<<<<<
+ *         self.set_attr('__costgradients_memory', (mem1, mem2))
+ *         CHKERR( TSSetCostGradients(self.ts, n, vecl, vecm) )
+ */
+      __pyx_t_3 = __Pyx_GetItemInt(__pyx_v_vm, __pyx_v_i, long, 1, __Pyx_PyInt_From_long, 0, 1, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 663, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_3);
+      if (!(likely(__Pyx_TypeTest(__pyx_t_3, __pyx_ptype_8petsc4py_5PETSc_Vec)))) __PYX_ERR(37, 663, __pyx_L1_error)
+      __pyx_t_7 = ((struct PyPetscVecObject *)__pyx_t_3)->vec;
+      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      (__pyx_v_vecm[__pyx_v_i]) = __pyx_t_7;
+    }
+
+    /* "PETSc/TS.pyx":659
+ *             for i from 0 <= i < n:
+ *                 vecl[i] = (<Vec?>vl[i]).vec
+ *         if vm is not None:             # <<<<<<<<<<<<<<
+ *             assert len(vm) == <Py_ssize_t>n
+ *             mem2 = oarray_p(empty_p(n), NULL, <void**>&vecm)
+ */
+  }
+
+  /* "PETSc/TS.pyx":664
+ *             for i from 0 <= i < n:
+ *                 vecm[i] = (<Vec?>vm[i]).vec
+ *         self.set_attr('__costgradients_memory', (mem1, mem2))             # <<<<<<<<<<<<<<
+ *         CHKERR( TSSetCostGradients(self.ts, n, vecl, vecm) )
+ * 
+ */
+  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 664, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(__pyx_v_mem1);
+  __Pyx_GIVEREF(__pyx_v_mem1);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_mem1);
+  __Pyx_INCREF(__pyx_v_mem2);
+  __Pyx_GIVEREF(__pyx_v_mem2);
+  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_mem2);
+  __pyx_t_5 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__costgradients_memory"), __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(37, 664, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+
+  /* "PETSc/TS.pyx":665
+ *                 vecm[i] = (<Vec?>vm[i]).vec
+ *         self.set_attr('__costgradients_memory', (mem1, mem2))
+ *         CHKERR( TSSetCostGradients(self.ts, n, vecl, vecm) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getCostGradients(self):
+ */
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetCostGradients(__pyx_v_self->ts, __pyx_v_n, __pyx_v_vecl, __pyx_v_vecm)); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(37, 665, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":643
+ *         return cost
+ * 
+ *     def setCostGradients(self, vl, vm=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt n = 0;
+ *         cdef PetscVec *vecl = 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_5);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.setCostGradients", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_mem1);
+  __Pyx_XDECREF(__pyx_v_mem2);
+  __Pyx_XDECREF(__pyx_v_vl);
+  __Pyx_XDECREF(__pyx_v_vm);
+  __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-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;
+/* "PETSc/TS.pyx":667
+ *         CHKERR( TSSetCostGradients(self.ts, n, vecl, vecm) )
+ * 
+ *     def getCostGradients(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt i = 0, n = 0
+ *         cdef PetscVec *vecl = NULL
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_177getCostGradients(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_176getCostGradients[] = "TS.getCostGradients(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_177getCostGradients(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getCostGradients (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getCostGradients", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getCostGradients", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_176getCostGradients(((struct PyPetscTSObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_176getCostGradients(struct PyPetscTSObject *__pyx_v_self) {
+  PetscInt __pyx_v_i;
+  PetscInt __pyx_v_n;
+  Vec *__pyx_v_vecl;
+  Vec *__pyx_v_vecm;
+  PyObject *__pyx_v_vl = 0;
+  PyObject *__pyx_v_vm = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscInt __pyx_t_1;
-  PetscReal __pyx_t_2;
-  int __pyx_t_3;
-  int __pyx_t_4;
-  Vec __pyx_t_5;
-  int __pyx_t_6;
-  __Pyx_RefNannySetupContext("monitor", 0);
+  int __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PetscInt __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannySetupContext("getCostGradients", 0);
 
-  /* "PETSc/TS.pyx":517
+  /* "PETSc/TS.pyx":668
  * 
- *     def monitor(self, step, time, Vec u=None):
- *         cdef PetscInt  ival = asInt(step)             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval = asReal(time)
- *         cdef PetscVec  uvec = NULL
+ *     def getCostGradients(self):
+ *         cdef PetscInt i = 0, n = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscVec *vecl = NULL
+ *         cdef PetscVec *vecm = NULL
  */
-  __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;
+  __pyx_v_i = 0;
+  __pyx_v_n = 0;
 
-  /* "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
+  /* "PETSc/TS.pyx":669
+ *     def getCostGradients(self):
+ *         cdef PetscInt i = 0, n = 0
+ *         cdef PetscVec *vecl = NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscVec *vecm = NULL
+ *         CHKERR( TSGetCostGradients(self.ts, &n, &vecl, &vecm) )
  */
-  __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;
+  __pyx_v_vecl = NULL;
 
-  /* "PETSc/TS.pyx":519
- *         cdef PetscInt  ival = asInt(step)
- *         cdef PetscReal rval = asReal(time)
- *         cdef PetscVec  uvec = NULL             # <<<<<<<<<<<<<<
- *         if u is not None: uvec = u.vec
- *         if uvec == NULL:
+  /* "PETSc/TS.pyx":670
+ *         cdef PetscInt i = 0, n = 0
+ *         cdef PetscVec *vecl = NULL
+ *         cdef PetscVec *vecm = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( TSGetCostGradients(self.ts, &n, &vecl, &vecm) )
+ *         cdef object vl = None, vm = None
  */
-  __pyx_v_uvec = NULL;
+  __pyx_v_vecm = NULL;
 
-  /* "PETSc/TS.pyx":520
- *         cdef PetscReal rval = asReal(time)
- *         cdef PetscVec  uvec = NULL
- *         if u is not None: uvec = u.vec             # <<<<<<<<<<<<<<
- *         if uvec == NULL:
- *             CHKERR( TSGetSolution(self.ts, &uvec) )
+  /* "PETSc/TS.pyx":671
+ *         cdef PetscVec *vecl = NULL
+ *         cdef PetscVec *vecm = NULL
+ *         CHKERR( TSGetCostGradients(self.ts, &n, &vecl, &vecm) )             # <<<<<<<<<<<<<<
+ *         cdef object vl = None, vm = None
+ *         if vecl != NULL:
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSGetCostGradients(__pyx_v_self->ts, (&__pyx_v_n), (&__pyx_v_vecl), (&__pyx_v_vecm))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(37, 671, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":672
+ *         cdef PetscVec *vecm = NULL
+ *         CHKERR( TSGetCostGradients(self.ts, &n, &vecl, &vecm) )
+ *         cdef object vl = None, vm = None             # <<<<<<<<<<<<<<
+ *         if vecl != NULL:
+ *             vl = [ref_Vec(vecl[i]) for i from 0 <= i < n]
+ */
+  __Pyx_INCREF(Py_None);
+  __pyx_v_vl = Py_None;
+  __Pyx_INCREF(Py_None);
+  __pyx_v_vm = Py_None;
+
+  /* "PETSc/TS.pyx":673
+ *         CHKERR( TSGetCostGradients(self.ts, &n, &vecl, &vecm) )
+ *         cdef object vl = None, vm = None
+ *         if vecl != NULL:             # <<<<<<<<<<<<<<
+ *             vl = [ref_Vec(vecl[i]) for i from 0 <= i < n]
+ *         if vecm != NULL:
+ */
+  __pyx_t_2 = ((__pyx_v_vecl != NULL) != 0);
+  if (__pyx_t_2) {
+
+    /* "PETSc/TS.pyx":674
+ *         cdef object vl = None, vm = None
+ *         if vecl != NULL:
+ *             vl = [ref_Vec(vecl[i]) for i from 0 <= i < n]             # <<<<<<<<<<<<<<
+ *         if vecm != NULL:
+ *             vm = [ref_Vec(vecm[i]) for i from 0 <= i < n]
+ */
+    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 674, __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_vecl[__pyx_v_i]))); if (unlikely(!__pyx_t_5)) __PYX_ERR(37, 674, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_5))) __PYX_ERR(37, 674, __pyx_L1_error)
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    }
+    __Pyx_DECREF_SET(__pyx_v_vl, __pyx_t_3);
+    __pyx_t_3 = 0;
+
+    /* "PETSc/TS.pyx":673
+ *         CHKERR( TSGetCostGradients(self.ts, &n, &vecl, &vecm) )
+ *         cdef object vl = None, vm = None
+ *         if vecl != NULL:             # <<<<<<<<<<<<<<
+ *             vl = [ref_Vec(vecl[i]) for i from 0 <= i < n]
+ *         if vecm != NULL:
  */
-  __pyx_t_3 = (((PyObject *)__pyx_v_u) != Py_None);
-  __pyx_t_4 = (__pyx_t_3 != 0);
-  if (__pyx_t_4) {
-    __pyx_t_5 = __pyx_v_u->vec;
-    __pyx_v_uvec = __pyx_t_5;
   }
 
-  /* "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) )
+  /* "PETSc/TS.pyx":675
+ *         if vecl != NULL:
+ *             vl = [ref_Vec(vecl[i]) for i from 0 <= i < n]
+ *         if vecm != NULL:             # <<<<<<<<<<<<<<
+ *             vm = [ref_Vec(vecm[i]) for i from 0 <= i < n]
+ *         return (vl, vm)
  */
-  __pyx_t_4 = ((__pyx_v_uvec == NULL) != 0);
-  if (__pyx_t_4) {
+  __pyx_t_2 = ((__pyx_v_vecm != NULL) != 0);
+  if (__pyx_t_2) {
 
-    /* "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) )
+    /* "PETSc/TS.pyx":676
+ *             vl = [ref_Vec(vecl[i]) for i from 0 <= i < n]
+ *         if vecm != NULL:
+ *             vm = [ref_Vec(vecm[i]) for i from 0 <= i < n]             # <<<<<<<<<<<<<<
+ *         return (vl, vm)
  * 
  */
-    __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)
+    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 676, __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_vecm[__pyx_v_i]))); if (unlikely(!__pyx_t_5)) __PYX_ERR(37, 676, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_5);
+      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_5))) __PYX_ERR(37, 676, __pyx_L1_error)
+      __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+    }
+    __Pyx_DECREF_SET(__pyx_v_vm, __pyx_t_3);
+    __pyx_t_3 = 0;
 
-    /* "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) )
+    /* "PETSc/TS.pyx":675
+ *         if vecl != NULL:
+ *             vl = [ref_Vec(vecl[i]) for i from 0 <= i < n]
+ *         if vecm != NULL:             # <<<<<<<<<<<<<<
+ *             vm = [ref_Vec(vecm[i]) for i from 0 <= i < n]
+ *         return (vl, vm)
  */
   }
 
-  /* "PETSc/TS.pyx":523
- *         if uvec == NULL:
- *             CHKERR( TSGetSolution(self.ts, &uvec) )
- *         CHKERR( TSMonitor(self.ts, ival, rval, uvec) )             # <<<<<<<<<<<<<<
+  /* "PETSc/TS.pyx":677
+ *         if vecm != NULL:
+ *             vm = [ref_Vec(vecm[i]) for i from 0 <= i < n]
+ *         return (vl, vm)             # <<<<<<<<<<<<<<
  * 
- *     # --- solving ---
+ *     def setCostIntegrand(self, Vec cost or None, rfunction,
  */
-  __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)
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 677, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_INCREF(__pyx_v_vl);
+  __Pyx_GIVEREF(__pyx_v_vl);
+  PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_vl);
+  __Pyx_INCREF(__pyx_v_vm);
+  __Pyx_GIVEREF(__pyx_v_vm);
+  PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_vm);
+  __pyx_r = __pyx_t_3;
+  __pyx_t_3 = 0;
+  goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":516
- *         CHKERR( TSMonitorCancel(self.ts) )
+  /* "PETSc/TS.pyx":667
+ *         CHKERR( TSSetCostGradients(self.ts, n, vecl, vecm) )
  * 
- *     def monitor(self, step, time, Vec u=None):             # <<<<<<<<<<<<<<
- *         cdef PetscInt  ival = asInt(step)
- *         cdef PetscReal rval = asReal(time)
+ *     def getCostGradients(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt i = 0, n = 0
+ *         cdef PetscVec *vecl = NULL
  */
 
   /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.monitor", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.getCostGradients", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_vl);
+  __Pyx_XDECREF(__pyx_v_vm);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":527
- *     # --- solving ---
+/* "PETSc/TS.pyx":679
+ *         return (vl, vm)
  * 
- *     def setPreStep(self, prestep, args=None, kargs=None):             # <<<<<<<<<<<<<<
- *         if prestep is not None:
- *             if args  is None: args  = ()
+ *     def setCostIntegrand(self, Vec cost or None, rfunction,             # <<<<<<<<<<<<<<
+ *                          n=0, drdyfunction=None, drdpfunction=None,
+ *                          forward=True, args=None, kargs=None):
  */
 
 /* Python wrapper */
-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;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_179setCostIntegrand(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_178setCostIntegrand[] = "TS.setCostIntegrand(self, Vec cost, rfunction, n=0, drdyfunction=None, drdpfunction=None, forward=True, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_179setCostIntegrand(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscVecObject *__pyx_v_cost = 0;
+  PyObject *__pyx_v_rfunction = 0;
+  PyObject *__pyx_v_n = 0;
+  PyObject *__pyx_v_drdyfunction = 0;
+  PyObject *__pyx_v_drdpfunction = 0;
+  PyObject *__pyx_v_forward = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setPreStep (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setCostIntegrand (wrapper)", 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);
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_cost,&__pyx_n_s_rfunction,&__pyx_n_s_n,&__pyx_n_s_drdyfunction,&__pyx_n_s_drdpfunction,&__pyx_n_s_forward,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    PyObject* values[8] = {0,0,0,0,0,0,0,0};
+    values[2] = ((PyObject *)__pyx_int_0);
+
+    /* "PETSc/TS.pyx":680
+ * 
+ *     def setCostIntegrand(self, Vec cost or None, rfunction,
+ *                          n=0, drdyfunction=None, drdpfunction=None,             # <<<<<<<<<<<<<<
+ *                          forward=True, args=None, kargs=None):
+ *         cdef PetscInt ival = asInt(n)
+ */
+    values[3] = ((PyObject *)Py_None);
+    values[4] = ((PyObject *)Py_None);
+
+    /* "PETSc/TS.pyx":681
+ *     def setCostIntegrand(self, Vec cost or None, rfunction,
+ *                          n=0, drdyfunction=None, drdpfunction=None,
+ *                          forward=True, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival = asInt(n)
+ *         cdef PetscVec vec = NULL
+ */
+    values[5] = ((PyObject *)Py_True);
+    values[6] = ((PyObject *)Py_None);
+    values[7] = ((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  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
+        CYTHON_FALLTHROUGH;
+        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
+        CYTHON_FALLTHROUGH;
+        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         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_prestep)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_cost)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_rfunction)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("setCostIntegrand", 0, 2, 8, 1); __PYX_ERR(37, 679, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_n);
+          if (value) { values[2] = value; kw_args--; }
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_drdyfunction);
+          if (value) { values[3] = value; kw_args--; }
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_drdpfunction);
+          if (value) { values[4] = value; kw_args--; }
+        }
+        CYTHON_FALLTHROUGH;
+        case  5:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_forward);
+          if (value) { values[5] = value; kw_args--; }
+        }
+        CYTHON_FALLTHROUGH;
+        case  6:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
-          if (value) { values[1] = value; kw_args--; }
+          if (value) { values[6] = value; kw_args--; }
         }
-        case  2:
+        CYTHON_FALLTHROUGH;
+        case  7:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
-          if (value) { values[2] = value; kw_args--; }
+          if (value) { values[7] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPreStep") < 0)) __PYX_ERR(37, 527, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCostIntegrand") < 0)) __PYX_ERR(37, 679, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
+        CYTHON_FALLTHROUGH;
+        case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
+        CYTHON_FALLTHROUGH;
+        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_prestep = values[0];
-    __pyx_v_args = values[1];
-    __pyx_v_kargs = values[2];
+    __pyx_v_cost = ((struct PyPetscVecObject *)values[0]);
+    __pyx_v_rfunction = values[1];
+    __pyx_v_n = values[2];
+    __pyx_v_drdyfunction = values[3];
+    __pyx_v_drdpfunction = values[4];
+    __pyx_v_forward = values[5];
+    __pyx_v_args = values[6];
+    __pyx_v_kargs = values[7];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setPreStep", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 527, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setCostIntegrand", 0, 2, 8, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 679, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.setPreStep", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.setCostIntegrand", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_138setPreStep(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_prestep, __pyx_v_args, __pyx_v_kargs);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_cost), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "cost", 0))) __PYX_ERR(37, 679, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_178setCostIntegrand(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_cost, __pyx_v_rfunction, __pyx_v_n, __pyx_v_drdyfunction, __pyx_v_drdpfunction, __pyx_v_forward, __pyx_v_args, __pyx_v_kargs);
+
+  /* "PETSc/TS.pyx":679
+ *         return (vl, vm)
+ * 
+ *     def setCostIntegrand(self, Vec cost or None, rfunction,             # <<<<<<<<<<<<<<
+ *                          n=0, drdyfunction=None, drdpfunction=None,
+ *                          forward=True, args=None, kargs=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_2TS_138setPreStep(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_prestep, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_178setCostIntegrand(struct PyPetscTSObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_cost, PyObject *__pyx_v_rfunction, PyObject *__pyx_v_n, PyObject *__pyx_v_drdyfunction, PyObject *__pyx_v_drdpfunction, PyObject *__pyx_v_forward, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+  PetscInt __pyx_v_ival;
+  Vec __pyx_v_vec;
+  int (*__pyx_v_R)(TS, PetscReal, Vec, Vec, void *);
+  int (*__pyx_v_DRDY)(TS, PetscReal, Vec, Vec *, void *);
+  int (*__pyx_v_DRDP)(TS, PetscReal, Vec, Vec *, void *);
+  PetscBool __pyx_v_fwd;
   PyObject *__pyx_v_context = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
+  PetscInt __pyx_t_1;
   int __pyx_t_2;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_t_4;
-  __Pyx_RefNannySetupContext("setPreStep", 0);
+  int __pyx_t_3;
+  Vec __pyx_t_4;
+  PetscBool __pyx_t_5;
+  PyObject *__pyx_t_6 = NULL;
+  PyObject *__pyx_t_7 = NULL;
+  int __pyx_t_8;
+  __Pyx_RefNannySetupContext("setCostIntegrand", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "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 = {}
+  /* "PETSc/TS.pyx":682
+ *                          n=0, drdyfunction=None, drdpfunction=None,
+ *                          forward=True, args=None, kargs=None):
+ *         cdef PetscInt ival = asInt(n)             # <<<<<<<<<<<<<<
+ *         cdef PetscVec vec = NULL
+ *         cdef int (*R   )(PetscTS,PetscReal,PetscVec,PetscVec,  void*) nogil except PETSC_ERR_PYTHON
  */
-  __pyx_t_1 = (__pyx_v_prestep != Py_None);
-  __pyx_t_2 = (__pyx_t_1 != 0);
-  if (__pyx_t_2) {
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_n); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(37, 682, __pyx_L1_error)
+  __pyx_v_ival = __pyx_t_1;
 
-    /* "PETSc/TS.pyx":529
- *     def setPreStep(self, prestep, args=None, kargs=None):
- *         if prestep is not None:
- *             if args  is None: args  = ()             # <<<<<<<<<<<<<<
- *             if kargs is None: kargs = {}
- *             context = (prestep, args, kargs)
+  /* "PETSc/TS.pyx":683
+ *                          forward=True, args=None, kargs=None):
+ *         cdef PetscInt ival = asInt(n)
+ *         cdef PetscVec vec = NULL             # <<<<<<<<<<<<<<
+ *         cdef int (*R   )(PetscTS,PetscReal,PetscVec,PetscVec,  void*) nogil except PETSC_ERR_PYTHON
+ *         cdef int (*DRDY)(PetscTS,PetscReal,PetscVec,PetscVec[],void*) nogil except PETSC_ERR_PYTHON
  */
-    __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);
-    }
+  __pyx_v_vec = NULL;
 
-    /* "PETSc/TS.pyx":530
- *         if prestep is not None:
- *             if args  is None: args  = ()
- *             if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
- *             context = (prestep, args, kargs)
- *             self.set_attr('__prestep__', context)
+  /* "PETSc/TS.pyx":687
+ *         cdef int (*DRDY)(PetscTS,PetscReal,PetscVec,PetscVec[],void*) nogil except PETSC_ERR_PYTHON
+ *         cdef int (*DRDP)(PetscTS,PetscReal,PetscVec,PetscVec[],void*) nogil except PETSC_ERR_PYTHON
+ *         R = NULL; DRDY = NULL; DRDP = NULL;             # <<<<<<<<<<<<<<
+ *         if cost is not None: vec = (<Vec>cost).vec
+ *         if rfunction    is not None: R    = TSAdjoint_CostIntegrand
  */
-    __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(37, 530, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
-      __pyx_t_3 = 0;
-    }
+  __pyx_v_R = NULL;
+  __pyx_v_DRDY = NULL;
+  __pyx_v_DRDP = NULL;
 
-    /* "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) )
+  /* "PETSc/TS.pyx":688
+ *         cdef int (*DRDP)(PetscTS,PetscReal,PetscVec,PetscVec[],void*) nogil except PETSC_ERR_PYTHON
+ *         R = NULL; DRDY = NULL; DRDP = NULL;
+ *         if cost is not None: vec = (<Vec>cost).vec             # <<<<<<<<<<<<<<
+ *         if rfunction    is not None: R    = TSAdjoint_CostIntegrand
+ *         if drdyfunction is not None: DRDY = TSAdjoint_CostIntegrand_DY
  */
-    __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);
-    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_prestep);
-    __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;
+  __pyx_t_2 = (((PyObject *)__pyx_v_cost) != Py_None);
+  __pyx_t_3 = (__pyx_t_2 != 0);
+  if (__pyx_t_3) {
+    __pyx_t_4 = __pyx_v_cost->vec;
+    __pyx_v_vec = __pyx_t_4;
+  }
 
-    /* "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:
+  /* "PETSc/TS.pyx":689
+ *         R = NULL; DRDY = NULL; DRDP = NULL;
+ *         if cost is not None: vec = (<Vec>cost).vec
+ *         if rfunction    is not None: R    = TSAdjoint_CostIntegrand             # <<<<<<<<<<<<<<
+ *         if drdyfunction is not None: DRDY = TSAdjoint_CostIntegrand_DY
+ *         if drdpfunction is not None: DRDP = TSAdjoint_CostIntegrand_DP
  */
-    __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;
+  __pyx_t_3 = (__pyx_v_rfunction != Py_None);
+  __pyx_t_2 = (__pyx_t_3 != 0);
+  if (__pyx_t_2) {
+    __pyx_v_R = __pyx_f_8petsc4py_5PETSc_TSAdjoint_CostIntegrand;
+  }
 
-    /* "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)
+  /* "PETSc/TS.pyx":690
+ *         if cost is not None: vec = (<Vec>cost).vec
+ *         if rfunction    is not None: R    = TSAdjoint_CostIntegrand
+ *         if drdyfunction is not None: DRDY = TSAdjoint_CostIntegrand_DY             # <<<<<<<<<<<<<<
+ *         if drdpfunction is not None: DRDP = TSAdjoint_CostIntegrand_DP
+ *         cdef PetscBool fwd = forward
  */
-    __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)
+  __pyx_t_2 = (__pyx_v_drdyfunction != Py_None);
+  __pyx_t_3 = (__pyx_t_2 != 0);
+  if (__pyx_t_3) {
+    __pyx_v_DRDY = __pyx_f_8petsc4py_5PETSc_TSAdjoint_CostIntegrand_DY;
+  }
 
-    /* "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 = {}
+  /* "PETSc/TS.pyx":691
+ *         if rfunction    is not None: R    = TSAdjoint_CostIntegrand
+ *         if drdyfunction is not None: DRDY = TSAdjoint_CostIntegrand_DY
+ *         if drdpfunction is not None: DRDP = TSAdjoint_CostIntegrand_DP             # <<<<<<<<<<<<<<
+ *         cdef PetscBool fwd = forward
+ *         if args  is None: args  = ()
  */
-    goto __pyx_L3;
+  __pyx_t_3 = (__pyx_v_drdpfunction != Py_None);
+  __pyx_t_2 = (__pyx_t_3 != 0);
+  if (__pyx_t_2) {
+    __pyx_v_DRDP = __pyx_f_8petsc4py_5PETSc_TSAdjoint_CostIntegrand_DP;
   }
 
-  /* "PETSc/TS.pyx":535
- *             CHKERR( TSSetPreStep(self.ts, TS_PreStep) )
- *         else:
- *             self.set_attr('__prestep__', None)             # <<<<<<<<<<<<<<
- *             CHKERR( TSSetPreStep(self.ts, NULL) )
- * 
+  /* "PETSc/TS.pyx":692
+ *         if drdyfunction is not None: DRDY = TSAdjoint_CostIntegrand_DY
+ *         if drdpfunction is not None: DRDP = TSAdjoint_CostIntegrand_DP
+ *         cdef PetscBool fwd = forward             # <<<<<<<<<<<<<<
+ *         if args  is None: args  = ()
+ *         if kargs is None: kargs = {}
  */
-  /*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;
+  __pyx_t_5 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_forward)); if (unlikely(PyErr_Occurred())) __PYX_ERR(37, 692, __pyx_L1_error)
+  __pyx_v_fwd = __pyx_t_5;
 
-    /* "PETSc/TS.pyx":536
- *         else:
- *             self.set_attr('__prestep__', None)
- *             CHKERR( TSSetPreStep(self.ts, NULL) )             # <<<<<<<<<<<<<<
- * 
- *     def getPreStep(self):
+  /* "PETSc/TS.pyx":693
+ *         if drdpfunction is not None: DRDP = TSAdjoint_CostIntegrand_DP
+ *         cdef PetscBool fwd = forward
+ *         if args  is None: args  = ()             # <<<<<<<<<<<<<<
+ *         if kargs is None: kargs = {}
+ *         context = ((rfunction, drdyfunction, drdpfunction), args, kargs)
  */
-    __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_t_2 = (__pyx_v_args == Py_None);
+  __pyx_t_3 = (__pyx_t_2 != 0);
+  if (__pyx_t_3) {
+    __Pyx_INCREF(__pyx_empty_tuple);
+    __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
   }
-  __pyx_L3:;
 
-  /* "PETSc/TS.pyx":527
- *     # --- solving ---
- * 
- *     def setPreStep(self, prestep, args=None, kargs=None):             # <<<<<<<<<<<<<<
- *         if prestep is not None:
- *             if args  is None: args  = ()
+  /* "PETSc/TS.pyx":694
+ *         cdef PetscBool fwd = forward
+ *         if args  is None: args  = ()
+ *         if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
+ *         context = ((rfunction, drdyfunction, drdpfunction), args, kargs)
+ *         self.set_attr('__costintegrand__', context)
  */
+  __pyx_t_3 = (__pyx_v_kargs == Py_None);
+  __pyx_t_2 = (__pyx_t_3 != 0);
+  if (__pyx_t_2) {
+    __pyx_t_6 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_6)) __PYX_ERR(37, 694, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_6);
+    __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_6);
+    __pyx_t_6 = 0;
+  }
 
-  /* 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.TS.setPreStep", __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/TS.pyx":695
+ *         if args  is None: args  = ()
+ *         if kargs is None: kargs = {}
+ *         context = ((rfunction, drdyfunction, drdpfunction), args, kargs)             # <<<<<<<<<<<<<<
+ *         self.set_attr('__costintegrand__', context)
+ *         CHKERR( TSSetCostIntegrand(self.ts, ival, vec, R, DRDY, DRDP, fwd, <void*>context) )
+ */
+  __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(37, 695, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __Pyx_INCREF(__pyx_v_rfunction);
+  __Pyx_GIVEREF(__pyx_v_rfunction);
+  PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_v_rfunction);
+  __Pyx_INCREF(__pyx_v_drdyfunction);
+  __Pyx_GIVEREF(__pyx_v_drdyfunction);
+  PyTuple_SET_ITEM(__pyx_t_6, 1, __pyx_v_drdyfunction);
+  __Pyx_INCREF(__pyx_v_drdpfunction);
+  __Pyx_GIVEREF(__pyx_v_drdpfunction);
+  PyTuple_SET_ITEM(__pyx_t_6, 2, __pyx_v_drdpfunction);
+  __pyx_t_7 = PyTuple_New(3); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 695, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __Pyx_GIVEREF(__pyx_t_6);
+  PyTuple_SET_ITEM(__pyx_t_7, 0, __pyx_t_6);
+  __Pyx_INCREF(__pyx_v_args);
+  __Pyx_GIVEREF(__pyx_v_args);
+  PyTuple_SET_ITEM(__pyx_t_7, 1, __pyx_v_args);
+  __Pyx_INCREF(__pyx_v_kargs);
+  __Pyx_GIVEREF(__pyx_v_kargs);
+  PyTuple_SET_ITEM(__pyx_t_7, 2, __pyx_v_kargs);
+  __pyx_t_6 = 0;
+  __pyx_v_context = ((PyObject*)__pyx_t_7);
+  __pyx_t_7 = 0;
 
-/* "PETSc/TS.pyx":538
- *             CHKERR( TSSetPreStep(self.ts, NULL) )
- * 
- *     def getPreStep(self):             # <<<<<<<<<<<<<<
- *         return self.get_attr('__prestep__')
+  /* "PETSc/TS.pyx":696
+ *         if kargs is None: kargs = {}
+ *         context = ((rfunction, drdyfunction, drdpfunction), args, kargs)
+ *         self.set_attr('__costintegrand__', context)             # <<<<<<<<<<<<<<
+ *         CHKERR( TSSetCostIntegrand(self.ts, ival, vec, R, DRDY, DRDP, fwd, <void*>context) )
  * 
  */
+  __pyx_t_7 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_TS *)__pyx_v_self->__pyx_base.__pyx_vtab)->__pyx_base.set_attr(((struct PyPetscObjectObject *)__pyx_v_self), ((char *)"__costintegrand__"), __pyx_v_context); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 696, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-/* Python wrapper */
-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_140getPreStep(((struct PyPetscTSObject *)__pyx_v_self));
-
-  /* function exit code */
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_140getPreStep(struct PyPetscTSObject *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  __Pyx_RefNannySetupContext("getPreStep", 0);
-
-  /* "PETSc/TS.pyx":539
- * 
- *     def getPreStep(self):
- *         return self.get_attr('__prestep__')             # <<<<<<<<<<<<<<
+  /* "PETSc/TS.pyx":697
+ *         context = ((rfunction, drdyfunction, drdpfunction), args, kargs)
+ *         self.set_attr('__costintegrand__', context)
+ *         CHKERR( TSSetCostIntegrand(self.ts, ival, vec, R, DRDY, DRDP, fwd, <void*>context) )             # <<<<<<<<<<<<<<
  * 
- *     def setPostStep(self, poststep, args=None, kargs=None):
+ *     def adjointSetRHSJacobian(self, adjointjacobian, Mat A=None, 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), ((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;
+  __pyx_t_8 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetCostIntegrand(__pyx_v_self->ts, __pyx_v_ival, __pyx_v_vec, __pyx_v_R, __pyx_v_DRDY, __pyx_v_DRDP, __pyx_v_fwd, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_8 == ((int)-1))) __PYX_ERR(37, 697, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":538
- *             CHKERR( TSSetPreStep(self.ts, NULL) )
- * 
- *     def getPreStep(self):             # <<<<<<<<<<<<<<
- *         return self.get_attr('__prestep__')
+  /* "PETSc/TS.pyx":679
+ *         return (vl, vm)
  * 
+ *     def setCostIntegrand(self, Vec cost or None, rfunction,             # <<<<<<<<<<<<<<
+ *                          n=0, drdyfunction=None, drdpfunction=None,
+ *                          forward=True, args=None, kargs=None):
  */
 
   /* 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.TS.getPreStep", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_7);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.setCostIntegrand", __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/TS.pyx":541
- *         return self.get_attr('__prestep__')
+/* "PETSc/TS.pyx":699
+ *         CHKERR( TSSetCostIntegrand(self.ts, ival, vec, R, DRDY, DRDP, fwd, <void*>context) )
  * 
- *     def setPostStep(self, poststep, args=None, kargs=None):             # <<<<<<<<<<<<<<
- *         if poststep is not None:
- *             if args  is None: args  = ()
+ *     def adjointSetRHSJacobian(self, adjointjacobian, Mat A=None, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscMat Amat=NULL
+ *         if A is not None: Amat = A.mat
  */
 
 /* Python wrapper */
-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;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_181adjointSetRHSJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_180adjointSetRHSJacobian[] = "TS.adjointSetRHSJacobian(self, adjointjacobian, Mat A=None, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_181adjointSetRHSJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_adjointjacobian = 0;
+  struct PyPetscMatObject *__pyx_v_A = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("setPostStep (wrapper)", 0);
+  __Pyx_RefNannySetupContext("adjointSetRHSJacobian (wrapper)", 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);
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_adjointjacobian,&__pyx_n_s_A,&__pyx_n_s_args,&__pyx_n_s_kargs,0};
+    PyObject* values[4] = {0,0,0,0};
+    values[1] = (PyObject *)((struct PyPetscMatObject *)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);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         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_poststep)) != 0)) kw_args--;
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_adjointjacobian)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_A);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
+          if (value) { values[3] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPostStep") < 0)) __PYX_ERR(37, 541, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "adjointSetRHSJacobian") < 0)) __PYX_ERR(37, 699, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_poststep = values[0];
-    __pyx_v_args = values[1];
-    __pyx_v_kargs = values[2];
+    __pyx_v_adjointjacobian = values[0];
+    __pyx_v_A = ((struct PyPetscMatObject *)values[1]);
+    __pyx_v_args = values[2];
+    __pyx_v_kargs = values[3];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setPostStep", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 541, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("adjointSetRHSJacobian", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 699, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.setPostStep", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.adjointSetRHSJacobian", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_142setPostStep(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_poststep, __pyx_v_args, __pyx_v_kargs);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_A), __pyx_ptype_8petsc4py_5PETSc_Mat, 1, "A", 0))) __PYX_ERR(37, 699, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_180adjointSetRHSJacobian(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_adjointjacobian, __pyx_v_A, __pyx_v_args, __pyx_v_kargs);
 
   /* 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_142setPostStep(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_poststep, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_180adjointSetRHSJacobian(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_adjointjacobian, struct PyPetscMatObject *__pyx_v_A, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
+  Mat __pyx_v_Amat;
   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("setPostStep", 0);
+  Mat __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  int __pyx_t_5;
+  __Pyx_RefNannySetupContext("adjointSetRHSJacobian", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/TS.pyx":542
+  /* "PETSc/TS.pyx":700
  * 
- *     def setPostStep(self, poststep, args=None, kargs=None):
- *         if poststep is not None:             # <<<<<<<<<<<<<<
+ *     def adjointSetRHSJacobian(self, adjointjacobian, Mat A=None, args=None, kargs=None):
+ *         cdef PetscMat Amat=NULL             # <<<<<<<<<<<<<<
+ *         if A is not None: Amat = A.mat
+ *         if adjointjacobian is not None:
+ */
+  __pyx_v_Amat = NULL;
+
+  /* "PETSc/TS.pyx":701
+ *     def adjointSetRHSJacobian(self, adjointjacobian, Mat A=None, args=None, kargs=None):
+ *         cdef PetscMat Amat=NULL
+ *         if A is not None: Amat = A.mat             # <<<<<<<<<<<<<<
+ *         if adjointjacobian is not None:
  *             if args  is None: args  = ()
- *             if kargs is None: kargs = {}
  */
-  __pyx_t_1 = (__pyx_v_poststep != Py_None);
+  __pyx_t_1 = (((PyObject *)__pyx_v_A) != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
+    __pyx_t_3 = __pyx_v_A->mat;
+    __pyx_v_Amat = __pyx_t_3;
+  }
 
-    /* "PETSc/TS.pyx":543
- *     def setPostStep(self, poststep, args=None, kargs=None):
- *         if poststep is not None:
+  /* "PETSc/TS.pyx":702
+ *         cdef PetscMat Amat=NULL
+ *         if A is not None: Amat = A.mat
+ *         if adjointjacobian is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}
+ */
+  __pyx_t_2 = (__pyx_v_adjointjacobian != Py_None);
+  __pyx_t_1 = (__pyx_t_2 != 0);
+  if (__pyx_t_1) {
+
+    /* "PETSc/TS.pyx":703
+ *         if A is not None: Amat = A.mat
+ *         if adjointjacobian is not None:
  *             if args  is None: args  = ()             # <<<<<<<<<<<<<<
  *             if kargs is None: kargs = {}
- *             context = (poststep, args, kargs)
+ *             context = (adjointjacobian, args, kargs)
  */
-    __pyx_t_2 = (__pyx_v_args == Py_None);
-    __pyx_t_1 = (__pyx_t_2 != 0);
-    if (__pyx_t_1) {
+    __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/TS.pyx":544
- *         if poststep is not None:
+    /* "PETSc/TS.pyx":704
+ *         if adjointjacobian is not None:
  *             if args  is None: args  = ()
  *             if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
- *             context = (poststep, args, kargs)
- *             self.set_attr('__poststep__', context)
+ *             context = (adjointjacobian, args, kargs)
+ *             self.set_attr('__adjointrhsjacobian__', 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(37, 544, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_3);
-      __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
-      __pyx_t_3 = 0;
+    __pyx_t_2 = (__pyx_v_kargs == Py_None);
+    __pyx_t_1 = (__pyx_t_2 != 0);
+    if (__pyx_t_1) {
+      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 704, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_4);
+      __pyx_t_4 = 0;
     }
 
-    /* "PETSc/TS.pyx":545
+    /* "PETSc/TS.pyx":705
  *             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) )
+ *             context = (adjointjacobian, args, kargs)             # <<<<<<<<<<<<<<
+ *             self.set_attr('__adjointrhsjacobian__', context)
+ *             CHKERR( TSAdjointSetRHSJacobian(self.ts, Amat, TSAdjoint_RHSJacobian, <void*>context) )
  */
-    __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);
-    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_poststep);
+    __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 705, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_INCREF(__pyx_v_adjointjacobian);
+    __Pyx_GIVEREF(__pyx_v_adjointjacobian);
+    PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_adjointjacobian);
     __Pyx_INCREF(__pyx_v_args);
     __Pyx_GIVEREF(__pyx_v_args);
-    PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_args);
+    PyTuple_SET_ITEM(__pyx_t_4, 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;
+    PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_kargs);
+    __pyx_v_context = ((PyObject*)__pyx_t_4);
+    __pyx_t_4 = 0;
 
-    /* "PETSc/TS.pyx":546
+    /* "PETSc/TS.pyx":706
  *             if kargs is None: kargs = {}
- *             context = (poststep, args, kargs)
- *             self.set_attr('__poststep__', context)             # <<<<<<<<<<<<<<
- *             CHKERR( TSSetPostStep(self.ts, TS_PostStep) )
+ *             context = (adjointjacobian, args, kargs)
+ *             self.set_attr('__adjointrhsjacobian__', context)             # <<<<<<<<<<<<<<
+ *             CHKERR( TSAdjointSetRHSJacobian(self.ts, Amat, TSAdjoint_RHSJacobian, <void*>context) )
  *         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__"), __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;
+    __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 *)"__adjointrhsjacobian__"), __pyx_v_context); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 706, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-    /* "PETSc/TS.pyx":547
- *             context = (poststep, args, kargs)
- *             self.set_attr('__poststep__', context)
- *             CHKERR( TSSetPostStep(self.ts, TS_PostStep) )             # <<<<<<<<<<<<<<
+    /* "PETSc/TS.pyx":707
+ *             context = (adjointjacobian, args, kargs)
+ *             self.set_attr('__adjointrhsjacobian__', context)
+ *             CHKERR( TSAdjointSetRHSJacobian(self.ts, Amat, TSAdjoint_RHSJacobian, <void*>context) )             # <<<<<<<<<<<<<<
  *         else:
- *             self.set_attr('__poststep__', None)
+ *             CHKERR( TSAdjointSetRHSJacobian(self.ts, Amat, NULL, NULL) )
  */
-    __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)
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSAdjointSetRHSJacobian(__pyx_v_self->ts, __pyx_v_Amat, __pyx_f_8petsc4py_5PETSc_TSAdjoint_RHSJacobian, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(37, 707, __pyx_L1_error)
 
-    /* "PETSc/TS.pyx":542
- * 
- *     def setPostStep(self, poststep, args=None, kargs=None):
- *         if poststep is not None:             # <<<<<<<<<<<<<<
+    /* "PETSc/TS.pyx":702
+ *         cdef PetscMat Amat=NULL
+ *         if A is not None: Amat = A.mat
+ *         if adjointjacobian is not None:             # <<<<<<<<<<<<<<
  *             if args  is None: args  = ()
  *             if kargs is None: kargs = {}
  */
-    goto __pyx_L3;
+    goto __pyx_L4;
   }
 
-  /* "PETSc/TS.pyx":549
- *             CHKERR( TSSetPostStep(self.ts, TS_PostStep) )
+  /* "PETSc/TS.pyx":709
+ *             CHKERR( TSAdjointSetRHSJacobian(self.ts, Amat, TSAdjoint_RHSJacobian, <void*>context) )
  *         else:
- *             self.set_attr('__poststep__', None)             # <<<<<<<<<<<<<<
- *             CHKERR( TSSetPostStep(self.ts, NULL) )
+ *             CHKERR( TSAdjointSetRHSJacobian(self.ts, Amat, NULL, NULL) )             # <<<<<<<<<<<<<<
  * 
+ *     def adjointComputeRHSJacobian(self, t, Vec x, Mat J):
  */
   /*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":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_ERR(37, 550, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSAdjointSetRHSJacobian(__pyx_v_self->ts, __pyx_v_Amat, NULL, NULL)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(37, 709, __pyx_L1_error)
   }
-  __pyx_L3:;
+  __pyx_L4:;
 
-  /* "PETSc/TS.pyx":541
- *         return self.get_attr('__prestep__')
+  /* "PETSc/TS.pyx":699
+ *         CHKERR( TSSetCostIntegrand(self.ts, ival, vec, R, DRDY, DRDP, fwd, <void*>context) )
  * 
- *     def setPostStep(self, poststep, args=None, kargs=None):             # <<<<<<<<<<<<<<
- *         if poststep is not None:
- *             if args  is None: args  = ()
+ *     def adjointSetRHSJacobian(self, adjointjacobian, Mat A=None, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscMat Amat=NULL
+ *         if A is not None: Amat = A.mat
  */
 
   /* 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.TS.setPostStep", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.adjointSetRHSJacobian", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_context);
@@ -182948,123 +196891,133 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_142setPostStep(struct PyPetscTSOb
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":552
- *             CHKERR( TSSetPostStep(self.ts, NULL) )
- * 
- *     def getPostStep(self):             # <<<<<<<<<<<<<<
- *         return self.get_attr('__poststep__')
+/* "PETSc/TS.pyx":711
+ *             CHKERR( TSAdjointSetRHSJacobian(self.ts, Amat, NULL, NULL) )
  * 
+ *     def adjointComputeRHSJacobian(self, t, Vec x, Mat J):             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = asReal(t)
+ *         CHKERR( TSAdjointComputeRHSJacobian(self.ts, rval, x.vec, J.mat) )
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_183adjointComputeRHSJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_182adjointComputeRHSJacobian[] = "TS.adjointComputeRHSJacobian(self, t, Vec x, Mat J)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_183adjointComputeRHSJacobian(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;
   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_144getPostStep(((struct PyPetscTSObject *)__pyx_v_self));
-
-  /* function exit code */
+  __Pyx_RefNannySetupContext("adjointComputeRHSJacobian (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_t,&__pyx_n_s_x,&__pyx_n_s_J,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);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        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_t)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("adjointComputeRHSJacobian", 1, 3, 3, 1); __PYX_ERR(37, 711, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_J)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("adjointComputeRHSJacobian", 1, 3, 3, 2); __PYX_ERR(37, 711, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "adjointComputeRHSJacobian") < 0)) __PYX_ERR(37, 711, __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_t = values[0];
+    __pyx_v_x = ((struct PyPetscVecObject *)values[1]);
+    __pyx_v_J = ((struct PyPetscMatObject *)values[2]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("adjointComputeRHSJacobian", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 711, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.adjointComputeRHSJacobian", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_144getPostStep(struct PyPetscTSObject *__pyx_v_self) {
-  PyObject *__pyx_r = NULL;
-  __Pyx_RefNannyDeclarations
-  PyObject *__pyx_t_1 = NULL;
-  __Pyx_RefNannySetupContext("getPostStep", 0);
-
-  /* "PETSc/TS.pyx":553
- * 
- *     def getPostStep(self):
- *         return self.get_attr('__poststep__')             # <<<<<<<<<<<<<<
- * 
- *     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), ((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":552
- *             CHKERR( TSSetPostStep(self.ts, NULL) )
- * 
- *     def getPostStep(self):             # <<<<<<<<<<<<<<
- *         return self.get_attr('__poststep__')
- * 
- */
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_x), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "x", 0))) __PYX_ERR(37, 711, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_J), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "J", 0))) __PYX_ERR(37, 711, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_182adjointComputeRHSJacobian(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_t, __pyx_v_x, __pyx_v_J);
 
   /* function exit code */
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_1);
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.getPostStep", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-/* "PETSc/TS.pyx":555
- *         return self.get_attr('__poststep__')
- * 
- *     def setUp(self):             # <<<<<<<<<<<<<<
- *         CHKERR( TSSetUp(self.ts) )
- * 
- */
-
-/* Python wrapper */
-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_146setUp(((struct PyPetscTSObject *)__pyx_v_self));
-
-  /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_146setUp(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_182adjointComputeRHSJacobian(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_t, struct PyPetscVecObject *__pyx_v_x, struct PyPetscMatObject *__pyx_v_J) {
+  PetscReal __pyx_v_rval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  __Pyx_RefNannySetupContext("setUp", 0);
+  PetscReal __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("adjointComputeRHSJacobian", 0);
 
-  /* "PETSc/TS.pyx":556
+  /* "PETSc/TS.pyx":712
  * 
- *     def setUp(self):
- *         CHKERR( TSSetUp(self.ts) )             # <<<<<<<<<<<<<<
+ *     def adjointComputeRHSJacobian(self, t, Vec x, Mat J):
+ *         cdef PetscReal rval = asReal(t)             # <<<<<<<<<<<<<<
+ *         CHKERR( TSAdjointComputeRHSJacobian(self.ts, rval, x.vec, J.mat) )
  * 
- *     def reset(self):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_t); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(37, 712, __pyx_L1_error)
+  __pyx_v_rval = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":555
- *         return self.get_attr('__poststep__')
+  /* "PETSc/TS.pyx":713
+ *     def adjointComputeRHSJacobian(self, t, Vec x, Mat J):
+ *         cdef PetscReal rval = asReal(t)
+ *         CHKERR( TSAdjointComputeRHSJacobian(self.ts, rval, x.vec, J.mat) )             # <<<<<<<<<<<<<<
  * 
- *     def setUp(self):             # <<<<<<<<<<<<<<
- *         CHKERR( TSSetUp(self.ts) )
+ *     def adjointSetSteps(self, adjoint_steps):
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSAdjointComputeRHSJacobian(__pyx_v_self->ts, __pyx_v_rval, __pyx_v_x->vec, __pyx_v_J->mat)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(37, 713, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":711
+ *             CHKERR( TSAdjointSetRHSJacobian(self.ts, Amat, NULL, NULL) )
  * 
+ *     def adjointComputeRHSJacobian(self, t, Vec x, Mat J):             # <<<<<<<<<<<<<<
+ *         cdef PetscReal rval = asReal(t)
+ *         CHKERR( TSAdjointComputeRHSJacobian(self.ts, rval, x.vec, J.mat) )
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.setUp", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.adjointComputeRHSJacobian", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -183072,59 +197025,105 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_146setUp(struct PyPetscTSObject *
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":558
- *         CHKERR( TSSetUp(self.ts) )
- * 
- *     def reset(self):             # <<<<<<<<<<<<<<
- *         CHKERR( TSReset(self.ts) )
+/* "PETSc/TS.pyx":715
+ *         CHKERR( TSAdjointComputeRHSJacobian(self.ts, rval, x.vec, J.mat) )
  * 
+ *     def adjointSetSteps(self, adjoint_steps):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival = asInt(adjoint_steps)
+ *         CHKERR( TSAdjointSetSteps(self.ts, ival) )
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_185adjointSetSteps(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_184adjointSetSteps[] = "TS.adjointSetSteps(self, adjoint_steps)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_185adjointSetSteps(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_adjoint_steps = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("reset (wrapper)", 0);
-  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
-    __Pyx_RaiseArgtupleInvalid("reset", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
-  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "reset", 0))) return NULL;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_148reset(((struct PyPetscTSObject *)__pyx_v_self));
+  __Pyx_RefNannySetupContext("adjointSetSteps (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_adjoint_steps,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);
+        CYTHON_FALLTHROUGH;
+        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_adjoint_steps)) != 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, "adjointSetSteps") < 0)) __PYX_ERR(37, 715, __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_adjoint_steps = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("adjointSetSteps", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 715, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.adjointSetSteps", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_184adjointSetSteps(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_adjoint_steps);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_148reset(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_184adjointSetSteps(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_adjoint_steps) {
+  PetscInt __pyx_v_ival;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  int __pyx_t_1;
-  __Pyx_RefNannySetupContext("reset", 0);
+  PetscInt __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("adjointSetSteps", 0);
 
-  /* "PETSc/TS.pyx":559
+  /* "PETSc/TS.pyx":716
  * 
- *     def reset(self):
- *         CHKERR( TSReset(self.ts) )             # <<<<<<<<<<<<<<
+ *     def adjointSetSteps(self, adjoint_steps):
+ *         cdef PetscInt ival = asInt(adjoint_steps)             # <<<<<<<<<<<<<<
+ *         CHKERR( TSAdjointSetSteps(self.ts, ival) )
  * 
- *     def step(self):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_adjoint_steps); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(37, 716, __pyx_L1_error)
+  __pyx_v_ival = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":558
- *         CHKERR( TSSetUp(self.ts) )
+  /* "PETSc/TS.pyx":717
+ *     def adjointSetSteps(self, adjoint_steps):
+ *         cdef PetscInt ival = asInt(adjoint_steps)
+ *         CHKERR( TSAdjointSetSteps(self.ts, ival) )             # <<<<<<<<<<<<<<
  * 
- *     def reset(self):             # <<<<<<<<<<<<<<
- *         CHKERR( TSReset(self.ts) )
+ *     def adjointSetUp(self):
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSAdjointSetSteps(__pyx_v_self->ts, __pyx_v_ival)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(37, 717, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":715
+ *         CHKERR( TSAdjointComputeRHSJacobian(self.ts, rval, x.vec, J.mat) )
  * 
+ *     def adjointSetSteps(self, adjoint_steps):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt ival = asInt(adjoint_steps)
+ *         CHKERR( TSAdjointSetSteps(self.ts, ival) )
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.reset", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.adjointSetSteps", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -183132,51 +197131,51 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_148reset(struct PyPetscTSObject *
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":561
- *         CHKERR( TSReset(self.ts) )
+/* "PETSc/TS.pyx":719
+ *         CHKERR( TSAdjointSetSteps(self.ts, ival) )
  * 
- *     def step(self):             # <<<<<<<<<<<<<<
- *         CHKERR( TSStep(self.ts) )
+ *     def adjointSetUp(self):             # <<<<<<<<<<<<<<
+ *         CHKERR(TSAdjointSetUp(self.ts))
  * 
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_187adjointSetUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_186adjointSetUp[] = "TS.adjointSetUp(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_187adjointSetUp(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("step (wrapper)", 0);
+  __Pyx_RefNannySetupContext("adjointSetUp (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_150step(((struct PyPetscTSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("adjointSetUp", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "adjointSetUp", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_186adjointSetUp(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_150step(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_186adjointSetUp(struct PyPetscTSObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  __Pyx_RefNannySetupContext("step", 0);
+  __Pyx_RefNannySetupContext("adjointSetUp", 0);
 
-  /* "PETSc/TS.pyx":562
+  /* "PETSc/TS.pyx":720
  * 
- *     def step(self):
- *         CHKERR( TSStep(self.ts) )             # <<<<<<<<<<<<<<
+ *     def adjointSetUp(self):
+ *         CHKERR(TSAdjointSetUp(self.ts))             # <<<<<<<<<<<<<<
  * 
- *     def rollBack(self):
+ *     def adjointSolve(self):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSAdjointSetUp(__pyx_v_self->ts)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(37, 720, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":561
- *         CHKERR( TSReset(self.ts) )
+  /* "PETSc/TS.pyx":719
+ *         CHKERR( TSAdjointSetSteps(self.ts, ival) )
  * 
- *     def step(self):             # <<<<<<<<<<<<<<
- *         CHKERR( TSStep(self.ts) )
+ *     def adjointSetUp(self):             # <<<<<<<<<<<<<<
+ *         CHKERR(TSAdjointSetUp(self.ts))
  * 
  */
 
@@ -183184,7 +197183,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_150step(struct PyPetscTSObject *_
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.step", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.adjointSetUp", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -183192,51 +197191,51 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_150step(struct PyPetscTSObject *_
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":564
- *         CHKERR( TSStep(self.ts) )
+/* "PETSc/TS.pyx":722
+ *         CHKERR(TSAdjointSetUp(self.ts))
  * 
- *     def rollBack(self):             # <<<<<<<<<<<<<<
- *         CHKERR( TSRollBack(self.ts) )
+ *     def adjointSolve(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( TSAdjointSolve(self.ts) )
  * 
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_189adjointSolve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_188adjointSolve[] = "TS.adjointSolve(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_189adjointSolve(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("rollBack (wrapper)", 0);
+  __Pyx_RefNannySetupContext("adjointSolve (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_152rollBack(((struct PyPetscTSObject *)__pyx_v_self));
+    __Pyx_RaiseArgtupleInvalid("adjointSolve", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "adjointSolve", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_188adjointSolve(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_152rollBack(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_188adjointSolve(struct PyPetscTSObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  __Pyx_RefNannySetupContext("rollBack", 0);
+  __Pyx_RefNannySetupContext("adjointSolve", 0);
 
-  /* "PETSc/TS.pyx":565
+  /* "PETSc/TS.pyx":723
  * 
- *     def rollBack(self):
- *         CHKERR( TSRollBack(self.ts) )             # <<<<<<<<<<<<<<
+ *     def adjointSolve(self):
+ *         CHKERR( TSAdjointSolve(self.ts) )             # <<<<<<<<<<<<<<
  * 
- *     def solve(self, Vec u not None):
+ *     def adjointStep(self):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSAdjointSolve(__pyx_v_self->ts)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(37, 723, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":564
- *         CHKERR( TSStep(self.ts) )
+  /* "PETSc/TS.pyx":722
+ *         CHKERR(TSAdjointSetUp(self.ts))
  * 
- *     def rollBack(self):             # <<<<<<<<<<<<<<
- *         CHKERR( TSRollBack(self.ts) )
+ *     def adjointSolve(self):             # <<<<<<<<<<<<<<
+ *         CHKERR( TSAdjointSolve(self.ts) )
  * 
  */
 
@@ -183244,7 +197243,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_152rollBack(struct PyPetscTSObjec
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.rollBack", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.adjointSolve", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -183252,216 +197251,59 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_152rollBack(struct PyPetscTSObjec
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":567
- *         CHKERR( TSRollBack(self.ts) )
+/* "PETSc/TS.pyx":725
+ *         CHKERR( TSAdjointSolve(self.ts) )
  * 
- *     def solve(self, Vec u not None):             # <<<<<<<<<<<<<<
- *         CHKERR( TSSolve(self.ts, u.vec) )
+ *     def adjointStep(self):             # <<<<<<<<<<<<<<
+ *         CHKERR(TSAdjointStep(self.ts))
  * 
  */
 
 /* Python wrapper */
-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;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_191adjointStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_190adjointStep[] = "TS.adjointStep(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_191adjointStep(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("solve (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_u,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_u)) != 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, "solve") < 0)) __PYX_ERR(37, 567, __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_u = ((struct PyPetscVecObject *)values[0]);
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_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_ERR(37, 567, __pyx_L1_error)
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_154solve(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_u);
+  __Pyx_RefNannySetupContext("adjointStep (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("adjointStep", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "adjointStep", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_190adjointStep(((struct PyPetscTSObject *)__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_2TS_154solve(struct PyPetscTSObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_u) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_190adjointStep(struct PyPetscTSObject *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
-  __Pyx_RefNannySetupContext("solve", 0);
-
-  /* "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_ERR(37, 568, __pyx_L1_error)
-
-  /* "PETSc/TS.pyx":567
- *         CHKERR( TSRollBack(self.ts) )
- * 
- *     def solve(self, Vec u not None):             # <<<<<<<<<<<<<<
- *         CHKERR( TSSolve(self.ts, u.vec) )
- * 
- */
-
-  /* function exit code */
-  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
-  goto __pyx_L0;
-  __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.solve", __pyx_clineno, __pyx_lineno, __pyx_filename);
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_XGIVEREF(__pyx_r);
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
+  __Pyx_RefNannySetupContext("adjointStep", 0);
 
-/* "PETSc/TS.pyx":570
- *         CHKERR( TSSolve(self.ts, u.vec) )
+  /* "PETSc/TS.pyx":726
  * 
- *     def interpolate(self, t, Vec u not None):             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval = asReal(t)
- *         CHKERR( TSInterpolate(self.ts, rval, u.vec) )
- */
-
-/* Python wrapper */
-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;
-  PyObject *__pyx_r = 0;
-  __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("interpolate (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_t,&__pyx_n_s_u,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_t)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
-        case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_u)) != 0)) kw_args--;
-        else {
-          __Pyx_RaiseArgtupleInvalid("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_ERR(37, 570, __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_t = values[0];
-    __pyx_v_u = ((struct PyPetscVecObject *)values[1]);
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_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_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;
-  __pyx_L1_error:;
-  __pyx_r = NULL;
-  __pyx_L0:;
-  __Pyx_RefNannyFinishContext();
-  return __pyx_r;
-}
-
-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;
-  __Pyx_RefNannySetupContext("interpolate", 0);
-
-  /* "PETSc/TS.pyx":571
+ *     def adjointStep(self):
+ *         CHKERR(TSAdjointStep(self.ts))             # <<<<<<<<<<<<<<
  * 
- *     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_ERR(37, 571, __pyx_L1_error)
-  __pyx_v_rval = __pyx_t_1;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSAdjointStep(__pyx_v_self->ts)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(37, 726, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":572
- *     def interpolate(self, t, Vec u not None):
- *         cdef PetscReal rval = asReal(t)
- *         CHKERR( TSInterpolate(self.ts, rval, u.vec) )             # <<<<<<<<<<<<<<
- * 
+  /* "PETSc/TS.pyx":725
+ *         CHKERR( TSAdjointSolve(self.ts) )
  * 
- */
-  __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":570
- *         CHKERR( TSSolve(self.ts, u.vec) )
+ *     def adjointStep(self):             # <<<<<<<<<<<<<<
+ *         CHKERR(TSAdjointStep(self.ts))
  * 
- *     def interpolate(self, t, Vec u not None):             # <<<<<<<<<<<<<<
- *         cdef PetscReal rval = asReal(t)
- *         CHKERR( TSInterpolate(self.ts, rval, u.vec) )
  */
 
   /* function exit code */
   __pyx_r = Py_None; __Pyx_INCREF(Py_None);
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.TS.interpolate", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.TS.adjointStep", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XGIVEREF(__pyx_r);
@@ -183469,7 +197311,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_156interpolate(struct PyPetscTSOb
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":577
+/* "PETSc/TS.pyx":731
  *     # --- Python ---
  * 
  *     def createPython(self, context=None, comm=None):             # <<<<<<<<<<<<<<
@@ -183478,9 +197320,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_156interpolate(struct PyPetscTSOb
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_193createPython(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_192createPython[] = "TS.createPython(self, context=None, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_193createPython(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_context = 0;
   PyObject *__pyx_v_comm = 0;
   PyObject *__pyx_r = 0;
@@ -183496,7 +197338,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_159createPython(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -183507,6 +197351,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_159createPython(PyObject *__pyx_v
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_context);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -183514,12 +197359,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_159createPython(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createPython") < 0)) __PYX_ERR(37, 577, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createPython") < 0)) __PYX_ERR(37, 731, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -183529,20 +197376,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_159createPython(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_ERR(37, 577, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createPython", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 731, __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_158createPython(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_context, __pyx_v_comm);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_192createPython(((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_158createPython(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_context, PyObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_192createPython(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;
@@ -183551,17 +197398,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_158createPython(struct PyPetscTSO
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("createPython", 0);
 
-  /* "PETSc/TS.pyx":578
+  /* "PETSc/TS.pyx":732
  * 
  *     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_ERR(37, 578, __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, 732, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":579
+  /* "PETSc/TS.pyx":733
  *     def createPython(self, context=None, comm=None):
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscTS newts = NULL             # <<<<<<<<<<<<<<
@@ -183570,16 +197417,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_158createPython(struct PyPetscTSO
  */
   __pyx_v_newts = NULL;
 
-  /* "PETSc/TS.pyx":580
+  /* "PETSc/TS.pyx":734
  *         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_ERR(37, 580, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSCreate(__pyx_v_ccomm, (&__pyx_v_newts))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(37, 734, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":581
+  /* "PETSc/TS.pyx":735
  *         cdef PetscTS newts = NULL
  *         CHKERR( TSCreate(ccomm, &newts) )
  *         PetscCLEAR(self.obj); self.ts = newts             # <<<<<<<<<<<<<<
@@ -183589,25 +197436,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_158createPython(struct PyPetscTSO
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.obj);
   __pyx_v_self->ts = __pyx_v_newts;
 
-  /* "PETSc/TS.pyx":582
+  /* "PETSc/TS.pyx":736
  *         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_ERR(37, 582, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSSetType(__pyx_v_self->ts, TSPYTHON)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(37, 736, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":583
+  /* "PETSc/TS.pyx":737
  *         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_ERR(37, 583, __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 == ((int)-1))) __PYX_ERR(37, 737, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":584
+  /* "PETSc/TS.pyx":738
  *         CHKERR( TSSetType(self.ts, TSPYTHON) )
  *         CHKERR( TSPythonSetContext(self.ts, <void*>context) )
  *         return self             # <<<<<<<<<<<<<<
@@ -183619,7 +197466,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_158createPython(struct PyPetscTSO
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":577
+  /* "PETSc/TS.pyx":731
  *     # --- Python ---
  * 
  *     def createPython(self, context=None, comm=None):             # <<<<<<<<<<<<<<
@@ -183637,7 +197484,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_158createPython(struct PyPetscTSO
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":586
+/* "PETSc/TS.pyx":740
  *         return self
  * 
  *     def setPythonContext(self, context):             # <<<<<<<<<<<<<<
@@ -183646,9 +197493,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_158createPython(struct PyPetscTSO
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_195setPythonContext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_194setPythonContext[] = "TS.setPythonContext(self, context)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_195setPythonContext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_context = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -183661,6 +197508,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_161setPythonContext(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -183671,7 +197519,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_161setPythonContext(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_ERR(37, 586, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPythonContext") < 0)) __PYX_ERR(37, 740, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -183682,35 +197530,35 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_161setPythonContext(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setPythonContext", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 586, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setPythonContext", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 740, __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_160setPythonContext(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_context);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_194setPythonContext(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_context);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_160setPythonContext(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_context) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_194setPythonContext(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_context) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setPythonContext", 0);
 
-  /* "PETSc/TS.pyx":587
+  /* "PETSc/TS.pyx":741
  * 
  *     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_ERR(37, 587, __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 == ((int)-1))) __PYX_ERR(37, 741, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":586
+  /* "PETSc/TS.pyx":740
  *         return self
  * 
  *     def setPythonContext(self, context):             # <<<<<<<<<<<<<<
@@ -183730,7 +197578,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_160setPythonContext(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":589
+/* "PETSc/TS.pyx":743
  *         CHKERR( TSPythonSetContext(self.ts, <void*>context) )
  * 
  *     def getPythonContext(self):             # <<<<<<<<<<<<<<
@@ -183739,23 +197587,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_160setPythonContext(struct PyPets
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_197getPythonContext(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_196getPythonContext[] = "TS.getPythonContext(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_197getPythonContext(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_162getPythonContext(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_196getPythonContext(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_162getPythonContext(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_196getPythonContext(struct PyPetscTSObject *__pyx_v_self) {
   void *__pyx_v_context;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -183763,7 +197611,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_162getPythonContext(struct PyPets
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getPythonContext", 0);
 
-  /* "PETSc/TS.pyx":590
+  /* "PETSc/TS.pyx":744
  * 
  *     def getPythonContext(self):
  *         cdef void *context = NULL             # <<<<<<<<<<<<<<
@@ -183772,16 +197620,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_162getPythonContext(struct PyPets
  */
   __pyx_v_context = NULL;
 
-  /* "PETSc/TS.pyx":591
+  /* "PETSc/TS.pyx":745
  *     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_ERR(37, 591, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSPythonGetContext(__pyx_v_self->ts, (&__pyx_v_context))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(37, 745, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":592
+  /* "PETSc/TS.pyx":746
  *         cdef void *context = NULL
  *         CHKERR( TSPythonGetContext(self.ts, &context) )
  *         if context == NULL: return None             # <<<<<<<<<<<<<<
@@ -183796,7 +197644,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_162getPythonContext(struct PyPets
     goto __pyx_L0;
   }
 
-  /* "PETSc/TS.pyx":593
+  /* "PETSc/TS.pyx":747
  *         CHKERR( TSPythonGetContext(self.ts, &context) )
  *         if context == NULL: return None
  *         else: return <object> context             # <<<<<<<<<<<<<<
@@ -183810,7 +197658,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_162getPythonContext(struct PyPets
     goto __pyx_L0;
   }
 
-  /* "PETSc/TS.pyx":589
+  /* "PETSc/TS.pyx":743
  *         CHKERR( TSPythonSetContext(self.ts, <void*>context) )
  * 
  *     def getPythonContext(self):             # <<<<<<<<<<<<<<
@@ -183828,7 +197676,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_162getPythonContext(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":595
+/* "PETSc/TS.pyx":749
  *         else: return <object> context
  * 
  *     def setPythonType(self, py_type):             # <<<<<<<<<<<<<<
@@ -183837,9 +197685,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_162getPythonContext(struct PyPets
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_199setPythonType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_198setPythonType[] = "TS.setPythonType(self, py_type)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_199setPythonType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_py_type = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -183852,6 +197700,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_165setPythonType(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -183862,7 +197711,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_165setPythonType(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_ERR(37, 595, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPythonType") < 0)) __PYX_ERR(37, 749, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -183873,20 +197722,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_165setPythonType(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setPythonType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 595, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setPythonType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 749, __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_164setPythonType(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_py_type);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_198setPythonType(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_py_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_164setPythonType(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_py_type) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_198setPythonType(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_py_type) {
   const char *__pyx_v_cval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -183895,7 +197744,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_164setPythonType(struct PyPetscTS
   __Pyx_RefNannySetupContext("setPythonType", 0);
   __Pyx_INCREF(__pyx_v_py_type);
 
-  /* "PETSc/TS.pyx":596
+  /* "PETSc/TS.pyx":750
  * 
  *     def setPythonType(self, py_type):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -183904,28 +197753,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_164setPythonType(struct PyPetscTS
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/TS.pyx":597
+  /* "PETSc/TS.pyx":751
  *     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_ERR(37, 597, __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, 751, __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":598
+  /* "PETSc/TS.pyx":752
  *         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_ERR(37, 598, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSPythonSetType(__pyx_v_self->ts, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(37, 752, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":595
+  /* "PETSc/TS.pyx":749
  *         else: return <object> context
  * 
  *     def setPythonType(self, py_type):             # <<<<<<<<<<<<<<
@@ -183947,7 +197796,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_164setPythonType(struct PyPetscTS
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":602
+/* "PETSc/TS.pyx":756
  *     # --- Theta ---
  * 
  *     def setTheta(self, theta):             # <<<<<<<<<<<<<<
@@ -183956,9 +197805,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_164setPythonType(struct PyPetscTS
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_201setTheta(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_200setTheta[] = "TS.setTheta(self, theta)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_201setTheta(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_theta = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -183971,6 +197820,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_167setTheta(PyObject *__pyx_v_sel
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -183981,7 +197831,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_167setTheta(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_ERR(37, 602, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTheta") < 0)) __PYX_ERR(37, 756, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -183992,20 +197842,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_167setTheta(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_ERR(37, 602, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setTheta", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 756, __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_166setTheta(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_theta);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_200setTheta(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_theta);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_166setTheta(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_theta) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_200setTheta(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_theta) {
   PetscReal __pyx_v_rval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -184013,26 +197863,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_166setTheta(struct PyPetscTSObjec
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setTheta", 0);
 
-  /* "PETSc/TS.pyx":603
+  /* "PETSc/TS.pyx":757
  * 
  *     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_ERR(37, 603, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_theta); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(37, 757, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":604
+  /* "PETSc/TS.pyx":758
  *     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_ERR(37, 604, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSThetaSetTheta(__pyx_v_self->ts, __pyx_v_rval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(37, 758, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":602
+  /* "PETSc/TS.pyx":756
  *     # --- Theta ---
  * 
  *     def setTheta(self, theta):             # <<<<<<<<<<<<<<
@@ -184052,7 +197902,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_166setTheta(struct PyPetscTSObjec
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":606
+/* "PETSc/TS.pyx":760
  *         CHKERR( TSThetaSetTheta(self.ts, rval) )
  * 
  *     def getTheta(self):             # <<<<<<<<<<<<<<
@@ -184061,23 +197911,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_166setTheta(struct PyPetscTSObjec
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_203getTheta(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_202getTheta[] = "TS.getTheta(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_203getTheta(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_168getTheta(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_202getTheta(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_168getTheta(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_202getTheta(struct PyPetscTSObject *__pyx_v_self) {
   PetscReal __pyx_v_rval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -184085,7 +197935,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_168getTheta(struct PyPetscTSObjec
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getTheta", 0);
 
-  /* "PETSc/TS.pyx":607
+  /* "PETSc/TS.pyx":761
  * 
  *     def getTheta(self):
  *         cdef PetscReal rval = 0             # <<<<<<<<<<<<<<
@@ -184094,16 +197944,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_168getTheta(struct PyPetscTSObjec
  */
   __pyx_v_rval = 0.0;
 
-  /* "PETSc/TS.pyx":608
+  /* "PETSc/TS.pyx":762
  *     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_ERR(37, 608, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSThetaGetTheta(__pyx_v_self->ts, (&__pyx_v_rval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(37, 762, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":609
+  /* "PETSc/TS.pyx":763
  *         cdef PetscReal rval = 0
  *         CHKERR( TSThetaGetTheta(self.ts, &rval) )
  *         return toReal(rval)             # <<<<<<<<<<<<<<
@@ -184111,13 +197961,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_168getTheta(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_ERR(37, 609, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 763, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":606
+  /* "PETSc/TS.pyx":760
  *         CHKERR( TSThetaSetTheta(self.ts, rval) )
  * 
  *     def getTheta(self):             # <<<<<<<<<<<<<<
@@ -184136,7 +197986,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_168getTheta(struct PyPetscTSObjec
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":611
+/* "PETSc/TS.pyx":765
  *         return toReal(rval)
  * 
  *     def setThetaEndpoint(self, flag=True):             # <<<<<<<<<<<<<<
@@ -184145,9 +197995,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_168getTheta(struct PyPetscTSObjec
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_205setThetaEndpoint(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_204setThetaEndpoint[] = "TS.setThetaEndpoint(self, flag=True)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_205setThetaEndpoint(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_flag = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -184161,6 +198011,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_171setThetaEndpoint(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -184173,11 +198024,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_171setThetaEndpoint(PyObject *__p
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setThetaEndpoint") < 0)) __PYX_ERR(37, 611, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setThetaEndpoint") < 0)) __PYX_ERR(37, 765, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -184186,20 +198038,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_171setThetaEndpoint(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setThetaEndpoint", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 611, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setThetaEndpoint", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 765, __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_170setThetaEndpoint(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_flag);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_204setThetaEndpoint(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_flag);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_170setThetaEndpoint(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_flag) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_204setThetaEndpoint(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_flag) {
   PetscBool __pyx_v_bval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -184207,26 +198059,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_170setThetaEndpoint(struct PyPets
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setThetaEndpoint", 0);
 
-  /* "PETSc/TS.pyx":612
+  /* "PETSc/TS.pyx":766
  * 
  *     def setThetaEndpoint(self, flag=True):
  *         cdef PetscBool bval = flag             # <<<<<<<<<<<<<<
  *         CHKERR( TSThetaSetEndpoint(self.ts, bval) )
  * 
  */
-  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) __PYX_ERR(37, 612, __pyx_L1_error)
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_flag)); if (unlikely(PyErr_Occurred())) __PYX_ERR(37, 766, __pyx_L1_error)
   __pyx_v_bval = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":613
+  /* "PETSc/TS.pyx":767
  *     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_ERR(37, 613, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSThetaSetEndpoint(__pyx_v_self->ts, __pyx_v_bval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(37, 767, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":611
+  /* "PETSc/TS.pyx":765
  *         return toReal(rval)
  * 
  *     def setThetaEndpoint(self, flag=True):             # <<<<<<<<<<<<<<
@@ -184246,77 +198098,77 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_170setThetaEndpoint(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":615
+/* "PETSc/TS.pyx":769
  *         CHKERR( TSThetaSetEndpoint(self.ts, bval) )
  * 
  *     def getThetaEndpoint(self):             # <<<<<<<<<<<<<<
- *         cdef PetscBool bval = PETSC_FALSE
- *         CHKERR( TSThetaGetEndpoint(self.ts, &bval) )
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( TSThetaGetEndpoint(self.ts, &flag) )
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_207getThetaEndpoint(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_206getThetaEndpoint[] = "TS.getThetaEndpoint(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_207getThetaEndpoint(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_172getThetaEndpoint(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_206getThetaEndpoint(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_172getThetaEndpoint(struct PyPetscTSObject *__pyx_v_self) {
-  PetscBool __pyx_v_bval;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_206getThetaEndpoint(struct PyPetscTSObject *__pyx_v_self) {
+  PetscBool __pyx_v_flag;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getThetaEndpoint", 0);
 
-  /* "PETSc/TS.pyx":616
+  /* "PETSc/TS.pyx":770
  * 
  *     def getThetaEndpoint(self):
- *         cdef PetscBool bval = PETSC_FALSE             # <<<<<<<<<<<<<<
- *         CHKERR( TSThetaGetEndpoint(self.ts, &bval) )
- *         return <bint> bval
+ *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( TSThetaGetEndpoint(self.ts, &flag) )
+ *         return toBool(flag)
  */
-  __pyx_v_bval = PETSC_FALSE;
+  __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/TS.pyx":617
+  /* "PETSc/TS.pyx":771
  *     def getThetaEndpoint(self):
- *         cdef PetscBool bval = PETSC_FALSE
- *         CHKERR( TSThetaGetEndpoint(self.ts, &bval) )             # <<<<<<<<<<<<<<
- *         return <bint> bval
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( TSThetaGetEndpoint(self.ts, &flag) )             # <<<<<<<<<<<<<<
+ *         return toBool(flag)
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSThetaGetEndpoint(__pyx_v_self->ts, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(37, 771, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":618
- *         cdef PetscBool bval = PETSC_FALSE
- *         CHKERR( TSThetaGetEndpoint(self.ts, &bval) )
- *         return <bint> bval             # <<<<<<<<<<<<<<
+  /* "PETSc/TS.pyx":772
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( TSThetaGetEndpoint(self.ts, &flag) )
+ *         return toBool(flag)             # <<<<<<<<<<<<<<
  * 
  *     # --- Alpha ---
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_bval); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 618, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 772, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":615
+  /* "PETSc/TS.pyx":769
  *         CHKERR( TSThetaSetEndpoint(self.ts, bval) )
  * 
  *     def getThetaEndpoint(self):             # <<<<<<<<<<<<<<
- *         cdef PetscBool bval = PETSC_FALSE
- *         CHKERR( TSThetaGetEndpoint(self.ts, &bval) )
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( TSThetaGetEndpoint(self.ts, &flag) )
  */
 
   /* function exit code */
@@ -184330,7 +198182,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_172getThetaEndpoint(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":622
+/* "PETSc/TS.pyx":776
  *     # --- Alpha ---
  * 
  *     def setAlphaRadius(self, radius):             # <<<<<<<<<<<<<<
@@ -184339,9 +198191,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_172getThetaEndpoint(struct PyPets
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_209setAlphaRadius(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_208setAlphaRadius[] = "TS.setAlphaRadius(self, radius)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_209setAlphaRadius(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_radius = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -184354,6 +198206,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_175setAlphaRadius(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -184364,7 +198217,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_175setAlphaRadius(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_ERR(37, 622, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setAlphaRadius") < 0)) __PYX_ERR(37, 776, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -184375,20 +198228,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_175setAlphaRadius(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setAlphaRadius", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 622, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setAlphaRadius", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 776, __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_174setAlphaRadius(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_radius);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_208setAlphaRadius(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_radius);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_174setAlphaRadius(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_radius) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_208setAlphaRadius(struct PyPetscTSObject *__pyx_v_self, PyObject *__pyx_v_radius) {
   PetscReal __pyx_v_rval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -184396,26 +198249,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_174setAlphaRadius(struct PyPetscT
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setAlphaRadius", 0);
 
-  /* "PETSc/TS.pyx":623
+  /* "PETSc/TS.pyx":777
  * 
  *     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_ERR(37, 623, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_radius); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(37, 777, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_1;
 
-  /* "PETSc/TS.pyx":624
+  /* "PETSc/TS.pyx":778
  *     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_ERR(37, 624, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TSAlphaSetRadius(__pyx_v_self->ts, __pyx_v_rval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(37, 778, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":622
+  /* "PETSc/TS.pyx":776
  *     # --- Alpha ---
  * 
  *     def setAlphaRadius(self, radius):             # <<<<<<<<<<<<<<
@@ -184435,7 +198288,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_174setAlphaRadius(struct PyPetscT
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":626
+/* "PETSc/TS.pyx":780
  *         CHKERR( TSAlphaSetRadius(self.ts, rval) )
  * 
  *     def setAlphaParams(self, alpha_m=None,alpha_f=None, gamma=None):             # <<<<<<<<<<<<<<
@@ -184444,9 +198297,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_174setAlphaRadius(struct PyPetscT
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_211setAlphaParams(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_210setAlphaParams[] = "TS.setAlphaParams(self, alpha_m=None, alpha_f=None, gamma=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_211setAlphaParams(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;
@@ -184464,8 +198317,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_177setAlphaParams(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -184476,11 +198332,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_177setAlphaParams(PyObject *__pyx
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_alpha_m);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_alpha_f);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_gamma);
@@ -184488,13 +198346,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_177setAlphaParams(PyObject *__pyx
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setAlphaParams") < 0)) __PYX_ERR(37, 626, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setAlphaParams") < 0)) __PYX_ERR(37, 780, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -184505,20 +198366,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_177setAlphaParams(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setAlphaParams", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 626, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setAlphaParams", 0, 0, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(37, 780, __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_176setAlphaParams(((struct PyPetscTSObject *)__pyx_v_self), __pyx_v_alpha_m, __pyx_v_alpha_f, __pyx_v_gamma);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_210setAlphaParams(((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_176setAlphaParams(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_210setAlphaParams(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;
@@ -184533,7 +198394,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_176setAlphaParams(struct PyPetscT
   PetscReal __pyx_t_7;
   __Pyx_RefNannySetupContext("setAlphaParams", 0);
 
-  /* "PETSc/TS.pyx":627
+  /* "PETSc/TS.pyx":781
  * 
  *     def setAlphaParams(self, alpha_m=None,alpha_f=None, gamma=None):
  *         cdef PetscReal rval1 = 0, rval2 = 0, rval3 = 0             # <<<<<<<<<<<<<<
@@ -184544,7 +198405,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_176setAlphaParams(struct PyPetscT
   __pyx_v_rval2 = 0.0;
   __pyx_v_rval3 = 0.0;
 
-  /* "PETSc/TS.pyx":628
+  /* "PETSc/TS.pyx":782
  *     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) )             # <<<<<<<<<<<<<<
@@ -184559,16 +198420,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_176setAlphaParams(struct PyPetscT
     __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_ERR(37, 628, __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 == ((int)-1))) __PYX_ERR(37, 782, __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;
+    goto __pyx_L8_try_end;
     __pyx_L3_error:;
-    __Pyx_PyThreadState_assign
 
-    /* "PETSc/TS.pyx":629
+    /* "PETSc/TS.pyx":783
  *         cdef PetscReal rval1 = 0, rval2 = 0, rval3 = 0
  *         try: CHKERR( TSAlphaGetParams(self.ts, &rval1, &rval2, &rval3) )
  *         except PetscError: pass             # <<<<<<<<<<<<<<
@@ -184583,29 +198443,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_176setAlphaParams(struct PyPetscT
     goto __pyx_L5_except_error;
     __pyx_L5_except_error:;
 
-    /* "PETSc/TS.pyx":628
+    /* "PETSc/TS.pyx":782
  *     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);
     __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
-    __pyx_L10_try_end:;
+    __pyx_L8_try_end:;
   }
 
-  /* "PETSc/TS.pyx":630
+  /* "PETSc/TS.pyx":784
  *         try: CHKERR( TSAlphaGetParams(self.ts, &rval1, &rval2, &rval3) )
  *         except PetscError: pass
  *         if alpha_m is not None: rval1 = asReal(alpha_m)             # <<<<<<<<<<<<<<
@@ -184615,11 +198473,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_176setAlphaParams(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_ERR(37, 630, __pyx_L1_error)
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_alpha_m); if (unlikely(__pyx_t_7 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(37, 784, __pyx_L1_error)
     __pyx_v_rval1 = __pyx_t_7;
   }
 
-  /* "PETSc/TS.pyx":631
+  /* "PETSc/TS.pyx":785
  *         except PetscError: pass
  *         if alpha_m is not None: rval1 = asReal(alpha_m)
  *         if alpha_f is not None: rval2 = asReal(alpha_f)             # <<<<<<<<<<<<<<
@@ -184629,11 +198487,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_176setAlphaParams(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_ERR(37, 631, __pyx_L1_error)
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_alpha_f); if (unlikely(__pyx_t_7 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(37, 785, __pyx_L1_error)
     __pyx_v_rval2 = __pyx_t_7;
   }
 
-  /* "PETSc/TS.pyx":632
+  /* "PETSc/TS.pyx":786
  *         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)             # <<<<<<<<<<<<<<
@@ -184643,20 +198501,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_176setAlphaParams(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_ERR(37, 632, __pyx_L1_error)
+    __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_gamma); if (unlikely(__pyx_t_7 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(37, 786, __pyx_L1_error)
     __pyx_v_rval3 = __pyx_t_7;
   }
 
-  /* "PETSc/TS.pyx":633
+  /* "PETSc/TS.pyx":787
  *         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_ERR(37, 633, __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 == ((int)-1))) __PYX_ERR(37, 787, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":626
+  /* "PETSc/TS.pyx":780
  *         CHKERR( TSAlphaSetRadius(self.ts, rval) )
  * 
  *     def setAlphaParams(self, alpha_m=None,alpha_f=None, gamma=None):             # <<<<<<<<<<<<<<
@@ -184676,7 +198534,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_176setAlphaParams(struct PyPetscT
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":635
+/* "PETSc/TS.pyx":789
  *         CHKERR( TSAlphaSetParams(self.ts,  rval1,  rval2,  rval3) )
  * 
  *     def getAlphaParams(self):             # <<<<<<<<<<<<<<
@@ -184685,23 +198543,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_176setAlphaParams(struct PyPetscT
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_213getAlphaParams(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2TS_212getAlphaParams[] = "TS.getAlphaParams(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2TS_213getAlphaParams(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_178getAlphaParams(((struct PyPetscTSObject *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2TS_212getAlphaParams(((struct PyPetscTSObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_178getAlphaParams(struct PyPetscTSObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_212getAlphaParams(struct PyPetscTSObject *__pyx_v_self) {
   PetscReal __pyx_v_rval1;
   PetscReal __pyx_v_rval2;
   PetscReal __pyx_v_rval3;
@@ -184714,7 +198572,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_178getAlphaParams(struct PyPetscT
   PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("getAlphaParams", 0);
 
-  /* "PETSc/TS.pyx":636
+  /* "PETSc/TS.pyx":790
  * 
  *     def getAlphaParams(self):
  *         cdef PetscReal rval1 = 0, rval2 = 0, rval3 = 0             # <<<<<<<<<<<<<<
@@ -184725,16 +198583,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_178getAlphaParams(struct PyPetscT
   __pyx_v_rval2 = 0.0;
   __pyx_v_rval3 = 0.0;
 
-  /* "PETSc/TS.pyx":637
+  /* "PETSc/TS.pyx":791
  *     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_ERR(37, 637, __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 == ((int)-1))) __PYX_ERR(37, 791, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":638
+  /* "PETSc/TS.pyx":792
  *         cdef PetscReal rval1 = 0, rval2 = 0, rval3 = 0
  *         CHKERR( TSAlphaGetParams(self.ts, &rval1, &rval2, &rval3) )
  *         return (toReal(rval1), toReal(rval2), toReal(rval3))             # <<<<<<<<<<<<<<
@@ -184742,13 +198600,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_178getAlphaParams(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_ERR(37, 638, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval1); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 792, __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_ERR(37, 638, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval2); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 792, __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_ERR(37, 638, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval3); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 792, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(37, 638, __pyx_L1_error)
+  __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(37, 792, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_2);
@@ -184763,7 +198621,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_178getAlphaParams(struct PyPetscT
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":635
+  /* "PETSc/TS.pyx":789
  *         CHKERR( TSAlphaSetParams(self.ts,  rval1,  rval2,  rval3) )
  * 
  *     def getAlphaParams(self):             # <<<<<<<<<<<<<<
@@ -184785,7 +198643,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_178getAlphaParams(struct PyPetscT
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":643
+/* "PETSc/TS.pyx":797
  * 
  *     property appctx:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -184814,7 +198672,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_6appctx___get__(struct PyPetscTSO
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/TS.pyx":644
+  /* "PETSc/TS.pyx":798
  *     property appctx:
  *         def __get__(self):
  *             return self.getAppCtx()             # <<<<<<<<<<<<<<
@@ -184822,10 +198680,10 @@ 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_ERR(37, 644, __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, 798, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -184835,10 +198693,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_ERR(37, 644, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 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_ERR(37, 644, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 798, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -184846,7 +198704,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_6appctx___get__(struct PyPetscTSO
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":643
+  /* "PETSc/TS.pyx":797
  * 
  *     property appctx:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -184867,7 +198725,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_6appctx___get__(struct PyPetscTSO
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":645
+/* "PETSc/TS.pyx":799
  *         def __get__(self):
  *             return self.getAppCtx()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -184897,17 +198755,17 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_6appctx_2__set__(struct PyPetscTSObject
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/TS.pyx":646
+  /* "PETSc/TS.pyx":800
  *             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_ERR(37, 646, __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, 800, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -184917,23 +198775,41 @@ 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_ERR(37, 646, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 800, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(37, 646, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 800, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 800, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 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_ERR(37, 800, __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":645
+  /* "PETSc/TS.pyx":799
  *         def __get__(self):
  *             return self.getAppCtx()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -184956,7 +198832,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_6appctx_2__set__(struct PyPetscTSObject
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":651
+/* "PETSc/TS.pyx":805
  * 
  *     property dm:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -184985,7 +198861,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_2dm___get__(struct PyPetscTSObjec
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/TS.pyx":652
+  /* "PETSc/TS.pyx":806
  *     property dm:
  *         def __get__(self):
  *             return self.getDM()             # <<<<<<<<<<<<<<
@@ -184993,10 +198869,10 @@ 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_ERR(37, 652, __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, 806, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -185006,10 +198882,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_ERR(37, 652, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 806, __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(37, 652, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 806, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -185017,7 +198893,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_2dm___get__(struct PyPetscTSObjec
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":651
+  /* "PETSc/TS.pyx":805
  * 
  *     property dm:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -185038,7 +198914,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_2dm___get__(struct PyPetscTSObjec
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":653
+/* "PETSc/TS.pyx":807
  *         def __get__(self):
  *             return self.getDM()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -185068,17 +198944,17 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_2dm_2__set__(struct PyPetscTSObject *__
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/TS.pyx":654
+  /* "PETSc/TS.pyx":808
  *             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_ERR(37, 654, __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, 808, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -185088,23 +198964,41 @@ 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_ERR(37, 654, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 808, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(37, 654, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 808, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 808, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 808, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 808, __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":653
+  /* "PETSc/TS.pyx":807
  *         def __get__(self):
  *             return self.getDM()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -185127,7 +199021,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_2dm_2__set__(struct PyPetscTSObject *__
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":659
+/* "PETSc/TS.pyx":813
  * 
  *     property problem_type:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -185156,7 +199050,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_12problem_type___get__(struct PyP
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/TS.pyx":660
+  /* "PETSc/TS.pyx":814
  *     property problem_type:
  *         def __get__(self):
  *             return self.getProblemType()             # <<<<<<<<<<<<<<
@@ -185164,10 +199058,10 @@ 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_ERR(37, 660, __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, 814, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -185177,10 +199071,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_ERR(37, 660, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 814, __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(37, 660, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 814, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -185188,7 +199082,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_12problem_type___get__(struct PyP
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":659
+  /* "PETSc/TS.pyx":813
  * 
  *     property problem_type:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -185209,7 +199103,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_12problem_type___get__(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":661
+/* "PETSc/TS.pyx":815
  *         def __get__(self):
  *             return self.getProblemType()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -185239,17 +199133,17 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_12problem_type_2__set__(struct PyPetscT
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/TS.pyx":662
+  /* "PETSc/TS.pyx":816
  *             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_ERR(37, 662, __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, 816, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -185259,23 +199153,41 @@ 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_ERR(37, 662, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 816, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(37, 662, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 816, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 816, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 816, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 816, __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":815
  *         def __get__(self):
  *             return self.getProblemType()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -185298,7 +199210,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_12problem_type_2__set__(struct PyPetscT
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":665
+/* "PETSc/TS.pyx":819
  * 
  *     property equation_type:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -185327,7 +199239,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_13equation_type___get__(struct Py
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/TS.pyx":666
+  /* "PETSc/TS.pyx":820
  *     property equation_type:
  *         def __get__(self):
  *             return self.getEquationType()             # <<<<<<<<<<<<<<
@@ -185335,10 +199247,10 @@ 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_ERR(37, 666, __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, 820, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -185348,10 +199260,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_ERR(37, 666, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 820, __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(37, 666, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 820, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -185359,7 +199271,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_13equation_type___get__(struct Py
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":665
+  /* "PETSc/TS.pyx":819
  * 
  *     property equation_type:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -185380,7 +199292,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_13equation_type___get__(struct Py
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":667
+/* "PETSc/TS.pyx":821
  *         def __get__(self):
  *             return self.getEquationType()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -185410,17 +199322,17 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_13equation_type_2__set__(struct PyPetsc
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/TS.pyx":668
+  /* "PETSc/TS.pyx":822
  *             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_ERR(37, 668, __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, 822, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -185430,23 +199342,41 @@ 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_ERR(37, 668, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 822, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(37, 668, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 822, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 822, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 822, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 822, __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":821
  *         def __get__(self):
  *             return self.getEquationType()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -185469,7 +199399,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_13equation_type_2__set__(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":671
+/* "PETSc/TS.pyx":825
  * 
  *     property snes:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -185498,7 +199428,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4snes___get__(struct PyPetscTSObj
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/TS.pyx":672
+  /* "PETSc/TS.pyx":826
  *     property snes:
  *         def __get__(self):
  *             return self.getSNES()             # <<<<<<<<<<<<<<
@@ -185506,10 +199436,10 @@ 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_ERR(37, 672, __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, 826, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -185519,10 +199449,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_ERR(37, 672, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 826, __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(37, 672, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 826, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -185530,7 +199460,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4snes___get__(struct PyPetscTSObj
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":671
+  /* "PETSc/TS.pyx":825
  * 
  *     property snes:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -185551,7 +199481,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4snes___get__(struct PyPetscTSObj
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":675
+/* "PETSc/TS.pyx":829
  * 
  *     property ksp:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -185580,7 +199510,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_3ksp___get__(struct PyPetscTSObje
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/TS.pyx":676
+  /* "PETSc/TS.pyx":830
  *     property ksp:
  *         def __get__(self):
  *             return self.getKSP()             # <<<<<<<<<<<<<<
@@ -185588,10 +199518,10 @@ 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_ERR(37, 676, __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, 830, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -185601,10 +199531,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_ERR(37, 676, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 830, __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(37, 676, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 830, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -185612,7 +199542,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_3ksp___get__(struct PyPetscTSObje
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":675
+  /* "PETSc/TS.pyx":829
  * 
  *     property ksp:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -185633,7 +199563,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_3ksp___get__(struct PyPetscTSObje
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":679
+/* "PETSc/TS.pyx":833
  * 
  *     property vec_sol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -185662,7 +199592,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_7vec_sol___get__(struct PyPetscTS
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/TS.pyx":680
+  /* "PETSc/TS.pyx":834
  *     property vec_sol:
  *         def __get__(self):
  *             return self.getSolution()             # <<<<<<<<<<<<<<
@@ -185670,10 +199600,10 @@ 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_ERR(37, 680, __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, 834, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -185683,10 +199613,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_ERR(37, 680, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 834, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 680, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 834, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -185694,7 +199624,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_7vec_sol___get__(struct PyPetscTS
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":679
+  /* "PETSc/TS.pyx":833
  * 
  *     property vec_sol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -185715,7 +199645,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_7vec_sol___get__(struct PyPetscTS
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":685
+/* "PETSc/TS.pyx":839
  * 
  *     property time:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -185744,7 +199674,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4time___get__(struct PyPetscTSObj
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/TS.pyx":686
+  /* "PETSc/TS.pyx":840
  *     property time:
  *         def __get__(self):
  *             return self.getTime()             # <<<<<<<<<<<<<<
@@ -185752,10 +199682,10 @@ 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_ERR(37, 686, __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, 840, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -185765,10 +199695,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_ERR(37, 686, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 840, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   } else {
-    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 686, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 840, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -185776,7 +199706,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4time___get__(struct PyPetscTSObj
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":685
+  /* "PETSc/TS.pyx":839
  * 
  *     property time:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -185797,7 +199727,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4time___get__(struct PyPetscTSObj
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":687
+/* "PETSc/TS.pyx":841
  *         def __get__(self):
  *             return self.getTime()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -185827,17 +199757,17 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_4time_2__set__(struct PyPetscTSObject *
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/TS.pyx":688
+  /* "PETSc/TS.pyx":842
  *             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_ERR(37, 688, __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, 842, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -185847,23 +199777,41 @@ 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_ERR(37, 688, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 842, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(37, 688, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 842, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 842, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 842, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 842, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_1);
+      __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    }
   }
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":687
+  /* "PETSc/TS.pyx":841
  *         def __get__(self):
  *             return self.getTime()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -185886,7 +199834,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_4time_2__set__(struct PyPetscTSObject *
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":691
+/* "PETSc/TS.pyx":845
  * 
  *     property time_step:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -185915,7 +199863,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9time_step___get__(struct PyPetsc
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/TS.pyx":692
+  /* "PETSc/TS.pyx":846
  *     property time_step:
  *         def __get__(self):
  *             return self.getTimeStep()             # <<<<<<<<<<<<<<
@@ -185923,10 +199871,10 @@ 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_ERR(37, 692, __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, 846, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -185936,10 +199884,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_ERR(37, 692, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 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_ERR(37, 692, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 846, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -185947,7 +199895,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9time_step___get__(struct PyPetsc
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":691
+  /* "PETSc/TS.pyx":845
  * 
  *     property time_step:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -185968,7 +199916,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9time_step___get__(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":693
+/* "PETSc/TS.pyx":847
  *         def __get__(self):
  *             return self.getTimeStep()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -185998,17 +199946,17 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_9time_step_2__set__(struct PyPetscTSObj
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/TS.pyx":694
+  /* "PETSc/TS.pyx":848
  *             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_ERR(37, 694, __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, 848, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -186018,23 +199966,41 @@ 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_ERR(37, 694, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 848, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(37, 694, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 848, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 848, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 848, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 848, __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":693
+  /* "PETSc/TS.pyx":847
  *         def __get__(self):
  *             return self.getTimeStep()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -186057,7 +200023,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_9time_step_2__set__(struct PyPetscTSObj
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":697
+/* "PETSc/TS.pyx":851
  * 
  *     property step_number:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -186086,7 +200052,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_11step_number___get__(struct PyPe
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/TS.pyx":698
+  /* "PETSc/TS.pyx":852
  *     property step_number:
  *         def __get__(self):
  *             return self.getStepNumber()             # <<<<<<<<<<<<<<
@@ -186094,10 +200060,10 @@ 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_ERR(37, 698, __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, 852, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -186107,10 +200073,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_ERR(37, 698, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 852, __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(37, 698, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 852, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -186118,7 +200084,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_11step_number___get__(struct PyPe
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":697
+  /* "PETSc/TS.pyx":851
  * 
  *     property step_number:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -186139,7 +200105,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_11step_number___get__(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":699
+/* "PETSc/TS.pyx":853
  *         def __get__(self):
  *             return self.getStepNumber()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -186169,17 +200135,17 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_11step_number_2__set__(struct PyPetscTS
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/TS.pyx":700
+  /* "PETSc/TS.pyx":854
  *             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_ERR(37, 700, __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, 854, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -186189,23 +200155,41 @@ 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_ERR(37, 700, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 854, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(37, 700, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 854, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 854, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 854, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 854, __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":699
+  /* "PETSc/TS.pyx":853
  *         def __get__(self):
  *             return self.getStepNumber()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -186228,7 +200212,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_11step_number_2__set__(struct PyPetscTS
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":703
+/* "PETSc/TS.pyx":857
  * 
  *     property max_time:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -186257,7 +200241,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_8max_time___get__(struct PyPetscT
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/TS.pyx":704
+  /* "PETSc/TS.pyx":858
  *     property max_time:
  *         def __get__(self):
  *             return self.getMaxTime()             # <<<<<<<<<<<<<<
@@ -186265,10 +200249,10 @@ 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_ERR(37, 704, __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, 858, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -186278,10 +200262,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_ERR(37, 704, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 858, __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(37, 704, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 858, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -186289,7 +200273,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_8max_time___get__(struct PyPetscT
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":703
+  /* "PETSc/TS.pyx":857
  * 
  *     property max_time:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -186310,7 +200294,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_8max_time___get__(struct PyPetscT
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":705
+/* "PETSc/TS.pyx":859
  *         def __get__(self):
  *             return self.getMaxTime()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -186340,17 +200324,17 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_8max_time_2__set__(struct PyPetscTSObje
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/TS.pyx":706
+  /* "PETSc/TS.pyx":860
  *             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_ERR(37, 706, __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, 860, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -186360,23 +200344,41 @@ 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_ERR(37, 706, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 860, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(37, 706, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 860, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 860, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 860, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 860, __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":859
  *         def __get__(self):
  *             return self.getMaxTime()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -186399,7 +200401,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_8max_time_2__set__(struct PyPetscTSObje
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":709
+/* "PETSc/TS.pyx":863
  * 
  *     property max_steps:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -186428,7 +200430,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9max_steps___get__(struct PyPetsc
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/TS.pyx":710
+  /* "PETSc/TS.pyx":864
  *     property max_steps:
  *         def __get__(self):
  *             return self.getMaxSteps()             # <<<<<<<<<<<<<<
@@ -186436,10 +200438,10 @@ 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_ERR(37, 710, __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, 864, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -186449,10 +200451,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_ERR(37, 710, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 864, __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(37, 710, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 864, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -186460,7 +200462,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9max_steps___get__(struct PyPetsc
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":709
+  /* "PETSc/TS.pyx":863
  * 
  *     property max_steps:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -186481,7 +200483,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9max_steps___get__(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":711
+/* "PETSc/TS.pyx":865
  *         def __get__(self):
  *             return self.getMaxSteps()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -186511,17 +200513,17 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_9max_steps_2__set__(struct PyPetscTSObj
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/TS.pyx":712
+  /* "PETSc/TS.pyx":866
  *             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_ERR(37, 712, __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, 866, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -186531,23 +200533,41 @@ 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_ERR(37, 712, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 866, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(37, 712, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 866, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 866, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 866, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 866, __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":711
+  /* "PETSc/TS.pyx":865
  *         def __get__(self):
  *             return self.getMaxSteps()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -186570,7 +200590,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_9max_steps_2__set__(struct PyPetscTSObj
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":717
+/* "PETSc/TS.pyx":871
  * 
  *     property rtol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -186599,7 +200619,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4rtol___get__(struct PyPetscTSObj
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/TS.pyx":718
+  /* "PETSc/TS.pyx":872
  *     property rtol:
  *         def __get__(self):
  *             return self.getTolerances()[0]             # <<<<<<<<<<<<<<
@@ -186607,10 +200627,10 @@ 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_ERR(37, 718, __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, 872, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -186620,21 +200640,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_ERR(37, 718, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 872, __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(37, 718, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 872, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
-  __pyx_t_2 = __Pyx_GetItemInt(__pyx_t_1, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 718, __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, 872, __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":717
+  /* "PETSc/TS.pyx":871
  * 
  *     property rtol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -186655,7 +200675,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4rtol___get__(struct PyPetscTSObj
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":719
+/* "PETSc/TS.pyx":873
  *         def __get__(self):
  *             return self.getTolerances()[0]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -186684,25 +200704,25 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_4rtol_2__set__(struct PyPetscTSObject *
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/TS.pyx":720
+  /* "PETSc/TS.pyx":874
  *             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_ERR(37, 720, __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, 874, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 720, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 874, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  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)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_rtol, __pyx_v_value) < 0) __PYX_ERR(37, 874, __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, 874, __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":719
+  /* "PETSc/TS.pyx":873
  *         def __get__(self):
  *             return self.getTolerances()[0]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -186724,7 +200744,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_4rtol_2__set__(struct PyPetscTSObject *
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":723
+/* "PETSc/TS.pyx":877
  * 
  *     property atol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -186753,7 +200773,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4atol___get__(struct PyPetscTSObj
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/TS.pyx":724
+  /* "PETSc/TS.pyx":878
  *     property atol:
  *         def __get__(self):
  *             return self.getTolerances()[1]             # <<<<<<<<<<<<<<
@@ -186761,10 +200781,10 @@ 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_ERR(37, 724, __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, 878, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -186774,21 +200794,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_ERR(37, 724, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 878, __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(37, 724, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 878, __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(37, 724, __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, 878, __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":723
+  /* "PETSc/TS.pyx":877
  * 
  *     property atol:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -186809,7 +200829,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_4atol___get__(struct PyPetscTSObj
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":725
+/* "PETSc/TS.pyx":879
  *         def __get__(self):
  *             return self.getTolerances()[1]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -186838,25 +200858,25 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_4atol_2__set__(struct PyPetscTSObject *
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/TS.pyx":726
+  /* "PETSc/TS.pyx":880
  *             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_ERR(37, 726, __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, 880, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyDict_New(); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 726, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(37, 880, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
-  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)
+  if (PyDict_SetItem(__pyx_t_2, __pyx_n_s_atol, __pyx_v_value) < 0) __PYX_ERR(37, 880, __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, 880, __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":725
+  /* "PETSc/TS.pyx":879
  *         def __get__(self):
  *             return self.getTolerances()[1]
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -186878,7 +200898,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_4atol_2__set__(struct PyPetscTSObject *
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":729
+/* "PETSc/TS.pyx":883
  * 
  *     property reason:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -186907,7 +200927,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_6reason___get__(struct PyPetscTSO
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/TS.pyx":730
+  /* "PETSc/TS.pyx":884
  *     property reason:
  *         def __get__(self):
  *             return self.getConvergedReason()             # <<<<<<<<<<<<<<
@@ -186915,10 +200935,10 @@ 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_ERR(37, 730, __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, 884, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -186928,10 +200948,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_ERR(37, 730, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 884, __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(37, 730, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 884, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -186939,7 +200959,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_6reason___get__(struct PyPetscTSO
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/TS.pyx":729
+  /* "PETSc/TS.pyx":883
  * 
  *     property reason:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -186960,7 +200980,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_6reason___get__(struct PyPetscTSO
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":731
+/* "PETSc/TS.pyx":885
  *         def __get__(self):
  *             return self.getConvergedReason()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -186990,17 +201010,17 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_6reason_2__set__(struct PyPetscTSObject
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("__set__", 0);
 
-  /* "PETSc/TS.pyx":732
+  /* "PETSc/TS.pyx":886
  *             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_ERR(37, 732, __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, 886, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -187010,23 +201030,41 @@ 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_ERR(37, 732, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 886, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(37, 732, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 886, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 886, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(37, 886, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_GIVEREF(__pyx_t_3); PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3); __pyx_t_3 = NULL;
+      __Pyx_INCREF(__pyx_v_value);
+      __Pyx_GIVEREF(__pyx_v_value);
+      PyTuple_SET_ITEM(__pyx_t_4, 0+1, __pyx_v_value);
+      __pyx_t_1 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_t_4, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 886, __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":731
+  /* "PETSc/TS.pyx":885
  *         def __get__(self):
  *             return self.getConvergedReason()
  *         def __set__(self, value):             # <<<<<<<<<<<<<<
@@ -187049,7 +201087,7 @@ static int __pyx_pf_8petsc4py_5PETSc_2TS_6reason_2__set__(struct PyPetscTSObject
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":735
+/* "PETSc/TS.pyx":889
  * 
  *     property iterating:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -187077,7 +201115,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9iterating___get__(struct PyPetsc
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/TS.pyx":736
+  /* "PETSc/TS.pyx":890
  *     property iterating:
  *         def __get__(self):
  *             return self.reason == 0             # <<<<<<<<<<<<<<
@@ -187085,16 +201123,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_ERR(37, 736, __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, 890, __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(37, 736, __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, 890, __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":735
+  /* "PETSc/TS.pyx":889
  * 
  *     property iterating:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -187114,7 +201152,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9iterating___get__(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":739
+/* "PETSc/TS.pyx":893
  * 
  *     property converged:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -187142,7 +201180,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9converged___get__(struct PyPetsc
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/TS.pyx":740
+  /* "PETSc/TS.pyx":894
  *     property converged:
  *         def __get__(self):
  *             return self.reason > 0             # <<<<<<<<<<<<<<
@@ -187150,15 +201188,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_ERR(37, 740, __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, 894, __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(37, 740, __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, 894, __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":739
+  /* "PETSc/TS.pyx":893
  * 
  *     property converged:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -187178,7 +201216,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_9converged___get__(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/TS.pyx":743
+/* "PETSc/TS.pyx":897
  * 
  *     property diverged:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -187206,7 +201244,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2TS_8diverged___get__(struct PyPetscT
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("__get__", 0);
 
-  /* "PETSc/TS.pyx":744
+  /* "PETSc/TS.pyx":898
  *     property diverged:
  *         def __get__(self):
  *             return self.reason < 0             # <<<<<<<<<<<<<<
@@ -187214,15 +201252,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_ERR(37, 744, __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, 898, __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(37, 744, __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, 898, __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":743
+  /* "PETSc/TS.pyx":897
  * 
  *     property diverged:
  *         def __get__(self):             # <<<<<<<<<<<<<<
@@ -187328,6 +201366,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_3view(PyObject *__pyx_v_self, Py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -187345,6 +201384,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_3view(PyObject *__pyx_v_self, Py
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -187411,7 +201451,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_2view(struct PyPetscTAOObject *_
  * 
  *     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_ERR(38, 71, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoView(__pyx_v_self->tao, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(38, 71, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":66
  *         self.tao = NULL
@@ -187471,7 +201511,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4destroy(struct PyPetscTAOObject
  *         return self
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoDestroy((&__pyx_v_self->tao))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(38, 76, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":77
  *         """
@@ -187528,6 +201568,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_7create(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -187545,6 +201586,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_7create(PyObject *__pyx_v_self,
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -187601,7 +201643,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_6create(struct PyPetscTAOObject
  *         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_ERR(38, 84, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoCreate(__pyx_v_ccomm, (&__pyx_v_newtao))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(38, 84, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":85
  *         cdef PetscTAO newtao = NULL
@@ -187667,6 +201709,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_9setType(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -187738,7 +201781,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_8setType(struct PyPetscTAOObject
  * 
  *     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_ERR(38, 93, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetType(__pyx_v_self->tao, __pyx_v_ctype)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(38, 93, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":88
  *         return self
@@ -187811,7 +201854,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_10getType(struct PyPetscTAOObjec
  *         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_ERR(38, 99, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetType(__pyx_v_self->tao, (&__pyx_v_ctype))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(38, 99, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":100
  *         cdef PetscTAOType ctype = NULL
@@ -187870,6 +201913,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_13setOptionsPrefix(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -187941,7 +201985,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_12setOptionsPrefix(struct PyPets
  * 
  *     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_ERR(38, 107, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetOptionsPrefix(__pyx_v_self->tao, __pyx_v_cprefix)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(38, 107, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":102
  *         return bytes2str(ctype)
@@ -188014,7 +202058,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_14getOptionsPrefix(struct PyPets
  *         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_ERR(38, 113, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetOptionsPrefix(__pyx_v_self->tao, (&__pyx_v_prefix))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(38, 113, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":114
  *         cdef const_char *prefix = NULL
@@ -188087,7 +202131,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_16setFromOptions(struct PyPetscT
  * 
  *     def setUp(self):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetFromOptions(__pyx_v_self->tao)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(38, 119, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":116
  *         return bytes2str(prefix)
@@ -188147,7 +202191,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_18setUp(struct PyPetscTAOObject
  * 
  *     #
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetUp(__pyx_v_self->tao)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(38, 124, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":121
  *         CHKERR( TaoSetFromOptions(self.tao) )
@@ -188193,6 +202237,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_21setInitialTrustRegionRadius(Py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -188242,7 +202287,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_20setInitialTrustRegionRadius(st
  *         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_ERR(38, 129, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_radius); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(38, 129, __pyx_L1_error)
   __pyx_v_cradius = __pyx_t_1;
 
   /* "PETSc/TAO.pyx":130
@@ -188252,7 +202297,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_20setInitialTrustRegionRadius(st
  * 
  *     # --------------
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetInitialTrustRegionRadius(__pyx_v_self->tao, __pyx_v_cradius)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(38, 130, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":128
  *     #
@@ -188298,6 +202343,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_23setAppCtx(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -188406,7 +202452,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_24getAppCtx(struct PyPetscTAOObj
  *     def getAppCtx(self):
  *         return self.get_attr("__appctx__")             # <<<<<<<<<<<<<<
  * 
- *     def setInitial(self, Vec x not None):
+ *     def setInitial(self, Vec x):
  */
   __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), ((char *)"__appctx__")); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 138, __pyx_L1_error)
@@ -188437,7 +202483,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_24getAppCtx(struct PyPetscTAOObj
 /* "PETSc/TAO.pyx":140
  *         return self.get_attr("__appctx__")
  * 
- *     def setInitial(self, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def setInitial(self, Vec x):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
@@ -188458,6 +202504,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_27setInitial(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -188510,12 +202557,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_26setInitial(struct PyPetscTAOOb
  * 
  *     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_ERR(38, 143, __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 == ((int)-1))) __PYX_ERR(38, 143, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":140
  *         return self.get_attr("__appctx__")
  * 
- *     def setInitial(self, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def setInitial(self, Vec x):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
@@ -188560,8 +202607,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_29setObjective(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -188570,11 +202620,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_29setObjective(PyObject *__pyx_v
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_objective)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -188587,7 +202639,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_29setObjective(PyObject *__pyx_v
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -188631,7 +202685,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_28setObjective(struct PyPetscTAO
  *         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_ERR(38, 148, __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 == ((int)-1))) __PYX_ERR(38, 148, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":149
  *         """
@@ -188657,7 +202711,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_28setObjective(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_ERR(38, 150, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyDict_NewPresized(0); 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;
@@ -188748,9 +202802,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_31setSeparableObjective(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -188759,16 +202817,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_31setSeparableObjective(PyObject
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_separable)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_O);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -188781,8 +202842,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_31setSeparableObjective(PyObject
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -188865,7 +202929,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_30setSeparableObjective(struct P
  *                                                 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_ERR(38, 159, __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 == ((int)-1))) __PYX_ERR(38, 159, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":161
  *         CHKERR( TaoSetSeparableObjectiveRoutine(self.tao, Ovec,
@@ -188874,7 +202938,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_30setSeparableObjective(struct P
  *         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]), ((char *)"@sepobjvec"), ((PetscObject)__pyx_v_Ovec))); if (unlikely(__pyx_t_4 == -1)) __PYX_ERR(38, 161, __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 == ((int)-1))) __PYX_ERR(38, 161, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":162
  *                                                 TAO_SeparableObjective, NULL) )
@@ -188900,7 +202964,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_30setSeparableObjective(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_ERR(38, 163, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyDict_NewPresized(0); 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;
@@ -188981,8 +203045,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_33setGradient(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -188991,11 +203058,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_33setGradient(PyObject *__pyx_v_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_gradient)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -189008,7 +203077,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_33setGradient(PyObject *__pyx_v_
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -189052,7 +203123,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_32setGradient(struct PyPetscTAOO
  *         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_ERR(38, 169, __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 == ((int)-1))) __PYX_ERR(38, 169, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":170
  *         """
@@ -189078,7 +203149,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_32setGradient(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_ERR(38, 171, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyDict_NewPresized(0); 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;
@@ -189159,8 +203230,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_35setObjectiveGradient(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -189169,11 +203243,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_35setObjectiveGradient(PyObject
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_objgrad)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -189186,7 +203262,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_35setObjectiveGradient(PyObject
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -189230,7 +203308,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_34setObjectiveGradient(struct Py
  *         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_ERR(38, 177, __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 == ((int)-1))) __PYX_ERR(38, 177, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":178
  *         """
@@ -189256,7 +203334,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_34setObjectiveGradient(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_ERR(38, 179, __pyx_L1_error)
+    __pyx_t_4 = __Pyx_PyDict_NewPresized(0); 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;
@@ -189337,8 +203415,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_37setVariableBounds(PyObject *__
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -189347,11 +203428,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_37setVariableBounds(PyObject *__
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_varbounds)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -189364,7 +203447,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_37setVariableBounds(PyObject *__
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -189449,7 +203534,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_36setVariableBounds(struct PyPet
  */
     if ((likely(PyTuple_CheckExact(__pyx_v_varbounds))) || (PyList_CheckExact(__pyx_v_varbounds))) {
       PyObject* sequence = __pyx_v_varbounds;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -189459,7 +203544,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_36setVariableBounds(struct PyPet
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
         __PYX_ERR(38, 187, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_4 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_5 = PyTuple_GET_ITEM(sequence, 1); 
@@ -189525,7 +203610,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_36setVariableBounds(struct PyPet
  *             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_ERR(38, 189, __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 == ((int)-1))) __PYX_ERR(38, 189, __pyx_L1_error)
 
     /* "PETSc/TAO.pyx":190
  *             xl = <Vec?> ol; xu = <Vec?> ou
@@ -189595,7 +203680,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_36setVariableBounds(struct PyPet
  *             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_ERR(38, 194, __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 == ((int)-1))) __PYX_ERR(38, 194, __pyx_L1_error)
 
     /* "PETSc/TAO.pyx":195
  *             xl = <Vec?> ol; xu = <Vec?> ou
@@ -189624,7 +203709,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_36setVariableBounds(struct PyPet
  *         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_ERR(38, 196, __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 == ((int)-1))) __PYX_ERR(38, 196, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":197
  *             return
@@ -189650,7 +203735,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_36setVariableBounds(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_ERR(38, 198, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyDict_NewPresized(0); 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;
@@ -189746,9 +203831,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_39setConstraints(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -189757,16 +203846,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_39setConstraints(PyObject *__pyx
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_constraints)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_C);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -189779,8 +203871,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_39setConstraints(PyObject *__pyx
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -189863,7 +203958,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_38setConstraints(struct PyPetscT
  *         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_ERR(38, 207, __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 == ((int)-1))) __PYX_ERR(38, 207, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":208
  *         if C is not None: Cvec = C.vec
@@ -189889,7 +203984,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_38setConstraints(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_ERR(38, 209, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyDict_NewPresized(0); 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;
@@ -189982,10 +204077,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_41setHessian(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -189994,21 +204094,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_41setHessian(PyObject *__pyx_v_s
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_hessian)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_H);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_P);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[3] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  4:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -190021,9 +204125,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_41setHessian(PyObject *__pyx_v_s
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -190132,7 +204240,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_40setHessian(struct PyPetscTAOOb
  *         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_ERR(38, 218, __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 == ((int)-1))) __PYX_ERR(38, 218, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":219
  *         if P is not None: Pmat = P.mat
@@ -190158,7 +204266,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_40setHessian(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_ERR(38, 220, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyDict_NewPresized(0); 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;
@@ -190251,10 +204359,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_43setJacobian(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -190263,21 +204376,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_43setJacobian(PyObject *__pyx_v_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_jacobian)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_J);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_P);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[3] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  4:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -190290,9 +204407,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_43setJacobian(PyObject *__pyx_v_
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -190401,7 +204522,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_42setJacobian(struct PyPetscTAOO
  *         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_ERR(38, 231, __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 == ((int)-1))) __PYX_ERR(38, 231, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":232
  *         if P is not None: Pmat = P.mat
@@ -190427,7 +204548,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_42setJacobian(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_ERR(38, 233, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyDict_NewPresized(0); 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;
@@ -190483,14 +204604,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_42setJacobian(struct PyPetscTAOO
 /* "PETSc/TAO.pyx":238
  *     #
  * 
- *     def setStateDesignIS(self, IS state, IS design):             # <<<<<<<<<<<<<<
+ *     def setStateDesignIS(self, IS state=None, IS design=None):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
 
 /* Python wrapper */
 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 char __pyx_doc_8petsc4py_5PETSc_3TAO_44setStateDesignIS[] = "TAO.setStateDesignIS(self, IS state=None, IS design=None)\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;
@@ -190500,41 +204621,52 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_45setStateDesignIS(PyObject *__p
   {
     static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_state,&__pyx_n_s_design,0};
     PyObject* values[2] = {0,0};
+    values[0] = (PyObject *)((struct PyPetscISObject *)Py_None);
+    values[1] = (PyObject *)((struct PyPetscISObject *)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);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         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_state)) != 0)) kw_args--;
-        else goto __pyx_L5_argtuple_error;
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_state);
+          if (value) { values[0] = value; kw_args--; }
+        }
+        CYTHON_FALLTHROUGH;
         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_ERR(38, 238, __pyx_L3_error)
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_design);
+          if (value) { values[1] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
         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;
     } else {
-      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-      values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
     }
     __pyx_v_state = ((struct PyPetscISObject *)values[0]);
     __pyx_v_design = ((struct PyPetscISObject *)values[1]);
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setStateDesignIS", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(38, 238, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setStateDesignIS", 0, 0, 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();
@@ -190609,12 +204741,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_44setStateDesignIS(struct PyPets
  * 
  *     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_ERR(38, 244, __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 == ((int)-1))) __PYX_ERR(38, 244, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":238
  *     #
  * 
- *     def setStateDesignIS(self, IS state, IS design):             # <<<<<<<<<<<<<<
+ *     def setStateDesignIS(self, IS state=None, IS design=None):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
@@ -190673,11 +204805,17 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_47setJacobianState(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -190686,26 +204824,31 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_47setJacobianState(PyObject *__p
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_jacobian_state)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_J);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_P);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_I);
           if (value) { values[3] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  4:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[4] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  5:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -190718,10 +204861,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_47setJacobianState(PyObject *__p
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -190856,7 +205004,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_46setJacobianState(struct PyPets
  *                                            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_ERR(38, 256, __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 == ((int)-1))) __PYX_ERR(38, 256, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":258
  *         CHKERR( TaoSetJacobianStateRoutine(self.tao, Jmat, Pmat, Imat,
@@ -190882,7 +205030,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_46setJacobianState(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_ERR(38, 259, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyDict_NewPresized(0); 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;
@@ -190973,9 +205121,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_49setJacobianDesign(PyObject *__
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -190984,16 +205136,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_49setJacobianDesign(PyObject *__
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_jacobian_design)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_J);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -191006,8 +205161,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_49setJacobianDesign(PyObject *__
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -191090,7 +205248,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_48setJacobianDesign(struct PyPet
  *                                             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_ERR(38, 268, __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 == ((int)-1))) __PYX_ERR(38, 268, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":270
  *         CHKERR( TaoSetJacobianDesignRoutine(self.tao, Jmat,
@@ -191116,7 +205274,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_48setJacobianDesign(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_ERR(38, 271, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyDict_NewPresized(0); 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;
@@ -191172,7 +205330,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_48setJacobianDesign(struct PyPet
 /* "PETSc/TAO.pyx":276
  *     # --------------
  * 
- *     def computeObjective(self, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def computeObjective(self, Vec x):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
@@ -191193,6 +205351,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_51computeObjective(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -191256,14 +205415,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_50computeObjective(struct PyPets
  *         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_ERR(38, 280, __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 == ((int)-1))) __PYX_ERR(38, 280, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":281
  *         cdef PetscReal f = 0
  *         CHKERR( TaoComputeObjective(self.tao, x.vec, &f) )
  *         return toReal(f)             # <<<<<<<<<<<<<<
  * 
- *     def computeSeparableObjective(self, Vec x not None, Vec f not None):
+ *     def computeSeparableObjective(self, Vec x, Vec f):
  */
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_f); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 281, __pyx_L1_error)
@@ -191275,7 +205434,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_50computeObjective(struct PyPets
   /* "PETSc/TAO.pyx":276
  *     # --------------
  * 
- *     def computeObjective(self, Vec x not None):             # <<<<<<<<<<<<<<
+ *     def computeObjective(self, Vec x):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
@@ -191294,7 +205453,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_50computeObjective(struct PyPets
 /* "PETSc/TAO.pyx":283
  *         return toReal(f)
  * 
- *     def computeSeparableObjective(self, Vec x not None, Vec f not None):             # <<<<<<<<<<<<<<
+ *     def computeSeparableObjective(self, Vec x, Vec f):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
@@ -191316,7 +205475,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_53computeSeparableObjective(PyOb
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -191325,6 +205486,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_53computeSeparableObjective(PyOb
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_f)) != 0)) kw_args--;
         else {
@@ -191375,14 +205537,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_52computeSeparableObjective(stru
  *         """
  *         CHKERR( TaoComputeSeparableObjective(self.tao, x.vec, f.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def computeGradient(self, Vec x not None, Vec g not None):
+ *     def computeGradient(self, Vec x, Vec g):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(38, 286, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":283
  *         return toReal(f)
  * 
- *     def computeSeparableObjective(self, Vec x not None, Vec f not None):             # <<<<<<<<<<<<<<
+ *     def computeSeparableObjective(self, Vec x, Vec f):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
@@ -191402,7 +205564,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_52computeSeparableObjective(stru
 /* "PETSc/TAO.pyx":288
  *         CHKERR( TaoComputeSeparableObjective(self.tao, x.vec, f.vec) )
  * 
- *     def computeGradient(self, Vec x not None, Vec g not None):             # <<<<<<<<<<<<<<
+ *     def computeGradient(self, Vec x, Vec g):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
@@ -191424,7 +205586,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_55computeGradient(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -191433,6 +205597,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_55computeGradient(PyObject *__py
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_g)) != 0)) kw_args--;
         else {
@@ -191483,14 +205648,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_54computeGradient(struct PyPetsc
  *         """
  *         CHKERR( TaoComputeGradient(self.tao, x.vec, g.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def computeObjectiveGradient(self, Vec x not None, Vec g not None):
+ *     def computeObjectiveGradient(self, Vec x, Vec g):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(38, 291, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":288
  *         CHKERR( TaoComputeSeparableObjective(self.tao, x.vec, f.vec) )
  * 
- *     def computeGradient(self, Vec x not None, Vec g not None):             # <<<<<<<<<<<<<<
+ *     def computeGradient(self, Vec x, Vec g):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
@@ -191510,7 +205675,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_54computeGradient(struct PyPetsc
 /* "PETSc/TAO.pyx":293
  *         CHKERR( TaoComputeGradient(self.tao, x.vec, g.vec) )
  * 
- *     def computeObjectiveGradient(self, Vec x not None, Vec g not None):             # <<<<<<<<<<<<<<
+ *     def computeObjectiveGradient(self, Vec x, Vec g):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
@@ -191532,7 +205697,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_57computeObjectiveGradient(PyObj
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -191541,6 +205708,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_57computeObjectiveGradient(PyObj
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_g)) != 0)) kw_args--;
         else {
@@ -191604,14 +205772,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_56computeObjectiveGradient(struc
  *         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_ERR(38, 297, __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 == ((int)-1))) __PYX_ERR(38, 297, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":298
  *         cdef PetscReal f = 0
  *         CHKERR( TaoComputeObjectiveAndGradient(self.tao, x.vec, &f, g.vec) )
  *         return toReal(f)             # <<<<<<<<<<<<<<
  * 
- *     def computeDualVariables(self, Vec xl not None, Vec xu not None):
+ *     def computeDualVariables(self, Vec xl, Vec xu):
  */
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_f); if (unlikely(!__pyx_t_2)) __PYX_ERR(38, 298, __pyx_L1_error)
@@ -191623,7 +205791,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_56computeObjectiveGradient(struc
   /* "PETSc/TAO.pyx":293
  *         CHKERR( TaoComputeGradient(self.tao, x.vec, g.vec) )
  * 
- *     def computeObjectiveGradient(self, Vec x not None, Vec g not None):             # <<<<<<<<<<<<<<
+ *     def computeObjectiveGradient(self, Vec x, Vec g):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
@@ -191642,7 +205810,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_56computeObjectiveGradient(struc
 /* "PETSc/TAO.pyx":300
  *         return toReal(f)
  * 
- *     def computeDualVariables(self, Vec xl not None, Vec xu not None):             # <<<<<<<<<<<<<<
+ *     def computeDualVariables(self, Vec xl, Vec xu):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
@@ -191664,7 +205832,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_59computeDualVariables(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -191673,6 +205843,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_59computeDualVariables(PyObject
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_xl)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_xu)) != 0)) kw_args--;
         else {
@@ -191723,14 +205894,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_58computeDualVariables(struct Py
  *         """
  *         CHKERR( TaoComputeDualVariables(self.tao, xl.vec, xu.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def computeVariableBounds(self, Vec xl not None, Vec xu not None):
+ *     def computeVariableBounds(self, Vec xl, Vec xu):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(38, 303, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":300
  *         return toReal(f)
  * 
- *     def computeDualVariables(self, Vec xl not None, Vec xu not None):             # <<<<<<<<<<<<<<
+ *     def computeDualVariables(self, Vec xl, Vec xu):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
@@ -191750,7 +205921,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_58computeDualVariables(struct Py
 /* "PETSc/TAO.pyx":305
  *         CHKERR( TaoComputeDualVariables(self.tao, xl.vec, xu.vec) )
  * 
- *     def computeVariableBounds(self, Vec xl not None, Vec xu not None):             # <<<<<<<<<<<<<<
+ *     def computeVariableBounds(self, Vec xl, Vec xu):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
@@ -191772,7 +205943,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_61computeVariableBounds(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -191781,6 +205954,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_61computeVariableBounds(PyObject
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_xl)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_xu)) != 0)) kw_args--;
         else {
@@ -191836,7 +206010,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_60computeVariableBounds(struct P
  *         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_ERR(38, 308, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoComputeVariableBounds(__pyx_v_self->tao)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(38, 308, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":309
  *         """
@@ -191855,7 +206029,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_60computeVariableBounds(struct P
  *         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_ERR(38, 310, __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 == ((int)-1))) __PYX_ERR(38, 310, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":311
  *         cdef PetscVec Lvec = NULL, Uvec = NULL
@@ -191884,7 +206058,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_60computeVariableBounds(struct P
  *             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_ERR(38, 313, __pyx_L1_error)
+      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCopy(__pyx_v_Lvec, __pyx_v_xl->vec)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(38, 313, __pyx_L1_error)
 
       /* "PETSc/TAO.pyx":312
  *         CHKERR( TaoGetVariableBounds(self.tao, &Lvec, &Uvec) )
@@ -191904,7 +206078,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_60computeVariableBounds(struct P
  *             if Uvec != NULL:
  */
     /*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_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSet(__pyx_v_xl->vec, ((PetscScalar)PETSC_NINFINITY))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(38, 315, __pyx_L1_error)
     }
     __pyx_L4:;
 
@@ -191944,7 +206118,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_60computeVariableBounds(struct P
  *             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_ERR(38, 318, __pyx_L1_error)
+      __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCopy(__pyx_v_Uvec, __pyx_v_xu->vec)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(38, 318, __pyx_L1_error)
 
       /* "PETSc/TAO.pyx":317
  *                 CHKERR( VecSet(xl.vec, <PetscScalar>PETSC_NINFINITY) )
@@ -191961,10 +206135,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_60computeVariableBounds(struct P
  *             else:
  *                 CHKERR( VecSet(xu.vec, <PetscScalar>PETSC_INFINITY) )             # <<<<<<<<<<<<<<
  * 
- *     def computeConstraints(self, Vec x not None, Vec c not None):
+ *     def computeConstraints(self, Vec x, Vec c):
  */
     /*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_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecSet(__pyx_v_xu->vec, ((PetscScalar)PETSC_INFINITY))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(38, 320, __pyx_L1_error)
     }
     __pyx_L6:;
 
@@ -191980,7 +206154,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_60computeVariableBounds(struct P
   /* "PETSc/TAO.pyx":305
  *         CHKERR( TaoComputeDualVariables(self.tao, xl.vec, xu.vec) )
  * 
- *     def computeVariableBounds(self, Vec xl not None, Vec xu not None):             # <<<<<<<<<<<<<<
+ *     def computeVariableBounds(self, Vec xl, Vec xu):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
@@ -192000,7 +206174,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_60computeVariableBounds(struct P
 /* "PETSc/TAO.pyx":322
  *                 CHKERR( VecSet(xu.vec, <PetscScalar>PETSC_INFINITY) )
  * 
- *     def computeConstraints(self, Vec x not None, Vec c not None):             # <<<<<<<<<<<<<<
+ *     def computeConstraints(self, Vec x, Vec c):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
@@ -192022,7 +206196,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_63computeConstraints(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -192031,6 +206207,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_63computeConstraints(PyObject *_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_c)) != 0)) kw_args--;
         else {
@@ -192081,14 +206258,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_62computeConstraints(struct PyPe
  *         """
  *         CHKERR( TaoComputeConstraints(self.tao, x.vec, c.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def computeHessian(self, Vec x not None, Mat H not None, Mat P=None):
+ *     def computeHessian(self, Vec x, Mat H, 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_ERR(38, 325, __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 == ((int)-1))) __PYX_ERR(38, 325, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":322
  *                 CHKERR( VecSet(xu.vec, <PetscScalar>PETSC_INFINITY) )
  * 
- *     def computeConstraints(self, Vec x not None, Vec c not None):             # <<<<<<<<<<<<<<
+ *     def computeConstraints(self, Vec x, Vec c):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
@@ -192108,7 +206285,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_62computeConstraints(struct PyPe
 /* "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):             # <<<<<<<<<<<<<<
+ *     def computeHessian(self, Vec x, Mat H, Mat P=None):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
@@ -192132,8 +206309,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_65computeHessian(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -192142,11 +206322,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_65computeHessian(PyObject *__pyx
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(38, 327, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_P);
@@ -192159,6 +206341,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_65computeHessian(PyObject *__pyx
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -192233,14 +206416,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_64computeHessian(struct PyPetscT
  *         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):
+ *     def computeJacobian(self, Vec x, Mat J, 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_ERR(38, 332, __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 == ((int)-1))) __PYX_ERR(38, 332, __pyx_L1_error)
 
   /* "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):             # <<<<<<<<<<<<<<
+ *     def computeHessian(self, Vec x, Mat H, Mat P=None):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
@@ -192260,7 +206443,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_64computeHessian(struct PyPetscT
 /* "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):             # <<<<<<<<<<<<<<
+ *     def computeJacobian(self, Vec x, Mat J, Mat P=None):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
@@ -192284,8 +206467,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_67computeJacobian(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -192294,11 +206480,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_67computeJacobian(PyObject *__py
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_x)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(38, 334, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_P);
@@ -192311,6 +206499,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_67computeJacobian(PyObject *__py
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -192387,12 +206576,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_66computeJacobian(struct PyPetsc
  * 
  *     # --------------
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(38, 339, __pyx_L1_error)
 
   /* "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):             # <<<<<<<<<<<<<<
+ *     def computeJacobian(self, Vec x, Mat J, Mat P=None):             # <<<<<<<<<<<<<<
  *         """
  *         """
  */
@@ -192438,8 +206627,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_69setTolerances(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -192450,11 +206642,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_69setTolerances(PyObject *__pyx_
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_gatol);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_grtol);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_gttol);
@@ -192467,8 +206661,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_69setTolerances(PyObject *__pyx_
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -192525,7 +206722,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_68setTolerances(struct PyPetscTA
   __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_ERR(38, 349, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_gatol); if (unlikely(__pyx_t_3 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(38, 349, __pyx_L1_error)
     __pyx_v__gatol = __pyx_t_3;
   }
 
@@ -192539,7 +206736,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_68setTolerances(struct PyPetscTA
   __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_ERR(38, 350, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_grtol); if (unlikely(__pyx_t_3 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(38, 350, __pyx_L1_error)
     __pyx_v__grtol = __pyx_t_3;
   }
 
@@ -192553,7 +206750,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_68setTolerances(struct PyPetscTA
   __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_ERR(38, 351, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_gttol); if (unlikely(__pyx_t_3 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(38, 351, __pyx_L1_error)
     __pyx_v__gttol = __pyx_t_3;
   }
 
@@ -192564,7 +206761,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_68setTolerances(struct PyPetscTA
  * 
  *     def getTolerances(self):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(38, 352, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":345
  *     #
@@ -192642,7 +206839,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_70getTolerances(struct PyPetscTA
  *         return (toReal(_gatol), toReal(_grtol), toReal(_gttol))
  * 
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(38, 358, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":359
  *         cdef PetscReal _gatol=PETSC_DEFAULT, _grtol=PETSC_DEFAULT, _gttol=PETSC_DEFAULT
@@ -192722,7 +206919,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_73setConstraintTolerances(PyObje
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -192733,6 +206932,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_73setConstraintTolerances(PyObje
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_catol);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_crtol);
@@ -192745,7 +206945,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_73setConstraintTolerances(PyObje
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -192799,7 +207001,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_72setConstraintTolerances(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_ERR(38, 365, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_catol); if (unlikely(__pyx_t_3 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(38, 365, __pyx_L1_error)
     __pyx_v__catol = __pyx_t_3;
   }
 
@@ -192813,7 +207015,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_72setConstraintTolerances(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_ERR(38, 366, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_crtol); if (unlikely(__pyx_t_3 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(38, 366, __pyx_L1_error)
     __pyx_v__crtol = __pyx_t_3;
   }
 
@@ -192824,7 +207026,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_72setConstraintTolerances(struct
  * 
  *     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_ERR(38, 367, __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 == ((int)-1))) __PYX_ERR(38, 367, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":361
  *         return (toReal(_gatol), toReal(_grtol), toReal(_gttol))
@@ -192899,7 +207101,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_74getConstraintTolerances(struct
  *         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_ERR(38, 373, __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 == ((int)-1))) __PYX_ERR(38, 373, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":374
  *         cdef PetscReal _catol=PETSC_DEFAULT, _crtol=PETSC_DEFAULT
@@ -192974,8 +207176,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_77setConvergenceTest(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -192984,11 +207189,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_77setConvergenceTest(PyObject *_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_converged)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -193001,7 +207208,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_77setConvergenceTest(PyObject *_
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -193056,7 +207265,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_76setConvergenceTest(struct PyPe
  *             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_ERR(38, 380, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetConvergenceTest(__pyx_v_self->tao, TaoDefaultConvergenceTest, NULL)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(38, 380, __pyx_L1_error)
 
     /* "PETSc/TAO.pyx":381
  *         if converged is None:
@@ -193104,7 +207313,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_76setConvergenceTest(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_ERR(38, 384, __pyx_L1_error)
+      __pyx_t_4 = __Pyx_PyDict_NewPresized(0); 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;
@@ -193140,7 +207349,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_76setConvergenceTest(struct PyPe
  * 
  *     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_ERR(38, 386, __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 == ((int)-1))) __PYX_ERR(38, 386, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -193256,6 +207465,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_81setConvergedReason(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -193315,7 +207525,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_80setConvergedReason(struct PyPe
  * 
  *     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_ERR(38, 397, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetConvergedReason(__pyx_v_self->tao, __pyx_v_creason)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(38, 397, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":393
  *         return self.get_attr('__converged__')
@@ -193386,7 +207596,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_82getConvergedReason(struct PyPe
  *         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_ERR(38, 403, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetConvergedReason(__pyx_v_self->tao, (&__pyx_v_creason))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(38, 403, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":404
  *         cdef PetscTAOConvergedReason creason = TAO_CONTINUE_ITERATING
@@ -193449,8 +207659,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_85setMonitor(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -193459,11 +207672,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_85setMonitor(PyObject *__pyx_v_s
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_monitor)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -193476,7 +207691,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_85setMonitor(PyObject *__pyx_v_s
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -193560,7 +207777,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_84setMonitor(struct PyPetscTAOOb
  *             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_ERR(38, 412, __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 == ((int)-1))) __PYX_ERR(38, 412, __pyx_L1_error)
 
     /* "PETSc/TAO.pyx":413
  *         if monitorlist is None:
@@ -193586,7 +207803,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_84setMonitor(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_ERR(38, 414, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyDict_NewPresized(0); 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;
@@ -193649,7 +207866,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_84setMonitor(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_ERR(38, 417, __pyx_L1_error)
+    __pyx_t_6 = __Pyx_PyObject_Append(__pyx_v_monitorlist, __pyx_t_3); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(38, 417, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   }
   __pyx_L4:;
@@ -193782,7 +207999,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_88cancelMonitor(struct PyPetscTA
  *         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_ERR(38, 427, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoCancelMonitors(__pyx_v_self->tao)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(38, 427, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":428
  *         """
@@ -193841,6 +208058,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_91solve(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -193858,6 +208076,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_91solve(PyObject *__pyx_v_self,
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -193910,7 +208129,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_90solve(struct PyPetscTAOObject
  *         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_ERR(38, 436, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetInitialVector(__pyx_v_self->tao, __pyx_v_x->vec)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(38, 436, __pyx_L1_error)
 
     /* "PETSc/TAO.pyx":435
  *         """
@@ -193928,7 +208147,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_90solve(struct PyPetscTAOObject
  * 
  *     def getSolution(self):
  */
-  __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)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSolve(__pyx_v_self->tao)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(38, 437, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":432
  *     #
@@ -194002,7 +208221,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_92getSolution(struct PyPetscTAOO
  *         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_ERR(38, 443, __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 == ((int)-1))) __PYX_ERR(38, 443, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":444
  *         cdef Vec vec = Vec()
@@ -194097,7 +208316,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_94getGradient(struct PyPetscTAOO
  *         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_ERR(38, 451, __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 == ((int)-1))) __PYX_ERR(38, 451, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":452
  *         cdef Vec vec = Vec()
@@ -194164,6 +208383,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_97setGradientNorm(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -194191,7 +208411,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_97setGradientNorm(PyObject *__py
   __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)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "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 */
@@ -194216,7 +208436,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_96setGradientNorm(struct PyPetsc
  * 
  *     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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoSetGradientNorm(__pyx_v_self->tao, __pyx_v_mat->mat)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(38, 458, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":455
  *         return vec
@@ -194290,7 +208510,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_98getGradientNorm(struct PyPetsc
  *         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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetGradientNorm(__pyx_v_self->tao, (&__pyx_v_mat->mat))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(38, 464, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":465
  *         cdef Mat mat = Mat()
@@ -194357,6 +208577,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_101setLMVMH0(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -194384,7 +208605,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_3TAO_101setLMVMH0(PyObject *__pyx_v_s
   __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)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "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 */
@@ -194409,7 +208630,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_100setLMVMH0(struct PyPetscTAOOb
  * 
  *     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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoLMVMSetH0(__pyx_v_self->tao, __pyx_v_mat->mat)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(38, 471, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":468
  *         return mat
@@ -194483,7 +208704,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_102getLMVMH0(struct PyPetscTAOOb
  *         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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoLMVMGetH0(__pyx_v_self->tao, (&__pyx_v_mat->mat))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(38, 477, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":478
  *         cdef Mat mat = Mat()
@@ -194578,7 +208799,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_104getLMVMH0KSP(struct PyPetscTA
  *         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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoLMVMGetH0KSP(__pyx_v_self->tao, (&__pyx_v_ksp->ksp))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(38, 485, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":486
  *         cdef KSP ksp = KSP()
@@ -194678,7 +208899,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_106getVariableBounds(struct PyPe
  *         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_ERR(38, 493, __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 == ((int)-1))) __PYX_ERR(38, 493, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":494
  *         cdef Vec xl = Vec(), xu = Vec()
@@ -194780,7 +209001,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_108getIterationNumber(struct PyP
  *         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_ERR(38, 501, __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 == ((int)-1))) __PYX_ERR(38, 501, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":502
  *         cdef PetscInt its=0
@@ -194864,7 +209085,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_110getObjectiveValue(struct PyPe
  *         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_ERR(38, 508, __pyx_L1_error)
+  __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 == ((int)-1))) __PYX_ERR(38, 508, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":509
  *         cdef PetscReal fval=0
@@ -194948,7 +209169,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_112getConvergedReason(struct PyP
  *         return reason
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(TaoGetConvergedReason(__pyx_v_self->tao, (&__pyx_v_reason))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(38, 517, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":518
  *         cdef PetscTAOConvergedReason reason = TAO_CONTINUE_ITERATING
@@ -195055,7 +209276,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_114getSolutionNorm(struct PyPets
  *         return (toReal(fval), toReal(gnorm), toReal(cnorm))
  * 
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(38, 526, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":527
  *         cdef PetscReal fval=0
@@ -195189,7 +209410,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_116getSolutionStatus(struct PyPe
  *                                      &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_ERR(38, 535, __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 == ((int)-1))) __PYX_ERR(38, 535, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":538
  *                                      &fval, &gnorm, &cnorm, &xdiff,
@@ -195336,7 +209557,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_118getKSP(struct PyPetscTAOObjec
  *         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_ERR(38, 546, __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 == ((int)-1))) __PYX_ERR(38, 546, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":547
  *         cdef KSP ksp = KSP()
@@ -195419,7 +209640,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_6appctx___get__(struct PyPetscTA
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -195501,7 +209722,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3TAO_6appctx_2__set__(struct PyPetscTAOObje
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -195514,15 +209735,33 @@ static int __pyx_pf_8petsc4py_5PETSc_3TAO_6appctx_2__set__(struct PyPetscTAOObje
     __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_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_ERR(38, 556, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 556, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_value};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 556, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __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_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;
@@ -195590,7 +209829,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_3ksp___get__(struct PyPetscTAOOb
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -195672,7 +209911,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4ftol___get__(struct PyPetscTAOO
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -195776,7 +210015,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3TAO_4ftol_2__set__(struct PyPetscTAOObject
  */
     __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_ERR(38, 571, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_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_ERR(38, 571, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
@@ -195849,7 +210088,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3TAO_4ftol_2__set__(struct PyPetscTAOObject
  *     property gtol:
  */
   /*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_t_4 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__63, 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;
@@ -195919,7 +210158,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4gtol___get__(struct PyPetscTAOO
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -196023,7 +210262,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3TAO_4gtol_2__set__(struct PyPetscTAOObject
  */
     __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_ERR(38, 582, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_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_ERR(38, 582, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
@@ -196096,7 +210335,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3TAO_4gtol_2__set__(struct PyPetscTAOObject
  *     property ctol:
  */
   /*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_t_4 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__64, 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;
@@ -196166,7 +210405,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_4ctol___get__(struct PyPetscTAOO
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -196270,7 +210509,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3TAO_4ctol_2__set__(struct PyPetscTAOObject
  */
     __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_ERR(38, 593, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_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_ERR(38, 593, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_6);
@@ -196343,7 +210582,7 @@ static int __pyx_pf_8petsc4py_5PETSc_3TAO_4ctol_2__set__(struct PyPetscTAOObject
  *     # --- iteration ---
  */
   /*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_t_4 = __Pyx_PyObject_Call(__pyx_builtin_TypeError, __pyx_tuple__65, 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;
@@ -196413,7 +210652,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_3its___get__(struct PyPetscTAOOb
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -196495,7 +210734,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_5gnorm___get__(struct PyPetscTAO
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -196580,7 +210819,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_5cnorm___get__(struct PyPetscTAO
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -196665,7 +210904,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_8solution___get__(struct PyPetsc
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -196747,7 +210986,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_9objective___get__(struct PyPets
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -196829,7 +211068,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_8function___get__(struct PyPetsc
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -196911,7 +211150,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_8gradient___get__(struct PyPetsc
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -196993,7 +211232,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_3TAO_6reason___get__(struct PyPetscTA
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -197314,6 +211553,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_3view(PyObject *__pyx_v_self, PyO
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -197331,6 +211571,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_3view(PyObject *__pyx_v_self, PyO
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -197397,7 +211638,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_2view(struct PyPetscAOObject *__p
  * 
  *     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)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOView(__pyx_v_self->ao, __pyx_v_cviewer)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(39, 22, __pyx_L1_error)
 
   /* "PETSc/AO.pyx":19
  *         self.ao = NULL
@@ -197457,7 +211698,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_4destroy(struct PyPetscAOObject *
  *         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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(AODestroy((&__pyx_v_self->ao))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(39, 25, __pyx_L1_error)
 
   /* "PETSc/AO.pyx":26
  *     def destroy(self):
@@ -197517,8 +211758,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_7createBasic(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -197527,11 +211771,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_7createBasic(PyObject *__pyx_v_se
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_app)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_petsc);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -197544,7 +211790,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_7createBasic(PyObject *__pyx_v_se
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -197698,7 +211946,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_6createBasic(struct PyPetscAOObje
  *         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)
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOCreateBasicIS(__pyx_v_isapp, __pyx_v_ispetsc, (&__pyx_v_newao))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(39, 38, __pyx_L1_error)
 
     /* "PETSc/AO.pyx":34
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
@@ -197778,7 +212026,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_6createBasic(struct PyPetscAOObje
  *         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_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 == ((int)-1))) __PYX_ERR(39, 44, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -197853,8 +212101,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_9createMemoryScalable(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -197863,11 +212114,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_9createMemoryScalable(PyObject *_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_app)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_petsc);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -197880,7 +212133,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_9createMemoryScalable(PyObject *_
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -198034,7 +212289,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_8createMemoryScalable(struct PyPe
  *         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)
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOCreateMemoryScalableIS(__pyx_v_isapp, __pyx_v_ispetsc, (&__pyx_v_newao))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(39, 58, __pyx_L1_error)
 
     /* "PETSc/AO.pyx":54
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
@@ -198114,7 +212369,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_8createMemoryScalable(struct PyPe
  *         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_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 == ((int)-1))) __PYX_ERR(39, 64, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -198189,8 +212444,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_11createMapping(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -198199,11 +212457,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_11createMapping(PyObject *__pyx_v
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_app)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_petsc);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -198216,7 +212476,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_11createMapping(PyObject *__pyx_v
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -198370,7 +212632,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_10createMapping(struct PyPetscAOO
  *         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)
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOCreateMappingIS(__pyx_v_isapp, __pyx_v_ispetsc, (&__pyx_v_newao))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(39, 78, __pyx_L1_error)
 
     /* "PETSc/AO.pyx":74
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
@@ -198450,7 +212712,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_10createMapping(struct PyPetscAOO
  *         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_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 == ((int)-1))) __PYX_ERR(39, 84, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -198546,7 +212808,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_12getType(struct PyPetscAOObject
  *         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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOGetType(__pyx_v_self->ao, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(39, 90, __pyx_L1_error)
 
   /* "PETSc/AO.pyx":91
  *         cdef PetscAOType cval = NULL
@@ -198605,6 +212867,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_15app2petsc(PyObject *__pyx_v_sel
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -198700,7 +212963,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_14app2petsc(struct PyPetscAOObjec
  *         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)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOApplicationToPetscIS(__pyx_v_self->ao, __pyx_v_iset)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(39, 98, __pyx_L1_error)
 
     /* "PETSc/AO.pyx":96
  *         cdef PetscIS iset = NULL
@@ -198732,7 +212995,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_14app2petsc(struct PyPetscAOObjec
  *         return indices
  * 
  */
-    __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_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOApplicationToPetsc(__pyx_v_self->ao, __pyx_v_nidx, __pyx_v_idx)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(39, 101, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -198792,6 +213055,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2AO_17petsc2app(PyObject *__pyx_v_sel
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -198887,7 +213151,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_16petsc2app(struct PyPetscAOObjec
  *         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)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOPetscToApplicationIS(__pyx_v_self->ao, __pyx_v_iset)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(39, 109, __pyx_L1_error)
 
     /* "PETSc/AO.pyx":107
  *         cdef PetscIS iset = NULL
@@ -198919,7 +213183,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2AO_16petsc2app(struct PyPetscAOObjec
  *         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_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(AOPetscToApplication(__pyx_v_self->ao, __pyx_v_nidx, __pyx_v_idx)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(39, 112, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -199041,6 +213305,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_3view(PyObject *__pyx_v_self, PyO
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -199058,6 +213323,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_3view(PyObject *__pyx_v_self, PyO
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -199124,7 +213390,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_2view(struct PyPetscDMObject *__p
  * 
  *     def destroy(self):
  */
-  __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)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMView(__pyx_v_self->dm, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(40, 38, __pyx_L1_error)
 
   /* "PETSc/DM.pyx":35
  *         self.dm  = NULL
@@ -199184,7 +213450,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_4destroy(struct PyPetscDMObject *
  *         return self
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDestroy((&__pyx_v_self->dm))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(40, 41, __pyx_L1_error)
 
   /* "PETSc/DM.pyx":42
  *     def destroy(self):
@@ -199241,6 +213507,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_7create(PyObject *__pyx_v_self, P
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -199258,6 +213525,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_7create(PyObject *__pyx_v_self, P
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -199314,7 +213582,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_6create(struct PyPetscDMObject *_
  *         PetscCLEAR(self.obj); self.dm = newdm
  *         return self
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCreate(__pyx_v_ccomm, (&__pyx_v_newdm))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(40, 47, __pyx_L1_error)
 
   /* "PETSc/DM.pyx":48
  *         cdef PetscDM newdm = NULL
@@ -199400,7 +213668,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_8clone(struct PyPetscDMObject *__
  */
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -199428,7 +213696,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_8clone(struct PyPetscDMObject *__
  *         return dm
  * 
  */
-  __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)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMClone(__pyx_v_self->dm, (&__pyx_v_dm->dm))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(40, 53, __pyx_L1_error)
 
   /* "PETSc/DM.pyx":54
  *         cdef DM dm = type(self)()
@@ -199488,6 +213756,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_11setType(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -199559,7 +213828,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_10setType(struct PyPetscDMObject
  * 
  *     def getType(self):
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetType(__pyx_v_self->dm, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(40, 59, __pyx_L1_error)
 
   /* "PETSc/DM.pyx":56
  *         return dm
@@ -199632,7 +213901,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_12getType(struct PyPetscDMObject
  *         return bytes2str(cval)
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetType(__pyx_v_self->dm, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(40, 63, __pyx_L1_error)
 
   /* "PETSc/DM.pyx":64
  *         cdef PetscDMType cval = NULL
@@ -199716,7 +213985,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_14getDimension(struct PyPetscDMOb
  *         return toInt(dim)
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetDimension(__pyx_v_self->dm, (&__pyx_v_dim))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(40, 68, __pyx_L1_error)
 
   /* "PETSc/DM.pyx":69
  *         cdef PetscInt dim = 0
@@ -199775,6 +214044,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_17setDimension(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -199824,7 +214094,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_16setDimension(struct PyPetscDMOb
  *         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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_dim); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(40, 72, __pyx_L1_error)
   __pyx_v_cdim = __pyx_t_1;
 
   /* "PETSc/DM.pyx":73
@@ -199834,7 +214104,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_16setDimension(struct PyPetscDMOb
  * 
  * 
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetDimension(__pyx_v_self->dm, __pyx_v_cdim)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(40, 73, __pyx_L1_error)
 
   /* "PETSc/DM.pyx":71
  *         return toInt(dim)
@@ -199880,6 +214150,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_19setOptionsPrefix(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -199951,7 +214222,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_18setOptionsPrefix(struct PyPetsc
  * 
  *     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_ERR(40, 79, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetOptionsPrefix(__pyx_v_self->dm, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(40, 79, __pyx_L1_error)
 
   /* "PETSc/DM.pyx":76
  * 
@@ -200013,7 +214284,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_20setFromOptions(struct PyPetscDM
  * 
  *     def setUp(self):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetFromOptions(__pyx_v_self->dm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(40, 82, __pyx_L1_error)
 
   /* "PETSc/DM.pyx":81
  *         CHKERR( DMSetOptionsPrefix(self.dm, cval) )
@@ -200073,7 +214344,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_22setUp(struct PyPetscDMObject *_
  *         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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetUp(__pyx_v_self->dm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(40, 85, __pyx_L1_error)
 
   /* "PETSc/DM.pyx":86
  *     def setUp(self):
@@ -200129,6 +214400,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_25setAppCtx(PyObject *__pyx_v_sel
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -200314,7 +214586,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_28getBlockSize(struct PyPetscDMOb
  *         return toInt(bs)
  * 
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetBlockSize(__pyx_v_self->dm, (&__pyx_v_bs))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(40, 100, __pyx_L1_error)
 
   /* "PETSc/DM.pyx":101
  *         cdef PetscInt bs = 1
@@ -200373,6 +214645,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_31setVecType(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -200444,7 +214717,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_30setVecType(struct PyPetscDMObje
  * 
  *     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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetVecType(__pyx_v_self->dm, __pyx_v_vtype)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(40, 106, __pyx_L1_error)
 
   /* "PETSc/DM.pyx":103
  *         return toInt(bs)
@@ -200520,7 +214793,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_32createGlobalVec(struct PyPetscD
  *         return vg
  * 
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCreateGlobalVector(__pyx_v_self->dm, (&__pyx_v_vg->vec))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(40, 110, __pyx_L1_error)
 
   /* "PETSc/DM.pyx":111
  *         cdef Vec vg = Vec()
@@ -200606,14 +214879,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_34createLocalVec(struct PyPetscDM
  *         return vl
  * 
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCreateLocalVector(__pyx_v_self->dm, (&__pyx_v_vl->vec))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(40, 115, __pyx_L1_error)
 
   /* "PETSc/DM.pyx":116
  *         cdef Vec vl = Vec()
  *         CHKERR( DMCreateLocalVector(self.dm, &vl.vec) )
  *         return vl             # <<<<<<<<<<<<<<
  * 
- *     def globalToLocal(self, Vec vg not None, Vec vl not None, addv=None):
+ *     def getGlobalVec(self):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_vl));
@@ -200643,15 +214916,421 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_34createLocalVec(struct PyPetscDM
 /* "PETSc/DM.pyx":118
  *         return vl
  * 
- *     def globalToLocal(self, Vec vg not None, Vec vl not None, addv=None):             # <<<<<<<<<<<<<<
+ *     def getGlobalVec(self):             # <<<<<<<<<<<<<<
+ *         cdef Vec vg = Vec()
+ *         CHKERR( DMGetGlobalVector(self.dm, &vg.vec) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_37getGlobalVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_36getGlobalVec[] = "DM.getGlobalVec(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_37getGlobalVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getGlobalVec (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getGlobalVec", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getGlobalVec", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_36getGlobalVec(((struct PyPetscDMObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_36getGlobalVec(struct PyPetscDMObject *__pyx_v_self) {
+  struct PyPetscVecObject *__pyx_v_vg = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getGlobalVec", 0);
+
+  /* "PETSc/DM.pyx":119
+ * 
+ *     def getGlobalVec(self):
+ *         cdef Vec vg = Vec()             # <<<<<<<<<<<<<<
+ *         CHKERR( DMGetGlobalVector(self.dm, &vg.vec) )
+ *         PetscINCREF(vg.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, 119, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_vg = ((struct PyPetscVecObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/DM.pyx":120
+ *     def getGlobalVec(self):
+ *         cdef Vec vg = Vec()
+ *         CHKERR( DMGetGlobalVector(self.dm, &vg.vec) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(vg.obj)
+ *         return vg
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetGlobalVector(__pyx_v_self->dm, (&__pyx_v_vg->vec))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(40, 120, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":121
+ *         cdef Vec vg = Vec()
+ *         CHKERR( DMGetGlobalVector(self.dm, &vg.vec) )
+ *         PetscINCREF(vg.obj)             # <<<<<<<<<<<<<<
+ *         return vg
+ * 
+ */
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_vg->__pyx_base.obj);
+
+  /* "PETSc/DM.pyx":122
+ *         CHKERR( DMGetGlobalVector(self.dm, &vg.vec) )
+ *         PetscINCREF(vg.obj)
+ *         return vg             # <<<<<<<<<<<<<<
+ * 
+ *     def restoreGlobalVec(self, Vec vg):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_vg));
+  __pyx_r = ((PyObject *)__pyx_v_vg);
+  goto __pyx_L0;
+
+  /* "PETSc/DM.pyx":118
+ *         return vl
+ * 
+ *     def getGlobalVec(self):             # <<<<<<<<<<<<<<
+ *         cdef Vec vg = Vec()
+ *         CHKERR( DMGetGlobalVector(self.dm, &vg.vec) )
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getGlobalVec", __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":124
+ *         return vg
+ * 
+ *     def restoreGlobalVec(self, Vec vg):             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscObjectDereference(<PetscObject>vg.vec) )
+ *         CHKERR( DMRestoreGlobalVector(self.dm, &vg.vec) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_39restoreGlobalVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_38restoreGlobalVec[] = "DM.restoreGlobalVec(self, Vec vg)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_39restoreGlobalVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscVecObject *__pyx_v_vg = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("restoreGlobalVec (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_vg,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);
+        CYTHON_FALLTHROUGH;
+        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_vg)) != 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, "restoreGlobalVec") < 0)) __PYX_ERR(40, 124, __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_vg = ((struct PyPetscVecObject *)values[0]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("restoreGlobalVec", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 124, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.restoreGlobalVec", __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_ERR(40, 124, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_38restoreGlobalVec(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_vg);
+
+  /* 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_38restoreGlobalVec(struct PyPetscDMObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vg) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("restoreGlobalVec", 0);
+
+  /* "PETSc/DM.pyx":125
+ * 
+ *     def restoreGlobalVec(self, Vec vg):
+ *         CHKERR( PetscObjectDereference(<PetscObject>vg.vec) )             # <<<<<<<<<<<<<<
+ *         CHKERR( DMRestoreGlobalVector(self.dm, &vg.vec) )
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectDereference(((PetscObject)__pyx_v_vg->vec))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(40, 125, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":126
+ *     def restoreGlobalVec(self, Vec vg):
+ *         CHKERR( PetscObjectDereference(<PetscObject>vg.vec) )
+ *         CHKERR( DMRestoreGlobalVector(self.dm, &vg.vec) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getLocalVec(self):
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMRestoreGlobalVector(__pyx_v_self->dm, (&__pyx_v_vg->vec))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(40, 126, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":124
+ *         return vg
+ * 
+ *     def restoreGlobalVec(self, Vec vg):             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscObjectDereference(<PetscObject>vg.vec) )
+ *         CHKERR( DMRestoreGlobalVector(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.restoreGlobalVec", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DM.pyx":128
+ *         CHKERR( DMRestoreGlobalVector(self.dm, &vg.vec) )
+ * 
+ *     def getLocalVec(self):             # <<<<<<<<<<<<<<
+ *         cdef Vec vl = Vec()
+ *         CHKERR( DMGetLocalVector(self.dm, &vl.vec) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_41getLocalVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_40getLocalVec[] = "DM.getLocalVec(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_41getLocalVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getLocalVec (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getLocalVec", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getLocalVec", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_40getLocalVec(((struct PyPetscDMObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_40getLocalVec(struct PyPetscDMObject *__pyx_v_self) {
+  struct PyPetscVecObject *__pyx_v_vl = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("getLocalVec", 0);
+
+  /* "PETSc/DM.pyx":129
+ * 
+ *     def getLocalVec(self):
+ *         cdef Vec vl = Vec()             # <<<<<<<<<<<<<<
+ *         CHKERR( DMGetLocalVector(self.dm, &vl.vec) )
+ *         PetscINCREF(vl.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, 129, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_vl = ((struct PyPetscVecObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/DM.pyx":130
+ *     def getLocalVec(self):
+ *         cdef Vec vl = Vec()
+ *         CHKERR( DMGetLocalVector(self.dm, &vl.vec) )             # <<<<<<<<<<<<<<
+ *         PetscINCREF(vl.obj)
+ *         return vl
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetLocalVector(__pyx_v_self->dm, (&__pyx_v_vl->vec))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(40, 130, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":131
+ *         cdef Vec vl = Vec()
+ *         CHKERR( DMGetLocalVector(self.dm, &vl.vec) )
+ *         PetscINCREF(vl.obj)             # <<<<<<<<<<<<<<
+ *         return vl
+ * 
+ */
+  __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_vl->__pyx_base.obj);
+
+  /* "PETSc/DM.pyx":132
+ *         CHKERR( DMGetLocalVector(self.dm, &vl.vec) )
+ *         PetscINCREF(vl.obj)
+ *         return vl             # <<<<<<<<<<<<<<
+ * 
+ *     def restoreLocalVec(self, Vec vl):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_vl));
+  __pyx_r = ((PyObject *)__pyx_v_vl);
+  goto __pyx_L0;
+
+  /* "PETSc/DM.pyx":128
+ *         CHKERR( DMRestoreGlobalVector(self.dm, &vg.vec) )
+ * 
+ *     def getLocalVec(self):             # <<<<<<<<<<<<<<
+ *         cdef Vec vl = Vec()
+ *         CHKERR( DMGetLocalVector(self.dm, &vl.vec) )
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getLocalVec", __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":134
+ *         return vl
+ * 
+ *     def restoreLocalVec(self, Vec vl):             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscObjectDereference(<PetscObject>vl.vec) )
+ *         CHKERR( DMRestoreLocalVector(self.dm, &vl.vec) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_43restoreLocalVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_42restoreLocalVec[] = "DM.restoreLocalVec(self, Vec vl)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_43restoreLocalVec(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscVecObject *__pyx_v_vl = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("restoreLocalVec (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_vl,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);
+        CYTHON_FALLTHROUGH;
+        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;
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "restoreLocalVec") < 0)) __PYX_ERR(40, 134, __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_vl = ((struct PyPetscVecObject *)values[0]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("restoreLocalVec", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 134, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.restoreLocalVec", __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, 134, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_42restoreLocalVec(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_vl);
+
+  /* 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_42restoreLocalVec(struct PyPetscDMObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_vl) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("restoreLocalVec", 0);
+
+  /* "PETSc/DM.pyx":135
+ * 
+ *     def restoreLocalVec(self, Vec vl):
+ *         CHKERR( PetscObjectDereference(<PetscObject>vl.vec) )             # <<<<<<<<<<<<<<
+ *         CHKERR( DMRestoreLocalVector(self.dm, &vl.vec) )
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectDereference(((PetscObject)__pyx_v_vl->vec))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(40, 135, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":136
+ *     def restoreLocalVec(self, Vec vl):
+ *         CHKERR( PetscObjectDereference(<PetscObject>vl.vec) )
+ *         CHKERR( DMRestoreLocalVector(self.dm, &vl.vec) )             # <<<<<<<<<<<<<<
+ * 
+ *     def globalToLocal(self, Vec vg, Vec vl, addv=None):
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMRestoreLocalVector(__pyx_v_self->dm, (&__pyx_v_vl->vec))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(40, 136, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":134
+ *         return vl
+ * 
+ *     def restoreLocalVec(self, Vec vl):             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscObjectDereference(<PetscObject>vl.vec) )
+ *         CHKERR( DMRestoreLocalVector(self.dm, &vl.vec) )
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.restoreLocalVec", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DM.pyx":138
+ *         CHKERR( DMRestoreLocalVector(self.dm, &vl.vec) )
+ * 
+ *     def globalToLocal(self, Vec vg, Vec vl, 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_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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_45globalToLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_44globalToLocal[] = "DM.globalToLocal(self, Vec vg, Vec vl, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_45globalToLocal(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;
@@ -200667,8 +215346,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_37globalToLocal(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -200677,11 +215359,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_37globalToLocal(PyObject *__pyx_v
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vg)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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)
+          __Pyx_RaiseArgtupleInvalid("globalToLocal", 0, 2, 3, 1); __PYX_ERR(40, 138, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
@@ -200689,11 +215373,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_37globalToLocal(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "globalToLocal") < 0)) __PYX_ERR(40, 118, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "globalToLocal") < 0)) __PYX_ERR(40, 138, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -200706,15 +215391,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_37globalToLocal(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("globalToLocal", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 118, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("globalToLocal", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 138, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DM.globalToLocal", __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vg), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vg", 0))) __PYX_ERR(40, 138, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vl), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vl", 0))) __PYX_ERR(40, 138, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_44globalToLocal(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_vg, __pyx_v_vl, __pyx_v_addv);
 
   /* function exit code */
   goto __pyx_L0;
@@ -200725,7 +215410,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_37globalToLocal(PyObject *__pyx_v
   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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_44globalToLocal(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
@@ -200733,38 +215418,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_36globalToLocal(struct PyPetscDMO
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("globalToLocal", 0);
 
-  /* "PETSc/DM.pyx":119
+  /* "PETSc/DM.pyx":139
  * 
- *     def globalToLocal(self, Vec vg not None, Vec vl not None, addv=None):
+ *     def globalToLocal(self, Vec vg, Vec vl, 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_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)-1L))) __PYX_ERR(40, 119, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)((InsertMode)-1L)))) __PYX_ERR(40, 139, __pyx_L1_error)
   __pyx_v_im = __pyx_t_1;
 
-  /* "PETSc/DM.pyx":120
- *     def globalToLocal(self, Vec vg not None, Vec vl not None, addv=None):
+  /* "PETSc/DM.pyx":140
+ *     def globalToLocal(self, Vec vg, Vec vl, 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(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)
+  __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 == ((int)-1))) __PYX_ERR(40, 140, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":121
+  /* "PETSc/DM.pyx":141
  *         cdef PetscInsertMode im = insertmode(addv)
  *         CHKERR( DMGlobalToLocalBegin(self.dm, vg.vec, im, vl.vec) )
  *         CHKERR( DMGlobalToLocalEnd  (self.dm, vg.vec, im, vl.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def localToGlobal(self, Vec vl not None, Vec vg not None, addv=None):
+ *     def localToGlobal(self, Vec vl, Vec vg, addv=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_ERR(40, 121, __pyx_L1_error)
+  __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 == ((int)-1))) __PYX_ERR(40, 141, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":118
- *         return vl
+  /* "PETSc/DM.pyx":138
+ *         CHKERR( DMRestoreLocalVector(self.dm, &vl.vec) )
  * 
- *     def globalToLocal(self, Vec vg not None, Vec vl not None, addv=None):             # <<<<<<<<<<<<<<
+ *     def globalToLocal(self, Vec vg, Vec vl, addv=None):             # <<<<<<<<<<<<<<
  *         cdef PetscInsertMode im = insertmode(addv)
  *         CHKERR( DMGlobalToLocalBegin(self.dm, vg.vec, im, vl.vec) )
  */
@@ -200781,18 +215466,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_36globalToLocal(struct PyPetscDMO
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":123
+/* "PETSc/DM.pyx":143
  *         CHKERR( DMGlobalToLocalEnd  (self.dm, vg.vec, im, vl.vec) )
  * 
- *     def localToGlobal(self, Vec vl not None, Vec vg not None, addv=None):             # <<<<<<<<<<<<<<
+ *     def localToGlobal(self, Vec vl, Vec vg, 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_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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_47localToGlobal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_46localToGlobal[] = "DM.localToGlobal(self, Vec vl, Vec vg, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_47localToGlobal(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;
@@ -200808,8 +215493,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_39localToGlobal(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -200818,11 +215506,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_39localToGlobal(PyObject *__pyx_v
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vl)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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)
+          __Pyx_RaiseArgtupleInvalid("localToGlobal", 0, 2, 3, 1); __PYX_ERR(40, 143, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
@@ -200830,11 +215520,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_39localToGlobal(PyObject *__pyx_v
         }
       }
       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)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "localToGlobal") < 0)) __PYX_ERR(40, 143, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -200847,15 +215538,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_39localToGlobal(PyObject *__pyx_v
   }
   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_RaiseArgtupleInvalid("localToGlobal", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 143, __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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vl), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vl", 0))) __PYX_ERR(40, 143, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vg), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vg", 0))) __PYX_ERR(40, 143, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_46localToGlobal(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_vl, __pyx_v_vg, __pyx_v_addv);
 
   /* function exit code */
   goto __pyx_L0;
@@ -200866,7 +215557,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_39localToGlobal(PyObject *__pyx_v
   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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_46localToGlobal(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
@@ -200874,38 +215565,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_38localToGlobal(struct PyPetscDMO
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("localToGlobal", 0);
 
-  /* "PETSc/DM.pyx":124
+  /* "PETSc/DM.pyx":144
  * 
- *     def localToGlobal(self, Vec vl not None, Vec vg not None, addv=None):
+ *     def localToGlobal(self, Vec vl, Vec vg, 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_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)-1L))) __PYX_ERR(40, 124, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)((InsertMode)-1L)))) __PYX_ERR(40, 144, __pyx_L1_error)
   __pyx_v_im = __pyx_t_1;
 
-  /* "PETSc/DM.pyx":125
- *     def localToGlobal(self, Vec vl not None, Vec vg not None, addv=None):
+  /* "PETSc/DM.pyx":145
+ *     def localToGlobal(self, Vec vl, Vec vg, 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_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)
+  __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 == ((int)-1))) __PYX_ERR(40, 145, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":126
+  /* "PETSc/DM.pyx":146
  *         cdef PetscInsertMode im = insertmode(addv)
  *         CHKERR( DMLocalToGlobalBegin(self.dm, vl.vec, im, vg.vec) )
  *         CHKERR( DMLocalToGlobalEnd(self.dm, vl.vec, im, vg.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def localToLocal(self, Vec vl not None, Vec vlg not None, addv=None):
+ *     def localToLocal(self, Vec vl, Vec vlg, addv=None):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(40, 146, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":123
+  /* "PETSc/DM.pyx":143
  *         CHKERR( DMGlobalToLocalEnd  (self.dm, vg.vec, im, vl.vec) )
  * 
- *     def localToGlobal(self, Vec vl not None, Vec vg not None, addv=None):             # <<<<<<<<<<<<<<
+ *     def localToGlobal(self, Vec vl, Vec vg, addv=None):             # <<<<<<<<<<<<<<
  *         cdef PetscInsertMode im = insertmode(addv)
  *         CHKERR( DMLocalToGlobalBegin(self.dm, vl.vec, im, vg.vec) )
  */
@@ -200922,18 +215613,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_38localToGlobal(struct PyPetscDMO
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":128
+/* "PETSc/DM.pyx":148
  *         CHKERR( DMLocalToGlobalEnd(self.dm, vl.vec, im, vg.vec) )
  * 
- *     def localToLocal(self, Vec vl not None, Vec vlg not None, addv=None):             # <<<<<<<<<<<<<<
+ *     def localToLocal(self, Vec vl, Vec vlg, 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_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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_49localToLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_48localToLocal[] = "DM.localToLocal(self, Vec vl, Vec vlg, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_49localToLocal(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;
@@ -200949,8 +215640,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_41localToLocal(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -200959,11 +215653,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_41localToLocal(PyObject *__pyx_v_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vl)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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)
+          __Pyx_RaiseArgtupleInvalid("localToLocal", 0, 2, 3, 1); __PYX_ERR(40, 148, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
@@ -200971,11 +215667,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_41localToLocal(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "localToLocal") < 0)) __PYX_ERR(40, 128, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "localToLocal") < 0)) __PYX_ERR(40, 148, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -200988,15 +215685,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_41localToLocal(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("localToLocal", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 128, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("localToLocal", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 148, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DM.localToLocal", __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, 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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vl), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vl", 0))) __PYX_ERR(40, 148, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vlg), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vlg", 0))) __PYX_ERR(40, 148, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_48localToLocal(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_vl, __pyx_v_vlg, __pyx_v_addv);
 
   /* function exit code */
   goto __pyx_L0;
@@ -201007,7 +215704,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_41localToLocal(PyObject *__pyx_v_
   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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_48localToLocal(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
@@ -201015,38 +215712,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_40localToLocal(struct PyPetscDMOb
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("localToLocal", 0);
 
-  /* "PETSc/DM.pyx":129
+  /* "PETSc/DM.pyx":149
  * 
- *     def localToLocal(self, Vec vl not None, Vec vlg not None, addv=None):
+ *     def localToLocal(self, Vec vl, Vec vlg, 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_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)-1L))) __PYX_ERR(40, 129, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)((InsertMode)-1L)))) __PYX_ERR(40, 149, __pyx_L1_error)
   __pyx_v_im = __pyx_t_1;
 
-  /* "PETSc/DM.pyx":130
- *     def localToLocal(self, Vec vl not None, Vec vlg not None, addv=None):
+  /* "PETSc/DM.pyx":150
+ *     def localToLocal(self, Vec vl, Vec vlg, 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_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)
+  __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 == ((int)-1))) __PYX_ERR(40, 150, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":131
+  /* "PETSc/DM.pyx":151
  *         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):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(40, 151, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":128
+  /* "PETSc/DM.pyx":148
  *         CHKERR( DMLocalToGlobalEnd(self.dm, vl.vec, im, vg.vec) )
  * 
- *     def localToLocal(self, Vec vl not None, Vec vlg not None, addv=None):             # <<<<<<<<<<<<<<
+ *     def localToLocal(self, Vec vl, Vec vlg, addv=None):             # <<<<<<<<<<<<<<
  *         cdef PetscInsertMode im = insertmode(addv)
  *         CHKERR( DMLocalToLocalBegin(self.dm, vl.vec, im, vlg.vec) )
  */
@@ -201063,7 +215760,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_40localToLocal(struct PyPetscDMOb
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":133
+/* "PETSc/DM.pyx":153
  *         CHKERR( DMLocalToLocalEnd  (self.dm, vl.vec, im, vlg.vec) )
  * 
  *     def getLGMap(self):             # <<<<<<<<<<<<<<
@@ -201072,23 +215769,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_40localToLocal(struct PyPetscDMOb
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_51getLGMap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_50getLGMap[] = "DM.getLGMap(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_51getLGMap(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));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_50getLGMap(((struct PyPetscDMObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_42getLGMap(struct PyPetscDMObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_50getLGMap(struct PyPetscDMObject *__pyx_v_self) {
   struct PyPetscLGMapObject *__pyx_v_lgm = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -201096,28 +215793,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_42getLGMap(struct PyPetscDMObject
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getLGMap", 0);
 
-  /* "PETSc/DM.pyx":134
+  /* "PETSc/DM.pyx":154
  * 
  *     def getLGMap(self):
  *         cdef LGMap lgm = LGMap()             # <<<<<<<<<<<<<<
  *         CHKERR( DMGetLocalToGlobalMapping(self.dm, &lgm.lgm) )
  *         PetscINCREF(lgm.obj)
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_LGMap), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 154, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_lgm = ((struct PyPetscLGMapObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":135
+  /* "PETSc/DM.pyx":155
  *     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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetLocalToGlobalMapping(__pyx_v_self->dm, (&__pyx_v_lgm->lgm))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(40, 155, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":136
+  /* "PETSc/DM.pyx":156
  *         cdef LGMap lgm = LGMap()
  *         CHKERR( DMGetLocalToGlobalMapping(self.dm, &lgm.lgm) )
  *         PetscINCREF(lgm.obj)             # <<<<<<<<<<<<<<
@@ -201126,7 +215823,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_42getLGMap(struct PyPetscDMObject
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_lgm->__pyx_base.obj);
 
-  /* "PETSc/DM.pyx":137
+  /* "PETSc/DM.pyx":157
  *         CHKERR( DMGetLocalToGlobalMapping(self.dm, &lgm.lgm) )
  *         PetscINCREF(lgm.obj)
  *         return lgm             # <<<<<<<<<<<<<<
@@ -201138,7 +215835,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_42getLGMap(struct PyPetscDMObject
   __pyx_r = ((PyObject *)__pyx_v_lgm);
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":133
+  /* "PETSc/DM.pyx":153
  *         CHKERR( DMLocalToLocalEnd  (self.dm, vl.vec, im, vlg.vec) )
  * 
  *     def getLGMap(self):             # <<<<<<<<<<<<<<
@@ -201158,7 +215855,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_42getLGMap(struct PyPetscDMObject
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":141
+/* "PETSc/DM.pyx":161
  *     #
  * 
  *     def getCoordinateDM(self):             # <<<<<<<<<<<<<<
@@ -201167,23 +215864,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_42getLGMap(struct PyPetscDMObject
  */
 
 /* 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_53getCoordinateDM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_52getCoordinateDM[] = "DM.getCoordinateDM(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_53getCoordinateDM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   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_r = __pyx_pf_8petsc4py_5PETSc_2DM_52getCoordinateDM(((struct PyPetscDMObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_44getCoordinateDM(struct PyPetscDMObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_52getCoordinateDM(struct PyPetscDMObject *__pyx_v_self) {
   struct PyPetscDMObject *__pyx_v_cdm = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -201193,7 +215890,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_44getCoordinateDM(struct PyPetscD
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("getCoordinateDM", 0);
 
-  /* "PETSc/DM.pyx":142
+  /* "PETSc/DM.pyx":162
  * 
  *     def getCoordinateDM(self):
  *         cdef DM cdm = type(self)()             # <<<<<<<<<<<<<<
@@ -201202,7 +215899,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_44getCoordinateDM(struct PyPetscD
  */
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -201212,27 +215909,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_44getCoordinateDM(struct PyPetscD
     }
   }
   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_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 162, __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_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 162, __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)
+  if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(40, 162, __pyx_L1_error)
   __pyx_v_cdm = ((struct PyPetscDMObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":143
+  /* "PETSc/DM.pyx":163
  *     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)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetCoordinateDM(__pyx_v_self->dm, (&__pyx_v_cdm->dm))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(40, 163, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":144
+  /* "PETSc/DM.pyx":164
  *         cdef DM cdm = type(self)()
  *         CHKERR( DMGetCoordinateDM(self.dm, &cdm.dm) )
  *         PetscINCREF(cdm.obj)             # <<<<<<<<<<<<<<
@@ -201241,7 +215938,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_44getCoordinateDM(struct PyPetscD
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_cdm->__pyx_base.obj);
 
-  /* "PETSc/DM.pyx":145
+  /* "PETSc/DM.pyx":165
  *         CHKERR( DMGetCoordinateDM(self.dm, &cdm.dm) )
  *         PetscINCREF(cdm.obj)
  *         return cdm             # <<<<<<<<<<<<<<
@@ -201253,7 +215950,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_44getCoordinateDM(struct PyPetscD
   __pyx_r = ((PyObject *)__pyx_v_cdm);
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":141
+  /* "PETSc/DM.pyx":161
  *     #
  * 
  *     def getCoordinateDM(self):             # <<<<<<<<<<<<<<
@@ -201275,7 +215972,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_44getCoordinateDM(struct PyPetscD
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":147
+/* "PETSc/DM.pyx":167
  *         return cdm
  * 
  *     def getCoordinateSection(self):             # <<<<<<<<<<<<<<
@@ -201284,23 +215981,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_44getCoordinateDM(struct PyPetscD
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_55getCoordinateSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_54getCoordinateSection[] = "DM.getCoordinateSection(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_55getCoordinateSection(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));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_54getCoordinateSection(((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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_54getCoordinateSection(struct PyPetscDMObject *__pyx_v_self) {
   struct PyPetscSectionObject *__pyx_v_sec = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -201308,28 +216005,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_46getCoordinateSection(struct PyP
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getCoordinateSection", 0);
 
-  /* "PETSc/DM.pyx":148
+  /* "PETSc/DM.pyx":168
  * 
  *     def getCoordinateSection(self):
  *         cdef Section sec = Section()             # <<<<<<<<<<<<<<
  *         CHKERR( DMGetCoordinateSection(self.dm, &sec.sec) )
  *         PetscINCREF(sec.obj)
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Section), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 168, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_sec = ((struct PyPetscSectionObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":149
+  /* "PETSc/DM.pyx":169
  *     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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetCoordinateSection(__pyx_v_self->dm, (&__pyx_v_sec->sec))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(40, 169, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":150
+  /* "PETSc/DM.pyx":170
  *         cdef Section sec = Section()
  *         CHKERR( DMGetCoordinateSection(self.dm, &sec.sec) )
  *         PetscINCREF(sec.obj)             # <<<<<<<<<<<<<<
@@ -201338,19 +216035,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_46getCoordinateSection(struct PyP
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_sec->__pyx_base.obj);
 
-  /* "PETSc/DM.pyx":151
+  /* "PETSc/DM.pyx":171
  *         CHKERR( DMGetCoordinateSection(self.dm, &sec.sec) )
  *         PetscINCREF(sec.obj)
  *         return sec             # <<<<<<<<<<<<<<
  * 
- *     def setCoordinates(self, Vec c not None):
+ *     def setCoordinates(self, Vec c):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_sec));
   __pyx_r = ((PyObject *)__pyx_v_sec);
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":147
+  /* "PETSc/DM.pyx":167
  *         return cdm
  * 
  *     def getCoordinateSection(self):             # <<<<<<<<<<<<<<
@@ -201370,18 +216067,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_46getCoordinateSection(struct PyP
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":153
+/* "PETSc/DM.pyx":173
  *         return sec
  * 
- *     def setCoordinates(self, Vec c not None):             # <<<<<<<<<<<<<<
+ *     def setCoordinates(self, Vec c):             # <<<<<<<<<<<<<<
  *         CHKERR( DMSetCoordinates(self.dm, c.vec) )
  * 
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_57setCoordinates(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_56setCoordinates[] = "DM.setCoordinates(self, Vec c)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_57setCoordinates(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_c = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -201394,6 +216091,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_49setCoordinates(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -201404,7 +216102,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_49setCoordinates(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_ERR(40, 153, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCoordinates") < 0)) __PYX_ERR(40, 173, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -201415,14 +216113,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_49setCoordinates(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setCoordinates", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 153, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setCoordinates", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 173, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DM.setCoordinates", __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, 153, __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_c), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "c", 0))) __PYX_ERR(40, 173, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_56setCoordinates(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_c);
 
   /* function exit code */
   goto __pyx_L0;
@@ -201433,25 +216131,25 @@ 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_56setCoordinates(struct PyPetscDMObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_c) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setCoordinates", 0);
 
-  /* "PETSc/DM.pyx":154
+  /* "PETSc/DM.pyx":174
  * 
- *     def setCoordinates(self, Vec c not None):
+ *     def setCoordinates(self, Vec c):
  *         CHKERR( DMSetCoordinates(self.dm, c.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def getCoordinates(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_ERR(40, 154, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetCoordinates(__pyx_v_self->dm, __pyx_v_c->vec)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(40, 174, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":153
+  /* "PETSc/DM.pyx":173
  *         return sec
  * 
- *     def setCoordinates(self, Vec c not None):             # <<<<<<<<<<<<<<
+ *     def setCoordinates(self, Vec c):             # <<<<<<<<<<<<<<
  *         CHKERR( DMSetCoordinates(self.dm, c.vec) )
  * 
  */
@@ -201468,7 +216166,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_48setCoordinates(struct PyPetscDM
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":156
+/* "PETSc/DM.pyx":176
  *         CHKERR( DMSetCoordinates(self.dm, c.vec) )
  * 
  *     def getCoordinates(self):             # <<<<<<<<<<<<<<
@@ -201477,23 +216175,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_48setCoordinates(struct PyPetscDM
  */
 
 /* 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_59getCoordinates(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_58getCoordinates[] = "DM.getCoordinates(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_59getCoordinates(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));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_58getCoordinates(((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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_58getCoordinates(struct PyPetscDMObject *__pyx_v_self) {
   struct PyPetscVecObject *__pyx_v_c = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -201501,28 +216199,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_50getCoordinates(struct PyPetscDM
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getCoordinates", 0);
 
-  /* "PETSc/DM.pyx":157
+  /* "PETSc/DM.pyx":177
  * 
  *     def getCoordinates(self):
  *         cdef Vec c = Vec()             # <<<<<<<<<<<<<<
  *         CHKERR( DMGetCoordinates(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, 157, __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, 177, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_c = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":158
+  /* "PETSc/DM.pyx":178
  *     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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetCoordinates(__pyx_v_self->dm, (&__pyx_v_c->vec))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(40, 178, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":159
+  /* "PETSc/DM.pyx":179
  *         cdef Vec c = Vec()
  *         CHKERR( DMGetCoordinates(self.dm, &c.vec) )
  *         PetscINCREF(c.obj)             # <<<<<<<<<<<<<<
@@ -201531,19 +216229,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_50getCoordinates(struct PyPetscDM
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_c->__pyx_base.obj);
 
-  /* "PETSc/DM.pyx":160
+  /* "PETSc/DM.pyx":180
  *         CHKERR( DMGetCoordinates(self.dm, &c.vec) )
  *         PetscINCREF(c.obj)
  *         return c             # <<<<<<<<<<<<<<
  * 
- *     def setCoordinatesLocal(self, Vec c not None):
+ *     def setCoordinatesLocal(self, Vec c):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_c));
   __pyx_r = ((PyObject *)__pyx_v_c);
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":156
+  /* "PETSc/DM.pyx":176
  *         CHKERR( DMSetCoordinates(self.dm, c.vec) )
  * 
  *     def getCoordinates(self):             # <<<<<<<<<<<<<<
@@ -201563,18 +216261,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_50getCoordinates(struct PyPetscDM
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":162
+/* "PETSc/DM.pyx":182
  *         return c
  * 
- *     def setCoordinatesLocal(self, Vec c not None):             # <<<<<<<<<<<<<<
+ *     def setCoordinatesLocal(self, Vec c):             # <<<<<<<<<<<<<<
  *         CHKERR( DMSetCoordinatesLocal(self.dm, c.vec) )
  * 
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_61setCoordinatesLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_60setCoordinatesLocal[] = "DM.setCoordinatesLocal(self, Vec c)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_61setCoordinatesLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscVecObject *__pyx_v_c = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -201587,6 +216285,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_53setCoordinatesLocal(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -201597,7 +216296,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_53setCoordinatesLocal(PyObject *_
         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)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCoordinatesLocal") < 0)) __PYX_ERR(40, 182, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -201608,14 +216307,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_53setCoordinatesLocal(PyObject *_
   }
   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_RaiseArgtupleInvalid("setCoordinatesLocal", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 182, __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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_c), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "c", 0))) __PYX_ERR(40, 182, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_60setCoordinatesLocal(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_c);
 
   /* function exit code */
   goto __pyx_L0;
@@ -201626,25 +216325,25 @@ 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_60setCoordinatesLocal(struct PyPetscDMObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_c) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setCoordinatesLocal", 0);
 
-  /* "PETSc/DM.pyx":163
+  /* "PETSc/DM.pyx":183
  * 
- *     def setCoordinatesLocal(self, Vec c not None):
+ *     def setCoordinatesLocal(self, Vec c):
  *         CHKERR( DMSetCoordinatesLocal(self.dm, c.vec) )             # <<<<<<<<<<<<<<
  * 
  *     def getCoordinatesLocal(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_ERR(40, 163, __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 == ((int)-1))) __PYX_ERR(40, 183, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":162
+  /* "PETSc/DM.pyx":182
  *         return c
  * 
- *     def setCoordinatesLocal(self, Vec c not None):             # <<<<<<<<<<<<<<
+ *     def setCoordinatesLocal(self, Vec c):             # <<<<<<<<<<<<<<
  *         CHKERR( DMSetCoordinatesLocal(self.dm, c.vec) )
  * 
  */
@@ -201661,7 +216360,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_52setCoordinatesLocal(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":165
+/* "PETSc/DM.pyx":185
  *         CHKERR( DMSetCoordinatesLocal(self.dm, c.vec) )
  * 
  *     def getCoordinatesLocal(self):             # <<<<<<<<<<<<<<
@@ -201670,23 +216369,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_52setCoordinatesLocal(struct PyPe
  */
 
 /* 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_63getCoordinatesLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_62getCoordinatesLocal[] = "DM.getCoordinatesLocal(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_63getCoordinatesLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("getCoordinatesLocal (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_r = __pyx_pf_8petsc4py_5PETSc_2DM_62getCoordinatesLocal(((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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_62getCoordinatesLocal(struct PyPetscDMObject *__pyx_v_self) {
   struct PyPetscVecObject *__pyx_v_c = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -201694,28 +216393,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_54getCoordinatesLocal(struct PyPe
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getCoordinatesLocal", 0);
 
-  /* "PETSc/DM.pyx":166
+  /* "PETSc/DM.pyx":186
  * 
  *     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_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_c = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":167
+  /* "PETSc/DM.pyx":187
  *     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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetCoordinatesLocal(__pyx_v_self->dm, (&__pyx_v_c->vec))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(40, 187, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":168
+  /* "PETSc/DM.pyx":188
  *         cdef Vec c = Vec()
  *         CHKERR( DMGetCoordinatesLocal(self.dm, &c.vec) )
  *         PetscINCREF(c.obj)             # <<<<<<<<<<<<<<
@@ -201724,7 +216423,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_54getCoordinatesLocal(struct PyPe
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_c->__pyx_base.obj);
 
-  /* "PETSc/DM.pyx":169
+  /* "PETSc/DM.pyx":189
  *         CHKERR( DMGetCoordinatesLocal(self.dm, &c.vec) )
  *         PetscINCREF(c.obj)
  *         return c             # <<<<<<<<<<<<<<
@@ -201736,7 +216435,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_54getCoordinatesLocal(struct PyPe
   __pyx_r = ((PyObject *)__pyx_v_c);
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":165
+  /* "PETSc/DM.pyx":185
  *         CHKERR( DMSetCoordinatesLocal(self.dm, c.vec) )
  * 
  *     def getCoordinatesLocal(self):             # <<<<<<<<<<<<<<
@@ -201756,7 +216455,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_54getCoordinatesLocal(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":173
+/* "PETSc/DM.pyx":193
  *     #
  * 
  *     def setMatType(self, mat_type):             # <<<<<<<<<<<<<<
@@ -201765,9 +216464,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_54getCoordinatesLocal(struct PyPe
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_65setMatType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_64setMatType[] = "DM.setMatType(self, mat_type)\nSet matrix type to be used by DM.createMat";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_65setMatType(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_mat_type = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -201780,6 +216479,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_57setMatType(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -201790,7 +216490,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_57setMatType(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, "setMatType") < 0)) __PYX_ERR(40, 173, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMatType") < 0)) __PYX_ERR(40, 193, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -201801,20 +216501,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_57setMatType(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setMatType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 173, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setMatType", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 193, __pyx_L3_error)
   __pyx_L3_error:;
   __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_56setMatType(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_mat_type);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_64setMatType(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_mat_type);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_56setMatType(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_mat_type) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_64setMatType(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_mat_type) {
   const char* __pyx_v_mtype;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -201823,7 +216523,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_56setMatType(struct PyPetscDMObje
   __Pyx_RefNannySetupContext("setMatType", 0);
   __Pyx_INCREF(__pyx_v_mat_type);
 
-  /* "PETSc/DM.pyx":175
+  /* "PETSc/DM.pyx":195
  *     def setMatType(self, mat_type):
  *         """Set matrix type to be used by DM.createMat"""
  *         cdef PetscMatType mtype = NULL             # <<<<<<<<<<<<<<
@@ -201832,28 +216532,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_56setMatType(struct PyPetscDMObje
  */
   __pyx_v_mtype = NULL;
 
-  /* "PETSc/DM.pyx":176
+  /* "PETSc/DM.pyx":196
  *         """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_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_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_mat_type, (&__pyx_v_mtype)); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 196, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_mat_type, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":177
+  /* "PETSc/DM.pyx":197
  *         cdef PetscMatType mtype = NULL
  *         mat_type = str2bytes(mat_type, &mtype)
  *         CHKERR( DMSetMatType(self.dm, mtype) )             # <<<<<<<<<<<<<<
  * 
  *     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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetMatType(__pyx_v_self->dm, __pyx_v_mtype)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(40, 197, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":173
+  /* "PETSc/DM.pyx":193
  *     #
  * 
  *     def setMatType(self, mat_type):             # <<<<<<<<<<<<<<
@@ -201875,7 +216575,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_56setMatType(struct PyPetscDMObje
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":179
+/* "PETSc/DM.pyx":199
  *         CHKERR( DMSetMatType(self.dm, mtype) )
  * 
  *     def createMat(self):             # <<<<<<<<<<<<<<
@@ -201884,23 +216584,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_56setMatType(struct PyPetscDMObje
  */
 
 /* 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_67createMat(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_66createMat[] = "DM.createMat(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_67createMat(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __Pyx_RefNannySetupContext("createMat (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_r = __pyx_pf_8petsc4py_5PETSc_2DM_66createMat(((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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_66createMat(struct PyPetscDMObject *__pyx_v_self) {
   struct PyPetscMatObject *__pyx_v_mat = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -201908,40 +216608,40 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_58createMat(struct PyPetscDMObjec
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("createMat", 0);
 
-  /* "PETSc/DM.pyx":180
+  /* "PETSc/DM.pyx":200
  * 
  *     def createMat(self):
  *         cdef Mat mat = Mat()             # <<<<<<<<<<<<<<
  *         CHKERR( DMCreateMatrix(self.dm, &mat.mat) )
  *         return mat
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 200, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_mat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":181
+  /* "PETSc/DM.pyx":201
  *     def createMat(self):
  *         cdef Mat mat = Mat()
  *         CHKERR( DMCreateMatrix(self.dm, &mat.mat) )             # <<<<<<<<<<<<<<
  *         return mat
  * 
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCreateMatrix(__pyx_v_self->dm, (&__pyx_v_mat->mat))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(40, 201, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":182
+  /* "PETSc/DM.pyx":202
  *         cdef Mat mat = Mat()
  *         CHKERR( DMCreateMatrix(self.dm, &mat.mat) )
  *         return mat             # <<<<<<<<<<<<<<
  * 
- *     def createInterpolation(self, DM dm not None):
+ *     def createInterpolation(self, DM dm):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_mat));
   __pyx_r = ((PyObject *)__pyx_v_mat);
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":179
+  /* "PETSc/DM.pyx":199
  *         CHKERR( DMSetMatType(self.dm, mtype) )
  * 
  *     def createMat(self):             # <<<<<<<<<<<<<<
@@ -201961,18 +216661,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_58createMat(struct PyPetscDMObjec
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":184
+/* "PETSc/DM.pyx":204
  *         return mat
  * 
- *     def createInterpolation(self, DM dm not None):             # <<<<<<<<<<<<<<
+ *     def createInterpolation(self, DM dm):             # <<<<<<<<<<<<<<
  *         cdef Mat A = Mat()
  *         cdef Vec scale = Vec()
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_69createInterpolation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_68createInterpolation[] = "DM.createInterpolation(self, DM dm)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_69createInterpolation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscDMObject *__pyx_v_dm = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -201985,6 +216685,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_61createInterpolation(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -201995,7 +216696,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_61createInterpolation(PyObject *_
         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)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createInterpolation") < 0)) __PYX_ERR(40, 204, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -202006,14 +216707,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_61createInterpolation(PyObject *_
   }
   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_RaiseArgtupleInvalid("createInterpolation", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 204, __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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dm), __pyx_ptype_8petsc4py_5PETSc_DM, 0, "dm", 0))) __PYX_ERR(40, 204, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_68createInterpolation(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_dm);
 
   /* function exit code */
   goto __pyx_L0;
@@ -202024,7 +216725,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_61createInterpolation(PyObject *_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_60createInterpolation(struct PyPetscDMObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_68createInterpolation(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;
@@ -202033,48 +216734,48 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_60createInterpolation(struct PyPe
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("createInterpolation", 0);
 
-  /* "PETSc/DM.pyx":185
+  /* "PETSc/DM.pyx":205
  * 
- *     def createInterpolation(self, DM dm not None):
+ *     def createInterpolation(self, DM dm):
  *         cdef Mat A = Mat()             # <<<<<<<<<<<<<<
  *         cdef Vec scale = Vec()
  *         CHKERR( DMCreateInterpolation(self.dm, dm.dm,
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 205, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_A = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":186
- *     def createInterpolation(self, DM dm not None):
+  /* "PETSc/DM.pyx":206
+ *     def createInterpolation(self, DM dm):
  *         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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 206, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_scale = ((struct PyPetscVecObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":187
+  /* "PETSc/DM.pyx":207
  *         cdef Mat A = Mat()
  *         cdef Vec scale = Vec()
  *         CHKERR( DMCreateInterpolation(self.dm, dm.dm,             # <<<<<<<<<<<<<<
  *                                    &A.mat, &scale.vec))
  *         return(A, scale)
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(40, 207, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":189
+  /* "PETSc/DM.pyx":209
  *         CHKERR( DMCreateInterpolation(self.dm, dm.dm,
  *                                    &A.mat, &scale.vec))
  *         return(A, scale)             # <<<<<<<<<<<<<<
  * 
- *     def createInjection(self, DM dm not None):
+ *     def createInjection(self, DM dm):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 189, __pyx_L1_error)
+  __pyx_t_1 = PyTuple_New(2); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 209, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_INCREF(((PyObject *)__pyx_v_A));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_A));
@@ -202086,10 +216787,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_60createInterpolation(struct PyPe
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":184
+  /* "PETSc/DM.pyx":204
  *         return mat
  * 
- *     def createInterpolation(self, DM dm not None):             # <<<<<<<<<<<<<<
+ *     def createInterpolation(self, DM dm):             # <<<<<<<<<<<<<<
  *         cdef Mat A = Mat()
  *         cdef Vec scale = Vec()
  */
@@ -202107,18 +216808,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_60createInterpolation(struct PyPe
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":191
+/* "PETSc/DM.pyx":211
  *         return(A, scale)
  * 
- *     def createInjection(self, DM dm not None):             # <<<<<<<<<<<<<<
+ *     def createInjection(self, DM dm):             # <<<<<<<<<<<<<<
  *         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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_71createInjection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_70createInjection[] = "DM.createInjection(self, DM dm)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_71createInjection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscDMObject *__pyx_v_dm = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -202131,6 +216832,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_63createInjection(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -202141,7 +216843,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_63createInjection(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, "createInjection") < 0)) __PYX_ERR(40, 191, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createInjection") < 0)) __PYX_ERR(40, 211, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -202152,14 +216854,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_63createInjection(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createInjection", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 191, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createInjection", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 211, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DM.createInjection", __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, 191, __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_dm), __pyx_ptype_8petsc4py_5PETSc_DM, 0, "dm", 0))) __PYX_ERR(40, 211, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_70createInjection(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_dm);
 
   /* function exit code */
   goto __pyx_L0;
@@ -202170,7 +216872,7 @@ 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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_70createInjection(struct PyPetscDMObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm) {
   struct PyPetscMatObject *__pyx_v_inject = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -202178,43 +216880,43 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_62createInjection(struct PyPetscD
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("createInjection", 0);
 
-  /* "PETSc/DM.pyx":192
+  /* "PETSc/DM.pyx":212
  * 
- *     def createInjection(self, DM dm not None):
+ *     def createInjection(self, DM dm):
  *         cdef Mat inject = Mat()             # <<<<<<<<<<<<<<
  *         CHKERR( DMCreateInjection(self.dm, dm.dm, &inject.mat) )
  *         return inject
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 212, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_inject = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":193
- *     def createInjection(self, DM dm not None):
+  /* "PETSc/DM.pyx":213
+ *     def createInjection(self, DM dm):
  *         cdef Mat inject = Mat()
  *         CHKERR( DMCreateInjection(self.dm, dm.dm, &inject.mat) )             # <<<<<<<<<<<<<<
  *         return inject
  * 
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(40, 213, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":194
+  /* "PETSc/DM.pyx":214
  *         cdef Mat inject = Mat()
  *         CHKERR( DMCreateInjection(self.dm, dm.dm, &inject.mat) )
  *         return inject             # <<<<<<<<<<<<<<
  * 
- *     def createAggregates(self, DM dm not None):
+ *     def createAggregates(self, DM dm):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_inject));
   __pyx_r = ((PyObject *)__pyx_v_inject);
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":191
+  /* "PETSc/DM.pyx":211
  *         return(A, scale)
  * 
- *     def createInjection(self, DM dm not None):             # <<<<<<<<<<<<<<
+ *     def createInjection(self, DM dm):             # <<<<<<<<<<<<<<
  *         cdef Mat inject = Mat()
  *         CHKERR( DMCreateInjection(self.dm, dm.dm, &inject.mat) )
  */
@@ -202231,18 +216933,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_62createInjection(struct PyPetscD
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":196
+/* "PETSc/DM.pyx":216
  *         return inject
  * 
- *     def createAggregates(self, DM dm not None):             # <<<<<<<<<<<<<<
+ *     def createAggregates(self, DM dm):             # <<<<<<<<<<<<<<
  *         cdef Mat mat = Mat()
  *         CHKERR( DMCreateAggregates(self.dm, dm.dm, &mat.mat) )
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_73createAggregates(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_72createAggregates[] = "DM.createAggregates(self, DM dm)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_73createAggregates(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscDMObject *__pyx_v_dm = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -202255,6 +216957,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_65createAggregates(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -202265,7 +216968,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_65createAggregates(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, "createAggregates") < 0)) __PYX_ERR(40, 196, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createAggregates") < 0)) __PYX_ERR(40, 216, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -202276,14 +216979,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_65createAggregates(PyObject *__py
   }
   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_RaiseArgtupleInvalid("createAggregates", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 216, __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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_dm), __pyx_ptype_8petsc4py_5PETSc_DM, 0, "dm", 0))) __PYX_ERR(40, 216, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_72createAggregates(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_dm);
 
   /* function exit code */
   goto __pyx_L0;
@@ -202294,7 +216997,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_65createAggregates(PyObject *__py
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_64createAggregates(struct PyPetscDMObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_72createAggregates(struct PyPetscDMObject *__pyx_v_self, struct PyPetscDMObject *__pyx_v_dm) {
   struct PyPetscMatObject *__pyx_v_mat = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -202302,28 +217005,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_64createAggregates(struct PyPetsc
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("createAggregates", 0);
 
-  /* "PETSc/DM.pyx":197
+  /* "PETSc/DM.pyx":217
  * 
- *     def createAggregates(self, DM dm not None):
+ *     def createAggregates(self, DM dm):
  *         cdef Mat mat = Mat()             # <<<<<<<<<<<<<<
  *         CHKERR( DMCreateAggregates(self.dm, dm.dm, &mat.mat) )
  *         return mat
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 217, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_mat = ((struct PyPetscMatObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":198
- *     def createAggregates(self, DM dm not None):
+  /* "PETSc/DM.pyx":218
+ *     def createAggregates(self, DM dm):
  *         cdef Mat mat = Mat()
  *         CHKERR( DMCreateAggregates(self.dm, dm.dm, &mat.mat) )             # <<<<<<<<<<<<<<
  *         return mat
  * 
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(40, 218, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":199
+  /* "PETSc/DM.pyx":219
  *         cdef Mat mat = Mat()
  *         CHKERR( DMCreateAggregates(self.dm, dm.dm, &mat.mat) )
  *         return mat             # <<<<<<<<<<<<<<
@@ -202335,10 +217038,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_64createAggregates(struct PyPetsc
   __pyx_r = ((PyObject *)__pyx_v_mat);
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":196
+  /* "PETSc/DM.pyx":216
  *         return inject
  * 
- *     def createAggregates(self, DM dm not None):             # <<<<<<<<<<<<<<
+ *     def createAggregates(self, DM dm):             # <<<<<<<<<<<<<<
  *         cdef Mat mat = Mat()
  *         CHKERR( DMCreateAggregates(self.dm, dm.dm, &mat.mat) )
  */
@@ -202355,7 +217058,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_64createAggregates(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":201
+/* "PETSc/DM.pyx":221
  *         return mat
  * 
  *     def convert(self, dm_type):             # <<<<<<<<<<<<<<
@@ -202364,9 +217067,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_64createAggregates(struct PyPetsc
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_75convert(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_74convert[] = "DM.convert(self, dm_type)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_75convert(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_dm_type = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -202379,6 +217082,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_67convert(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -202389,7 +217093,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_67convert(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, "convert") < 0)) __PYX_ERR(40, 201, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "convert") < 0)) __PYX_ERR(40, 221, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -202400,20 +217104,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_67convert(PyObject *__pyx_v_self,
   }
   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_RaiseArgtupleInvalid("convert", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 221, __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);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_74convert(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_dm_type);
 
   /* 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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_74convert(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;
@@ -202425,7 +217129,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_66convert(struct PyPetscDMObject
   __Pyx_RefNannySetupContext("convert", 0);
   __Pyx_INCREF(__pyx_v_dm_type);
 
-  /* "PETSc/DM.pyx":202
+  /* "PETSc/DM.pyx":222
  * 
  *     def convert(self, dm_type):
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -202434,19 +217138,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_66convert(struct PyPetscDMObject
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/DM.pyx":203
+  /* "PETSc/DM.pyx":223
  *     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_ERR(40, 203, __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, 223, __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
+  /* "PETSc/DM.pyx":224
  *         cdef const_char *cval = NULL
  *         dm_type = str2bytes(dm_type, &cval)
  *         cdef PetscDM newdm = NULL             # <<<<<<<<<<<<<<
@@ -202455,25 +217159,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_66convert(struct PyPetscDMObject
  */
   __pyx_v_newdm = NULL;
 
-  /* "PETSc/DM.pyx":205
+  /* "PETSc/DM.pyx":225
  *         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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMConvert(__pyx_v_self->dm, __pyx_v_cval, (&__pyx_v_newdm))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(40, 225, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":206
+  /* "PETSc/DM.pyx":226
  *         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_t_1 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_newdm)); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 226, __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_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 226, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   __pyx_t_1 = __pyx_t_3;
@@ -202482,7 +217186,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_66convert(struct PyPetscDMObject
   __pyx_v_dm = ((struct PyPetscDMObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":207
+  /* "PETSc/DM.pyx":227
  *         CHKERR( DMConvert(self.dm, cval, &newdm) )
  *         cdef DM dm = <DM>subtype_DM(newdm)()
  *         dm.dm = newdm             # <<<<<<<<<<<<<<
@@ -202491,7 +217195,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_66convert(struct PyPetscDMObject
  */
   __pyx_v_dm->dm = __pyx_v_newdm;
 
-  /* "PETSc/DM.pyx":208
+  /* "PETSc/DM.pyx":228
  *         cdef DM dm = <DM>subtype_DM(newdm)()
  *         dm.dm = newdm
  *         return dm             # <<<<<<<<<<<<<<
@@ -202503,7 +217207,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_66convert(struct PyPetscDMObject
   __pyx_r = ((PyObject *)__pyx_v_dm);
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":201
+  /* "PETSc/DM.pyx":221
  *         return mat
  * 
  *     def convert(self, dm_type):             # <<<<<<<<<<<<<<
@@ -202525,7 +217229,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_66convert(struct PyPetscDMObject
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":210
+/* "PETSc/DM.pyx":230
  *         return dm
  * 
  *     def refine(self, comm=None):             # <<<<<<<<<<<<<<
@@ -202534,9 +217238,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_66convert(struct PyPetscDMObject
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_77refine(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_76refine[] = "DM.refine(self, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_77refine(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_comm = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -202550,6 +217254,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_69refine(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -202562,11 +217267,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_69refine(PyObject *__pyx_v_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "refine") < 0)) __PYX_ERR(40, 210, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "refine") < 0)) __PYX_ERR(40, 230, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -202575,20 +217281,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_69refine(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("refine", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 210, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("refine", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 230, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DM.refine", __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_76refine(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_comm);
 
   /* 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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_76refine(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_comm) {
   MPI_Comm __pyx_v_dmcomm;
   DM __pyx_v_newdm;
   struct PyPetscDMObject *__pyx_v_dm = 0;
@@ -202600,7 +217306,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_68refine(struct PyPetscDMObject *
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("refine", 0);
 
-  /* "PETSc/DM.pyx":211
+  /* "PETSc/DM.pyx":231
  * 
  *     def refine(self, comm=None):
  *         cdef MPI_Comm dmcomm = MPI_COMM_NULL             # <<<<<<<<<<<<<<
@@ -202609,26 +217315,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_68refine(struct PyPetscDMObject *
  */
   __pyx_v_dmcomm = MPI_COMM_NULL;
 
-  /* "PETSc/DM.pyx":212
+  /* "PETSc/DM.pyx":232
  *     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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetComm(((PetscObject)__pyx_v_self->dm), (&__pyx_v_dmcomm))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(40, 232, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":213
+  /* "PETSc/DM.pyx":233
  *         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_t_2 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_dmcomm); if (unlikely(PyErr_Occurred())) __PYX_ERR(40, 233, __pyx_L1_error)
   __pyx_v_dmcomm = __pyx_t_2;
 
-  /* "PETSc/DM.pyx":214
+  /* "PETSc/DM.pyx":234
  *         CHKERR( PetscObjectGetComm(<PetscObject>self.dm, &dmcomm) )
  *         dmcomm = def_Comm(comm, dmcomm)
  *         cdef PetscDM newdm = NULL             # <<<<<<<<<<<<<<
@@ -202637,32 +217343,32 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_68refine(struct PyPetscDMObject *
  */
   __pyx_v_newdm = NULL;
 
-  /* "PETSc/DM.pyx":215
+  /* "PETSc/DM.pyx":235
  *         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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMRefine(__pyx_v_self->dm, __pyx_v_dmcomm, (&__pyx_v_newdm))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(40, 235, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":216
+  /* "PETSc/DM.pyx":236
  *         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_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_newdm)); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 236, __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_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(40, 236, __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)
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(40, 236, __pyx_L1_error)
   __pyx_v_dm = ((struct PyPetscDMObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "PETSc/DM.pyx":217
+  /* "PETSc/DM.pyx":237
  *         CHKERR( DMRefine(self.dm, dmcomm, &newdm) )
  *         cdef DM dm = subtype_DM(newdm)()
  *         dm.dm = newdm             # <<<<<<<<<<<<<<
@@ -202671,7 +217377,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_68refine(struct PyPetscDMObject *
  */
   __pyx_v_dm->dm = __pyx_v_newdm;
 
-  /* "PETSc/DM.pyx":218
+  /* "PETSc/DM.pyx":238
  *         cdef DM dm = subtype_DM(newdm)()
  *         dm.dm = newdm
  *         return dm             # <<<<<<<<<<<<<<
@@ -202683,7 +217389,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_68refine(struct PyPetscDMObject *
   __pyx_r = ((PyObject *)__pyx_v_dm);
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":210
+  /* "PETSc/DM.pyx":230
  *         return dm
  * 
  *     def refine(self, comm=None):             # <<<<<<<<<<<<<<
@@ -202704,7 +217410,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_68refine(struct PyPetscDMObject *
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":220
+/* "PETSc/DM.pyx":240
  *         return dm
  * 
  *     def coarsen(self, comm=None):             # <<<<<<<<<<<<<<
@@ -202713,9 +217419,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_68refine(struct PyPetscDMObject *
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_79coarsen(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_78coarsen[] = "DM.coarsen(self, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_79coarsen(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_comm = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -202729,6 +217435,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_71coarsen(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -202741,11 +217448,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_71coarsen(PyObject *__pyx_v_self,
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "coarsen") < 0)) __PYX_ERR(40, 220, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "coarsen") < 0)) __PYX_ERR(40, 240, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -202754,20 +217462,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_71coarsen(PyObject *__pyx_v_self,
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("coarsen", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 220, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("coarsen", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 240, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DM.coarsen", __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_78coarsen(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_comm);
 
   /* 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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_78coarsen(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_comm) {
   MPI_Comm __pyx_v_dmcomm;
   DM __pyx_v_newdm;
   struct PyPetscDMObject *__pyx_v_dm = 0;
@@ -202779,7 +217487,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_70coarsen(struct PyPetscDMObject
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("coarsen", 0);
 
-  /* "PETSc/DM.pyx":221
+  /* "PETSc/DM.pyx":241
  * 
  *     def coarsen(self, comm=None):
  *         cdef MPI_Comm dmcomm = MPI_COMM_NULL             # <<<<<<<<<<<<<<
@@ -202788,26 +217496,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_70coarsen(struct PyPetscDMObject
  */
   __pyx_v_dmcomm = MPI_COMM_NULL;
 
-  /* "PETSc/DM.pyx":222
+  /* "PETSc/DM.pyx":242
  *     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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetComm(((PetscObject)__pyx_v_self->dm), (&__pyx_v_dmcomm))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(40, 242, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":223
+  /* "PETSc/DM.pyx":243
  *         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_t_2 = __pyx_f_8petsc4py_5PETSc_def_Comm(__pyx_v_comm, __pyx_v_dmcomm); if (unlikely(PyErr_Occurred())) __PYX_ERR(40, 243, __pyx_L1_error)
   __pyx_v_dmcomm = __pyx_t_2;
 
-  /* "PETSc/DM.pyx":224
+  /* "PETSc/DM.pyx":244
  *         CHKERR( PetscObjectGetComm(<PetscObject>self.dm, &dmcomm) )
  *         dmcomm = def_Comm(comm, dmcomm)
  *         cdef PetscDM newdm = NULL             # <<<<<<<<<<<<<<
@@ -202816,32 +217524,32 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_70coarsen(struct PyPetscDMObject
  */
   __pyx_v_newdm = NULL;
 
-  /* "PETSc/DM.pyx":225
+  /* "PETSc/DM.pyx":245
  *         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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCoarsen(__pyx_v_self->dm, __pyx_v_dmcomm, (&__pyx_v_newdm))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(40, 245, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":226
+  /* "PETSc/DM.pyx":246
  *         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_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM(__pyx_v_newdm)); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 246, __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_t_4 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(40, 246, __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)
+  if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(40, 246, __pyx_L1_error)
   __pyx_v_dm = ((struct PyPetscDMObject *)__pyx_t_4);
   __pyx_t_4 = 0;
 
-  /* "PETSc/DM.pyx":227
+  /* "PETSc/DM.pyx":247
  *         CHKERR( DMCoarsen(self.dm, dmcomm, &newdm) )
  *         cdef DM dm = subtype_DM(newdm)()
  *         dm.dm = newdm             # <<<<<<<<<<<<<<
@@ -202850,7 +217558,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_70coarsen(struct PyPetscDMObject
  */
   __pyx_v_dm->dm = __pyx_v_newdm;
 
-  /* "PETSc/DM.pyx":228
+  /* "PETSc/DM.pyx":248
  *         cdef DM dm = subtype_DM(newdm)()
  *         dm.dm = newdm
  *         return dm             # <<<<<<<<<<<<<<
@@ -202862,7 +217570,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_70coarsen(struct PyPetscDMObject
   __pyx_r = ((PyObject *)__pyx_v_dm);
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":220
+  /* "PETSc/DM.pyx":240
  *         return dm
  * 
  *     def coarsen(self, comm=None):             # <<<<<<<<<<<<<<
@@ -202883,7 +217591,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_70coarsen(struct PyPetscDMObject
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":230
+/* "PETSc/DM.pyx":250
  *         return dm
  * 
  *     def refineHierarchy(self, nlevels):             # <<<<<<<<<<<<<<
@@ -202892,9 +217600,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_70coarsen(struct PyPetscDMObject
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_81refineHierarchy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_80refineHierarchy[] = "DM.refineHierarchy(self, nlevels)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_81refineHierarchy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_nlevels = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -202907,6 +217615,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_73refineHierarchy(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -202917,7 +217626,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_73refineHierarchy(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, "refineHierarchy") < 0)) __PYX_ERR(40, 230, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "refineHierarchy") < 0)) __PYX_ERR(40, 250, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -202928,20 +217637,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_73refineHierarchy(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("refineHierarchy", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 230, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("refineHierarchy", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 250, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DM.refineHierarchy", __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_80refineHierarchy(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_nlevels);
 
   /* 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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_80refineHierarchy(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_nlevels) {
   PetscInt __pyx_v_i;
   PetscInt __pyx_v_n;
   DM *__pyx_v_newdmf;
@@ -202957,17 +217666,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_72refineHierarchy(struct PyPetscD
   int __pyx_t_5;
   __Pyx_RefNannySetupContext("refineHierarchy", 0);
 
-  /* "PETSc/DM.pyx":231
+  /* "PETSc/DM.pyx":251
  * 
  *     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_asInt(__pyx_v_nlevels); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(40, 231, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_nlevels); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(40, 251, __pyx_L1_error)
   __pyx_v_n = __pyx_t_1;
 
-  /* "PETSc/DM.pyx":232
+  /* "PETSc/DM.pyx":252
  *     def refineHierarchy(self, nlevels):
  *         cdef PetscInt i, n = asInt(nlevels)
  *         cdef PetscDM *newdmf = NULL             # <<<<<<<<<<<<<<
@@ -202976,31 +217685,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_72refineHierarchy(struct PyPetscD
  */
   __pyx_v_newdmf = NULL;
 
-  /* "PETSc/DM.pyx":233
+  /* "PETSc/DM.pyx":253
  *         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 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_n)); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 233, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_n)); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 253, __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_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, 253, __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
+  /* "PETSc/DM.pyx":254
  *         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)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMRefineHierarchy(__pyx_v_self->dm, __pyx_v_n, __pyx_v_newdmf)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(40, 254, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":235
+  /* "PETSc/DM.pyx":255
  *         cdef object tmp = oarray_p(empty_p(n), NULL, <void**>&newdmf)
  *         CHKERR( DMRefineHierarchy(self.dm, n, newdmf) )
  *         cdef DM dmf = None             # <<<<<<<<<<<<<<
@@ -203010,19 +217719,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_72refineHierarchy(struct PyPetscD
   __Pyx_INCREF(Py_None);
   __pyx_v_dmf = ((struct PyPetscDMObject *)Py_None);
 
-  /* "PETSc/DM.pyx":236
+  /* "PETSc/DM.pyx":256
  *         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_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 256, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_hierarchy = ((PyObject*)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/DM.pyx":237
+  /* "PETSc/DM.pyx":257
  *         cdef DM dmf = None
  *         cdef list hierarchy = []
  *         for i from 0 <= i < n:             # <<<<<<<<<<<<<<
@@ -203032,23 +217741,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_72refineHierarchy(struct PyPetscD
   __pyx_t_1 = __pyx_v_n;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
 
-    /* "PETSc/DM.pyx":238
+    /* "PETSc/DM.pyx":258
  *         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_ERR(40, 238, __pyx_L1_error)
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM((__pyx_v_newdmf[__pyx_v_i]))); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 258, __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_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 258, __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)
+    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(40, 258, __pyx_L1_error)
     __Pyx_DECREF_SET(__pyx_v_dmf, ((struct PyPetscDMObject *)__pyx_t_2));
     __pyx_t_2 = 0;
 
-    /* "PETSc/DM.pyx":239
+    /* "PETSc/DM.pyx":259
  *         for i from 0 <= i < n:
  *             dmf = subtype_DM(newdmf[i])()
  *             dmf.dm = newdmf[i]             # <<<<<<<<<<<<<<
@@ -203057,17 +217766,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_72refineHierarchy(struct PyPetscD
  */
     __pyx_v_dmf->dm = (__pyx_v_newdmf[__pyx_v_i]);
 
-    /* "PETSc/DM.pyx":240
+    /* "PETSc/DM.pyx":260
  *             dmf = subtype_DM(newdmf[i])()
  *             dmf.dm = newdmf[i]
  *             hierarchy.append(dmf)             # <<<<<<<<<<<<<<
  *         return hierarchy
  * 
  */
-    __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)
+    __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_hierarchy, ((PyObject *)__pyx_v_dmf)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(40, 260, __pyx_L1_error)
   }
 
-  /* "PETSc/DM.pyx":241
+  /* "PETSc/DM.pyx":261
  *             dmf.dm = newdmf[i]
  *             hierarchy.append(dmf)
  *         return hierarchy             # <<<<<<<<<<<<<<
@@ -203079,7 +217788,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_72refineHierarchy(struct PyPetscD
   __pyx_r = __pyx_v_hierarchy;
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":230
+  /* "PETSc/DM.pyx":250
  *         return dm
  * 
  *     def refineHierarchy(self, nlevels):             # <<<<<<<<<<<<<<
@@ -203102,7 +217811,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_72refineHierarchy(struct PyPetscD
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":243
+/* "PETSc/DM.pyx":263
  *         return hierarchy
  * 
  *     def coarsenHierarchy(self, nlevels):             # <<<<<<<<<<<<<<
@@ -203111,9 +217820,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_72refineHierarchy(struct PyPetscD
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_83coarsenHierarchy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_82coarsenHierarchy[] = "DM.coarsenHierarchy(self, nlevels)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_83coarsenHierarchy(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_nlevels = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -203126,6 +217835,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_75coarsenHierarchy(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -203136,7 +217846,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_75coarsenHierarchy(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, "coarsenHierarchy") < 0)) __PYX_ERR(40, 243, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "coarsenHierarchy") < 0)) __PYX_ERR(40, 263, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -203147,20 +217857,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_75coarsenHierarchy(PyObject *__py
   }
   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_RaiseArgtupleInvalid("coarsenHierarchy", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 263, __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);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_82coarsenHierarchy(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_nlevels);
 
   /* 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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_82coarsenHierarchy(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_nlevels) {
   PetscInt __pyx_v_i;
   PetscInt __pyx_v_n;
   DM *__pyx_v_newdmc;
@@ -203176,17 +217886,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_74coarsenHierarchy(struct PyPetsc
   int __pyx_t_5;
   __Pyx_RefNannySetupContext("coarsenHierarchy", 0);
 
-  /* "PETSc/DM.pyx":244
+  /* "PETSc/DM.pyx":264
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(40, 244, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_nlevels); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(40, 264, __pyx_L1_error)
   __pyx_v_n = __pyx_t_1;
 
-  /* "PETSc/DM.pyx":245
+  /* "PETSc/DM.pyx":265
  *     def coarsenHierarchy(self, nlevels):
  *         cdef PetscInt i, n = asInt(nlevels)
  *         cdef PetscDM *newdmc = NULL             # <<<<<<<<<<<<<<
@@ -203195,31 +217905,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_74coarsenHierarchy(struct PyPetsc
  */
   __pyx_v_newdmc = NULL;
 
-  /* "PETSc/DM.pyx":246
+  /* "PETSc/DM.pyx":266
  *         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_ERR(40, 246, __pyx_L1_error)
+  __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_n)); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 266, __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_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, 266, __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
+  /* "PETSc/DM.pyx":267
  *         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_ERR(40, 247, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCoarsenHierarchy(__pyx_v_self->dm, __pyx_v_n, __pyx_v_newdmc)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(40, 267, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":248
+  /* "PETSc/DM.pyx":268
  *         cdef object tmp = oarray_p(empty_p(n),NULL, <void**>&newdmc)
  *         CHKERR( DMCoarsenHierarchy(self.dm, n, newdmc) )
  *         cdef DM dmc = None             # <<<<<<<<<<<<<<
@@ -203229,19 +217939,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_74coarsenHierarchy(struct PyPetsc
   __Pyx_INCREF(Py_None);
   __pyx_v_dmc = ((struct PyPetscDMObject *)Py_None);
 
-  /* "PETSc/DM.pyx":249
+  /* "PETSc/DM.pyx":269
  *         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_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 269, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_hierarchy = ((PyObject*)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/DM.pyx":250
+  /* "PETSc/DM.pyx":270
  *         cdef DM dmc = None
  *         cdef list hierarchy = []
  *         for i from 0 <= i < n:             # <<<<<<<<<<<<<<
@@ -203251,23 +217961,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_74coarsenHierarchy(struct PyPetsc
   __pyx_t_1 = __pyx_v_n;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_1; __pyx_v_i++) {
 
-    /* "PETSc/DM.pyx":251
+    /* "PETSc/DM.pyx":271
  *         cdef list hierarchy = []
  *         for i from 0 <= i < n:
  *             dmc = subtype_DM(newdmc[i])()             # <<<<<<<<<<<<<<
  *             dmc.dm = newdmc[i]
  *             hierarchy.append(dmc)
  */
-    __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_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM((__pyx_v_newdmc[__pyx_v_i]))); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 271, __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_t_2 = __Pyx_PyObject_Call(__pyx_t_3, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 271, __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)
+    if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(40, 271, __pyx_L1_error)
     __Pyx_DECREF_SET(__pyx_v_dmc, ((struct PyPetscDMObject *)__pyx_t_2));
     __pyx_t_2 = 0;
 
-    /* "PETSc/DM.pyx":252
+    /* "PETSc/DM.pyx":272
  *         for i from 0 <= i < n:
  *             dmc = subtype_DM(newdmc[i])()
  *             dmc.dm = newdmc[i]             # <<<<<<<<<<<<<<
@@ -203276,29 +217986,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_74coarsenHierarchy(struct PyPetsc
  */
     __pyx_v_dmc->dm = (__pyx_v_newdmc[__pyx_v_i]);
 
-    /* "PETSc/DM.pyx":253
+    /* "PETSc/DM.pyx":273
  *             dmc = subtype_DM(newdmc[i])()
  *             dmc.dm = newdmc[i]
  *             hierarchy.append(dmc)             # <<<<<<<<<<<<<<
  *         return hierarchy
  * 
  */
-    __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)
+    __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_hierarchy, ((PyObject *)__pyx_v_dmc)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(40, 273, __pyx_L1_error)
   }
 
-  /* "PETSc/DM.pyx":254
+  /* "PETSc/DM.pyx":274
  *             dmc.dm = newdmc[i]
  *             hierarchy.append(dmc)
  *         return hierarchy             # <<<<<<<<<<<<<<
  * 
- *     #
+ *     def getRefineLevel(self):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(__pyx_v_hierarchy);
   __pyx_r = __pyx_v_hierarchy;
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":243
+  /* "PETSc/DM.pyx":263
  *         return hierarchy
  * 
  *     def coarsenHierarchy(self, nlevels):             # <<<<<<<<<<<<<<
@@ -203321,18 +218031,651 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_74coarsenHierarchy(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":258
+/* "PETSc/DM.pyx":276
+ *         return hierarchy
+ * 
+ *     def getRefineLevel(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt n = 0
+ *         CHKERR( DMGetRefineLevel(self.dm, &n) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_85getRefineLevel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_84getRefineLevel[] = "DM.getRefineLevel(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_85getRefineLevel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getRefineLevel (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getRefineLevel", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getRefineLevel", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_84getRefineLevel(((struct PyPetscDMObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_84getRefineLevel(struct PyPetscDMObject *__pyx_v_self) {
+  PetscInt __pyx_v_n;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getRefineLevel", 0);
+
+  /* "PETSc/DM.pyx":277
+ * 
+ *     def getRefineLevel(self):
+ *         cdef PetscInt n = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( DMGetRefineLevel(self.dm, &n) )
+ *         return toInt(n)
+ */
+  __pyx_v_n = 0;
+
+  /* "PETSc/DM.pyx":278
+ *     def getRefineLevel(self):
+ *         cdef PetscInt n = 0
+ *         CHKERR( DMGetRefineLevel(self.dm, &n) )             # <<<<<<<<<<<<<<
+ *         return toInt(n)
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetRefineLevel(__pyx_v_self->dm, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(40, 278, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":279
+ *         cdef PetscInt n = 0
+ *         CHKERR( DMGetRefineLevel(self.dm, &n) )
+ *         return toInt(n)             # <<<<<<<<<<<<<<
+ * 
+ *     def setRefineLevel(self, level):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 279, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/DM.pyx":276
+ *         return hierarchy
+ * 
+ *     def getRefineLevel(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt n = 0
+ *         CHKERR( DMGetRefineLevel(self.dm, &n) )
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getRefineLevel", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DM.pyx":281
+ *         return toInt(n)
+ * 
+ *     def setRefineLevel(self, level):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt clevel = asInt(level)
+ *         CHKERR( DMSetRefineLevel(self.dm, clevel) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_87setRefineLevel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_86setRefineLevel[] = "DM.setRefineLevel(self, level)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_87setRefineLevel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_level = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setRefineLevel (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_level,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);
+        CYTHON_FALLTHROUGH;
+        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_level)) != 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, "setRefineLevel") < 0)) __PYX_ERR(40, 281, __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_level = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setRefineLevel", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 281, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setRefineLevel", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_86setRefineLevel(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_level);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_86setRefineLevel(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_level) {
+  PetscInt __pyx_v_clevel;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setRefineLevel", 0);
+
+  /* "PETSc/DM.pyx":282
+ * 
+ *     def setRefineLevel(self, level):
+ *         cdef PetscInt clevel = asInt(level)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMSetRefineLevel(self.dm, clevel) )
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_level); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(40, 282, __pyx_L1_error)
+  __pyx_v_clevel = __pyx_t_1;
+
+  /* "PETSc/DM.pyx":283
+ *     def setRefineLevel(self, level):
+ *         cdef PetscInt clevel = asInt(level)
+ *         CHKERR( DMSetRefineLevel(self.dm, clevel) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getCoarsenLevel(self):
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetRefineLevel(__pyx_v_self->dm, __pyx_v_clevel)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(40, 283, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":281
+ *         return toInt(n)
+ * 
+ *     def setRefineLevel(self, level):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt clevel = asInt(level)
+ *         CHKERR( DMSetRefineLevel(self.dm, clevel) )
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setRefineLevel", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DM.pyx":285
+ *         CHKERR( DMSetRefineLevel(self.dm, clevel) )
+ * 
+ *     def getCoarsenLevel(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt n = 0
+ *         CHKERR( DMGetCoarsenLevel(self.dm, &n) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_89getCoarsenLevel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_88getCoarsenLevel[] = "DM.getCoarsenLevel(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_89getCoarsenLevel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getCoarsenLevel (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getCoarsenLevel", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getCoarsenLevel", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_88getCoarsenLevel(((struct PyPetscDMObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_88getCoarsenLevel(struct PyPetscDMObject *__pyx_v_self) {
+  PetscInt __pyx_v_n;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  __Pyx_RefNannySetupContext("getCoarsenLevel", 0);
+
+  /* "PETSc/DM.pyx":286
+ * 
+ *     def getCoarsenLevel(self):
+ *         cdef PetscInt n = 0             # <<<<<<<<<<<<<<
+ *         CHKERR( DMGetCoarsenLevel(self.dm, &n) )
+ *         return toInt(n)
+ */
+  __pyx_v_n = 0;
+
+  /* "PETSc/DM.pyx":287
+ *     def getCoarsenLevel(self):
+ *         cdef PetscInt n = 0
+ *         CHKERR( DMGetCoarsenLevel(self.dm, &n) )             # <<<<<<<<<<<<<<
+ *         return toInt(n)
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetCoarsenLevel(__pyx_v_self->dm, (&__pyx_v_n))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(40, 287, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":288
+ *         cdef PetscInt n = 0
+ *         CHKERR( DMGetCoarsenLevel(self.dm, &n) )
+ *         return toInt(n)             # <<<<<<<<<<<<<<
+ * 
+ *     #
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_n); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 288, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/DM.pyx":285
+ *         CHKERR( DMSetRefineLevel(self.dm, clevel) )
+ * 
+ *     def getCoarsenLevel(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt n = 0
+ *         CHKERR( DMGetCoarsenLevel(self.dm, &n) )
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.getCoarsenLevel", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DM.pyx":292
+ *     #
+ * 
+ *     def adaptLabel(self, label):             # <<<<<<<<<<<<<<
+ *         cdef const_char *cval = NULL
+ *         cdef PetscDMLabel clbl = NULL
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_91adaptLabel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_90adaptLabel[] = "DM.adaptLabel(self, label)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_91adaptLabel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_label = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("adaptLabel (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_label,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);
+        CYTHON_FALLTHROUGH;
+        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_label)) != 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, "adaptLabel") < 0)) __PYX_ERR(40, 292, __pyx_L3_error)
+      }
+    } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
+      goto __pyx_L5_argtuple_error;
+    } else {
+      values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+    }
+    __pyx_v_label = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("adaptLabel", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 292, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.adaptLabel", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_90adaptLabel(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_label);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_90adaptLabel(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_label) {
+  const char *__pyx_v_cval;
+  DMLabel __pyx_v_clbl;
+  struct PyPetscDMObject *__pyx_v_newdm = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("adaptLabel", 0);
+  __Pyx_INCREF(__pyx_v_label);
+
+  /* "PETSc/DM.pyx":293
+ * 
+ *     def adaptLabel(self, label):
+ *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscDMLabel clbl = NULL
+ *         label = str2bytes(label, &cval)
+ */
+  __pyx_v_cval = NULL;
+
+  /* "PETSc/DM.pyx":294
+ *     def adaptLabel(self, label):
+ *         cdef const_char *cval = NULL
+ *         cdef PetscDMLabel clbl = NULL             # <<<<<<<<<<<<<<
+ *         label = str2bytes(label, &cval)
+ *         CHKERR( DMGetLabel(self.dm, cval, &clbl) )
+ */
+  __pyx_v_clbl = NULL;
+
+  /* "PETSc/DM.pyx":295
+ *         cdef const_char *cval = NULL
+ *         cdef PetscDMLabel clbl = NULL
+ *         label = str2bytes(label, &cval)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMGetLabel(self.dm, cval, &clbl) )
+ *         cdef DM newdm = DMPlex()
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_label, (&__pyx_v_cval)); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 295, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_label, __pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/DM.pyx":296
+ *         cdef PetscDMLabel clbl = NULL
+ *         label = str2bytes(label, &cval)
+ *         CHKERR( DMGetLabel(self.dm, cval, &clbl) )             # <<<<<<<<<<<<<<
+ *         cdef DM newdm = DMPlex()
+ *         CHKERR( DMAdaptLabel(self.dm, clbl, &newdm.dm) )
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetLabel(__pyx_v_self->dm, __pyx_v_cval, (&__pyx_v_clbl))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(40, 296, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":297
+ *         label = str2bytes(label, &cval)
+ *         CHKERR( DMGetLabel(self.dm, cval, &clbl) )
+ *         cdef DM newdm = DMPlex()             # <<<<<<<<<<<<<<
+ *         CHKERR( DMAdaptLabel(self.dm, clbl, &newdm.dm) )
+ *         return newdm
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DMPlex), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 297, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_newdm = ((struct PyPetscDMObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/DM.pyx":298
+ *         CHKERR( DMGetLabel(self.dm, cval, &clbl) )
+ *         cdef DM newdm = DMPlex()
+ *         CHKERR( DMAdaptLabel(self.dm, clbl, &newdm.dm) )             # <<<<<<<<<<<<<<
+ *         return newdm
+ * 
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMAdaptLabel(__pyx_v_self->dm, __pyx_v_clbl, (&__pyx_v_newdm->dm))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(40, 298, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":299
+ *         cdef DM newdm = DMPlex()
+ *         CHKERR( DMAdaptLabel(self.dm, clbl, &newdm.dm) )
+ *         return newdm             # <<<<<<<<<<<<<<
+ * 
+ *     def adaptMetric(self, Vec metric, label=None):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_newdm));
+  __pyx_r = ((PyObject *)__pyx_v_newdm);
+  goto __pyx_L0;
+
+  /* "PETSc/DM.pyx":292
+ *     #
+ * 
+ *     def adaptLabel(self, label):             # <<<<<<<<<<<<<<
+ *         cdef const_char *cval = NULL
+ *         cdef PetscDMLabel clbl = NULL
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.adaptLabel", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_newdm);
+  __Pyx_XDECREF(__pyx_v_label);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DM.pyx":301
+ *         return newdm
+ * 
+ *     def adaptMetric(self, Vec metric, label=None):             # <<<<<<<<<<<<<<
+ *         cdef const_char *cval = NULL
+ *         cdef PetscDMLabel clbl = NULL
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_93adaptMetric(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_92adaptMetric[] = "DM.adaptMetric(self, Vec metric, label=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_93adaptMetric(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscVecObject *__pyx_v_metric = 0;
+  PyObject *__pyx_v_label = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("adaptMetric (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_metric,&__pyx_n_s_label,0};
+    PyObject* values[2] = {0,0};
+    values[1] = ((PyObject *)Py_None);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        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_metric)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_label);
+          if (value) { values[1] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "adaptMetric") < 0)) __PYX_ERR(40, 301, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_metric = ((struct PyPetscVecObject *)values[0]);
+    __pyx_v_label = values[1];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("adaptMetric", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 301, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.adaptMetric", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_metric), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "metric", 0))) __PYX_ERR(40, 301, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_92adaptMetric(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_metric, __pyx_v_label);
+
+  /* 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_92adaptMetric(struct PyPetscDMObject *__pyx_v_self, struct PyPetscVecObject *__pyx_v_metric, PyObject *__pyx_v_label) {
+  const char *__pyx_v_cval;
+  DMLabel __pyx_v_clbl;
+  struct PyPetscDMObject *__pyx_v_newdm = 0;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  int __pyx_t_3;
+  __Pyx_RefNannySetupContext("adaptMetric", 0);
+  __Pyx_INCREF(__pyx_v_label);
+
+  /* "PETSc/DM.pyx":302
+ * 
+ *     def adaptMetric(self, Vec metric, label=None):
+ *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscDMLabel clbl = NULL
+ *         label = str2bytes(label, &cval)
+ */
+  __pyx_v_cval = NULL;
+
+  /* "PETSc/DM.pyx":303
+ *     def adaptMetric(self, Vec metric, label=None):
+ *         cdef const_char *cval = NULL
+ *         cdef PetscDMLabel clbl = NULL             # <<<<<<<<<<<<<<
+ *         label = str2bytes(label, &cval)
+ *         if cval == NULL: cval = b"" # XXX Should be fixed upstream
+ */
+  __pyx_v_clbl = NULL;
+
+  /* "PETSc/DM.pyx":304
+ *         cdef const_char *cval = NULL
+ *         cdef PetscDMLabel clbl = NULL
+ *         label = str2bytes(label, &cval)             # <<<<<<<<<<<<<<
+ *         if cval == NULL: cval = b"" # XXX Should be fixed upstream
+ *         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_ERR(40, 304, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_label, __pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/DM.pyx":305
+ *         cdef PetscDMLabel clbl = NULL
+ *         label = str2bytes(label, &cval)
+ *         if cval == NULL: cval = b"" # XXX Should be fixed upstream             # <<<<<<<<<<<<<<
+ *         CHKERR( DMGetLabel(self.dm, cval, &clbl) )
+ *         cdef DM newdm = DMPlex()
+ */
+  __pyx_t_2 = ((__pyx_v_cval == NULL) != 0);
+  if (__pyx_t_2) {
+    __pyx_v_cval = ((const char *)"");
+  }
+
+  /* "PETSc/DM.pyx":306
+ *         label = str2bytes(label, &cval)
+ *         if cval == NULL: cval = b"" # XXX Should be fixed upstream
+ *         CHKERR( DMGetLabel(self.dm, cval, &clbl) )             # <<<<<<<<<<<<<<
+ *         cdef DM newdm = DMPlex()
+ *         CHKERR( DMAdaptMetric(self.dm, metric.vec, clbl, &newdm.dm) )
+ */
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetLabel(__pyx_v_self->dm, __pyx_v_cval, (&__pyx_v_clbl))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(40, 306, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":307
+ *         if cval == NULL: cval = b"" # XXX Should be fixed upstream
+ *         CHKERR( DMGetLabel(self.dm, cval, &clbl) )
+ *         cdef DM newdm = DMPlex()             # <<<<<<<<<<<<<<
+ *         CHKERR( DMAdaptMetric(self.dm, metric.vec, clbl, &newdm.dm) )
+ *         return newdm
+ */
+  __pyx_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DMPlex), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 307, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_v_newdm = ((struct PyPetscDMObject *)__pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/DM.pyx":308
+ *         CHKERR( DMGetLabel(self.dm, cval, &clbl) )
+ *         cdef DM newdm = DMPlex()
+ *         CHKERR( DMAdaptMetric(self.dm, metric.vec, clbl, &newdm.dm) )             # <<<<<<<<<<<<<<
+ *         return newdm
+ * 
+ */
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMAdaptMetric(__pyx_v_self->dm, __pyx_v_metric->vec, __pyx_v_clbl, (&__pyx_v_newdm->dm))); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(40, 308, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":309
+ *         cdef DM newdm = DMPlex()
+ *         CHKERR( DMAdaptMetric(self.dm, metric.vec, clbl, &newdm.dm) )
+ *         return newdm             # <<<<<<<<<<<<<<
+ * 
  *     #
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_newdm));
+  __pyx_r = ((PyObject *)__pyx_v_newdm);
+  goto __pyx_L0;
+
+  /* "PETSc/DM.pyx":301
+ *         return newdm
  * 
- *     def setDefaultSection(self, Section sec not None):             # <<<<<<<<<<<<<<
+ *     def adaptMetric(self, Vec metric, label=None):             # <<<<<<<<<<<<<<
+ *         cdef const_char *cval = NULL
+ *         cdef PetscDMLabel clbl = NULL
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.adaptMetric", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_newdm);
+  __Pyx_XDECREF(__pyx_v_label);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DM.pyx":313
+ *     #
+ * 
+ *     def setDefaultSection(self, Section sec):             # <<<<<<<<<<<<<<
  *         CHKERR( DMSetDefaultSection(self.dm, sec.sec) )
  * 
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_95setDefaultSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_94setDefaultSection[] = "DM.setDefaultSection(self, Section sec)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_95setDefaultSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscSectionObject *__pyx_v_sec = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -203345,6 +218688,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_77setDefaultSection(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -203355,7 +218699,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_77setDefaultSection(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, "setDefaultSection") < 0)) __PYX_ERR(40, 258, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDefaultSection") < 0)) __PYX_ERR(40, 313, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -203366,14 +218710,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_77setDefaultSection(PyObject *__p
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setDefaultSection", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 258, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setDefaultSection", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 313, __pyx_L3_error)
   __pyx_L3_error:;
   __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sec), __pyx_ptype_8petsc4py_5PETSc_Section, 0, "sec", 0))) __PYX_ERR(40, 313, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_94setDefaultSection(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_sec);
 
   /* function exit code */
   goto __pyx_L0;
@@ -203384,25 +218728,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_77setDefaultSection(PyObject *__p
   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_94setDefaultSection(struct PyPetscDMObject *__pyx_v_self, struct PyPetscSectionObject *__pyx_v_sec) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setDefaultSection", 0);
 
-  /* "PETSc/DM.pyx":259
+  /* "PETSc/DM.pyx":314
  * 
- *     def setDefaultSection(self, Section sec not None):
+ *     def setDefaultSection(self, Section sec):
  *         CHKERR( DMSetDefaultSection(self.dm, sec.sec) )             # <<<<<<<<<<<<<<
  * 
  *     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_ERR(40, 259, __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 == ((int)-1))) __PYX_ERR(40, 314, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":258
+  /* "PETSc/DM.pyx":313
  *     #
  * 
- *     def setDefaultSection(self, Section sec not None):             # <<<<<<<<<<<<<<
+ *     def setDefaultSection(self, Section sec):             # <<<<<<<<<<<<<<
  *         CHKERR( DMSetDefaultSection(self.dm, sec.sec) )
  * 
  */
@@ -203419,7 +218763,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_76setDefaultSection(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":261
+/* "PETSc/DM.pyx":316
  *         CHKERR( DMSetDefaultSection(self.dm, sec.sec) )
  * 
  *     def getDefaultSection(self):             # <<<<<<<<<<<<<<
@@ -203428,23 +218772,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_76setDefaultSection(struct PyPets
  */
 
 /* 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_97getDefaultSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_96getDefaultSection[] = "DM.getDefaultSection(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_97getDefaultSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   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_r = __pyx_pf_8petsc4py_5PETSc_2DM_96getDefaultSection(((struct PyPetscDMObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_78getDefaultSection(struct PyPetscDMObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_96getDefaultSection(struct PyPetscDMObject *__pyx_v_self) {
   struct PyPetscSectionObject *__pyx_v_sec = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -203452,28 +218796,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_78getDefaultSection(struct PyPets
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getDefaultSection", 0);
 
-  /* "PETSc/DM.pyx":262
+  /* "PETSc/DM.pyx":317
  * 
  *     def getDefaultSection(self):
  *         cdef Section sec = Section()             # <<<<<<<<<<<<<<
  *         CHKERR( DMGetDefaultSection(self.dm, &sec.sec) )
  *         PetscINCREF(sec.obj)
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Section), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 317, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_sec = ((struct PyPetscSectionObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":263
+  /* "PETSc/DM.pyx":318
  *     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(DMGetDefaultSection(__pyx_v_self->dm, (&__pyx_v_sec->sec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 263, __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 == ((int)-1))) __PYX_ERR(40, 318, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":264
+  /* "PETSc/DM.pyx":319
  *         cdef Section sec = Section()
  *         CHKERR( DMGetDefaultSection(self.dm, &sec.sec) )
  *         PetscINCREF(sec.obj)             # <<<<<<<<<<<<<<
@@ -203482,19 +218826,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_78getDefaultSection(struct PyPets
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_sec->__pyx_base.obj);
 
-  /* "PETSc/DM.pyx":265
+  /* "PETSc/DM.pyx":320
  *         CHKERR( DMGetDefaultSection(self.dm, &sec.sec) )
  *         PetscINCREF(sec.obj)
  *         return sec             # <<<<<<<<<<<<<<
  * 
- *     def setDefaultGlobalSection(self, Section sec not None):
+ *     def setDefaultGlobalSection(self, Section sec):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_sec));
   __pyx_r = ((PyObject *)__pyx_v_sec);
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":261
+  /* "PETSc/DM.pyx":316
  *         CHKERR( DMSetDefaultSection(self.dm, sec.sec) )
  * 
  *     def getDefaultSection(self):             # <<<<<<<<<<<<<<
@@ -203514,18 +218858,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_78getDefaultSection(struct PyPets
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":267
+/* "PETSc/DM.pyx":322
  *         return sec
  * 
- *     def setDefaultGlobalSection(self, Section sec not None):             # <<<<<<<<<<<<<<
+ *     def setDefaultGlobalSection(self, Section sec):             # <<<<<<<<<<<<<<
  *         CHKERR( DMSetDefaultGlobalSection(self.dm, sec.sec) )
  * 
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_99setDefaultGlobalSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_98setDefaultGlobalSection[] = "DM.setDefaultGlobalSection(self, Section sec)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_99setDefaultGlobalSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscSectionObject *__pyx_v_sec = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -203538,6 +218882,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_81setDefaultGlobalSection(PyObjec
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -203548,7 +218893,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_81setDefaultGlobalSection(PyObjec
         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_ERR(40, 267, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setDefaultGlobalSection") < 0)) __PYX_ERR(40, 322, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -203559,14 +218904,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_81setDefaultGlobalSection(PyObjec
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setDefaultGlobalSection", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 267, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setDefaultGlobalSection", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 322, __pyx_L3_error)
   __pyx_L3_error:;
   __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sec), __pyx_ptype_8petsc4py_5PETSc_Section, 0, "sec", 0))) __PYX_ERR(40, 322, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_98setDefaultGlobalSection(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_sec);
 
   /* function exit code */
   goto __pyx_L0;
@@ -203577,25 +218922,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_81setDefaultGlobalSection(PyObjec
   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_98setDefaultGlobalSection(struct PyPetscDMObject *__pyx_v_self, struct PyPetscSectionObject *__pyx_v_sec) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setDefaultGlobalSection", 0);
 
-  /* "PETSc/DM.pyx":268
+  /* "PETSc/DM.pyx":323
  * 
- *     def setDefaultGlobalSection(self, Section sec not None):
+ *     def setDefaultGlobalSection(self, Section sec):
  *         CHKERR( DMSetDefaultGlobalSection(self.dm, sec.sec) )             # <<<<<<<<<<<<<<
  * 
  *     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_ERR(40, 268, __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 == ((int)-1))) __PYX_ERR(40, 323, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":267
+  /* "PETSc/DM.pyx":322
  *         return sec
  * 
- *     def setDefaultGlobalSection(self, Section sec not None):             # <<<<<<<<<<<<<<
+ *     def setDefaultGlobalSection(self, Section sec):             # <<<<<<<<<<<<<<
  *         CHKERR( DMSetDefaultGlobalSection(self.dm, sec.sec) )
  * 
  */
@@ -203612,7 +218957,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_80setDefaultGlobalSection(struct
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":270
+/* "PETSc/DM.pyx":325
  *         CHKERR( DMSetDefaultGlobalSection(self.dm, sec.sec) )
  * 
  *     def getDefaultGlobalSection(self):             # <<<<<<<<<<<<<<
@@ -203621,23 +218966,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_80setDefaultGlobalSection(struct
  */
 
 /* 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_101getDefaultGlobalSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_100getDefaultGlobalSection[] = "DM.getDefaultGlobalSection(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_101getDefaultGlobalSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   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_r = __pyx_pf_8petsc4py_5PETSc_2DM_100getDefaultGlobalSection(((struct PyPetscDMObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_82getDefaultGlobalSection(struct PyPetscDMObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_100getDefaultGlobalSection(struct PyPetscDMObject *__pyx_v_self) {
   struct PyPetscSectionObject *__pyx_v_sec = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -203645,28 +218990,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_82getDefaultGlobalSection(struct
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getDefaultGlobalSection", 0);
 
-  /* "PETSc/DM.pyx":271
+  /* "PETSc/DM.pyx":326
  * 
  *     def getDefaultGlobalSection(self):
  *         cdef Section sec = Section()             # <<<<<<<<<<<<<<
  *         CHKERR( DMGetDefaultGlobalSection(self.dm, &sec.sec) )
  *         PetscINCREF(sec.obj)
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Section), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 326, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_sec = ((struct PyPetscSectionObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":272
+  /* "PETSc/DM.pyx":327
  *     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(DMGetDefaultGlobalSection(__pyx_v_self->dm, (&__pyx_v_sec->sec))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 272, __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 == ((int)-1))) __PYX_ERR(40, 327, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":273
+  /* "PETSc/DM.pyx":328
  *         cdef Section sec = Section()
  *         CHKERR( DMGetDefaultGlobalSection(self.dm, &sec.sec) )
  *         PetscINCREF(sec.obj)             # <<<<<<<<<<<<<<
@@ -203675,19 +219020,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_82getDefaultGlobalSection(struct
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_sec->__pyx_base.obj);
 
-  /* "PETSc/DM.pyx":274
+  /* "PETSc/DM.pyx":329
  *         CHKERR( DMGetDefaultGlobalSection(self.dm, &sec.sec) )
  *         PetscINCREF(sec.obj)
  *         return sec             # <<<<<<<<<<<<<<
  * 
- *     def createDefaultSF(self, Section localsec not None, Section globalsec not None):
+ *     def createDefaultSF(self, Section localsec, Section globalsec):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_sec));
   __pyx_r = ((PyObject *)__pyx_v_sec);
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":270
+  /* "PETSc/DM.pyx":325
  *         CHKERR( DMSetDefaultGlobalSection(self.dm, sec.sec) )
  * 
  *     def getDefaultGlobalSection(self):             # <<<<<<<<<<<<<<
@@ -203707,18 +219052,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_82getDefaultGlobalSection(struct
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":276
+/* "PETSc/DM.pyx":331
  *         return sec
  * 
- *     def createDefaultSF(self, Section localsec not None, Section globalsec not None):             # <<<<<<<<<<<<<<
+ *     def createDefaultSF(self, Section localsec, Section globalsec):             # <<<<<<<<<<<<<<
  *         CHKERR( DMCreateDefaultSF(self.dm, localsec.sec, globalsec.sec) )
  * 
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_103createDefaultSF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_102createDefaultSF[] = "DM.createDefaultSF(self, Section localsec, Section globalsec)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_103createDefaultSF(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;
@@ -203732,7 +219077,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_85createDefaultSF(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -203741,14 +219088,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_85createDefaultSF(PyObject *__pyx
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_localsec)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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)
+          __Pyx_RaiseArgtupleInvalid("createDefaultSF", 1, 2, 2, 1); __PYX_ERR(40, 331, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createDefaultSF") < 0)) __PYX_ERR(40, 276, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createDefaultSF") < 0)) __PYX_ERR(40, 331, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -203761,15 +219109,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_85createDefaultSF(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createDefaultSF", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 276, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createDefaultSF", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 331, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DM.createDefaultSF", __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_localsec), __pyx_ptype_8petsc4py_5PETSc_Section, 0, "localsec", 0))) __PYX_ERR(40, 331, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_globalsec), __pyx_ptype_8petsc4py_5PETSc_Section, 0, "globalsec", 0))) __PYX_ERR(40, 331, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_102createDefaultSF(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_localsec, __pyx_v_globalsec);
 
   /* function exit code */
   goto __pyx_L0;
@@ -203780,25 +219128,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_85createDefaultSF(PyObject *__pyx
   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_102createDefaultSF(struct PyPetscDMObject *__pyx_v_self, struct PyPetscSectionObject *__pyx_v_localsec, struct PyPetscSectionObject *__pyx_v_globalsec) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("createDefaultSF", 0);
 
-  /* "PETSc/DM.pyx":277
+  /* "PETSc/DM.pyx":332
  * 
- *     def createDefaultSF(self, Section localsec not None, Section globalsec not None):
+ *     def createDefaultSF(self, Section localsec, Section globalsec):
  *         CHKERR( DMCreateDefaultSF(self.dm, localsec.sec, globalsec.sec) )             # <<<<<<<<<<<<<<
  * 
  *     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_ERR(40, 277, __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 == ((int)-1))) __PYX_ERR(40, 332, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":276
+  /* "PETSc/DM.pyx":331
  *         return sec
  * 
- *     def createDefaultSF(self, Section localsec not None, Section globalsec not None):             # <<<<<<<<<<<<<<
+ *     def createDefaultSF(self, Section localsec, Section globalsec):             # <<<<<<<<<<<<<<
  *         CHKERR( DMCreateDefaultSF(self.dm, localsec.sec, globalsec.sec) )
  * 
  */
@@ -203815,7 +219163,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_84createDefaultSF(struct PyPetscD
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":279
+/* "PETSc/DM.pyx":334
  *         CHKERR( DMCreateDefaultSF(self.dm, localsec.sec, globalsec.sec) )
  * 
  *     def getDefaultSF(self):             # <<<<<<<<<<<<<<
@@ -203824,23 +219172,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_84createDefaultSF(struct PyPetscD
  */
 
 /* 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_105getDefaultSF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_104getDefaultSF[] = "DM.getDefaultSF(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_105getDefaultSF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   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_r = __pyx_pf_8petsc4py_5PETSc_2DM_104getDefaultSF(((struct PyPetscDMObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_86getDefaultSF(struct PyPetscDMObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_104getDefaultSF(struct PyPetscDMObject *__pyx_v_self) {
   struct PyPetscSFObject *__pyx_v_sf = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -203848,28 +219196,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_86getDefaultSF(struct PyPetscDMOb
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getDefaultSF", 0);
 
-  /* "PETSc/DM.pyx":280
+  /* "PETSc/DM.pyx":335
  * 
  *     def getDefaultSF(self):
  *         cdef SF sf = SF()             # <<<<<<<<<<<<<<
  *         CHKERR( DMGetDefaultSF(self.dm, &sf.sf) )
  *         PetscINCREF(sf.obj)
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SF), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 335, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_sf = ((struct PyPetscSFObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":281
+  /* "PETSc/DM.pyx":336
  *     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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetDefaultSF(__pyx_v_self->dm, (&__pyx_v_sf->sf))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(40, 336, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":282
+  /* "PETSc/DM.pyx":337
  *         cdef SF sf = SF()
  *         CHKERR( DMGetDefaultSF(self.dm, &sf.sf) )
  *         PetscINCREF(sf.obj)             # <<<<<<<<<<<<<<
@@ -203878,7 +219226,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_86getDefaultSF(struct PyPetscDMOb
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_sf->__pyx_base.obj);
 
-  /* "PETSc/DM.pyx":283
+  /* "PETSc/DM.pyx":338
  *         CHKERR( DMGetDefaultSF(self.dm, &sf.sf) )
  *         PetscINCREF(sf.obj)
  *         return sf             # <<<<<<<<<<<<<<
@@ -203890,7 +219238,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_86getDefaultSF(struct PyPetscDMOb
   __pyx_r = ((PyObject *)__pyx_v_sf);
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":279
+  /* "PETSc/DM.pyx":334
  *         CHKERR( DMCreateDefaultSF(self.dm, localsec.sec, globalsec.sec) )
  * 
  *     def getDefaultSF(self):             # <<<<<<<<<<<<<<
@@ -203910,7 +219258,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_86getDefaultSF(struct PyPetscDMOb
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":285
+/* "PETSc/DM.pyx":340
  *         return sf
  * 
  *     def getPointSF(self):             # <<<<<<<<<<<<<<
@@ -203919,23 +219267,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_86getDefaultSF(struct PyPetscDMOb
  */
 
 /* 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_107getPointSF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_106getPointSF[] = "DM.getPointSF(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_107getPointSF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   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_r = __pyx_pf_8petsc4py_5PETSc_2DM_106getPointSF(((struct PyPetscDMObject *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_88getPointSF(struct PyPetscDMObject *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_106getPointSF(struct PyPetscDMObject *__pyx_v_self) {
   struct PyPetscSFObject *__pyx_v_sf = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -203943,28 +219291,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_88getPointSF(struct PyPetscDMObje
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getPointSF", 0);
 
-  /* "PETSc/DM.pyx":286
+  /* "PETSc/DM.pyx":341
  * 
  *     def getPointSF(self):
  *         cdef SF sf = SF()             # <<<<<<<<<<<<<<
  *         CHKERR( DMGetPointSF(self.dm, &sf.sf) )
  *         PetscINCREF(sf.obj)
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SF), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 341, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_sf = ((struct PyPetscSFObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":287
+  /* "PETSc/DM.pyx":342
  *     def getPointSF(self):
  *         cdef SF sf = SF()
  *         CHKERR( DMGetPointSF(self.dm, &sf.sf) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(sf.obj)
  *         return sf
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetPointSF(__pyx_v_self->dm, (&__pyx_v_sf->sf))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(40, 342, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":288
+  /* "PETSc/DM.pyx":343
  *         cdef SF sf = SF()
  *         CHKERR( DMGetPointSF(self.dm, &sf.sf) )
  *         PetscINCREF(sf.obj)             # <<<<<<<<<<<<<<
@@ -203973,19 +219321,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_88getPointSF(struct PyPetscDMObje
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_sf->__pyx_base.obj);
 
-  /* "PETSc/DM.pyx":289
+  /* "PETSc/DM.pyx":344
  *         CHKERR( DMGetPointSF(self.dm, &sf.sf) )
  *         PetscINCREF(sf.obj)
  *         return sf             # <<<<<<<<<<<<<<
  * 
- *     def setPointSF(self, SF sf not None):
+ *     def setPointSF(self, SF sf):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_sf));
   __pyx_r = ((PyObject *)__pyx_v_sf);
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":285
+  /* "PETSc/DM.pyx":340
  *         return sf
  * 
  *     def getPointSF(self):             # <<<<<<<<<<<<<<
@@ -204005,18 +219353,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_88getPointSF(struct PyPetscDMObje
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":291
+/* "PETSc/DM.pyx":346
  *         return sf
  * 
- *     def setPointSF(self, SF sf not None):             # <<<<<<<<<<<<<<
+ *     def setPointSF(self, SF sf):             # <<<<<<<<<<<<<<
  *         CHKERR( DMSetPointSF(self.dm, sf.sf) )
  * 
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_109setPointSF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_108setPointSF[] = "DM.setPointSF(self, SF sf)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_109setPointSF(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscSFObject *__pyx_v_sf = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -204029,6 +219377,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_91setPointSF(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -204039,7 +219388,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_91setPointSF(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, "setPointSF") < 0)) __PYX_ERR(40, 291, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setPointSF") < 0)) __PYX_ERR(40, 346, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -204050,14 +219399,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_91setPointSF(PyObject *__pyx_v_se
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setPointSF", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 291, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setPointSF", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 346, __pyx_L3_error)
   __pyx_L3_error:;
   __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sf), __pyx_ptype_8petsc4py_5PETSc_SF, 0, "sf", 0))) __PYX_ERR(40, 346, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_108setPointSF(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_sf);
 
   /* function exit code */
   goto __pyx_L0;
@@ -204068,25 +219417,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_91setPointSF(PyObject *__pyx_v_se
   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_108setPointSF(struct PyPetscDMObject *__pyx_v_self, struct PyPetscSFObject *__pyx_v_sf) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("setPointSF", 0);
 
-  /* "PETSc/DM.pyx":292
+  /* "PETSc/DM.pyx":347
  * 
- *     def setPointSF(self, SF sf not None):
+ *     def setPointSF(self, SF sf):
  *         CHKERR( DMSetPointSF(self.dm, sf.sf) )             # <<<<<<<<<<<<<<
  * 
  *     def getNumLabels(self):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetPointSF(__pyx_v_self->dm, __pyx_v_sf->sf)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(40, 347, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":291
+  /* "PETSc/DM.pyx":346
  *         return sf
  * 
- *     def setPointSF(self, SF sf not None):             # <<<<<<<<<<<<<<
+ *     def setPointSF(self, SF sf):             # <<<<<<<<<<<<<<
  *         CHKERR( DMSetPointSF(self.dm, sf.sf) )
  * 
  */
@@ -204103,7 +219452,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_90setPointSF(struct PyPetscDMObje
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":294
+/* "PETSc/DM.pyx":349
  *         CHKERR( DMSetPointSF(self.dm, sf.sf) )
  * 
  *     def getNumLabels(self):             # <<<<<<<<<<<<<<
@@ -204112,23 +219461,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_90setPointSF(struct PyPetscDMObje
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_111getNumLabels(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_110getNumLabels[] = "DM.getNumLabels(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_111getNumLabels(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));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_110getNumLabels(((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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_110getNumLabels(struct PyPetscDMObject *__pyx_v_self) {
   PetscInt __pyx_v_nLabels;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -204136,7 +219485,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_92getNumLabels(struct PyPetscDMOb
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getNumLabels", 0);
 
-  /* "PETSc/DM.pyx":295
+  /* "PETSc/DM.pyx":350
  * 
  *     def getNumLabels(self):
  *         cdef PetscInt nLabels = 0             # <<<<<<<<<<<<<<
@@ -204145,16 +219494,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_92getNumLabels(struct PyPetscDMOb
  */
   __pyx_v_nLabels = 0;
 
-  /* "PETSc/DM.pyx":296
+  /* "PETSc/DM.pyx":351
  *     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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetNumLabels(__pyx_v_self->dm, (&__pyx_v_nLabels))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(40, 351, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":297
+  /* "PETSc/DM.pyx":352
  *         cdef PetscInt nLabels = 0
  *         CHKERR( DMGetNumLabels(self.dm, &nLabels) )
  *         return toInt(nLabels)             # <<<<<<<<<<<<<<
@@ -204162,13 +219511,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_92getNumLabels(struct PyPetscDMOb
  *     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_ERR(40, 297, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_nLabels); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 352, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":294
+  /* "PETSc/DM.pyx":349
  *         CHKERR( DMSetPointSF(self.dm, sf.sf) )
  * 
  *     def getNumLabels(self):             # <<<<<<<<<<<<<<
@@ -204187,7 +219536,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_92getNumLabels(struct PyPetscDMOb
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":299
+/* "PETSc/DM.pyx":354
  *         return toInt(nLabels)
  * 
  *     def getLabelName(self, index):             # <<<<<<<<<<<<<<
@@ -204196,9 +219545,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_92getNumLabels(struct PyPetscDMOb
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_113getLabelName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_112getLabelName[] = "DM.getLabelName(self, index)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_113getLabelName(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_index = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -204211,6 +219560,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_95getLabelName(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -204221,7 +219571,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_95getLabelName(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, "getLabelName") < 0)) __PYX_ERR(40, 299, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getLabelName") < 0)) __PYX_ERR(40, 354, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -204232,20 +219582,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_95getLabelName(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getLabelName", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 299, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getLabelName", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 354, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DM.getLabelName", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_94getLabelName(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_index);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_112getLabelName(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_index);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_94getLabelName(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_index) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_112getLabelName(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_index) {
   PetscInt __pyx_v_cindex;
   const char *__pyx_v_cname;
   PyObject *__pyx_r = NULL;
@@ -204255,17 +219605,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_94getLabelName(struct PyPetscDMOb
   PyObject *__pyx_t_3 = NULL;
   __Pyx_RefNannySetupContext("getLabelName", 0);
 
-  /* "PETSc/DM.pyx":300
+  /* "PETSc/DM.pyx":355
  * 
  *     def getLabelName(self, index):
  *         cdef PetscInt cindex = asInt(index)             # <<<<<<<<<<<<<<
  *         cdef const_char *cname = NULL
  *         CHKERR( DMGetLabelName(self.dm, cindex, &cname) )
  */
-  __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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_index); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(40, 355, __pyx_L1_error)
   __pyx_v_cindex = __pyx_t_1;
 
-  /* "PETSc/DM.pyx":301
+  /* "PETSc/DM.pyx":356
  *     def getLabelName(self, index):
  *         cdef PetscInt cindex = asInt(index)
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
@@ -204274,16 +219624,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_94getLabelName(struct PyPetscDMOb
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/DM.pyx":302
+  /* "PETSc/DM.pyx":357
  *         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(DMGetLabelName(__pyx_v_self->dm, __pyx_v_cindex, (&__pyx_v_cname))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(40, 302, __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 == ((int)-1))) __PYX_ERR(40, 357, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":303
+  /* "PETSc/DM.pyx":358
  *         cdef const_char *cname = NULL
  *         CHKERR( DMGetLabelName(self.dm, cindex, &cname) )
  *         return bytes2str(cname)             # <<<<<<<<<<<<<<
@@ -204291,13 +219641,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_94getLabelName(struct PyPetscDMOb
  *     def hasLabel(self, name):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cname); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 303, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cname); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 358, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_r = __pyx_t_3;
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":299
+  /* "PETSc/DM.pyx":354
  *         return toInt(nLabels)
  * 
  *     def getLabelName(self, index):             # <<<<<<<<<<<<<<
@@ -204316,7 +219666,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_94getLabelName(struct PyPetscDMOb
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":305
+/* "PETSc/DM.pyx":360
  *         return bytes2str(cname)
  * 
  *     def hasLabel(self, name):             # <<<<<<<<<<<<<<
@@ -204325,9 +219675,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_94getLabelName(struct PyPetscDMOb
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_115hasLabel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_114hasLabel[] = "DM.hasLabel(self, name)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_115hasLabel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -204340,6 +219690,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_97hasLabel(PyObject *__pyx_v_self
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -204350,7 +219701,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_97hasLabel(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, "hasLabel") < 0)) __PYX_ERR(40, 305, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "hasLabel") < 0)) __PYX_ERR(40, 360, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -204361,20 +219712,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_97hasLabel(PyObject *__pyx_v_self
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("hasLabel", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 305, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("hasLabel", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 360, __pyx_L3_error)
   __pyx_L3_error:;
   __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_96hasLabel(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_name);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_114hasLabel(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_name);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_96hasLabel(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_114hasLabel(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name) {
   PetscBool __pyx_v_flag;
   const char *__pyx_v_cname;
   PyObject *__pyx_r = NULL;
@@ -204384,7 +219735,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_96hasLabel(struct PyPetscDMObject
   __Pyx_RefNannySetupContext("hasLabel", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/DM.pyx":306
+  /* "PETSc/DM.pyx":361
  * 
  *     def hasLabel(self, name):
  *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -204393,7 +219744,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_96hasLabel(struct PyPetscDMObject
  */
   __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/DM.pyx":307
+  /* "PETSc/DM.pyx":362
  *     def hasLabel(self, name):
  *         cdef PetscBool flag = PETSC_FALSE
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
@@ -204402,42 +219753,42 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_96hasLabel(struct PyPetscDMObject
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/DM.pyx":308
+  /* "PETSc/DM.pyx":363
  *         cdef PetscBool flag = PETSC_FALSE
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
  *         CHKERR( DMHasLabel(self.dm, cname, &flag) )
- *         return <bint> flag
+ *         return toBool(flag)
  */
-  __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_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 363, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":309
+  /* "PETSc/DM.pyx":364
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  *         CHKERR( DMHasLabel(self.dm, cname, &flag) )             # <<<<<<<<<<<<<<
- *         return <bint> flag
+ *         return toBool(flag)
  * 
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMHasLabel(__pyx_v_self->dm, __pyx_v_cname, (&__pyx_v_flag))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(40, 364, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":310
+  /* "PETSc/DM.pyx":365
  *         name = str2bytes(name, &cname)
  *         CHKERR( DMHasLabel(self.dm, cname, &flag) )
- *         return <bint> flag             # <<<<<<<<<<<<<<
+ *         return toBool(flag)             # <<<<<<<<<<<<<<
  * 
  *     def createLabel(self, name):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __Pyx_PyInt_From_PetscBool(__pyx_v_flag); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 310, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toBool(__pyx_v_flag); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 365, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":305
+  /* "PETSc/DM.pyx":360
  *         return bytes2str(cname)
  * 
  *     def hasLabel(self, name):             # <<<<<<<<<<<<<<
@@ -204457,8 +219808,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_96hasLabel(struct PyPetscDMObject
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":312
- *         return <bint> flag
+/* "PETSc/DM.pyx":367
+ *         return toBool(flag)
  * 
  *     def createLabel(self, name):             # <<<<<<<<<<<<<<
  *         cdef const_char *cname = NULL
@@ -204466,9 +219817,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_96hasLabel(struct PyPetscDMObject
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_117createLabel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_116createLabel[] = "DM.createLabel(self, name)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_117createLabel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -204481,6 +219832,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_99createLabel(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -204491,7 +219843,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_99createLabel(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, "createLabel") < 0)) __PYX_ERR(40, 312, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createLabel") < 0)) __PYX_ERR(40, 367, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -204502,20 +219854,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_99createLabel(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createLabel", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 312, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createLabel", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 367, __pyx_L3_error)
   __pyx_L3_error:;
   __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_98createLabel(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_name);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_116createLabel(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_name);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_98createLabel(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_116createLabel(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name) {
   const char *__pyx_v_cname;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -204524,7 +219876,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_98createLabel(struct PyPetscDMObj
   __Pyx_RefNannySetupContext("createLabel", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/DM.pyx":313
+  /* "PETSc/DM.pyx":368
  * 
  *     def createLabel(self, name):
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
@@ -204533,29 +219885,29 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_98createLabel(struct PyPetscDMObj
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/DM.pyx":314
+  /* "PETSc/DM.pyx":369
  *     def createLabel(self, name):
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
  *         CHKERR( DMCreateLabel(self.dm, cname) )
  * 
  */
-  __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_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 369, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":315
+  /* "PETSc/DM.pyx":370
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  *         CHKERR( DMCreateLabel(self.dm, cname) )             # <<<<<<<<<<<<<<
  * 
  *     def removeLabel(self, name):
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCreateLabel(__pyx_v_self->dm, __pyx_v_cname)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(40, 370, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":312
- *         return <bint> flag
+  /* "PETSc/DM.pyx":367
+ *         return toBool(flag)
  * 
  *     def createLabel(self, name):             # <<<<<<<<<<<<<<
  *         cdef const_char *cname = NULL
@@ -204576,7 +219928,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_98createLabel(struct PyPetscDMObj
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":317
+/* "PETSc/DM.pyx":372
  *         CHKERR( DMCreateLabel(self.dm, cname) )
  * 
  *     def removeLabel(self, name):             # <<<<<<<<<<<<<<
@@ -204585,9 +219937,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_98createLabel(struct PyPetscDMObj
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_119removeLabel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_118removeLabel[] = "DM.removeLabel(self, name)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_119removeLabel(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -204600,6 +219952,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_101removeLabel(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -204610,7 +219963,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_101removeLabel(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, "removeLabel") < 0)) __PYX_ERR(40, 317, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "removeLabel") < 0)) __PYX_ERR(40, 372, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -204621,20 +219974,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_101removeLabel(PyObject *__pyx_v_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("removeLabel", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 317, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("removeLabel", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 372, __pyx_L3_error)
   __pyx_L3_error:;
   __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_100removeLabel(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_name);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_118removeLabel(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_name);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_100removeLabel(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_118removeLabel(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name) {
   const char *__pyx_v_cname;
   DMLabel __pyx_v_clbl;
   PyObject *__pyx_r = NULL;
@@ -204644,7 +219997,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_100removeLabel(struct PyPetscDMOb
   __Pyx_RefNannySetupContext("removeLabel", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/DM.pyx":318
+  /* "PETSc/DM.pyx":373
  * 
  *     def removeLabel(self, name):
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
@@ -204653,7 +220006,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_100removeLabel(struct PyPetscDMOb
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/DM.pyx":319
+  /* "PETSc/DM.pyx":374
  *     def removeLabel(self, name):
  *         cdef const_char *cname = NULL
  *         cdef PetscDMLabel clbl = NULL             # <<<<<<<<<<<<<<
@@ -204662,28 +220015,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_100removeLabel(struct PyPetscDMOb
  */
   __pyx_v_clbl = NULL;
 
-  /* "PETSc/DM.pyx":320
+  /* "PETSc/DM.pyx":375
  *         cdef const_char *cname = NULL
  *         cdef PetscDMLabel clbl = NULL
  *         name = str2bytes(name, &cname)             # <<<<<<<<<<<<<<
  *         CHKERR( DMRemoveLabel(self.dm, cname, &clbl) )
  *         # CHKERR( DMLabelDestroy(&clbl) )
  */
-  __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_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 375, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":321
+  /* "PETSc/DM.pyx":376
  *         cdef PetscDMLabel clbl = NULL
  *         name = str2bytes(name, &cname)
  *         CHKERR( DMRemoveLabel(self.dm, cname, &clbl) )             # <<<<<<<<<<<<<<
  *         # CHKERR( DMLabelDestroy(&clbl) )
  * 
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMRemoveLabel(__pyx_v_self->dm, __pyx_v_cname, (&__pyx_v_clbl))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(40, 376, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":317
+  /* "PETSc/DM.pyx":372
  *         CHKERR( DMCreateLabel(self.dm, cname) )
  * 
  *     def removeLabel(self, name):             # <<<<<<<<<<<<<<
@@ -204705,7 +220058,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_100removeLabel(struct PyPetscDMOb
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":324
+/* "PETSc/DM.pyx":379
  *         # CHKERR( DMLabelDestroy(&clbl) )
  * 
  *     def getLabelValue(self, name, point):             # <<<<<<<<<<<<<<
@@ -204714,9 +220067,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_100removeLabel(struct PyPetscDMOb
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_121getLabelValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_120getLabelValue[] = "DM.getLabelValue(self, name, point)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_121getLabelValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_v_point = 0;
   PyObject *__pyx_r = 0;
@@ -204730,7 +220083,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_103getLabelValue(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -204739,14 +220094,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_103getLabelValue(PyObject *__pyx_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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)
+          __Pyx_RaiseArgtupleInvalid("getLabelValue", 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, "getLabelValue") < 0)) __PYX_ERR(40, 324, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getLabelValue") < 0)) __PYX_ERR(40, 379, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -204759,20 +220115,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_103getLabelValue(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getLabelValue", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 324, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getLabelValue", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 379, __pyx_L3_error)
   __pyx_L3_error:;
   __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_102getLabelValue(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_name, __pyx_v_point);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_120getLabelValue(((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_102getLabelValue(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_point) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_120getLabelValue(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;
@@ -204784,18 +220140,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_102getLabelValue(struct PyPetscDM
   __Pyx_RefNannySetupContext("getLabelValue", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/DM.pyx":325
+  /* "PETSc/DM.pyx":380
  * 
  *     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_point); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(40, 325, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(40, 380, __pyx_L1_error)
   __pyx_v_cpoint = __pyx_t_1;
   __pyx_v_value = 0;
 
-  /* "PETSc/DM.pyx":326
+  /* "PETSc/DM.pyx":381
  *     def getLabelValue(self, name, point):
  *         cdef PetscInt cpoint = asInt(point), value = 0
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
@@ -204804,28 +220160,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_102getLabelValue(struct PyPetscDM
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/DM.pyx":327
+  /* "PETSc/DM.pyx":382
  *         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 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 327, __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, 382, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/DM.pyx":328
+  /* "PETSc/DM.pyx":383
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  *         CHKERR( DMGetLabelValue(self.dm, cname, cpoint, &value) )             # <<<<<<<<<<<<<<
  *         return toInt(value)
  * 
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(40, 383, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":329
+  /* "PETSc/DM.pyx":384
  *         name = str2bytes(name, &cname)
  *         CHKERR( DMGetLabelValue(self.dm, cname, cpoint, &value) )
  *         return toInt(value)             # <<<<<<<<<<<<<<
@@ -204833,13 +220189,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_102getLabelValue(struct PyPetscDM
  *     def setLabelValue(self, name, point, value):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 329, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 384, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":324
+  /* "PETSc/DM.pyx":379
  *         # CHKERR( DMLabelDestroy(&clbl) )
  * 
  *     def getLabelValue(self, name, point):             # <<<<<<<<<<<<<<
@@ -204859,7 +220215,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_102getLabelValue(struct PyPetscDM
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":331
+/* "PETSc/DM.pyx":386
  *         return toInt(value)
  * 
  *     def setLabelValue(self, name, point, value):             # <<<<<<<<<<<<<<
@@ -204868,9 +220224,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_102getLabelValue(struct PyPetscDM
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_123setLabelValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_122setLabelValue[] = "DM.setLabelValue(self, name, point, value)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_123setLabelValue(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;
@@ -204885,8 +220241,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_105setLabelValue(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -204895,19 +220254,21 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_105setLabelValue(PyObject *__pyx_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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)
+          __Pyx_RaiseArgtupleInvalid("setLabelValue", 1, 3, 3, 1); __PYX_ERR(40, 386, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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)
+          __Pyx_RaiseArgtupleInvalid("setLabelValue", 1, 3, 3, 2); __PYX_ERR(40, 386, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLabelValue") < 0)) __PYX_ERR(40, 331, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLabelValue") < 0)) __PYX_ERR(40, 386, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -204922,20 +220283,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_105setLabelValue(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setLabelValue", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 331, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setLabelValue", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 386, __pyx_L3_error)
   __pyx_L3_error:;
   __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_104setLabelValue(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_name, __pyx_v_point, __pyx_v_value);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_122setLabelValue(((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_104setLabelValue(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_point, PyObject *__pyx_v_value) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_122setLabelValue(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;
@@ -204947,19 +220308,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_104setLabelValue(struct PyPetscDM
   __Pyx_RefNannySetupContext("setLabelValue", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/DM.pyx":332
+  /* "PETSc/DM.pyx":387
  * 
  *     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_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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(40, 387, __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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(40, 387, __pyx_L1_error)
   __pyx_v_cvalue = __pyx_t_1;
 
-  /* "PETSc/DM.pyx":333
+  /* "PETSc/DM.pyx":388
  *     def setLabelValue(self, name, point, value):
  *         cdef PetscInt cpoint = asInt(point), cvalue = asInt(value)
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
@@ -204968,28 +220329,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_104setLabelValue(struct PyPetscDM
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/DM.pyx":334
+  /* "PETSc/DM.pyx":389
  *         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_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_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 389, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/DM.pyx":335
+  /* "PETSc/DM.pyx":390
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  *         CHKERR( DMSetLabelValue(self.dm, cname, cpoint, cvalue) )             # <<<<<<<<<<<<<<
  * 
  *     def clearLabelValue(self, name, point, value):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(40, 390, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":331
+  /* "PETSc/DM.pyx":386
  *         return toInt(value)
  * 
  *     def setLabelValue(self, name, point, value):             # <<<<<<<<<<<<<<
@@ -205011,7 +220372,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_104setLabelValue(struct PyPetscDM
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":337
+/* "PETSc/DM.pyx":392
  *         CHKERR( DMSetLabelValue(self.dm, cname, cpoint, cvalue) )
  * 
  *     def clearLabelValue(self, name, point, value):             # <<<<<<<<<<<<<<
@@ -205020,9 +220381,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_104setLabelValue(struct PyPetscDM
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_125clearLabelValue(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_124clearLabelValue[] = "DM.clearLabelValue(self, name, point, value)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_125clearLabelValue(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;
@@ -205037,8 +220398,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_107clearLabelValue(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -205047,19 +220411,21 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_107clearLabelValue(PyObject *__py
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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)
+          __Pyx_RaiseArgtupleInvalid("clearLabelValue", 1, 3, 3, 1); __PYX_ERR(40, 392, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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)
+          __Pyx_RaiseArgtupleInvalid("clearLabelValue", 1, 3, 3, 2); __PYX_ERR(40, 392, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "clearLabelValue") < 0)) __PYX_ERR(40, 337, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "clearLabelValue") < 0)) __PYX_ERR(40, 392, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -205074,20 +220440,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_107clearLabelValue(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("clearLabelValue", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 337, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("clearLabelValue", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 392, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DM.clearLabelValue", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_106clearLabelValue(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_name, __pyx_v_point, __pyx_v_value);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_124clearLabelValue(((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_106clearLabelValue(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_point, PyObject *__pyx_v_value) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_124clearLabelValue(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;
@@ -205099,19 +220465,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_106clearLabelValue(struct PyPetsc
   __Pyx_RefNannySetupContext("clearLabelValue", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/DM.pyx":338
+  /* "PETSc/DM.pyx":393
  * 
  *     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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(40, 393, __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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(40, 393, __pyx_L1_error)
   __pyx_v_cvalue = __pyx_t_1;
 
-  /* "PETSc/DM.pyx":339
+  /* "PETSc/DM.pyx":394
  *     def clearLabelValue(self, name, point, value):
  *         cdef PetscInt cpoint = asInt(point), cvalue = asInt(value)
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
@@ -205120,28 +220486,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_106clearLabelValue(struct PyPetsc
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/DM.pyx":340
+  /* "PETSc/DM.pyx":395
  *         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_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_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 395, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/DM.pyx":341
+  /* "PETSc/DM.pyx":396
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  *         CHKERR( DMClearLabelValue(self.dm, cname, cpoint, cvalue) )             # <<<<<<<<<<<<<<
  * 
  *     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)
+  __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 == ((int)-1))) __PYX_ERR(40, 396, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":337
+  /* "PETSc/DM.pyx":392
  *         CHKERR( DMSetLabelValue(self.dm, cname, cpoint, cvalue) )
  * 
  *     def clearLabelValue(self, name, point, value):             # <<<<<<<<<<<<<<
@@ -205163,7 +220529,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_106clearLabelValue(struct PyPetsc
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":343
+/* "PETSc/DM.pyx":398
  *         CHKERR( DMClearLabelValue(self.dm, cname, cpoint, cvalue) )
  * 
  *     def getLabelSize(self, name):             # <<<<<<<<<<<<<<
@@ -205172,9 +220538,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_106clearLabelValue(struct PyPetsc
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_127getLabelSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_126getLabelSize[] = "DM.getLabelSize(self, name)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_127getLabelSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -205187,6 +220553,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_109getLabelSize(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -205197,7 +220564,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_109getLabelSize(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, "getLabelSize") < 0)) __PYX_ERR(40, 343, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getLabelSize") < 0)) __PYX_ERR(40, 398, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -205208,20 +220575,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_109getLabelSize(PyObject *__pyx_v
   }
   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_RaiseArgtupleInvalid("getLabelSize", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 398, __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);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_126getLabelSize(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_name);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_108getLabelSize(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_126getLabelSize(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name) {
   PetscInt __pyx_v_size;
   const char *__pyx_v_cname;
   PyObject *__pyx_r = NULL;
@@ -205231,7 +220598,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_108getLabelSize(struct PyPetscDMO
   __Pyx_RefNannySetupContext("getLabelSize", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/DM.pyx":344
+  /* "PETSc/DM.pyx":399
  * 
  *     def getLabelSize(self, name):
  *         cdef PetscInt size = 0             # <<<<<<<<<<<<<<
@@ -205240,7 +220607,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_108getLabelSize(struct PyPetscDMO
  */
   __pyx_v_size = 0;
 
-  /* "PETSc/DM.pyx":345
+  /* "PETSc/DM.pyx":400
  *     def getLabelSize(self, name):
  *         cdef PetscInt size = 0
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
@@ -205249,28 +220616,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_108getLabelSize(struct PyPetscDMO
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/DM.pyx":346
+  /* "PETSc/DM.pyx":401
  *         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_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 401, __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
+  /* "PETSc/DM.pyx":402
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  *         CHKERR( DMGetLabelSize(self.dm, cname, &size) )             # <<<<<<<<<<<<<<
  *         return toInt(size)
  * 
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetLabelSize(__pyx_v_self->dm, __pyx_v_cname, (&__pyx_v_size))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(40, 402, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":348
+  /* "PETSc/DM.pyx":403
  *         name = str2bytes(name, &cname)
  *         CHKERR( DMGetLabelSize(self.dm, cname, &size) )
  *         return toInt(size)             # <<<<<<<<<<<<<<
@@ -205278,13 +220645,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_108getLabelSize(struct PyPetscDMO
  *     def getLabelIdIS(self, name):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 348, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 403, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":343
+  /* "PETSc/DM.pyx":398
  *         CHKERR( DMClearLabelValue(self.dm, cname, cpoint, cvalue) )
  * 
  *     def getLabelSize(self, name):             # <<<<<<<<<<<<<<
@@ -205304,7 +220671,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_108getLabelSize(struct PyPetscDMO
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":350
+/* "PETSc/DM.pyx":405
  *         return toInt(size)
  * 
  *     def getLabelIdIS(self, name):             # <<<<<<<<<<<<<<
@@ -205313,9 +220680,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_108getLabelSize(struct PyPetscDMO
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_129getLabelIdIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_128getLabelIdIS[] = "DM.getLabelIdIS(self, name)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_129getLabelIdIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -205328,6 +220695,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_111getLabelIdIS(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -205338,7 +220706,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_111getLabelIdIS(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, "getLabelIdIS") < 0)) __PYX_ERR(40, 350, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getLabelIdIS") < 0)) __PYX_ERR(40, 405, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -205349,20 +220717,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_111getLabelIdIS(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getLabelIdIS", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 350, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getLabelIdIS", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 405, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DM.getLabelIdIS", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_110getLabelIdIS(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_name);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_128getLabelIdIS(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_name);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_110getLabelIdIS(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_128getLabelIdIS(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name) {
   const char *__pyx_v_cname;
   struct PyPetscISObject *__pyx_v_lis = 0;
   PyObject *__pyx_r = NULL;
@@ -205372,7 +220740,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_110getLabelIdIS(struct PyPetscDMO
   __Pyx_RefNannySetupContext("getLabelIdIS", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/DM.pyx":351
+  /* "PETSc/DM.pyx":406
  * 
  *     def getLabelIdIS(self, name):
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
@@ -205381,40 +220749,40 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_110getLabelIdIS(struct PyPetscDMO
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/DM.pyx":352
+  /* "PETSc/DM.pyx":407
  *     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_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 407, __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
+  /* "PETSc/DM.pyx":408
  *         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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 408, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_lis = ((struct PyPetscISObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":354
+  /* "PETSc/DM.pyx":409
  *         name = str2bytes(name, &cname)
  *         cdef IS lis = IS()
  *         CHKERR( DMGetLabelIdIS(self.dm, cname, &lis.iset) )             # <<<<<<<<<<<<<<
  *         return lis
  * 
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(40, 409, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":355
+  /* "PETSc/DM.pyx":410
  *         cdef IS lis = IS()
  *         CHKERR( DMGetLabelIdIS(self.dm, cname, &lis.iset) )
  *         return lis             # <<<<<<<<<<<<<<
@@ -205426,7 +220794,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_110getLabelIdIS(struct PyPetscDMO
   __pyx_r = ((PyObject *)__pyx_v_lis);
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":350
+  /* "PETSc/DM.pyx":405
  *         return toInt(size)
  * 
  *     def getLabelIdIS(self, name):             # <<<<<<<<<<<<<<
@@ -205447,7 +220815,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_110getLabelIdIS(struct PyPetscDMO
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":357
+/* "PETSc/DM.pyx":412
  *         return lis
  * 
  *     def getStratumSize(self, name, value):             # <<<<<<<<<<<<<<
@@ -205456,9 +220824,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_110getLabelIdIS(struct PyPetscDMO
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_131getStratumSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_130getStratumSize[] = "DM.getStratumSize(self, name, value)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_131getStratumSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_v_value = 0;
   PyObject *__pyx_r = 0;
@@ -205472,7 +220840,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_113getStratumSize(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -205481,14 +220851,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_113getStratumSize(PyObject *__pyx
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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)
+          __Pyx_RaiseArgtupleInvalid("getStratumSize", 1, 2, 2, 1); __PYX_ERR(40, 412, __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)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getStratumSize") < 0)) __PYX_ERR(40, 412, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -205501,20 +220872,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_113getStratumSize(PyObject *__pyx
   }
   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_RaiseArgtupleInvalid("getStratumSize", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 412, __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);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_130getStratumSize(((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_112getStratumSize(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_130getStratumSize(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;
@@ -205526,7 +220897,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_112getStratumSize(struct PyPetscD
   __Pyx_RefNannySetupContext("getStratumSize", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/DM.pyx":358
+  /* "PETSc/DM.pyx":413
  * 
  *     def getStratumSize(self, name, value):
  *         cdef PetscInt size = 0             # <<<<<<<<<<<<<<
@@ -205535,17 +220906,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_112getStratumSize(struct PyPetscD
  */
   __pyx_v_size = 0;
 
-  /* "PETSc/DM.pyx":359
+  /* "PETSc/DM.pyx":414
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(40, 359, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(40, 414, __pyx_L1_error)
   __pyx_v_cvalue = __pyx_t_1;
 
-  /* "PETSc/DM.pyx":360
+  /* "PETSc/DM.pyx":415
  *         cdef PetscInt size = 0
  *         cdef PetscInt cvalue = asInt(value)
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
@@ -205554,28 +220925,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_112getStratumSize(struct PyPetscD
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/DM.pyx":361
+  /* "PETSc/DM.pyx":416
  *         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_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 416, __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
+  /* "PETSc/DM.pyx":417
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  *         CHKERR( DMGetStratumSize(self.dm, cname, cvalue, &size) )             # <<<<<<<<<<<<<<
  *         return toInt(size)
  * 
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(40, 417, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":363
+  /* "PETSc/DM.pyx":418
  *         name = str2bytes(name, &cname)
  *         CHKERR( DMGetStratumSize(self.dm, cname, cvalue, &size) )
  *         return toInt(size)             # <<<<<<<<<<<<<<
@@ -205583,13 +220954,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_112getStratumSize(struct PyPetscD
  *     def getStratumIS(self, name, value):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 363, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_size); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 418, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":357
+  /* "PETSc/DM.pyx":412
  *         return lis
  * 
  *     def getStratumSize(self, name, value):             # <<<<<<<<<<<<<<
@@ -205609,7 +220980,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_112getStratumSize(struct PyPetscD
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":365
+/* "PETSc/DM.pyx":420
  *         return toInt(size)
  * 
  *     def getStratumIS(self, name, value):             # <<<<<<<<<<<<<<
@@ -205618,9 +220989,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_112getStratumSize(struct PyPetscD
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_133getStratumIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_132getStratumIS[] = "DM.getStratumIS(self, name, value)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_133getStratumIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_v_value = 0;
   PyObject *__pyx_r = 0;
@@ -205634,7 +221005,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_115getStratumIS(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -205643,14 +221016,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_115getStratumIS(PyObject *__pyx_v
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(40, 365, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("getStratumIS", 1, 2, 2, 1); __PYX_ERR(40, 420, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getStratumIS") < 0)) __PYX_ERR(40, 365, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getStratumIS") < 0)) __PYX_ERR(40, 420, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -205663,20 +221037,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_115getStratumIS(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getStratumIS", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 365, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getStratumIS", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 420, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DM.getStratumIS", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_114getStratumIS(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_name, __pyx_v_value);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_132getStratumIS(((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_114getStratumIS(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_132getStratumIS(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;
@@ -205688,17 +221062,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_114getStratumIS(struct PyPetscDMO
   __Pyx_RefNannySetupContext("getStratumIS", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/DM.pyx":366
+  /* "PETSc/DM.pyx":421
  * 
  *     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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(40, 421, __pyx_L1_error)
   __pyx_v_cvalue = __pyx_t_1;
 
-  /* "PETSc/DM.pyx":367
+  /* "PETSc/DM.pyx":422
  *     def getStratumIS(self, name, value):
  *         cdef PetscInt cvalue = asInt(value)
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
@@ -205707,40 +221081,40 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_114getStratumIS(struct PyPetscDMO
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/DM.pyx":368
+  /* "PETSc/DM.pyx":423
  *         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_t_2 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 423, __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
+  /* "PETSc/DM.pyx":424
  *         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_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 424, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_sis = ((struct PyPetscISObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/DM.pyx":370
+  /* "PETSc/DM.pyx":425
  *         name = str2bytes(name, &cname)
  *         cdef IS sis = IS()
  *         CHKERR( DMGetStratumIS(self.dm, cname, cvalue, &sis.iset) )             # <<<<<<<<<<<<<<
  *         return sis
  * 
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(40, 425, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":371
+  /* "PETSc/DM.pyx":426
  *         cdef IS sis = IS()
  *         CHKERR( DMGetStratumIS(self.dm, cname, cvalue, &sis.iset) )
  *         return sis             # <<<<<<<<<<<<<<
@@ -205752,7 +221126,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_114getStratumIS(struct PyPetscDMO
   __pyx_r = ((PyObject *)__pyx_v_sis);
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":365
+  /* "PETSc/DM.pyx":420
  *         return toInt(size)
  * 
  *     def getStratumIS(self, name, value):             # <<<<<<<<<<<<<<
@@ -205773,7 +221147,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_114getStratumIS(struct PyPetscDMO
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":373
+/* "PETSc/DM.pyx":428
  *         return sis
  * 
  *     def clearLabelStratum(self, name, value):             # <<<<<<<<<<<<<<
@@ -205782,9 +221156,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_114getStratumIS(struct PyPetscDMO
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_135clearLabelStratum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_134clearLabelStratum[] = "DM.clearLabelStratum(self, name, value)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_135clearLabelStratum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_v_value = 0;
   PyObject *__pyx_r = 0;
@@ -205798,7 +221172,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_117clearLabelStratum(PyObject *__
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -205807,14 +221183,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_117clearLabelStratum(PyObject *__
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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)
+          __Pyx_RaiseArgtupleInvalid("clearLabelStratum", 1, 2, 2, 1); __PYX_ERR(40, 428, __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)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "clearLabelStratum") < 0)) __PYX_ERR(40, 428, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -205827,20 +221204,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_117clearLabelStratum(PyObject *__
   }
   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_RaiseArgtupleInvalid("clearLabelStratum", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 428, __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);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_134clearLabelStratum(((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_116clearLabelStratum(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_value) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_134clearLabelStratum(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;
@@ -205851,17 +221228,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_116clearLabelStratum(struct PyPet
   __Pyx_RefNannySetupContext("clearLabelStratum", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/DM.pyx":374
+  /* "PETSc/DM.pyx":429
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(40, 374, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(40, 429, __pyx_L1_error)
   __pyx_v_cvalue = __pyx_t_1;
 
-  /* "PETSc/DM.pyx":375
+  /* "PETSc/DM.pyx":430
  *     def clearLabelStratum(self, name, value):
  *         cdef PetscInt cvalue = asInt(value)
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
@@ -205870,28 +221247,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_116clearLabelStratum(struct PyPet
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/DM.pyx":376
+  /* "PETSc/DM.pyx":431
  *         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_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 376, __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, 431, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/DM.pyx":377
+  /* "PETSc/DM.pyx":432
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  *         CHKERR( DMClearLabelStratum(self.dm, cname, cvalue) )             # <<<<<<<<<<<<<<
  * 
  *     def setLabelOutput(self, name, output):
  */
-  __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)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMClearLabelStratum(__pyx_v_self->dm, __pyx_v_cname, __pyx_v_cvalue)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(40, 432, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":373
+  /* "PETSc/DM.pyx":428
  *         return sis
  * 
  *     def clearLabelStratum(self, name, value):             # <<<<<<<<<<<<<<
@@ -205913,7 +221290,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_116clearLabelStratum(struct PyPet
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":379
+/* "PETSc/DM.pyx":434
  *         CHKERR( DMClearLabelStratum(self.dm, cname, cvalue) )
  * 
  *     def setLabelOutput(self, name, output):             # <<<<<<<<<<<<<<
@@ -205922,9 +221299,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_116clearLabelStratum(struct PyPet
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_137setLabelOutput(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_136setLabelOutput[] = "DM.setLabelOutput(self, name, output)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_137setLabelOutput(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_v_output = 0;
   PyObject *__pyx_r = 0;
@@ -205938,7 +221315,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_119setLabelOutput(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -205947,14 +221326,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_119setLabelOutput(PyObject *__pyx
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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)
+          __Pyx_RaiseArgtupleInvalid("setLabelOutput", 1, 2, 2, 1); __PYX_ERR(40, 434, __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)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setLabelOutput") < 0)) __PYX_ERR(40, 434, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -205967,20 +221347,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_119setLabelOutput(PyObject *__pyx
   }
   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_RaiseArgtupleInvalid("setLabelOutput", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 434, __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);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_136setLabelOutput(((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_118setLabelOutput(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name, PyObject *__pyx_v_output) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_136setLabelOutput(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;
@@ -205991,7 +221371,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_118setLabelOutput(struct PyPetscD
   __Pyx_RefNannySetupContext("setLabelOutput", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/DM.pyx":380
+  /* "PETSc/DM.pyx":435
  * 
  *     def setLabelOutput(self, name, output):
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
@@ -206000,38 +221380,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_118setLabelOutput(struct PyPetscD
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/DM.pyx":381
+  /* "PETSc/DM.pyx":436
  *     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_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_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 436, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":382
+  /* "PETSc/DM.pyx":437
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  *         cdef PetscBool coutput = output             # <<<<<<<<<<<<<<
  *         CHKERR( DMSetLabelOutput(self.dm, cname, coutput) )
  * 
  */
-  __pyx_t_2 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_output)); if (unlikely(PyErr_Occurred())) __PYX_ERR(40, 382, __pyx_L1_error)
+  __pyx_t_2 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_output)); if (unlikely(PyErr_Occurred())) __PYX_ERR(40, 437, __pyx_L1_error)
   __pyx_v_coutput = __pyx_t_2;
 
-  /* "PETSc/DM.pyx":383
+  /* "PETSc/DM.pyx":438
  *         name = str2bytes(name, &cname)
  *         cdef PetscBool coutput = output
  *         CHKERR( DMSetLabelOutput(self.dm, cname, coutput) )             # <<<<<<<<<<<<<<
  * 
  *     def getLabelOutput(self, name):
  */
-  __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)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetLabelOutput(__pyx_v_self->dm, __pyx_v_cname, __pyx_v_coutput)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(40, 438, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":379
+  /* "PETSc/DM.pyx":434
  *         CHKERR( DMClearLabelStratum(self.dm, cname, cvalue) )
  * 
  *     def setLabelOutput(self, name, output):             # <<<<<<<<<<<<<<
@@ -206053,7 +221433,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_118setLabelOutput(struct PyPetscD
   return __pyx_r;
 }
 
-/* "PETSc/DM.pyx":385
+/* "PETSc/DM.pyx":440
  *         CHKERR( DMSetLabelOutput(self.dm, cname, coutput) )
  * 
  *     def getLabelOutput(self, name):             # <<<<<<<<<<<<<<
@@ -206062,9 +221442,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_118setLabelOutput(struct PyPetscD
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_139getLabelOutput(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_138getLabelOutput[] = "DM.getLabelOutput(self, name)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_139getLabelOutput(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_name = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -206077,6 +221457,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_121getLabelOutput(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -206087,7 +221468,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_121getLabelOutput(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, "getLabelOutput") < 0)) __PYX_ERR(40, 385, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getLabelOutput") < 0)) __PYX_ERR(40, 440, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -206098,20 +221479,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_121getLabelOutput(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getLabelOutput", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 385, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getLabelOutput", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 440, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DM.getLabelOutput", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_120getLabelOutput(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_name);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_138getLabelOutput(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_name);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_120getLabelOutput(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_138getLabelOutput(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_name) {
   const char *__pyx_v_cname;
   PetscBool __pyx_v_coutput;
   PyObject *__pyx_r = NULL;
@@ -206121,7 +221502,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_120getLabelOutput(struct PyPetscD
   __Pyx_RefNannySetupContext("getLabelOutput", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/DM.pyx":386
+  /* "PETSc/DM.pyx":441
  * 
  *     def getLabelOutput(self, name):
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
@@ -206130,19 +221511,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_120getLabelOutput(struct PyPetscD
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/DM.pyx":387
+  /* "PETSc/DM.pyx":442
  *     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_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 442, __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
+  /* "PETSc/DM.pyx":443
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  *         cdef PetscBool coutput = PETSC_FALSE             # <<<<<<<<<<<<<<
@@ -206151,16 +221532,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_120getLabelOutput(struct PyPetscD
  */
   __pyx_v_coutput = PETSC_FALSE;
 
-  /* "PETSc/DM.pyx":389
+  /* "PETSc/DM.pyx":444
  *         name = str2bytes(name, &cname)
  *         cdef PetscBool coutput = PETSC_FALSE
  *         CHKERR( DMGetLabelOutput(self.dm, cname, &coutput) )             # <<<<<<<<<<<<<<
  *         return coutput
  * 
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMGetLabelOutput(__pyx_v_self->dm, __pyx_v_cname, (&__pyx_v_coutput))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(40, 444, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":390
+  /* "PETSc/DM.pyx":445
  *         cdef PetscBool coutput = PETSC_FALSE
  *         CHKERR( DMGetLabelOutput(self.dm, cname, &coutput) )
  *         return coutput             # <<<<<<<<<<<<<<
@@ -206168,13 +221549,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_120getLabelOutput(struct PyPetscD
  *     # 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_t_1 = __Pyx_PyInt_From_PetscBool(__pyx_v_coutput); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 445, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_r = __pyx_t_1;
   __pyx_t_1 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DM.pyx":385
+  /* "PETSc/DM.pyx":440
  *         CHKERR( DMSetLabelOutput(self.dm, cname, coutput) )
  * 
  *     def getLabelOutput(self, name):             # <<<<<<<<<<<<<<
@@ -206194,6 +221575,1007 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_120getLabelOutput(struct PyPetscD
   return __pyx_r;
 }
 
+/* "PETSc/DM.pyx":452
+ *     getMatrix = createMatrix = createMat
+ * 
+ *     def setKSPComputeOperators(self, operators, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         if args  is None: args  = ()
+ *         if kargs is None: kargs = {}
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_141setKSPComputeOperators(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_140setKSPComputeOperators[] = "DM.setKSPComputeOperators(self, operators, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_141setKSPComputeOperators(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("setKSPComputeOperators (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);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        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;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        CYTHON_FALLTHROUGH;
+        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, "setKSPComputeOperators") < 0)) __PYX_ERR(40, 452, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        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("setKSPComputeOperators", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 452, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setKSPComputeOperators", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_140setKSPComputeOperators(((struct PyPetscDMObject *)__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_2DM_140setKSPComputeOperators(struct PyPetscDMObject *__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("setKSPComputeOperators", 0);
+  __Pyx_INCREF(__pyx_v_args);
+  __Pyx_INCREF(__pyx_v_kargs);
+
+  /* "PETSc/DM.pyx":453
+ * 
+ *     def setKSPComputeOperators(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/DM.pyx":454
+ *     def setKSPComputeOperators(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 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 454, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
+    __pyx_t_3 = 0;
+  }
+
+  /* "PETSc/DM.pyx":455
+ *         if args  is None: args  = ()
+ *         if kargs is None: kargs = {}
+ *         context = (operators, args, kargs)             # <<<<<<<<<<<<<<
+ *         self.set_attr('__operators__', context)
+ *         CHKERR( DMKSPSetComputeOperators(self.dm, KSP_ComputeOps, <void*>context) )
+ */
+  __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 455, __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/DM.pyx":456
+ *         if kargs is None: kargs = {}
+ *         context = (operators, args, kargs)
+ *         self.set_attr('__operators__', context)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMKSPSetComputeOperators(self.dm, KSP_ComputeOps, <void*>context) )
+ * 
+ */
+  __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__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(40, 456, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+  /* "PETSc/DM.pyx":457
+ *         context = (operators, args, kargs)
+ *         self.set_attr('__operators__', context)
+ *         CHKERR( DMKSPSetComputeOperators(self.dm, KSP_ComputeOps, <void*>context) )             # <<<<<<<<<<<<<<
+ * 
+ *     def createFieldDecomposition(self):
+ */
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMKSPSetComputeOperators(__pyx_v_self->dm, __pyx_f_8petsc4py_5PETSc_KSP_ComputeOps, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(40, 457, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":452
+ *     getMatrix = createMatrix = createMat
+ * 
+ *     def setKSPComputeOperators(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.DM.setKSPComputeOperators", __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/DM.pyx":459
+ *         CHKERR( DMKSPSetComputeOperators(self.dm, KSP_ComputeOps, <void*>context) )
+ * 
+ *     def createFieldDecomposition(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt clen = 0
+ *         cdef PetscIS *cis = NULL
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_143createFieldDecomposition(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_142createFieldDecomposition[] = "DM.createFieldDecomposition(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_143createFieldDecomposition(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("createFieldDecomposition (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("createFieldDecomposition", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "createFieldDecomposition", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_142createFieldDecomposition(((struct PyPetscDMObject *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_142createFieldDecomposition(struct PyPetscDMObject *__pyx_v_self) {
+  PetscInt __pyx_v_clen;
+  IS *__pyx_v_cis;
+  DM *__pyx_v_cdm;
+  char **__pyx_v_cnamelist;
+  PyObject *__pyx_v_isets = 0;
+  PyObject *__pyx_v_dms = 0;
+  PyObject *__pyx_v_names = 0;
+  struct PyPetscDMObject *__pyx_v_dm = 0;
+  long __pyx_v_i;
+  PyObject *__pyx_v_name = NULL;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  PetscInt __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  int __pyx_t_5;
+  int __pyx_t_6;
+  __Pyx_RefNannySetupContext("createFieldDecomposition", 0);
+
+  /* "PETSc/DM.pyx":460
+ * 
+ *     def createFieldDecomposition(self):
+ *         cdef PetscInt clen = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscIS *cis = NULL
+ *         cdef PetscDM *cdm = NULL
+ */
+  __pyx_v_clen = 0;
+
+  /* "PETSc/DM.pyx":461
+ *     def createFieldDecomposition(self):
+ *         cdef PetscInt clen = 0
+ *         cdef PetscIS *cis = NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscDM *cdm = NULL
+ *         cdef char** cnamelist = NULL
+ */
+  __pyx_v_cis = NULL;
+
+  /* "PETSc/DM.pyx":462
+ *         cdef PetscInt clen = 0
+ *         cdef PetscIS *cis = NULL
+ *         cdef PetscDM *cdm = NULL             # <<<<<<<<<<<<<<
+ *         cdef char** cnamelist = NULL
+ * 
+ */
+  __pyx_v_cdm = NULL;
+
+  /* "PETSc/DM.pyx":463
+ *         cdef PetscIS *cis = NULL
+ *         cdef PetscDM *cdm = NULL
+ *         cdef char** cnamelist = NULL             # <<<<<<<<<<<<<<
+ * 
+ *         CHKERR( DMCreateFieldDecomposition(self.dm, &clen, &cnamelist, &cis, &cdm) )
+ */
+  __pyx_v_cnamelist = NULL;
+
+  /* "PETSc/DM.pyx":465
+ *         cdef char** cnamelist = NULL
+ * 
+ *         CHKERR( DMCreateFieldDecomposition(self.dm, &clen, &cnamelist, &cis, &cdm) )             # <<<<<<<<<<<<<<
+ * 
+ *         cdef list isets = [ref_IS(cis[i]) for i from 0 <= i < clen]
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCreateFieldDecomposition(__pyx_v_self->dm, (&__pyx_v_clen), (&__pyx_v_cnamelist), (&__pyx_v_cis), (&__pyx_v_cdm))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(40, 465, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":467
+ *         CHKERR( DMCreateFieldDecomposition(self.dm, &clen, &cnamelist, &cis, &cdm) )
+ * 
+ *         cdef list isets = [ref_IS(cis[i]) for i from 0 <= i < clen]             # <<<<<<<<<<<<<<
+ *         cdef list dms   = []
+ *         cdef list names = []
+ */
+  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 467, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_t_3 = __pyx_v_clen;
+  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_ERR(40, 467, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_4))) __PYX_ERR(40, 467, __pyx_L1_error)
+    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  }
+  __pyx_v_isets = ((PyObject*)__pyx_t_2);
+  __pyx_t_2 = 0;
+
+  /* "PETSc/DM.pyx":468
+ * 
+ *         cdef list isets = [ref_IS(cis[i]) for i from 0 <= i < clen]
+ *         cdef list dms   = []             # <<<<<<<<<<<<<<
+ *         cdef list names = []
+ *         cdef DM dm = None
+ */
+  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 468, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_v_dms = ((PyObject*)__pyx_t_2);
+  __pyx_t_2 = 0;
+
+  /* "PETSc/DM.pyx":469
+ *         cdef list isets = [ref_IS(cis[i]) for i from 0 <= i < clen]
+ *         cdef list dms   = []
+ *         cdef list names = []             # <<<<<<<<<<<<<<
+ *         cdef DM dm = None
+ * 
+ */
+  __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 469, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_v_names = ((PyObject*)__pyx_t_2);
+  __pyx_t_2 = 0;
+
+  /* "PETSc/DM.pyx":470
+ *         cdef list dms   = []
+ *         cdef list names = []
+ *         cdef DM dm = None             # <<<<<<<<<<<<<<
+ * 
+ *         for i from 0 <= i < clen:
+ */
+  __Pyx_INCREF(Py_None);
+  __pyx_v_dm = ((struct PyPetscDMObject *)Py_None);
+
+  /* "PETSc/DM.pyx":472
+ *         cdef DM dm = None
+ * 
+ *         for i from 0 <= i < clen:             # <<<<<<<<<<<<<<
+ *             if cdm != NULL:
+ *                 dm = subtype_DM(cdm[i])()
+ */
+  __pyx_t_3 = __pyx_v_clen;
+  for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_3; __pyx_v_i++) {
+
+    /* "PETSc/DM.pyx":473
+ * 
+ *         for i from 0 <= i < clen:
+ *             if cdm != NULL:             # <<<<<<<<<<<<<<
+ *                 dm = subtype_DM(cdm[i])()
+ *                 dm.dm = cdm[i]
+ */
+    __pyx_t_5 = ((__pyx_v_cdm != NULL) != 0);
+    if (__pyx_t_5) {
+
+      /* "PETSc/DM.pyx":474
+ *         for i from 0 <= i < clen:
+ *             if cdm != NULL:
+ *                 dm = subtype_DM(cdm[i])()             # <<<<<<<<<<<<<<
+ *                 dm.dm = cdm[i]
+ *                 PetscINCREF(dm.obj)
+ */
+      __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_subtype_DM((__pyx_v_cdm[__pyx_v_i]))); if (unlikely(!__pyx_t_2)) __PYX_ERR(40, 474, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_2);
+      __pyx_t_4 = __Pyx_PyObject_Call(__pyx_t_2, __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_4)) __PYX_ERR(40, 474, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_4);
+      __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+      if (!(likely(((__pyx_t_4) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_4, __pyx_ptype_8petsc4py_5PETSc_DM))))) __PYX_ERR(40, 474, __pyx_L1_error)
+      __Pyx_DECREF_SET(__pyx_v_dm, ((struct PyPetscDMObject *)__pyx_t_4));
+      __pyx_t_4 = 0;
+
+      /* "PETSc/DM.pyx":475
+ *             if cdm != NULL:
+ *                 dm = subtype_DM(cdm[i])()
+ *                 dm.dm = cdm[i]             # <<<<<<<<<<<<<<
+ *                 PetscINCREF(dm.obj)
+ *                 dms.append(dm)
+ */
+      __pyx_v_dm->dm = (__pyx_v_cdm[__pyx_v_i]);
+
+      /* "PETSc/DM.pyx":476
+ *                 dm = subtype_DM(cdm[i])()
+ *                 dm.dm = cdm[i]
+ *                 PetscINCREF(dm.obj)             # <<<<<<<<<<<<<<
+ *                 dms.append(dm)
+ *             else:
+ */
+      __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_dm->__pyx_base.obj);
+
+      /* "PETSc/DM.pyx":477
+ *                 dm.dm = cdm[i]
+ *                 PetscINCREF(dm.obj)
+ *                 dms.append(dm)             # <<<<<<<<<<<<<<
+ *             else:
+ *                 dms.append(None)
+ */
+      __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_dms, ((PyObject *)__pyx_v_dm)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(40, 477, __pyx_L1_error)
+
+      /* "PETSc/DM.pyx":473
+ * 
+ *         for i from 0 <= i < clen:
+ *             if cdm != NULL:             # <<<<<<<<<<<<<<
+ *                 dm = subtype_DM(cdm[i])()
+ *                 dm.dm = cdm[i]
+ */
+      goto __pyx_L7;
+    }
+
+    /* "PETSc/DM.pyx":479
+ *                 dms.append(dm)
+ *             else:
+ *                 dms.append(None)             # <<<<<<<<<<<<<<
+ * 
+ *             name = bytes2str(cnamelist[i])
+ */
+    /*else*/ {
+      __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_dms, Py_None); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(40, 479, __pyx_L1_error)
+    }
+    __pyx_L7:;
+
+    /* "PETSc/DM.pyx":481
+ *                 dms.append(None)
+ * 
+ *             name = bytes2str(cnamelist[i])             # <<<<<<<<<<<<<<
+ *             names.append(name)
+ *             CHKERR( PetscFree(cnamelist[i]) )
+ */
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_bytes2str((__pyx_v_cnamelist[__pyx_v_i])); if (unlikely(!__pyx_t_4)) __PYX_ERR(40, 481, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_4);
+    __Pyx_XDECREF_SET(__pyx_v_name, __pyx_t_4);
+    __pyx_t_4 = 0;
+
+    /* "PETSc/DM.pyx":482
+ * 
+ *             name = bytes2str(cnamelist[i])
+ *             names.append(name)             # <<<<<<<<<<<<<<
+ *             CHKERR( PetscFree(cnamelist[i]) )
+ * 
+ */
+    __pyx_t_6 = __Pyx_PyList_Append(__pyx_v_names, __pyx_v_name); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(40, 482, __pyx_L1_error)
+
+    /* "PETSc/DM.pyx":483
+ *             name = bytes2str(cnamelist[i])
+ *             names.append(name)
+ *             CHKERR( PetscFree(cnamelist[i]) )             # <<<<<<<<<<<<<<
+ * 
+ *             CHKERR( ISDestroy(&cis[i]) )
+ */
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscFree((__pyx_v_cnamelist[__pyx_v_i]))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(40, 483, __pyx_L1_error)
+
+    /* "PETSc/DM.pyx":485
+ *             CHKERR( PetscFree(cnamelist[i]) )
+ * 
+ *             CHKERR( ISDestroy(&cis[i]) )             # <<<<<<<<<<<<<<
+ *             CHKERR( DMDestroy(&cdm[i]) )
+ * 
+ */
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISDestroy((&(__pyx_v_cis[__pyx_v_i])))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(40, 485, __pyx_L1_error)
+
+    /* "PETSc/DM.pyx":486
+ * 
+ *             CHKERR( ISDestroy(&cis[i]) )
+ *             CHKERR( DMDestroy(&cdm[i]) )             # <<<<<<<<<<<<<<
+ * 
+ *         CHKERR( PetscFree(cis) )
+ */
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDestroy((&(__pyx_v_cdm[__pyx_v_i])))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(40, 486, __pyx_L1_error)
+  }
+
+  /* "PETSc/DM.pyx":488
+ *             CHKERR( DMDestroy(&cdm[i]) )
+ * 
+ *         CHKERR( PetscFree(cis) )             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscFree(cdm) )
+ *         CHKERR( PetscFree(cnamelist) )
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscFree(__pyx_v_cis)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(40, 488, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":489
+ * 
+ *         CHKERR( PetscFree(cis) )
+ *         CHKERR( PetscFree(cdm) )             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscFree(cnamelist) )
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscFree(__pyx_v_cdm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(40, 489, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":490
+ *         CHKERR( PetscFree(cis) )
+ *         CHKERR( PetscFree(cdm) )
+ *         CHKERR( PetscFree(cnamelist) )             # <<<<<<<<<<<<<<
+ * 
+ *         return (names, isets, dms)
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscFree(__pyx_v_cnamelist)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(40, 490, __pyx_L1_error)
+
+  /* "PETSc/DM.pyx":492
+ *         CHKERR( PetscFree(cnamelist) )
+ * 
+ *         return (names, isets, dms)             # <<<<<<<<<<<<<<
+ * 
+ *     def setSNESFunction(self, function, args=None, kargs=None):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(40, 492, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_INCREF(__pyx_v_names);
+  __Pyx_GIVEREF(__pyx_v_names);
+  PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_names);
+  __Pyx_INCREF(__pyx_v_isets);
+  __Pyx_GIVEREF(__pyx_v_isets);
+  PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_v_isets);
+  __Pyx_INCREF(__pyx_v_dms);
+  __Pyx_GIVEREF(__pyx_v_dms);
+  PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_dms);
+  __pyx_r = __pyx_t_4;
+  __pyx_t_4 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/DM.pyx":459
+ *         CHKERR( DMKSPSetComputeOperators(self.dm, KSP_ComputeOps, <void*>context) )
+ * 
+ *     def createFieldDecomposition(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt clen = 0
+ *         cdef PetscIS *cis = NULL
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.createFieldDecomposition", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_isets);
+  __Pyx_XDECREF(__pyx_v_dms);
+  __Pyx_XDECREF(__pyx_v_names);
+  __Pyx_XDECREF((PyObject *)__pyx_v_dm);
+  __Pyx_XDECREF(__pyx_v_name);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DM.pyx":494
+ *         return (names, isets, dms)
+ * 
+ *     def setSNESFunction(self, function, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         if function is not None:
+ *             if args  is None: args  = ()
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_145setSNESFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_144setSNESFunction[] = "DM.setSNESFunction(self, function, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_145setSNESFunction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_function = 0;
+  PyObject *__pyx_v_args = 0;
+  PyObject *__pyx_v_kargs = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setSNESFunction (wrapper)", 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);
+    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);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_function)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        CYTHON_FALLTHROUGH;
+        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, "setSNESFunction") < 0)) __PYX_ERR(40, 494, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_function = values[0];
+    __pyx_v_args = values[1];
+    __pyx_v_kargs = values[2];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setSNESFunction", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 494, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setSNESFunction", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_144setSNESFunction(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_function, __pyx_v_args, __pyx_v_kargs);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_144setSNESFunction(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_function, 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("setSNESFunction", 0);
+  __Pyx_INCREF(__pyx_v_args);
+  __Pyx_INCREF(__pyx_v_kargs);
+
+  /* "PETSc/DM.pyx":495
+ * 
+ *     def setSNESFunction(self, function, args=None, kargs=None):
+ *         if function is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}
+ */
+  __pyx_t_1 = (__pyx_v_function != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+
+    /* "PETSc/DM.pyx":496
+ *     def setSNESFunction(self, function, args=None, kargs=None):
+ *         if function is not None:
+ *             if args  is None: args  = ()             # <<<<<<<<<<<<<<
+ *             if kargs is None: kargs = {}
+ *             context = (function, 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/DM.pyx":497
+ *         if function is not None:
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
+ *             context = (function, args, kargs)
+ *             self.set_attr('__function__', context)
+ */
+    __pyx_t_1 = (__pyx_v_kargs == Py_None);
+    __pyx_t_2 = (__pyx_t_1 != 0);
+    if (__pyx_t_2) {
+      __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 497, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
+      __pyx_t_3 = 0;
+    }
+
+    /* "PETSc/DM.pyx":498
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}
+ *             context = (function, args, kargs)             # <<<<<<<<<<<<<<
+ *             self.set_attr('__function__', context)
+ *             CHKERR( DMSNESSetFunction(self.dm, SNES_Function, <void*>context) )
+ */
+    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 498, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_v_function);
+    __Pyx_GIVEREF(__pyx_v_function);
+    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_function);
+    __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/DM.pyx":499
+ *             if kargs is None: kargs = {}
+ *             context = (function, args, kargs)
+ *             self.set_attr('__function__', context)             # <<<<<<<<<<<<<<
+ *             CHKERR( DMSNESSetFunction(self.dm, SNES_Function, <void*>context) )
+ *         else:
+ */
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__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_3)) __PYX_ERR(40, 499, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+    /* "PETSc/DM.pyx":500
+ *             context = (function, args, kargs)
+ *             self.set_attr('__function__', context)
+ *             CHKERR( DMSNESSetFunction(self.dm, SNES_Function, <void*>context) )             # <<<<<<<<<<<<<<
+ *         else:
+ *             CHKERR( DMSNESSetFunction(self.dm, NULL, NULL) )
+ */
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSNESSetFunction(__pyx_v_self->dm, __pyx_f_8petsc4py_5PETSc_SNES_Function, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(40, 500, __pyx_L1_error)
+
+    /* "PETSc/DM.pyx":495
+ * 
+ *     def setSNESFunction(self, function, args=None, kargs=None):
+ *         if function is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}
+ */
+    goto __pyx_L3;
+  }
+
+  /* "PETSc/DM.pyx":502
+ *             CHKERR( DMSNESSetFunction(self.dm, SNES_Function, <void*>context) )
+ *         else:
+ *             CHKERR( DMSNESSetFunction(self.dm, NULL, NULL) )             # <<<<<<<<<<<<<<
+ * 
+ *     def setSNESJacobian(self, jacobian, args=None, kargs=None):
+ */
+  /*else*/ {
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSNESSetFunction(__pyx_v_self->dm, NULL, NULL)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(40, 502, __pyx_L1_error)
+  }
+  __pyx_L3:;
+
+  /* "PETSc/DM.pyx":494
+ *         return (names, isets, dms)
+ * 
+ *     def setSNESFunction(self, function, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         if function 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.DM.setSNESFunction", __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/DM.pyx":504
+ *             CHKERR( DMSNESSetFunction(self.dm, NULL, NULL) )
+ * 
+ *     def setSNESJacobian(self, jacobian, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         if jacobian is not None:
+ *             if args  is None: args  = ()
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_147setSNESJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_2DM_146setSNESJacobian[] = "DM.setSNESJacobian(self, jacobian, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_2DM_147setSNESJacobian(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_jacobian = 0;
+  PyObject *__pyx_v_args = 0;
+  PyObject *__pyx_v_kargs = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setSNESJacobian (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_jacobian,&__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);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+      kw_args = PyDict_Size(__pyx_kwds);
+      switch (pos_args) {
+        case  0:
+        if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_jacobian)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        CYTHON_FALLTHROUGH;
+        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, "setSNESJacobian") < 0)) __PYX_ERR(40, 504, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_jacobian = values[0];
+    __pyx_v_args = values[1];
+    __pyx_v_kargs = values[2];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setSNESJacobian", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(40, 504, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DM.setSNESJacobian", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_2DM_146setSNESJacobian(((struct PyPetscDMObject *)__pyx_v_self), __pyx_v_jacobian, __pyx_v_args, __pyx_v_kargs);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_2DM_146setSNESJacobian(struct PyPetscDMObject *__pyx_v_self, PyObject *__pyx_v_jacobian, 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("setSNESJacobian", 0);
+  __Pyx_INCREF(__pyx_v_args);
+  __Pyx_INCREF(__pyx_v_kargs);
+
+  /* "PETSc/DM.pyx":505
+ * 
+ *     def setSNESJacobian(self, jacobian, args=None, kargs=None):
+ *         if jacobian is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}
+ */
+  __pyx_t_1 = (__pyx_v_jacobian != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+
+    /* "PETSc/DM.pyx":506
+ *     def setSNESJacobian(self, jacobian, args=None, kargs=None):
+ *         if jacobian is not None:
+ *             if args  is None: args  = ()             # <<<<<<<<<<<<<<
+ *             if kargs is None: kargs = {}
+ *             context = (jacobian, 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/DM.pyx":507
+ *         if jacobian is not None:
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
+ *             context = (jacobian, args, kargs)
+ *             self.set_attr('__jacobian__', context)
+ */
+    __pyx_t_1 = (__pyx_v_kargs == Py_None);
+    __pyx_t_2 = (__pyx_t_1 != 0);
+    if (__pyx_t_2) {
+      __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 507, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
+      __pyx_t_3 = 0;
+    }
+
+    /* "PETSc/DM.pyx":508
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}
+ *             context = (jacobian, args, kargs)             # <<<<<<<<<<<<<<
+ *             self.set_attr('__jacobian__', context)
+ *             CHKERR( DMSNESSetJacobian(self.dm, SNES_Jacobian, <void*>context) )
+ */
+    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 508, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_v_jacobian);
+    __Pyx_GIVEREF(__pyx_v_jacobian);
+    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_jacobian);
+    __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/DM.pyx":509
+ *             if kargs is None: kargs = {}
+ *             context = (jacobian, args, kargs)
+ *             self.set_attr('__jacobian__', context)             # <<<<<<<<<<<<<<
+ *             CHKERR( DMSNESSetJacobian(self.dm, SNES_Jacobian, <void*>context) )
+ *         else:
+ */
+    __pyx_t_3 = ((struct __pyx_vtabstruct_8petsc4py_5PETSc_DM *)__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_3)) __PYX_ERR(40, 509, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+    /* "PETSc/DM.pyx":510
+ *             context = (jacobian, args, kargs)
+ *             self.set_attr('__jacobian__', context)
+ *             CHKERR( DMSNESSetJacobian(self.dm, SNES_Jacobian, <void*>context) )             # <<<<<<<<<<<<<<
+ *         else:
+ *             CHKERR( DMSNESSetJacobian(self.dm, NULL, NULL) )
+ */
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSNESSetJacobian(__pyx_v_self->dm, __pyx_f_8petsc4py_5PETSc_SNES_Jacobian, ((void *)__pyx_v_context))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(40, 510, __pyx_L1_error)
+
+    /* "PETSc/DM.pyx":505
+ * 
+ *     def setSNESJacobian(self, jacobian, args=None, kargs=None):
+ *         if jacobian is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}
+ */
+    goto __pyx_L3;
+  }
+
+  /* "PETSc/DM.pyx":512
+ *             CHKERR( DMSNESSetJacobian(self.dm, SNES_Jacobian, <void*>context) )
+ *         else:
+ *             CHKERR( DMSNESSetJacobian(self.dm, NULL, NULL) )             # <<<<<<<<<<<<<<
+ * 
+ * # --------------------------------------------------------------------
+ */
+  /*else*/ {
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSNESSetJacobian(__pyx_v_self->dm, NULL, NULL)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(40, 512, __pyx_L1_error)
+  }
+  __pyx_L3:;
+
+  /* "PETSc/DM.pyx":504
+ *             CHKERR( DMSNESSetFunction(self.dm, NULL, NULL) )
+ * 
+ *     def setSNESJacobian(self, jacobian, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         if jacobian 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.DM.setSNESJacobian", __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/DMDA.pyx":25
  *     #
  * 
@@ -206260,15 +222642,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_1create(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
+        CYTHON_FALLTHROUGH;
         case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
+        CYTHON_FALLTHROUGH;
         case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
+        CYTHON_FALLTHROUGH;
         case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
+        CYTHON_FALLTHROUGH;
         case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -206279,46 +222671,55 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_1create(PyObject *__pyx_v_self,
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_dim);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_dof);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_sizes);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_proc_sizes);
           if (value) { values[3] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  4:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_boundary_type);
           if (value) { values[4] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  5:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_stencil_type);
           if (value) { values[5] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  6:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_stencil_width);
           if (value) { values[6] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  7:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_setup);
           if (value) { values[7] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  8:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ownership_ranges);
           if (value) { values[8] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  9:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -206331,15 +222732,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_1create(PyObject *__pyx_v_self,
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case 10: values[9] = PyTuple_GET_ITEM(__pyx_args, 9);
+        CYTHON_FALLTHROUGH;
         case  9: values[8] = PyTuple_GET_ITEM(__pyx_args, 8);
+        CYTHON_FALLTHROUGH;
         case  8: values[7] = PyTuple_GET_ITEM(__pyx_args, 7);
+        CYTHON_FALLTHROUGH;
         case  7: values[6] = PyTuple_GET_ITEM(__pyx_args, 6);
+        CYTHON_FALLTHROUGH;
         case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -206449,7 +222860,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_create(struct __pyx_obj_8petsc4
     __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_ERR(41, 31, __pyx_L3_error)
+      __pyx_t_4 = __Pyx_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;
@@ -206475,9 +222886,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_create(struct __pyx_obj_8petsc4
     __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;
+    goto __pyx_L8_try_end;
     __pyx_L3_error:;
-    __Pyx_PyThreadState_assign
     __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
 
     /* "PETSc/DMDA.pyx":32
@@ -206502,19 +222912,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_create(struct __pyx_obj_8petsc4
  *         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);
     __Pyx_ExceptionReset(__pyx_t_1, __pyx_t_2, __pyx_t_3);
-    __pyx_L10_try_end:;
+    __pyx_L8_try_end:;
   }
 
   /* "PETSc/DMDA.pyx":35
@@ -206669,7 +223077,7 @@ 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 == -1L && PyErr_Occurred())) __PYX_ERR(41, 51, __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 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(41, 51, __pyx_L1_error)
     __pyx_v_gdim = __pyx_t_9;
 
     /* "PETSc/DMDA.pyx":50
@@ -206699,7 +223107,7 @@ 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 == -1L && PyErr_Occurred())) __PYX_ERR(41, 53, __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 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(41, 53, __pyx_L1_error)
     __pyx_v_pdim = __pyx_t_9;
 
     /* "PETSc/DMDA.pyx":52
@@ -206722,11 +223130,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_create(struct __pyx_obj_8petsc4
   if (__pyx_t_8) {
   } else {
     __pyx_t_7 = __pyx_t_8;
-    goto __pyx_L14_bool_binop_done;
+    goto __pyx_L12_bool_binop_done;
   }
   __pyx_t_8 = ((__pyx_v_pdim >= 0) != 0);
   __pyx_t_7 = __pyx_t_8;
-  __pyx_L14_bool_binop_done:;
+  __pyx_L12_bool_binop_done:;
   if (__pyx_t_7) {
 
     /* "PETSc/DMDA.pyx":55
@@ -206764,7 +223172,7 @@ 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 == -1L && PyErr_Occurred())) __PYX_ERR(41, 57, __pyx_L1_error)
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_dim); if (unlikely(__pyx_t_9 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(41, 57, __pyx_L1_error)
     __pyx_v_ndim = __pyx_t_9;
   }
 
@@ -206778,7 +223186,7 @@ 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 == -1L && PyErr_Occurred())) __PYX_ERR(41, 58, __pyx_L1_error)
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_dof); if (unlikely(__pyx_t_9 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(41, 58, __pyx_L1_error)
     __pyx_v_ndof = __pyx_t_9;
   }
 
@@ -206856,7 +223264,7 @@ 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 == -1L && PyErr_Occurred())) __PYX_ERR(41, 68, __pyx_L1_error)
+    __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 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(41, 68, __pyx_L1_error)
 
     /* "PETSc/DMDA.pyx":67
  *                                                  &lx, &ly, &lz)
@@ -206885,7 +223293,7 @@ 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)-1L))) __PYX_ERR(41, 70, __pyx_L1_error)
+    __pyx_t_10 = __pyx_f_8petsc4py_5PETSc_asStencil(__pyx_v_stencil_type); if (unlikely(__pyx_t_10 == ((DMDAStencilType)((DMDAStencilType)-1L)))) __PYX_ERR(41, 70, __pyx_L1_error)
     __pyx_v_stype = __pyx_t_10;
 
     /* "PETSc/DMDA.pyx":69
@@ -206915,7 +223323,7 @@ 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 == -1L && PyErr_Occurred())) __PYX_ERR(41, 72, __pyx_L1_error)
+    __pyx_t_9 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_stencil_width); if (unlikely(__pyx_t_9 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(41, 72, __pyx_L1_error)
     __pyx_v_swidth = __pyx_t_9;
 
     /* "PETSc/DMDA.pyx":71
@@ -206938,11 +223346,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_create(struct __pyx_obj_8petsc4
   if (__pyx_t_8) {
   } else {
     __pyx_t_7 = __pyx_t_8;
-    goto __pyx_L25_bool_binop_done;
+    goto __pyx_L23_bool_binop_done;
   }
   __pyx_t_8 = ((__pyx_v_swidth == PETSC_DECIDE) != 0);
   __pyx_t_7 = __pyx_t_8;
-  __pyx_L25_bool_binop_done:;
+  __pyx_L23_bool_binop_done:;
   if (__pyx_t_7) {
     __pyx_v_swidth = 0;
   }
@@ -206973,7 +223381,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_ERR(41, 77, __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 == ((int)-1))) __PYX_ERR(41, 77, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":81
  *                              btx, bty, btz, stype, swidth,
@@ -206986,13 +223394,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_create(struct __pyx_obj_8petsc4
   if (__pyx_t_8) {
   } else {
     __pyx_t_7 = __pyx_t_8;
-    goto __pyx_L28_bool_binop_done;
+    goto __pyx_L26_bool_binop_done;
   }
   __pyx_t_8 = ((__pyx_v_ndim > 0) != 0);
   __pyx_t_7 = __pyx_t_8;
-  __pyx_L28_bool_binop_done:;
+  __pyx_L26_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_ERR(41, 81, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetUp(__pyx_v_newda)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(41, 81, __pyx_L1_error)
   }
 
   /* "PETSc/DMDA.pyx":82
@@ -207082,9 +223490,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_3duplicate(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -207095,16 +223507,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_3duplicate(PyObject *__pyx_v_se
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_dof);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_boundary_type);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_stencil_type);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_stencil_width);
@@ -207117,9 +223532,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_3duplicate(PyObject *__pyx_v_se
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -207265,7 +223684,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_ERR(41, 95, __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 == ((int)-1))) __PYX_ERR(41, 95, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":102
  *                           &btx, &bty, &btz,
@@ -207285,7 +223704,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_ERR(41, 103, __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 == ((int)-1))) __PYX_ERR(41, 103, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":104
  *         cdef const_PetscInt *lx = NULL, *ly = NULL, *lz = NULL
@@ -207303,7 +223722,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_ERR(41, 105, __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 == ((int)-1))) __PYX_ERR(41, 105, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":107
  *         CHKERR( PetscObjectGetComm(<PetscObject>self.dm, &comm) )
@@ -207323,7 +223742,7 @@ 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 == -1L && PyErr_Occurred())) __PYX_ERR(41, 108, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_dof); if (unlikely(__pyx_t_4 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(41, 108, __pyx_L1_error)
     __pyx_v_ndof = __pyx_t_4;
 
     /* "PETSc/DMDA.pyx":107
@@ -207353,7 +223772,7 @@ 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 == -1L && PyErr_Occurred())) __PYX_ERR(41, 110, __pyx_L1_error)
+    __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 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(41, 110, __pyx_L1_error)
 
     /* "PETSc/DMDA.pyx":109
  *         if dof is not None:
@@ -207382,7 +223801,7 @@ 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)-1L))) __PYX_ERR(41, 112, __pyx_L1_error)
+    __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_asStencil(__pyx_v_stencil_type); if (unlikely(__pyx_t_5 == ((DMDAStencilType)((DMDAStencilType)-1L)))) __PYX_ERR(41, 112, __pyx_L1_error)
     __pyx_v_stype = __pyx_t_5;
 
     /* "PETSc/DMDA.pyx":111
@@ -207412,7 +223831,7 @@ 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 == -1L && PyErr_Occurred())) __PYX_ERR(41, 114, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_stencil_width); if (unlikely(__pyx_t_4 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(41, 114, __pyx_L1_error)
     __pyx_v_swidth = __pyx_t_4;
 
     /* "PETSc/DMDA.pyx":113
@@ -207443,7 +223862,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_ERR(41, 117, __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 == ((int)-1))) __PYX_ERR(41, 117, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":121
  *                              btx, bty, btz, stype, swidth,
@@ -207452,7 +223871,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_ERR(41, 121, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetUp(__pyx_v_da->__pyx_base.dm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(41, 121, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":122
  *                              &da.dm) )
@@ -207510,6 +223929,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_5setDim(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -207564,7 +223984,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_4setDim(struct __pyx_obj_8petsc
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -207577,15 +223997,33 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_4setDim(struct __pyx_obj_8petsc
     __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_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_ERR(41, 127, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_dim};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(41, 127, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_dim};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(41, 127, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __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_ERR(41, 127, __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_r = __pyx_t_1;
@@ -207658,7 +224096,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_6getDim(struct __pyx_obj_8petsc
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -207724,6 +224162,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_9setDof(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -207773,7 +224212,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 == -1L && PyErr_Occurred())) __PYX_ERR(41, 133, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_dof); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(41, 133, __pyx_L1_error)
   __pyx_v_ndof = __pyx_t_1;
 
   /* "PETSc/DMDA.pyx":134
@@ -207783,7 +224222,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_ERR(41, 134, __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 == ((int)-1))) __PYX_ERR(41, 134, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":132
  *         return self.getDimension()
@@ -207854,7 +224293,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_ERR(41, 138, __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 == ((int)-1))) __PYX_ERR(41, 138, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":145
  *                             NULL, NULL, NULL,
@@ -207913,6 +224352,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_13setSizes(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -207969,7 +224409,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_ERR(41, 148, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_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;
@@ -208017,7 +224457,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 == -1L && PyErr_Occurred())) __PYX_ERR(41, 153, __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 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(41, 153, __pyx_L1_error)
   __pyx_v_gdim = __pyx_t_2;
 
   /* "PETSc/DMDA.pyx":154
@@ -208036,7 +224476,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_ERR(41, 155, __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 == ((int)-1))) __PYX_ERR(41, 155, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":156
  *         cdef PetscInt dim = PETSC_DECIDE
@@ -208055,7 +224495,7 @@ 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_ERR(41, 157, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetDimension(__pyx_v_self->__pyx_base.dm, __pyx_v_gdim)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(41, 157, __pyx_L1_error)
 
     /* "PETSc/DMDA.pyx":156
  *         cdef PetscInt dim = PETSC_DECIDE
@@ -208073,7 +224513,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_ERR(41, 158, __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 == ((int)-1))) __PYX_ERR(41, 158, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":147
  *         return toInt(dof)
@@ -208176,7 +224616,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_ERR(41, 165, __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 == ((int)-1))) __PYX_ERR(41, 165, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":172
  *                             NULL, NULL, NULL,
@@ -208235,6 +224675,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_17setProcSizes(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -208291,7 +224732,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_ERR(41, 175, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_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;
@@ -208339,7 +224780,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 == -1L && PyErr_Occurred())) __PYX_ERR(41, 180, __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 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(41, 180, __pyx_L1_error)
   __pyx_v_pdim = __pyx_t_2;
 
   /* "PETSc/DMDA.pyx":181
@@ -208358,7 +224799,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_ERR(41, 182, __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 == ((int)-1))) __PYX_ERR(41, 182, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":183
  *         cdef PetscInt dim = PETSC_DECIDE
@@ -208377,7 +224818,7 @@ 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_ERR(41, 184, __pyx_L1_error)
+    __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMSetDimension(__pyx_v_self->__pyx_base.dm, __pyx_v_pdim)); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(41, 184, __pyx_L1_error)
 
     /* "PETSc/DMDA.pyx":183
  *         cdef PetscInt dim = PETSC_DECIDE
@@ -208395,7 +224836,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_ERR(41, 185, __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 == ((int)-1))) __PYX_ERR(41, 185, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":174
  *         return toDims(dim, M, N, P)
@@ -208498,7 +224939,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_ERR(41, 192, __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 == ((int)-1))) __PYX_ERR(41, 192, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":199
  *                             NULL, NULL, NULL,
@@ -208557,6 +224998,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_21setBoundaryType(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -208635,7 +225077,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 == -1L && PyErr_Occurred())) __PYX_ERR(41, 205, __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 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(41, 205, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":206
  *         cdef PetscDMBoundaryType btz = DM_BOUNDARY_NONE
@@ -208644,7 +225086,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_ERR(41, 206, __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 == ((int)-1))) __PYX_ERR(41, 206, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":201
  *         return toDims(dim, m, n, p)
@@ -208745,7 +225187,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_ERR(41, 213, __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 == ((int)-1))) __PYX_ERR(41, 213, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":220
  *                           &btx, &bty, &btz,
@@ -208804,6 +225246,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_25setStencilType(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -208853,7 +225296,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)-1L))) __PYX_ERR(41, 223, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asStencil(__pyx_v_stencil_type); if (unlikely(__pyx_t_1 == ((DMDAStencilType)((DMDAStencilType)-1L)))) __PYX_ERR(41, 223, __pyx_L1_error)
   __pyx_v_stype = __pyx_t_1;
 
   /* "PETSc/DMDA.pyx":224
@@ -208863,7 +225306,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_ERR(41, 224, __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 == ((int)-1))) __PYX_ERR(41, 224, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":222
  *         return toDims(dim, btx, bty, btz)
@@ -208934,7 +225377,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_ERR(41, 228, __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 == ((int)-1))) __PYX_ERR(41, 228, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":235
  *                           NULL, NULL, NULL,
@@ -208993,6 +225436,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_29setStencilWidth(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -209042,7 +225486,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 == -1L && PyErr_Occurred())) __PYX_ERR(41, 238, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_stencil_width); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(41, 238, __pyx_L1_error)
   __pyx_v_swidth = __pyx_t_1;
 
   /* "PETSc/DMDA.pyx":239
@@ -209052,7 +225496,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_ERR(41, 239, __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 == ((int)-1))) __PYX_ERR(41, 239, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":237
  *         return stype
@@ -209123,7 +225567,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_ERR(41, 243, __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 == ((int)-1))) __PYX_ERR(41, 243, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":250
  *                             NULL, NULL, NULL,
@@ -209183,7 +225627,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_33setStencil(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -209192,6 +225638,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_33setStencil(PyObject *__pyx_v_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_stencil_type)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_stencil_width)) != 0)) kw_args--;
         else {
@@ -209242,7 +225689,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)-1L))) __PYX_ERR(41, 253, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asStencil(__pyx_v_stencil_type); if (unlikely(__pyx_t_1 == ((DMDAStencilType)((DMDAStencilType)-1L)))) __PYX_ERR(41, 253, __pyx_L1_error)
   __pyx_v_stype = __pyx_t_1;
 
   /* "PETSc/DMDA.pyx":254
@@ -209252,7 +225699,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 == -1L && PyErr_Occurred())) __PYX_ERR(41, 254, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_stencil_width); if (unlikely(__pyx_t_2 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(41, 254, __pyx_L1_error)
   __pyx_v_swidth = __pyx_t_2;
 
   /* "PETSc/DMDA.pyx":255
@@ -209262,7 +225709,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_ERR(41, 255, __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 == ((int)-1))) __PYX_ERR(41, 255, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":256
  *         cdef PetscInt swidth = asInt(stencil_width)
@@ -209271,7 +225718,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_ERR(41, 256, __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 == ((int)-1))) __PYX_ERR(41, 256, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":252
  *         return toInt(swidth)
@@ -209354,7 +225801,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_ERR(41, 261, __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 == ((int)-1))) __PYX_ERR(41, 261, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":268
  *                             NULL, NULL, NULL,
@@ -209466,7 +225913,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_ERR(41, 274, __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 == ((int)-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
@@ -209475,7 +225922,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_ERR(41, 275, __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 == ((int)-1))) __PYX_ERR(41, 275, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":278
  *                                &x, &y, &z,
@@ -209659,7 +226106,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_ERR(41, 284, __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 == ((int)-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
@@ -209668,7 +226115,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_ERR(41, 285, __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 == ((int)-1))) __PYX_ERR(41, 285, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":288
  *                                     &x, &y, &z,
@@ -209856,7 +226303,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_40getOwnershipRanges(struct __p
  *                             &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_ERR(41, 295, __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 == ((int)-1))) __PYX_ERR(41, 295, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":302
  *                             NULL, NULL, NULL,
@@ -209865,7 +226312,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_ERR(41, 302, __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 == ((int)-1))) __PYX_ERR(41, 302, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":303
  *                             NULL) )
@@ -209965,7 +226412,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_ERR(41, 307, __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 == ((int)-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
@@ -209974,7 +226421,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_ERR(41, 308, __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 == ((int)-1))) __PYX_ERR(41, 308, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":311
  *                                &x, &y, &z,
@@ -210140,7 +226587,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_ERR(41, 316, __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 == ((int)-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
@@ -210149,7 +226596,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_ERR(41, 317, __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 == ((int)-1))) __PYX_ERR(41, 317, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":320
  *                                     &x, &y, &z,
@@ -210275,7 +226722,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_47setFieldName(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -210284,6 +226733,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_47setFieldName(PyObject *__pyx_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_field)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
@@ -210335,7 +226785,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_46setFieldName(struct __pyx_obj
  *         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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(41, 326, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
   /* "PETSc/DMDA.pyx":327
@@ -210366,7 +226816,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_46setFieldName(struct __pyx_obj
  * 
  *     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)
+  __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 == ((int)-1))) __PYX_ERR(41, 329, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":325
  *     #
@@ -210414,6 +226864,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_49getFieldName(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -210465,7 +226916,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_48getFieldName(struct __pyx_obj
  *         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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(41, 332, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
   /* "PETSc/DMDA.pyx":333
@@ -210484,7 +226935,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_48getFieldName(struct __pyx_obj
  *         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)
+  __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 == ((int)-1))) __PYX_ERR(41, 334, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":335
  *         cdef const_char *cval = NULL
@@ -210522,7 +226973,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_48getFieldName(struct __pyx_obj
 /* "PETSc/DMDA.pyx":339
  *     #
  * 
- *     def getVecArray(self, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def getVecArray(self, Vec vec):             # <<<<<<<<<<<<<<
  *         return _DMDA_Vec_array(self, vec)
  * 
  */
@@ -210543,6 +226994,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_51getVecArray(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -210591,7 +227043,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_50getVecArray(struct __pyx_obj_
 
   /* "PETSc/DMDA.pyx":340
  * 
- *     def getVecArray(self, Vec vec not None):
+ *     def getVecArray(self, Vec vec):
  *         return _DMDA_Vec_array(self, vec)             # <<<<<<<<<<<<<<
  * 
  *     #
@@ -210615,7 +227067,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_50getVecArray(struct __pyx_obj_
   /* "PETSc/DMDA.pyx":339
  *     #
  * 
- *     def getVecArray(self, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def getVecArray(self, Vec vec):             # <<<<<<<<<<<<<<
  *         return _DMDA_Vec_array(self, vec)
  * 
  */
@@ -210667,11 +227119,17 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_53setUniformCoordinates(PyObjec
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -210682,26 +227140,31 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_53setUniformCoordinates(PyObjec
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_xmin);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_xmax);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ymin);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_ymax);
           if (value) { values[3] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  4:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_zmin);
           if (value) { values[4] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  5:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_zmax);
@@ -210714,11 +227177,17 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_53setUniformCoordinates(PyObjec
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -210765,9 +227234,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_52setUniformCoordinates(struct
  *         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_ERR(41, 348, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_xmin); if (unlikely(__pyx_t_1 == ((PetscReal)-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_ERR(41, 348, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_xmax); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(41, 348, __pyx_L1_error)
   __pyx_v__xmax = __pyx_t_1;
 
   /* "PETSc/DMDA.pyx":349
@@ -210777,9 +227246,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_52setUniformCoordinates(struct
  *         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_ERR(41, 349, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_ymin); if (unlikely(__pyx_t_1 == ((PetscReal)-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_ERR(41, 349, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_ymax); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(41, 349, __pyx_L1_error)
   __pyx_v__ymax = __pyx_t_1;
 
   /* "PETSc/DMDA.pyx":350
@@ -210789,9 +227258,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_52setUniformCoordinates(struct
  *         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_ERR(41, 350, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_zmin); if (unlikely(__pyx_t_1 == ((PetscReal)-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_ERR(41, 350, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_zmax); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(41, 350, __pyx_L1_error)
   __pyx_v__zmax = __pyx_t_1;
 
   /* "PETSc/DMDA.pyx":351
@@ -210801,7 +227270,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_52setUniformCoordinates(struct
  *                                           _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_ERR(41, 351, __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 == ((int)-1))) __PYX_ERR(41, 351, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":344
  *     #
@@ -210848,7 +227317,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_55setCoordinateName(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -210857,6 +227328,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_55setCoordinateName(PyObject *_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_index)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name)) != 0)) kw_args--;
         else {
@@ -210908,7 +227380,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_54setCoordinateName(struct __py
  *         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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_index); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(41, 357, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
   /* "PETSc/DMDA.pyx":358
@@ -210939,7 +227411,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_54setCoordinateName(struct __py
  * 
  *     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)
+  __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 == ((int)-1))) __PYX_ERR(41, 360, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":356
  *                                           _zmin, _zmax) )
@@ -210987,6 +227459,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_57getCoordinateName(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -211038,7 +227511,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_56getCoordinateName(struct __py
  *         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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_index); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(41, 363, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
   /* "PETSc/DMDA.pyx":364
@@ -211057,7 +227530,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_56getCoordinateName(struct __py
  *         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)
+  __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 == ((int)-1))) __PYX_ERR(41, 365, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":366
  *         cdef const_char *cval = NULL
@@ -211148,7 +227621,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_58getBoundingBox(struct __pyx_o
  *         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_ERR(41, 370, __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 == ((int)-1))) __PYX_ERR(41, 370, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":372
  *         CHKERR( DMDAGetDim(self.dm, &dim) )
@@ -211157,7 +227630,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_58getBoundingBox(struct __pyx_o
  *         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_ERR(41, 372, __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 == ((int)-1))) __PYX_ERR(41, 372, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":373
  *         cdef PetscReal gmin[3], gmax[3]
@@ -211287,7 +227760,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_60getLocalBoundingBox(struct __
  *         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_ERR(41, 378, __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 == ((int)-1))) __PYX_ERR(41, 378, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":380
  *         CHKERR( DMDAGetDim(self.dm, &dim) )
@@ -211296,7 +227769,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_60getLocalBoundingBox(struct __
  *         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_ERR(41, 380, __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 == ((int)-1))) __PYX_ERR(41, 380, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":381
  *         cdef PetscReal lmin[3], lmax[3]
@@ -211422,14 +227895,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_62createNaturalVec(struct __pyx
  *         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_ERR(41, 388, __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 == ((int)-1))) __PYX_ERR(41, 388, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":389
  *         cdef Vec vn = Vec()
  *         CHKERR( DMDACreateNaturalVector(self.dm, &vn.vec) )
  *         return vn             # <<<<<<<<<<<<<<
  * 
- *     def globalToNatural(self, Vec vg not None, Vec vn not None, addv=None):
+ *     def globalToNatural(self, Vec vg, Vec vn, addv=None):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_vn));
@@ -211459,7 +227932,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_62createNaturalVec(struct __pyx
 /* "PETSc/DMDA.pyx":391
  *         return vn
  * 
- *     def globalToNatural(self, Vec vg not None, Vec vn not None, addv=None):             # <<<<<<<<<<<<<<
+ *     def globalToNatural(self, Vec vg, Vec vn, addv=None):             # <<<<<<<<<<<<<<
  *         cdef PetscInsertMode im = insertmode(addv)
  *         CHKERR( DMDAGlobalToNaturalBegin(self.dm, vg.vec, im, vn.vec) )
  */
@@ -211483,8 +227956,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_65globalToNatural(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -211493,11 +227969,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_65globalToNatural(PyObject *__p
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vg)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(41, 391, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
@@ -211510,6 +227988,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_65globalToNatural(PyObject *__p
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -211551,36 +228030,36 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_64globalToNatural(struct __pyx_
 
   /* "PETSc/DMDA.pyx":392
  * 
- *     def globalToNatural(self, Vec vg not None, Vec vn not None, addv=None):
+ *     def globalToNatural(self, Vec vg, Vec vn, 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)-1L))) __PYX_ERR(41, 392, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)((InsertMode)-1L)))) __PYX_ERR(41, 392, __pyx_L1_error)
   __pyx_v_im = __pyx_t_1;
 
   /* "PETSc/DMDA.pyx":393
- *     def globalToNatural(self, Vec vg not None, Vec vn not None, addv=None):
+ *     def globalToNatural(self, Vec vg, Vec vn, 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_ERR(41, 393, __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 == ((int)-1))) __PYX_ERR(41, 393, __pyx_L1_error)
 
   /* "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):
+ *     def naturalToGlobal(self, Vec vn, Vec vg, 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_ERR(41, 394, __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 == ((int)-1))) __PYX_ERR(41, 394, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":391
  *         return vn
  * 
- *     def globalToNatural(self, Vec vg not None, Vec vn not None, addv=None):             # <<<<<<<<<<<<<<
+ *     def globalToNatural(self, Vec vg, Vec vn, addv=None):             # <<<<<<<<<<<<<<
  *         cdef PetscInsertMode im = insertmode(addv)
  *         CHKERR( DMDAGlobalToNaturalBegin(self.dm, vg.vec, im, vn.vec) )
  */
@@ -211600,7 +228079,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_64globalToNatural(struct __pyx_
 /* "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):             # <<<<<<<<<<<<<<
+ *     def naturalToGlobal(self, Vec vn, Vec vg, addv=None):             # <<<<<<<<<<<<<<
  *         cdef PetscInsertMode im = insertmode(addv)
  *         CHKERR( DMDANaturalToGlobalBegin(self.dm, vn.vec, im, vg.vec) )
  */
@@ -211624,8 +228103,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_67naturalToGlobal(PyObject *__p
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -211634,11 +228116,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_67naturalToGlobal(PyObject *__p
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vn)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(41, 396, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
@@ -211651,6 +228135,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_67naturalToGlobal(PyObject *__p
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -211692,22 +228177,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_66naturalToGlobal(struct __pyx_
 
   /* "PETSc/DMDA.pyx":397
  * 
- *     def naturalToGlobal(self, Vec vn not None, Vec vg not None, addv=None):
+ *     def naturalToGlobal(self, Vec vn, Vec vg, 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)-1L))) __PYX_ERR(41, 397, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_1 == ((InsertMode)((InsertMode)-1L)))) __PYX_ERR(41, 397, __pyx_L1_error)
   __pyx_v_im = __pyx_t_1;
 
   /* "PETSc/DMDA.pyx":398
- *     def naturalToGlobal(self, Vec vn not None, Vec vg not None, addv=None):
+ *     def naturalToGlobal(self, Vec vn, Vec vg, 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_ERR(41, 398, __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 == ((int)-1))) __PYX_ERR(41, 398, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":399
  *         cdef PetscInsertMode im = insertmode(addv)
@@ -211716,12 +228201,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_66naturalToGlobal(struct __pyx_
  * 
  *     #
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(41, 399, __pyx_L1_error)
 
   /* "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):             # <<<<<<<<<<<<<<
+ *     def naturalToGlobal(self, Vec vn, Vec vg, addv=None):             # <<<<<<<<<<<<<<
  *         cdef PetscInsertMode im = insertmode(addv)
  *         CHKERR( DMDANaturalToGlobalBegin(self.dm, vn.vec, im, vg.vec) )
  */
@@ -211790,7 +228275,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_68getAO(struct __pyx_obj_8petsc
  *         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_ERR(41, 405, __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 == ((int)-1))) __PYX_ERR(41, 405, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":406
  *         cdef AO ao = AO()
@@ -211898,7 +228383,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_70getScatter(struct __pyx_obj_8
  *         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_ERR(41, 412, __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 == ((int)-1))) __PYX_ERR(41, 412, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":413
  *         cdef Scatter g2l = Scatter()
@@ -211988,8 +228473,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_73setRefinementFactor(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -212000,11 +228488,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_73setRefinementFactor(PyObject
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_refine_x);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_refine_y);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_refine_z);
@@ -212017,8 +228507,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_73setRefinementFactor(PyObject
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -212057,7 +228550,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_72setRefinementFactor(struct __
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(41, 424, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_refine_x); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(41, 424, __pyx_L1_error)
   (__pyx_v_refine[0]) = __pyx_t_1;
 
   /* "PETSc/DMDA.pyx":425
@@ -212067,7 +228560,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_72setRefinementFactor(struct __
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(41, 425, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_refine_y); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(41, 425, __pyx_L1_error)
   (__pyx_v_refine[1]) = __pyx_t_1;
 
   /* "PETSc/DMDA.pyx":426
@@ -212077,7 +228570,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_72setRefinementFactor(struct __
  *         CHKERR( DMDASetRefinementFactor(self.dm,
  *                                       refine[0],
  */
-  __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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_refine_z); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(41, 426, __pyx_L1_error)
   (__pyx_v_refine[2]) = __pyx_t_1;
 
   /* "PETSc/DMDA.pyx":427
@@ -212087,7 +228580,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_72setRefinementFactor(struct __
  *                                       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_ERR(41, 427, __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 == ((int)-1))) __PYX_ERR(41, 427, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":419
  *     #
@@ -212162,7 +228655,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_74getRefinementFactor(struct __
  *         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_ERR(41, 434, __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 == ((int)-1))) __PYX_ERR(41, 434, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":435
  *         cdef PetscInt i, dim = 0, refine[3]
@@ -212171,7 +228664,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_74getRefinementFactor(struct __
  *                                       &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_ERR(41, 435, __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 == ((int)-1))) __PYX_ERR(41, 435, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":439
  *                                       &refine[1],
@@ -212241,6 +228734,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_77setInterpolationType(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -212290,7 +228784,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_76setInterpolationType(struct _
  *         CHKERR( DMDASetInterpolationType(self.dm, ival) )
  * 
  */
-  __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_t_1 = __pyx_f_8petsc4py_5PETSc_dainterpolationtype(__pyx_v_interp_type); if (unlikely(__pyx_t_1 == ((DMDAInterpolationType)((DMDAInterpolationType)-1L)))) __PYX_ERR(41, 442, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
   /* "PETSc/DMDA.pyx":443
@@ -212300,7 +228794,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_76setInterpolationType(struct _
  * 
  *     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_ERR(41, 443, __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 == ((int)-1))) __PYX_ERR(41, 443, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":441
  *         return tuple([toInt(refine[i]) for 0 <= i < dim])
@@ -212371,7 +228865,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_78getInterpolationType(struct _
  *         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_ERR(41, 447, __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 == ((int)-1))) __PYX_ERR(41, 447, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":448
  *         cdef PetscDMDAInterpolationType ival = DMDA_INTERPOLATION_Q0
@@ -212430,6 +228924,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_81setElementType(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -212479,7 +228974,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_80setElementType(struct __pyx_o
  *         CHKERR( DMDASetElementType(self.dm, ival) )
  * 
  */
-  __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_t_1 = __pyx_f_8petsc4py_5PETSc_daelementtype(__pyx_v_elem_type); if (unlikely(__pyx_t_1 == ((DMDAElementType)((DMDAElementType)-1L)))) __PYX_ERR(41, 453, __pyx_L1_error)
   __pyx_v_ival = __pyx_t_1;
 
   /* "PETSc/DMDA.pyx":454
@@ -212489,7 +228984,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_80setElementType(struct __pyx_o
  * 
  *     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_ERR(41, 454, __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 == ((int)-1))) __PYX_ERR(41, 454, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":452
  *     #
@@ -212560,7 +229055,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_82getElementType(struct __pyx_o
  *         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_ERR(41, 458, __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 == ((int)-1))) __PYX_ERR(41, 458, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":459
  *         cdef PetscDMDAElementType ival = DMDA_ELEMENT_Q1
@@ -212620,6 +229115,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_85getElements(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -212637,6 +229133,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_4DMDA_85getElements(PyObject *__pyx_v
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -212720,7 +229217,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_84getElements(struct __pyx_obj_
  *         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_ERR(41, 467, __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 == ((int)-1))) __PYX_ERR(41, 467, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":468
  *         cdef object elements
@@ -212740,7 +229237,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_84getElements(struct __pyx_obj_
  *             CHKERR( DMDASetElementType(self.dm, etype) )
  *         try:
  */
-    __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_t_4 = __pyx_f_8petsc4py_5PETSc_daelementtype(__pyx_v_elem_type); if (unlikely(__pyx_t_4 == ((DMDAElementType)((DMDAElementType)-1L)))) __PYX_ERR(41, 469, __pyx_L1_error)
     __pyx_v_etype = __pyx_t_4;
 
     /* "PETSc/DMDA.pyx":470
@@ -212750,7 +229247,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_84getElements(struct __pyx_obj_
  *         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_ERR(41, 470, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMDASetElementType(__pyx_v_self->__pyx_base.dm, __pyx_v_etype)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(41, 470, __pyx_L1_error)
 
     /* "PETSc/DMDA.pyx":468
  *         cdef object elements
@@ -212777,7 +229274,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_84getElements(struct __pyx_obj_
  *             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_ERR(41, 472, __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 == ((int)-1))) __PYX_ERR(41, 472, __pyx_L5_error)
 
     /* "PETSc/DMDA.pyx":473
  *         try:
@@ -212823,7 +229320,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_84getElements(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_ERR(41, 476, __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 == ((int)-1))) __PYX_ERR(41, 476, __pyx_L1_error)
       goto __pyx_L6;
     }
     /*exception exit:*/{
@@ -212844,9 +229341,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_84getElements(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_ERR(41, 476, __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 == ((int)-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);
@@ -212861,7 +229357,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_84getElements(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);
@@ -212951,7 +229446,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_3dim___get__(struct __pyx_obj_8
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -213033,7 +229528,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_3dof___get__(struct __pyx_obj_8
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -213115,7 +229610,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_5sizes___get__(struct __pyx_obj
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -213197,7 +229692,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_10proc_sizes___get__(struct __p
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -213279,7 +229774,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_13boundary_type___get__(struct
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -213361,7 +229856,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_7stencil___get__(struct __pyx_o
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -213443,7 +229938,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_12stencil_type___get__(struct _
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -213525,7 +230020,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_13stencil_width___get__(struct
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -213607,7 +230102,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_6ranges___get__(struct __pyx_ob
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -213689,7 +230184,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_12ghost_ranges___get__(struct _
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -213771,7 +230266,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_7corners___get__(struct __pyx_o
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -213853,7 +230348,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_4DMDA_13ghost_corners___get__(struct
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -213920,6 +230415,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_1create(PyObject *__pyx_v_sel
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -213937,6 +230433,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_1create(PyObject *__pyx_v_sel
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -213993,7 +230490,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_create(struct __pyx_obj_8pets
  *         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_ERR(42, 8, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreate(__pyx_v_ccomm, (&__pyx_v_newdm))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(42, 8, __pyx_L1_error)
 
   /* "PETSc/DMPlex.pyx":9
  *         cdef PetscDM newdm = NULL
@@ -214065,10 +230562,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_3createFromCellList(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -214077,21 +230579,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_3createFromCellList(PyObject
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_dim)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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)
         }
+        CYTHON_FALLTHROUGH;
         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)
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_interpolate);
           if (value) { values[3] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  4:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -214104,7 +230610,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_3createFromCellList(PyObject
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         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);
@@ -214194,7 +230702,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_2createFromCellList(struct __
  *         cdef PetscInt  numCells = 0
  *         cdef PetscInt  numCorners = 0
  */
-  __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_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_dim); if (unlikely(__pyx_t_3 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 16, __pyx_L1_error)
   __pyx_v_cdim = __pyx_t_3;
 
   /* "PETSc/DMPlex.pyx":17
@@ -214441,7 +230949,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_2createFromCellList(struct __
  *                                          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)
+  __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 == ((int)-1))) __PYX_ERR(42, 38, __pyx_L1_error)
 
   /* "PETSc/DMPlex.pyx":41
  *                                          numCorners, interp, cellVertices,
@@ -214458,7 +230966,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_2createFromCellList(struct __
  *         PetscCLEAR(self.obj); self.dm = newdm
  *         return self             # <<<<<<<<<<<<<<
  * 
- *     def createBoxMesh(self, dim, interpolate=True, comm=None):
+ *     def createBoxMesh(self, dim, numFaces=1, interpolate=True, comm=None):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
@@ -214490,33 +230998,40 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_2createFromCellList(struct __
 /* "PETSc/DMPlex.pyx":44
  *         return self
  * 
- *     def createBoxMesh(self, dim, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
+ *     def createBoxMesh(self, dim, numFaces=1, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
  *         cdef PetscInt  cdim = asInt(dim)
- *         cdef PetscBool interp = interpolate
+ *         cdef PetscInt  cnumFaces = asInt(numFaces)
  */
 
 /* 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 char __pyx_doc_8petsc4py_5PETSc_6DMPlex_4createBoxMesh[] = "DMPlex.createBoxMesh(self, dim, numFaces=1, 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_numFaces = 0;
   PyObject *__pyx_v_interpolate = 0;
   PyObject *__pyx_v_comm = 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);
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_dim,&__pyx_n_s_numFaces,&__pyx_n_s_interpolate,&__pyx_n_s_comm,0};
+    PyObject* values[4] = {0,0,0,0};
+    values[1] = ((PyObject *)__pyx_int_1);
+    values[2] = ((PyObject *)Py_True);
+    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);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -214525,50 +231040,64 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_5createBoxMesh(PyObject *__py
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_dim)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_interpolate);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_numFaces);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_interpolate);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
+          if (value) { values[3] = value; kw_args--; }
+        }
       }
       if (unlikely(kw_args > 0)) {
         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)) {
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         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];
+    __pyx_v_numFaces = values[1];
+    __pyx_v_interpolate = values[2];
+    __pyx_v_comm = values[3];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createBoxMesh", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 44, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createBoxMesh", 0, 1, 4, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 44, __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);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_4createBoxMesh(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_dim, __pyx_v_numFaces, __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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_4createBoxMesh(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_dim, PyObject *__pyx_v_numFaces, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm) {
   PetscInt __pyx_v_cdim;
+  PetscInt __pyx_v_cnumFaces;
   PetscBool __pyx_v_interp;
   MPI_Comm __pyx_v_ccomm;
   DM __pyx_v_newdm;
@@ -214582,55 +231111,65 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_4createBoxMesh(struct __pyx_o
 
   /* "PETSc/DMPlex.pyx":45
  * 
- *     def createBoxMesh(self, dim, interpolate=True, comm=None):
+ *     def createBoxMesh(self, dim, numFaces=1, interpolate=True, comm=None):
  *         cdef PetscInt  cdim = asInt(dim)             # <<<<<<<<<<<<<<
+ *         cdef PetscInt  cnumFaces = asInt(numFaces)
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(42, 45, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_dim); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 45, __pyx_L1_error)
   __pyx_v_cdim = __pyx_t_1;
 
   /* "PETSc/DMPlex.pyx":46
- *     def createBoxMesh(self, dim, interpolate=True, comm=None):
+ *     def createBoxMesh(self, dim, numFaces=1, interpolate=True, comm=None):
  *         cdef PetscInt  cdim = asInt(dim)
+ *         cdef PetscInt  cnumFaces = asInt(numFaces)             # <<<<<<<<<<<<<<
+ *         cdef PetscBool interp = interpolate
+ *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numFaces); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 46, __pyx_L1_error)
+  __pyx_v_cnumFaces = __pyx_t_1;
+
+  /* "PETSc/DMPlex.pyx":47
+ *         cdef PetscInt  cdim = asInt(dim)
+ *         cdef PetscInt  cnumFaces = asInt(numFaces)
  *         cdef PetscBool interp = interpolate             # <<<<<<<<<<<<<<
  *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscDM   newdm = NULL
  */
-  __pyx_t_2 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_interpolate)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 46, __pyx_L1_error)
+  __pyx_t_2 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_interpolate)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 47, __pyx_L1_error)
   __pyx_v_interp = __pyx_t_2;
 
-  /* "PETSc/DMPlex.pyx":47
- *         cdef PetscInt  cdim = asInt(dim)
+  /* "PETSc/DMPlex.pyx":48
+ *         cdef PetscInt  cnumFaces = asInt(numFaces)
  *         cdef PetscBool interp = interpolate
  *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)             # <<<<<<<<<<<<<<
  *         cdef PetscDM   newdm = NULL
- *         CHKERR( DMPlexCreateBoxMesh(ccomm,cdim, interp, &newdm) )
+ *         CHKERR( DMPlexCreateBoxMesh(ccomm, cdim, cnumFaces, 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_ERR(42, 47, __pyx_L1_error)
+  __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, 48, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_3;
 
-  /* "PETSc/DMPlex.pyx":48
+  /* "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) )
+ *         CHKERR( DMPlexCreateBoxMesh(ccomm, cdim, cnumFaces, interp, &newdm) )
  *         PetscCLEAR(self.obj); self.dm = newdm
  */
   __pyx_v_newdm = NULL;
 
-  /* "PETSc/DMPlex.pyx":49
+  /* "PETSc/DMPlex.pyx":50
  *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscDM   newdm = NULL
- *         CHKERR( DMPlexCreateBoxMesh(ccomm,cdim, interp, &newdm) )             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexCreateBoxMesh(ccomm, cdim, cnumFaces, 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_ERR(42, 49, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreateBoxMesh(__pyx_v_ccomm, __pyx_v_cdim, __pyx_v_cnumFaces, __pyx_v_interp, (&__pyx_v_newdm))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(42, 50, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":50
+  /* "PETSc/DMPlex.pyx":51
  *         cdef PetscDM   newdm = NULL
- *         CHKERR( DMPlexCreateBoxMesh(ccomm,cdim, interp, &newdm) )
+ *         CHKERR( DMPlexCreateBoxMesh(ccomm, cdim, cnumFaces, interp, &newdm) )
  *         PetscCLEAR(self.obj); self.dm = newdm             # <<<<<<<<<<<<<<
  *         return self
  * 
@@ -214638,8 +231177,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_4createBoxMesh(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":51
- *         CHKERR( DMPlexCreateBoxMesh(ccomm,cdim, interp, &newdm) )
+  /* "PETSc/DMPlex.pyx":52
+ *         CHKERR( DMPlexCreateBoxMesh(ccomm, cdim, cnumFaces, interp, &newdm) )
  *         PetscCLEAR(self.obj); self.dm = newdm
  *         return self             # <<<<<<<<<<<<<<
  * 
@@ -214653,9 +231192,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_4createBoxMesh(struct __pyx_o
   /* "PETSc/DMPlex.pyx":44
  *         return self
  * 
- *     def createBoxMesh(self, dim, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
+ *     def createBoxMesh(self, dim, numFaces=1, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
  *         cdef PetscInt  cdim = asInt(dim)
- *         cdef PetscBool interp = interpolate
+ *         cdef PetscInt  cnumFaces = asInt(numFaces)
  */
 
   /* function exit code */
@@ -214668,7 +231207,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_4createBoxMesh(struct __pyx_o
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":53
+/* "PETSc/DMPlex.pyx":54
  *         return self
  * 
  *     def createHexBoxMesh(self, numcells, boundary_type=None, comm=None):             # <<<<<<<<<<<<<<
@@ -214696,8 +231235,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_7createHexBoxMesh(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -214706,11 +231248,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_7createHexBoxMesh(PyObject *_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_numcells)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_boundary_type);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -214718,12 +231262,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_7createHexBoxMesh(PyObject *_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createHexBoxMesh") < 0)) __PYX_ERR(42, 53, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createHexBoxMesh") < 0)) __PYX_ERR(42, 54, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -214735,7 +231281,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_7createHexBoxMesh(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createHexBoxMesh", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 53, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createHexBoxMesh", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 54, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createHexBoxMesh", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -214767,7 +231313,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_6createHexBoxMesh(struct __py
   int __pyx_t_6;
   __Pyx_RefNannySetupContext("createHexBoxMesh", 0);
 
-  /* "PETSc/DMPlex.pyx":54
+  /* "PETSc/DMPlex.pyx":55
  * 
  *     def createHexBoxMesh(self, numcells, boundary_type=None, comm=None):
  *         cdef PetscInt dim = 0, *icells = NULL             # <<<<<<<<<<<<<<
@@ -214777,19 +231323,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_6createHexBoxMesh(struct __py
   __pyx_v_dim = 0;
   __pyx_v_icells = NULL;
 
-  /* "PETSc/DMPlex.pyx":55
+  /* "PETSc/DMPlex.pyx":56
  *     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_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_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, 56, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_tmp = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":56
+  /* "PETSc/DMPlex.pyx":57
  *         cdef PetscInt dim = 0, *icells = NULL
  *         cdef object tmp = iarray_i(numcells, &dim, &icells)
  *         cdef PetscDMBoundaryType btx = DM_BOUNDARY_NONE             # <<<<<<<<<<<<<<
@@ -214798,7 +231344,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_6createHexBoxMesh(struct __py
  */
   __pyx_v_btx = DM_BOUNDARY_NONE;
 
-  /* "PETSc/DMPlex.pyx":57
+  /* "PETSc/DMPlex.pyx":58
  *         cdef object tmp = iarray_i(numcells, &dim, &icells)
  *         cdef PetscDMBoundaryType btx = DM_BOUNDARY_NONE
  *         cdef PetscDMBoundaryType bty = DM_BOUNDARY_NONE             # <<<<<<<<<<<<<<
@@ -214807,7 +231353,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_6createHexBoxMesh(struct __py
  */
   __pyx_v_bty = DM_BOUNDARY_NONE;
 
-  /* "PETSc/DMPlex.pyx":58
+  /* "PETSc/DMPlex.pyx":59
  *         cdef PetscDMBoundaryType btx = DM_BOUNDARY_NONE
  *         cdef PetscDMBoundaryType bty = DM_BOUNDARY_NONE
  *         cdef PetscDMBoundaryType btz = DM_BOUNDARY_NONE             # <<<<<<<<<<<<<<
@@ -214816,7 +231362,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_6createHexBoxMesh(struct __py
  */
   __pyx_v_btz = DM_BOUNDARY_NONE;
 
-  /* "PETSc/DMPlex.pyx":59
+  /* "PETSc/DMPlex.pyx":60
  *         cdef PetscDMBoundaryType bty = DM_BOUNDARY_NONE
  *         cdef PetscDMBoundaryType btz = DM_BOUNDARY_NONE
  *         if boundary_type is not None:             # <<<<<<<<<<<<<<
@@ -214827,16 +231373,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_6createHexBoxMesh(struct __py
   __pyx_t_3 = (__pyx_t_2 != 0);
   if (__pyx_t_3) {
 
-    /* "PETSc/DMPlex.pyx":60
+    /* "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 == -1L && PyErr_Occurred())) __PYX_ERR(42, 60, __pyx_L1_error)
+    __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 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 61, __pyx_L1_error)
 
-    /* "PETSc/DMPlex.pyx":59
+    /* "PETSc/DMPlex.pyx":60
  *         cdef PetscDMBoundaryType bty = DM_BOUNDARY_NONE
  *         cdef PetscDMBoundaryType btz = DM_BOUNDARY_NONE
  *         if boundary_type is not None:             # <<<<<<<<<<<<<<
@@ -214845,17 +231391,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_6createHexBoxMesh(struct __py
  */
   }
 
-  /* "PETSc/DMPlex.pyx":61
+  /* "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_ERR(42, 61, __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(42, 62, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_5;
 
-  /* "PETSc/DMPlex.pyx":62
+  /* "PETSc/DMPlex.pyx":63
  *             asBoundary(boundary_type, &btx, &bty, &btz)
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscDM  newdm = NULL             # <<<<<<<<<<<<<<
@@ -214864,16 +231410,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_6createHexBoxMesh(struct __py
  */
   __pyx_v_newdm = NULL;
 
-  /* "PETSc/DMPlex.pyx":63
+  /* "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_ERR(42, 63, __pyx_L1_error)
+  __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 == ((int)-1))) __PYX_ERR(42, 64, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":64
+  /* "PETSc/DMPlex.pyx":65
  *         cdef PetscDM  newdm = NULL
  *         CHKERR( DMPlexCreateHexBoxMesh(ccomm, dim, icells, btx, bty, btz, &newdm) )
  *         PetscCLEAR(self.obj); self.dm = newdm             # <<<<<<<<<<<<<<
@@ -214883,19 +231429,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_6createHexBoxMesh(struct __py
   __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":65
+  /* "PETSc/DMPlex.pyx":66
  *         CHKERR( DMPlexCreateHexBoxMesh(ccomm, dim, icells, btx, bty, btz, &newdm) )
  *         PetscCLEAR(self.obj); self.dm = newdm
  *         return self             # <<<<<<<<<<<<<<
  * 
- *     def createCGNS(self, cgid, interpolate=True, comm=None):
+ *     def createFromFile(self, filename, 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":53
+  /* "PETSc/DMPlex.pyx":54
  *         return self
  * 
  *     def createHexBoxMesh(self, numcells, boundary_type=None, comm=None):             # <<<<<<<<<<<<<<
@@ -214915,7 +231461,209 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_6createHexBoxMesh(struct __py
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":67
+/* "PETSc/DMPlex.pyx":68
+ *         return self
+ * 
+ *     def createFromFile(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_9createFromFile(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_8createFromFile[] = "DMPlex.createFromFile(self, filename, interpolate=True, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_9createFromFile(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("createFromFile (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);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        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;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_interpolate);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        CYTHON_FALLTHROUGH;
+        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, "createFromFile") < 0)) __PYX_ERR(42, 68, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        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("createFromFile", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 68, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createFromFile", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_8createFromFile(((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_8createFromFile(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
+  MPI_Comm __pyx_t_1;
+  PetscBool __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("createFromFile", 0);
+  __Pyx_INCREF(__pyx_v_filename);
+
+  /* "PETSc/DMPlex.pyx":69
+ * 
+ *     def createFromFile(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_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 69, __pyx_L1_error)
+  __pyx_v_ccomm = __pyx_t_1;
+
+  /* "PETSc/DMPlex.pyx":70
+ *     def createFromFile(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 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_interpolate)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 70, __pyx_L1_error)
+  __pyx_v_interp = __pyx_t_2;
+
+  /* "PETSc/DMPlex.pyx":71
+ *         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":72
+ *         cdef PetscBool interp = interpolate
+ *         cdef PetscDM   newdm = NULL
+ *         cdef const_char *cfile = NULL             # <<<<<<<<<<<<<<
+ *         filename = str2bytes(filename, &cfile)
+ *         CHKERR( DMPlexCreateFromFile(ccomm, cfile, interp, &newdm) )
+ */
+  __pyx_v_cfile = NULL;
+
+  /* "PETSc/DMPlex.pyx":73
+ *         cdef PetscDM   newdm = NULL
+ *         cdef const_char *cfile = NULL
+ *         filename = str2bytes(filename, &cfile)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexCreateFromFile(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, 73, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __Pyx_DECREF_SET(__pyx_v_filename, __pyx_t_3);
+  __pyx_t_3 = 0;
+
+  /* "PETSc/DMPlex.pyx":74
+ *         cdef const_char *cfile = NULL
+ *         filename = str2bytes(filename, &cfile)
+ *         CHKERR( DMPlexCreateFromFile(ccomm, cfile, interp, &newdm) )             # <<<<<<<<<<<<<<
+ *         PetscCLEAR(self.obj); self.dm = newdm
+ *         return self
+ */
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreateFromFile(__pyx_v_ccomm, __pyx_v_cfile, __pyx_v_interp, (&__pyx_v_newdm))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(42, 74, __pyx_L1_error)
+
+  /* "PETSc/DMPlex.pyx":75
+ *         filename = str2bytes(filename, &cfile)
+ *         CHKERR( DMPlexCreateFromFile(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":76
+ *         CHKERR( DMPlexCreateFromFile(ccomm, cfile, interp, &newdm) )
+ *         PetscCLEAR(self.obj); self.dm = newdm
+ *         return self             # <<<<<<<<<<<<<<
+ * 
+ *     def createCGNS(self, cgid, 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":68
+ *         return self
+ * 
+ *     def createFromFile(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_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createFromFile", __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":78
  *         return self
  * 
  *     def createCGNS(self, cgid, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
@@ -214924,9 +231672,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_6createHexBoxMesh(struct __py
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_11createCGNS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_10createCGNS[] = "DMPlex.createCGNS(self, cgid, interpolate=True, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_11createCGNS(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;
@@ -214943,8 +231691,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_9createCGNS(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -214953,11 +231704,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_9createCGNS(PyObject *__pyx_v
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_cgid)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_interpolate);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -214965,12 +231718,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_9createCGNS(PyObject *__pyx_v
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createCGNS") < 0)) __PYX_ERR(42, 67, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createCGNS") < 0)) __PYX_ERR(42, 78, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -214982,20 +231737,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_9createCGNS(PyObject *__pyx_v
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createCGNS", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 67, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createCGNS", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 78, __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_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_10createCGNS(((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_8createCGNS(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_cgid, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_10createCGNS(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;
@@ -215008,27 +231763,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_8createCGNS(struct __pyx_obj_
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("createCGNS", 0);
 
-  /* "PETSc/DMPlex.pyx":68
+  /* "PETSc/DMPlex.pyx":79
  * 
  *     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_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 68, __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, 79, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":69
+  /* "PETSc/DMPlex.pyx":80
  *     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_t_2 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_interpolate)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 69, __pyx_L1_error)
+  __pyx_t_2 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_interpolate)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 80, __pyx_L1_error)
   __pyx_v_interp = __pyx_t_2;
 
-  /* "PETSc/DMPlex.pyx":70
+  /* "PETSc/DMPlex.pyx":81
  *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscBool interp = interpolate
  *         cdef PetscDM   newdm = NULL             # <<<<<<<<<<<<<<
@@ -215037,26 +231792,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_8createCGNS(struct __pyx_obj_
  */
   __pyx_v_newdm = NULL;
 
-  /* "PETSc/DMPlex.pyx":71
+  /* "PETSc/DMPlex.pyx":82
  *         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_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_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_cgid); if (unlikely(__pyx_t_3 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 82, __pyx_L1_error)
   __pyx_v_ccgid = __pyx_t_3;
 
-  /* "PETSc/DMPlex.pyx":72
+  /* "PETSc/DMPlex.pyx":83
  *         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_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)
+  __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 == ((int)-1))) __PYX_ERR(42, 83, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":73
+  /* "PETSc/DMPlex.pyx":84
  *         cdef PetscInt  ccgid = asInt(cgid)
  *         CHKERR( DMPlexCreateCGNS(ccomm, ccgid, interp, &newdm) )
  *         PetscCLEAR(self.obj); self.dm = newdm             # <<<<<<<<<<<<<<
@@ -215066,7 +231821,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_8createCGNS(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":74
+  /* "PETSc/DMPlex.pyx":85
  *         CHKERR( DMPlexCreateCGNS(ccomm, ccgid, interp, &newdm) )
  *         PetscCLEAR(self.obj); self.dm = newdm
  *         return self             # <<<<<<<<<<<<<<
@@ -215078,7 +231833,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_8createCGNS(struct __pyx_obj_
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":67
+  /* "PETSc/DMPlex.pyx":78
  *         return self
  * 
  *     def createCGNS(self, cgid, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
@@ -215096,7 +231851,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_8createCGNS(struct __pyx_obj_
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":76
+/* "PETSc/DMPlex.pyx":87
  *         return self
  * 
  *     def createCGNSFromFile(self, filename, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
@@ -215105,9 +231860,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_8createCGNS(struct __pyx_obj_
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_13createCGNSFromFile(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_12createCGNSFromFile[] = "DMPlex.createCGNSFromFile(self, filename, interpolate=True, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_13createCGNSFromFile(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;
@@ -215124,8 +231879,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_11createCGNSFromFile(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -215134,11 +231892,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_11createCGNSFromFile(PyObject
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_filename)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_interpolate);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -215146,12 +231906,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_11createCGNSFromFile(PyObject
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createCGNSFromFile") < 0)) __PYX_ERR(42, 76, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createCGNSFromFile") < 0)) __PYX_ERR(42, 87, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -215163,20 +231925,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_11createCGNSFromFile(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createCGNSFromFile", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 76, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createCGNSFromFile", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 87, __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_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_12createCGNSFromFile(((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_10createCGNSFromFile(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_filename, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_12createCGNSFromFile(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;
@@ -215190,27 +231952,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_10createCGNSFromFile(struct _
   __Pyx_RefNannySetupContext("createCGNSFromFile", 0);
   __Pyx_INCREF(__pyx_v_filename);
 
-  /* "PETSc/DMPlex.pyx":77
+  /* "PETSc/DMPlex.pyx":88
  * 
  *     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_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 77, __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, 88, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":78
+  /* "PETSc/DMPlex.pyx":89
  *     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_t_2 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_interpolate)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 78, __pyx_L1_error)
+  __pyx_t_2 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_interpolate)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 89, __pyx_L1_error)
   __pyx_v_interp = __pyx_t_2;
 
-  /* "PETSc/DMPlex.pyx":79
+  /* "PETSc/DMPlex.pyx":90
  *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscBool interp = interpolate
  *         cdef PetscDM   newdm = NULL             # <<<<<<<<<<<<<<
@@ -215219,7 +231981,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_10createCGNSFromFile(struct _
  */
   __pyx_v_newdm = NULL;
 
-  /* "PETSc/DMPlex.pyx":80
+  /* "PETSc/DMPlex.pyx":91
  *         cdef PetscBool interp = interpolate
  *         cdef PetscDM   newdm = NULL
  *         cdef const_char *cfile = NULL             # <<<<<<<<<<<<<<
@@ -215228,28 +231990,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_10createCGNSFromFile(struct _
  */
   __pyx_v_cfile = NULL;
 
-  /* "PETSc/DMPlex.pyx":81
+  /* "PETSc/DMPlex.pyx":92
  *         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_t_3 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_filename, (&__pyx_v_cfile)); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 92, __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
+  /* "PETSc/DMPlex.pyx":93
  *         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)
+  __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 == ((int)-1))) __PYX_ERR(42, 93, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":83
+  /* "PETSc/DMPlex.pyx":94
  *         filename = str2bytes(filename, &cfile)
  *         CHKERR( DMPlexCreateCGNSFromFile(ccomm, cfile, interp, &newdm) )
  *         PetscCLEAR(self.obj); self.dm = newdm             # <<<<<<<<<<<<<<
@@ -215259,7 +232021,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_10createCGNSFromFile(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":84
+  /* "PETSc/DMPlex.pyx":95
  *         CHKERR( DMPlexCreateCGNSFromFile(ccomm, cfile, interp, &newdm) )
  *         PetscCLEAR(self.obj); self.dm = newdm
  *         return self             # <<<<<<<<<<<<<<
@@ -215271,7 +232033,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_10createCGNSFromFile(struct _
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":76
+  /* "PETSc/DMPlex.pyx":87
  *         return self
  * 
  *     def createCGNSFromFile(self, filename, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
@@ -215291,7 +232053,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_10createCGNSFromFile(struct _
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":86
+/* "PETSc/DMPlex.pyx":97
  *         return self
  * 
  *     def createExodusFromFile(self, filename, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
@@ -215300,9 +232062,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_10createCGNSFromFile(struct _
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_15createExodusFromFile(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_14createExodusFromFile[] = "DMPlex.createExodusFromFile(self, filename, interpolate=True, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_15createExodusFromFile(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;
@@ -215319,8 +232081,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_13createExodusFromFile(PyObje
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -215329,11 +232094,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_13createExodusFromFile(PyObje
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_filename)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_interpolate);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -215341,12 +232108,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_13createExodusFromFile(PyObje
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createExodusFromFile") < 0)) __PYX_ERR(42, 86, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createExodusFromFile") < 0)) __PYX_ERR(42, 97, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -215358,20 +232127,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_13createExodusFromFile(PyObje
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createExodusFromFile", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 86, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createExodusFromFile", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 97, __pyx_L3_error)
   __pyx_L3_error:;
   __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_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_14createExodusFromFile(((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_12createExodusFromFile(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_filename, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_14createExodusFromFile(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;
@@ -215385,27 +232154,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_12createExodusFromFile(struct
   __Pyx_RefNannySetupContext("createExodusFromFile", 0);
   __Pyx_INCREF(__pyx_v_filename);
 
-  /* "PETSc/DMPlex.pyx":87
+  /* "PETSc/DMPlex.pyx":98
  * 
  *     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_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_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, 98, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":88
+  /* "PETSc/DMPlex.pyx":99
  *     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 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_interpolate)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 88, __pyx_L1_error)
+  __pyx_t_2 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_interpolate)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 99, __pyx_L1_error)
   __pyx_v_interp = __pyx_t_2;
 
-  /* "PETSc/DMPlex.pyx":89
+  /* "PETSc/DMPlex.pyx":100
  *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscBool interp = interpolate
  *         cdef PetscDM   newdm = NULL             # <<<<<<<<<<<<<<
@@ -215414,7 +232183,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_12createExodusFromFile(struct
  */
   __pyx_v_newdm = NULL;
 
-  /* "PETSc/DMPlex.pyx":90
+  /* "PETSc/DMPlex.pyx":101
  *         cdef PetscBool interp = interpolate
  *         cdef PetscDM   newdm = NULL
  *         cdef const_char *cfile = NULL             # <<<<<<<<<<<<<<
@@ -215423,28 +232192,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_12createExodusFromFile(struct
  */
   __pyx_v_cfile = NULL;
 
-  /* "PETSc/DMPlex.pyx":91
+  /* "PETSc/DMPlex.pyx":102
  *         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_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_t_3 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_filename, (&__pyx_v_cfile)); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 102, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_DECREF_SET(__pyx_v_filename, __pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/DMPlex.pyx":92
+  /* "PETSc/DMPlex.pyx":103
  *         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_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)
+  __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 == ((int)-1))) __PYX_ERR(42, 103, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":93
+  /* "PETSc/DMPlex.pyx":104
  *         filename = str2bytes(filename, &cfile)
  *         CHKERR( DMPlexCreateExodusFromFile(ccomm, cfile, interp, &newdm) )
  *         PetscCLEAR(self.obj); self.dm = newdm             # <<<<<<<<<<<<<<
@@ -215454,7 +232223,7 @@ 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":94
+  /* "PETSc/DMPlex.pyx":105
  *         CHKERR( DMPlexCreateExodusFromFile(ccomm, cfile, interp, &newdm) )
  *         PetscCLEAR(self.obj); self.dm = newdm
  *         return self             # <<<<<<<<<<<<<<
@@ -215466,7 +232235,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_12createExodusFromFile(struct
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":86
+  /* "PETSc/DMPlex.pyx":97
  *         return self
  * 
  *     def createExodusFromFile(self, filename, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
@@ -215486,7 +232255,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_12createExodusFromFile(struct
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":96
+/* "PETSc/DMPlex.pyx":107
  *         return self
  * 
  *     def createExodus(self, exoid, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
@@ -215495,9 +232264,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_12createExodusFromFile(struct
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_17createExodus(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_16createExodus[] = "DMPlex.createExodus(self, exoid, interpolate=True, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_17createExodus(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;
@@ -215514,8 +232283,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_15createExodus(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -215524,11 +232296,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_15createExodus(PyObject *__py
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_exoid)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_interpolate);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -215536,12 +232310,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_15createExodus(PyObject *__py
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createExodus") < 0)) __PYX_ERR(42, 96, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createExodus") < 0)) __PYX_ERR(42, 107, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -215553,20 +232329,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_15createExodus(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createExodus", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 96, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createExodus", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 107, __pyx_L3_error)
   __pyx_L3_error:;
   __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_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_16createExodus(((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_14createExodus(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_exoid, PyObject *__pyx_v_interpolate, PyObject *__pyx_v_comm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_16createExodus(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;
@@ -215579,27 +232355,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_14createExodus(struct __pyx_o
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("createExodus", 0);
 
-  /* "PETSc/DMPlex.pyx":97
+  /* "PETSc/DMPlex.pyx":108
  * 
  *     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_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_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, 108, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":98
+  /* "PETSc/DMPlex.pyx":109
  *     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_t_2 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_interpolate)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 98, __pyx_L1_error)
+  __pyx_t_2 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_interpolate)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 109, __pyx_L1_error)
   __pyx_v_interp = __pyx_t_2;
 
-  /* "PETSc/DMPlex.pyx":99
+  /* "PETSc/DMPlex.pyx":110
  *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscBool interp = interpolate
  *         cdef PetscDM   newdm = NULL             # <<<<<<<<<<<<<<
@@ -215608,26 +232384,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_14createExodus(struct __pyx_o
  */
   __pyx_v_newdm = NULL;
 
-  /* "PETSc/DMPlex.pyx":100
+  /* "PETSc/DMPlex.pyx":111
  *         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_f_8petsc4py_5PETSc_asInt(__pyx_v_exoid); if (unlikely(__pyx_t_3 == -1L && PyErr_Occurred())) __PYX_ERR(42, 100, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_exoid); if (unlikely(__pyx_t_3 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 111, __pyx_L1_error)
   __pyx_v_cexoid = __pyx_t_3;
 
-  /* "PETSc/DMPlex.pyx":101
+  /* "PETSc/DMPlex.pyx":112
  *         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_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)
+  __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 == ((int)-1))) __PYX_ERR(42, 112, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":102
+  /* "PETSc/DMPlex.pyx":113
  *         cdef PetscInt  cexoid = asInt(exoid)
  *         CHKERR( DMPlexCreateExodus(ccomm, cexoid, interp, &newdm) )
  *         PetscCLEAR(self.obj); self.dm = newdm             # <<<<<<<<<<<<<<
@@ -215637,7 +232413,7 @@ 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":103
+  /* "PETSc/DMPlex.pyx":114
  *         CHKERR( DMPlexCreateExodus(ccomm, cexoid, interp, &newdm) )
  *         PetscCLEAR(self.obj); self.dm = newdm
  *         return self             # <<<<<<<<<<<<<<
@@ -215649,7 +232425,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_14createExodus(struct __pyx_o
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":96
+  /* "PETSc/DMPlex.pyx":107
  *         return self
  * 
  *     def createExodus(self, exoid, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
@@ -215667,7 +232443,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_14createExodus(struct __pyx_o
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":105
+/* "PETSc/DMPlex.pyx":116
  *         return self
  * 
  *     def createGmsh(self, Viewer viewer, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
@@ -215676,9 +232452,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_14createExodus(struct __pyx_o
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_19createGmsh(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_18createGmsh[] = "DMPlex.createGmsh(self, Viewer viewer, interpolate=True, comm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_19createGmsh(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;
@@ -215695,8 +232471,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_17createGmsh(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -215705,11 +232484,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_17createGmsh(PyObject *__pyx_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_viewer)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_interpolate);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -215717,12 +232498,14 @@ 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_ERR(42, 105, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createGmsh") < 0)) __PYX_ERR(42, 116, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -215734,14 +232517,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_17createGmsh(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createGmsh", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 105, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createGmsh", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 116, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.createGmsh", __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(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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_viewer), __pyx_ptype_8petsc4py_5PETSc_Viewer, 0, "viewer", 0))) __PYX_ERR(42, 116, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_18createGmsh(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_viewer, __pyx_v_interpolate, __pyx_v_comm);
 
   /* function exit code */
   goto __pyx_L0;
@@ -215752,7 +232535,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_17createGmsh(PyObject *__pyx_
   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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_18createGmsh(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;
@@ -215763,27 +232546,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_16createGmsh(struct __pyx_obj
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("createGmsh", 0);
 
-  /* "PETSc/DMPlex.pyx":106
+  /* "PETSc/DMPlex.pyx":117
  * 
  *     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_def_Comm(__pyx_v_comm, __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 106, __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, 117, __pyx_L1_error)
   __pyx_v_ccomm = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":107
+  /* "PETSc/DMPlex.pyx":118
  *     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_2 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_interpolate)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 107, __pyx_L1_error)
+  __pyx_t_2 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_interpolate)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 118, __pyx_L1_error)
   __pyx_v_interp = __pyx_t_2;
 
-  /* "PETSc/DMPlex.pyx":108
+  /* "PETSc/DMPlex.pyx":119
  *         cdef MPI_Comm  ccomm = def_Comm(comm, PETSC_COMM_DEFAULT)
  *         cdef PetscBool interp = interpolate
  *         cdef PetscDM   newdm = NULL             # <<<<<<<<<<<<<<
@@ -215792,16 +232575,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_16createGmsh(struct __pyx_obj
  */
   __pyx_v_newdm = NULL;
 
-  /* "PETSc/DMPlex.pyx":109
+  /* "PETSc/DMPlex.pyx":120
  *         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)
+  __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 == ((int)-1))) __PYX_ERR(42, 120, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":110
+  /* "PETSc/DMPlex.pyx":121
  *         cdef PetscDM   newdm = NULL
  *         CHKERR( DMPlexCreateGmsh(ccomm, viewer.vwr, interp, &newdm) )
  *         PetscCLEAR(self.obj); self.dm = newdm             # <<<<<<<<<<<<<<
@@ -215811,7 +232594,7 @@ 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":111
+  /* "PETSc/DMPlex.pyx":122
  *         CHKERR( DMPlexCreateGmsh(ccomm, viewer.vwr, interp, &newdm) )
  *         PetscCLEAR(self.obj); self.dm = newdm
  *         return self             # <<<<<<<<<<<<<<
@@ -215823,7 +232606,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_16createGmsh(struct __pyx_obj
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":105
+  /* "PETSc/DMPlex.pyx":116
  *         return self
  * 
  *     def createGmsh(self, Viewer viewer, interpolate=True, comm=None):             # <<<<<<<<<<<<<<
@@ -215841,7 +232624,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_16createGmsh(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":113
+/* "PETSc/DMPlex.pyx":124
  *         return self
  * 
  *     def createCohesiveSubmesh(self, hasLagrange, value):             # <<<<<<<<<<<<<<
@@ -215850,9 +232633,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_16createGmsh(struct __pyx_obj
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_21createCohesiveSubmesh(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_20createCohesiveSubmesh[] = "DMPlex.createCohesiveSubmesh(self, hasLagrange, value)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_21createCohesiveSubmesh(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_hasLagrange = 0;
   PyObject *__pyx_v_value = 0;
   PyObject *__pyx_r = 0;
@@ -215866,7 +232649,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_19createCohesiveSubmesh(PyObj
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -215875,14 +232660,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_19createCohesiveSubmesh(PyObj
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_hasLagrange)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(42, 113, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("createCohesiveSubmesh", 1, 2, 2, 1); __PYX_ERR(42, 124, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createCohesiveSubmesh") < 0)) __PYX_ERR(42, 113, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createCohesiveSubmesh") < 0)) __PYX_ERR(42, 124, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -215895,20 +232681,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_19createCohesiveSubmesh(PyObj
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createCohesiveSubmesh", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 113, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createCohesiveSubmesh", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 124, __pyx_L3_error)
   __pyx_L3_error:;
   __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_18createCohesiveSubmesh(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_hasLagrange, __pyx_v_value);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_20createCohesiveSubmesh(((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_18createCohesiveSubmesh(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_hasLagrange, PyObject *__pyx_v_value) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_20createCohesiveSubmesh(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;
@@ -215920,48 +232706,48 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_18createCohesiveSubmesh(struc
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("createCohesiveSubmesh", 0);
 
-  /* "PETSc/DMPlex.pyx":114
+  /* "PETSc/DMPlex.pyx":125
  * 
  *     def createCohesiveSubmesh(self, hasLagrange, value):
  *         cdef PetscBool flag = hasLagrange             # <<<<<<<<<<<<<<
  *         cdef PetscInt cvalue = asInt(value)
  *         cdef DM subdm = DMPlex()
  */
-  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_hasLagrange)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 114, __pyx_L1_error)
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_hasLagrange)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 125, __pyx_L1_error)
   __pyx_v_flag = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":115
+  /* "PETSc/DMPlex.pyx":126
  *     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_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_t_2 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_value); if (unlikely(__pyx_t_2 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 126, __pyx_L1_error)
   __pyx_v_cvalue = __pyx_t_2;
 
-  /* "PETSc/DMPlex.pyx":116
+  /* "PETSc/DMPlex.pyx":127
  *         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_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DMPlex), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 127, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __pyx_v_subdm = ((struct PyPetscDMObject *)__pyx_t_3);
   __pyx_t_3 = 0;
 
-  /* "PETSc/DMPlex.pyx":117
+  /* "PETSc/DMPlex.pyx":128
  *         cdef PetscInt cvalue = asInt(value)
  *         cdef DM subdm = DMPlex()
  *         CHKERR( DMPlexCreateCohesiveSubmesh(self.dm, flag, NULL, cvalue, &subdm.dm) )             # <<<<<<<<<<<<<<
  *         return subdm
  * 
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(42, 128, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":118
+  /* "PETSc/DMPlex.pyx":129
  *         cdef DM subdm = DMPlex()
  *         CHKERR( DMPlexCreateCohesiveSubmesh(self.dm, flag, NULL, cvalue, &subdm.dm) )
  *         return subdm             # <<<<<<<<<<<<<<
@@ -215973,7 +232759,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_18createCohesiveSubmesh(struc
   __pyx_r = ((PyObject *)__pyx_v_subdm);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":113
+  /* "PETSc/DMPlex.pyx":124
  *         return self
  * 
  *     def createCohesiveSubmesh(self, hasLagrange, value):             # <<<<<<<<<<<<<<
@@ -215993,7 +232779,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_18createCohesiveSubmesh(struc
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":120
+/* "PETSc/DMPlex.pyx":131
  *         return subdm
  * 
  *     def getChart(self):             # <<<<<<<<<<<<<<
@@ -216002,23 +232788,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_18createCohesiveSubmesh(struc
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_23getChart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_22getChart[] = "DMPlex.getChart(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_23getChart(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));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_22getChart(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_20getChart(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_22getChart(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
   PetscInt __pyx_v_pStart;
   PetscInt __pyx_v_pEnd;
   PyObject *__pyx_r = NULL;
@@ -216029,7 +232815,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_20getChart(struct __pyx_obj_8
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("getChart", 0);
 
-  /* "PETSc/DMPlex.pyx":121
+  /* "PETSc/DMPlex.pyx":132
  * 
  *     def getChart(self):
  *         cdef PetscInt pStart = 0, pEnd = 0             # <<<<<<<<<<<<<<
@@ -216039,16 +232825,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_20getChart(struct __pyx_obj_8
   __pyx_v_pStart = 0;
   __pyx_v_pEnd = 0;
 
-  /* "PETSc/DMPlex.pyx":122
+  /* "PETSc/DMPlex.pyx":133
  *     def getChart(self):
  *         cdef PetscInt pStart = 0, pEnd = 0
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )             # <<<<<<<<<<<<<<
  *         return toInt(pStart), toInt(pEnd)
  * 
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(42, 133, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":123
+  /* "PETSc/DMPlex.pyx":134
  *         cdef PetscInt pStart = 0, pEnd = 0
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  *         return toInt(pStart), toInt(pEnd)             # <<<<<<<<<<<<<<
@@ -216056,11 +232842,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_20getChart(struct __pyx_obj_8
  *     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_ERR(42, 123, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_pStart); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 134, __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_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_pEnd); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 134, __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_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(42, 134, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -216072,7 +232858,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_20getChart(struct __pyx_obj_8
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":120
+  /* "PETSc/DMPlex.pyx":131
  *         return subdm
  * 
  *     def getChart(self):             # <<<<<<<<<<<<<<
@@ -216093,7 +232879,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_20getChart(struct __pyx_obj_8
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":125
+/* "PETSc/DMPlex.pyx":136
  *         return toInt(pStart), toInt(pEnd)
  * 
  *     def setChart(self, pStart, pEnd):             # <<<<<<<<<<<<<<
@@ -216102,9 +232888,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_20getChart(struct __pyx_obj_8
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_25setChart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_24setChart[] = "DMPlex.setChart(self, pStart, pEnd)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_25setChart(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_pStart = 0;
   PyObject *__pyx_v_pEnd = 0;
   PyObject *__pyx_r = 0;
@@ -216118,7 +232904,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_23setChart(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -216127,14 +232915,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_23setChart(PyObject *__pyx_v_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_pStart)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(42, 125, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setChart", 1, 2, 2, 1); __PYX_ERR(42, 136, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setChart") < 0)) __PYX_ERR(42, 125, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setChart") < 0)) __PYX_ERR(42, 136, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -216147,20 +232936,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_23setChart(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_ERR(42, 125, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setChart", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 136, __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);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_24setChart(((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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_24setChart(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;
@@ -216169,36 +232958,36 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_22setChart(struct __pyx_obj_8
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setChart", 0);
 
-  /* "PETSc/DMPlex.pyx":126
+  /* "PETSc/DMPlex.pyx":137
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(42, 126, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_pStart); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 137, __pyx_L1_error)
   __pyx_v_cStart = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":127
+  /* "PETSc/DMPlex.pyx":138
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(42, 127, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_pEnd); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 138, __pyx_L1_error)
   __pyx_v_cEnd = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":128
+  /* "PETSc/DMPlex.pyx":139
  *         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_ERR(42, 128, __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 == ((int)-1))) __PYX_ERR(42, 139, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":125
+  /* "PETSc/DMPlex.pyx":136
  *         return toInt(pStart), toInt(pEnd)
  * 
  *     def setChart(self, pStart, pEnd):             # <<<<<<<<<<<<<<
@@ -216218,7 +233007,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_22setChart(struct __pyx_obj_8
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":130
+/* "PETSc/DMPlex.pyx":141
  *         CHKERR( DMPlexSetChart(self.dm, cStart, cEnd) )
  * 
  *     def getConeSize(self, p):             # <<<<<<<<<<<<<<
@@ -216227,9 +233016,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_22setChart(struct __pyx_obj_8
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_27getConeSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_26getConeSize[] = "DMPlex.getConeSize(self, p)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_27getConeSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_p = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -216242,6 +233031,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_25getConeSize(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -216252,7 +233042,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_25getConeSize(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, "getConeSize") < 0)) __PYX_ERR(42, 130, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getConeSize") < 0)) __PYX_ERR(42, 141, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -216263,20 +233053,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_25getConeSize(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getConeSize", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 130, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getConeSize", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 141, __pyx_L3_error)
   __pyx_L3_error:;
   __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_24getConeSize(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_26getConeSize(((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_24getConeSize(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_26getConeSize(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;
@@ -216290,17 +233080,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_24getConeSize(struct __pyx_ob
   PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("getConeSize", 0);
 
-  /* "PETSc/DMPlex.pyx":131
+  /* "PETSc/DMPlex.pyx":142
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(42, 131, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 142, __pyx_L1_error)
   __pyx_v_cp = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":132
+  /* "PETSc/DMPlex.pyx":143
  *     def getConeSize(self, p):
  *         cdef PetscInt cp = asInt(p)
  *         cdef PetscInt pStart = 0, pEnd = 0             # <<<<<<<<<<<<<<
@@ -216310,16 +233100,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_24getConeSize(struct __pyx_ob
   __pyx_v_pStart = 0;
   __pyx_v_pEnd = 0;
 
-  /* "PETSc/DMPlex.pyx":133
+  /* "PETSc/DMPlex.pyx":144
  *         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
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(42, 144, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":134
+  /* "PETSc/DMPlex.pyx":145
  *         cdef PetscInt pStart = 0, pEnd = 0
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  *         assert cp>=pStart and cp<pEnd             # <<<<<<<<<<<<<<
@@ -216339,12 +233129,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_24getConeSize(struct __pyx_ob
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(42, 134, __pyx_L1_error)
+      __PYX_ERR(42, 145, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/DMPlex.pyx":135
+  /* "PETSc/DMPlex.pyx":146
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  *         assert cp>=pStart and cp<pEnd
  *         cdef PetscInt csize = 0             # <<<<<<<<<<<<<<
@@ -216353,16 +233143,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_24getConeSize(struct __pyx_ob
  */
   __pyx_v_csize = 0;
 
-  /* "PETSc/DMPlex.pyx":136
+  /* "PETSc/DMPlex.pyx":147
  *         assert cp>=pStart and cp<pEnd
  *         cdef PetscInt csize = 0
  *         CHKERR( DMPlexGetConeSize(self.dm, cp, &csize) )             # <<<<<<<<<<<<<<
  *         return toInt(csize)
  * 
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(42, 147, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":137
+  /* "PETSc/DMPlex.pyx":148
  *         cdef PetscInt csize = 0
  *         CHKERR( DMPlexGetConeSize(self.dm, cp, &csize) )
  *         return toInt(csize)             # <<<<<<<<<<<<<<
@@ -216370,13 +233160,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_24getConeSize(struct __pyx_ob
  *     def setConeSize(self, p, size):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_csize); if (unlikely(!__pyx_t_5)) __PYX_ERR(42, 137, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_csize); if (unlikely(!__pyx_t_5)) __PYX_ERR(42, 148, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __pyx_r = __pyx_t_5;
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":130
+  /* "PETSc/DMPlex.pyx":141
  *         CHKERR( DMPlexSetChart(self.dm, cStart, cEnd) )
  * 
  *     def getConeSize(self, p):             # <<<<<<<<<<<<<<
@@ -216395,7 +233185,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_24getConeSize(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":139
+/* "PETSc/DMPlex.pyx":150
  *         return toInt(csize)
  * 
  *     def setConeSize(self, p, size):             # <<<<<<<<<<<<<<
@@ -216404,9 +233194,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_24getConeSize(struct __pyx_ob
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_29setConeSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_28setConeSize[] = "DMPlex.setConeSize(self, p, size)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_29setConeSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_p = 0;
   PyObject *__pyx_v_size = 0;
   PyObject *__pyx_r = 0;
@@ -216420,7 +233210,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_27setConeSize(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -216429,14 +233221,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_27setConeSize(PyObject *__pyx
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_p)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(42, 139, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setConeSize", 1, 2, 2, 1); __PYX_ERR(42, 150, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConeSize") < 0)) __PYX_ERR(42, 139, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConeSize") < 0)) __PYX_ERR(42, 150, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -216449,20 +233242,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_27setConeSize(PyObject *__pyx
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setConeSize", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 139, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setConeSize", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 150, __pyx_L3_error)
   __pyx_L3_error:;
   __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_26setConeSize(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p, __pyx_v_size);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_28setConeSize(((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_26setConeSize(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_size) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_28setConeSize(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;
@@ -216475,17 +233268,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_26setConeSize(struct __pyx_ob
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("setConeSize", 0);
 
-  /* "PETSc/DMPlex.pyx":140
+  /* "PETSc/DMPlex.pyx":151
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(42, 140, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 151, __pyx_L1_error)
   __pyx_v_cp = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":141
+  /* "PETSc/DMPlex.pyx":152
  *     def setConeSize(self, p, size):
  *         cdef PetscInt cp = asInt(p)
  *         cdef PetscInt pStart = 0, pEnd = 0             # <<<<<<<<<<<<<<
@@ -216495,16 +233288,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_26setConeSize(struct __pyx_ob
   __pyx_v_pStart = 0;
   __pyx_v_pEnd = 0;
 
-  /* "PETSc/DMPlex.pyx":142
+  /* "PETSc/DMPlex.pyx":153
  *         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)
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(42, 153, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":143
+  /* "PETSc/DMPlex.pyx":154
  *         cdef PetscInt pStart = 0, pEnd = 0
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  *         assert cp>=pStart and cp<pEnd             # <<<<<<<<<<<<<<
@@ -216524,31 +233317,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_26setConeSize(struct __pyx_ob
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(42, 143, __pyx_L1_error)
+      __PYX_ERR(42, 154, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/DMPlex.pyx":144
+  /* "PETSc/DMPlex.pyx":155
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  *         assert cp>=pStart and cp<pEnd
  *         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 == -1L && PyErr_Occurred())) __PYX_ERR(42, 144, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_size); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 155, __pyx_L1_error)
   __pyx_v_csize = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":145
+  /* "PETSc/DMPlex.pyx":156
  *         assert cp>=pStart and cp<pEnd
  *         cdef PetscInt csize = asInt(size)
  *         CHKERR( DMPlexSetConeSize(self.dm, cp, csize) )             # <<<<<<<<<<<<<<
  * 
  *     def getCone(self, p):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(42, 156, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":139
+  /* "PETSc/DMPlex.pyx":150
  *         return toInt(csize)
  * 
  *     def setConeSize(self, p, size):             # <<<<<<<<<<<<<<
@@ -216568,7 +233361,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_26setConeSize(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":147
+/* "PETSc/DMPlex.pyx":158
  *         CHKERR( DMPlexSetConeSize(self.dm, cp, csize) )
  * 
  *     def getCone(self, p):             # <<<<<<<<<<<<<<
@@ -216577,9 +233370,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_26setConeSize(struct __pyx_ob
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_31getCone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_30getCone[] = "DMPlex.getCone(self, p)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_31getCone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_p = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -216592,6 +233385,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_29getCone(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -216602,7 +233396,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_29getCone(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, "getCone") < 0)) __PYX_ERR(42, 147, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getCone") < 0)) __PYX_ERR(42, 158, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -216613,20 +233407,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_29getCone(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getCone", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 147, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getCone", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 158, __pyx_L3_error)
   __pyx_L3_error:;
   __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_28getCone(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_30getCone(((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_28getCone(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_30getCone(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;
@@ -216641,17 +233435,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_28getCone(struct __pyx_obj_8p
   PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("getCone", 0);
 
-  /* "PETSc/DMPlex.pyx":148
+  /* "PETSc/DMPlex.pyx":159
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(42, 148, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 159, __pyx_L1_error)
   __pyx_v_cp = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":149
+  /* "PETSc/DMPlex.pyx":160
  *     def getCone(self, p):
  *         cdef PetscInt cp = asInt(p)
  *         cdef PetscInt pStart = 0, pEnd = 0             # <<<<<<<<<<<<<<
@@ -216661,16 +233455,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_28getCone(struct __pyx_obj_8p
   __pyx_v_pStart = 0;
   __pyx_v_pEnd = 0;
 
-  /* "PETSc/DMPlex.pyx":150
+  /* "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        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, 150, __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 == ((int)-1))) __PYX_ERR(42, 161, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":151
+  /* "PETSc/DMPlex.pyx":162
  *         cdef PetscInt pStart = 0, pEnd = 0
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  *         assert cp>=pStart and cp<pEnd             # <<<<<<<<<<<<<<
@@ -216690,12 +233484,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_28getCone(struct __pyx_obj_8p
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(42, 151, __pyx_L1_error)
+      __PYX_ERR(42, 162, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/DMPlex.pyx":152
+  /* "PETSc/DMPlex.pyx":163
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  *         assert cp>=pStart and cp<pEnd
  *         cdef PetscInt        ncone = 0             # <<<<<<<<<<<<<<
@@ -216704,7 +233498,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_28getCone(struct __pyx_obj_8p
  */
   __pyx_v_ncone = 0;
 
-  /* "PETSc/DMPlex.pyx":153
+  /* "PETSc/DMPlex.pyx":164
  *         assert cp>=pStart and cp<pEnd
  *         cdef PetscInt        ncone = 0
  *         cdef const_PetscInt *icone = NULL             # <<<<<<<<<<<<<<
@@ -216713,25 +233507,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_28getCone(struct __pyx_obj_8p
  */
   __pyx_v_icone = NULL;
 
-  /* "PETSc/DMPlex.pyx":154
+  /* "PETSc/DMPlex.pyx":165
  *         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(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)
+  __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 == ((int)-1))) __PYX_ERR(42, 165, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":155
+  /* "PETSc/DMPlex.pyx":166
  *         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(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)
+  __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 == ((int)-1))) __PYX_ERR(42, 166, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":156
+  /* "PETSc/DMPlex.pyx":167
  *         CHKERR( DMPlexGetConeSize(self.dm, cp, &ncone) )
  *         CHKERR( DMPlexGetCone(self.dm, cp, &icone) )
  *         return array_i(ncone, icone)             # <<<<<<<<<<<<<<
@@ -216739,13 +233533,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_28getCone(struct __pyx_obj_8p
  *     def setCone(self, p, cone, orientation=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_ERR(42, 156, __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, 167, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __pyx_r = __pyx_t_5;
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":147
+  /* "PETSc/DMPlex.pyx":158
  *         CHKERR( DMPlexSetConeSize(self.dm, cp, csize) )
  * 
  *     def getCone(self, p):             # <<<<<<<<<<<<<<
@@ -216764,7 +233558,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_28getCone(struct __pyx_obj_8p
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":158
+/* "PETSc/DMPlex.pyx":169
  *         return array_i(ncone, icone)
  * 
  *     def setCone(self, p, cone, orientation=None):             # <<<<<<<<<<<<<<
@@ -216773,9 +233567,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_28getCone(struct __pyx_obj_8p
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_33setCone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_32setCone[] = "DMPlex.setCone(self, p, cone, orientation=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_33setCone(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;
@@ -216791,8 +233585,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_31setCone(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -216801,11 +233598,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_31setCone(PyObject *__pyx_v_s
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_p)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(42, 158, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setCone", 0, 2, 3, 1); __PYX_ERR(42, 169, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_orientation);
@@ -216813,11 +233612,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_31setCone(PyObject *__pyx_v_s
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCone") < 0)) __PYX_ERR(42, 158, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCone") < 0)) __PYX_ERR(42, 169, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -216830,20 +233630,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_31setCone(PyObject *__pyx_v_s
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setCone", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 158, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setCone", 0, 2, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 169, __pyx_L3_error)
   __pyx_L3_error:;
   __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_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_32setCone(((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_30setCone(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_cone, PyObject *__pyx_v_orientation) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_32setCone(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;
@@ -216862,17 +233662,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_30setCone(struct __pyx_obj_8p
   __Pyx_INCREF(__pyx_v_cone);
   __Pyx_INCREF(__pyx_v_orientation);
 
-  /* "PETSc/DMPlex.pyx":159
+  /* "PETSc/DMPlex.pyx":170
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(42, 159, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 170, __pyx_L1_error)
   __pyx_v_cp = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":160
+  /* "PETSc/DMPlex.pyx":171
  *     def setCone(self, p, cone, orientation=None):
  *         cdef PetscInt cp = asInt(p)
  *         cdef PetscInt pStart = 0, pEnd = 0             # <<<<<<<<<<<<<<
@@ -216882,16 +233682,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_30setCone(struct __pyx_obj_8p
   __pyx_v_pStart = 0;
   __pyx_v_pEnd = 0;
 
-  /* "PETSc/DMPlex.pyx":161
+  /* "PETSc/DMPlex.pyx":172
  *         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_ERR(42, 161, __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 == ((int)-1))) __PYX_ERR(42, 172, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":162
+  /* "PETSc/DMPlex.pyx":173
  *         cdef PetscInt pStart = 0, pEnd = 0
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  *         assert cp>=pStart and cp<pEnd             # <<<<<<<<<<<<<<
@@ -216911,12 +233711,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_30setCone(struct __pyx_obj_8p
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(42, 162, __pyx_L1_error)
+      __PYX_ERR(42, 173, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/DMPlex.pyx":164
+  /* "PETSc/DMPlex.pyx":175
  *         assert cp>=pStart and cp<pEnd
  *         #
  *         cdef PetscInt  ncone = 0             # <<<<<<<<<<<<<<
@@ -216925,7 +233725,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_30setCone(struct __pyx_obj_8p
  */
   __pyx_v_ncone = 0;
 
-  /* "PETSc/DMPlex.pyx":165
+  /* "PETSc/DMPlex.pyx":176
  *         #
  *         cdef PetscInt  ncone = 0
  *         cdef PetscInt *icone = NULL             # <<<<<<<<<<<<<<
@@ -216934,37 +233734,37 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_30setCone(struct __pyx_obj_8p
  */
   __pyx_v_icone = NULL;
 
-  /* "PETSc/DMPlex.pyx":166
+  /* "PETSc/DMPlex.pyx":177
  *         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_ERR(42, 166, __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, 177, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF_SET(__pyx_v_cone, __pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "PETSc/DMPlex.pyx":167
+  /* "PETSc/DMPlex.pyx":178
  *         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)
+  __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 == ((int)-1))) __PYX_ERR(42, 178, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":168
+  /* "PETSc/DMPlex.pyx":179
  *         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)
+  __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 == ((int)-1))) __PYX_ERR(42, 179, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":170
+  /* "PETSc/DMPlex.pyx":181
  *         CHKERR( DMPlexSetCone(self.dm, cp, icone) )
  *         #
  *         cdef PetscInt  norie = 0             # <<<<<<<<<<<<<<
@@ -216973,7 +233773,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_30setCone(struct __pyx_obj_8p
  */
   __pyx_v_norie = 0;
 
-  /* "PETSc/DMPlex.pyx":171
+  /* "PETSc/DMPlex.pyx":182
  *         #
  *         cdef PetscInt  norie = 0
  *         cdef PetscInt *iorie = NULL             # <<<<<<<<<<<<<<
@@ -216982,7 +233782,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_30setCone(struct __pyx_obj_8p
  */
   __pyx_v_iorie = NULL;
 
-  /* "PETSc/DMPlex.pyx":172
+  /* "PETSc/DMPlex.pyx":183
  *         cdef PetscInt  norie = 0
  *         cdef PetscInt *iorie = NULL
  *         if orientation is not None:             # <<<<<<<<<<<<<<
@@ -216993,19 +233793,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_30setCone(struct __pyx_obj_8p
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "PETSc/DMPlex.pyx":173
+    /* "PETSc/DMPlex.pyx":184
  *         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_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_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, 184, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_DECREF_SET(__pyx_v_orientation, __pyx_t_5);
     __pyx_t_5 = 0;
 
-    /* "PETSc/DMPlex.pyx":174
+    /* "PETSc/DMPlex.pyx":185
  *         if orientation is not None:
  *             orientation = iarray_i(orientation, &norie, &iorie)
  *             assert norie == ncone             # <<<<<<<<<<<<<<
@@ -217016,21 +233816,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_30setCone(struct __pyx_obj_8p
     if (unlikely(!Py_OptimizeFlag)) {
       if (unlikely(!((__pyx_v_norie == __pyx_v_ncone) != 0))) {
         PyErr_SetNone(PyExc_AssertionError);
-        __PYX_ERR(42, 174, __pyx_L1_error)
+        __PYX_ERR(42, 185, __pyx_L1_error)
       }
     }
     #endif
 
-    /* "PETSc/DMPlex.pyx":175
+    /* "PETSc/DMPlex.pyx":186
  *             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)
+    __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 == ((int)-1))) __PYX_ERR(42, 186, __pyx_L1_error)
 
-    /* "PETSc/DMPlex.pyx":172
+    /* "PETSc/DMPlex.pyx":183
  *         cdef PetscInt  norie = 0
  *         cdef PetscInt *iorie = NULL
  *         if orientation is not None:             # <<<<<<<<<<<<<<
@@ -217039,7 +233839,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_30setCone(struct __pyx_obj_8p
  */
   }
 
-  /* "PETSc/DMPlex.pyx":158
+  /* "PETSc/DMPlex.pyx":169
  *         return array_i(ncone, icone)
  * 
  *     def setCone(self, p, cone, orientation=None):             # <<<<<<<<<<<<<<
@@ -217062,7 +233862,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_30setCone(struct __pyx_obj_8p
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":177
+/* "PETSc/DMPlex.pyx":188
  *             CHKERR( DMPlexSetConeOrientation(self.dm, cp, iorie) )
  * 
  *     def insertCone(self, p, conePos, conePoint):             # <<<<<<<<<<<<<<
@@ -217071,9 +233871,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_30setCone(struct __pyx_obj_8p
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_35insertCone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_34insertCone[] = "DMPlex.insertCone(self, p, conePos, conePoint)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_35insertCone(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;
@@ -217088,8 +233888,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_33insertCone(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -217098,19 +233901,21 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_33insertCone(PyObject *__pyx_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_p)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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)
+          __Pyx_RaiseArgtupleInvalid("insertCone", 1, 3, 3, 1); __PYX_ERR(42, 188, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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)
+          __Pyx_RaiseArgtupleInvalid("insertCone", 1, 3, 3, 2); __PYX_ERR(42, 188, __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)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "insertCone") < 0)) __PYX_ERR(42, 188, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -217125,20 +233930,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_33insertCone(PyObject *__pyx_
   }
   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_RaiseArgtupleInvalid("insertCone", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 188, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.insertCone", __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);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_34insertCone(((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_32insertCone(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_conePos, PyObject *__pyx_v_conePoint) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_34insertCone(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;
@@ -217148,46 +233953,46 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_32insertCone(struct __pyx_obj
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("insertCone", 0);
 
-  /* "PETSc/DMPlex.pyx":178
+  /* "PETSc/DMPlex.pyx":189
  * 
  *     def insertCone(self, p, conePos, conePoint):
  *         cdef PetscInt cp = asInt(p)             # <<<<<<<<<<<<<<
  *         cdef PetscInt cconePos = asInt(conePos)
  *         cdef PetscInt cconePoint = asInt(conePoint)
  */
-  __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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 189, __pyx_L1_error)
   __pyx_v_cp = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":179
+  /* "PETSc/DMPlex.pyx":190
  *     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_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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_conePos); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 190, __pyx_L1_error)
   __pyx_v_cconePos = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":180
+  /* "PETSc/DMPlex.pyx":191
  *         cdef PetscInt cp = asInt(p)
  *         cdef PetscInt cconePos = asInt(conePos)
  *         cdef PetscInt cconePoint = asInt(conePoint)             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexInsertCone(self.dm,cp,cconePos,cconePoint) )
  * 
  */
-  __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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_conePoint); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 191, __pyx_L1_error)
   __pyx_v_cconePoint = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":181
+  /* "PETSc/DMPlex.pyx":192
  *         cdef PetscInt cconePos = asInt(conePos)
  *         cdef PetscInt cconePoint = asInt(conePoint)
  *         CHKERR( DMPlexInsertCone(self.dm,cp,cconePos,cconePoint) )             # <<<<<<<<<<<<<<
  * 
  *     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)
+  __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 == ((int)-1))) __PYX_ERR(42, 192, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":177
+  /* "PETSc/DMPlex.pyx":188
  *             CHKERR( DMPlexSetConeOrientation(self.dm, cp, iorie) )
  * 
  *     def insertCone(self, p, conePos, conePoint):             # <<<<<<<<<<<<<<
@@ -217207,7 +234012,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_32insertCone(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":183
+/* "PETSc/DMPlex.pyx":194
  *         CHKERR( DMPlexInsertCone(self.dm,cp,cconePos,cconePoint) )
  * 
  *     def insertConeOrientation(self, p, conePos, coneOrientation):             # <<<<<<<<<<<<<<
@@ -217216,9 +234021,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_32insertCone(struct __pyx_obj
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_37insertConeOrientation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_36insertConeOrientation[] = "DMPlex.insertConeOrientation(self, p, conePos, coneOrientation)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_37insertConeOrientation(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;
@@ -217233,8 +234038,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_35insertConeOrientation(PyObj
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -217243,19 +234051,21 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_35insertConeOrientation(PyObj
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_p)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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)
+          __Pyx_RaiseArgtupleInvalid("insertConeOrientation", 1, 3, 3, 1); __PYX_ERR(42, 194, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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)
+          __Pyx_RaiseArgtupleInvalid("insertConeOrientation", 1, 3, 3, 2); __PYX_ERR(42, 194, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "insertConeOrientation") < 0)) __PYX_ERR(42, 183, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "insertConeOrientation") < 0)) __PYX_ERR(42, 194, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -217270,20 +234080,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_35insertConeOrientation(PyObj
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("insertConeOrientation", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 183, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("insertConeOrientation", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 194, __pyx_L3_error)
   __pyx_L3_error:;
   __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_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_36insertConeOrientation(((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_34insertConeOrientation(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_conePos, PyObject *__pyx_v_coneOrientation) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_36insertConeOrientation(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;
@@ -217293,46 +234103,46 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_34insertConeOrientation(struc
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("insertConeOrientation", 0);
 
-  /* "PETSc/DMPlex.pyx":184
+  /* "PETSc/DMPlex.pyx":195
  * 
  *     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_p); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(42, 184, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 195, __pyx_L1_error)
   __pyx_v_cp = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":185
+  /* "PETSc/DMPlex.pyx":196
  *     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_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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_conePos); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 196, __pyx_L1_error)
   __pyx_v_cconePos = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":186
+  /* "PETSc/DMPlex.pyx":197
  *         cdef PetscInt cp = asInt(p)
  *         cdef PetscInt cconePos = asInt(conePos)
  *         cdef PetscInt cconeOrientation = asInt(coneOrientation)             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexInsertConeOrientation(self.dm, cp, cconePos, cconeOrientation) )
  * 
  */
-  __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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_coneOrientation); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 197, __pyx_L1_error)
   __pyx_v_cconeOrientation = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":187
+  /* "PETSc/DMPlex.pyx":198
  *         cdef PetscInt cconePos = asInt(conePos)
  *         cdef PetscInt cconeOrientation = asInt(coneOrientation)
  *         CHKERR( DMPlexInsertConeOrientation(self.dm, cp, cconePos, cconeOrientation) )             # <<<<<<<<<<<<<<
  * 
  *     def getConeOrientation(self, p):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(42, 198, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":183
+  /* "PETSc/DMPlex.pyx":194
  *         CHKERR( DMPlexInsertCone(self.dm,cp,cconePos,cconePoint) )
  * 
  *     def insertConeOrientation(self, p, conePos, coneOrientation):             # <<<<<<<<<<<<<<
@@ -217352,7 +234162,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_34insertConeOrientation(struc
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":189
+/* "PETSc/DMPlex.pyx":200
  *         CHKERR( DMPlexInsertConeOrientation(self.dm, cp, cconePos, cconeOrientation) )
  * 
  *     def getConeOrientation(self, p):             # <<<<<<<<<<<<<<
@@ -217361,9 +234171,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_34insertConeOrientation(struc
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_39getConeOrientation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_38getConeOrientation[] = "DMPlex.getConeOrientation(self, p)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_39getConeOrientation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_p = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -217376,6 +234186,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_37getConeOrientation(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -217386,7 +234197,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_37getConeOrientation(PyObject
         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_ERR(42, 189, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getConeOrientation") < 0)) __PYX_ERR(42, 200, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -217397,20 +234208,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_37getConeOrientation(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getConeOrientation", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 189, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getConeOrientation", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 200, __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_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_38getConeOrientation(((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_36getConeOrientation(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_38getConeOrientation(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;
@@ -217425,17 +234236,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_36getConeOrientation(struct _
   PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("getConeOrientation", 0);
 
-  /* "PETSc/DMPlex.pyx":190
+  /* "PETSc/DMPlex.pyx":201
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(42, 190, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 201, __pyx_L1_error)
   __pyx_v_cp = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":191
+  /* "PETSc/DMPlex.pyx":202
  *     def getConeOrientation(self, p):
  *         cdef PetscInt cp = asInt(p)
  *         cdef PetscInt pStart = 0, pEnd = 0             # <<<<<<<<<<<<<<
@@ -217445,16 +234256,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_36getConeOrientation(struct _
   __pyx_v_pStart = 0;
   __pyx_v_pEnd = 0;
 
-  /* "PETSc/DMPlex.pyx":192
+  /* "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        norie = 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)
+  __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 == ((int)-1))) __PYX_ERR(42, 203, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":193
+  /* "PETSc/DMPlex.pyx":204
  *         cdef PetscInt pStart = 0, pEnd = 0
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  *         assert cp>=pStart and cp<pEnd             # <<<<<<<<<<<<<<
@@ -217474,12 +234285,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_36getConeOrientation(struct _
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(42, 193, __pyx_L1_error)
+      __PYX_ERR(42, 204, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/DMPlex.pyx":194
+  /* "PETSc/DMPlex.pyx":205
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  *         assert cp>=pStart and cp<pEnd
  *         cdef PetscInt        norie = 0             # <<<<<<<<<<<<<<
@@ -217488,7 +234299,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_36getConeOrientation(struct _
  */
   __pyx_v_norie = 0;
 
-  /* "PETSc/DMPlex.pyx":195
+  /* "PETSc/DMPlex.pyx":206
  *         assert cp>=pStart and cp<pEnd
  *         cdef PetscInt        norie = 0
  *         cdef const_PetscInt *iorie = NULL             # <<<<<<<<<<<<<<
@@ -217497,25 +234308,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_36getConeOrientation(struct _
  */
   __pyx_v_iorie = NULL;
 
-  /* "PETSc/DMPlex.pyx":196
+  /* "PETSc/DMPlex.pyx":207
  *         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)
+  __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 == ((int)-1))) __PYX_ERR(42, 207, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":197
+  /* "PETSc/DMPlex.pyx":208
  *         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_ERR(42, 197, __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 == ((int)-1))) __PYX_ERR(42, 208, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":198
+  /* "PETSc/DMPlex.pyx":209
  *         CHKERR( DMPlexGetConeSize(self.dm, cp, &norie) )
  *         CHKERR( DMPlexGetConeOrientation(self.dm, cp, &iorie) )
  *         return array_i(norie, iorie)             # <<<<<<<<<<<<<<
@@ -217523,13 +234334,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_36getConeOrientation(struct _
  *     def setConeOrientation(self, p, orientation):
  */
   __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_ERR(42, 198, __pyx_L1_error)
+  __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_norie, __pyx_v_iorie)); if (unlikely(!__pyx_t_5)) __PYX_ERR(42, 209, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __pyx_r = __pyx_t_5;
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":189
+  /* "PETSc/DMPlex.pyx":200
  *         CHKERR( DMPlexInsertConeOrientation(self.dm, cp, cconePos, cconeOrientation) )
  * 
  *     def getConeOrientation(self, p):             # <<<<<<<<<<<<<<
@@ -217548,7 +234359,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_36getConeOrientation(struct _
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":200
+/* "PETSc/DMPlex.pyx":211
  *         return array_i(norie, iorie)
  * 
  *     def setConeOrientation(self, p, orientation):             # <<<<<<<<<<<<<<
@@ -217557,9 +234368,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_36getConeOrientation(struct _
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_41setConeOrientation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_40setConeOrientation[] = "DMPlex.setConeOrientation(self, p, orientation)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_41setConeOrientation(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_p = 0;
   PyObject *__pyx_v_orientation = 0;
   PyObject *__pyx_r = 0;
@@ -217573,7 +234384,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_39setConeOrientation(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -217582,14 +234395,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_39setConeOrientation(PyObject
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_p)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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)
+          __Pyx_RaiseArgtupleInvalid("setConeOrientation", 1, 2, 2, 1); __PYX_ERR(42, 211, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConeOrientation") < 0)) __PYX_ERR(42, 200, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setConeOrientation") < 0)) __PYX_ERR(42, 211, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -217602,20 +234416,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_39setConeOrientation(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setConeOrientation", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 200, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setConeOrientation", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 211, __pyx_L3_error)
   __pyx_L3_error:;
   __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_38setConeOrientation(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p, __pyx_v_orientation);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_40setConeOrientation(((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_38setConeOrientation(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_orientation) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_40setConeOrientation(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;
@@ -217632,17 +234446,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_38setConeOrientation(struct _
   __Pyx_RefNannySetupContext("setConeOrientation", 0);
   __Pyx_INCREF(__pyx_v_orientation);
 
-  /* "PETSc/DMPlex.pyx":201
+  /* "PETSc/DMPlex.pyx":212
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(42, 201, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 212, __pyx_L1_error)
   __pyx_v_cp = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":202
+  /* "PETSc/DMPlex.pyx":213
  *     def setConeOrientation(self, p, orientation):
  *         cdef PetscInt cp = asInt(p)
  *         cdef PetscInt pStart = 0, pEnd = 0             # <<<<<<<<<<<<<<
@@ -217652,16 +234466,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_38setConeOrientation(struct _
   __pyx_v_pStart = 0;
   __pyx_v_pEnd = 0;
 
-  /* "PETSc/DMPlex.pyx":203
+  /* "PETSc/DMPlex.pyx":214
  *         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)
+  __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 == ((int)-1))) __PYX_ERR(42, 214, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":204
+  /* "PETSc/DMPlex.pyx":215
  *         cdef PetscInt pStart = 0, pEnd = 0
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  *         assert cp>=pStart and cp<pEnd             # <<<<<<<<<<<<<<
@@ -217681,12 +234495,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_38setConeOrientation(struct _
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(42, 204, __pyx_L1_error)
+      __PYX_ERR(42, 215, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/DMPlex.pyx":205
+  /* "PETSc/DMPlex.pyx":216
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  *         assert cp>=pStart and cp<pEnd
  *         cdef PetscInt ncone = 0             # <<<<<<<<<<<<<<
@@ -217695,16 +234509,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_38setConeOrientation(struct _
  */
   __pyx_v_ncone = 0;
 
-  /* "PETSc/DMPlex.pyx":206
+  /* "PETSc/DMPlex.pyx":217
  *         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)
+  __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 == ((int)-1))) __PYX_ERR(42, 217, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":207
+  /* "PETSc/DMPlex.pyx":218
  *         cdef PetscInt ncone = 0
  *         CHKERR( DMPlexGetConeSize(self.dm, cp, &ncone) )
  *         cdef PetscInt  norie = 0             # <<<<<<<<<<<<<<
@@ -217713,7 +234527,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_38setConeOrientation(struct _
  */
   __pyx_v_norie = 0;
 
-  /* "PETSc/DMPlex.pyx":208
+  /* "PETSc/DMPlex.pyx":219
  *         CHKERR( DMPlexGetConeSize(self.dm, cp, &ncone) )
  *         cdef PetscInt  norie = 0
  *         cdef PetscInt *iorie = NULL             # <<<<<<<<<<<<<<
@@ -217722,19 +234536,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_38setConeOrientation(struct _
  */
   __pyx_v_iorie = NULL;
 
-  /* "PETSc/DMPlex.pyx":209
+  /* "PETSc/DMPlex.pyx":220
  *         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_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, 220, __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
+  /* "PETSc/DMPlex.pyx":221
  *         cdef PetscInt *iorie = NULL
  *         orientation = iarray_i(orientation, &norie, &iorie)
  *         assert norie == ncone             # <<<<<<<<<<<<<<
@@ -217745,21 +234559,21 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_38setConeOrientation(struct _
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_norie == __pyx_v_ncone) != 0))) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(42, 210, __pyx_L1_error)
+      __PYX_ERR(42, 221, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/DMPlex.pyx":211
+  /* "PETSc/DMPlex.pyx":222
  *         orientation = iarray_i(orientation, &norie, &iorie)
  *         assert norie == ncone
  *         CHKERR( DMPlexSetConeOrientation(self.dm, cp, iorie) )             # <<<<<<<<<<<<<<
  * 
  *     def getSupportSize(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_ERR(42, 211, __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 == ((int)-1))) __PYX_ERR(42, 222, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":200
+  /* "PETSc/DMPlex.pyx":211
  *         return array_i(norie, iorie)
  * 
  *     def setConeOrientation(self, p, orientation):             # <<<<<<<<<<<<<<
@@ -217781,7 +234595,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_38setConeOrientation(struct _
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":213
+/* "PETSc/DMPlex.pyx":224
  *         CHKERR( DMPlexSetConeOrientation(self.dm, cp, iorie) )
  * 
  *     def getSupportSize(self, p):             # <<<<<<<<<<<<<<
@@ -217790,9 +234604,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_38setConeOrientation(struct _
  */
 
 /* 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_43getSupportSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_42getSupportSize[] = "DMPlex.getSupportSize(self, p)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_43getSupportSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_p = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -217805,6 +234619,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_41getSupportSize(PyObject *__
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -217815,7 +234630,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_ERR(42, 213, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getSupportSize") < 0)) __PYX_ERR(42, 224, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -217826,20 +234641,20 @@ 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_ERR(42, 213, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getSupportSize", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 224, __pyx_L3_error)
   __pyx_L3_error:;
   __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_40getSupportSize(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_42getSupportSize(((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_42getSupportSize(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;
@@ -217853,17 +234668,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_40getSupportSize(struct __pyx
   PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("getSupportSize", 0);
 
-  /* "PETSc/DMPlex.pyx":214
+  /* "PETSc/DMPlex.pyx":225
  * 
  *     def getSupportSize(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 == -1L && PyErr_Occurred())) __PYX_ERR(42, 214, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 225, __pyx_L1_error)
   __pyx_v_cp = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":215
+  /* "PETSc/DMPlex.pyx":226
  *     def getSupportSize(self, p):
  *         cdef PetscInt cp = asInt(p)
  *         cdef PetscInt pStart = 0, pEnd = 0             # <<<<<<<<<<<<<<
@@ -217873,16 +234688,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_40getSupportSize(struct __pyx
   __pyx_v_pStart = 0;
   __pyx_v_pEnd = 0;
 
-  /* "PETSc/DMPlex.pyx":216
+  /* "PETSc/DMPlex.pyx":227
  *         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)
+  __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 == ((int)-1))) __PYX_ERR(42, 227, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":217
+  /* "PETSc/DMPlex.pyx":228
  *         cdef PetscInt pStart = 0, pEnd = 0
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  *         assert cp>=pStart and cp<pEnd             # <<<<<<<<<<<<<<
@@ -217902,12 +234717,12 @@ 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_ERR(42, 217, __pyx_L1_error)
+      __PYX_ERR(42, 228, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/DMPlex.pyx":218
+  /* "PETSc/DMPlex.pyx":229
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  *         assert cp>=pStart and cp<pEnd
  *         cdef PetscInt ssize = 0             # <<<<<<<<<<<<<<
@@ -217916,16 +234731,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_40getSupportSize(struct __pyx
  */
   __pyx_v_ssize = 0;
 
-  /* "PETSc/DMPlex.pyx":219
+  /* "PETSc/DMPlex.pyx":230
  *         assert cp>=pStart and cp<pEnd
  *         cdef PetscInt ssize = 0
  *         CHKERR( DMPlexGetSupportSize(self.dm, cp, &ssize) )             # <<<<<<<<<<<<<<
  *         return toInt(ssize)
  * 
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(42, 230, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":220
+  /* "PETSc/DMPlex.pyx":231
  *         cdef PetscInt ssize = 0
  *         CHKERR( DMPlexGetSupportSize(self.dm, cp, &ssize) )
  *         return toInt(ssize)             # <<<<<<<<<<<<<<
@@ -217933,13 +234748,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_40getSupportSize(struct __pyx
  *     def setSupportSize(self, p, size):
  */
   __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_t_5 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_ssize); if (unlikely(!__pyx_t_5)) __PYX_ERR(42, 231, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __pyx_r = __pyx_t_5;
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":213
+  /* "PETSc/DMPlex.pyx":224
  *         CHKERR( DMPlexSetConeOrientation(self.dm, cp, iorie) )
  * 
  *     def getSupportSize(self, p):             # <<<<<<<<<<<<<<
@@ -217958,7 +234773,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_40getSupportSize(struct __pyx
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":222
+/* "PETSc/DMPlex.pyx":233
  *         return toInt(ssize)
  * 
  *     def setSupportSize(self, p, size):             # <<<<<<<<<<<<<<
@@ -217967,9 +234782,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_40getSupportSize(struct __pyx
  */
 
 /* 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_45setSupportSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_44setSupportSize[] = "DMPlex.setSupportSize(self, p, size)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_45setSupportSize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_p = 0;
   PyObject *__pyx_v_size = 0;
   PyObject *__pyx_r = 0;
@@ -217983,7 +234798,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_43setSupportSize(PyObject *__
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -217992,14 +234809,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_43setSupportSize(PyObject *__
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_p)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(42, 222, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setSupportSize", 1, 2, 2, 1); __PYX_ERR(42, 233, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setSupportSize") < 0)) __PYX_ERR(42, 222, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setSupportSize") < 0)) __PYX_ERR(42, 233, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -218012,20 +234830,20 @@ 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_ERR(42, 222, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setSupportSize", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 233, __pyx_L3_error)
   __pyx_L3_error:;
   __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_42setSupportSize(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p, __pyx_v_size);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_44setSupportSize(((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_44setSupportSize(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;
@@ -218038,17 +234856,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_42setSupportSize(struct __pyx
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("setSupportSize", 0);
 
-  /* "PETSc/DMPlex.pyx":223
+  /* "PETSc/DMPlex.pyx":234
  * 
  *     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_p); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(42, 223, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 234, __pyx_L1_error)
   __pyx_v_cp = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":224
+  /* "PETSc/DMPlex.pyx":235
  *     def setSupportSize(self, p, size):
  *         cdef PetscInt cp = asInt(p)
  *         cdef PetscInt pStart = 0, pEnd = 0             # <<<<<<<<<<<<<<
@@ -218058,16 +234876,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_42setSupportSize(struct __pyx
   __pyx_v_pStart = 0;
   __pyx_v_pEnd = 0;
 
-  /* "PETSc/DMPlex.pyx":225
+  /* "PETSc/DMPlex.pyx":236
  *         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_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)
+  __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 == ((int)-1))) __PYX_ERR(42, 236, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":226
+  /* "PETSc/DMPlex.pyx":237
  *         cdef PetscInt pStart = 0, pEnd = 0
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  *         assert cp>=pStart and cp<pEnd             # <<<<<<<<<<<<<<
@@ -218087,31 +234905,31 @@ 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_ERR(42, 226, __pyx_L1_error)
+      __PYX_ERR(42, 237, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/DMPlex.pyx":227
+  /* "PETSc/DMPlex.pyx":238
  *         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_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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_size); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 238, __pyx_L1_error)
   __pyx_v_ssize = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":228
+  /* "PETSc/DMPlex.pyx":239
  *         assert cp>=pStart and cp<pEnd
  *         cdef PetscInt ssize = asInt(size)
  *         CHKERR( DMPlexSetSupportSize(self.dm, cp, ssize) )             # <<<<<<<<<<<<<<
  * 
  *     def getSupport(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_ERR(42, 228, __pyx_L1_error)
+  __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 == ((int)-1))) __PYX_ERR(42, 239, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":222
+  /* "PETSc/DMPlex.pyx":233
  *         return toInt(ssize)
  * 
  *     def setSupportSize(self, p, size):             # <<<<<<<<<<<<<<
@@ -218131,7 +234949,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_42setSupportSize(struct __pyx
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":230
+/* "PETSc/DMPlex.pyx":241
  *         CHKERR( DMPlexSetSupportSize(self.dm, cp, ssize) )
  * 
  *     def getSupport(self, p):             # <<<<<<<<<<<<<<
@@ -218140,9 +234958,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_42setSupportSize(struct __pyx
  */
 
 /* 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_47getSupport(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_46getSupport[] = "DMPlex.getSupport(self, p)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_47getSupport(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_p = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -218155,6 +234973,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_45getSupport(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -218165,7 +234984,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_ERR(42, 230, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getSupport") < 0)) __PYX_ERR(42, 241, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -218176,20 +234995,20 @@ 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_ERR(42, 230, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getSupport", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 241, __pyx_L3_error)
   __pyx_L3_error:;
   __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_44getSupport(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_46getSupport(((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_46getSupport(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;
@@ -218204,17 +235023,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_44getSupport(struct __pyx_obj
   PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("getSupport", 0);
 
-  /* "PETSc/DMPlex.pyx":231
+  /* "PETSc/DMPlex.pyx":242
  * 
  *     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_p); if (unlikely(__pyx_t_1 == -1L && PyErr_Occurred())) __PYX_ERR(42, 231, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 242, __pyx_L1_error)
   __pyx_v_cp = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":232
+  /* "PETSc/DMPlex.pyx":243
  *     def getSupport(self, p):
  *         cdef PetscInt cp = asInt(p)
  *         cdef PetscInt pStart = 0, pEnd = 0             # <<<<<<<<<<<<<<
@@ -218224,16 +235043,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_44getSupport(struct __pyx_obj
   __pyx_v_pStart = 0;
   __pyx_v_pEnd = 0;
 
-  /* "PETSc/DMPlex.pyx":233
+  /* "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, 233, __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 == ((int)-1))) __PYX_ERR(42, 244, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":234
+  /* "PETSc/DMPlex.pyx":245
  *         cdef PetscInt pStart = 0, pEnd = 0
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  *         assert cp>=pStart and cp<pEnd             # <<<<<<<<<<<<<<
@@ -218253,12 +235072,12 @@ 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_ERR(42, 234, __pyx_L1_error)
+      __PYX_ERR(42, 245, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/DMPlex.pyx":235
+  /* "PETSc/DMPlex.pyx":246
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  *         assert cp>=pStart and cp<pEnd
  *         cdef PetscInt        nsupp = 0             # <<<<<<<<<<<<<<
@@ -218267,7 +235086,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_44getSupport(struct __pyx_obj
  */
   __pyx_v_nsupp = 0;
 
-  /* "PETSc/DMPlex.pyx":236
+  /* "PETSc/DMPlex.pyx":247
  *         assert cp>=pStart and cp<pEnd
  *         cdef PetscInt        nsupp = 0
  *         cdef const_PetscInt *isupp = NULL             # <<<<<<<<<<<<<<
@@ -218276,25 +235095,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_44getSupport(struct __pyx_obj
  */
   __pyx_v_isupp = NULL;
 
-  /* "PETSc/DMPlex.pyx":237
+  /* "PETSc/DMPlex.pyx":248
  *         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)
+  __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 == ((int)-1))) __PYX_ERR(42, 248, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":238
+  /* "PETSc/DMPlex.pyx":249
  *         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(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)
+  __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 == ((int)-1))) __PYX_ERR(42, 249, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":239
+  /* "PETSc/DMPlex.pyx":250
  *         CHKERR( DMPlexGetSupportSize(self.dm, cp, &nsupp) )
  *         CHKERR( DMPlexGetSupport(self.dm, cp, &isupp) )
  *         return array_i(nsupp, isupp)             # <<<<<<<<<<<<<<
@@ -218302,13 +235121,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_44getSupport(struct __pyx_obj
  *     def setSupport(self, p, supp):
  */
   __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_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_nsupp, __pyx_v_isupp)); if (unlikely(!__pyx_t_5)) __PYX_ERR(42, 250, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __pyx_r = __pyx_t_5;
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":230
+  /* "PETSc/DMPlex.pyx":241
  *         CHKERR( DMPlexSetSupportSize(self.dm, cp, ssize) )
  * 
  *     def getSupport(self, p):             # <<<<<<<<<<<<<<
@@ -218327,7 +235146,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_44getSupport(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":241
+/* "PETSc/DMPlex.pyx":252
  *         return array_i(nsupp, isupp)
  * 
  *     def setSupport(self, p, supp):             # <<<<<<<<<<<<<<
@@ -218336,9 +235155,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_44getSupport(struct __pyx_obj
  */
 
 /* 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_49setSupport(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_48setSupport[] = "DMPlex.setSupport(self, p, supp)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_49setSupport(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_p = 0;
   PyObject *__pyx_v_supp = 0;
   PyObject *__pyx_r = 0;
@@ -218352,7 +235171,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_47setSupport(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -218361,14 +235182,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_47setSupport(PyObject *__pyx_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_p)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_supp)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("setSupport", 1, 2, 2, 1); __PYX_ERR(42, 241, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setSupport", 1, 2, 2, 1); __PYX_ERR(42, 252, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setSupport") < 0)) __PYX_ERR(42, 241, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setSupport") < 0)) __PYX_ERR(42, 252, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 2) {
       goto __pyx_L5_argtuple_error;
@@ -218381,20 +235203,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_47setSupport(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setSupport", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 241, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setSupport", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 252, __pyx_L3_error)
   __pyx_L3_error:;
   __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_46setSupport(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p, __pyx_v_supp);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_48setSupport(((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_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_48setSupport(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;
@@ -218410,17 +235232,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_46setSupport(struct __pyx_obj
   __Pyx_RefNannySetupContext("setSupport", 0);
   __Pyx_INCREF(__pyx_v_supp);
 
-  /* "PETSc/DMPlex.pyx":242
+  /* "PETSc/DMPlex.pyx":253
  * 
  *     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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 253, __pyx_L1_error)
   __pyx_v_cp = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":243
+  /* "PETSc/DMPlex.pyx":254
  *     def setSupport(self, p, supp):
  *         cdef PetscInt cp = asInt(p)
  *         cdef PetscInt pStart = 0, pEnd = 0             # <<<<<<<<<<<<<<
@@ -218430,16 +235252,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_46setSupport(struct __pyx_obj
   __pyx_v_pStart = 0;
   __pyx_v_pEnd = 0;
 
-  /* "PETSc/DMPlex.pyx":244
+  /* "PETSc/DMPlex.pyx":255
  *         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)
+  __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 == ((int)-1))) __PYX_ERR(42, 255, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":245
+  /* "PETSc/DMPlex.pyx":256
  *         cdef PetscInt pStart = 0, pEnd = 0
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  *         assert cp>=pStart and cp<pEnd             # <<<<<<<<<<<<<<
@@ -218459,12 +235281,12 @@ 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_ERR(42, 245, __pyx_L1_error)
+      __PYX_ERR(42, 256, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/DMPlex.pyx":246
+  /* "PETSc/DMPlex.pyx":257
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  *         assert cp>=pStart and cp<pEnd
  *         cdef PetscInt  nsupp = 0             # <<<<<<<<<<<<<<
@@ -218473,7 +235295,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_46setSupport(struct __pyx_obj
  */
   __pyx_v_nsupp = 0;
 
-  /* "PETSc/DMPlex.pyx":247
+  /* "PETSc/DMPlex.pyx":258
  *         assert cp>=pStart and cp<pEnd
  *         cdef PetscInt  nsupp = 0
  *         cdef PetscInt *isupp = NULL             # <<<<<<<<<<<<<<
@@ -218482,37 +235304,37 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_46setSupport(struct __pyx_obj
  */
   __pyx_v_isupp = NULL;
 
-  /* "PETSc/DMPlex.pyx":248
+  /* "PETSc/DMPlex.pyx":259
  *         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_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_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, 259, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_DECREF_SET(__pyx_v_supp, __pyx_t_5);
   __pyx_t_5 = 0;
 
-  /* "PETSc/DMPlex.pyx":249
+  /* "PETSc/DMPlex.pyx":260
  *         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_ERR(42, 249, __pyx_L1_error)
+  __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 == ((int)-1))) __PYX_ERR(42, 260, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":250
+  /* "PETSc/DMPlex.pyx":261
  *         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_ERR(42, 250, __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 == ((int)-1))) __PYX_ERR(42, 261, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":241
+  /* "PETSc/DMPlex.pyx":252
  *         return array_i(nsupp, isupp)
  * 
  *     def setSupport(self, p, supp):             # <<<<<<<<<<<<<<
@@ -218534,7 +235356,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_46setSupport(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":252
+/* "PETSc/DMPlex.pyx":263
  *         CHKERR( DMPlexSetSupport(self.dm, cp, isupp) )
  * 
  *     def getMaxSizes(self):             # <<<<<<<<<<<<<<
@@ -218543,23 +235365,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_46setSupport(struct __pyx_obj
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_51getMaxSizes(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_50getMaxSizes[] = "DMPlex.getMaxSizes(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_51getMaxSizes(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));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_50getMaxSizes(((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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_50getMaxSizes(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
   PetscInt __pyx_v_maxConeSize;
   PetscInt __pyx_v_maxSupportSize;
   PyObject *__pyx_r = NULL;
@@ -218570,7 +235392,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_48getMaxSizes(struct __pyx_ob
   PyObject *__pyx_t_4 = NULL;
   __Pyx_RefNannySetupContext("getMaxSizes", 0);
 
-  /* "PETSc/DMPlex.pyx":253
+  /* "PETSc/DMPlex.pyx":264
  * 
  *     def getMaxSizes(self):
  *         cdef PetscInt maxConeSize = 0, maxSupportSize = 0             # <<<<<<<<<<<<<<
@@ -218580,16 +235402,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_48getMaxSizes(struct __pyx_ob
   __pyx_v_maxConeSize = 0;
   __pyx_v_maxSupportSize = 0;
 
-  /* "PETSc/DMPlex.pyx":254
+  /* "PETSc/DMPlex.pyx":265
  *     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_ERR(42, 254, __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 == ((int)-1))) __PYX_ERR(42, 265, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":255
+  /* "PETSc/DMPlex.pyx":266
  *         cdef PetscInt maxConeSize = 0, maxSupportSize = 0
  *         CHKERR( DMPlexGetMaxSizes(self.dm, &maxConeSize, &maxSupportSize) )
  *         return toInt(maxConeSize), toInt(maxSupportSize)             # <<<<<<<<<<<<<<
@@ -218597,11 +235419,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_48getMaxSizes(struct __pyx_ob
  *     def symmetrize(self):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_maxConeSize); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 255, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_maxConeSize); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 266, __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_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_maxSupportSize); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 266, __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_t_4 = PyTuple_New(2); if (unlikely(!__pyx_t_4)) __PYX_ERR(42, 266, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
   __Pyx_GIVEREF(__pyx_t_2);
   PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_2);
@@ -218613,7 +235435,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_48getMaxSizes(struct __pyx_ob
   __pyx_t_4 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":252
+  /* "PETSc/DMPlex.pyx":263
  *         CHKERR( DMPlexSetSupport(self.dm, cp, isupp) )
  * 
  *     def getMaxSizes(self):             # <<<<<<<<<<<<<<
@@ -218634,7 +235456,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_48getMaxSizes(struct __pyx_ob
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":257
+/* "PETSc/DMPlex.pyx":268
  *         return toInt(maxConeSize), toInt(maxSupportSize)
  * 
  *     def symmetrize(self):             # <<<<<<<<<<<<<<
@@ -218643,38 +235465,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_48getMaxSizes(struct __pyx_ob
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_53symmetrize(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_52symmetrize[] = "DMPlex.symmetrize(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_53symmetrize(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));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_52symmetrize(((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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_52symmetrize(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("symmetrize", 0);
 
-  /* "PETSc/DMPlex.pyx":258
+  /* "PETSc/DMPlex.pyx":269
  * 
  *     def symmetrize(self):
  *         CHKERR( DMPlexSymmetrize(self.dm) )             # <<<<<<<<<<<<<<
  * 
  *     def stratify(self):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSymmetrize(__pyx_v_self->__pyx_base.dm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(42, 269, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":257
+  /* "PETSc/DMPlex.pyx":268
  *         return toInt(maxConeSize), toInt(maxSupportSize)
  * 
  *     def symmetrize(self):             # <<<<<<<<<<<<<<
@@ -218694,7 +235516,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_50symmetrize(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":260
+/* "PETSc/DMPlex.pyx":271
  *         CHKERR( DMPlexSymmetrize(self.dm) )
  * 
  *     def stratify(self):             # <<<<<<<<<<<<<<
@@ -218703,38 +235525,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_50symmetrize(struct __pyx_obj
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_55stratify(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_54stratify[] = "DMPlex.stratify(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_55stratify(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));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_54stratify(((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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_54stratify(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("stratify", 0);
 
-  /* "PETSc/DMPlex.pyx":261
+  /* "PETSc/DMPlex.pyx":272
  * 
  *     def stratify(self):
  *         CHKERR( DMPlexStratify(self.dm) )             # <<<<<<<<<<<<<<
  * 
  *     def orient(self):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexStratify(__pyx_v_self->__pyx_base.dm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(42, 272, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":260
+  /* "PETSc/DMPlex.pyx":271
  *         CHKERR( DMPlexSymmetrize(self.dm) )
  * 
  *     def stratify(self):             # <<<<<<<<<<<<<<
@@ -218754,7 +235576,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_52stratify(struct __pyx_obj_8
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":263
+/* "PETSc/DMPlex.pyx":274
  *         CHKERR( DMPlexStratify(self.dm) )
  * 
  *     def orient(self):             # <<<<<<<<<<<<<<
@@ -218763,38 +235585,38 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_52stratify(struct __pyx_obj_8
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_57orient(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_56orient[] = "DMPlex.orient(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_57orient(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));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_56orient(((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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_56orient(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("orient", 0);
 
-  /* "PETSc/DMPlex.pyx":264
+  /* "PETSc/DMPlex.pyx":275
  * 
  *     def orient(self):
  *         CHKERR( DMPlexOrient(self.dm) )             # <<<<<<<<<<<<<<
  * 
  *     def getCellNumbering(self):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexOrient(__pyx_v_self->__pyx_base.dm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(42, 275, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":263
+  /* "PETSc/DMPlex.pyx":274
  *         CHKERR( DMPlexStratify(self.dm) )
  * 
  *     def orient(self):             # <<<<<<<<<<<<<<
@@ -218814,7 +235636,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_54orient(struct __pyx_obj_8pe
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":266
+/* "PETSc/DMPlex.pyx":277
  *         CHKERR( DMPlexOrient(self.dm) )
  * 
  *     def getCellNumbering(self):             # <<<<<<<<<<<<<<
@@ -218823,23 +235645,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_54orient(struct __pyx_obj_8pe
  */
 
 /* 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_59getCellNumbering(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_58getCellNumbering[] = "DMPlex.getCellNumbering(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_59getCellNumbering(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   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));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_58getCellNumbering(((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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_58getCellNumbering(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
   struct PyPetscISObject *__pyx_v_iset = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -218847,28 +235669,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_56getCellNumbering(struct __p
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getCellNumbering", 0);
 
-  /* "PETSc/DMPlex.pyx":267
+  /* "PETSc/DMPlex.pyx":278
  * 
  *     def getCellNumbering(self):
  *         cdef IS iset = IS()             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexGetCellNumbering(self.dm, &iset.iset) )
  *         PetscINCREF(iset.obj)
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 278, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_iset = ((struct PyPetscISObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":268
+  /* "PETSc/DMPlex.pyx":279
  *     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_ERR(42, 268, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetCellNumbering(__pyx_v_self->__pyx_base.dm, (&__pyx_v_iset->iset))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(42, 279, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":269
+  /* "PETSc/DMPlex.pyx":280
  *         cdef IS iset = IS()
  *         CHKERR( DMPlexGetCellNumbering(self.dm, &iset.iset) )
  *         PetscINCREF(iset.obj)             # <<<<<<<<<<<<<<
@@ -218877,7 +235699,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_56getCellNumbering(struct __p
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_iset->__pyx_base.obj);
 
-  /* "PETSc/DMPlex.pyx":270
+  /* "PETSc/DMPlex.pyx":281
  *         CHKERR( DMPlexGetCellNumbering(self.dm, &iset.iset) )
  *         PetscINCREF(iset.obj)
  *         return iset             # <<<<<<<<<<<<<<
@@ -218889,7 +235711,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_56getCellNumbering(struct __p
   __pyx_r = ((PyObject *)__pyx_v_iset);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":266
+  /* "PETSc/DMPlex.pyx":277
  *         CHKERR( DMPlexOrient(self.dm) )
  * 
  *     def getCellNumbering(self):             # <<<<<<<<<<<<<<
@@ -218909,7 +235731,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_56getCellNumbering(struct __p
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":272
+/* "PETSc/DMPlex.pyx":283
  *         return iset
  * 
  *     def getVertexNumbering(self):             # <<<<<<<<<<<<<<
@@ -218918,23 +235740,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_56getCellNumbering(struct __p
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_61getVertexNumbering(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_60getVertexNumbering[] = "DMPlex.getVertexNumbering(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_61getVertexNumbering(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));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_60getVertexNumbering(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
 
   /* 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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_60getVertexNumbering(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
   struct PyPetscISObject *__pyx_v_iset = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -218942,28 +235764,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_58getVertexNumbering(struct _
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getVertexNumbering", 0);
 
-  /* "PETSc/DMPlex.pyx":273
+  /* "PETSc/DMPlex.pyx":284
  * 
  *     def getVertexNumbering(self):
  *         cdef IS iset = IS()             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexGetVertexNumbering(self.dm, &iset.iset) )
  *         PetscINCREF(iset.obj)
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 284, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_iset = ((struct PyPetscISObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":274
+  /* "PETSc/DMPlex.pyx":285
  *     def getVertexNumbering(self):
  *         cdef IS iset = IS()
  *         CHKERR( DMPlexGetVertexNumbering(self.dm, &iset.iset) )             # <<<<<<<<<<<<<<
  *         PetscINCREF(iset.obj)
  *         return iset
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetVertexNumbering(__pyx_v_self->__pyx_base.dm, (&__pyx_v_iset->iset))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(42, 285, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":275
+  /* "PETSc/DMPlex.pyx":286
  *         cdef IS iset = IS()
  *         CHKERR( DMPlexGetVertexNumbering(self.dm, &iset.iset) )
  *         PetscINCREF(iset.obj)             # <<<<<<<<<<<<<<
@@ -218972,7 +235794,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_58getVertexNumbering(struct _
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_iset->__pyx_base.obj);
 
-  /* "PETSc/DMPlex.pyx":276
+  /* "PETSc/DMPlex.pyx":287
  *         CHKERR( DMPlexGetVertexNumbering(self.dm, &iset.iset) )
  *         PetscINCREF(iset.obj)
  *         return iset             # <<<<<<<<<<<<<<
@@ -218984,7 +235806,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_58getVertexNumbering(struct _
   __pyx_r = ((PyObject *)__pyx_v_iset);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":272
+  /* "PETSc/DMPlex.pyx":283
  *         return iset
  * 
  *     def getVertexNumbering(self):             # <<<<<<<<<<<<<<
@@ -219004,7 +235826,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_58getVertexNumbering(struct _
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":278
+/* "PETSc/DMPlex.pyx":289
  *         return iset
  * 
  *     def createPointNumbering(self):             # <<<<<<<<<<<<<<
@@ -219013,23 +235835,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_58getVertexNumbering(struct _
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_63createPointNumbering(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_62createPointNumbering[] = "DMPlex.createPointNumbering(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_63createPointNumbering(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
   __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));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_62createPointNumbering(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_60createPointNumbering(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_62createPointNumbering(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
   struct PyPetscISObject *__pyx_v_iset = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -219037,28 +235859,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_60createPointNumbering(struct
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("createPointNumbering", 0);
 
-  /* "PETSc/DMPlex.pyx":279
+  /* "PETSc/DMPlex.pyx":290
  * 
  *     def createPointNumbering(self):
  *         cdef IS iset = IS()             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexCreatePointNumbering(self.dm, &iset.iset) )
  *         return iset
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 290, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_iset = ((struct PyPetscISObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":280
+  /* "PETSc/DMPlex.pyx":291
  *     def createPointNumbering(self):
  *         cdef IS iset = IS()
  *         CHKERR( DMPlexCreatePointNumbering(self.dm, &iset.iset) )             # <<<<<<<<<<<<<<
  *         return iset
  * 
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexCreatePointNumbering(__pyx_v_self->__pyx_base.dm, (&__pyx_v_iset->iset))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(42, 291, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":281
+  /* "PETSc/DMPlex.pyx":292
  *         cdef IS iset = IS()
  *         CHKERR( DMPlexCreatePointNumbering(self.dm, &iset.iset) )
  *         return iset             # <<<<<<<<<<<<<<
@@ -219070,7 +235892,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_60createPointNumbering(struct
   __pyx_r = ((PyObject *)__pyx_v_iset);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":278
+  /* "PETSc/DMPlex.pyx":289
  *         return iset
  * 
  *     def createPointNumbering(self):             # <<<<<<<<<<<<<<
@@ -219090,7 +235912,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_60createPointNumbering(struct
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":283
+/* "PETSc/DMPlex.pyx":294
  *         return iset
  * 
  *     def getDepth(self):             # <<<<<<<<<<<<<<
@@ -219099,23 +235921,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_60createPointNumbering(struct
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_65getDepth(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_64getDepth[] = "DMPlex.getDepth(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_65getDepth(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_62getDepth(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_64getDepth(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_62getDepth(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_64getDepth(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
   PetscInt __pyx_v_depth;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -219123,7 +235945,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_62getDepth(struct __pyx_obj_8
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getDepth", 0);
 
-  /* "PETSc/DMPlex.pyx":284
+  /* "PETSc/DMPlex.pyx":295
  * 
  *     def getDepth(self):
  *         cdef PetscInt depth = 0             # <<<<<<<<<<<<<<
@@ -219132,16 +235954,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_62getDepth(struct __pyx_obj_8
  */
   __pyx_v_depth = 0;
 
-  /* "PETSc/DMPlex.pyx":285
+  /* "PETSc/DMPlex.pyx":296
  *     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_ERR(42, 285, __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 == ((int)-1))) __PYX_ERR(42, 296, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":286
+  /* "PETSc/DMPlex.pyx":297
  *         cdef PetscInt depth = 0
  *         CHKERR( DMPlexGetDepth(self.dm,&depth) )
  *         return toInt(depth)             # <<<<<<<<<<<<<<
@@ -219149,13 +235971,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_62getDepth(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_ERR(42, 286, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_depth); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 297, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":283
+  /* "PETSc/DMPlex.pyx":294
  *         return iset
  * 
  *     def getDepth(self):             # <<<<<<<<<<<<<<
@@ -219174,7 +235996,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_62getDepth(struct __pyx_obj_8
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":288
+/* "PETSc/DMPlex.pyx":299
  *         return toInt(depth)
  * 
  *     def getDepthStratum(self, svalue):             # <<<<<<<<<<<<<<
@@ -219183,9 +236005,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_62getDepth(struct __pyx_obj_8
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_67getDepthStratum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_66getDepthStratum[] = "DMPlex.getDepthStratum(self, svalue)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_67getDepthStratum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_svalue = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -219198,6 +236020,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_65getDepthStratum(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -219208,7 +236031,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_65getDepthStratum(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_ERR(42, 288, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getDepthStratum") < 0)) __PYX_ERR(42, 299, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -219219,20 +236042,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_65getDepthStratum(PyObject *_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getDepthStratum", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 288, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getDepthStratum", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 299, __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_64getDepthStratum(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_svalue);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_66getDepthStratum(((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_64getDepthStratum(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_svalue) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_66getDepthStratum(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;
@@ -219245,28 +236068,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_64getDepthStratum(struct __py
   PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("getDepthStratum", 0);
 
-  /* "PETSc/DMPlex.pyx":289
+  /* "PETSc/DMPlex.pyx":300
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(42, 289, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_svalue); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 300, __pyx_L1_error)
   __pyx_v_csvalue = __pyx_t_1;
   __pyx_v_sStart = 0;
   __pyx_v_sEnd = 0;
 
-  /* "PETSc/DMPlex.pyx":290
+  /* "PETSc/DMPlex.pyx":301
  *     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_ERR(42, 290, __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 == ((int)-1))) __PYX_ERR(42, 301, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":291
+  /* "PETSc/DMPlex.pyx":302
  *         cdef PetscInt csvalue = asInt(svalue), sStart = 0, sEnd = 0
  *         CHKERR( DMPlexGetDepthStratum(self.dm, csvalue, &sStart, &sEnd) )
  *         return (toInt(sStart), toInt(sEnd))             # <<<<<<<<<<<<<<
@@ -219274,11 +236097,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_64getDepthStratum(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_ERR(42, 291, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_sStart); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 302, __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_ERR(42, 291, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_sEnd); if (unlikely(!__pyx_t_4)) __PYX_ERR(42, 302, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(42, 291, __pyx_L1_error)
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(42, 302, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
@@ -219290,7 +236113,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_64getDepthStratum(struct __py
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":288
+  /* "PETSc/DMPlex.pyx":299
  *         return toInt(depth)
  * 
  *     def getDepthStratum(self, svalue):             # <<<<<<<<<<<<<<
@@ -219311,7 +236134,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_64getDepthStratum(struct __py
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":293
+/* "PETSc/DMPlex.pyx":304
  *         return (toInt(sStart), toInt(sEnd))
  * 
  *     def getHeightStratum(self, svalue):             # <<<<<<<<<<<<<<
@@ -219320,9 +236143,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_64getDepthStratum(struct __py
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_69getHeightStratum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_68getHeightStratum[] = "DMPlex.getHeightStratum(self, svalue)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_69getHeightStratum(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_svalue = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -219335,6 +236158,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_67getHeightStratum(PyObject *
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -219345,7 +236169,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_67getHeightStratum(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_ERR(42, 293, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getHeightStratum") < 0)) __PYX_ERR(42, 304, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -219356,20 +236180,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_67getHeightStratum(PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getHeightStratum", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 293, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getHeightStratum", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 304, __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_66getHeightStratum(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_svalue);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_68getHeightStratum(((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_66getHeightStratum(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_svalue) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_68getHeightStratum(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;
@@ -219382,28 +236206,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_66getHeightStratum(struct __p
   PyObject *__pyx_t_5 = NULL;
   __Pyx_RefNannySetupContext("getHeightStratum", 0);
 
-  /* "PETSc/DMPlex.pyx":294
+  /* "PETSc/DMPlex.pyx":305
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(42, 294, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_svalue); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 305, __pyx_L1_error)
   __pyx_v_csvalue = __pyx_t_1;
   __pyx_v_sStart = 0;
   __pyx_v_sEnd = 0;
 
-  /* "PETSc/DMPlex.pyx":295
+  /* "PETSc/DMPlex.pyx":306
  *     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_ERR(42, 295, __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 == ((int)-1))) __PYX_ERR(42, 306, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":296
+  /* "PETSc/DMPlex.pyx":307
  *         cdef PetscInt csvalue = asInt(svalue), sStart = 0, sEnd = 0
  *         CHKERR( DMPlexGetHeightStratum(self.dm, csvalue, &sStart, &sEnd) )
  *         return (toInt(sStart), toInt(sEnd))             # <<<<<<<<<<<<<<
@@ -219411,11 +236235,11 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_66getHeightStratum(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_ERR(42, 296, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_sStart); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 307, __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_ERR(42, 296, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_sEnd); if (unlikely(!__pyx_t_4)) __PYX_ERR(42, 307, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_4);
-  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(42, 296, __pyx_L1_error)
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(42, 307, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
@@ -219427,7 +236251,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_66getHeightStratum(struct __p
   __pyx_t_5 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":293
+  /* "PETSc/DMPlex.pyx":304
  *         return (toInt(sStart), toInt(sEnd))
  * 
  *     def getHeightStratum(self, svalue):             # <<<<<<<<<<<<<<
@@ -219448,7 +236272,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_66getHeightStratum(struct __p
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":298
+/* "PETSc/DMPlex.pyx":309
  *         return (toInt(sStart), toInt(sEnd))
  * 
  *     def getMeet(self, points):             # <<<<<<<<<<<<<<
@@ -219457,9 +236281,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_66getHeightStratum(struct __p
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_71getMeet(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_70getMeet[] = "DMPlex.getMeet(self, points)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_71getMeet(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_points = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -219472,6 +236296,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_69getMeet(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -219482,7 +236307,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_69getMeet(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_ERR(42, 298, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getMeet") < 0)) __PYX_ERR(42, 309, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -219493,20 +236318,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_69getMeet(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_ERR(42, 298, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getMeet", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 309, __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_68getMeet(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_points);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_70getMeet(((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_68getMeet(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_points) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_70getMeet(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;
@@ -219527,7 +236352,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_68getMeet(struct __pyx_obj_8p
   __Pyx_RefNannySetupContext("getMeet", 0);
   __Pyx_INCREF(__pyx_v_points);
 
-  /* "PETSc/DMPlex.pyx":299
+  /* "PETSc/DMPlex.pyx":310
  * 
  *     def getMeet(self, points):
  *         cdef PetscInt  numPoints = 0             # <<<<<<<<<<<<<<
@@ -219536,7 +236361,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_68getMeet(struct __pyx_obj_8p
  */
   __pyx_v_numPoints = 0;
 
-  /* "PETSc/DMPlex.pyx":300
+  /* "PETSc/DMPlex.pyx":311
  *     def getMeet(self, points):
  *         cdef PetscInt  numPoints = 0
  *         cdef PetscInt *ipoints = NULL             # <<<<<<<<<<<<<<
@@ -219545,7 +236370,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_68getMeet(struct __pyx_obj_8p
  */
   __pyx_v_ipoints = NULL;
 
-  /* "PETSc/DMPlex.pyx":301
+  /* "PETSc/DMPlex.pyx":312
  *         cdef PetscInt  numPoints = 0
  *         cdef PetscInt *ipoints = NULL
  *         cdef PetscInt  numCoveringPoints = 0             # <<<<<<<<<<<<<<
@@ -219554,7 +236379,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_68getMeet(struct __pyx_obj_8p
  */
   __pyx_v_numCoveringPoints = 0;
 
-  /* "PETSc/DMPlex.pyx":302
+  /* "PETSc/DMPlex.pyx":313
  *         cdef PetscInt *ipoints = NULL
  *         cdef PetscInt  numCoveringPoints = 0
  *         cdef const_PetscInt *coveringPoints = NULL             # <<<<<<<<<<<<<<
@@ -219563,28 +236388,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_68getMeet(struct __pyx_obj_8p
  */
   __pyx_v_coveringPoints = NULL;
 
-  /* "PETSc/DMPlex.pyx":303
+  /* "PETSc/DMPlex.pyx":314
  *         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_ERR(42, 303, __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, 314, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_points, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":304
+  /* "PETSc/DMPlex.pyx":315
  *         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_ERR(42, 304, __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 == ((int)-1))) __PYX_ERR(42, 315, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":305
+  /* "PETSc/DMPlex.pyx":316
  *         points = iarray_i(points, &numPoints, &ipoints)
  *         CHKERR( DMPlexGetMeet(self.dm, numPoints, ipoints, &numCoveringPoints, &coveringPoints) )
  *         try:             # <<<<<<<<<<<<<<
@@ -219593,7 +236418,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_68getMeet(struct __pyx_obj_8p
  */
   /*try:*/ {
 
-    /* "PETSc/DMPlex.pyx":306
+    /* "PETSc/DMPlex.pyx":317
  *         CHKERR( DMPlexGetMeet(self.dm, numPoints, ipoints, &numCoveringPoints, &coveringPoints) )
  *         try:
  *             return array_i(numCoveringPoints, coveringPoints)             # <<<<<<<<<<<<<<
@@ -219601,14 +236426,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_68getMeet(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_ERR(42, 306, __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, 317, __pyx_L4_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_r = __pyx_t_1;
     __pyx_t_1 = 0;
     goto __pyx_L3_return;
   }
 
-  /* "PETSc/DMPlex.pyx":308
+  /* "PETSc/DMPlex.pyx":319
  *             return array_i(numCoveringPoints, coveringPoints)
  *         finally:
  *             CHKERR( DMPlexRestoreMeet(self.dm, numPoints, ipoints, &numCoveringPoints, &coveringPoints) )             # <<<<<<<<<<<<<<
@@ -219632,9 +236457,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_68getMeet(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_ERR(42, 308, __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 == ((int)-1))) __PYX_ERR(42, 319, __pyx_L7_error)
       }
-      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_8);
         __Pyx_XGIVEREF(__pyx_t_9);
@@ -219649,7 +236473,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_68getMeet(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);
@@ -219665,14 +236488,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_68getMeet(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_ERR(42, 308, __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 == ((int)-1))) __PYX_ERR(42, 319, __pyx_L1_error)
       __pyx_r = __pyx_t_10;
       __pyx_t_10 = 0;
       goto __pyx_L0;
     }
   }
 
-  /* "PETSc/DMPlex.pyx":298
+  /* "PETSc/DMPlex.pyx":309
  *         return (toInt(sStart), toInt(sEnd))
  * 
  *     def getMeet(self, points):             # <<<<<<<<<<<<<<
@@ -219692,7 +236515,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_68getMeet(struct __pyx_obj_8p
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":310
+/* "PETSc/DMPlex.pyx":321
  *             CHKERR( DMPlexRestoreMeet(self.dm, numPoints, ipoints, &numCoveringPoints, &coveringPoints) )
  * 
  *     def getJoin(self, points):             # <<<<<<<<<<<<<<
@@ -219701,9 +236524,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_68getMeet(struct __pyx_obj_8p
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_73getJoin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_72getJoin[] = "DMPlex.getJoin(self, points)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_73getJoin(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_points = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -219716,6 +236539,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_71getJoin(PyObject *__pyx_v_s
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -219726,7 +236550,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_71getJoin(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_ERR(42, 310, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getJoin") < 0)) __PYX_ERR(42, 321, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -219737,20 +236561,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_71getJoin(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_ERR(42, 310, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getJoin", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 321, __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_70getJoin(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_points);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_72getJoin(((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_70getJoin(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_points) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_72getJoin(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;
@@ -219771,7 +236595,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_70getJoin(struct __pyx_obj_8p
   __Pyx_RefNannySetupContext("getJoin", 0);
   __Pyx_INCREF(__pyx_v_points);
 
-  /* "PETSc/DMPlex.pyx":311
+  /* "PETSc/DMPlex.pyx":322
  * 
  *     def getJoin(self, points):
  *         cdef PetscInt  numPoints = 0             # <<<<<<<<<<<<<<
@@ -219780,7 +236604,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_70getJoin(struct __pyx_obj_8p
  */
   __pyx_v_numPoints = 0;
 
-  /* "PETSc/DMPlex.pyx":312
+  /* "PETSc/DMPlex.pyx":323
  *     def getJoin(self, points):
  *         cdef PetscInt  numPoints = 0
  *         cdef PetscInt *ipoints = NULL             # <<<<<<<<<<<<<<
@@ -219789,7 +236613,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_70getJoin(struct __pyx_obj_8p
  */
   __pyx_v_ipoints = NULL;
 
-  /* "PETSc/DMPlex.pyx":313
+  /* "PETSc/DMPlex.pyx":324
  *         cdef PetscInt  numPoints = 0
  *         cdef PetscInt *ipoints = NULL
  *         cdef PetscInt  numCoveringPoints = 0             # <<<<<<<<<<<<<<
@@ -219798,7 +236622,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_70getJoin(struct __pyx_obj_8p
  */
   __pyx_v_numCoveringPoints = 0;
 
-  /* "PETSc/DMPlex.pyx":314
+  /* "PETSc/DMPlex.pyx":325
  *         cdef PetscInt *ipoints = NULL
  *         cdef PetscInt  numCoveringPoints = 0
  *         cdef const_PetscInt *coveringPoints = NULL             # <<<<<<<<<<<<<<
@@ -219807,28 +236631,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_70getJoin(struct __pyx_obj_8p
  */
   __pyx_v_coveringPoints = NULL;
 
-  /* "PETSc/DMPlex.pyx":315
+  /* "PETSc/DMPlex.pyx":326
  *         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_ERR(42, 315, __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, 326, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_points, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":316
+  /* "PETSc/DMPlex.pyx":327
  *         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_ERR(42, 316, __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 == ((int)-1))) __PYX_ERR(42, 327, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":317
+  /* "PETSc/DMPlex.pyx":328
  *         points = iarray_i(points, &numPoints, &ipoints)
  *         CHKERR( DMPlexGetJoin(self.dm, numPoints, ipoints, &numCoveringPoints, &coveringPoints) )
  *         try:             # <<<<<<<<<<<<<<
@@ -219837,7 +236661,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_70getJoin(struct __pyx_obj_8p
  */
   /*try:*/ {
 
-    /* "PETSc/DMPlex.pyx":318
+    /* "PETSc/DMPlex.pyx":329
  *         CHKERR( DMPlexGetJoin(self.dm, numPoints, ipoints, &numCoveringPoints, &coveringPoints) )
  *         try:
  *             return array_i(numCoveringPoints, coveringPoints)             # <<<<<<<<<<<<<<
@@ -219845,14 +236669,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_70getJoin(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_ERR(42, 318, __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, 329, __pyx_L4_error)
     __Pyx_GOTREF(__pyx_t_1);
     __pyx_r = __pyx_t_1;
     __pyx_t_1 = 0;
     goto __pyx_L3_return;
   }
 
-  /* "PETSc/DMPlex.pyx":320
+  /* "PETSc/DMPlex.pyx":331
  *             return array_i(numCoveringPoints, coveringPoints)
  *         finally:
  *             CHKERR( DMPlexRestoreJoin(self.dm, numPoints, ipoints, &numCoveringPoints, &coveringPoints) )             # <<<<<<<<<<<<<<
@@ -219876,9 +236700,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_70getJoin(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_ERR(42, 320, __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 == ((int)-1))) __PYX_ERR(42, 331, __pyx_L7_error)
       }
-      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_8);
         __Pyx_XGIVEREF(__pyx_t_9);
@@ -219893,7 +236716,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_70getJoin(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);
@@ -219909,14 +236731,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_70getJoin(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_ERR(42, 320, __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 == ((int)-1))) __PYX_ERR(42, 331, __pyx_L1_error)
       __pyx_r = __pyx_t_10;
       __pyx_t_10 = 0;
       goto __pyx_L0;
     }
   }
 
-  /* "PETSc/DMPlex.pyx":310
+  /* "PETSc/DMPlex.pyx":321
  *             CHKERR( DMPlexRestoreMeet(self.dm, numPoints, ipoints, &numCoveringPoints, &coveringPoints) )
  * 
  *     def getJoin(self, points):             # <<<<<<<<<<<<<<
@@ -219936,7 +236758,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_70getJoin(struct __pyx_obj_8p
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":322
+/* "PETSc/DMPlex.pyx":333
  *             CHKERR( DMPlexRestoreJoin(self.dm, numPoints, ipoints, &numCoveringPoints, &coveringPoints) )
  * 
  *     def getTransitiveClosure(self, p, useCone=True):             # <<<<<<<<<<<<<<
@@ -219945,9 +236767,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_70getJoin(struct __pyx_obj_8p
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_75getTransitiveClosure(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_74getTransitiveClosure[] = "DMPlex.getTransitiveClosure(self, p, useCone=True)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_75getTransitiveClosure(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_p = 0;
   PyObject *__pyx_v_useCone = 0;
   PyObject *__pyx_r = 0;
@@ -219962,7 +236784,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_73getTransitiveClosure(PyObje
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -219971,6 +236795,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_73getTransitiveClosure(PyObje
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_p)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_useCone);
@@ -219978,11 +236803,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_73getTransitiveClosure(PyObje
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getTransitiveClosure") < 0)) __PYX_ERR(42, 322, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getTransitiveClosure") < 0)) __PYX_ERR(42, 333, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -219993,20 +236819,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_73getTransitiveClosure(PyObje
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getTransitiveClosure", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 322, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getTransitiveClosure", 0, 1, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 333, __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_72getTransitiveClosure(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_p, __pyx_v_useCone);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_74getTransitiveClosure(((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_72getTransitiveClosure(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p, PyObject *__pyx_v_useCone) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_74getTransitiveClosure(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;
@@ -220035,17 +236861,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_72getTransitiveClosure(struct
   PyObject *__pyx_t_17 = NULL;
   __Pyx_RefNannySetupContext("getTransitiveClosure", 0);
 
-  /* "PETSc/DMPlex.pyx":323
+  /* "PETSc/DMPlex.pyx":334
  * 
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(42, 323, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 334, __pyx_L1_error)
   __pyx_v_cp = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":324
+  /* "PETSc/DMPlex.pyx":335
  *     def getTransitiveClosure(self, p, useCone=True):
  *         cdef PetscInt cp = asInt(p)
  *         cdef PetscInt pStart = 0, pEnd = 0             # <<<<<<<<<<<<<<
@@ -220055,16 +236881,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_72getTransitiveClosure(struct
   __pyx_v_pStart = 0;
   __pyx_v_pEnd = 0;
 
-  /* "PETSc/DMPlex.pyx":325
+  /* "PETSc/DMPlex.pyx":336
  *         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_ERR(42, 325, __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 == ((int)-1))) __PYX_ERR(42, 336, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":326
+  /* "PETSc/DMPlex.pyx":337
  *         cdef PetscInt pStart = 0, pEnd = 0
  *         CHKERR( DMPlexGetChart(self.dm, &pStart, &pEnd) )
  *         assert cp>=pStart and cp<pEnd             # <<<<<<<<<<<<<<
@@ -220084,22 +236910,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_72getTransitiveClosure(struct
     __pyx_L3_bool_binop_done:;
     if (unlikely(!__pyx_t_3)) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(42, 326, __pyx_L1_error)
+      __PYX_ERR(42, 337, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/DMPlex.pyx":327
+  /* "PETSc/DMPlex.pyx":338
  *         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)__Pyx_PyInt_As_PetscBool(__pyx_v_useCone)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 327, __pyx_L1_error)
+  __pyx_t_5 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_useCone)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 338, __pyx_L1_error)
   __pyx_v_cuseCone = __pyx_t_5;
 
-  /* "PETSc/DMPlex.pyx":328
+  /* "PETSc/DMPlex.pyx":339
  *         assert cp>=pStart and cp<pEnd
  *         cdef PetscBool cuseCone = useCone
  *         cdef PetscInt  numPoints = 0             # <<<<<<<<<<<<<<
@@ -220108,7 +236934,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_72getTransitiveClosure(struct
  */
   __pyx_v_numPoints = 0;
 
-  /* "PETSc/DMPlex.pyx":329
+  /* "PETSc/DMPlex.pyx":340
  *         cdef PetscBool cuseCone = useCone
  *         cdef PetscInt  numPoints = 0
  *         cdef PetscInt *points = NULL             # <<<<<<<<<<<<<<
@@ -220117,16 +236943,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_72getTransitiveClosure(struct
  */
   __pyx_v_points = NULL;
 
-  /* "PETSc/DMPlex.pyx":330
+  /* "PETSc/DMPlex.pyx":341
  *         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_ERR(42, 330, __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 == ((int)-1))) __PYX_ERR(42, 341, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":331
+  /* "PETSc/DMPlex.pyx":342
  *         cdef PetscInt *points = NULL
  *         CHKERR( DMPlexGetTransitiveClosure(self.dm, cp, cuseCone, &numPoints, &points) )
  *         try:             # <<<<<<<<<<<<<<
@@ -220135,20 +236961,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_72getTransitiveClosure(struct
  */
   /*try:*/ {
 
-    /* "PETSc/DMPlex.pyx":332
+    /* "PETSc/DMPlex.pyx":343
  *         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_ERR(42, 332, __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, 343, __pyx_L6_error)
     __Pyx_GOTREF(__pyx_t_6);
     __pyx_v_out = ((PyArrayObject *)__pyx_t_6);
     __pyx_t_6 = 0;
   }
 
-  /* "PETSc/DMPlex.pyx":334
+  /* "PETSc/DMPlex.pyx":345
  *             out = array_i(2*numPoints,points)
  *         finally:
  *             CHKERR( DMPlexRestoreTransitiveClosure(self.dm, cp, cuseCone, &numPoints, &points) )             # <<<<<<<<<<<<<<
@@ -220157,7 +236983,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_72getTransitiveClosure(struct
  */
   /*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_ERR(42, 334, __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 == ((int)-1))) __PYX_ERR(42, 345, __pyx_L1_error)
       goto __pyx_L7;
     }
     /*exception exit:*/{
@@ -220176,9 +237002,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_72getTransitiveClosure(struct
       __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_ERR(42, 334, __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 == ((int)-1))) __PYX_ERR(42, 345, __pyx_L9_error)
       }
-      __Pyx_PyThreadState_assign
       if (PY_MAJOR_VERSION >= 3) {
         __Pyx_XGIVEREF(__pyx_t_12);
         __Pyx_XGIVEREF(__pyx_t_13);
@@ -220193,7 +237018,6 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_72getTransitiveClosure(struct
       __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);
@@ -220209,80 +237033,845 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_72getTransitiveClosure(struct
     __pyx_L7:;
   }
 
-  /* "PETSc/DMPlex.pyx":335
- *         finally:
- *             CHKERR( DMPlexRestoreTransitiveClosure(self.dm, cp, cuseCone, &numPoints, &points) )
- *         return out[::2],out[1::2]             # <<<<<<<<<<<<<<
+  /* "PETSc/DMPlex.pyx":346
+ *         finally:
+ *             CHKERR( DMPlexRestoreTransitiveClosure(self.dm, cp, cuseCone, &numPoints, &points) )
+ *         return out[::2],out[1::2]             # <<<<<<<<<<<<<<
+ * 
+ *     def vecGetClosure(self, Section sec, Vec vec, p):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_6 = PyObject_GetItem(((PyObject *)__pyx_v_out), __pyx_slice__66); if (unlikely(!__pyx_t_6)) __PYX_ERR(42, 346, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_6);
+  __pyx_t_16 = PyObject_GetItem(((PyObject *)__pyx_v_out), __pyx_slice__67); if (unlikely(!__pyx_t_16)) __PYX_ERR(42, 346, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_16);
+  __pyx_t_17 = PyTuple_New(2); if (unlikely(!__pyx_t_17)) __PYX_ERR(42, 346, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_17);
+  __Pyx_GIVEREF(__pyx_t_6);
+  PyTuple_SET_ITEM(__pyx_t_17, 0, __pyx_t_6);
+  __Pyx_GIVEREF(__pyx_t_16);
+  PyTuple_SET_ITEM(__pyx_t_17, 1, __pyx_t_16);
+  __pyx_t_6 = 0;
+  __pyx_t_16 = 0;
+  __pyx_r = __pyx_t_17;
+  __pyx_t_17 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/DMPlex.pyx":333
+ *             CHKERR( DMPlexRestoreJoin(self.dm, numPoints, ipoints, &numCoveringPoints, &coveringPoints) )
+ * 
+ *     def getTransitiveClosure(self, p, useCone=True):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt pStart = 0, pEnd = 0
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_6);
+  __Pyx_XDECREF(__pyx_t_16);
+  __Pyx_XDECREF(__pyx_t_17);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getTransitiveClosure", __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/DMPlex.pyx":348
+ *         return out[::2],out[1::2]
+ * 
+ *     def vecGetClosure(self, Section sec, Vec vec, p):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cp = asInt(p), csize = 0
+ *         cdef PetscScalar *cvals = NULL
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_77vecGetClosure(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_76vecGetClosure[] = "DMPlex.vecGetClosure(self, Section sec, Vec vec, p)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_77vecGetClosure(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;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("vecGetClosure (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sec,&__pyx_n_s_vec,&__pyx_n_s_p,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);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        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_sec)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        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_ERR(42, 348, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        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_ERR(42, 348, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "vecGetClosure") < 0)) __PYX_ERR(42, 348, __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_sec = ((struct PyPetscSectionObject *)values[0]);
+    __pyx_v_vec = ((struct PyPetscVecObject *)values[1]);
+    __pyx_v_p = values[2];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("vecGetClosure", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 348, __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, 0, "sec", 0))) __PYX_ERR(42, 348, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) __PYX_ERR(42, 348, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_76vecGetClosure(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_sec, __pyx_v_vec, __pyx_v_p);
+
+  /* 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_76vecGetClosure(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;
+  PyArrayObject *__pyx_v_closure = NULL;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  char const *__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;
+  PyObject *__pyx_t_11 = NULL;
+  int __pyx_t_12;
+  __Pyx_RefNannySetupContext("vecGetClosure", 0);
+
+  /* "PETSc/DMPlex.pyx":349
+ * 
+ *     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 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 349, __pyx_L1_error)
+  __pyx_v_cp = __pyx_t_1;
+  __pyx_v_csize = 0;
+
+  /* "PETSc/DMPlex.pyx":350
+ *     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) )
+ *         try:
+ */
+  __pyx_v_cvals = NULL;
+
+  /* "PETSc/DMPlex.pyx":351
+ *         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 == ((int)-1))) __PYX_ERR(42, 351, __pyx_L1_error)
+
+  /* "PETSc/DMPlex.pyx":352
+ *         cdef PetscScalar *cvals = NULL
+ *         CHKERR( DMPlexVecGetClosure(self.dm, sec.sec, vec.vec, cp, &csize, &cvals) )
+ *         try:             # <<<<<<<<<<<<<<
+ *             closure = array_s(csize, cvals)
+ *         finally:
+ */
+  /*try:*/ {
+
+    /* "PETSc/DMPlex.pyx":353
+ *         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_ERR(42, 353, __pyx_L4_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_v_closure = ((PyArrayObject *)__pyx_t_3);
+    __pyx_t_3 = 0;
+  }
+
+  /* "PETSc/DMPlex.pyx":355
+ *             closure = array_s(csize, cvals)
+ *         finally:
+ *             CHKERR( DMPlexVecRestoreClosure(self.dm, sec.sec, vec.vec, cp, &csize, &cvals) )             # <<<<<<<<<<<<<<
+ *         return closure
+ * 
+ */
+  /*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 == ((int)-1))) __PYX_ERR(42, 355, __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);
+      __Pyx_XGOTREF(__pyx_t_6);
+      __Pyx_XGOTREF(__pyx_t_7);
+      __Pyx_XGOTREF(__pyx_t_8);
+      __Pyx_XGOTREF(__pyx_t_9);
+      __Pyx_XGOTREF(__pyx_t_10);
+      __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 == ((int)-1))) __PYX_ERR(42, 355, __pyx_L7_error)
+      }
+      if (PY_MAJOR_VERSION >= 3) {
+        __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_XGIVEREF(__pyx_t_6);
+      __Pyx_XGIVEREF(__pyx_t_7);
+      __Pyx_XGIVEREF(__pyx_t_8);
+      __Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
+      __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_lineno = __pyx_t_2; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
+      goto __pyx_L1_error;
+      __pyx_L7_error:;
+      if (PY_MAJOR_VERSION >= 3) {
+        __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_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
+      goto __pyx_L1_error;
+    }
+    __pyx_L5:;
+  }
+
+  /* "PETSc/DMPlex.pyx":356
+ *         finally:
+ *             CHKERR( DMPlexVecRestoreClosure(self.dm, sec.sec, vec.vec, cp, &csize, &cvals) )
+ *         return closure             # <<<<<<<<<<<<<<
+ * 
+ *     def getVecClosure(self, Section sec or None, Vec vec, point):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_closure));
+  __pyx_r = ((PyObject *)__pyx_v_closure);
+  goto __pyx_L0;
+
+  /* "PETSc/DMPlex.pyx":348
+ *         return out[::2],out[1::2]
+ * 
+ *     def vecGetClosure(self, Section sec, Vec vec, p):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cp = asInt(p), csize = 0
+ *         cdef PetscScalar *cvals = NULL
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.vecGetClosure", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_closure);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DMPlex.pyx":358
+ *         return closure
+ * 
+ *     def getVecClosure(self, Section sec or None, Vec vec, point):             # <<<<<<<<<<<<<<
+ *         cdef PetscSection csec = sec.sec if sec is not None else NULL
+ *         cdef PetscInt cp = asInt(point), csize = 0
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_79getVecClosure(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_78getVecClosure[] = "DMPlex.getVecClosure(self, Section sec, Vec vec, point)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_79getVecClosure(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_point = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getVecClosure (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sec,&__pyx_n_s_vec,&__pyx_n_s_point,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);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        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_sec)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vec)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("getVecClosure", 1, 3, 3, 1); __PYX_ERR(42, 358, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_point)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("getVecClosure", 1, 3, 3, 2); __PYX_ERR(42, 358, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getVecClosure") < 0)) __PYX_ERR(42, 358, __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_sec = ((struct PyPetscSectionObject *)values[0]);
+    __pyx_v_vec = ((struct PyPetscVecObject *)values[1]);
+    __pyx_v_point = values[2];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("getVecClosure", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 358, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getVecClosure", __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_ERR(42, 358, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) __PYX_ERR(42, 358, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_78getVecClosure(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_sec, __pyx_v_vec, __pyx_v_point);
+
+  /* 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_78getVecClosure(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, struct PyPetscSectionObject *__pyx_v_sec, struct PyPetscVecObject *__pyx_v_vec, PyObject *__pyx_v_point) {
+  PetscSection __pyx_v_csec;
+  PetscInt __pyx_v_cp;
+  PetscInt __pyx_v_csize;
+  PetscScalar *__pyx_v_cvals;
+  PyArrayObject *__pyx_v_closure = NULL;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscSection __pyx_t_1;
+  int __pyx_t_2;
+  PetscInt __pyx_t_3;
+  int __pyx_t_4;
+  PyObject *__pyx_t_5 = NULL;
+  int __pyx_t_6;
+  char const *__pyx_t_7;
+  PyObject *__pyx_t_8 = NULL;
+  PyObject *__pyx_t_9 = NULL;
+  PyObject *__pyx_t_10 = NULL;
+  PyObject *__pyx_t_11 = NULL;
+  PyObject *__pyx_t_12 = NULL;
+  PyObject *__pyx_t_13 = NULL;
+  int __pyx_t_14;
+  __Pyx_RefNannySetupContext("getVecClosure", 0);
+
+  /* "PETSc/DMPlex.pyx":359
+ * 
+ *     def getVecClosure(self, Section sec or None, Vec vec, point):
+ *         cdef PetscSection csec = sec.sec if sec is not None else NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cp = asInt(point), csize = 0
+ *         cdef PetscScalar *cvals = NULL
+ */
+  __pyx_t_2 = (((PyObject *)__pyx_v_sec) != Py_None);
+  if ((__pyx_t_2 != 0)) {
+    __pyx_t_1 = __pyx_v_sec->sec;
+  } else {
+    __pyx_t_1 = NULL;
+  }
+  __pyx_v_csec = __pyx_t_1;
+
+  /* "PETSc/DMPlex.pyx":360
+ *     def getVecClosure(self, Section sec or None, Vec vec, point):
+ *         cdef PetscSection csec = sec.sec if sec is not None else NULL
+ *         cdef PetscInt cp = asInt(point), csize = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscScalar *cvals = NULL
+ *         CHKERR( DMPlexVecGetClosure(self.dm, csec, vec.vec, cp, &csize, &cvals) )
+ */
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_3 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 360, __pyx_L1_error)
+  __pyx_v_cp = __pyx_t_3;
+  __pyx_v_csize = 0;
+
+  /* "PETSc/DMPlex.pyx":361
+ *         cdef PetscSection csec = sec.sec if sec is not None else NULL
+ *         cdef PetscInt cp = asInt(point), csize = 0
+ *         cdef PetscScalar *cvals = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexVecGetClosure(self.dm, csec, vec.vec, cp, &csize, &cvals) )
+ *         try:
+ */
+  __pyx_v_cvals = NULL;
+
+  /* "PETSc/DMPlex.pyx":362
+ *         cdef PetscInt cp = asInt(point), csize = 0
+ *         cdef PetscScalar *cvals = NULL
+ *         CHKERR( DMPlexVecGetClosure(self.dm, csec, vec.vec, cp, &csize, &cvals) )             # <<<<<<<<<<<<<<
+ *         try:
+ *             closure = array_s(csize, cvals)
+ */
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexVecGetClosure(__pyx_v_self->__pyx_base.dm, __pyx_v_csec, __pyx_v_vec->vec, __pyx_v_cp, (&__pyx_v_csize), (&__pyx_v_cvals))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(42, 362, __pyx_L1_error)
+
+  /* "PETSc/DMPlex.pyx":363
+ *         cdef PetscScalar *cvals = NULL
+ *         CHKERR( DMPlexVecGetClosure(self.dm, csec, vec.vec, cp, &csize, &cvals) )
+ *         try:             # <<<<<<<<<<<<<<
+ *             closure = array_s(csize, cvals)
+ *         finally:
+ */
+  /*try:*/ {
+
+    /* "PETSc/DMPlex.pyx":364
+ *         CHKERR( DMPlexVecGetClosure(self.dm, csec, vec.vec, cp, &csize, &cvals) )
+ *         try:
+ *             closure = array_s(csize, cvals)             # <<<<<<<<<<<<<<
+ *         finally:
+ *             CHKERR( DMPlexVecRestoreClosure(self.dm, csec, vec.vec, cp, &csize, &cvals) )
+ */
+    __pyx_t_5 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_s(__pyx_v_csize, __pyx_v_cvals)); if (unlikely(!__pyx_t_5)) __PYX_ERR(42, 364, __pyx_L4_error)
+    __Pyx_GOTREF(__pyx_t_5);
+    __pyx_v_closure = ((PyArrayObject *)__pyx_t_5);
+    __pyx_t_5 = 0;
+  }
+
+  /* "PETSc/DMPlex.pyx":366
+ *             closure = array_s(csize, cvals)
+ *         finally:
+ *             CHKERR( DMPlexVecRestoreClosure(self.dm, csec, vec.vec, cp, &csize, &cvals) )             # <<<<<<<<<<<<<<
+ *         return closure
+ * 
+ */
+  /*finally:*/ {
+    /*normal exit:*/{
+      __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexVecRestoreClosure(__pyx_v_self->__pyx_base.dm, __pyx_v_csec, __pyx_v_vec->vec, __pyx_v_cp, (&__pyx_v_csize), (&__pyx_v_cvals))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(42, 366, __pyx_L1_error)
+      goto __pyx_L5;
+    }
+    /*exception exit:*/{
+      __Pyx_PyThreadState_declare
+      __pyx_L4_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_5); __pyx_t_5 = 0;
+      if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_11, &__pyx_t_12, &__pyx_t_13);
+      if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10) < 0)) __Pyx_ErrFetch(&__pyx_t_8, &__pyx_t_9, &__pyx_t_10);
+      __Pyx_XGOTREF(__pyx_t_8);
+      __Pyx_XGOTREF(__pyx_t_9);
+      __Pyx_XGOTREF(__pyx_t_10);
+      __Pyx_XGOTREF(__pyx_t_11);
+      __Pyx_XGOTREF(__pyx_t_12);
+      __Pyx_XGOTREF(__pyx_t_13);
+      __pyx_t_4 = __pyx_lineno; __pyx_t_6 = __pyx_clineno; __pyx_t_7 = __pyx_filename;
+      {
+        __pyx_t_14 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexVecRestoreClosure(__pyx_v_self->__pyx_base.dm, __pyx_v_csec, __pyx_v_vec->vec, __pyx_v_cp, (&__pyx_v_csize), (&__pyx_v_cvals))); if (unlikely(__pyx_t_14 == ((int)-1))) __PYX_ERR(42, 366, __pyx_L7_error)
+      }
+      if (PY_MAJOR_VERSION >= 3) {
+        __Pyx_XGIVEREF(__pyx_t_11);
+        __Pyx_XGIVEREF(__pyx_t_12);
+        __Pyx_XGIVEREF(__pyx_t_13);
+        __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
+      }
+      __Pyx_XGIVEREF(__pyx_t_8);
+      __Pyx_XGIVEREF(__pyx_t_9);
+      __Pyx_XGIVEREF(__pyx_t_10);
+      __Pyx_ErrRestore(__pyx_t_8, __pyx_t_9, __pyx_t_10);
+      __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_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_6; __pyx_filename = __pyx_t_7;
+      goto __pyx_L1_error;
+      __pyx_L7_error:;
+      if (PY_MAJOR_VERSION >= 3) {
+        __Pyx_XGIVEREF(__pyx_t_11);
+        __Pyx_XGIVEREF(__pyx_t_12);
+        __Pyx_XGIVEREF(__pyx_t_13);
+        __Pyx_ExceptionReset(__pyx_t_11, __pyx_t_12, __pyx_t_13);
+      }
+      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __Pyx_XDECREF(__pyx_t_9); __pyx_t_9 = 0;
+      __Pyx_XDECREF(__pyx_t_10); __pyx_t_10 = 0;
+      __pyx_t_11 = 0; __pyx_t_12 = 0; __pyx_t_13 = 0;
+      goto __pyx_L1_error;
+    }
+    __pyx_L5:;
+  }
+
+  /* "PETSc/DMPlex.pyx":367
+ *         finally:
+ *             CHKERR( DMPlexVecRestoreClosure(self.dm, csec, vec.vec, cp, &csize, &cvals) )
+ *         return closure             # <<<<<<<<<<<<<<
+ * 
+ *     def setVecClosure(self, Section sec or None, Vec vec, point, values, addv=None):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_closure));
+  __pyx_r = ((PyObject *)__pyx_v_closure);
+  goto __pyx_L0;
+
+  /* "PETSc/DMPlex.pyx":358
+ *         return closure
+ * 
+ *     def getVecClosure(self, Section sec or None, Vec vec, point):             # <<<<<<<<<<<<<<
+ *         cdef PetscSection csec = sec.sec if sec is not None else NULL
+ *         cdef PetscInt cp = asInt(point), csize = 0
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_5);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getVecClosure", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_closure);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DMPlex.pyx":369
+ *         return closure
+ * 
+ *     def setVecClosure(self, Section sec or None, Vec vec, point, values, addv=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscSection csec = sec.sec if sec is not None else NULL
+ *         cdef PetscInt cp = asInt(point)
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_81setVecClosure(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_80setVecClosure[] = "DMPlex.setVecClosure(self, Section sec, Vec vec, point, values, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_81setVecClosure(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_point = 0;
+  PyObject *__pyx_v_values = 0;
+  PyObject *__pyx_v_addv = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setVecClosure (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sec,&__pyx_n_s_vec,&__pyx_n_s_point,&__pyx_n_s_values,&__pyx_n_s_addv,0};
+    PyObject* values[5] = {0,0,0,0,0};
+    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);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        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_sec)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vec)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("setVecClosure", 0, 4, 5, 1); __PYX_ERR(42, 369, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  2:
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_point)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("setVecClosure", 0, 4, 5, 2); __PYX_ERR(42, 369, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_values)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("setVecClosure", 0, 4, 5, 3); __PYX_ERR(42, 369, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
+          if (value) { values[4] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setVecClosure") < 0)) __PYX_ERR(42, 369, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 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_sec = ((struct PyPetscSectionObject *)values[0]);
+    __pyx_v_vec = ((struct PyPetscVecObject *)values[1]);
+    __pyx_v_point = values[2];
+    __pyx_v_values = values[3];
+    __pyx_v_addv = values[4];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setVecClosure", 0, 4, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 369, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setVecClosure", __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_ERR(42, 369, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) __PYX_ERR(42, 369, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_80setVecClosure(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_sec, __pyx_v_vec, __pyx_v_point, __pyx_v_values, __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_6DMPlex_80setVecClosure(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, struct PyPetscSectionObject *__pyx_v_sec, struct PyPetscVecObject *__pyx_v_vec, PyObject *__pyx_v_point, PyObject *__pyx_v_values, PyObject *__pyx_v_addv) {
+  PetscSection __pyx_v_csec;
+  PetscInt __pyx_v_cp;
+  PetscInt __pyx_v_csize;
+  PetscScalar *__pyx_v_cvals;
+  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
+  InsertMode __pyx_v_im;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscSection __pyx_t_1;
+  int __pyx_t_2;
+  PetscInt __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  InsertMode __pyx_t_5;
+  int __pyx_t_6;
+  __Pyx_RefNannySetupContext("setVecClosure", 0);
+
+  /* "PETSc/DMPlex.pyx":370
+ * 
+ *     def setVecClosure(self, Section sec or None, Vec vec, point, values, addv=None):
+ *         cdef PetscSection csec = sec.sec if sec is not None else NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cp = asInt(point)
+ *         cdef PetscInt csize = 0
+ */
+  __pyx_t_2 = (((PyObject *)__pyx_v_sec) != Py_None);
+  if ((__pyx_t_2 != 0)) {
+    __pyx_t_1 = __pyx_v_sec->sec;
+  } else {
+    __pyx_t_1 = NULL;
+  }
+  __pyx_v_csec = __pyx_t_1;
+
+  /* "PETSc/DMPlex.pyx":371
+ *     def setVecClosure(self, Section sec or None, Vec vec, point, values, addv=None):
+ *         cdef PetscSection csec = sec.sec if sec is not None else NULL
+ *         cdef PetscInt cp = asInt(point)             # <<<<<<<<<<<<<<
+ *         cdef PetscInt csize = 0
+ *         cdef PetscScalar *cvals = NULL
+ */
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_3 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 371, __pyx_L1_error)
+  __pyx_v_cp = __pyx_t_3;
+
+  /* "PETSc/DMPlex.pyx":372
+ *         cdef PetscSection csec = sec.sec if sec is not None else NULL
+ *         cdef PetscInt cp = asInt(point)
+ *         cdef PetscInt csize = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscScalar *cvals = NULL
+ *         cdef object tmp = iarray_s(values, &csize, &cvals)
+ */
+  __pyx_v_csize = 0;
+
+  /* "PETSc/DMPlex.pyx":373
+ *         cdef PetscInt cp = asInt(point)
+ *         cdef PetscInt csize = 0
+ *         cdef PetscScalar *cvals = NULL             # <<<<<<<<<<<<<<
+ *         cdef object tmp = iarray_s(values, &csize, &cvals)
+ *         cdef PetscInsertMode im = insertmode(addv)
+ */
+  __pyx_v_cvals = NULL;
+
+  /* "PETSc/DMPlex.pyx":374
+ *         cdef PetscInt csize = 0
+ *         cdef PetscScalar *cvals = NULL
+ *         cdef object tmp = iarray_s(values, &csize, &cvals)             # <<<<<<<<<<<<<<
+ *         cdef PetscInsertMode im = insertmode(addv)
+ *         CHKERR( DMPlexVecSetClosure(self.dm, csec, vec.vec, cp, cvals, im) )
+ */
+  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_s(__pyx_v_values, (&__pyx_v_csize), (&__pyx_v_cvals))); if (unlikely(!__pyx_t_4)) __PYX_ERR(42, 374, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_v_tmp = __pyx_t_4;
+  __pyx_t_4 = 0;
+
+  /* "PETSc/DMPlex.pyx":375
+ *         cdef PetscScalar *cvals = NULL
+ *         cdef object tmp = iarray_s(values, &csize, &cvals)
+ *         cdef PetscInsertMode im = insertmode(addv)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexVecSetClosure(self.dm, csec, vec.vec, cp, cvals, im) )
  * 
- *     def vecGetClosure(self, Section sec, Vec vec, p):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __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__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_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);
-  __Pyx_GIVEREF(__pyx_t_16);
-  PyTuple_SET_ITEM(__pyx_t_17, 1, __pyx_t_16);
-  __pyx_t_6 = 0;
-  __pyx_t_16 = 0;
-  __pyx_r = __pyx_t_17;
-  __pyx_t_17 = 0;
-  goto __pyx_L0;
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_5 == ((InsertMode)((InsertMode)-1L)))) __PYX_ERR(42, 375, __pyx_L1_error)
+  __pyx_v_im = __pyx_t_5;
 
-  /* "PETSc/DMPlex.pyx":322
- *             CHKERR( DMPlexRestoreJoin(self.dm, numPoints, ipoints, &numCoveringPoints, &coveringPoints) )
+  /* "PETSc/DMPlex.pyx":376
+ *         cdef object tmp = iarray_s(values, &csize, &cvals)
+ *         cdef PetscInsertMode im = insertmode(addv)
+ *         CHKERR( DMPlexVecSetClosure(self.dm, csec, vec.vec, cp, cvals, im) )             # <<<<<<<<<<<<<<
  * 
- *     def getTransitiveClosure(self, p, useCone=True):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cp = asInt(p)
- *         cdef PetscInt pStart = 0, pEnd = 0
+ *     def setMatClosure(self, Section sec or None, Section gsec or None,
+ */
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexVecSetClosure(__pyx_v_self->__pyx_base.dm, __pyx_v_csec, __pyx_v_vec->vec, __pyx_v_cp, __pyx_v_cvals, __pyx_v_im)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(42, 376, __pyx_L1_error)
+
+  /* "PETSc/DMPlex.pyx":369
+ *         return closure
+ * 
+ *     def setVecClosure(self, Section sec or None, Vec vec, point, values, addv=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscSection csec = sec.sec if sec is not None else NULL
+ *         cdef PetscInt cp = asInt(point)
  */
 
   /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_XDECREF(__pyx_t_6);
-  __Pyx_XDECREF(__pyx_t_16);
-  __Pyx_XDECREF(__pyx_t_17);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getTransitiveClosure", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setVecClosure", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_out);
+  __Pyx_XDECREF(__pyx_v_tmp);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":337
- *         return out[::2],out[1::2]
+/* "PETSc/DMPlex.pyx":378
+ *         CHKERR( DMPlexVecSetClosure(self.dm, csec, vec.vec, cp, cvals, im) )
  * 
- *     def vecGetClosure(self, Section sec, Vec vec, p):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cp = asInt(p), csize = 0
- *         cdef PetscScalar *cvals = NULL
+ *     def setMatClosure(self, Section sec or None, Section gsec or None,             # <<<<<<<<<<<<<<
+ *                       Mat mat, point, values, addv=None):
+ *         cdef PetscSection csec  =  sec.sec if  sec is not None else NULL
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_83setMatClosure(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_82setMatClosure[] = "DMPlex.setMatClosure(self, Section sec, Section gsec, Mat mat, point, values, addv=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_83setMatClosure(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;
+  struct PyPetscSectionObject *__pyx_v_gsec = 0;
+  struct PyPetscMatObject *__pyx_v_mat = 0;
+  PyObject *__pyx_v_point = 0;
+  PyObject *__pyx_v_values = 0;
+  PyObject *__pyx_v_addv = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("vecGetClosure (wrapper)", 0);
+  __Pyx_RefNannySetupContext("setMatClosure (wrapper)", 0);
   {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sec,&__pyx_n_s_vec,&__pyx_n_s_p,0};
-    PyObject* values[3] = {0,0,0};
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_sec,&__pyx_n_s_gsec,&__pyx_n_s_mat,&__pyx_n_s_point,&__pyx_n_s_values,&__pyx_n_s_addv,0};
+    PyObject* values[6] = {0,0,0,0,0,0};
+
+    /* "PETSc/DMPlex.pyx":379
+ * 
+ *     def setMatClosure(self, Section sec or None, Section gsec or None,
+ *                       Mat mat, point, values, addv=None):             # <<<<<<<<<<<<<<
+ *         cdef PetscSection csec  =  sec.sec if  sec is not None else NULL
+ *         cdef PetscSection cgsec = gsec.sec if gsec is not None else NULL
+ */
+    values[5] = ((PyObject *)Py_None);
     if (unlikely(__pyx_kwds)) {
       Py_ssize_t kw_args;
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
+        case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
+        case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -220291,42 +237880,80 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_75vecGetClosure(PyObject *__p
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_sec)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
-        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_vec)) != 0)) kw_args--;
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_gsec)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("vecGetClosure", 1, 3, 3, 1); __PYX_ERR(42, 337, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setMatClosure", 0, 5, 6, 1); __PYX_ERR(42, 378, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
-        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_p)) != 0)) kw_args--;
+        if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_mat)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("setMatClosure", 0, 5, 6, 2); __PYX_ERR(42, 378, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  3:
+        if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_point)) != 0)) kw_args--;
         else {
-          __Pyx_RaiseArgtupleInvalid("vecGetClosure", 1, 3, 3, 2); __PYX_ERR(42, 337, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("setMatClosure", 0, 5, 6, 3); __PYX_ERR(42, 378, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  4:
+        if (likely((values[4] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_values)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("setMatClosure", 0, 5, 6, 4); __PYX_ERR(42, 378, __pyx_L3_error)
+        }
+        CYTHON_FALLTHROUGH;
+        case  5:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_addv);
+          if (value) { values[5] = value; kw_args--; }
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "vecGetClosure") < 0)) __PYX_ERR(42, 337, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setMatClosure") < 0)) __PYX_ERR(42, 378, __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  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
+        case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        values[3] = PyTuple_GET_ITEM(__pyx_args, 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_sec = ((struct PyPetscSectionObject *)values[0]);
-    __pyx_v_vec = ((struct PyPetscVecObject *)values[1]);
-    __pyx_v_p = values[2];
+    __pyx_v_gsec = ((struct PyPetscSectionObject *)values[1]);
+    __pyx_v_mat = ((struct PyPetscMatObject *)values[2]);
+    __pyx_v_point = values[3];
+    __pyx_v_values = values[4];
+    __pyx_v_addv = values[5];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("vecGetClosure", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 337, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setMatClosure", 0, 5, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 378, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.vecGetClosure", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setMatClosure", __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sec), __pyx_ptype_8petsc4py_5PETSc_Section, 1, "sec", 0))) __PYX_ERR(42, 378, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_gsec), __pyx_ptype_8petsc4py_5PETSc_Section, 1, "gsec", 0))) __PYX_ERR(42, 378, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_mat), __pyx_ptype_8petsc4py_5PETSc_Mat, 0, "mat", 0))) __PYX_ERR(42, 379, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_82setMatClosure(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_sec, __pyx_v_gsec, __pyx_v_mat, __pyx_v_point, __pyx_v_values, __pyx_v_addv);
+
+  /* "PETSc/DMPlex.pyx":378
+ *         CHKERR( DMPlexVecSetClosure(self.dm, csec, vec.vec, cp, cvals, im) )
+ * 
+ *     def setMatClosure(self, Section sec or None, Section gsec or None,             # <<<<<<<<<<<<<<
+ *                       Mat mat, point, values, addv=None):
+ *         cdef PetscSection csec  =  sec.sec if  sec is not None else NULL
+ */
 
   /* function exit code */
   goto __pyx_L0;
@@ -220337,173 +237964,137 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_75vecGetClosure(PyObject *__p
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_82setMatClosure(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, struct PyPetscSectionObject *__pyx_v_sec, struct PyPetscSectionObject *__pyx_v_gsec, struct PyPetscMatObject *__pyx_v_mat, PyObject *__pyx_v_point, PyObject *__pyx_v_values, PyObject *__pyx_v_addv) {
+  PetscSection __pyx_v_csec;
+  PetscSection __pyx_v_cgsec;
   PetscInt __pyx_v_cp;
   PetscInt __pyx_v_csize;
   PetscScalar *__pyx_v_cvals;
-  PyArrayObject *__pyx_v_closure = NULL;
+  CYTHON_UNUSED PyObject *__pyx_v_tmp = 0;
+  InsertMode __pyx_v_im;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscInt __pyx_t_1;
+  PetscSection __pyx_t_1;
   int __pyx_t_2;
-  PyObject *__pyx_t_3 = NULL;
-  int __pyx_t_4;
-  char const *__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;
-  PyObject *__pyx_t_11 = NULL;
-  int __pyx_t_12;
-  __Pyx_RefNannySetupContext("vecGetClosure", 0);
+  PetscInt __pyx_t_3;
+  PyObject *__pyx_t_4 = NULL;
+  InsertMode __pyx_t_5;
+  int __pyx_t_6;
+  __Pyx_RefNannySetupContext("setMatClosure", 0);
 
-  /* "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) )
+  /* "PETSc/DMPlex.pyx":380
+ *     def setMatClosure(self, Section sec or None, Section gsec or None,
+ *                       Mat mat, point, values, addv=None):
+ *         cdef PetscSection csec  =  sec.sec if  sec is not None else NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscSection cgsec = gsec.sec if gsec is not None else NULL
+ *         cdef PetscInt cp = asInt(point)
  */
-  __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;
+  __pyx_t_2 = (((PyObject *)__pyx_v_sec) != Py_None);
+  if ((__pyx_t_2 != 0)) {
+    __pyx_t_1 = __pyx_v_sec->sec;
+  } else {
+    __pyx_t_1 = NULL;
+  }
+  __pyx_v_csec = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":339
- *     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) )
- *         try:
+  /* "PETSc/DMPlex.pyx":381
+ *                       Mat mat, point, values, addv=None):
+ *         cdef PetscSection csec  =  sec.sec if  sec is not None else NULL
+ *         cdef PetscSection cgsec = gsec.sec if gsec is not None else NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cp = asInt(point)
+ *         cdef PetscInt csize = 0
  */
-  __pyx_v_cvals = NULL;
+  __pyx_t_2 = (((PyObject *)__pyx_v_gsec) != Py_None);
+  if ((__pyx_t_2 != 0)) {
+    __pyx_t_1 = __pyx_v_gsec->sec;
+  } else {
+    __pyx_t_1 = NULL;
+  }
+  __pyx_v_cgsec = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":340
- *         cdef PetscInt cp = asInt(p), csize = 0
+  /* "PETSc/DMPlex.pyx":382
+ *         cdef PetscSection csec  =  sec.sec if  sec is not None else NULL
+ *         cdef PetscSection cgsec = gsec.sec if gsec is not None else NULL
+ *         cdef PetscInt cp = asInt(point)             # <<<<<<<<<<<<<<
+ *         cdef PetscInt 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_ERR(42, 340, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_3 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 382, __pyx_L1_error)
+  __pyx_v_cp = __pyx_t_3;
 
-  /* "PETSc/DMPlex.pyx":341
+  /* "PETSc/DMPlex.pyx":383
+ *         cdef PetscSection cgsec = gsec.sec if gsec is not None else NULL
+ *         cdef PetscInt cp = asInt(point)
+ *         cdef PetscInt csize = 0             # <<<<<<<<<<<<<<
  *         cdef PetscScalar *cvals = NULL
- *         CHKERR( DMPlexVecGetClosure(self.dm, sec.sec, vec.vec, cp, &csize, &cvals) )
- *         try:             # <<<<<<<<<<<<<<
- *             closure = array_s(csize, cvals)
- *         finally:
+ *         cdef object tmp = iarray_s(values, &csize, &cvals)
  */
-  /*try:*/ {
+  __pyx_v_csize = 0;
 
-    /* "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) )
+  /* "PETSc/DMPlex.pyx":384
+ *         cdef PetscInt cp = asInt(point)
+ *         cdef PetscInt csize = 0
+ *         cdef PetscScalar *cvals = NULL             # <<<<<<<<<<<<<<
+ *         cdef object tmp = iarray_s(values, &csize, &cvals)
+ *         cdef PetscInsertMode im = insertmode(addv)
  */
-    __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;
-  }
+  __pyx_v_cvals = NULL;
 
-  /* "PETSc/DMPlex.pyx":344
- *             closure = array_s(csize, cvals)
- *         finally:
- *             CHKERR( DMPlexVecRestoreClosure(self.dm, sec.sec, vec.vec, cp, &csize, &cvals) )             # <<<<<<<<<<<<<<
- *         return closure
+  /* "PETSc/DMPlex.pyx":385
+ *         cdef PetscInt csize = 0
+ *         cdef PetscScalar *cvals = NULL
+ *         cdef object tmp = iarray_s(values, &csize, &cvals)             # <<<<<<<<<<<<<<
+ *         cdef PetscInsertMode im = insertmode(addv)
+ *         CHKERR( DMPlexMatSetClosure(self.dm, csec, cgsec, mat.mat, cp, cvals, im) )
+ */
+  __pyx_t_4 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_iarray_s(__pyx_v_values, (&__pyx_v_csize), (&__pyx_v_cvals))); if (unlikely(!__pyx_t_4)) __PYX_ERR(42, 385, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_v_tmp = __pyx_t_4;
+  __pyx_t_4 = 0;
+
+  /* "PETSc/DMPlex.pyx":386
+ *         cdef PetscScalar *cvals = NULL
+ *         cdef object tmp = iarray_s(values, &csize, &cvals)
+ *         cdef PetscInsertMode im = insertmode(addv)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexMatSetClosure(self.dm, csec, cgsec, mat.mat, cp, cvals, im) )
  * 
  */
-  /*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_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);
-      __Pyx_XGOTREF(__pyx_t_6);
-      __Pyx_XGOTREF(__pyx_t_7);
-      __Pyx_XGOTREF(__pyx_t_8);
-      __Pyx_XGOTREF(__pyx_t_9);
-      __Pyx_XGOTREF(__pyx_t_10);
-      __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_ERR(42, 344, __pyx_L7_error)
-      }
-      __Pyx_PyThreadState_assign
-      if (PY_MAJOR_VERSION >= 3) {
-        __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_XGIVEREF(__pyx_t_6);
-      __Pyx_XGIVEREF(__pyx_t_7);
-      __Pyx_XGIVEREF(__pyx_t_8);
-      __Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
-      __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_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);
-        __Pyx_XGIVEREF(__pyx_t_11);
-        __Pyx_ExceptionReset(__pyx_t_9, __pyx_t_10, __pyx_t_11);
-      }
-      __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
-      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
-      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
-      __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
-      goto __pyx_L1_error;
-    }
-    __pyx_L5:;
-  }
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_addv); if (unlikely(__pyx_t_5 == ((InsertMode)((InsertMode)-1L)))) __PYX_ERR(42, 386, __pyx_L1_error)
+  __pyx_v_im = __pyx_t_5;
 
-  /* "PETSc/DMPlex.pyx":345
- *         finally:
- *             CHKERR( DMPlexVecRestoreClosure(self.dm, sec.sec, vec.vec, cp, &csize, &cvals) )
- *         return closure             # <<<<<<<<<<<<<<
+  /* "PETSc/DMPlex.pyx":387
+ *         cdef object tmp = iarray_s(values, &csize, &cvals)
+ *         cdef PetscInsertMode im = insertmode(addv)
+ *         CHKERR( DMPlexMatSetClosure(self.dm, csec, cgsec, mat.mat, cp, cvals, im) )             # <<<<<<<<<<<<<<
  * 
  *     def generate(self, DMPlex boundary, name=None, interpolate=True):
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_closure));
-  __pyx_r = ((PyObject *)__pyx_v_closure);
-  goto __pyx_L0;
+  __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexMatSetClosure(__pyx_v_self->__pyx_base.dm, __pyx_v_csec, __pyx_v_cgsec, __pyx_v_mat->mat, __pyx_v_cp, __pyx_v_cvals, __pyx_v_im)); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(42, 387, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":337
- *         return out[::2],out[1::2]
+  /* "PETSc/DMPlex.pyx":378
+ *         CHKERR( DMPlexVecSetClosure(self.dm, csec, vec.vec, cp, cvals, im) )
  * 
- *     def vecGetClosure(self, Section sec, Vec vec, p):             # <<<<<<<<<<<<<<
- *         cdef PetscInt cp = asInt(p), csize = 0
- *         cdef PetscScalar *cvals = NULL
+ *     def setMatClosure(self, Section sec or None, Section gsec or None,             # <<<<<<<<<<<<<<
+ *                       Mat mat, point, values, addv=None):
+ *         cdef PetscSection csec  =  sec.sec if  sec is not None else 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.DMPlex.vecGetClosure", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_XDECREF(__pyx_t_4);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setMatClosure", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_closure);
+  __Pyx_XDECREF(__pyx_v_tmp);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":347
- *         return closure
+/* "PETSc/DMPlex.pyx":389
+ *         CHKERR( DMPlexMatSetClosure(self.dm, csec, cgsec, mat.mat, cp, cvals, im) )
  * 
  *     def generate(self, DMPlex boundary, name=None, interpolate=True):             # <<<<<<<<<<<<<<
  *         cdef PetscBool interp = interpolate
@@ -220511,9 +238102,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_74vecGetClosure(struct __pyx_
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_85generate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_84generate[] = "DMPlex.generate(self, DMPlex boundary, name=None, interpolate=True)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_85generate(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;
@@ -220530,8 +238121,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_77generate(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -220540,11 +238134,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_77generate(PyObject *__pyx_v_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_boundary)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_name);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_interpolate);
@@ -220552,12 +238148,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_77generate(PyObject *__pyx_v_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "generate") < 0)) __PYX_ERR(42, 347, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "generate") < 0)) __PYX_ERR(42, 389, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -220569,14 +238167,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_77generate(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_ERR(42, 347, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("generate", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 389, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_boundary), __pyx_ptype_8petsc4py_5PETSc_DMPlex, 0, "boundary", 0))) __PYX_ERR(42, 389, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_84generate(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_boundary, __pyx_v_name, __pyx_v_interpolate);
 
   /* function exit code */
   goto __pyx_L0;
@@ -220587,7 +238185,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_77generate(PyObject *__pyx_v_
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_84generate(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;
@@ -220600,17 +238198,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_76generate(struct __pyx_obj_8
   __Pyx_RefNannySetupContext("generate", 0);
   __Pyx_INCREF(__pyx_v_name);
 
-  /* "PETSc/DMPlex.pyx":348
+  /* "PETSc/DMPlex.pyx":390
  * 
  *     def generate(self, DMPlex boundary, name=None, interpolate=True):
  *         cdef PetscBool interp = interpolate             # <<<<<<<<<<<<<<
  *         cdef const_char *cname = NULL
  *         if name: name = str2bytes(name, &cname)
  */
-  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_interpolate)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 348, __pyx_L1_error)
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_interpolate)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 390, __pyx_L1_error)
   __pyx_v_interp = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":349
+  /* "PETSc/DMPlex.pyx":391
  *     def generate(self, DMPlex boundary, name=None, interpolate=True):
  *         cdef PetscBool interp = interpolate
  *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
@@ -220619,22 +238217,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_76generate(struct __pyx_obj_8
  */
   __pyx_v_cname = NULL;
 
-  /* "PETSc/DMPlex.pyx":350
+  /* "PETSc/DMPlex.pyx":392
  *         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_2 = __Pyx_PyObject_IsTrue(__pyx_v_name); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(42, 350, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_name); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(42, 392, __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_t_3 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_name, (&__pyx_v_cname)); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 392, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_name, __pyx_t_3);
     __pyx_t_3 = 0;
   }
 
-  /* "PETSc/DMPlex.pyx":351
+  /* "PETSc/DMPlex.pyx":393
  *         cdef const_char *cname = NULL
  *         if name: name = str2bytes(name, &cname)
  *         cdef PetscDM   newdm = NULL             # <<<<<<<<<<<<<<
@@ -220643,16 +238241,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_76generate(struct __pyx_obj_8
  */
   __pyx_v_newdm = NULL;
 
-  /* "PETSc/DMPlex.pyx":352
+  /* "PETSc/DMPlex.pyx":394
  *         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_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)
+  __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 == ((int)-1))) __PYX_ERR(42, 394, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":353
+  /* "PETSc/DMPlex.pyx":395
  *         cdef PetscDM   newdm = NULL
  *         CHKERR( DMPlexGenerate(boundary.dm, cname, interp, &newdm) )
  *         PetscCLEAR(self.obj); self.dm = newdm             # <<<<<<<<<<<<<<
@@ -220662,7 +238260,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_76generate(struct __pyx_obj_8
   __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":354
+  /* "PETSc/DMPlex.pyx":396
  *         CHKERR( DMPlexGenerate(boundary.dm, cname, interp, &newdm) )
  *         PetscCLEAR(self.obj); self.dm = newdm
  *         return self             # <<<<<<<<<<<<<<
@@ -220674,8 +238272,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_76generate(struct __pyx_obj_8
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":347
- *         return closure
+  /* "PETSc/DMPlex.pyx":389
+ *         CHKERR( DMPlexMatSetClosure(self.dm, csec, cgsec, mat.mat, cp, cvals, im) )
  * 
  *     def generate(self, DMPlex boundary, name=None, interpolate=True):             # <<<<<<<<<<<<<<
  *         cdef PetscBool interp = interpolate
@@ -220694,7 +238292,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_76generate(struct __pyx_obj_8
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":356
+/* "PETSc/DMPlex.pyx":398
  *         return self
  * 
  *     def setTriangleOptions(self, opts):             # <<<<<<<<<<<<<<
@@ -220703,9 +238301,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_76generate(struct __pyx_obj_8
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_87setTriangleOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_86setTriangleOptions[] = "DMPlex.setTriangleOptions(self, opts)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_87setTriangleOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_opts = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -220718,6 +238316,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_79setTriangleOptions(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -220728,7 +238327,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_79setTriangleOptions(PyObject
         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_ERR(42, 356, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTriangleOptions") < 0)) __PYX_ERR(42, 398, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -220739,20 +238338,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_79setTriangleOptions(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setTriangleOptions", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 356, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setTriangleOptions", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 398, __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_78setTriangleOptions(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_opts);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_86setTriangleOptions(((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_78setTriangleOptions(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_opts) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_86setTriangleOptions(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_opts) {
   const char *__pyx_v_copts;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -220761,7 +238360,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_78setTriangleOptions(struct _
   __Pyx_RefNannySetupContext("setTriangleOptions", 0);
   __Pyx_INCREF(__pyx_v_opts);
 
-  /* "PETSc/DMPlex.pyx":357
+  /* "PETSc/DMPlex.pyx":399
  * 
  *     def setTriangleOptions(self, opts):
  *         cdef const_char *copts = NULL             # <<<<<<<<<<<<<<
@@ -220770,28 +238369,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_78setTriangleOptions(struct _
  */
   __pyx_v_copts = NULL;
 
-  /* "PETSc/DMPlex.pyx":358
+  /* "PETSc/DMPlex.pyx":400
  *     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_ERR(42, 358, __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, 400, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_opts, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":359
+  /* "PETSc/DMPlex.pyx":401
  *         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_ERR(42, 359, __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 == ((int)-1))) __PYX_ERR(42, 401, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":356
+  /* "PETSc/DMPlex.pyx":398
  *         return self
  * 
  *     def setTriangleOptions(self, opts):             # <<<<<<<<<<<<<<
@@ -220813,7 +238412,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_78setTriangleOptions(struct _
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":361
+/* "PETSc/DMPlex.pyx":403
  *         CHKERR( DMPlexTriangleSetOptions(self.dm, copts) )
  * 
  *     def setTetGenOptions(self, opts):             # <<<<<<<<<<<<<<
@@ -220822,9 +238421,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_78setTriangleOptions(struct _
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_89setTetGenOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_88setTetGenOptions[] = "DMPlex.setTetGenOptions(self, opts)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_89setTetGenOptions(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_opts = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -220837,6 +238436,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_81setTetGenOptions(PyObject *
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -220847,7 +238447,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_81setTetGenOptions(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_ERR(42, 361, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setTetGenOptions") < 0)) __PYX_ERR(42, 403, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -220858,20 +238458,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_81setTetGenOptions(PyObject *
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setTetGenOptions", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 361, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setTetGenOptions", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 403, __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_80setTetGenOptions(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_opts);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_88setTetGenOptions(((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_80setTetGenOptions(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_opts) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_88setTetGenOptions(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_opts) {
   const char *__pyx_v_copts;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -220880,7 +238480,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_80setTetGenOptions(struct __p
   __Pyx_RefNannySetupContext("setTetGenOptions", 0);
   __Pyx_INCREF(__pyx_v_opts);
 
-  /* "PETSc/DMPlex.pyx":362
+  /* "PETSc/DMPlex.pyx":404
  * 
  *     def setTetGenOptions(self, opts):
  *         cdef const_char *copts = NULL             # <<<<<<<<<<<<<<
@@ -220889,28 +238489,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_80setTetGenOptions(struct __p
  */
   __pyx_v_copts = NULL;
 
-  /* "PETSc/DMPlex.pyx":363
+  /* "PETSc/DMPlex.pyx":405
  *     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_ERR(42, 363, __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, 405, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_opts, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":364
+  /* "PETSc/DMPlex.pyx":406
  *         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_ERR(42, 364, __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 == ((int)-1))) __PYX_ERR(42, 406, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":361
+  /* "PETSc/DMPlex.pyx":403
  *         CHKERR( DMPlexTriangleSetOptions(self.dm, copts) )
  * 
  *     def setTetGenOptions(self, opts):             # <<<<<<<<<<<<<<
@@ -220932,7 +238532,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_80setTetGenOptions(struct __p
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":366
+/* "PETSc/DMPlex.pyx":408
  *         CHKERR( DMPlexTetgenSetOptions(self.dm, copts) )
  * 
  *     def createSquareBoundary(self, lower, upper, edges):             # <<<<<<<<<<<<<<
@@ -220941,9 +238541,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_80setTetGenOptions(struct __p
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_91createSquareBoundary(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_90createSquareBoundary[] = "DMPlex.createSquareBoundary(self, lower, upper, edges)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_91createSquareBoundary(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;
@@ -220958,8 +238558,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_83createSquareBoundary(PyObje
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -220968,19 +238571,21 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_83createSquareBoundary(PyObje
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_lower)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(42, 366, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("createSquareBoundary", 1, 3, 3, 1); __PYX_ERR(42, 408, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(42, 366, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("createSquareBoundary", 1, 3, 3, 2); __PYX_ERR(42, 408, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createSquareBoundary") < 0)) __PYX_ERR(42, 366, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createSquareBoundary") < 0)) __PYX_ERR(42, 408, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -220995,20 +238600,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_83createSquareBoundary(PyObje
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createSquareBoundary", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 366, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createSquareBoundary", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 408, __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_82createSquareBoundary(((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_90createSquareBoundary(((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_82createSquareBoundary(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_lower, PyObject *__pyx_v_upper, PyObject *__pyx_v_edges) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_90createSquareBoundary(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;
@@ -221024,7 +238629,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_82createSquareBoundary(struct
   __Pyx_INCREF(__pyx_v_upper);
   __Pyx_INCREF(__pyx_v_edges);
 
-  /* "PETSc/DMPlex.pyx":367
+  /* "PETSc/DMPlex.pyx":409
  * 
  *     def createSquareBoundary(self, lower, upper, edges):
  *         cdef PetscInt nlow = 0, nup = 0, nedg = 0             # <<<<<<<<<<<<<<
@@ -221035,7 +238640,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_82createSquareBoundary(struct
   __pyx_v_nup = 0;
   __pyx_v_nedg = 0;
 
-  /* "PETSc/DMPlex.pyx":368
+  /* "PETSc/DMPlex.pyx":410
  *     def createSquareBoundary(self, lower, upper, edges):
  *         cdef PetscInt nlow = 0, nup = 0, nedg = 0
  *         cdef PetscInt *iedg = NULL             # <<<<<<<<<<<<<<
@@ -221044,7 +238649,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_82createSquareBoundary(struct
  */
   __pyx_v_iedg = NULL;
 
-  /* "PETSc/DMPlex.pyx":369
+  /* "PETSc/DMPlex.pyx":411
  *         cdef PetscInt nlow = 0, nup = 0, nedg = 0
  *         cdef PetscInt *iedg = NULL
  *         cdef PetscReal *ilow = NULL, *iup = NULL             # <<<<<<<<<<<<<<
@@ -221054,52 +238659,52 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_82createSquareBoundary(struct
   __pyx_v_ilow = NULL;
   __pyx_v_iup = NULL;
 
-  /* "PETSc/DMPlex.pyx":370
+  /* "PETSc/DMPlex.pyx":412
  *         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_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_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, 412, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_lower, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":371
+  /* "PETSc/DMPlex.pyx":413
  *         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_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_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, 413, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_upper, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":372
+  /* "PETSc/DMPlex.pyx":414
  *         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_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_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, 414, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_edges, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":373
+  /* "PETSc/DMPlex.pyx":415
  *         upper = iarray_r(upper, &nup,  &iup)
  *         edges = iarray_i(edges, &nedg, &iedg)
  *         CHKERR( DMPlexCreateSquareBoundary(self.dm, ilow, iup, iedg) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(42, 415, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":374
+  /* "PETSc/DMPlex.pyx":416
  *         edges = iarray_i(edges, &nedg, &iedg)
  *         CHKERR( DMPlexCreateSquareBoundary(self.dm, ilow, iup, iedg) )
  *         return self             # <<<<<<<<<<<<<<
@@ -221111,7 +238716,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_82createSquareBoundary(struct
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":366
+  /* "PETSc/DMPlex.pyx":408
  *         CHKERR( DMPlexTetgenSetOptions(self.dm, copts) )
  * 
  *     def createSquareBoundary(self, lower, upper, edges):             # <<<<<<<<<<<<<<
@@ -221133,7 +238738,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_82createSquareBoundary(struct
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":376
+/* "PETSc/DMPlex.pyx":418
  *         return self
  * 
  *     def createCubeBoundary(self, lower, upper, faces):             # <<<<<<<<<<<<<<
@@ -221142,9 +238747,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_82createSquareBoundary(struct
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_93createCubeBoundary(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_92createCubeBoundary[] = "DMPlex.createCubeBoundary(self, lower, upper, faces)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_93createCubeBoundary(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;
@@ -221159,8 +238764,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_85createCubeBoundary(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -221169,19 +238777,21 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_85createCubeBoundary(PyObject
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_lower)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(42, 376, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("createCubeBoundary", 1, 3, 3, 1); __PYX_ERR(42, 418, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(42, 376, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("createCubeBoundary", 1, 3, 3, 2); __PYX_ERR(42, 418, __pyx_L3_error)
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createCubeBoundary") < 0)) __PYX_ERR(42, 376, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createCubeBoundary") < 0)) __PYX_ERR(42, 418, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 3) {
       goto __pyx_L5_argtuple_error;
@@ -221196,20 +238806,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_85createCubeBoundary(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createCubeBoundary", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 376, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createCubeBoundary", 1, 3, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 418, __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_84createCubeBoundary(((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_92createCubeBoundary(((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_84createCubeBoundary(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_lower, PyObject *__pyx_v_upper, PyObject *__pyx_v_faces) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_92createCubeBoundary(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;
@@ -221225,7 +238835,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_84createCubeBoundary(struct _
   __Pyx_INCREF(__pyx_v_upper);
   __Pyx_INCREF(__pyx_v_faces);
 
-  /* "PETSc/DMPlex.pyx":377
+  /* "PETSc/DMPlex.pyx":419
  * 
  *     def createCubeBoundary(self, lower, upper, faces):
  *         cdef PetscInt nlow = 0, nup = 0, nfac = 0             # <<<<<<<<<<<<<<
@@ -221236,7 +238846,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_84createCubeBoundary(struct _
   __pyx_v_nup = 0;
   __pyx_v_nfac = 0;
 
-  /* "PETSc/DMPlex.pyx":378
+  /* "PETSc/DMPlex.pyx":420
  *     def createCubeBoundary(self, lower, upper, faces):
  *         cdef PetscInt nlow = 0, nup = 0, nfac = 0
  *         cdef PetscInt *ifac = NULL             # <<<<<<<<<<<<<<
@@ -221245,7 +238855,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_84createCubeBoundary(struct _
  */
   __pyx_v_ifac = NULL;
 
-  /* "PETSc/DMPlex.pyx":379
+  /* "PETSc/DMPlex.pyx":421
  *         cdef PetscInt nlow = 0, nup = 0, nfac = 0
  *         cdef PetscInt *ifac = NULL
  *         cdef PetscReal *ilow = NULL, *iup = NULL             # <<<<<<<<<<<<<<
@@ -221255,52 +238865,52 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_84createCubeBoundary(struct _
   __pyx_v_ilow = NULL;
   __pyx_v_iup = NULL;
 
-  /* "PETSc/DMPlex.pyx":380
+  /* "PETSc/DMPlex.pyx":422
  *         cdef PetscInt *ifac = NULL
  *         cdef PetscReal *ilow = NULL, *iup = NULL
  *         lower = iarray_r(lower, &nlow, &ilow)             # <<<<<<<<<<<<<<
  *         upper = iarray_r(upper, &nup,  &iup)
  *         faces = iarray_i(faces, &nfac, &ifac)
  */
-  __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_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, 422, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_lower, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":381
+  /* "PETSc/DMPlex.pyx":423
  *         cdef PetscReal *ilow = NULL, *iup = NULL
  *         lower = iarray_r(lower, &nlow, &ilow)
  *         upper = iarray_r(upper, &nup,  &iup)             # <<<<<<<<<<<<<<
  *         faces = iarray_i(faces, &nfac, &ifac)
  *         CHKERR( DMPlexCreateCubeBoundary(self.dm, ilow, iup, ifac) )
  */
-  __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_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, 423, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_upper, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":382
+  /* "PETSc/DMPlex.pyx":424
  *         lower = iarray_r(lower, &nlow, &ilow)
  *         upper = iarray_r(upper, &nup,  &iup)
  *         faces = iarray_i(faces, &nfac, &ifac)             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexCreateCubeBoundary(self.dm, ilow, iup, ifac) )
  *         return self
  */
-  __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_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, 424, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_faces, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":383
+  /* "PETSc/DMPlex.pyx":425
  *         upper = iarray_r(upper, &nup,  &iup)
  *         faces = iarray_i(faces, &nfac, &ifac)
  *         CHKERR( DMPlexCreateCubeBoundary(self.dm, ilow, iup, ifac) )             # <<<<<<<<<<<<<<
  *         return self
  * 
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(42, 425, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":384
+  /* "PETSc/DMPlex.pyx":426
  *         faces = iarray_i(faces, &nfac, &ifac)
  *         CHKERR( DMPlexCreateCubeBoundary(self.dm, ilow, iup, ifac) )
  *         return self             # <<<<<<<<<<<<<<
@@ -221312,7 +238922,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_84createCubeBoundary(struct _
   __pyx_r = ((PyObject *)__pyx_v_self);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":376
+  /* "PETSc/DMPlex.pyx":418
  *         return self
  * 
  *     def createCubeBoundary(self, lower, upper, faces):             # <<<<<<<<<<<<<<
@@ -221334,7 +238944,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_84createCubeBoundary(struct _
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":386
+/* "PETSc/DMPlex.pyx":428
  *         return self
  * 
  *     def markBoundaryFaces(self, label):             # <<<<<<<<<<<<<<
@@ -221343,9 +238953,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_84createCubeBoundary(struct _
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_95markBoundaryFaces(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_94markBoundaryFaces[] = "DMPlex.markBoundaryFaces(self, label)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_95markBoundaryFaces(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_label = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -221358,6 +238968,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_87markBoundaryFaces(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -221368,7 +238979,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_87markBoundaryFaces(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_ERR(42, 386, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "markBoundaryFaces") < 0)) __PYX_ERR(42, 428, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -221379,20 +238990,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_87markBoundaryFaces(PyObject
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("markBoundaryFaces", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 386, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("markBoundaryFaces", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 428, __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_86markBoundaryFaces(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_label);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_94markBoundaryFaces(((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_86markBoundaryFaces(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_label) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_94markBoundaryFaces(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;
@@ -221407,17 +239018,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_86markBoundaryFaces(struct __
   __Pyx_RefNannySetupContext("markBoundaryFaces", 0);
   __Pyx_INCREF(__pyx_v_label);
 
-  /* "PETSc/DMPlex.pyx":387
+  /* "PETSc/DMPlex.pyx":429
  * 
  *     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_ERR(42, 387, __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, 429, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -221427,36 +239038,54 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_86markBoundaryFaces(struct __
     }
   }
   if (!__pyx_t_3) {
-    __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_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_label); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 429, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
   } else {
-    __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_ERR(42, 387, __pyx_L1_error)
-    __Pyx_GOTREF(__pyx_t_1);
-    __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+    #if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_label};
+      __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 429, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    #if CYTHON_FAST_PYCCALL
+    if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+      PyObject *__pyx_temp[2] = {__pyx_t_3, __pyx_v_label};
+      __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 429, __pyx_L1_error)
+      __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+      __Pyx_GOTREF(__pyx_t_1);
+    } else
+    #endif
+    {
+      __pyx_t_4 = PyTuple_New(1+1); if (unlikely(!__pyx_t_4)) __PYX_ERR(42, 429, __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_ERR(42, 429, __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_ERR(42, 387, __pyx_L1_error)
+  __pyx_t_5 = __Pyx_PyObject_IsTrue(__pyx_t_1); if (unlikely(__pyx_t_5 < 0)) __PYX_ERR(42, 429, __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":388
+    /* "PETSc/DMPlex.pyx":430
  *     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_ERR(42, 388, __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, 430, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __pyx_t_4 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+    if (CYTHON_UNPACK_METHODS && likely(PyMethod_Check(__pyx_t_2))) {
       __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_2);
       if (likely(__pyx_t_4)) {
         PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_2);
@@ -221466,23 +239095,41 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_86markBoundaryFaces(struct __
       }
     }
     if (!__pyx_t_4) {
-      __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_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_v_label); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 430, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_1);
     } else {
-      __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_ERR(42, 388, __pyx_L1_error)
-      __Pyx_GOTREF(__pyx_t_1);
-      __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+      #if CYTHON_FAST_PYCALL
+      if (PyFunction_Check(__pyx_t_2)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_label};
+        __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 430, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __Pyx_GOTREF(__pyx_t_1);
+      } else
+      #endif
+      #if CYTHON_FAST_PYCCALL
+      if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+        PyObject *__pyx_temp[2] = {__pyx_t_4, __pyx_v_label};
+        __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-1, 1+1); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 430, __pyx_L1_error)
+        __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+        __Pyx_GOTREF(__pyx_t_1);
+      } else
+      #endif
+      {
+        __pyx_t_3 = PyTuple_New(1+1); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 430, __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_ERR(42, 430, __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;
 
-    /* "PETSc/DMPlex.pyx":387
+    /* "PETSc/DMPlex.pyx":429
  * 
  *     def markBoundaryFaces(self, label):
  *         if not self.hasLabel(label):             # <<<<<<<<<<<<<<
@@ -221491,7 +239138,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_86markBoundaryFaces(struct __
  */
   }
 
-  /* "PETSc/DMPlex.pyx":389
+  /* "PETSc/DMPlex.pyx":431
  *         if not self.hasLabel(label):
  *             self.createLabel(label)
  *         cdef const_char *cval = NULL             # <<<<<<<<<<<<<<
@@ -221500,19 +239147,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_86markBoundaryFaces(struct __
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/DMPlex.pyx":390
+  /* "PETSc/DMPlex.pyx":432
  *             self.createLabel(label)
  *         cdef const_char *cval = NULL
  *         label = str2bytes(label, &cval)             # <<<<<<<<<<<<<<
  *         cdef PetscDMLabel clbl = NULL
  *         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_ERR(42, 390, __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, 432, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_label, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":391
+  /* "PETSc/DMPlex.pyx":433
  *         cdef const_char *cval = NULL
  *         label = str2bytes(label, &cval)
  *         cdef PetscDMLabel clbl = NULL             # <<<<<<<<<<<<<<
@@ -221521,25 +239168,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_86markBoundaryFaces(struct __
  */
   __pyx_v_clbl = NULL;
 
-  /* "PETSc/DMPlex.pyx":392
+  /* "PETSc/DMPlex.pyx":434
  *         label = str2bytes(label, &cval)
  *         cdef PetscDMLabel clbl = NULL
  *         CHKERR( DMGetLabel(self.dm, cval, &clbl) )             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexMarkBoundaryFaces(self.dm, clbl) )
  * 
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(42, 434, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":393
+  /* "PETSc/DMPlex.pyx":435
  *         cdef PetscDMLabel clbl = NULL
  *         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_ERR(42, 393, __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 == ((int)-1))) __PYX_ERR(42, 435, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":386
+  /* "PETSc/DMPlex.pyx":428
  *         return self
  * 
  *     def markBoundaryFaces(self, label):             # <<<<<<<<<<<<<<
@@ -221564,7 +239211,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_86markBoundaryFaces(struct __
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":395
+/* "PETSc/DMPlex.pyx":437
  *         CHKERR( DMPlexMarkBoundaryFaces(self.dm, clbl) )
  * 
  *     def setAdjacencyUseCone(self, useCone=True):             # <<<<<<<<<<<<<<
@@ -221573,9 +239220,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_86markBoundaryFaces(struct __
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_97setAdjacencyUseCone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_96setAdjacencyUseCone[] = "DMPlex.setAdjacencyUseCone(self, useCone=True)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_97setAdjacencyUseCone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_useCone = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -221589,6 +239236,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_89setAdjacencyUseCone(PyObjec
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -221601,11 +239249,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_89setAdjacencyUseCone(PyObjec
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setAdjacencyUseCone") < 0)) __PYX_ERR(42, 395, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setAdjacencyUseCone") < 0)) __PYX_ERR(42, 437, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -221614,20 +239263,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_89setAdjacencyUseCone(PyObjec
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setAdjacencyUseCone", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 395, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setAdjacencyUseCone", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 437, __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_88setAdjacencyUseCone(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_useCone);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_96setAdjacencyUseCone(((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_88setAdjacencyUseCone(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_useCone) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_96setAdjacencyUseCone(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_useCone) {
   PetscBool __pyx_v_flag;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -221635,26 +239284,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_88setAdjacencyUseCone(struct
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setAdjacencyUseCone", 0);
 
-  /* "PETSc/DMPlex.pyx":396
+  /* "PETSc/DMPlex.pyx":438
  * 
  *     def setAdjacencyUseCone(self, useCone=True):
  *         cdef PetscBool flag = useCone             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexSetAdjacencyUseCone(self.dm, flag) )
  * 
  */
-  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_useCone)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 396, __pyx_L1_error)
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_useCone)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 438, __pyx_L1_error)
   __pyx_v_flag = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":397
+  /* "PETSc/DMPlex.pyx":439
  *     def setAdjacencyUseCone(self, useCone=True):
  *         cdef PetscBool flag = useCone
  *         CHKERR( DMPlexSetAdjacencyUseCone(self.dm, flag) )             # <<<<<<<<<<<<<<
  * 
- *     def setAdjacencyUseClosure(self, useClosure=True):
+ *     def getAdjacencyUseCone(self):
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSetAdjacencyUseCone(__pyx_v_self->__pyx_base.dm, __pyx_v_flag)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(42, 439, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":395
+  /* "PETSc/DMPlex.pyx":437
  *         CHKERR( DMPlexMarkBoundaryFaces(self.dm, clbl) )
  * 
  *     def setAdjacencyUseCone(self, useCone=True):             # <<<<<<<<<<<<<<
@@ -221674,18 +239323,102 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_88setAdjacencyUseCone(struct
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":399
+/* "PETSc/DMPlex.pyx":441
+ *         CHKERR( DMPlexSetAdjacencyUseCone(self.dm, flag) )
+ * 
+ *     def getAdjacencyUseCone(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( DMPlexGetAdjacencyUseCone(self.dm, &flag) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_99getAdjacencyUseCone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_98getAdjacencyUseCone[] = "DMPlex.getAdjacencyUseCone(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_99getAdjacencyUseCone(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getAdjacencyUseCone (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getAdjacencyUseCone", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getAdjacencyUseCone", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_98getAdjacencyUseCone(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_98getAdjacencyUseCone(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;
+  __Pyx_RefNannySetupContext("getAdjacencyUseCone", 0);
+
+  /* "PETSc/DMPlex.pyx":442
+ * 
+ *     def getAdjacencyUseCone(self):
+ *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexGetAdjacencyUseCone(self.dm, &flag) )
+ *         return toBool(flag)
+ */
+  __pyx_v_flag = PETSC_FALSE;
+
+  /* "PETSc/DMPlex.pyx":443
+ *     def getAdjacencyUseCone(self):
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( DMPlexGetAdjacencyUseCone(self.dm, &flag) )             # <<<<<<<<<<<<<<
+ *         return toBool(flag)
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetAdjacencyUseCone(__pyx_v_self->__pyx_base.dm, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(42, 443, __pyx_L1_error)
+
+  /* "PETSc/DMPlex.pyx":444
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( DMPlexGetAdjacencyUseCone(self.dm, &flag) )
+ *         return toBool(flag)             # <<<<<<<<<<<<<<
+ * 
+ *     def setAdjacencyUseClosure(self, useClosure=True):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 444, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/DMPlex.pyx":441
  *         CHKERR( DMPlexSetAdjacencyUseCone(self.dm, flag) )
  * 
+ *     def getAdjacencyUseCone(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( DMPlexGetAdjacencyUseCone(self.dm, &flag) )
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getAdjacencyUseCone", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DMPlex.pyx":446
+ *         return toBool(flag)
+ * 
  *     def setAdjacencyUseClosure(self, useClosure=True):             # <<<<<<<<<<<<<<
  *         cdef PetscBool flag = useClosure
  *         CHKERR( DMPlexSetAdjacencyUseClosure(self.dm, flag) )
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_101setAdjacencyUseClosure(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_100setAdjacencyUseClosure[] = "DMPlex.setAdjacencyUseClosure(self, useClosure=True)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_101setAdjacencyUseClosure(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_useClosure = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -221699,6 +239432,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_91setAdjacencyUseClosure(PyOb
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -221711,11 +239445,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_91setAdjacencyUseClosure(PyOb
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setAdjacencyUseClosure") < 0)) __PYX_ERR(42, 399, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setAdjacencyUseClosure") < 0)) __PYX_ERR(42, 446, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -221724,20 +239459,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_91setAdjacencyUseClosure(PyOb
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setAdjacencyUseClosure", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 399, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setAdjacencyUseClosure", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 446, __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_90setAdjacencyUseClosure(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_useClosure);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_100setAdjacencyUseClosure(((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_90setAdjacencyUseClosure(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_useClosure) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_100setAdjacencyUseClosure(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_useClosure) {
   PetscBool __pyx_v_flag;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -221745,27 +239480,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_90setAdjacencyUseClosure(stru
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setAdjacencyUseClosure", 0);
 
-  /* "PETSc/DMPlex.pyx":400
+  /* "PETSc/DMPlex.pyx":447
  * 
  *     def setAdjacencyUseClosure(self, useClosure=True):
  *         cdef PetscBool flag = useClosure             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexSetAdjacencyUseClosure(self.dm, flag) )
  * 
  */
-  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_useClosure)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 400, __pyx_L1_error)
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_useClosure)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 447, __pyx_L1_error)
   __pyx_v_flag = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":401
+  /* "PETSc/DMPlex.pyx":448
  *     def setAdjacencyUseClosure(self, useClosure=True):
  *         cdef PetscBool flag = useClosure
  *         CHKERR( DMPlexSetAdjacencyUseClosure(self.dm, flag) )             # <<<<<<<<<<<<<<
  * 
- *     def getPartitioner(self):
+ *     def getAdjacencyUseClosure(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_ERR(42, 401, __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 == ((int)-1))) __PYX_ERR(42, 448, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":399
- *         CHKERR( DMPlexSetAdjacencyUseCone(self.dm, flag) )
+  /* "PETSc/DMPlex.pyx":446
+ *         return toBool(flag)
  * 
  *     def setAdjacencyUseClosure(self, useClosure=True):             # <<<<<<<<<<<<<<
  *         cdef PetscBool flag = useClosure
@@ -221784,32 +239519,641 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_90setAdjacencyUseClosure(stru
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":403
+/* "PETSc/DMPlex.pyx":450
+ *         CHKERR( DMPlexSetAdjacencyUseClosure(self.dm, flag) )
+ * 
+ *     def getAdjacencyUseClosure(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( DMPlexGetAdjacencyUseClosure(self.dm, &flag) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_103getAdjacencyUseClosure(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_102getAdjacencyUseClosure[] = "DMPlex.getAdjacencyUseClosure(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_103getAdjacencyUseClosure(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getAdjacencyUseClosure (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getAdjacencyUseClosure", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getAdjacencyUseClosure", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_102getAdjacencyUseClosure(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102getAdjacencyUseClosure(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;
+  __Pyx_RefNannySetupContext("getAdjacencyUseClosure", 0);
+
+  /* "PETSc/DMPlex.pyx":451
+ * 
+ *     def getAdjacencyUseClosure(self):
+ *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexGetAdjacencyUseClosure(self.dm, &flag) )
+ *         return toBool(flag)
+ */
+  __pyx_v_flag = PETSC_FALSE;
+
+  /* "PETSc/DMPlex.pyx":452
+ *     def getAdjacencyUseClosure(self):
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( DMPlexGetAdjacencyUseClosure(self.dm, &flag) )             # <<<<<<<<<<<<<<
+ *         return toBool(flag)
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetAdjacencyUseClosure(__pyx_v_self->__pyx_base.dm, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(42, 452, __pyx_L1_error)
+
+  /* "PETSc/DMPlex.pyx":453
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( DMPlexGetAdjacencyUseClosure(self.dm, &flag) )
+ *         return toBool(flag)             # <<<<<<<<<<<<<<
+ * 
+ *     def setAdjacencyUseAnchors(self, useAnchors=True):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 453, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/DMPlex.pyx":450
  *         CHKERR( DMPlexSetAdjacencyUseClosure(self.dm, flag) )
  * 
+ *     def getAdjacencyUseClosure(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( DMPlexGetAdjacencyUseClosure(self.dm, &flag) )
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getAdjacencyUseClosure", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DMPlex.pyx":455
+ *         return toBool(flag)
+ * 
+ *     def setAdjacencyUseAnchors(self, useAnchors=True):             # <<<<<<<<<<<<<<
+ *         cdef PetscBool flag = useAnchors
+ *         CHKERR( DMPlexSetAdjacencyUseAnchors(self.dm, flag) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_105setAdjacencyUseAnchors(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_104setAdjacencyUseAnchors[] = "DMPlex.setAdjacencyUseAnchors(self, useAnchors=True)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_105setAdjacencyUseAnchors(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_useAnchors = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setAdjacencyUseAnchors (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_useAnchors,0};
+    PyObject* values[1] = {0};
+    values[0] = ((PyObject *)Py_True);
+    if (unlikely(__pyx_kwds)) {
+      Py_ssize_t kw_args;
+      const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
+      switch (pos_args) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        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_useAnchors);
+          if (value) { values[0] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setAdjacencyUseAnchors") < 0)) __PYX_ERR(42, 455, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_useAnchors = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setAdjacencyUseAnchors", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 455, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setAdjacencyUseAnchors", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_104setAdjacencyUseAnchors(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_useAnchors);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_104setAdjacencyUseAnchors(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_useAnchors) {
+  PetscBool __pyx_v_flag;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscBool __pyx_t_1;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("setAdjacencyUseAnchors", 0);
+
+  /* "PETSc/DMPlex.pyx":456
+ * 
+ *     def setAdjacencyUseAnchors(self, useAnchors=True):
+ *         cdef PetscBool flag = useAnchors             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexSetAdjacencyUseAnchors(self.dm, flag) )
+ * 
+ */
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_useAnchors)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 456, __pyx_L1_error)
+  __pyx_v_flag = __pyx_t_1;
+
+  /* "PETSc/DMPlex.pyx":457
+ *     def setAdjacencyUseAnchors(self, useAnchors=True):
+ *         cdef PetscBool flag = useAnchors
+ *         CHKERR( DMPlexSetAdjacencyUseAnchors(self.dm, flag) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getAdjacencyUseAnchors(self):
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSetAdjacencyUseAnchors(__pyx_v_self->__pyx_base.dm, __pyx_v_flag)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(42, 457, __pyx_L1_error)
+
+  /* "PETSc/DMPlex.pyx":455
+ *         return toBool(flag)
+ * 
+ *     def setAdjacencyUseAnchors(self, useAnchors=True):             # <<<<<<<<<<<<<<
+ *         cdef PetscBool flag = useAnchors
+ *         CHKERR( DMPlexSetAdjacencyUseAnchors(self.dm, flag) )
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setAdjacencyUseAnchors", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DMPlex.pyx":459
+ *         CHKERR( DMPlexSetAdjacencyUseAnchors(self.dm, flag) )
+ * 
+ *     def getAdjacencyUseAnchors(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( DMPlexGetAdjacencyUseAnchors(self.dm, &flag) )
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_107getAdjacencyUseAnchors(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_106getAdjacencyUseAnchors[] = "DMPlex.getAdjacencyUseAnchors(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_107getAdjacencyUseAnchors(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getAdjacencyUseAnchors (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("getAdjacencyUseAnchors", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "getAdjacencyUseAnchors", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_106getAdjacencyUseAnchors(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_106getAdjacencyUseAnchors(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;
+  __Pyx_RefNannySetupContext("getAdjacencyUseAnchors", 0);
+
+  /* "PETSc/DMPlex.pyx":460
+ * 
+ *     def getAdjacencyUseAnchors(self):
+ *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexGetAdjacencyUseAnchors(self.dm, &flag) )
+ *         return toBool(flag)
+ */
+  __pyx_v_flag = PETSC_FALSE;
+
+  /* "PETSc/DMPlex.pyx":461
+ *     def getAdjacencyUseAnchors(self):
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( DMPlexGetAdjacencyUseAnchors(self.dm, &flag) )             # <<<<<<<<<<<<<<
+ *         return toBool(flag)
+ * 
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetAdjacencyUseAnchors(__pyx_v_self->__pyx_base.dm, (&__pyx_v_flag))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(42, 461, __pyx_L1_error)
+
+  /* "PETSc/DMPlex.pyx":462
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( DMPlexGetAdjacencyUseAnchors(self.dm, &flag) )
+ *         return toBool(flag)             # <<<<<<<<<<<<<<
+ * 
+ *     def getAdjacency(self, p):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 462, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_r = __pyx_t_2;
+  __pyx_t_2 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/DMPlex.pyx":459
+ *         CHKERR( DMPlexSetAdjacencyUseAnchors(self.dm, flag) )
+ * 
+ *     def getAdjacencyUseAnchors(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscBool flag = PETSC_FALSE
+ *         CHKERR( DMPlexGetAdjacencyUseAnchors(self.dm, &flag) )
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_2);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getAdjacencyUseAnchors", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DMPlex.pyx":464
+ *         return toBool(flag)
+ * 
+ *     def getAdjacency(self, p):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt nadj = PETSC_DETERMINE
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_109getAdjacency(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_108getAdjacency[] = "DMPlex.getAdjacency(self, p)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_109getAdjacency(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_p = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getAdjacency (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);
+        CYTHON_FALLTHROUGH;
+        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, "getAdjacency") < 0)) __PYX_ERR(42, 464, __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("getAdjacency", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 464, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getAdjacency", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_108getAdjacency(((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_108getAdjacency(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_p) {
+  PetscInt __pyx_v_cp;
+  PetscInt __pyx_v_nadj;
+  PetscInt *__pyx_v_iadj;
+  PyArrayObject *__pyx_v_adjacency = NULL;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  int __pyx_t_4;
+  char const *__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;
+  PyObject *__pyx_t_11 = NULL;
+  int __pyx_t_12;
+  __Pyx_RefNannySetupContext("getAdjacency", 0);
+
+  /* "PETSc/DMPlex.pyx":465
+ * 
+ *     def getAdjacency(self, p):
+ *         cdef PetscInt cp = asInt(p)             # <<<<<<<<<<<<<<
+ *         cdef PetscInt nadj = PETSC_DETERMINE
+ *         cdef PetscInt *iadj = NULL
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_p); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 465, __pyx_L1_error)
+  __pyx_v_cp = __pyx_t_1;
+
+  /* "PETSc/DMPlex.pyx":466
+ *     def getAdjacency(self, p):
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt nadj = PETSC_DETERMINE             # <<<<<<<<<<<<<<
+ *         cdef PetscInt *iadj = NULL
+ *         CHKERR( DMPlexGetAdjacency(self.dm, cp, &nadj, &iadj) )
+ */
+  __pyx_v_nadj = PETSC_DETERMINE;
+
+  /* "PETSc/DMPlex.pyx":467
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt nadj = PETSC_DETERMINE
+ *         cdef PetscInt *iadj = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexGetAdjacency(self.dm, cp, &nadj, &iadj) )
+ *         try:
+ */
+  __pyx_v_iadj = NULL;
+
+  /* "PETSc/DMPlex.pyx":468
+ *         cdef PetscInt nadj = PETSC_DETERMINE
+ *         cdef PetscInt *iadj = NULL
+ *         CHKERR( DMPlexGetAdjacency(self.dm, cp, &nadj, &iadj) )             # <<<<<<<<<<<<<<
+ *         try:
+ *             adjacency = array_i(nadj, iadj)
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetAdjacency(__pyx_v_self->__pyx_base.dm, __pyx_v_cp, (&__pyx_v_nadj), (&__pyx_v_iadj))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(42, 468, __pyx_L1_error)
+
+  /* "PETSc/DMPlex.pyx":469
+ *         cdef PetscInt *iadj = NULL
+ *         CHKERR( DMPlexGetAdjacency(self.dm, cp, &nadj, &iadj) )
+ *         try:             # <<<<<<<<<<<<<<
+ *             adjacency = array_i(nadj, iadj)
+ *         finally:
+ */
+  /*try:*/ {
+
+    /* "PETSc/DMPlex.pyx":470
+ *         CHKERR( DMPlexGetAdjacency(self.dm, cp, &nadj, &iadj) )
+ *         try:
+ *             adjacency = array_i(nadj, iadj)             # <<<<<<<<<<<<<<
+ *         finally:
+ *             CHKERR( PetscFree(iadj) )
+ */
+    __pyx_t_3 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_array_i(__pyx_v_nadj, __pyx_v_iadj)); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 470, __pyx_L4_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __pyx_v_adjacency = ((PyArrayObject *)__pyx_t_3);
+    __pyx_t_3 = 0;
+  }
+
+  /* "PETSc/DMPlex.pyx":472
+ *             adjacency = array_i(nadj, iadj)
+ *         finally:
+ *             CHKERR( PetscFree(iadj) )             # <<<<<<<<<<<<<<
+ *         return adjacency
+ * 
+ */
+  /*finally:*/ {
+    /*normal exit:*/{
+      __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscFree(__pyx_v_iadj)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(42, 472, __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);
+      __Pyx_XGOTREF(__pyx_t_6);
+      __Pyx_XGOTREF(__pyx_t_7);
+      __Pyx_XGOTREF(__pyx_t_8);
+      __Pyx_XGOTREF(__pyx_t_9);
+      __Pyx_XGOTREF(__pyx_t_10);
+      __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(PetscFree(__pyx_v_iadj)); if (unlikely(__pyx_t_12 == ((int)-1))) __PYX_ERR(42, 472, __pyx_L7_error)
+      }
+      if (PY_MAJOR_VERSION >= 3) {
+        __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_XGIVEREF(__pyx_t_6);
+      __Pyx_XGIVEREF(__pyx_t_7);
+      __Pyx_XGIVEREF(__pyx_t_8);
+      __Pyx_ErrRestore(__pyx_t_6, __pyx_t_7, __pyx_t_8);
+      __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_lineno = __pyx_t_2; __pyx_clineno = __pyx_t_4; __pyx_filename = __pyx_t_5;
+      goto __pyx_L1_error;
+      __pyx_L7_error:;
+      if (PY_MAJOR_VERSION >= 3) {
+        __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_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+      __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+      __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+      __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0;
+      goto __pyx_L1_error;
+    }
+    __pyx_L5:;
+  }
+
+  /* "PETSc/DMPlex.pyx":473
+ *         finally:
+ *             CHKERR( PetscFree(iadj) )
+ *         return adjacency             # <<<<<<<<<<<<<<
+ * 
+ *     def setPartitioner(self, Partitioner part):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __Pyx_INCREF(((PyObject *)__pyx_v_adjacency));
+  __pyx_r = ((PyObject *)__pyx_v_adjacency);
+  goto __pyx_L0;
+
+  /* "PETSc/DMPlex.pyx":464
+ *         return toBool(flag)
+ * 
+ *     def getAdjacency(self, p):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cp = asInt(p)
+ *         cdef PetscInt nadj = PETSC_DETERMINE
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_3);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getAdjacency", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_adjacency);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DMPlex.pyx":475
+ *         return adjacency
+ * 
+ *     def setPartitioner(self, Partitioner part):             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexSetPartitioner(self.dm, part.part) )
+ * 
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_111setPartitioner(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_110setPartitioner[] = "DMPlex.setPartitioner(self, Partitioner part)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_111setPartitioner(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  struct PyPetscPartitionerObject *__pyx_v_part = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setPartitioner (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_part,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);
+        CYTHON_FALLTHROUGH;
+        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_part)) != 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, "setPartitioner") < 0)) __PYX_ERR(42, 475, __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_part = ((struct PyPetscPartitionerObject *)values[0]);
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setPartitioner", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 475, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setPartitioner", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_part), __pyx_ptype_8petsc4py_5PETSc_Partitioner, 0, "part", 0))) __PYX_ERR(42, 475, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_110setPartitioner(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_part);
+
+  /* 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_110setPartitioner(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, struct PyPetscPartitionerObject *__pyx_v_part) {
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("setPartitioner", 0);
+
+  /* "PETSc/DMPlex.pyx":476
+ * 
+ *     def setPartitioner(self, Partitioner part):
+ *         CHKERR( DMPlexSetPartitioner(self.dm, part.part) )             # <<<<<<<<<<<<<<
+ * 
+ *     def getPartitioner(self):
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexSetPartitioner(__pyx_v_self->__pyx_base.dm, __pyx_v_part->part)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(42, 476, __pyx_L1_error)
+
+  /* "PETSc/DMPlex.pyx":475
+ *         return adjacency
+ * 
+ *     def setPartitioner(self, Partitioner part):             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexSetPartitioner(self.dm, part.part) )
+ * 
+ */
+
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.setPartitioner", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DMPlex.pyx":478
+ *         CHKERR( DMPlexSetPartitioner(self.dm, part.part) )
+ * 
  *     def getPartitioner(self):             # <<<<<<<<<<<<<<
  *         cdef Partitioner part = Partitioner()
  *         CHKERR( DMPlexGetPartitioner(self.dm, &part.part) )
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_113getPartitioner(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_112getPartitioner[] = "DMPlex.getPartitioner(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_113getPartitioner(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_92getPartitioner(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_112getPartitioner(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_92getPartitioner(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_112getPartitioner(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
   struct PyPetscPartitionerObject *__pyx_v_part = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -221817,28 +240161,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_92getPartitioner(struct __pyx
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("getPartitioner", 0);
 
-  /* "PETSc/DMPlex.pyx":404
+  /* "PETSc/DMPlex.pyx":479
  * 
  *     def getPartitioner(self):
  *         cdef Partitioner part = Partitioner()             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexGetPartitioner(self.dm, &part.part) )
  *         PetscINCREF(part.obj)
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Partitioner), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 479, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_part = ((struct PyPetscPartitionerObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":405
+  /* "PETSc/DMPlex.pyx":480
  *     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_ERR(42, 405, __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 == ((int)-1))) __PYX_ERR(42, 480, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":406
+  /* "PETSc/DMPlex.pyx":481
  *         cdef Partitioner part = Partitioner()
  *         CHKERR( DMPlexGetPartitioner(self.dm, &part.part) )
  *         PetscINCREF(part.obj)             # <<<<<<<<<<<<<<
@@ -221847,7 +240191,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_92getPartitioner(struct __pyx
  */
   __pyx_f_8petsc4py_5PETSc_PetscINCREF(__pyx_v_part->__pyx_base.obj);
 
-  /* "PETSc/DMPlex.pyx":407
+  /* "PETSc/DMPlex.pyx":482
  *         CHKERR( DMPlexGetPartitioner(self.dm, &part.part) )
  *         PetscINCREF(part.obj)
  *         return part             # <<<<<<<<<<<<<<
@@ -221859,8 +240203,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_92getPartitioner(struct __pyx
   __pyx_r = ((PyObject *)__pyx_v_part);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":403
- *         CHKERR( DMPlexSetAdjacencyUseClosure(self.dm, flag) )
+  /* "PETSc/DMPlex.pyx":478
+ *         CHKERR( DMPlexSetPartitioner(self.dm, part.part) )
  * 
  *     def getPartitioner(self):             # <<<<<<<<<<<<<<
  *         cdef Partitioner part = Partitioner()
@@ -221879,7 +240223,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_92getPartitioner(struct __pyx
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":409
+/* "PETSc/DMPlex.pyx":484
  *         return part
  * 
  *     def distribute(self, overlap=0):             # <<<<<<<<<<<<<<
@@ -221888,9 +240232,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_92getPartitioner(struct __pyx
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_115distribute(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_114distribute[] = "DMPlex.distribute(self, overlap=0)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_115distribute(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_overlap = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -221904,6 +240248,187 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_95distribute(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        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_overlap);
+          if (value) { values[0] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "distribute") < 0)) __PYX_ERR(42, 484, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_overlap = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("distribute", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 484, __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_114distribute(((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_114distribute(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;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  PyObject *__pyx_t_2 = NULL;
+  int __pyx_t_3;
+  int __pyx_t_4;
+  __Pyx_RefNannySetupContext("distribute", 0);
+
+  /* "PETSc/DMPlex.pyx":485
+ * 
+ *     def distribute(self, overlap=0):
+ *         cdef PetscDM dmParallel = NULL             # <<<<<<<<<<<<<<
+ *         cdef PetscInt coverlap = asInt(overlap)
+ *         cdef SF sf = SF()
+ */
+  __pyx_v_dmParallel = NULL;
+
+  /* "PETSc/DMPlex.pyx":486
+ *     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 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 486, __pyx_L1_error)
+  __pyx_v_coverlap = __pyx_t_1;
+
+  /* "PETSc/DMPlex.pyx":487
+ *         cdef PetscDM dmParallel = NULL
+ *         cdef PetscInt coverlap = asInt(overlap)
+ *         cdef SF sf = SF()             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexDistribute(self.dm, coverlap, &sf.sf, &dmParallel) )
+ *         if dmParallel != NULL:
+ */
+  __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SF), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 487, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_2);
+  __pyx_v_sf = ((struct PyPetscSFObject *)__pyx_t_2);
+  __pyx_t_2 = 0;
+
+  /* "PETSc/DMPlex.pyx":488
+ *         cdef PetscInt coverlap = asInt(overlap)
+ *         cdef SF sf = SF()
+ *         CHKERR( DMPlexDistribute(self.dm, coverlap, &sf.sf, &dmParallel) )             # <<<<<<<<<<<<<<
+ *         if dmParallel != NULL:
+ *             PetscCLEAR(self.obj); self.dm = dmParallel
+ */
+  __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 == ((int)-1))) __PYX_ERR(42, 488, __pyx_L1_error)
+
+  /* "PETSc/DMPlex.pyx":489
+ *         cdef SF sf = SF()
+ *         CHKERR( DMPlexDistribute(self.dm, coverlap, &sf.sf, &dmParallel) )
+ *         if dmParallel != NULL:             # <<<<<<<<<<<<<<
+ *             PetscCLEAR(self.obj); self.dm = dmParallel
+ *             return sf
+ */
+  __pyx_t_4 = ((__pyx_v_dmParallel != NULL) != 0);
+  if (__pyx_t_4) {
+
+    /* "PETSc/DMPlex.pyx":490
+ *         CHKERR( DMPlexDistribute(self.dm, coverlap, &sf.sf, &dmParallel) )
+ *         if dmParallel != NULL:
+ *             PetscCLEAR(self.obj); self.dm = dmParallel             # <<<<<<<<<<<<<<
+ *             return sf
+ * 
+ */
+    __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":491
+ *         if dmParallel != NULL:
+ *             PetscCLEAR(self.obj); self.dm = dmParallel
+ *             return sf             # <<<<<<<<<<<<<<
+ * 
+ *     def distributeOverlap(self, overlap=0):
+ */
+    __Pyx_XDECREF(__pyx_r);
+    __Pyx_INCREF(((PyObject *)__pyx_v_sf));
+    __pyx_r = ((PyObject *)__pyx_v_sf);
+    goto __pyx_L0;
+
+    /* "PETSc/DMPlex.pyx":489
+ *         cdef SF sf = SF()
+ *         CHKERR( DMPlexDistribute(self.dm, coverlap, &sf.sf, &dmParallel) )
+ *         if dmParallel != NULL:             # <<<<<<<<<<<<<<
+ *             PetscCLEAR(self.obj); self.dm = dmParallel
+ *             return sf
+ */
+  }
+
+  /* "PETSc/DMPlex.pyx":484
+ *         return part
+ * 
+ *     def distribute(self, overlap=0):             # <<<<<<<<<<<<<<
+ *         cdef PetscDM dmParallel = NULL
+ *         cdef PetscInt coverlap = asInt(overlap)
+ */
+
+  /* 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.distribute", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF((PyObject *)__pyx_v_sf);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DMPlex.pyx":493
+ *             return sf
+ * 
+ *     def distributeOverlap(self, overlap=0):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt coverlap = asInt(overlap)
+ *         cdef SF sf = SF()
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_117distributeOverlap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_116distributeOverlap[] = "DMPlex.distributeOverlap(self, overlap=0)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_117distributeOverlap(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_overlap = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("distributeOverlap (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_overlap,0};
+    PyObject* values[1] = {0};
+    values[0] = ((PyObject *)__pyx_int_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);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -221916,11 +240441,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_95distribute(PyObject *__pyx_
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "distribute") < 0)) __PYX_ERR(42, 409, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "distributeOverlap") < 0)) __PYX_ERR(42, 493, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -221929,104 +240455,104 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_95distribute(PyObject *__pyx_
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("distribute", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 409, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("distributeOverlap", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 493, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.distribute", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __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_94distribute(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_overlap);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_116distributeOverlap(((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_94distribute(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_overlap) {
-  DM __pyx_v_dmParallel;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_116distributeOverlap(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;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
   PetscInt __pyx_t_1;
   PyObject *__pyx_t_2 = NULL;
   int __pyx_t_3;
-  __Pyx_RefNannySetupContext("distribute", 0);
+  __Pyx_RefNannySetupContext("distributeOverlap", 0);
 
-  /* "PETSc/DMPlex.pyx":410
+  /* "PETSc/DMPlex.pyx":494
  * 
- *     def distribute(self, overlap=0):
- *         cdef PetscDM dmParallel = NULL             # <<<<<<<<<<<<<<
- *         cdef PetscInt coverlap = asInt(overlap)
- *         cdef SF sf = SF()
- */
-  __pyx_v_dmParallel = NULL;
-
-  /* "PETSc/DMPlex.pyx":411
- *     def distribute(self, overlap=0):
- *         cdef PetscDM dmParallel = NULL
+ *     def distributeOverlap(self, overlap=0):
  *         cdef PetscInt coverlap = asInt(overlap)             # <<<<<<<<<<<<<<
  *         cdef SF sf = SF()
- *         CHKERR( DMPlexDistribute(self.dm, coverlap, &sf.sf, &dmParallel) )
+ *         cdef PetscDM dmOverlap = NULL
  */
-  __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_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_overlap); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 494, __pyx_L1_error)
   __pyx_v_coverlap = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":412
- *         cdef PetscDM dmParallel = NULL
+  /* "PETSc/DMPlex.pyx":495
+ *     def distributeOverlap(self, overlap=0):
  *         cdef PetscInt coverlap = asInt(overlap)
  *         cdef SF sf = SF()             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexDistribute(self.dm, coverlap, &sf.sf, &dmParallel) )
- *         PetscCLEAR(self.obj); self.dm = dmParallel
+ *         cdef PetscDM dmOverlap = NULL
+ *         CHKERR( DMPlexDistributeOverlap(self.dm, coverlap,
  */
-  __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_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SF), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 495, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_sf = ((struct PyPetscSFObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/DMPlex.pyx":413
+  /* "PETSc/DMPlex.pyx":496
  *         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
+ *         cdef PetscDM dmOverlap = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexDistributeOverlap(self.dm, coverlap,
+ *                                         &sf.sf, &dmOverlap) )
  */
-  __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)
+  __pyx_v_dmOverlap = NULL;
 
-  /* "PETSc/DMPlex.pyx":414
+  /* "PETSc/DMPlex.pyx":497
  *         cdef SF sf = SF()
- *         CHKERR( DMPlexDistribute(self.dm, coverlap, &sf.sf, &dmParallel) )
- *         PetscCLEAR(self.obj); self.dm = dmParallel             # <<<<<<<<<<<<<<
+ *         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 == ((int)-1))) __PYX_ERR(42, 497, __pyx_L1_error)
+
+  /* "PETSc/DMPlex.pyx":499
+ *         CHKERR( DMPlexDistributeOverlap(self.dm, coverlap,
+ *                                         &sf.sf, &dmOverlap) )
+ *         PetscCLEAR(self.obj); self.dm = dmOverlap             # <<<<<<<<<<<<<<
  *         return sf
  * 
  */
   __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.__pyx_base.obj);
-  __pyx_v_self->__pyx_base.dm = __pyx_v_dmParallel;
+  __pyx_v_self->__pyx_base.dm = __pyx_v_dmOverlap;
 
-  /* "PETSc/DMPlex.pyx":415
- *         CHKERR( DMPlexDistribute(self.dm, coverlap, &sf.sf, &dmParallel) )
- *         PetscCLEAR(self.obj); self.dm = dmParallel
+  /* "PETSc/DMPlex.pyx":500
+ *                                         &sf.sf, &dmOverlap) )
+ *         PetscCLEAR(self.obj); self.dm = dmOverlap
  *         return sf             # <<<<<<<<<<<<<<
  * 
- *     def distributeOverlap(self, overlap=0):
+ *     def interpolate(self):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_sf));
   __pyx_r = ((PyObject *)__pyx_v_sf);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":409
- *         return part
+  /* "PETSc/DMPlex.pyx":493
+ *             return sf
  * 
- *     def distribute(self, overlap=0):             # <<<<<<<<<<<<<<
- *         cdef PetscDM dmParallel = NULL
+ *     def distributeOverlap(self, overlap=0):             # <<<<<<<<<<<<<<
  *         cdef PetscInt coverlap = asInt(overlap)
+ *         cdef SF sf = SF()
  */
 
   /* function exit code */
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_2);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.distribute", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.distributeOverlap", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XDECREF((PyObject *)__pyx_v_sf);
@@ -222035,174 +240561,178 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_94distribute(struct __pyx_obj
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":417
+/* "PETSc/DMPlex.pyx":502
  *         return sf
  * 
- *     def distributeOverlap(self, overlap=0):             # <<<<<<<<<<<<<<
- *         cdef PetscInt coverlap = asInt(overlap)
- *         cdef SF sf = SF()
+ *     def interpolate(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscDM newdm = NULL
+ *         CHKERR( DMPlexInterpolate(self.dm, &newdm) )
  */
 
 /* Python wrapper */
-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;
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_119interpolate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_118interpolate[] = "DMPlex.interpolate(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_119interpolate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
-  __Pyx_RefNannySetupContext("distributeOverlap (wrapper)", 0);
-  {
-    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_overlap,0};
-    PyObject* values[1] = {0};
-    values[0] = ((PyObject *)__pyx_int_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 (kw_args > 0) {
-          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_overlap);
-          if (value) { values[0] = value; kw_args--; }
-        }
-      }
-      if (unlikely(kw_args > 0)) {
-        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)) {
-        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
-        case  0: break;
-        default: goto __pyx_L5_argtuple_error;
-      }
-    }
-    __pyx_v_overlap = values[0];
-  }
-  goto __pyx_L4_argument_unpacking_done;
-  __pyx_L5_argtuple_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_96distributeOverlap(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_overlap);
+  __Pyx_RefNannySetupContext("interpolate (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("interpolate", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "interpolate", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_118interpolate(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-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;
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_118interpolate(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
+  DM __pyx_v_newdm;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
-  PetscInt __pyx_t_1;
-  PyObject *__pyx_t_2 = NULL;
-  int __pyx_t_3;
-  __Pyx_RefNannySetupContext("distributeOverlap", 0);
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("interpolate", 0);
 
-  /* "PETSc/DMPlex.pyx":418
+  /* "PETSc/DMPlex.pyx":503
  * 
- *     def distributeOverlap(self, overlap=0):
- *         cdef PetscInt coverlap = asInt(overlap)             # <<<<<<<<<<<<<<
- *         cdef SF sf = SF()
- *         cdef PetscDM dmOverlap = NULL
+ *     def interpolate(self):
+ *         cdef PetscDM newdm = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexInterpolate(self.dm, &newdm) )
+ *         PetscCLEAR(self.obj); self.dm = newdm
  */
-  __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;
+  __pyx_v_newdm = NULL;
 
-  /* "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,
+  /* "PETSc/DMPlex.pyx":504
+ *     def interpolate(self):
+ *         cdef PetscDM newdm = NULL
+ *         CHKERR( DMPlexInterpolate(self.dm, &newdm) )             # <<<<<<<<<<<<<<
+ *         PetscCLEAR(self.obj); self.dm = newdm
+ * 
  */
-  __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;
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexInterpolate(__pyx_v_self->__pyx_base.dm, (&__pyx_v_newdm))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(42, 504, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":420
- *         cdef PetscInt coverlap = asInt(overlap)
- *         cdef SF sf = SF()
- *         cdef PetscDM dmOverlap = NULL             # <<<<<<<<<<<<<<
- *         CHKERR( DMPlexDistributeOverlap(self.dm, coverlap,
- *                                         &sf.sf, &dmOverlap) )
+  /* "PETSc/DMPlex.pyx":505
+ *         cdef PetscDM newdm = NULL
+ *         CHKERR( DMPlexInterpolate(self.dm, &newdm) )
+ *         PetscCLEAR(self.obj); self.dm = newdm             # <<<<<<<<<<<<<<
+ * 
+ *     def uninterpolate(self):
  */
-  __pyx_v_dmOverlap = NULL;
+  __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":421
- *         cdef SF sf = SF()
- *         cdef PetscDM dmOverlap = NULL
- *         CHKERR( DMPlexDistributeOverlap(self.dm, coverlap,             # <<<<<<<<<<<<<<
- *                                         &sf.sf, &dmOverlap) )
- *         PetscCLEAR(self.obj); self.dm = dmOverlap
+  /* "PETSc/DMPlex.pyx":502
+ *         return sf
+ * 
+ *     def interpolate(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscDM newdm = NULL
+ *         CHKERR( DMPlexInterpolate(self.dm, &newdm) )
  */
-  __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":423
- *         CHKERR( DMPlexDistributeOverlap(self.dm, coverlap,
- *                                         &sf.sf, &dmOverlap) )
- *         PetscCLEAR(self.obj); self.dm = dmOverlap             # <<<<<<<<<<<<<<
- *         return sf
+  /* function exit code */
+  __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+  goto __pyx_L0;
+  __pyx_L1_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.interpolate", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DMPlex.pyx":507
+ *         PetscCLEAR(self.obj); self.dm = newdm
  * 
+ *     def uninterpolate(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscDM newdm = NULL
+ *         CHKERR( DMPlexUninterpolate(self.dm, &newdm) )
  */
-  __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":424
- *                                         &sf.sf, &dmOverlap) )
- *         PetscCLEAR(self.obj); self.dm = dmOverlap
- *         return sf             # <<<<<<<<<<<<<<
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_121uninterpolate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_120uninterpolate[] = "DMPlex.uninterpolate(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_121uninterpolate(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("uninterpolate (wrapper)", 0);
+  if (unlikely(PyTuple_GET_SIZE(__pyx_args) > 0)) {
+    __Pyx_RaiseArgtupleInvalid("uninterpolate", 1, 0, 0, PyTuple_GET_SIZE(__pyx_args)); return NULL;}
+  if (unlikely(__pyx_kwds) && unlikely(PyDict_Size(__pyx_kwds) > 0) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "uninterpolate", 0))) return NULL;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_120uninterpolate(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_120uninterpolate(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
+  DM __pyx_v_newdm;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  int __pyx_t_1;
+  __Pyx_RefNannySetupContext("uninterpolate", 0);
+
+  /* "PETSc/DMPlex.pyx":508
  * 
- *     def distributeField(self, SF sf not None,
+ *     def uninterpolate(self):
+ *         cdef PetscDM newdm = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexUninterpolate(self.dm, &newdm) )
+ *         PetscCLEAR(self.obj); self.dm = newdm
  */
-  __Pyx_XDECREF(__pyx_r);
-  __Pyx_INCREF(((PyObject *)__pyx_v_sf));
-  __pyx_r = ((PyObject *)__pyx_v_sf);
-  goto __pyx_L0;
+  __pyx_v_newdm = NULL;
 
-  /* "PETSc/DMPlex.pyx":417
- *         return sf
+  /* "PETSc/DMPlex.pyx":509
+ *     def uninterpolate(self):
+ *         cdef PetscDM newdm = NULL
+ *         CHKERR( DMPlexUninterpolate(self.dm, &newdm) )             # <<<<<<<<<<<<<<
+ *         PetscCLEAR(self.obj); self.dm = newdm
  * 
- *     def distributeOverlap(self, overlap=0):             # <<<<<<<<<<<<<<
- *         cdef PetscInt coverlap = asInt(overlap)
- *         cdef SF sf = SF()
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexUninterpolate(__pyx_v_self->__pyx_base.dm, (&__pyx_v_newdm))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(42, 509, __pyx_L1_error)
+
+  /* "PETSc/DMPlex.pyx":510
+ *         cdef PetscDM newdm = NULL
+ *         CHKERR( DMPlexUninterpolate(self.dm, &newdm) )
+ *         PetscCLEAR(self.obj); self.dm = newdm             # <<<<<<<<<<<<<<
+ * 
+ *     def distributeField(self, SF sf, Section sec, Vec vec,
+ */
+  __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":507
+ *         PetscCLEAR(self.obj); self.dm = newdm
+ * 
+ *     def uninterpolate(self):             # <<<<<<<<<<<<<<
+ *         cdef PetscDM newdm = NULL
+ *         CHKERR( DMPlexUninterpolate(self.dm, &newdm) )
  */
 
   /* 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.distributeOverlap", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.uninterpolate", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
-  __Pyx_XDECREF((PyObject *)__pyx_v_sf);
   __Pyx_XGIVEREF(__pyx_r);
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":426
- *         return sf
+/* "PETSc/DMPlex.pyx":512
+ *         PetscCLEAR(self.obj); self.dm = newdm
  * 
- *     def distributeField(self, SF sf not None,             # <<<<<<<<<<<<<<
- *                         Section sec not None, Vec vec not None,
+ *     def distributeField(self, SF sf, Section sec, Vec vec,             # <<<<<<<<<<<<<<
  *                         Section newsec=None, Vec newvec=None):
+ *         cdef MPI_Comm ccomm = MPI_COMM_NULL
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_123distributeField(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_122distributeField[] = "DMPlex.distributeField(self, SF sf, Section sec, Vec vec, Section newsec=None, Vec newvec=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_123distributeField(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;
@@ -222215,9 +240745,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_99distributeField(PyObject *_
     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,
+    /* "PETSc/DMPlex.pyx":513
+ * 
+ *     def distributeField(self, SF sf, Section sec, Vec vec,
  *                         Section newsec=None, Vec newvec=None):             # <<<<<<<<<<<<<<
  *         cdef MPI_Comm ccomm = MPI_COMM_NULL
  *         if newsec is None: newsec = Section()
@@ -222229,10 +240759,15 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_99distributeField(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -222241,21 +240776,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_99distributeField(PyObject *_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_sf)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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)
+          __Pyx_RaiseArgtupleInvalid("distributeField", 0, 3, 5, 1); __PYX_ERR(42, 512, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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)
+          __Pyx_RaiseArgtupleInvalid("distributeField", 0, 3, 5, 2); __PYX_ERR(42, 512, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_newsec);
           if (value) { values[3] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  4:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_newvec);
@@ -222263,12 +240802,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_99distributeField(PyObject *_
         }
       }
       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)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "distributeField") < 0)) __PYX_ERR(42, 512, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         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);
@@ -222284,25 +240825,25 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_99distributeField(PyObject *_
   }
   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_RaiseArgtupleInvalid("distributeField", 0, 3, 5, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 512, __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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sf), __pyx_ptype_8petsc4py_5PETSc_SF, 0, "sf", 0))) __PYX_ERR(42, 512, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_sec), __pyx_ptype_8petsc4py_5PETSc_Section, 0, "sec", 0))) __PYX_ERR(42, 512, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_vec), __pyx_ptype_8petsc4py_5PETSc_Vec, 0, "vec", 0))) __PYX_ERR(42, 512, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_newsec), __pyx_ptype_8petsc4py_5PETSc_Section, 1, "newsec", 0))) __PYX_ERR(42, 513, __pyx_L1_error)
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_newvec), __pyx_ptype_8petsc4py_5PETSc_Vec, 1, "newvec", 0))) __PYX_ERR(42, 513, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_122distributeField(((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
+  /* "PETSc/DMPlex.pyx":512
+ *         PetscCLEAR(self.obj); self.dm = newdm
  * 
- *     def distributeField(self, SF sf not None,             # <<<<<<<<<<<<<<
- *                         Section sec not None, Vec vec not None,
+ *     def distributeField(self, SF sf, Section sec, Vec vec,             # <<<<<<<<<<<<<<
  *                         Section newsec=None, Vec newvec=None):
+ *         cdef MPI_Comm ccomm = MPI_COMM_NULL
  */
 
   /* function exit code */
@@ -222314,7 +240855,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_99distributeField(PyObject *_
   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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_122distributeField(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
@@ -222326,8 +240867,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_98distributeField(struct __py
   __Pyx_INCREF((PyObject *)__pyx_v_newsec);
   __Pyx_INCREF((PyObject *)__pyx_v_newvec);
 
-  /* "PETSc/DMPlex.pyx":429
- *                         Section sec not None, Vec vec not None,
+  /* "PETSc/DMPlex.pyx":514
+ *     def distributeField(self, SF sf, Section sec, Vec vec,
  *                         Section newsec=None, Vec newvec=None):
  *         cdef MPI_Comm ccomm = MPI_COMM_NULL             # <<<<<<<<<<<<<<
  *         if newsec is None: newsec = Section()
@@ -222335,7 +240876,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_98distributeField(struct __py
  */
   __pyx_v_ccomm = MPI_COMM_NULL;
 
-  /* "PETSc/DMPlex.pyx":430
+  /* "PETSc/DMPlex.pyx":515
  *                         Section newsec=None, Vec newvec=None):
  *         cdef MPI_Comm ccomm = MPI_COMM_NULL
  *         if newsec is None: newsec = Section()             # <<<<<<<<<<<<<<
@@ -222345,13 +240886,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_98distributeField(struct __py
   __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_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Section), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 515, __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
+  /* "PETSc/DMPlex.pyx":516
  *         cdef MPI_Comm ccomm = MPI_COMM_NULL
  *         if newsec is None: newsec = Section()
  *         if newvec is None: newvec = Vec()             # <<<<<<<<<<<<<<
@@ -222361,13 +240902,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_98distributeField(struct __py
   __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_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 516, __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
+  /* "PETSc/DMPlex.pyx":517
  *         if newsec is None: newsec = Section()
  *         if newvec is None: newvec = Vec()
  *         if newsec.sec == NULL:             # <<<<<<<<<<<<<<
@@ -222377,25 +240918,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_98distributeField(struct __py
   __pyx_t_1 = ((__pyx_v_newsec->sec == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/DMPlex.pyx":433
+    /* "PETSc/DMPlex.pyx":518
  *         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)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetComm(((PetscObject)__pyx_v_sec->sec), (&__pyx_v_ccomm))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(42, 518, __pyx_L1_error)
 
-    /* "PETSc/DMPlex.pyx":434
+    /* "PETSc/DMPlex.pyx":519
  *         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)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSectionCreate(__pyx_v_ccomm, (&__pyx_v_newsec->sec))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(42, 519, __pyx_L1_error)
 
-    /* "PETSc/DMPlex.pyx":432
+    /* "PETSc/DMPlex.pyx":517
  *         if newsec is None: newsec = Section()
  *         if newvec is None: newvec = Vec()
  *         if newsec.sec == NULL:             # <<<<<<<<<<<<<<
@@ -222404,7 +240945,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_98distributeField(struct __py
  */
   }
 
-  /* "PETSc/DMPlex.pyx":435
+  /* "PETSc/DMPlex.pyx":520
  *             CHKERR( PetscObjectGetComm(<PetscObject>sec.sec, &ccomm) )
  *             CHKERR( PetscSectionCreate(ccomm, &newsec.sec) )
  *         if newvec.vec == NULL:             # <<<<<<<<<<<<<<
@@ -222414,25 +240955,25 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_98distributeField(struct __py
   __pyx_t_1 = ((__pyx_v_newvec->vec == NULL) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/DMPlex.pyx":436
+    /* "PETSc/DMPlex.pyx":521
  *             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)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscObjectGetComm(((PetscObject)__pyx_v_vec->vec), (&__pyx_v_ccomm))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(42, 521, __pyx_L1_error)
 
-    /* "PETSc/DMPlex.pyx":437
+    /* "PETSc/DMPlex.pyx":522
  *         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)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(VecCreate(__pyx_v_ccomm, (&__pyx_v_newvec->vec))); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(42, 522, __pyx_L1_error)
 
-    /* "PETSc/DMPlex.pyx":435
+    /* "PETSc/DMPlex.pyx":520
  *             CHKERR( PetscObjectGetComm(<PetscObject>sec.sec, &ccomm) )
  *             CHKERR( PetscSectionCreate(ccomm, &newsec.sec) )
  *         if newvec.vec == NULL:             # <<<<<<<<<<<<<<
@@ -222441,16 +240982,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_98distributeField(struct __py
  */
   }
 
-  /* "PETSc/DMPlex.pyx":438
+  /* "PETSc/DMPlex.pyx":523
  *             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)
+  __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 == ((int)-1))) __PYX_ERR(42, 523, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":441
+  /* "PETSc/DMPlex.pyx":526
  *                                       sec.sec, vec.vec,
  *                                       newsec.sec, newvec.vec))
  *         return (newsec, newvec)             # <<<<<<<<<<<<<<
@@ -222458,7 +240999,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_98distributeField(struct __py
  *     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_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 526, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
   __Pyx_INCREF(((PyObject *)__pyx_v_newsec));
   __Pyx_GIVEREF(((PyObject *)__pyx_v_newsec));
@@ -222470,12 +241011,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_98distributeField(struct __py
   __pyx_t_3 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":426
- *         return sf
+  /* "PETSc/DMPlex.pyx":512
+ *         PetscCLEAR(self.obj); self.dm = newdm
  * 
- *     def distributeField(self, SF sf not None,             # <<<<<<<<<<<<<<
- *                         Section sec not None, Vec vec not None,
+ *     def distributeField(self, SF sf, Section sec, Vec vec,             # <<<<<<<<<<<<<<
  *                         Section newsec=None, Vec newvec=None):
+ *         cdef MPI_Comm ccomm = MPI_COMM_NULL
  */
 
   /* function exit code */
@@ -222491,7 +241032,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_98distributeField(struct __py
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":443
+/* "PETSc/DMPlex.pyx":528
  *         return (newsec, newvec)
  * 
  *     def createCoarsePointIS(self):             # <<<<<<<<<<<<<<
@@ -222500,23 +241041,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_98distributeField(struct __py
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_125createCoarsePointIS(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_124createCoarsePointIS[] = "DMPlex.createCoarsePointIS(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_125createCoarsePointIS(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_100createCoarsePointIS(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_124createCoarsePointIS(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_100createCoarsePointIS(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_124createCoarsePointIS(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
   struct PyPetscISObject *__pyx_v_fpoint = 0;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -222524,28 +241065,28 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_100createCoarsePointIS(struct
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("createCoarsePointIS", 0);
 
-  /* "PETSc/DMPlex.pyx":444
+  /* "PETSc/DMPlex.pyx":529
  * 
  *     def createCoarsePointIS(self):
  *         cdef IS fpoint = IS()             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexCreateCoarsePointIS(self.dm, &fpoint.iset) )
  *         return fpoint
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 529, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_fpoint = ((struct PyPetscISObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":445
+  /* "PETSc/DMPlex.pyx":530
  *     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_ERR(42, 445, __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 == ((int)-1))) __PYX_ERR(42, 530, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":446
+  /* "PETSc/DMPlex.pyx":531
  *         cdef IS fpoint = IS()
  *         CHKERR( DMPlexCreateCoarsePointIS(self.dm, &fpoint.iset) )
  *         return fpoint             # <<<<<<<<<<<<<<
@@ -222557,7 +241098,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_100createCoarsePointIS(struct
   __pyx_r = ((PyObject *)__pyx_v_fpoint);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":443
+  /* "PETSc/DMPlex.pyx":528
  *         return (newsec, newvec)
  * 
  *     def createCoarsePointIS(self):             # <<<<<<<<<<<<<<
@@ -222577,7 +241118,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_100createCoarsePointIS(struct
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":448
+/* "PETSc/DMPlex.pyx":533
  *         return fpoint
  * 
  *     def createSection(self, numComp, numDof,             # <<<<<<<<<<<<<<
@@ -222586,9 +241127,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_100createCoarsePointIS(struct
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_127createSection(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_126createSection[] = "DMPlex.createSection(self, numComp, numDof, bcField=None, bcComps=None, bcPoints=None, IS perm=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_127createSection(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;
@@ -222602,7 +241143,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_103createSection(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":449
+    /* "PETSc/DMPlex.pyx":534
  * 
  *     def createSection(self, numComp, numDof,
  *                       bcField=None, bcComps=None, bcPoints=None,             # <<<<<<<<<<<<<<
@@ -222613,7 +241154,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_103createSection(PyObject *__
     values[3] = ((PyObject *)Py_None);
     values[4] = ((PyObject *)Py_None);
 
-    /* "PETSc/DMPlex.pyx":450
+    /* "PETSc/DMPlex.pyx":535
  *     def createSection(self, numComp, numDof,
  *                       bcField=None, bcComps=None, bcPoints=None,
  *                       IS perm=None):             # <<<<<<<<<<<<<<
@@ -222626,11 +241167,17 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_103createSection(PyObject *__
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -222639,26 +241186,31 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_103createSection(PyObject *__
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_numComp)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(42, 448, __pyx_L3_error)
+          __Pyx_RaiseArgtupleInvalid("createSection", 0, 2, 6, 1); __PYX_ERR(42, 533, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_bcField);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_bcComps);
           if (value) { values[3] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  4:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_bcPoints);
           if (value) { values[4] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  5:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_perm);
@@ -222666,14 +241218,18 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_103createSection(PyObject *__
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createSection") < 0)) __PYX_ERR(42, 448, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "createSection") < 0)) __PYX_ERR(42, 533, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -222689,16 +241245,16 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_103createSection(PyObject *__
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("createSection", 0, 2, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 448, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("createSection", 0, 2, 6, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 533, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_perm), __pyx_ptype_8petsc4py_5PETSc_IS, 1, "perm", 0))) __PYX_ERR(42, 535, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_126createSection(((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":448
+  /* "PETSc/DMPlex.pyx":533
  *         return fpoint
  * 
  *     def createSection(self, numComp, numDof,             # <<<<<<<<<<<<<<
@@ -222715,7 +241271,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_103createSection(PyObject *__
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_126createSection(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;
@@ -222747,7 +241303,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102createSection(struct __pyx
   __Pyx_INCREF(__pyx_v_bcComps);
   __Pyx_INCREF(__pyx_v_bcPoints);
 
-  /* "PETSc/DMPlex.pyx":452
+  /* "PETSc/DMPlex.pyx":537
  *                       IS perm=None):
  *         # topological dimension
  *         cdef PetscInt dim = 0             # <<<<<<<<<<<<<<
@@ -222756,16 +241312,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102createSection(struct __pyx
  */
   __pyx_v_dim = 0;
 
-  /* "PETSc/DMPlex.pyx":453
+  /* "PETSc/DMPlex.pyx":538
  *         # 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_ERR(42, 453, __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 == ((int)-1))) __PYX_ERR(42, 538, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":455
+  /* "PETSc/DMPlex.pyx":540
  *         CHKERR( DMGetDimension(self.dm, &dim) )
  *         # components and DOFs
  *         cdef PetscInt ncomp = 0, ndof = 0             # <<<<<<<<<<<<<<
@@ -222775,7 +241331,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102createSection(struct __pyx
   __pyx_v_ncomp = 0;
   __pyx_v_ndof = 0;
 
-  /* "PETSc/DMPlex.pyx":456
+  /* "PETSc/DMPlex.pyx":541
  *         # components and DOFs
  *         cdef PetscInt ncomp = 0, ndof = 0
  *         cdef PetscInt *icomp = NULL, *idof = NULL             # <<<<<<<<<<<<<<
@@ -222785,31 +241341,31 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102createSection(struct __pyx
   __pyx_v_icomp = NULL;
   __pyx_v_idof = NULL;
 
-  /* "PETSc/DMPlex.pyx":457
+  /* "PETSc/DMPlex.pyx":542
  *         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_ERR(42, 457, __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, 542, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_numComp, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/DMPlex.pyx":458
+  /* "PETSc/DMPlex.pyx":543
  *         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_ERR(42, 458, __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, 543, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_DECREF_SET(__pyx_v_numDof, __pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/DMPlex.pyx":459
+  /* "PETSc/DMPlex.pyx":544
  *         numComp = iarray_i(numComp, &ncomp, &icomp)
  *         numDof  = iarray_i(numDof, &ndof, &idof)
  *         assert ndof == ncomp*(dim+1)             # <<<<<<<<<<<<<<
@@ -222820,12 +241376,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102createSection(struct __pyx
   if (unlikely(!Py_OptimizeFlag)) {
     if (unlikely(!((__pyx_v_ndof == (__pyx_v_ncomp * (__pyx_v_dim + 1))) != 0))) {
       PyErr_SetNone(PyExc_AssertionError);
-      __PYX_ERR(42, 459, __pyx_L1_error)
+      __PYX_ERR(42, 544, __pyx_L1_error)
     }
   }
   #endif
 
-  /* "PETSc/DMPlex.pyx":461
+  /* "PETSc/DMPlex.pyx":546
  *         assert ndof == ncomp*(dim+1)
  *         # boundary conditions
  *         cdef PetscInt nbc = 0, i = 0             # <<<<<<<<<<<<<<
@@ -222835,7 +241391,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102createSection(struct __pyx
   __pyx_v_nbc = 0;
   __pyx_v_i = 0;
 
-  /* "PETSc/DMPlex.pyx":462
+  /* "PETSc/DMPlex.pyx":547
  *         # boundary conditions
  *         cdef PetscInt nbc = 0, i = 0
  *         cdef PetscInt *bcfield = NULL             # <<<<<<<<<<<<<<
@@ -222844,7 +241400,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102createSection(struct __pyx
  */
   __pyx_v_bcfield = NULL;
 
-  /* "PETSc/DMPlex.pyx":463
+  /* "PETSc/DMPlex.pyx":548
  *         cdef PetscInt nbc = 0, i = 0
  *         cdef PetscInt *bcfield = NULL
  *         cdef PetscIS *bccomps  = NULL             # <<<<<<<<<<<<<<
@@ -222853,7 +241409,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102createSection(struct __pyx
  */
   __pyx_v_bccomps = NULL;
 
-  /* "PETSc/DMPlex.pyx":464
+  /* "PETSc/DMPlex.pyx":549
  *         cdef PetscInt *bcfield = NULL
  *         cdef PetscIS *bccomps  = NULL
  *         cdef PetscIS *bcpoints = NULL             # <<<<<<<<<<<<<<
@@ -222862,7 +241418,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102createSection(struct __pyx
  */
   __pyx_v_bcpoints = NULL;
 
-  /* "PETSc/DMPlex.pyx":465
+  /* "PETSc/DMPlex.pyx":550
  *         cdef PetscIS *bccomps  = NULL
  *         cdef PetscIS *bcpoints = NULL
  *         if bcField is not None:             # <<<<<<<<<<<<<<
@@ -222873,19 +241429,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102createSection(struct __pyx
   __pyx_t_4 = (__pyx_t_3 != 0);
   if (__pyx_t_4) {
 
-    /* "PETSc/DMPlex.pyx":466
+    /* "PETSc/DMPlex.pyx":551
  *         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_ERR(42, 466, __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, 551, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
     __Pyx_DECREF_SET(__pyx_v_bcField, __pyx_t_2);
     __pyx_t_2 = 0;
 
-    /* "PETSc/DMPlex.pyx":467
+    /* "PETSc/DMPlex.pyx":552
  *         if bcField is not None:
  *             bcField = iarray_i(bcField, &nbc, &bcfield)
  *             if bcComps is not None:             # <<<<<<<<<<<<<<
@@ -222896,19 +241452,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102createSection(struct __pyx
     __pyx_t_3 = (__pyx_t_4 != 0);
     if (__pyx_t_3) {
 
-      /* "PETSc/DMPlex.pyx":468
+      /* "PETSc/DMPlex.pyx":553
  *             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_ERR(42, 468, __pyx_L1_error)
+      __pyx_t_2 = PySequence_List(__pyx_v_bcComps); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 553, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_2);
       __Pyx_DECREF_SET(__pyx_v_bcComps, __pyx_t_2);
       __pyx_t_2 = 0;
 
-      /* "PETSc/DMPlex.pyx":469
+      /* "PETSc/DMPlex.pyx":554
  *             if bcComps is not None:
  *                 bcComps = list(bcComps)
  *                 assert len(bcComps) == nbc             # <<<<<<<<<<<<<<
@@ -222917,30 +241473,30 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102createSection(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_ERR(42, 469, __pyx_L1_error)
+        __pyx_t_5 = PyObject_Length(__pyx_v_bcComps); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(42, 554, __pyx_L1_error)
         if (unlikely(!((__pyx_t_5 == __pyx_v_nbc) != 0))) {
           PyErr_SetNone(PyExc_AssertionError);
-          __PYX_ERR(42, 469, __pyx_L1_error)
+          __PYX_ERR(42, 554, __pyx_L1_error)
         }
       }
       #endif
 
-      /* "PETSc/DMPlex.pyx":470
+      /* "PETSc/DMPlex.pyx":555
  *                 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_ERR(42, 470, __pyx_L1_error)
+      __pyx_t_2 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_nbc)); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 555, __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_ERR(42, 470, __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, 555, __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":471
+      /* "PETSc/DMPlex.pyx":556
  *                 assert len(bcComps) == nbc
  *                 tmp1 = oarray_p(empty_p(nbc), NULL, <void**>&bccomps)
  *                 for i from 0 <= i < nbc:             # <<<<<<<<<<<<<<
@@ -222950,22 +241506,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102createSection(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":472
+        /* "PETSc/DMPlex.pyx":557
  *                 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)) __PYX_ERR(42, 472, __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, 557, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_6);
-        if (!(likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8petsc4py_5PETSc_IS)))) __PYX_ERR(42, 472, __pyx_L1_error)
+        if (!(likely(__Pyx_TypeTest(__pyx_t_6, __pyx_ptype_8petsc4py_5PETSc_IS)))) __PYX_ERR(42, 557, __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;
       }
 
-      /* "PETSc/DMPlex.pyx":467
+      /* "PETSc/DMPlex.pyx":552
  *         if bcField is not None:
  *             bcField = iarray_i(bcField, &nbc, &bcfield)
  *             if bcComps is not None:             # <<<<<<<<<<<<<<
@@ -222974,7 +241530,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102createSection(struct __pyx
  */
     }
 
-    /* "PETSc/DMPlex.pyx":473
+    /* "PETSc/DMPlex.pyx":558
  *                 for i from 0 <= i < nbc:
  *                     bccomps[i] = (<IS?>bcComps[<Py_ssize_t>i]).iset
  *             if bcPoints is not None:             # <<<<<<<<<<<<<<
@@ -222985,19 +241541,19 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102createSection(struct __pyx
     __pyx_t_4 = (__pyx_t_3 != 0);
     if (__pyx_t_4) {
 
-      /* "PETSc/DMPlex.pyx":474
+      /* "PETSc/DMPlex.pyx":559
  *                     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_ERR(42, 474, __pyx_L1_error)
+      __pyx_t_6 = PySequence_List(__pyx_v_bcPoints); if (unlikely(!__pyx_t_6)) __PYX_ERR(42, 559, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_6);
       __Pyx_DECREF_SET(__pyx_v_bcPoints, __pyx_t_6);
       __pyx_t_6 = 0;
 
-      /* "PETSc/DMPlex.pyx":475
+      /* "PETSc/DMPlex.pyx":560
  *             if bcPoints is not None:
  *                 bcPoints = list(bcPoints)
  *                 assert len(bcPoints) == nbc             # <<<<<<<<<<<<<<
@@ -223006,30 +241562,30 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102createSection(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_ERR(42, 475, __pyx_L1_error)
+        __pyx_t_5 = PyObject_Length(__pyx_v_bcPoints); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(42, 560, __pyx_L1_error)
         if (unlikely(!((__pyx_t_5 == __pyx_v_nbc) != 0))) {
           PyErr_SetNone(PyExc_AssertionError);
-          __PYX_ERR(42, 475, __pyx_L1_error)
+          __PYX_ERR(42, 560, __pyx_L1_error)
         }
       }
       #endif
 
-      /* "PETSc/DMPlex.pyx":476
+      /* "PETSc/DMPlex.pyx":561
  *                 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_ERR(42, 476, __pyx_L1_error)
+      __pyx_t_6 = ((PyObject *)__pyx_f_8petsc4py_5PETSc_empty_p(__pyx_v_nbc)); if (unlikely(!__pyx_t_6)) __PYX_ERR(42, 561, __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_ERR(42, 476, __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, 561, __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":477
+      /* "PETSc/DMPlex.pyx":562
  *                 assert len(bcPoints) == nbc
  *                 tmp2 = oarray_p(empty_p(nbc), NULL, <void**>&bcpoints)
  *                 for i from 0 <= i < nbc:             # <<<<<<<<<<<<<<
@@ -223039,22 +241595,22 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102createSection(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":478
+        /* "PETSc/DMPlex.pyx":563
  *                 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)) __PYX_ERR(42, 478, __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, 563, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_2);
-        if (!(likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_IS)))) __PYX_ERR(42, 478, __pyx_L1_error)
+        if (!(likely(__Pyx_TypeTest(__pyx_t_2, __pyx_ptype_8petsc4py_5PETSc_IS)))) __PYX_ERR(42, 563, __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
+      /* "PETSc/DMPlex.pyx":558
  *                 for i from 0 <= i < nbc:
  *                     bccomps[i] = (<IS?>bcComps[<Py_ssize_t>i]).iset
  *             if bcPoints is not None:             # <<<<<<<<<<<<<<
@@ -223064,7 +241620,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102createSection(struct __pyx
       goto __pyx_L7;
     }
 
-    /* "PETSc/DMPlex.pyx":480
+    /* "PETSc/DMPlex.pyx":565
  *                     bcpoints[i] = (<IS?>bcPoints[<Py_ssize_t>i]).iset
  *             else:
  *                 raise ValueError("bcPoints is a required argument")             # <<<<<<<<<<<<<<
@@ -223072,15 +241628,15 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102createSection(struct __pyx
  *             assert bcComps  is None
  */
     /*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_t_2 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__68, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 565, __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_ERR(42, 480, __pyx_L1_error)
+      __PYX_ERR(42, 565, __pyx_L1_error)
     }
     __pyx_L7:;
 
-    /* "PETSc/DMPlex.pyx":465
+    /* "PETSc/DMPlex.pyx":550
  *         cdef PetscIS *bccomps  = NULL
  *         cdef PetscIS *bcpoints = NULL
  *         if bcField is not None:             # <<<<<<<<<<<<<<
@@ -223090,7 +241646,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102createSection(struct __pyx
     goto __pyx_L3;
   }
 
-  /* "PETSc/DMPlex.pyx":482
+  /* "PETSc/DMPlex.pyx":567
  *                 raise ValueError("bcPoints is a required argument")
  *         else:
  *             assert bcComps  is None             # <<<<<<<<<<<<<<
@@ -223103,12 +241659,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102createSection(struct __pyx
       __pyx_t_4 = (__pyx_v_bcComps == Py_None);
       if (unlikely(!(__pyx_t_4 != 0))) {
         PyErr_SetNone(PyExc_AssertionError);
-        __PYX_ERR(42, 482, __pyx_L1_error)
+        __PYX_ERR(42, 567, __pyx_L1_error)
       }
     }
     #endif
 
-    /* "PETSc/DMPlex.pyx":483
+    /* "PETSc/DMPlex.pyx":568
  *         else:
  *             assert bcComps  is None
  *             assert bcPoints is None             # <<<<<<<<<<<<<<
@@ -223120,14 +241676,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102createSection(struct __pyx
       __pyx_t_4 = (__pyx_v_bcPoints == Py_None);
       if (unlikely(!(__pyx_t_4 != 0))) {
         PyErr_SetNone(PyExc_AssertionError);
-        __PYX_ERR(42, 483, __pyx_L1_error)
+        __PYX_ERR(42, 568, __pyx_L1_error)
       }
     }
     #endif
   }
   __pyx_L3:;
 
-  /* "PETSc/DMPlex.pyx":485
+  /* "PETSc/DMPlex.pyx":570
  *             assert bcPoints is None
  *         # optional chart permutations
  *         cdef PetscIS cperm = NULL             # <<<<<<<<<<<<<<
@@ -223136,7 +241692,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102createSection(struct __pyx
  */
   __pyx_v_cperm = NULL;
 
-  /* "PETSc/DMPlex.pyx":486
+  /* "PETSc/DMPlex.pyx":571
  *         # optional chart permutations
  *         cdef PetscIS cperm = NULL
  *         if perm is not None: cperm = perm.iset             # <<<<<<<<<<<<<<
@@ -223150,40 +241706,40 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102createSection(struct __pyx
     __pyx_v_cperm = __pyx_t_8;
   }
 
-  /* "PETSc/DMPlex.pyx":488
+  /* "PETSc/DMPlex.pyx":573
  *         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 *)__pyx_ptype_8petsc4py_5PETSc_Section), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 488, __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, 573, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_v_sec = ((struct PyPetscSectionObject *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/DMPlex.pyx":489
+  /* "PETSc/DMPlex.pyx":574
  *         # 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_ERR(42, 489, __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 == ((int)-1))) __PYX_ERR(42, 574, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":492
+  /* "PETSc/DMPlex.pyx":577
  *                                     nbc, bcfield, bccomps, bcpoints,
  *                                     cperm, &sec.sec) )
  *         return sec             # <<<<<<<<<<<<<<
  * 
- *     def setRefinementUniform(self, refinementUniform=True):
+ *     def getPointLocal(self, point):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_sec));
   __pyx_r = ((PyObject *)__pyx_v_sec);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":448
+  /* "PETSc/DMPlex.pyx":533
  *         return fpoint
  * 
  *     def createSection(self, numComp, numDof,             # <<<<<<<<<<<<<<
@@ -223211,18 +241767,646 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_102createSection(struct __pyx
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":494
+/* "PETSc/DMPlex.pyx":579
+ *         return sec
+ * 
+ *     def getPointLocal(self, point):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt start = 0, end = 0
+ *         cdef PetscInt cpoint = asInt(point)
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_129getPointLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_128getPointLocal[] = "DMPlex.getPointLocal(self, point)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_129getPointLocal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_point = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getPointLocal (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_point,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);
+        CYTHON_FALLTHROUGH;
+        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_point)) != 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, "getPointLocal") < 0)) __PYX_ERR(42, 579, __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_point = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("getPointLocal", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 579, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getPointLocal", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_128getPointLocal(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_point);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_128getPointLocal(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_point) {
+  PetscInt __pyx_v_start;
+  PetscInt __pyx_v_end;
+  PetscInt __pyx_v_cpoint;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannySetupContext("getPointLocal", 0);
+
+  /* "PETSc/DMPlex.pyx":580
+ * 
+ *     def getPointLocal(self, point):
+ *         cdef PetscInt start = 0, end = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cpoint = asInt(point)
+ *         CHKERR( DMPlexGetPointLocal(self.dm, cpoint, &start, &end) )
+ */
+  __pyx_v_start = 0;
+  __pyx_v_end = 0;
+
+  /* "PETSc/DMPlex.pyx":581
+ *     def getPointLocal(self, point):
+ *         cdef PetscInt start = 0, end = 0
+ *         cdef PetscInt cpoint = asInt(point)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexGetPointLocal(self.dm, cpoint, &start, &end) )
+ *         return toInt(start), toInt(end)
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 581, __pyx_L1_error)
+  __pyx_v_cpoint = __pyx_t_1;
+
+  /* "PETSc/DMPlex.pyx":582
+ *         cdef PetscInt start = 0, end = 0
+ *         cdef PetscInt cpoint = asInt(point)
+ *         CHKERR( DMPlexGetPointLocal(self.dm, cpoint, &start, &end) )             # <<<<<<<<<<<<<<
+ *         return toInt(start), toInt(end)
+ * 
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetPointLocal(__pyx_v_self->__pyx_base.dm, __pyx_v_cpoint, (&__pyx_v_start), (&__pyx_v_end))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(42, 582, __pyx_L1_error)
+
+  /* "PETSc/DMPlex.pyx":583
+ *         cdef PetscInt cpoint = asInt(point)
+ *         CHKERR( DMPlexGetPointLocal(self.dm, cpoint, &start, &end) )
+ *         return toInt(start), toInt(end)             # <<<<<<<<<<<<<<
+ * 
+ *     def getPointLocalField(self, point, field):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_start); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 583, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_end); if (unlikely(!__pyx_t_4)) __PYX_ERR(42, 583, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(42, 583, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_GIVEREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_4);
+  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);
+  __pyx_t_3 = 0;
+  __pyx_t_4 = 0;
+  __pyx_r = __pyx_t_5;
+  __pyx_t_5 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/DMPlex.pyx":579
  *         return sec
  * 
+ *     def getPointLocal(self, point):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt start = 0, end = 0
+ *         cdef PetscInt cpoint = asInt(point)
+ */
+
+  /* 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.DMPlex.getPointLocal", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DMPlex.pyx":585
+ *         return toInt(start), toInt(end)
+ * 
+ *     def getPointLocalField(self, point, field):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt start = 0, end = 0
+ *         cdef PetscInt cpoint = asInt(point)
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_131getPointLocalField(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_130getPointLocalField[] = "DMPlex.getPointLocalField(self, point, field)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_131getPointLocalField(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_point = 0;
+  PyObject *__pyx_v_field = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getPointLocalField (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_point,&__pyx_n_s_field,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);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        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_point)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_field)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("getPointLocalField", 1, 2, 2, 1); __PYX_ERR(42, 585, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getPointLocalField") < 0)) __PYX_ERR(42, 585, __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_point = values[0];
+    __pyx_v_field = values[1];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("getPointLocalField", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 585, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getPointLocalField", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_130getPointLocalField(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_point, __pyx_v_field);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_130getPointLocalField(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_field) {
+  PetscInt __pyx_v_start;
+  PetscInt __pyx_v_end;
+  PetscInt __pyx_v_cpoint;
+  PetscInt __pyx_v_cfield;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannySetupContext("getPointLocalField", 0);
+
+  /* "PETSc/DMPlex.pyx":586
+ * 
+ *     def getPointLocalField(self, point, field):
+ *         cdef PetscInt start = 0, end = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cpoint = asInt(point)
+ *         cdef PetscInt cfield = asInt(field)
+ */
+  __pyx_v_start = 0;
+  __pyx_v_end = 0;
+
+  /* "PETSc/DMPlex.pyx":587
+ *     def getPointLocalField(self, point, field):
+ *         cdef PetscInt start = 0, end = 0
+ *         cdef PetscInt cpoint = asInt(point)             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cfield = asInt(field)
+ *         CHKERR( DMPlexGetPointLocalField(self.dm, cpoint, cfield, &start, &end) )
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 587, __pyx_L1_error)
+  __pyx_v_cpoint = __pyx_t_1;
+
+  /* "PETSc/DMPlex.pyx":588
+ *         cdef PetscInt start = 0, end = 0
+ *         cdef PetscInt cpoint = asInt(point)
+ *         cdef PetscInt cfield = asInt(field)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexGetPointLocalField(self.dm, cpoint, cfield, &start, &end) )
+ *         return toInt(start), toInt(end)
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 588, __pyx_L1_error)
+  __pyx_v_cfield = __pyx_t_1;
+
+  /* "PETSc/DMPlex.pyx":589
+ *         cdef PetscInt cpoint = asInt(point)
+ *         cdef PetscInt cfield = asInt(field)
+ *         CHKERR( DMPlexGetPointLocalField(self.dm, cpoint, cfield, &start, &end) )             # <<<<<<<<<<<<<<
+ *         return toInt(start), toInt(end)
+ * 
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetPointLocalField(__pyx_v_self->__pyx_base.dm, __pyx_v_cpoint, __pyx_v_cfield, (&__pyx_v_start), (&__pyx_v_end))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(42, 589, __pyx_L1_error)
+
+  /* "PETSc/DMPlex.pyx":590
+ *         cdef PetscInt cfield = asInt(field)
+ *         CHKERR( DMPlexGetPointLocalField(self.dm, cpoint, cfield, &start, &end) )
+ *         return toInt(start), toInt(end)             # <<<<<<<<<<<<<<
+ * 
+ *     def getPointGlobal(self, point):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_start); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 590, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_end); if (unlikely(!__pyx_t_4)) __PYX_ERR(42, 590, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(42, 590, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_GIVEREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_4);
+  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);
+  __pyx_t_3 = 0;
+  __pyx_t_4 = 0;
+  __pyx_r = __pyx_t_5;
+  __pyx_t_5 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/DMPlex.pyx":585
+ *         return toInt(start), toInt(end)
+ * 
+ *     def getPointLocalField(self, point, field):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt start = 0, end = 0
+ *         cdef PetscInt cpoint = asInt(point)
+ */
+
+  /* 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.DMPlex.getPointLocalField", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DMPlex.pyx":592
+ *         return toInt(start), toInt(end)
+ * 
+ *     def getPointGlobal(self, point):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt start = 0, end = 0
+ *         cdef PetscInt cpoint = asInt(point)
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_133getPointGlobal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_132getPointGlobal[] = "DMPlex.getPointGlobal(self, point)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_133getPointGlobal(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_point = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getPointGlobal (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_point,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);
+        CYTHON_FALLTHROUGH;
+        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_point)) != 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, "getPointGlobal") < 0)) __PYX_ERR(42, 592, __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_point = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("getPointGlobal", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 592, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getPointGlobal", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_132getPointGlobal(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_point);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_132getPointGlobal(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_point) {
+  PetscInt __pyx_v_start;
+  PetscInt __pyx_v_end;
+  PetscInt __pyx_v_cpoint;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannySetupContext("getPointGlobal", 0);
+
+  /* "PETSc/DMPlex.pyx":593
+ * 
+ *     def getPointGlobal(self, point):
+ *         cdef PetscInt start = 0, end = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cpoint = asInt(point)
+ *         CHKERR( DMPlexGetPointGlobal(self.dm, cpoint, &start, &end) )
+ */
+  __pyx_v_start = 0;
+  __pyx_v_end = 0;
+
+  /* "PETSc/DMPlex.pyx":594
+ *     def getPointGlobal(self, point):
+ *         cdef PetscInt start = 0, end = 0
+ *         cdef PetscInt cpoint = asInt(point)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexGetPointGlobal(self.dm, cpoint, &start, &end) )
+ *         return toInt(start), toInt(end)
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 594, __pyx_L1_error)
+  __pyx_v_cpoint = __pyx_t_1;
+
+  /* "PETSc/DMPlex.pyx":595
+ *         cdef PetscInt start = 0, end = 0
+ *         cdef PetscInt cpoint = asInt(point)
+ *         CHKERR( DMPlexGetPointGlobal(self.dm, cpoint, &start, &end) )             # <<<<<<<<<<<<<<
+ *         return toInt(start), toInt(end)
+ * 
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetPointGlobal(__pyx_v_self->__pyx_base.dm, __pyx_v_cpoint, (&__pyx_v_start), (&__pyx_v_end))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(42, 595, __pyx_L1_error)
+
+  /* "PETSc/DMPlex.pyx":596
+ *         cdef PetscInt cpoint = asInt(point)
+ *         CHKERR( DMPlexGetPointGlobal(self.dm, cpoint, &start, &end) )
+ *         return toInt(start), toInt(end)             # <<<<<<<<<<<<<<
+ * 
+ *     def getPointGlobalField(self, point, field):
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_start); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 596, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_end); if (unlikely(!__pyx_t_4)) __PYX_ERR(42, 596, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(42, 596, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_GIVEREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_4);
+  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);
+  __pyx_t_3 = 0;
+  __pyx_t_4 = 0;
+  __pyx_r = __pyx_t_5;
+  __pyx_t_5 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/DMPlex.pyx":592
+ *         return toInt(start), toInt(end)
+ * 
+ *     def getPointGlobal(self, point):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt start = 0, end = 0
+ *         cdef PetscInt cpoint = asInt(point)
+ */
+
+  /* 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.DMPlex.getPointGlobal", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DMPlex.pyx":598
+ *         return toInt(start), toInt(end)
+ * 
+ *     def getPointGlobalField(self, point, field):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt start = 0, end = 0
+ *         cdef PetscInt cpoint = asInt(point)
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_135getPointGlobalField(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_134getPointGlobalField[] = "DMPlex.getPointGlobalField(self, point, field)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_135getPointGlobalField(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_point = 0;
+  PyObject *__pyx_v_field = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("getPointGlobalField (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_point,&__pyx_n_s_field,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);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        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_point)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_field)) != 0)) kw_args--;
+        else {
+          __Pyx_RaiseArgtupleInvalid("getPointGlobalField", 1, 2, 2, 1); __PYX_ERR(42, 598, __pyx_L3_error)
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getPointGlobalField") < 0)) __PYX_ERR(42, 598, __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_point = values[0];
+    __pyx_v_field = values[1];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("getPointGlobalField", 1, 2, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 598, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.getPointGlobalField", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_134getPointGlobalField(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_point, __pyx_v_field);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_134getPointGlobalField(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_point, PyObject *__pyx_v_field) {
+  PetscInt __pyx_v_start;
+  PetscInt __pyx_v_end;
+  PetscInt __pyx_v_cpoint;
+  PetscInt __pyx_v_cfield;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PetscInt __pyx_t_1;
+  int __pyx_t_2;
+  PyObject *__pyx_t_3 = NULL;
+  PyObject *__pyx_t_4 = NULL;
+  PyObject *__pyx_t_5 = NULL;
+  __Pyx_RefNannySetupContext("getPointGlobalField", 0);
+
+  /* "PETSc/DMPlex.pyx":599
+ * 
+ *     def getPointGlobalField(self, point, field):
+ *         cdef PetscInt start = 0, end = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cpoint = asInt(point)
+ *         cdef PetscInt cfield = asInt(field)
+ */
+  __pyx_v_start = 0;
+  __pyx_v_end = 0;
+
+  /* "PETSc/DMPlex.pyx":600
+ *     def getPointGlobalField(self, point, field):
+ *         cdef PetscInt start = 0, end = 0
+ *         cdef PetscInt cpoint = asInt(point)             # <<<<<<<<<<<<<<
+ *         cdef PetscInt cfield = asInt(field)
+ *         CHKERR( DMPlexGetPointGlobalField(self.dm, cpoint, cfield, &start, &end) )
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_point); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 600, __pyx_L1_error)
+  __pyx_v_cpoint = __pyx_t_1;
+
+  /* "PETSc/DMPlex.pyx":601
+ *         cdef PetscInt start = 0, end = 0
+ *         cdef PetscInt cpoint = asInt(point)
+ *         cdef PetscInt cfield = asInt(field)             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexGetPointGlobalField(self.dm, cpoint, cfield, &start, &end) )
+ *         return toInt(start), toInt(end)
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_field); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 601, __pyx_L1_error)
+  __pyx_v_cfield = __pyx_t_1;
+
+  /* "PETSc/DMPlex.pyx":602
+ *         cdef PetscInt cpoint = asInt(point)
+ *         cdef PetscInt cfield = asInt(field)
+ *         CHKERR( DMPlexGetPointGlobalField(self.dm, cpoint, cfield, &start, &end) )             # <<<<<<<<<<<<<<
+ *         return toInt(start), toInt(end)
+ * 
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexGetPointGlobalField(__pyx_v_self->__pyx_base.dm, __pyx_v_cpoint, __pyx_v_cfield, (&__pyx_v_start), (&__pyx_v_end))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(42, 602, __pyx_L1_error)
+
+  /* "PETSc/DMPlex.pyx":603
+ *         cdef PetscInt cfield = asInt(field)
+ *         CHKERR( DMPlexGetPointGlobalField(self.dm, cpoint, cfield, &start, &end) )
+ *         return toInt(start), toInt(end)             # <<<<<<<<<<<<<<
+ * 
+ *     #
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_start); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 603, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_end); if (unlikely(!__pyx_t_4)) __PYX_ERR(42, 603, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(42, 603, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_5);
+  __Pyx_GIVEREF(__pyx_t_3);
+  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_3);
+  __Pyx_GIVEREF(__pyx_t_4);
+  PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_4);
+  __pyx_t_3 = 0;
+  __pyx_t_4 = 0;
+  __pyx_r = __pyx_t_5;
+  __pyx_t_5 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/DMPlex.pyx":598
+ *         return toInt(start), toInt(end)
+ * 
+ *     def getPointGlobalField(self, point, field):             # <<<<<<<<<<<<<<
+ *         cdef PetscInt start = 0, end = 0
+ *         cdef PetscInt cpoint = asInt(point)
+ */
+
+  /* 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.DMPlex.getPointGlobalField", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+/* "PETSc/DMPlex.pyx":607
+ *     #
+ * 
  *     def setRefinementUniform(self, refinementUniform=True):             # <<<<<<<<<<<<<<
  *         cdef PetscBool flag = refinementUniform
  *         CHKERR( DMPlexSetRefinementUniform(self.dm, flag) )
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_137setRefinementUniform(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_136setRefinementUniform[] = "DMPlex.setRefinementUniform(self, refinementUniform=True)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_137setRefinementUniform(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_refinementUniform = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -223236,6 +242420,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_105setRefinementUniform(PyObj
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -223248,11 +242433,12 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_105setRefinementUniform(PyObj
         }
       }
       if (unlikely(kw_args > 0)) {
-        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRefinementUniform") < 0)) __PYX_ERR(42, 494, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRefinementUniform") < 0)) __PYX_ERR(42, 607, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -223261,20 +242447,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_105setRefinementUniform(PyObj
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setRefinementUniform", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 494, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setRefinementUniform", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 607, __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_104setRefinementUniform(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_refinementUniform);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_136setRefinementUniform(((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_104setRefinementUniform(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_refinementUniform) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_136setRefinementUniform(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_refinementUniform) {
   PetscBool __pyx_v_flag;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -223282,27 +242468,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_104setRefinementUniform(struc
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setRefinementUniform", 0);
 
-  /* "PETSc/DMPlex.pyx":495
+  /* "PETSc/DMPlex.pyx":608
  * 
  *     def setRefinementUniform(self, refinementUniform=True):
  *         cdef PetscBool flag = refinementUniform             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexSetRefinementUniform(self.dm, flag) )
  * 
  */
-  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_refinementUniform)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 495, __pyx_L1_error)
+  __pyx_t_1 = ((PetscBool)__Pyx_PyInt_As_PetscBool(__pyx_v_refinementUniform)); if (unlikely(PyErr_Occurred())) __PYX_ERR(42, 608, __pyx_L1_error)
   __pyx_v_flag = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":496
+  /* "PETSc/DMPlex.pyx":609
  *     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_ERR(42, 496, __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 == ((int)-1))) __PYX_ERR(42, 609, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":494
- *         return sec
+  /* "PETSc/DMPlex.pyx":607
+ *     #
  * 
  *     def setRefinementUniform(self, refinementUniform=True):             # <<<<<<<<<<<<<<
  *         cdef PetscBool flag = refinementUniform
@@ -223321,7 +242507,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_104setRefinementUniform(struc
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":498
+/* "PETSc/DMPlex.pyx":611
  *         CHKERR( DMPlexSetRefinementUniform(self.dm, flag) )
  * 
  *     def getRefinementUniform(self):             # <<<<<<<<<<<<<<
@@ -223330,23 +242516,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_104setRefinementUniform(struc
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_139getRefinementUniform(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_138getRefinementUniform[] = "DMPlex.getRefinementUniform(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_139getRefinementUniform(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_106getRefinementUniform(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_138getRefinementUniform(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_106getRefinementUniform(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_138getRefinementUniform(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
   PetscBool __pyx_v_flag;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -223354,39 +242540,39 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_106getRefinementUniform(struc
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getRefinementUniform", 0);
 
-  /* "PETSc/DMPlex.pyx":499
+  /* "PETSc/DMPlex.pyx":612
  * 
  *     def getRefinementUniform(self):
  *         cdef PetscBool flag = PETSC_FALSE             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexGetRefinementUniform(self.dm, &flag) )
- *         return <bint> flag
+ *         return toBool(flag)
  */
   __pyx_v_flag = PETSC_FALSE;
 
-  /* "PETSc/DMPlex.pyx":500
+  /* "PETSc/DMPlex.pyx":613
  *     def getRefinementUniform(self):
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( DMPlexGetRefinementUniform(self.dm, &flag) )             # <<<<<<<<<<<<<<
- *         return <bint> flag
+ *         return toBool(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_ERR(42, 500, __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 == ((int)-1))) __PYX_ERR(42, 613, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":501
+  /* "PETSc/DMPlex.pyx":614
  *         cdef PetscBool flag = PETSC_FALSE
  *         CHKERR( DMPlexGetRefinementUniform(self.dm, &flag) )
- *         return <bint> flag             # <<<<<<<<<<<<<<
+ *         return toBool(flag)             # <<<<<<<<<<<<<<
  * 
  *     def setRefinementLimit(self, refinementLimit):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_2 = __Pyx_PyInt_From_PetscBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 501, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toBool(__pyx_v_flag); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 614, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":498
+  /* "PETSc/DMPlex.pyx":611
  *         CHKERR( DMPlexSetRefinementUniform(self.dm, flag) )
  * 
  *     def getRefinementUniform(self):             # <<<<<<<<<<<<<<
@@ -223405,8 +242591,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_106getRefinementUniform(struc
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":503
- *         return <bint> flag
+/* "PETSc/DMPlex.pyx":616
+ *         return toBool(flag)
  * 
  *     def setRefinementLimit(self, refinementLimit):             # <<<<<<<<<<<<<<
  *         cdef PetscReal rval = asReal(refinementLimit)
@@ -223414,9 +242600,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_106getRefinementUniform(struc
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_141setRefinementLimit(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_140setRefinementLimit[] = "DMPlex.setRefinementLimit(self, refinementLimit)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_141setRefinementLimit(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_refinementLimit = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -223429,6 +242615,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_109setRefinementLimit(PyObjec
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -223439,7 +242626,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_109setRefinementLimit(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_ERR(42, 503, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setRefinementLimit") < 0)) __PYX_ERR(42, 616, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -223450,20 +242637,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_109setRefinementLimit(PyObjec
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setRefinementLimit", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 503, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setRefinementLimit", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 616, __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_108setRefinementLimit(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_refinementLimit);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_140setRefinementLimit(((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_108setRefinementLimit(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_refinementLimit) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_140setRefinementLimit(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_refinementLimit) {
   PetscReal __pyx_v_rval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -223471,27 +242658,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_108setRefinementLimit(struct
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("setRefinementLimit", 0);
 
-  /* "PETSc/DMPlex.pyx":504
+  /* "PETSc/DMPlex.pyx":617
  * 
  *     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_ERR(42, 504, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asReal(__pyx_v_refinementLimit); if (unlikely(__pyx_t_1 == ((PetscReal)-1.0) && PyErr_Occurred())) __PYX_ERR(42, 617, __pyx_L1_error)
   __pyx_v_rval = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":505
+  /* "PETSc/DMPlex.pyx":618
  *     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_ERR(42, 505, __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 == ((int)-1))) __PYX_ERR(42, 618, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":503
- *         return <bint> flag
+  /* "PETSc/DMPlex.pyx":616
+ *         return toBool(flag)
  * 
  *     def setRefinementLimit(self, refinementLimit):             # <<<<<<<<<<<<<<
  *         cdef PetscReal rval = asReal(refinementLimit)
@@ -223510,7 +242697,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_108setRefinementLimit(struct
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":507
+/* "PETSc/DMPlex.pyx":620
  *         CHKERR( DMPlexSetRefinementLimit(self.dm, rval) )
  * 
  *     def getRefinementLimit(self):             # <<<<<<<<<<<<<<
@@ -223519,23 +242706,23 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_108setRefinementLimit(struct
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_143getRefinementLimit(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_142getRefinementLimit[] = "DMPlex.getRefinementLimit(self)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_143getRefinementLimit(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_110getRefinementLimit(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_142getRefinementLimit(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self));
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_110getRefinementLimit(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_142getRefinementLimit(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self) {
   PetscReal __pyx_v_rval;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -223543,7 +242730,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_110getRefinementLimit(struct
   PyObject *__pyx_t_2 = NULL;
   __Pyx_RefNannySetupContext("getRefinementLimit", 0);
 
-  /* "PETSc/DMPlex.pyx":508
+  /* "PETSc/DMPlex.pyx":621
  * 
  *     def getRefinementLimit(self):
  *         cdef PetscReal rval = 0.0             # <<<<<<<<<<<<<<
@@ -223552,16 +242739,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_110getRefinementLimit(struct
  */
   __pyx_v_rval = 0.0;
 
-  /* "PETSc/DMPlex.pyx":509
+  /* "PETSc/DMPlex.pyx":622
  *     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_ERR(42, 509, __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 == ((int)-1))) __PYX_ERR(42, 622, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":510
+  /* "PETSc/DMPlex.pyx":623
  *         cdef PetscReal rval = 0.0
  *         CHKERR( DMPlexGetRefinementLimit(self.dm, &rval) )
  *         return toReal(rval)             # <<<<<<<<<<<<<<
@@ -223569,13 +242756,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_110getRefinementLimit(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_ERR(42, 510, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_rval); if (unlikely(!__pyx_t_2)) __PYX_ERR(42, 623, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_r = __pyx_t_2;
   __pyx_t_2 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":507
+  /* "PETSc/DMPlex.pyx":620
  *         CHKERR( DMPlexSetRefinementLimit(self.dm, rval) )
  * 
  *     def getRefinementLimit(self):             # <<<<<<<<<<<<<<
@@ -223594,7 +242781,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_110getRefinementLimit(struct
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":512
+/* "PETSc/DMPlex.pyx":625
  *         return toReal(rval)
  * 
  *     def getOrdering(self, otype):             # <<<<<<<<<<<<<<
@@ -223603,9 +242790,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_110getRefinementLimit(struct
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_145getOrdering(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_144getOrdering[] = "DMPlex.getOrdering(self, otype)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_145getOrdering(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_otype = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -223618,6 +242805,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_113getOrdering(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -223628,7 +242816,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_113getOrdering(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_ERR(42, 512, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "getOrdering") < 0)) __PYX_ERR(42, 625, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -223639,20 +242827,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_113getOrdering(PyObject *__py
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("getOrdering", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 512, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("getOrdering", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 625, __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_112getOrdering(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_otype);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_144getOrdering(((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_112getOrdering(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_otype) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_144getOrdering(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;
@@ -223663,7 +242851,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_112getOrdering(struct __pyx_o
   __Pyx_RefNannySetupContext("getOrdering", 0);
   __Pyx_INCREF(__pyx_v_otype);
 
-  /* "PETSc/DMPlex.pyx":513
+  /* "PETSc/DMPlex.pyx":626
  * 
  *     def getOrdering(self, otype):
  *         cdef PetscMatOrderingType cval = NULL             # <<<<<<<<<<<<<<
@@ -223672,7 +242860,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_112getOrdering(struct __pyx_o
  */
   __pyx_v_cval = NULL;
 
-  /* "PETSc/DMPlex.pyx":514
+  /* "PETSc/DMPlex.pyx":627
  *     def getOrdering(self, otype):
  *         cdef PetscMatOrderingType cval = NULL
  *         cdef PetscDMLabel label = NULL             # <<<<<<<<<<<<<<
@@ -223681,52 +242869,52 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_112getOrdering(struct __pyx_o
  */
   __pyx_v_label = NULL;
 
-  /* "PETSc/DMPlex.pyx":515
+  /* "PETSc/DMPlex.pyx":628
  *         cdef PetscMatOrderingType cval = NULL
  *         cdef PetscDMLabel label = NULL
  *         otype = str2bytes(otype, &cval)             # <<<<<<<<<<<<<<
  *         cdef IS perm = IS()
  *         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_ERR(42, 515, __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, 628, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF_SET(__pyx_v_otype, __pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":516
+  /* "PETSc/DMPlex.pyx":629
  *         cdef PetscDMLabel label = NULL
  *         otype = str2bytes(otype, &cval)
  *         cdef IS perm = IS()             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexGetOrdering(self.dm, cval, label, &perm.iset) )
  *         return perm
  */
-  __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_t_1 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 629, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_perm = ((struct PyPetscISObject *)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/DMPlex.pyx":517
+  /* "PETSc/DMPlex.pyx":630
  *         otype = str2bytes(otype, &cval)
  *         cdef IS perm = IS()
  *         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_label, (&__pyx_v_perm->iset))); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(42, 517, __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 == ((int)-1))) __PYX_ERR(42, 630, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":518
+  /* "PETSc/DMPlex.pyx":631
  *         cdef IS perm = IS()
  *         CHKERR( DMPlexGetOrdering(self.dm, cval, label, &perm.iset) )
  *         return perm             # <<<<<<<<<<<<<<
  * 
- *     def permute(self, IS perm not None):
+ *     def permute(self, IS perm):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_perm));
   __pyx_r = ((PyObject *)__pyx_v_perm);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":512
+  /* "PETSc/DMPlex.pyx":625
  *         return toReal(rval)
  * 
  *     def getOrdering(self, otype):             # <<<<<<<<<<<<<<
@@ -223747,18 +242935,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_112getOrdering(struct __pyx_o
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":520
+/* "PETSc/DMPlex.pyx":633
  *         return perm
  * 
- *     def permute(self, IS perm not None):             # <<<<<<<<<<<<<<
+ *     def permute(self, IS perm):             # <<<<<<<<<<<<<<
  *         cdef DMPlex dm = <DMPlex>type(self)()
  *         CHKERR( DMPlexPermute(self.dm, perm.iset, &dm.dm) )
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_147permute(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_146permute[] = "DMPlex.permute(self, IS perm)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_147permute(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   struct PyPetscISObject *__pyx_v_perm = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -223771,6 +242959,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_115permute(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -223781,7 +242970,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_115permute(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_ERR(42, 520, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "permute") < 0)) __PYX_ERR(42, 633, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -223792,14 +242981,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_115permute(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_ERR(42, 520, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("permute", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 633, __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_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);
+  if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_perm), __pyx_ptype_8petsc4py_5PETSc_IS, 0, "perm", 0))) __PYX_ERR(42, 633, __pyx_L1_error)
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_146permute(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_perm);
 
   /* function exit code */
   goto __pyx_L0;
@@ -223810,7 +242999,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_115permute(PyObject *__pyx_v_
   return __pyx_r;
 }
 
-static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_114permute(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, struct PyPetscISObject *__pyx_v_perm) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_146permute(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
@@ -223820,16 +243009,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_114permute(struct __pyx_obj_8
   int __pyx_t_4;
   __Pyx_RefNannySetupContext("permute", 0);
 
-  /* "PETSc/DMPlex.pyx":521
+  /* "PETSc/DMPlex.pyx":634
  * 
- *     def permute(self, IS perm not None):
+ *     def permute(self, IS perm):
  *         cdef DMPlex dm = <DMPlex>type(self)()             # <<<<<<<<<<<<<<
  *         CHKERR( DMPlexPermute(self.dm, perm.iset, &dm.dm) )
  *         return dm
  */
   __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))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -223839,10 +243028,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_114permute(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_ERR(42, 521, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallOneArg(__pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 634, __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(42, 521, __pyx_L1_error)
+    __pyx_t_1 = __Pyx_PyObject_CallNoArg(__pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 634, __pyx_L1_error)
   }
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
@@ -223852,16 +243041,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_114permute(struct __pyx_obj_8
   __pyx_v_dm = ((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_t_2);
   __pyx_t_2 = 0;
 
-  /* "PETSc/DMPlex.pyx":522
- *     def permute(self, IS perm not None):
+  /* "PETSc/DMPlex.pyx":635
+ *     def permute(self, IS perm):
  *         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_ERR(42, 522, __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 == ((int)-1))) __PYX_ERR(42, 635, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":523
+  /* "PETSc/DMPlex.pyx":636
  *         cdef DMPlex dm = <DMPlex>type(self)()
  *         CHKERR( DMPlexPermute(self.dm, perm.iset, &dm.dm) )
  *         return dm             # <<<<<<<<<<<<<<
@@ -223873,10 +243062,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_114permute(struct __pyx_obj_8
   __pyx_r = ((PyObject *)__pyx_v_dm);
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":520
+  /* "PETSc/DMPlex.pyx":633
  *         return perm
  * 
- *     def permute(self, IS perm not None):             # <<<<<<<<<<<<<<
+ *     def permute(self, IS perm):             # <<<<<<<<<<<<<<
  *         cdef DMPlex dm = <DMPlex>type(self)()
  *         CHKERR( DMPlexPermute(self.dm, perm.iset, &dm.dm) )
  */
@@ -223895,7 +243084,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_114permute(struct __pyx_obj_8
   return __pyx_r;
 }
 
-/* "PETSc/DMPlex.pyx":527
+/* "PETSc/DMPlex.pyx":640
  *     #
  * 
  *     def computeCellGeometryFVM(self, cell):             # <<<<<<<<<<<<<<
@@ -223904,9 +243093,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_114permute(struct __pyx_obj_8
  */
 
 /* Python wrapper */
-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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_149computeCellGeometryFVM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_148computeCellGeometryFVM[] = "DMPlex.computeCellGeometryFVM(self, cell)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_149computeCellGeometryFVM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_cell = 0;
   PyObject *__pyx_r = 0;
   __Pyx_RefNannyDeclarations
@@ -223919,6 +243108,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_117computeCellGeometryFVM(PyO
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -223929,7 +243119,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_117computeCellGeometryFVM(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_ERR(42, 527, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "computeCellGeometryFVM") < 0)) __PYX_ERR(42, 640, __pyx_L3_error)
       }
     } else if (PyTuple_GET_SIZE(__pyx_args) != 1) {
       goto __pyx_L5_argtuple_error;
@@ -223940,20 +243130,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_117computeCellGeometryFVM(PyO
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("computeCellGeometryFVM", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 527, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("computeCellGeometryFVM", 1, 1, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 640, __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_116computeCellGeometryFVM(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_cell);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_148computeCellGeometryFVM(((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_116computeCellGeometryFVM(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_cell) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_148computeCellGeometryFVM(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;
@@ -223969,7 +243159,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_116computeCellGeometryFVM(str
   PyObject *__pyx_t_6 = NULL;
   __Pyx_RefNannySetupContext("computeCellGeometryFVM", 0);
 
-  /* "PETSc/DMPlex.pyx":528
+  /* "PETSc/DMPlex.pyx":641
  * 
  *     def computeCellGeometryFVM(self, cell):
  *         cdef PetscInt dim = 0             # <<<<<<<<<<<<<<
@@ -223978,26 +243168,26 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_116computeCellGeometryFVM(str
  */
   __pyx_v_dim = 0;
 
-  /* "PETSc/DMPlex.pyx":529
+  /* "PETSc/DMPlex.pyx":642
  *     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 == -1L && PyErr_Occurred())) __PYX_ERR(42, 529, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_cell); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(42, 642, __pyx_L1_error)
   __pyx_v_ccell = __pyx_t_1;
 
-  /* "PETSc/DMPlex.pyx":530
+  /* "PETSc/DMPlex.pyx":643
  *         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_ERR(42, 530, __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 == ((int)-1))) __PYX_ERR(42, 643, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":531
+  /* "PETSc/DMPlex.pyx":644
  *         cdef PetscInt ccell = asInt(cell)
  *         CHKERR( DMGetDimension(self.dm, &dim) )
  *         cdef PetscReal vol = 0, centroid[3], normal[3]             # <<<<<<<<<<<<<<
@@ -224006,27 +243196,30 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_116computeCellGeometryFVM(str
  */
   __pyx_v_vol = 0.0;
 
-  /* "PETSc/DMPlex.pyx":532
+  /* "PETSc/DMPlex.pyx":645
  *         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_ERR(42, 532, __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 == ((int)-1))) __PYX_ERR(42, 645, __pyx_L1_error)
 
-  /* "PETSc/DMPlex.pyx":533
+  /* "PETSc/DMPlex.pyx":646
  *         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))             # <<<<<<<<<<<<<<
+ * 
+ *     def constructGhostCells(self, labelName=None):
  */
   __Pyx_XDECREF(__pyx_r);
-  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_vol); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 533, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_toReal(__pyx_v_vol); if (unlikely(!__pyx_t_3)) __PYX_ERR(42, 646, __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_ERR(42, 533, __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, 646, __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_ERR(42, 533, __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, 646, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(42, 533, __pyx_L1_error)
+  __pyx_t_6 = PyTuple_New(3); if (unlikely(!__pyx_t_6)) __PYX_ERR(42, 646, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
   __Pyx_GIVEREF(__pyx_t_3);
   PyTuple_SET_ITEM(__pyx_t_6, 0, __pyx_t_3);
@@ -224041,7 +243234,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_116computeCellGeometryFVM(str
   __pyx_t_6 = 0;
   goto __pyx_L0;
 
-  /* "PETSc/DMPlex.pyx":527
+  /* "PETSc/DMPlex.pyx":640
  *     #
  * 
  *     def computeCellGeometryFVM(self, cell):             # <<<<<<<<<<<<<<
@@ -224063,6 +243256,171 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_116computeCellGeometryFVM(str
   return __pyx_r;
 }
 
+/* "PETSc/DMPlex.pyx":648
+ *         return (toReal(vol), array_r(dim, centroid), array_r(dim, normal))
+ * 
+ *     def constructGhostCells(self, labelName=None):             # <<<<<<<<<<<<<<
+ *         cdef const_char *cname = NULL
+ *         labelName = str2bytes(labelName, &cname)
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_151constructGhostCells(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_6DMPlex_150constructGhostCells[] = "DMPlex.constructGhostCells(self, labelName=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_6DMPlex_151constructGhostCells(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_labelName = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("constructGhostCells (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_labelName,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);
+        CYTHON_FALLTHROUGH;
+        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_labelName);
+          if (value) { values[0] = value; kw_args--; }
+        }
+      }
+      if (unlikely(kw_args > 0)) {
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "constructGhostCells") < 0)) __PYX_ERR(42, 648, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        case  0: break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_labelName = values[0];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("constructGhostCells", 0, 0, 1, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(42, 648, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.constructGhostCells", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_6DMPlex_150constructGhostCells(((struct __pyx_obj_8petsc4py_5PETSc_DMPlex *)__pyx_v_self), __pyx_v_labelName);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_6DMPlex_150constructGhostCells(struct __pyx_obj_8petsc4py_5PETSc_DMPlex *__pyx_v_self, PyObject *__pyx_v_labelName) {
+  const char *__pyx_v_cname;
+  PetscInt __pyx_v_numGhostCells;
+  DM __pyx_v_dmGhosted;
+  PyObject *__pyx_r = NULL;
+  __Pyx_RefNannyDeclarations
+  PyObject *__pyx_t_1 = NULL;
+  int __pyx_t_2;
+  __Pyx_RefNannySetupContext("constructGhostCells", 0);
+  __Pyx_INCREF(__pyx_v_labelName);
+
+  /* "PETSc/DMPlex.pyx":649
+ * 
+ *     def constructGhostCells(self, labelName=None):
+ *         cdef const_char *cname = NULL             # <<<<<<<<<<<<<<
+ *         labelName = str2bytes(labelName, &cname)
+ *         cdef PetscInt numGhostCells = 0
+ */
+  __pyx_v_cname = NULL;
+
+  /* "PETSc/DMPlex.pyx":650
+ *     def constructGhostCells(self, labelName=None):
+ *         cdef const_char *cname = NULL
+ *         labelName = str2bytes(labelName, &cname)             # <<<<<<<<<<<<<<
+ *         cdef PetscInt numGhostCells = 0
+ *         cdef PetscDM dmGhosted = NULL
+ */
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_str2bytes(__pyx_v_labelName, (&__pyx_v_cname)); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 650, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __Pyx_DECREF_SET(__pyx_v_labelName, __pyx_t_1);
+  __pyx_t_1 = 0;
+
+  /* "PETSc/DMPlex.pyx":651
+ *         cdef const_char *cname = NULL
+ *         labelName = str2bytes(labelName, &cname)
+ *         cdef PetscInt numGhostCells = 0             # <<<<<<<<<<<<<<
+ *         cdef PetscDM dmGhosted = NULL
+ *         CHKERR( DMPlexConstructGhostCells(self.dm, cname, &numGhostCells, &dmGhosted))
+ */
+  __pyx_v_numGhostCells = 0;
+
+  /* "PETSc/DMPlex.pyx":652
+ *         labelName = str2bytes(labelName, &cname)
+ *         cdef PetscInt numGhostCells = 0
+ *         cdef PetscDM dmGhosted = NULL             # <<<<<<<<<<<<<<
+ *         CHKERR( DMPlexConstructGhostCells(self.dm, cname, &numGhostCells, &dmGhosted))
+ *         PetscCLEAR(self.obj); self.dm = dmGhosted
+ */
+  __pyx_v_dmGhosted = NULL;
+
+  /* "PETSc/DMPlex.pyx":653
+ *         cdef PetscInt numGhostCells = 0
+ *         cdef PetscDM dmGhosted = NULL
+ *         CHKERR( DMPlexConstructGhostCells(self.dm, cname, &numGhostCells, &dmGhosted))             # <<<<<<<<<<<<<<
+ *         PetscCLEAR(self.obj); self.dm = dmGhosted
+ *         return toInt(numGhostCells)
+ */
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMPlexConstructGhostCells(__pyx_v_self->__pyx_base.dm, __pyx_v_cname, (&__pyx_v_numGhostCells), (&__pyx_v_dmGhosted))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(42, 653, __pyx_L1_error)
+
+  /* "PETSc/DMPlex.pyx":654
+ *         cdef PetscDM dmGhosted = NULL
+ *         CHKERR( DMPlexConstructGhostCells(self.dm, cname, &numGhostCells, &dmGhosted))
+ *         PetscCLEAR(self.obj); self.dm = dmGhosted             # <<<<<<<<<<<<<<
+ *         return toInt(numGhostCells)
+ */
+  __pyx_f_8petsc4py_5PETSc_PetscCLEAR(__pyx_v_self->__pyx_base.__pyx_base.obj);
+  __pyx_v_self->__pyx_base.dm = __pyx_v_dmGhosted;
+
+  /* "PETSc/DMPlex.pyx":655
+ *         CHKERR( DMPlexConstructGhostCells(self.dm, cname, &numGhostCells, &dmGhosted))
+ *         PetscCLEAR(self.obj); self.dm = dmGhosted
+ *         return toInt(numGhostCells)             # <<<<<<<<<<<<<<
+ */
+  __Pyx_XDECREF(__pyx_r);
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_toInt(__pyx_v_numGhostCells); if (unlikely(!__pyx_t_1)) __PYX_ERR(42, 655, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_r = __pyx_t_1;
+  __pyx_t_1 = 0;
+  goto __pyx_L0;
+
+  /* "PETSc/DMPlex.pyx":648
+ *         return (toReal(vol), array_r(dim, centroid), array_r(dim, normal))
+ * 
+ *     def constructGhostCells(self, labelName=None):             # <<<<<<<<<<<<<<
+ *         cdef const_char *cname = NULL
+ *         labelName = str2bytes(labelName, &cname)
+ */
+
+  /* function exit code */
+  __pyx_L1_error:;
+  __Pyx_XDECREF(__pyx_t_1);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMPlex.constructGhostCells", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __pyx_r = NULL;
+  __pyx_L0:;
+  __Pyx_XDECREF(__pyx_v_labelName);
+  __Pyx_XGIVEREF(__pyx_r);
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
 /* "PETSc/DMComposite.pyx":5
  * cdef class DMComposite(DM):
  * 
@@ -224088,6 +243446,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11DMComposite_1create(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -224105,6 +243464,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11DMComposite_1create(PyObject *__pyx
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -224161,7 +243521,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_ERR(43, 8, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeCreate(__pyx_v_ccomm, (&__pyx_v_newdm))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(43, 8, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":9
  *         cdef PetscDM newdm = NULL
@@ -224178,7 +243538,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_create(struct __pyx_obj
  *         PetscCLEAR(self.obj); self.dm = newdm
  *         return self             # <<<<<<<<<<<<<<
  * 
- *     def addDM(self, DM dm not None, *args):
+ *     def addDM(self, DM dm, *args):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
@@ -224206,7 +243566,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_create(struct __pyx_obj
 /* "PETSc/DMComposite.pyx":12
  *         return self
  * 
- *     def addDM(self, DM dm not None, *args):             # <<<<<<<<<<<<<<
+ *     def addDM(self, DM dm, *args):             # <<<<<<<<<<<<<<
  *         """Add DM to composite"""
  *         CHKERR( DMCompositeAddDM(self.dm, dm.dm) )
  */
@@ -224239,6 +243599,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11DMComposite_3addDM(PyObject *__pyx_
       switch (pos_args) {
         default:
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
       }
       kw_args = PyDict_Size(__pyx_kwds);
@@ -224292,13 +243653,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_2addDM(struct __pyx_obj
   __Pyx_INCREF((PyObject *)__pyx_v_dm);
 
   /* "PETSc/DMComposite.pyx":14
- *     def addDM(self, DM dm not None, *args):
+ *     def addDM(self, DM dm, *args):
  *         """Add DM to composite"""
  *         CHKERR( DMCompositeAddDM(self.dm, dm.dm) )             # <<<<<<<<<<<<<<
  *         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_ERR(43, 14, __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 == ((int)-1))) __PYX_ERR(43, 14, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":16
  *         CHKERR( DMCompositeAddDM(self.dm, dm.dm) )
@@ -224310,7 +243671,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_2addDM(struct __pyx_obj
   __pyx_t_2 = __pyx_v_args; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
   for (;;) {
     if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     __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_ERR(43, 16, __pyx_L1_error)
@@ -224339,7 +243700,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_ERR(43, 18, __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 == ((int)-1))) __PYX_ERR(43, 18, __pyx_L1_error)
 
     /* "PETSc/DMComposite.pyx":16
  *         CHKERR( DMCompositeAddDM(self.dm, dm.dm) )
@@ -224354,7 +243715,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_2addDM(struct __pyx_obj
   /* "PETSc/DMComposite.pyx":12
  *         return self
  * 
- *     def addDM(self, DM dm not None, *args):             # <<<<<<<<<<<<<<
+ *     def addDM(self, DM dm, *args):             # <<<<<<<<<<<<<<
  *         """Add DM to composite"""
  *         CHKERR( DMCompositeAddDM(self.dm, dm.dm) )
  */
@@ -224424,7 +243785,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_ERR(43, 23, __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 == ((int)-1))) __PYX_ERR(43, 23, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":24
  *         cdef PetscInt n = 0
@@ -224525,7 +243886,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_6getEntries(struct __py
  *         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_ERR(43, 31, __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 == ((int)-1))) __PYX_ERR(43, 31, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":32
  *         cdef PetscDM *cdms = NULL
@@ -224549,7 +243910,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_6getEntries(struct __py
  *         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_ERR(43, 33, __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 == ((int)-1))) __PYX_ERR(43, 33, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":34
  *         cdef object tmp = oarray_p(empty_p(n), NULL, <void**>&cdms)
@@ -224624,7 +243985,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_ERR(43, 40, __pyx_L1_error)
+    __pyx_t_5 = __Pyx_PyList_Append(__pyx_v_entries, ((PyObject *)__pyx_v_entry)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(43, 40, __pyx_L1_error)
   }
 
   /* "PETSc/DMComposite.pyx":41
@@ -224632,7 +243993,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_6getEntries(struct __py
  *             entries.append(entry)
  *         return tuple(entries)             # <<<<<<<<<<<<<<
  * 
- *     def scatter(self, Vec gvec not None, lvecs):
+ *     def scatter(self, Vec gvec, lvecs):
  */
   __Pyx_XDECREF(__pyx_r);
   __pyx_t_2 = PyList_AsTuple(__pyx_v_entries); if (unlikely(!__pyx_t_2)) __PYX_ERR(43, 41, __pyx_L1_error)
@@ -224667,7 +244028,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_6getEntries(struct __py
 /* "PETSc/DMComposite.pyx":43
  *         return tuple(entries)
  * 
- *     def scatter(self, Vec gvec not None, lvecs):             # <<<<<<<<<<<<<<
+ *     def scatter(self, Vec gvec, lvecs):             # <<<<<<<<<<<<<<
  *         """Scatter coupled global vector into split local vectors"""
  *         cdef PetscInt i, n = 0
  */
@@ -224689,7 +244050,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11DMComposite_9scatter(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -224698,6 +244061,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11DMComposite_9scatter(PyObject *__py
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_gvec)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (likely((values[1] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_lvecs)) != 0)) kw_args--;
         else {
@@ -224751,7 +244115,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_8scatter(struct __pyx_o
   __Pyx_RefNannySetupContext("scatter", 0);
 
   /* "PETSc/DMComposite.pyx":45
- *     def scatter(self, Vec gvec not None, lvecs):
+ *     def scatter(self, Vec gvec, lvecs):
  *         """Scatter coupled global vector into split local vectors"""
  *         cdef PetscInt i, n = 0             # <<<<<<<<<<<<<<
  *         CHKERR( DMCompositeGetNumberDM(self.dm, &n) )
@@ -224766,7 +244130,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_8scatter(struct __pyx_o
  *         cdef PetscVec *clvecs = NULL
  *         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_ERR(43, 46, __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 == ((int)-1))) __PYX_ERR(43, 46, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":47
  *         cdef PetscInt i, n = 0
@@ -224822,14 +244186,14 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_8scatter(struct __pyx_o
  *             clvecs[i] = (<Vec?>lvecs[<Py_ssize_t>i]).vec
  *         CHKERR( DMCompositeScatterArray(self.dm, gvec.vec, clvecs) )             # <<<<<<<<<<<<<<
  * 
- *     def gather(self, Vec gvec not None, imode, lvecs):
+ *     def gather(self, Vec gvec, 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_ERR(43, 51, __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 == ((int)-1))) __PYX_ERR(43, 51, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":43
  *         return tuple(entries)
  * 
- *     def scatter(self, Vec gvec not None, lvecs):             # <<<<<<<<<<<<<<
+ *     def scatter(self, Vec gvec, lvecs):             # <<<<<<<<<<<<<<
  *         """Scatter coupled global vector into split local vectors"""
  *         cdef PetscInt i, n = 0
  */
@@ -224852,7 +244216,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_8scatter(struct __pyx_o
 /* "PETSc/DMComposite.pyx":53
  *         CHKERR( DMCompositeScatterArray(self.dm, gvec.vec, clvecs) )
  * 
- *     def gather(self, Vec gvec not None, imode, lvecs):             # <<<<<<<<<<<<<<
+ *     def gather(self, Vec gvec, imode, lvecs):             # <<<<<<<<<<<<<<
  *         """Gather split local vectors into coupled global vector"""
  *         cdef PetscInsertMode cimode = insertmode(imode)
  */
@@ -224875,8 +244239,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11DMComposite_11gather(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -224885,11 +244252,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11DMComposite_11gather(PyObject *__py
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_gvec)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(43, 53, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (likely((values[2] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_lvecs)) != 0)) kw_args--;
         else {
@@ -224947,13 +244316,13 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_10gather(struct __pyx_o
   __Pyx_RefNannySetupContext("gather", 0);
 
   /* "PETSc/DMComposite.pyx":55
- *     def gather(self, Vec gvec not None, imode, lvecs):
+ *     def gather(self, Vec gvec, imode, lvecs):
  *         """Gather split local vectors into coupled global vector"""
  *         cdef PetscInsertMode cimode = insertmode(imode)             # <<<<<<<<<<<<<<
  *         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)-1L))) __PYX_ERR(43, 55, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_insertmode(__pyx_v_imode); if (unlikely(__pyx_t_1 == ((InsertMode)((InsertMode)-1L)))) __PYX_ERR(43, 55, __pyx_L1_error)
   __pyx_v_cimode = __pyx_t_1;
 
   /* "PETSc/DMComposite.pyx":56
@@ -224972,7 +244341,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_10gather(struct __pyx_o
  *         cdef PetscVec *clvecs = NULL
  *         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_ERR(43, 57, __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 == ((int)-1))) __PYX_ERR(43, 57, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":58
  *         cdef PetscInt i, n = 0
@@ -225003,7 +244372,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_10gather(struct __pyx_o
  *         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) )
+ *         CHKERR( DMCompositeGatherArray(self.dm, cimode, gvec.vec, clvecs) )
  */
   __pyx_t_5 = __pyx_v_n;
   for (__pyx_v_i = 0; __pyx_v_i < __pyx_t_5; __pyx_v_i++) {
@@ -225012,7 +244381,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_10gather(struct __pyx_o
  *         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) )
+ *         CHKERR( DMCompositeGatherArray(self.dm, cimode, gvec.vec, 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)) __PYX_ERR(43, 61, __pyx_L1_error)
@@ -225026,16 +244395,16 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_10gather(struct __pyx_o
   /* "PETSc/DMComposite.pyx":62
  *         for i from 0 <= i < n:
  *             clvecs[i] = (<Vec?>lvecs[<Py_ssize_t>i]).vec
- *         CHKERR( DMCompositeGatherArray(self.dm, gvec.vec, cimode, clvecs) )             # <<<<<<<<<<<<<<
+ *         CHKERR( DMCompositeGatherArray(self.dm, cimode, gvec.vec, clvecs) )             # <<<<<<<<<<<<<<
  * 
  *     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_ERR(43, 62, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMCompositeGatherArray(__pyx_v_self->__pyx_base.dm, __pyx_v_cimode, __pyx_v_gvec->vec, __pyx_v_clvecs)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(43, 62, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":53
  *         CHKERR( DMCompositeScatterArray(self.dm, gvec.vec, clvecs) )
  * 
- *     def gather(self, Vec gvec not None, imode, lvecs):             # <<<<<<<<<<<<<<
+ *     def gather(self, Vec gvec, imode, lvecs):             # <<<<<<<<<<<<<<
  *         """Gather split local vectors into coupled global vector"""
  *         cdef PetscInsertMode cimode = insertmode(imode)
  */
@@ -225056,7 +244425,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_10gather(struct __pyx_o
 }
 
 /* "PETSc/DMComposite.pyx":64
- *         CHKERR( DMCompositeGatherArray(self.dm, gvec.vec, cimode, clvecs) )
+ *         CHKERR( DMCompositeGatherArray(self.dm, cimode, gvec.vec, clvecs) )
  * 
  *     def getGlobalISs(self):             # <<<<<<<<<<<<<<
  *         cdef PetscInt i, n = 0
@@ -225118,7 +244487,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_ERR(43, 67, __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 == ((int)-1))) __PYX_ERR(43, 67, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":68
  *         cdef PetscIS *cis = NULL
@@ -225127,7 +244496,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_ERR(43, 68, __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 == ((int)-1))) __PYX_ERR(43, 68, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":69
  *         CHKERR( DMCompositeGetNumberDM(self.dm, &n) )
@@ -225165,7 +244534,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_ERR(43, 71, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISDestroy((&(__pyx_v_cis[__pyx_v_i])))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(43, 71, __pyx_L1_error)
   }
 
   /* "PETSc/DMComposite.pyx":72
@@ -225175,7 +244544,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_ERR(43, 72, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscFree(__pyx_v_cis)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(43, 72, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":73
  *             CHKERR( ISDestroy(&cis[i]) )
@@ -225190,7 +244559,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_12getGlobalISs(struct _
   goto __pyx_L0;
 
   /* "PETSc/DMComposite.pyx":64
- *         CHKERR( DMCompositeGatherArray(self.dm, gvec.vec, cimode, clvecs) )
+ *         CHKERR( DMCompositeGatherArray(self.dm, cimode, gvec.vec, clvecs) )
  * 
  *     def getGlobalISs(self):             # <<<<<<<<<<<<<<
  *         cdef PetscInt i, n = 0
@@ -225273,7 +244642,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_ERR(43, 78, __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 == ((int)-1))) __PYX_ERR(43, 78, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":79
  *         cdef PetscIS *cis = NULL
@@ -225282,7 +244651,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_ERR(43, 79, __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 == ((int)-1))) __PYX_ERR(43, 79, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":80
  *         CHKERR( DMCompositeGetNumberDM(self.dm, &n) )
@@ -225320,7 +244689,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_ERR(43, 82, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISDestroy((&(__pyx_v_cis[__pyx_v_i])))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(43, 82, __pyx_L1_error)
   }
 
   /* "PETSc/DMComposite.pyx":83
@@ -225330,7 +244699,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_ERR(43, 83, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscFree(__pyx_v_cis)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(43, 83, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":84
  *             CHKERR( ISDestroy(&cis[i]) )
@@ -225428,7 +244797,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_ERR(43, 89, __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 == ((int)-1))) __PYX_ERR(43, 89, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":90
  *         cdef PetscLGMap *clgm = NULL
@@ -225437,7 +244806,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_ERR(43, 90, __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 == ((int)-1))) __PYX_ERR(43, 90, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":91
  *         CHKERR( DMCompositeGetNumberDM(self.dm, &n) )
@@ -225475,7 +244844,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_ERR(43, 93, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(ISLocalToGlobalMappingDestroy((&(__pyx_v_clgm[__pyx_v_i])))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(43, 93, __pyx_L1_error)
   }
 
   /* "PETSc/DMComposite.pyx":94
@@ -225485,14 +244854,14 @@ 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_ERR(43, 94, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscFree(__pyx_v_clgm)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(43, 94, __pyx_L1_error)
 
   /* "PETSc/DMComposite.pyx":95
  *             CHKERR( ISLocalToGlobalMappingDestroy(&clgm[i]) )
  *         CHKERR( PetscFree(clgm) )
  *         return lgms             # <<<<<<<<<<<<<<
  * 
- *     def getAccess(self, Vec gvec not None, locs=None):
+ *     def getAccess(self, Vec gvec, locs=None):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(__pyx_v_lgms);
@@ -225523,7 +244892,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_16getLGMaps(struct __py
 /* "PETSc/DMComposite.pyx":97
  *         return lgms
  * 
- *     def getAccess(self, Vec gvec not None, locs=None):             # <<<<<<<<<<<<<<
+ *     def getAccess(self, Vec gvec, locs=None):             # <<<<<<<<<<<<<<
  *         """Get access to specified parts of global vector.
  * 
  */
@@ -225546,7 +244915,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11DMComposite_19getAccess(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -225555,6 +244926,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11DMComposite_19getAccess(PyObject *_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_gvec)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_locs);
@@ -225567,6 +244939,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11DMComposite_19getAccess(PyObject *_
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -225629,7 +245002,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_11DMComposite_18getAccess(struct __py
   /* "PETSc/DMComposite.pyx":97
  *         return lgms
  * 
- *     def getAccess(self, Vec gvec not None, locs=None):             # <<<<<<<<<<<<<<
+ *     def getAccess(self, Vec gvec, locs=None):             # <<<<<<<<<<<<<<
  *         """Get access to specified parts of global vector.
  * 
  */
@@ -225671,6 +245044,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_1create(PyObject *__pyx_v_se
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -225688,6 +245062,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_1create(PyObject *__pyx_v_se
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -225744,7 +245119,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_ERR(44, 6, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellCreate(__pyx_v_ccomm, (&__pyx_v_newdm))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(44, 6, __pyx_L1_error)
 
   /* "PETSc/DMShell.pyx":7
  *         cdef PetscDM newdm = NULL
@@ -225761,7 +245136,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_create(struct __pyx_obj_8pet
  *         PetscCLEAR(self.obj); self.dm = newdm
  *         return self             # <<<<<<<<<<<<<<
  * 
- *     def setMatrix(self, Mat mat not None):
+ *     def setMatrix(self, Mat mat):
  */
   __Pyx_XDECREF(__pyx_r);
   __Pyx_INCREF(((PyObject *)__pyx_v_self));
@@ -225789,7 +245164,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_create(struct __pyx_obj_8pet
 /* "PETSc/DMShell.pyx":10
  *         return self
  * 
- *     def setMatrix(self, Mat mat not None):             # <<<<<<<<<<<<<<
+ *     def setMatrix(self, Mat mat):             # <<<<<<<<<<<<<<
  *         CHKERR( DMShellSetMatrix(self.dm, mat.mat) )
  * 
  */
@@ -225810,6 +245185,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_3setMatrix(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -225857,17 +245233,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_2setMatrix(struct __pyx_obj_
 
   /* "PETSc/DMShell.pyx":11
  * 
- *     def setMatrix(self, Mat mat not None):
+ *     def setMatrix(self, Mat mat):
  *         CHKERR( DMShellSetMatrix(self.dm, mat.mat) )             # <<<<<<<<<<<<<<
  * 
- *     def setGlobalVector(self, Vec gv not None):
+ *     def setGlobalVector(self, Vec gv):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetMatrix(__pyx_v_self->__pyx_base.dm, __pyx_v_mat->mat)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(44, 11, __pyx_L1_error)
 
   /* "PETSc/DMShell.pyx":10
  *         return self
  * 
- *     def setMatrix(self, Mat mat not None):             # <<<<<<<<<<<<<<
+ *     def setMatrix(self, Mat mat):             # <<<<<<<<<<<<<<
  *         CHKERR( DMShellSetMatrix(self.dm, mat.mat) )
  * 
  */
@@ -225887,7 +245263,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_2setMatrix(struct __pyx_obj_
 /* "PETSc/DMShell.pyx":13
  *         CHKERR( DMShellSetMatrix(self.dm, mat.mat) )
  * 
- *     def setGlobalVector(self, Vec gv not None):             # <<<<<<<<<<<<<<
+ *     def setGlobalVector(self, Vec gv):             # <<<<<<<<<<<<<<
  *         CHKERR( DMShellSetGlobalVector(self.dm, gv.vec) )
  * 
  */
@@ -225908,6 +245284,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_5setGlobalVector(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -225955,17 +245332,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_4setGlobalVector(struct __py
 
   /* "PETSc/DMShell.pyx":14
  * 
- *     def setGlobalVector(self, Vec gv not None):
+ *     def setGlobalVector(self, Vec gv):
  *         CHKERR( DMShellSetGlobalVector(self.dm, gv.vec) )             # <<<<<<<<<<<<<<
  * 
- *     def setLocalVector(self, Vec lv not None):
+ *     def setLocalVector(self, Vec lv):
  */
-  __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)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetGlobalVector(__pyx_v_self->__pyx_base.dm, __pyx_v_gv->vec)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(44, 14, __pyx_L1_error)
 
   /* "PETSc/DMShell.pyx":13
  *         CHKERR( DMShellSetMatrix(self.dm, mat.mat) )
  * 
- *     def setGlobalVector(self, Vec gv not None):             # <<<<<<<<<<<<<<
+ *     def setGlobalVector(self, Vec gv):             # <<<<<<<<<<<<<<
  *         CHKERR( DMShellSetGlobalVector(self.dm, gv.vec) )
  * 
  */
@@ -225985,7 +245362,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_4setGlobalVector(struct __py
 /* "PETSc/DMShell.pyx":16
  *         CHKERR( DMShellSetGlobalVector(self.dm, gv.vec) )
  * 
- *     def setLocalVector(self, Vec lv not None):             # <<<<<<<<<<<<<<
+ *     def setLocalVector(self, Vec lv):             # <<<<<<<<<<<<<<
  *         CHKERR( DMShellSetLocalVector(self.dm, lv.vec) )
  * 
  */
@@ -226006,6 +245383,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_7setLocalVector(PyObject *__
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -226053,17 +245431,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_6setLocalVector(struct __pyx
 
   /* "PETSc/DMShell.pyx":17
  * 
- *     def setLocalVector(self, Vec lv not None):
+ *     def setLocalVector(self, Vec lv):
  *         CHKERR( DMShellSetLocalVector(self.dm, lv.vec) )             # <<<<<<<<<<<<<<
  * 
  *     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_ERR(44, 17, __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 == ((int)-1))) __PYX_ERR(44, 17, __pyx_L1_error)
 
   /* "PETSc/DMShell.pyx":16
  *         CHKERR( DMShellSetGlobalVector(self.dm, gv.vec) )
  * 
- *     def setLocalVector(self, Vec lv not None):             # <<<<<<<<<<<<<<
+ *     def setLocalVector(self, Vec lv):             # <<<<<<<<<<<<<<
  *         CHKERR( DMShellSetLocalVector(self.dm, lv.vec) )
  * 
  */
@@ -226108,8 +245486,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_9setCreateGlobalVector(PyObj
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -226118,11 +245499,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_9setCreateGlobalVector(PyObj
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_create_gvec)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -226135,7 +245518,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_9setCreateGlobalVector(PyObj
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -226207,7 +245592,7 @@ 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_ERR(44, 22, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyDict_NewPresized(0); 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;
@@ -226252,7 +245637,7 @@ 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_ERR(44, 25, __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 == ((int)-1))) __PYX_ERR(44, 25, __pyx_L1_error)
 
     /* "PETSc/DMShell.pyx":20
  * 
@@ -226272,7 +245657,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_8setCreateGlobalVector(struc
  *     def setCreateLocalVector(self, create_lvec, args=None, kargs=None):
  */
   /*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_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateGlobalVector(__pyx_v_self->__pyx_base.dm, NULL)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(44, 27, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -226328,8 +245713,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_11setCreateLocalVector(PyObj
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -226338,11 +245726,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_11setCreateLocalVector(PyObj
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_create_lvec)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -226355,7 +245745,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_11setCreateLocalVector(PyObj
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -226427,7 +245819,7 @@ 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_ERR(44, 32, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyDict_NewPresized(0); 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;
@@ -226472,7 +245864,7 @@ 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_ERR(44, 35, __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 == ((int)-1))) __PYX_ERR(44, 35, __pyx_L1_error)
 
     /* "PETSc/DMShell.pyx":30
  * 
@@ -226492,7 +245884,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_10setCreateLocalVector(struc
  *     def setGlobalToLocal(self, begin, end, begin_args=None, begin_kargs=None,
  */
   /*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_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateLocalVector(__pyx_v_self->__pyx_base.dm, NULL)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(44, 37, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -226561,11 +245953,17 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_13setGlobalToLocal(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -226574,26 +245972,31 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_13setGlobalToLocal(PyObject
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_begin)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(44, 39, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_begin_args);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_begin_kargs);
           if (value) { values[3] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  4:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_end_args);
           if (value) { values[4] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  5:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_end_kargs);
@@ -226606,9 +246009,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_13setGlobalToLocal(PyObject
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -226706,7 +246113,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_12setGlobalToLocal(struct __
     __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_ERR(44, 44, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 44, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_begin_kargs, __pyx_t_3);
       __pyx_t_3 = 0;
@@ -226797,7 +246204,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_12setGlobalToLocal(struct __
     __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_ERR(44, 50, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 50, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_end_kargs, __pyx_t_3);
       __pyx_t_3 = 0;
@@ -226858,9 +246265,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_12setGlobalToLocal(struct __
  *             cend = &DMSHELL_GlobalToLocalEnd
  *         CHKERR( DMShellSetGlobalToLocal(self.dm, cbegin, cend) )             # <<<<<<<<<<<<<<
  * 
- *     def setGlobalToLocalVecScatter(self, Scatter gtol not None):
+ *     def setGlobalToLocalVecScatter(self, Scatter gtol):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(44, 54, __pyx_L1_error)
 
   /* "PETSc/DMShell.pyx":39
  *             CHKERR( DMShellSetCreateLocalVector(self.dm, NULL) )
@@ -226891,7 +246298,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_12setGlobalToLocal(struct __
 /* "PETSc/DMShell.pyx":56
  *         CHKERR( DMShellSetGlobalToLocal(self.dm, cbegin, cend) )
  * 
- *     def setGlobalToLocalVecScatter(self, Scatter gtol not None):             # <<<<<<<<<<<<<<
+ *     def setGlobalToLocalVecScatter(self, Scatter gtol):             # <<<<<<<<<<<<<<
  *         CHKERR( DMShellSetGlobalToLocalVecScatter(self.dm, gtol.sct) )
  * 
  */
@@ -226912,6 +246319,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_15setGlobalToLocalVecScatter
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -226959,17 +246367,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_14setGlobalToLocalVecScatter
 
   /* "PETSc/DMShell.pyx":57
  * 
- *     def setGlobalToLocalVecScatter(self, Scatter gtol not None):
+ *     def setGlobalToLocalVecScatter(self, Scatter gtol):
  *         CHKERR( DMShellSetGlobalToLocalVecScatter(self.dm, gtol.sct) )             # <<<<<<<<<<<<<<
  * 
  *     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_ERR(44, 57, __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 == ((int)-1))) __PYX_ERR(44, 57, __pyx_L1_error)
 
   /* "PETSc/DMShell.pyx":56
  *         CHKERR( DMShellSetGlobalToLocal(self.dm, cbegin, cend) )
  * 
- *     def setGlobalToLocalVecScatter(self, Scatter gtol not None):             # <<<<<<<<<<<<<<
+ *     def setGlobalToLocalVecScatter(self, Scatter gtol):             # <<<<<<<<<<<<<<
  *         CHKERR( DMShellSetGlobalToLocalVecScatter(self.dm, gtol.sct) )
  * 
  */
@@ -227027,11 +246435,17 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_17setLocalToGlobal(PyObject
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -227040,26 +246454,31 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_17setLocalToGlobal(PyObject
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_begin)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(44, 59, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_begin_args);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_begin_kargs);
           if (value) { values[3] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  4:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_end_args);
           if (value) { values[4] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  5:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_end_kargs);
@@ -227072,9 +246491,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_17setLocalToGlobal(PyObject
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -227172,7 +246595,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_16setLocalToGlobal(struct __
     __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_ERR(44, 64, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 64, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_begin_kargs, __pyx_t_3);
       __pyx_t_3 = 0;
@@ -227263,7 +246686,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_16setLocalToGlobal(struct __
     __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_ERR(44, 70, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 70, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_end_kargs, __pyx_t_3);
       __pyx_t_3 = 0;
@@ -227324,9 +246747,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_16setLocalToGlobal(struct __
  *             cend = &DMSHELL_LocalToGlobalEnd
  *         CHKERR( DMShellSetLocalToGlobal(self.dm, cbegin, cend) )             # <<<<<<<<<<<<<<
  * 
- *     def setLocalToGlobalVecScatter(self, Scatter ltog not None):
+ *     def setLocalToGlobalVecScatter(self, Scatter ltog):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(44, 74, __pyx_L1_error)
 
   /* "PETSc/DMShell.pyx":59
  *         CHKERR( DMShellSetGlobalToLocalVecScatter(self.dm, gtol.sct) )
@@ -227357,7 +246780,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_16setLocalToGlobal(struct __
 /* "PETSc/DMShell.pyx":76
  *         CHKERR( DMShellSetLocalToGlobal(self.dm, cbegin, cend) )
  * 
- *     def setLocalToGlobalVecScatter(self, Scatter ltog not None):             # <<<<<<<<<<<<<<
+ *     def setLocalToGlobalVecScatter(self, Scatter ltog):             # <<<<<<<<<<<<<<
  *         CHKERR( DMShellSetLocalToGlobalVecScatter(self.dm, ltog.sct) )
  * 
  */
@@ -227378,6 +246801,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_19setLocalToGlobalVecScatter
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -227425,17 +246849,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_18setLocalToGlobalVecScatter
 
   /* "PETSc/DMShell.pyx":77
  * 
- *     def setLocalToGlobalVecScatter(self, Scatter ltog not None):
+ *     def setLocalToGlobalVecScatter(self, Scatter ltog):
  *         CHKERR( DMShellSetLocalToGlobalVecScatter(self.dm, ltog.sct) )             # <<<<<<<<<<<<<<
  * 
  *     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_ERR(44, 77, __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 == ((int)-1))) __PYX_ERR(44, 77, __pyx_L1_error)
 
   /* "PETSc/DMShell.pyx":76
  *         CHKERR( DMShellSetLocalToGlobal(self.dm, cbegin, cend) )
  * 
- *     def setLocalToGlobalVecScatter(self, Scatter ltog not None):             # <<<<<<<<<<<<<<
+ *     def setLocalToGlobalVecScatter(self, Scatter ltog):             # <<<<<<<<<<<<<<
  *         CHKERR( DMShellSetLocalToGlobalVecScatter(self.dm, ltog.sct) )
  * 
  */
@@ -227493,11 +246917,17 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_21setLocalToLocal(PyObject *
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -227506,26 +246936,31 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_21setLocalToLocal(PyObject *
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_begin)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(44, 79, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_begin_args);
           if (value) { values[2] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_begin_kargs);
           if (value) { values[3] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  4:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_end_args);
           if (value) { values[4] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  5:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_end_kargs);
@@ -227538,9 +246973,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_21setLocalToLocal(PyObject *
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  6: values[5] = PyTuple_GET_ITEM(__pyx_args, 5);
+        CYTHON_FALLTHROUGH;
         case  5: values[4] = PyTuple_GET_ITEM(__pyx_args, 4);
+        CYTHON_FALLTHROUGH;
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
         values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
@@ -227656,7 +247095,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_20setLocalToLocal(struct __p
     __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_ERR(44, 86, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 86, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_begin_kargs, __pyx_t_3);
       __pyx_t_3 = 0;
@@ -227747,7 +247186,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_20setLocalToLocal(struct __p
     __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_ERR(44, 92, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 92, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_end_kargs, __pyx_t_3);
       __pyx_t_3 = 0;
@@ -227808,9 +247247,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_20setLocalToLocal(struct __p
  *             cend = &DMSHELL_LocalToLocalEnd
  *         CHKERR( DMShellSetLocalToLocal(self.dm, cbegin, cend) )             # <<<<<<<<<<<<<<
  * 
- *     def setLocalToLocalVecScatter(self, Scatter ltol not None):
+ *     def setLocalToLocalVecScatter(self, Scatter ltol):
  */
-  __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)
+  __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 == ((int)-1))) __PYX_ERR(44, 96, __pyx_L1_error)
 
   /* "PETSc/DMShell.pyx":79
  *         CHKERR( DMShellSetLocalToGlobalVecScatter(self.dm, ltog.sct) )
@@ -227841,7 +247280,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_20setLocalToLocal(struct __p
 /* "PETSc/DMShell.pyx":98
  *         CHKERR( DMShellSetLocalToLocal(self.dm, cbegin, cend) )
  * 
- *     def setLocalToLocalVecScatter(self, Scatter ltol not None):             # <<<<<<<<<<<<<<
+ *     def setLocalToLocalVecScatter(self, Scatter ltol):             # <<<<<<<<<<<<<<
  *         CHKERR( DMShellSetLocalToLocalVecScatter(self.dm, ltol.sct) )
  * 
  */
@@ -227862,6 +247301,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_23setLocalToLocalVecScatter(
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -227909,17 +247349,17 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_22setLocalToLocalVecScatter(
 
   /* "PETSc/DMShell.pyx":99
  * 
- *     def setLocalToLocalVecScatter(self, Scatter ltol not None):
+ *     def setLocalToLocalVecScatter(self, Scatter ltol):
  *         CHKERR( DMShellSetLocalToLocalVecScatter(self.dm, ltol.sct) )             # <<<<<<<<<<<<<<
  * 
  *     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_ERR(44, 99, __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 == ((int)-1))) __PYX_ERR(44, 99, __pyx_L1_error)
 
   /* "PETSc/DMShell.pyx":98
  *         CHKERR( DMShellSetLocalToLocal(self.dm, cbegin, cend) )
  * 
- *     def setLocalToLocalVecScatter(self, Scatter ltol not None):             # <<<<<<<<<<<<<<
+ *     def setLocalToLocalVecScatter(self, Scatter ltol):             # <<<<<<<<<<<<<<
  *         CHKERR( DMShellSetLocalToLocalVecScatter(self.dm, ltol.sct) )
  * 
  */
@@ -227964,8 +247404,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_25setCreateMatrix(PyObject *
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -227974,11 +247417,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_25setCreateMatrix(PyObject *
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_create_matrix)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -227991,7 +247436,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_25setCreateMatrix(PyObject *
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -228063,7 +247510,7 @@ 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_ERR(44, 104, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyDict_NewPresized(0); 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;
@@ -228108,7 +247555,7 @@ 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_ERR(44, 107, __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 == ((int)-1))) __PYX_ERR(44, 107, __pyx_L1_error)
 
     /* "PETSc/DMShell.pyx":102
  * 
@@ -228128,7 +247575,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_24setCreateMatrix(struct __p
  *     def setCoarsen(self, coarsen, args=None, kargs=None):
  */
   /*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_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateMatrix(__pyx_v_self->__pyx_base.dm, NULL)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(44, 109, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -228184,8 +247631,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_27setCoarsen(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -228194,11 +247644,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_27setCoarsen(PyObject *__pyx
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_coarsen)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -228211,7 +247663,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_27setCoarsen(PyObject *__pyx
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -228283,7 +247737,7 @@ 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_ERR(44, 114, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyDict_NewPresized(0); 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;
@@ -228328,7 +247782,7 @@ 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_ERR(44, 117, __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 == ((int)-1))) __PYX_ERR(44, 117, __pyx_L1_error)
 
     /* "PETSc/DMShell.pyx":112
  * 
@@ -228348,7 +247802,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_26setCoarsen(struct __pyx_ob
  *     def setRefine(self, refine, args=None, kargs=None):
  */
   /*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_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCoarsen(__pyx_v_self->__pyx_base.dm, NULL)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(44, 119, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -228404,8 +247858,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_29setRefine(PyObject *__pyx_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -228414,11 +247871,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_29setRefine(PyObject *__pyx_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_refine)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -228431,7 +247890,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_29setRefine(PyObject *__pyx_
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -228503,7 +247964,7 @@ 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_ERR(44, 124, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyDict_NewPresized(0); 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;
@@ -228548,7 +248009,7 @@ 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_ERR(44, 127, __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 == ((int)-1))) __PYX_ERR(44, 127, __pyx_L1_error)
 
     /* "PETSc/DMShell.pyx":122
  * 
@@ -228568,7 +248029,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_28setRefine(struct __pyx_obj
  *     def setCreateInterpolation(self, create_interpolation, args=None, kargs=None):
  */
   /*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_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetRefine(__pyx_v_self->__pyx_base.dm, NULL)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(44, 129, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -228624,8 +248085,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_31setCreateInterpolation(PyO
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -228634,11 +248098,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_31setCreateInterpolation(PyO
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_create_interpolation)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -228651,7 +248117,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_31setCreateInterpolation(PyO
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -228723,7 +248191,7 @@ 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_ERR(44, 134, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyDict_NewPresized(0); 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;
@@ -228768,7 +248236,7 @@ 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_ERR(44, 137, __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 == ((int)-1))) __PYX_ERR(44, 137, __pyx_L1_error)
 
     /* "PETSc/DMShell.pyx":132
  * 
@@ -228788,7 +248256,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_30setCreateInterpolation(str
  *     def setCreateInjection(self, create_injection, args=None, kargs=None):
  */
   /*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_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateInterpolation(__pyx_v_self->__pyx_base.dm, NULL)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(44, 139, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -228844,8 +248312,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_33setCreateInjection(PyObjec
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -228854,11 +248325,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_33setCreateInjection(PyObjec
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_create_injection)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -228871,7 +248344,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_33setCreateInjection(PyObjec
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -228943,7 +248418,7 @@ 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_ERR(44, 144, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyDict_NewPresized(0); 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;
@@ -228988,7 +248463,7 @@ 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_ERR(44, 147, __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 == ((int)-1))) __PYX_ERR(44, 147, __pyx_L1_error)
 
     /* "PETSc/DMShell.pyx":142
  * 
@@ -229005,10 +248480,10 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_32setCreateInjection(struct
  *         else:
  *             CHKERR( DMShellSetCreateInjection(self.dm, NULL) )             # <<<<<<<<<<<<<<
  * 
- *     def setCreateFieldDecomposition(self, decomp, args=None, kargs=None):
+ *     def setCreateRestriction(self, create_restriction, args=None, kargs=None):
  */
   /*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_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateInjection(__pyx_v_self->__pyx_base.dm, NULL)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(44, 149, __pyx_L1_error)
   }
   __pyx_L3:;
 
@@ -229039,15 +248514,242 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_32setCreateInjection(struct
 /* "PETSc/DMShell.pyx":151
  *             CHKERR( DMShellSetCreateInjection(self.dm, NULL) )
  * 
+ *     def setCreateRestriction(self, create_restriction, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         if create_restriction is not None:
+ *             if args  is None: args  = ()
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_35setCreateRestriction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_7DMShell_34setCreateRestriction[] = "DMShell.setCreateRestriction(self, create_restriction, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_35setCreateRestriction(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_create_restriction = 0;
+  PyObject *__pyx_v_args = 0;
+  PyObject *__pyx_v_kargs = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setCreateRestriction (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_create_restriction,&__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);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        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_restriction)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        CYTHON_FALLTHROUGH;
+        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, "setCreateRestriction") < 0)) __PYX_ERR(44, 151, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_create_restriction = values[0];
+    __pyx_v_args = values[1];
+    __pyx_v_kargs = values[2];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setCreateRestriction", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(44, 151, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DMShell.setCreateRestriction", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7DMShell_34setCreateRestriction(((struct __pyx_obj_8petsc4py_5PETSc_DMShell *)__pyx_v_self), __pyx_v_create_restriction, __pyx_v_args, __pyx_v_kargs);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_34setCreateRestriction(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_create_restriction, 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("setCreateRestriction", 0);
+  __Pyx_INCREF(__pyx_v_args);
+  __Pyx_INCREF(__pyx_v_kargs);
+
+  /* "PETSc/DMShell.pyx":152
+ * 
+ *     def setCreateRestriction(self, create_restriction, args=None, kargs=None):
+ *         if create_restriction is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}
+ */
+  __pyx_t_1 = (__pyx_v_create_restriction != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+
+    /* "PETSc/DMShell.pyx":153
+ *     def setCreateRestriction(self, create_restriction, args=None, kargs=None):
+ *         if create_restriction is not None:
+ *             if args  is None: args  = ()             # <<<<<<<<<<<<<<
+ *             if kargs is None: kargs = {}
+ *             context = (create_restriction, 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":154
+ *         if create_restriction is not None:
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
+ *             context = (create_restriction, args, kargs)
+ *             self.set_attr('__create_restriction__', context)
+ */
+    __pyx_t_1 = (__pyx_v_kargs == Py_None);
+    __pyx_t_2 = (__pyx_t_1 != 0);
+    if (__pyx_t_2) {
+      __pyx_t_3 = __Pyx_PyDict_NewPresized(0); 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;
+    }
+
+    /* "PETSc/DMShell.pyx":155
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}
+ *             context = (create_restriction, args, kargs)             # <<<<<<<<<<<<<<
+ *             self.set_attr('__create_restriction__', context)
+ *             CHKERR( DMShellSetCreateRestriction(self.dm, DMSHELL_CreateRestriction) )
+ */
+    __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_create_restriction);
+    __Pyx_GIVEREF(__pyx_v_create_restriction);
+    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_create_restriction);
+    __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":156
+ *             if kargs is None: kargs = {}
+ *             context = (create_restriction, args, kargs)
+ *             self.set_attr('__create_restriction__', context)             # <<<<<<<<<<<<<<
+ *             CHKERR( DMShellSetCreateRestriction(self.dm, DMSHELL_CreateRestriction) )
+ *         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_restriction__"), __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;
+
+    /* "PETSc/DMShell.pyx":157
+ *             context = (create_restriction, args, kargs)
+ *             self.set_attr('__create_restriction__', context)
+ *             CHKERR( DMShellSetCreateRestriction(self.dm, DMSHELL_CreateRestriction) )             # <<<<<<<<<<<<<<
+ *         else:
+ *             CHKERR( DMShellSetCreateRestriction(self.dm, NULL) )
+ */
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateRestriction(__pyx_v_self->__pyx_base.dm, __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateRestriction)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(44, 157, __pyx_L1_error)
+
+    /* "PETSc/DMShell.pyx":152
+ * 
+ *     def setCreateRestriction(self, create_restriction, args=None, kargs=None):
+ *         if create_restriction is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args  = ()
+ *             if kargs is None: kargs = {}
+ */
+    goto __pyx_L3;
+  }
+
+  /* "PETSc/DMShell.pyx":159
+ *             CHKERR( DMShellSetCreateRestriction(self.dm, DMSHELL_CreateRestriction) )
+ *         else:
+ *             CHKERR( DMShellSetCreateRestriction(self.dm, NULL) )             # <<<<<<<<<<<<<<
+ * 
+ *     def setCreateFieldDecomposition(self, decomp, args=None, kargs=None):
+ */
+  /*else*/ {
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateRestriction(__pyx_v_self->__pyx_base.dm, NULL)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(44, 159, __pyx_L1_error)
+  }
+  __pyx_L3:;
+
+  /* "PETSc/DMShell.pyx":151
+ *             CHKERR( DMShellSetCreateInjection(self.dm, NULL) )
+ * 
+ *     def setCreateRestriction(self, create_restriction, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         if create_restriction 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.setCreateRestriction", __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/DMShell.pyx":161
+ *             CHKERR( DMShellSetCreateRestriction(self.dm, NULL) )
+ * 
  *     def setCreateFieldDecomposition(self, decomp, args=None, kargs=None):             # <<<<<<<<<<<<<<
  *         if decomp is not None:
  *             if args  is None: args = ()
  */
 
 /* Python wrapper */
-static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_35setCreateFieldDecomposition(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
-static char __pyx_doc_8petsc4py_5PETSc_7DMShell_34setCreateFieldDecomposition[] = "DMShell.setCreateFieldDecomposition(self, decomp, args=None, kargs=None)";
-static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_35setCreateFieldDecomposition(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_37setCreateFieldDecomposition(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_7DMShell_36setCreateFieldDecomposition[] = "DMShell.setCreateFieldDecomposition(self, decomp, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_37setCreateFieldDecomposition(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
   PyObject *__pyx_v_decomp = 0;
   PyObject *__pyx_v_args = 0;
   PyObject *__pyx_v_kargs = 0;
@@ -229064,8 +248766,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_35setCreateFieldDecompositio
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -229074,11 +248779,467 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_35setCreateFieldDecompositio
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_decomp)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        CYTHON_FALLTHROUGH;
+        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, "setCreateFieldDecomposition") < 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);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_decomp = values[0];
+    __pyx_v_args = values[1];
+    __pyx_v_kargs = values[2];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setCreateFieldDecomposition", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(44, 161, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DMShell.setCreateFieldDecomposition", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7DMShell_36setCreateFieldDecomposition(((struct __pyx_obj_8petsc4py_5PETSc_DMShell *)__pyx_v_self), __pyx_v_decomp, __pyx_v_args, __pyx_v_kargs);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_36setCreateFieldDecomposition(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_decomp, 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("setCreateFieldDecomposition", 0);
+  __Pyx_INCREF(__pyx_v_args);
+  __Pyx_INCREF(__pyx_v_kargs);
+
+  /* "PETSc/DMShell.pyx":162
+ * 
+ *     def setCreateFieldDecomposition(self, decomp, args=None, kargs=None):
+ *         if decomp is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args = ()
+ *             if kargs is None: kargs = {}
+ */
+  __pyx_t_1 = (__pyx_v_decomp != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+
+    /* "PETSc/DMShell.pyx":163
+ *     def setCreateFieldDecomposition(self, decomp, args=None, kargs=None):
+ *         if decomp is not None:
+ *             if args  is None: args = ()             # <<<<<<<<<<<<<<
+ *             if kargs is None: kargs = {}
+ *             context = (decomp, 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 decomp is not None:
+ *             if args  is None: args = ()
+ *             if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
+ *             context = (decomp, args, kargs)
+ *             self.set_attr('__create_field_decomp__', context)
+ */
+    __pyx_t_1 = (__pyx_v_kargs == Py_None);
+    __pyx_t_2 = (__pyx_t_1 != 0);
+    if (__pyx_t_2) {
+      __pyx_t_3 = __Pyx_PyDict_NewPresized(0); 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 = (decomp, args, kargs)             # <<<<<<<<<<<<<<
+ *             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_ERR(44, 165, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_v_decomp);
+    __Pyx_GIVEREF(__pyx_v_decomp);
+    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_decomp);
+    __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 = (decomp, args, kargs)
+ *             self.set_attr('__create_field_decomp__', context)             # <<<<<<<<<<<<<<
+ *             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), ((char *)"__create_field_decomp__"), __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 = (decomp, args, kargs)
+ *             self.set_attr('__create_field_decomp__', context)
+ *             CHKERR( DMShellSetCreateFieldDecomposition(self.dm, DMSHELL_CreateFieldDecomposition) )             # <<<<<<<<<<<<<<
+ *         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 == ((int)-1))) __PYX_ERR(44, 167, __pyx_L1_error)
+
+    /* "PETSc/DMShell.pyx":162
+ * 
+ *     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;
+  }
+
+  /* "PETSc/DMShell.pyx":169
+ *             CHKERR( DMShellSetCreateFieldDecomposition(self.dm, DMSHELL_CreateFieldDecomposition) )
+ *         else:
+ *             CHKERR( DMShellSetCreateFieldDecomposition(self.dm, NULL) )             # <<<<<<<<<<<<<<
+ * 
+ *     def setCreateDomainDecomposition(self, decomp, args=None, kargs=None):
+ */
+  /*else*/ {
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateFieldDecomposition(__pyx_v_self->__pyx_base.dm, NULL)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(44, 169, __pyx_L1_error)
+  }
+  __pyx_L3:;
+
+  /* "PETSc/DMShell.pyx":161
+ *             CHKERR( DMShellSetCreateRestriction(self.dm, NULL) )
+ * 
+ *     def setCreateFieldDecomposition(self, decomp, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         if decomp 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.setCreateFieldDecomposition", __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/DMShell.pyx":171
+ *             CHKERR( DMShellSetCreateFieldDecomposition(self.dm, NULL) )
+ * 
+ *     def setCreateDomainDecomposition(self, decomp, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         if decomp is not None:
+ *             if args  is None: args = ()
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_39setCreateDomainDecomposition(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_7DMShell_38setCreateDomainDecomposition[] = "DMShell.setCreateDomainDecomposition(self, decomp, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_39setCreateDomainDecomposition(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_decomp = 0;
+  PyObject *__pyx_v_args = 0;
+  PyObject *__pyx_v_kargs = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setCreateDomainDecomposition (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_decomp,&__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);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        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_decomp)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
+        case  1:
+        if (kw_args > 0) {
+          PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
+          if (value) { values[1] = value; kw_args--; }
+        }
+        CYTHON_FALLTHROUGH;
+        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, "setCreateDomainDecomposition") < 0)) __PYX_ERR(44, 171, __pyx_L3_error)
+      }
+    } else {
+      switch (PyTuple_GET_SIZE(__pyx_args)) {
+        case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        break;
+        default: goto __pyx_L5_argtuple_error;
+      }
+    }
+    __pyx_v_decomp = values[0];
+    __pyx_v_args = values[1];
+    __pyx_v_kargs = values[2];
+  }
+  goto __pyx_L4_argument_unpacking_done;
+  __pyx_L5_argtuple_error:;
+  __Pyx_RaiseArgtupleInvalid("setCreateDomainDecomposition", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(44, 171, __pyx_L3_error)
+  __pyx_L3_error:;
+  __Pyx_AddTraceback("petsc4py.PETSc.DMShell.setCreateDomainDecomposition", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_RefNannyFinishContext();
+  return NULL;
+  __pyx_L4_argument_unpacking_done:;
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7DMShell_38setCreateDomainDecomposition(((struct __pyx_obj_8petsc4py_5PETSc_DMShell *)__pyx_v_self), __pyx_v_decomp, __pyx_v_args, __pyx_v_kargs);
+
+  /* function exit code */
+  __Pyx_RefNannyFinishContext();
+  return __pyx_r;
+}
+
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_38setCreateDomainDecomposition(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_decomp, 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("setCreateDomainDecomposition", 0);
+  __Pyx_INCREF(__pyx_v_args);
+  __Pyx_INCREF(__pyx_v_kargs);
+
+  /* "PETSc/DMShell.pyx":172
+ * 
+ *     def setCreateDomainDecomposition(self, decomp, args=None, kargs=None):
+ *         if decomp is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args = ()
+ *             if kargs is None: kargs = {}
+ */
+  __pyx_t_1 = (__pyx_v_decomp != Py_None);
+  __pyx_t_2 = (__pyx_t_1 != 0);
+  if (__pyx_t_2) {
+
+    /* "PETSc/DMShell.pyx":173
+ *     def setCreateDomainDecomposition(self, decomp, args=None, kargs=None):
+ *         if decomp is not None:
+ *             if args  is None: args = ()             # <<<<<<<<<<<<<<
+ *             if kargs is None: kargs = {}
+ *             context = (decomp, 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":174
+ *         if decomp is not None:
+ *             if args  is None: args = ()
+ *             if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
+ *             context = (decomp, args, kargs)
+ *             self.set_attr('__create_domain_decomp__', context)
+ */
+    __pyx_t_1 = (__pyx_v_kargs == Py_None);
+    __pyx_t_2 = (__pyx_t_1 != 0);
+    if (__pyx_t_2) {
+      __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 174, __pyx_L1_error)
+      __Pyx_GOTREF(__pyx_t_3);
+      __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
+      __pyx_t_3 = 0;
+    }
+
+    /* "PETSc/DMShell.pyx":175
+ *             if args  is None: args = ()
+ *             if kargs is None: kargs = {}
+ *             context = (decomp, args, kargs)             # <<<<<<<<<<<<<<
+ *             self.set_attr('__create_domain_decomp__', context)
+ *             CHKERR( DMShellSetCreateDomainDecomposition(self.dm, DMSHELL_CreateDomainDecomposition) )
+ */
+    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 175, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_INCREF(__pyx_v_decomp);
+    __Pyx_GIVEREF(__pyx_v_decomp);
+    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_decomp);
+    __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":176
+ *             if kargs is None: kargs = {}
+ *             context = (decomp, args, kargs)
+ *             self.set_attr('__create_domain_decomp__', context)             # <<<<<<<<<<<<<<
+ *             CHKERR( DMShellSetCreateDomainDecomposition(self.dm, DMSHELL_CreateDomainDecomposition) )
+ *         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_domain_decomp__"), __pyx_v_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 176, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_3);
+    __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+    /* "PETSc/DMShell.pyx":177
+ *             context = (decomp, args, kargs)
+ *             self.set_attr('__create_domain_decomp__', context)
+ *             CHKERR( DMShellSetCreateDomainDecomposition(self.dm, DMSHELL_CreateDomainDecomposition) )             # <<<<<<<<<<<<<<
+ *         else:
+ *             CHKERR( DMShellSetCreateDomainDecomposition(self.dm, NULL) )
+ */
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateDomainDecomposition(__pyx_v_self->__pyx_base.dm, __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateDomainDecomposition)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(44, 177, __pyx_L1_error)
+
+    /* "PETSc/DMShell.pyx":172
+ * 
+ *     def setCreateDomainDecomposition(self, decomp, args=None, kargs=None):
+ *         if decomp is not None:             # <<<<<<<<<<<<<<
+ *             if args  is None: args = ()
+ *             if kargs is None: kargs = {}
+ */
+    goto __pyx_L3;
+  }
+
+  /* "PETSc/DMShell.pyx":179
+ *             CHKERR( DMShellSetCreateDomainDecomposition(self.dm, DMSHELL_CreateDomainDecomposition) )
+ *         else:
+ *             CHKERR( DMShellSetCreateDomainDecomposition(self.dm, NULL) )             # <<<<<<<<<<<<<<
+ * 
+ *     def setCreateDomainDecompositionScatters(self, scatter, args=None, kargs=None):
+ */
+  /*else*/ {
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateDomainDecomposition(__pyx_v_self->__pyx_base.dm, NULL)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(44, 179, __pyx_L1_error)
+  }
+  __pyx_L3:;
+
+  /* "PETSc/DMShell.pyx":171
+ *             CHKERR( DMShellSetCreateFieldDecomposition(self.dm, NULL) )
+ * 
+ *     def setCreateDomainDecomposition(self, decomp, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         if decomp 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.setCreateDomainDecomposition", __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/DMShell.pyx":181
+ *             CHKERR( DMShellSetCreateDomainDecomposition(self.dm, NULL) )
+ * 
+ *     def setCreateDomainDecompositionScatters(self, scatter, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         if scatter is not None:
+ *             if args  is None: args = ()
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_41setCreateDomainDecompositionScatters(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_7DMShell_40setCreateDomainDecompositionScatters[] = "DMShell.setCreateDomainDecompositionScatters(self, scatter, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_41setCreateDomainDecompositionScatters(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+  PyObject *__pyx_v_scatter = 0;
+  PyObject *__pyx_v_args = 0;
+  PyObject *__pyx_v_kargs = 0;
+  PyObject *__pyx_r = 0;
+  __Pyx_RefNannyDeclarations
+  __Pyx_RefNannySetupContext("setCreateDomainDecompositionScatters (wrapper)", 0);
+  {
+    static PyObject **__pyx_pyargnames[] = {&__pyx_n_s_scatter,&__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);
+        CYTHON_FALLTHROUGH;
+        case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
+        case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
+        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_scatter)) != 0)) kw_args--;
+        else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -229086,37 +249247,39 @@ 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_ERR(44, 151, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCreateDomainDecompositionScatters") < 0)) __PYX_ERR(44, 181, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
       }
     }
-    __pyx_v_decomp = values[0];
+    __pyx_v_scatter = values[0];
     __pyx_v_args = values[1];
     __pyx_v_kargs = values[2];
   }
   goto __pyx_L4_argument_unpacking_done;
   __pyx_L5_argtuple_error:;
-  __Pyx_RaiseArgtupleInvalid("setCreateFieldDecomposition", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(44, 151, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("setCreateDomainDecompositionScatters", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(44, 181, __pyx_L3_error)
   __pyx_L3_error:;
-  __Pyx_AddTraceback("petsc4py.PETSc.DMShell.setCreateFieldDecomposition", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMShell.setCreateDomainDecompositionScatters", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
   return NULL;
   __pyx_L4_argument_unpacking_done:;
-  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7DMShell_34setCreateFieldDecomposition(((struct __pyx_obj_8petsc4py_5PETSc_DMShell *)__pyx_v_self), __pyx_v_decomp, __pyx_v_args, __pyx_v_kargs);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7DMShell_40setCreateDomainDecompositionScatters(((struct __pyx_obj_8petsc4py_5PETSc_DMShell *)__pyx_v_self), __pyx_v_scatter, __pyx_v_args, __pyx_v_kargs);
 
   /* function exit code */
   __Pyx_RefNannyFinishContext();
   return __pyx_r;
 }
 
-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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_40setCreateDomainDecompositionScatters(struct __pyx_obj_8petsc4py_5PETSc_DMShell *__pyx_v_self, PyObject *__pyx_v_scatter, PyObject *__pyx_v_args, PyObject *__pyx_v_kargs) {
   PyObject *__pyx_v_context = NULL;
   PyObject *__pyx_r = NULL;
   __Pyx_RefNannyDeclarations
@@ -229124,27 +249287,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_34setCreateFieldDecompositio
   int __pyx_t_2;
   PyObject *__pyx_t_3 = NULL;
   int __pyx_t_4;
-  __Pyx_RefNannySetupContext("setCreateFieldDecomposition", 0);
+  __Pyx_RefNannySetupContext("setCreateDomainDecompositionScatters", 0);
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/DMShell.pyx":152
+  /* "PETSc/DMShell.pyx":182
  * 
- *     def setCreateFieldDecomposition(self, decomp, args=None, kargs=None):
- *         if decomp is not None:             # <<<<<<<<<<<<<<
+ *     def setCreateDomainDecompositionScatters(self, scatter, args=None, kargs=None):
+ *         if scatter is not None:             # <<<<<<<<<<<<<<
  *             if args  is None: args = ()
  *             if kargs is None: kargs = {}
  */
-  __pyx_t_1 = (__pyx_v_decomp != Py_None);
+  __pyx_t_1 = (__pyx_v_scatter != Py_None);
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/DMShell.pyx":153
- *     def setCreateFieldDecomposition(self, decomp, args=None, kargs=None):
- *         if decomp is not None:
+    /* "PETSc/DMShell.pyx":183
+ *     def setCreateDomainDecompositionScatters(self, scatter, args=None, kargs=None):
+ *         if scatter is not None:
  *             if args  is None: args = ()             # <<<<<<<<<<<<<<
  *             if kargs is None: kargs = {}
- *             context = (decomp, args, kargs)
+ *             context = (scatter, args, kargs)
  */
     __pyx_t_2 = (__pyx_v_args == Py_None);
     __pyx_t_1 = (__pyx_t_2 != 0);
@@ -229153,34 +249316,34 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_34setCreateFieldDecompositio
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
     }
 
-    /* "PETSc/DMShell.pyx":154
- *         if decomp is not None:
+    /* "PETSc/DMShell.pyx":184
+ *         if scatter is not None:
  *             if args  is None: args = ()
  *             if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
- *             context = (decomp, args, kargs)
- *             self.set_attr('__create_field_decomp__', context)
+ *             context = (scatter, args, kargs)
+ *             self.set_attr('__create_domain_decomp_scatters__', 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, 154, __pyx_L1_error)
+      __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 184, __pyx_L1_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_DECREF_SET(__pyx_v_kargs, __pyx_t_3);
       __pyx_t_3 = 0;
     }
 
-    /* "PETSc/DMShell.pyx":155
+    /* "PETSc/DMShell.pyx":185
  *             if args  is None: args = ()
  *             if kargs is None: kargs = {}
- *             context = (decomp, args, kargs)             # <<<<<<<<<<<<<<
- *             self.set_attr('__create_field_decomp__', context)
- *             CHKERR( DMShellSetCreateFieldDecomposition(self.dm, DMSHELL_CreateFieldDecomposition) )
+ *             context = (scatter, args, kargs)             # <<<<<<<<<<<<<<
+ *             self.set_attr('__create_domain_decomp_scatters__', context)
+ *             CHKERR( DMShellSetCreateDomainDecompositionScatters(self.dm, DMSHELL_CreateDomainDecompositionScatters) )
  */
-    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 155, __pyx_L1_error)
+    __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 185, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
-    __Pyx_INCREF(__pyx_v_decomp);
-    __Pyx_GIVEREF(__pyx_v_decomp);
-    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_decomp);
+    __Pyx_INCREF(__pyx_v_scatter);
+    __Pyx_GIVEREF(__pyx_v_scatter);
+    PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_scatter);
     __Pyx_INCREF(__pyx_v_args);
     __Pyx_GIVEREF(__pyx_v_args);
     PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_v_args);
@@ -229190,53 +249353,53 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_34setCreateFieldDecompositio
     __pyx_v_context = ((PyObject*)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "PETSc/DMShell.pyx":156
+    /* "PETSc/DMShell.pyx":186
  *             if kargs is None: kargs = {}
- *             context = (decomp, args, kargs)
- *             self.set_attr('__create_field_decomp__', context)             # <<<<<<<<<<<<<<
- *             CHKERR( DMShellSetCreateFieldDecomposition(self.dm, DMSHELL_CreateFieldDecomposition) )
+ *             context = (scatter, args, kargs)
+ *             self.set_attr('__create_domain_decomp_scatters__', context)             # <<<<<<<<<<<<<<
+ *             CHKERR( DMShellSetCreateDomainDecompositionScatters(self.dm, DMSHELL_CreateDomainDecompositionScatters) )
  *         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_field_decomp__"), __pyx_v_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 156, __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_domain_decomp_scatters__"), __pyx_v_context); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 186, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "PETSc/DMShell.pyx":157
- *             context = (decomp, args, kargs)
- *             self.set_attr('__create_field_decomp__', context)
- *             CHKERR( DMShellSetCreateFieldDecomposition(self.dm, DMSHELL_CreateFieldDecomposition) )             # <<<<<<<<<<<<<<
+    /* "PETSc/DMShell.pyx":187
+ *             context = (scatter, args, kargs)
+ *             self.set_attr('__create_domain_decomp_scatters__', context)
+ *             CHKERR( DMShellSetCreateDomainDecompositionScatters(self.dm, DMSHELL_CreateDomainDecompositionScatters) )             # <<<<<<<<<<<<<<
  *         else:
- *             CHKERR( DMShellSetCreateFieldDecomposition(self.dm, NULL) )
+ *             CHKERR( DMShellSetCreateDomainDecompositionScatters(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_ERR(44, 157, __pyx_L1_error)
+    __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateDomainDecompositionScatters(__pyx_v_self->__pyx_base.dm, __pyx_f_8petsc4py_5PETSc_DMSHELL_CreateDomainDecompositionScatters)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(44, 187, __pyx_L1_error)
 
-    /* "PETSc/DMShell.pyx":152
+    /* "PETSc/DMShell.pyx":182
  * 
- *     def setCreateFieldDecomposition(self, decomp, args=None, kargs=None):
- *         if decomp is not None:             # <<<<<<<<<<<<<<
+ *     def setCreateDomainDecompositionScatters(self, scatter, args=None, kargs=None):
+ *         if scatter is not None:             # <<<<<<<<<<<<<<
  *             if args  is None: args = ()
  *             if kargs is None: kargs = {}
  */
     goto __pyx_L3;
   }
 
-  /* "PETSc/DMShell.pyx":159
- *             CHKERR( DMShellSetCreateFieldDecomposition(self.dm, DMSHELL_CreateFieldDecomposition) )
+  /* "PETSc/DMShell.pyx":189
+ *             CHKERR( DMShellSetCreateDomainDecompositionScatters(self.dm, DMSHELL_CreateDomainDecompositionScatters) )
  *         else:
- *             CHKERR( DMShellSetCreateFieldDecomposition(self.dm, NULL) )             # <<<<<<<<<<<<<<
+ *             CHKERR( DMShellSetCreateDomainDecompositionScatters(self.dm, NULL) )             # <<<<<<<<<<<<<<
  * 
  *     def setCreateSubDM(self, create_subdm, args=None, kargs=None):
  */
   /*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_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateDomainDecompositionScatters(__pyx_v_self->__pyx_base.dm, NULL)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(44, 189, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/DMShell.pyx":151
- *             CHKERR( DMShellSetCreateInjection(self.dm, NULL) )
+  /* "PETSc/DMShell.pyx":181
+ *             CHKERR( DMShellSetCreateDomainDecomposition(self.dm, NULL) )
  * 
- *     def setCreateFieldDecomposition(self, decomp, args=None, kargs=None):             # <<<<<<<<<<<<<<
- *         if decomp is not None:
+ *     def setCreateDomainDecompositionScatters(self, scatter, args=None, kargs=None):             # <<<<<<<<<<<<<<
+ *         if scatter is not None:
  *             if args  is None: args = ()
  */
 
@@ -229245,7 +249408,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_34setCreateFieldDecompositio
   goto __pyx_L0;
   __pyx_L1_error:;
   __Pyx_XDECREF(__pyx_t_3);
-  __Pyx_AddTraceback("petsc4py.PETSc.DMShell.setCreateFieldDecomposition", __pyx_clineno, __pyx_lineno, __pyx_filename);
+  __Pyx_AddTraceback("petsc4py.PETSc.DMShell.setCreateDomainDecompositionScatters", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __pyx_r = NULL;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_context);
@@ -229256,8 +249419,8 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_34setCreateFieldDecompositio
   return __pyx_r;
 }
 
-/* "PETSc/DMShell.pyx":161
- *             CHKERR( DMShellSetCreateFieldDecomposition(self.dm, NULL) )
+/* "PETSc/DMShell.pyx":191
+ *             CHKERR( DMShellSetCreateDomainDecompositionScatters(self.dm, NULL) )
  * 
  *     def setCreateSubDM(self, create_subdm, args=None, kargs=None):             # <<<<<<<<<<<<<<
  *         if create_subdm is not None:
@@ -229265,9 +249428,9 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_34setCreateFieldDecompositio
  */
 
 /* 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) {
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_43setCreateSubDM(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static char __pyx_doc_8petsc4py_5PETSc_7DMShell_42setCreateSubDM[] = "DMShell.setCreateSubDM(self, create_subdm, args=None, kargs=None)";
+static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_43setCreateSubDM(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;
@@ -229284,8 +249447,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_37setCreateSubDM(PyObject *_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -229294,11 +249460,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_37setCreateSubDM(PyObject *_
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_create_subdm)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_kargs);
@@ -229306,12 +249474,14 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_37setCreateSubDM(PyObject *_
         }
       }
       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)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "setCreateSubDM") < 0)) __PYX_ERR(44, 191, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -229323,20 +249493,20 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_7DMShell_37setCreateSubDM(PyObject *_
   }
   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_RaiseArgtupleInvalid("setCreateSubDM", 0, 1, 3, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(44, 191, __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);
+  __pyx_r = __pyx_pf_8petsc4py_5PETSc_7DMShell_42setCreateSubDM(((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) {
+static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_42setCreateSubDM(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
@@ -229348,7 +249518,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_36setCreateSubDM(struct __py
   __Pyx_INCREF(__pyx_v_args);
   __Pyx_INCREF(__pyx_v_kargs);
 
-  /* "PETSc/DMShell.pyx":162
+  /* "PETSc/DMShell.pyx":192
  * 
  *     def setCreateSubDM(self, create_subdm, args=None, kargs=None):
  *         if create_subdm is not None:             # <<<<<<<<<<<<<<
@@ -229359,7 +249529,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_36setCreateSubDM(struct __py
   __pyx_t_2 = (__pyx_t_1 != 0);
   if (__pyx_t_2) {
 
-    /* "PETSc/DMShell.pyx":163
+    /* "PETSc/DMShell.pyx":193
  *     def setCreateSubDM(self, create_subdm, args=None, kargs=None):
  *         if create_subdm is not None:
  *             if args  is None: args = ()             # <<<<<<<<<<<<<<
@@ -229373,7 +249543,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_36setCreateSubDM(struct __py
       __Pyx_DECREF_SET(__pyx_v_args, __pyx_empty_tuple);
     }
 
-    /* "PETSc/DMShell.pyx":164
+    /* "PETSc/DMShell.pyx":194
  *         if create_subdm is not None:
  *             if args  is None: args = ()
  *             if kargs is None: kargs = {}             # <<<<<<<<<<<<<<
@@ -229383,20 +249553,20 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_36setCreateSubDM(struct __py
     __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_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 194, __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
+    /* "PETSc/DMShell.pyx":195
  *             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_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(44, 195, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_INCREF(__pyx_v_create_subdm);
     __Pyx_GIVEREF(__pyx_v_create_subdm);
@@ -229410,27 +249580,27 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_36setCreateSubDM(struct __py
     __pyx_v_context = ((PyObject*)__pyx_t_3);
     __pyx_t_3 = 0;
 
-    /* "PETSc/DMShell.pyx":166
+    /* "PETSc/DMShell.pyx":196
  *             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_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, 196, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-    /* "PETSc/DMShell.pyx":167
+    /* "PETSc/DMShell.pyx":197
  *             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)
+    __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 == ((int)-1))) __PYX_ERR(44, 197, __pyx_L1_error)
 
-    /* "PETSc/DMShell.pyx":162
+    /* "PETSc/DMShell.pyx":192
  * 
  *     def setCreateSubDM(self, create_subdm, args=None, kargs=None):
  *         if create_subdm is not None:             # <<<<<<<<<<<<<<
@@ -229440,18 +249610,18 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_7DMShell_36setCreateSubDM(struct __py
     goto __pyx_L3;
   }
 
-  /* "PETSc/DMShell.pyx":169
+  /* "PETSc/DMShell.pyx":199
  *             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_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(DMShellSetCreateSubDM(__pyx_v_self->__pyx_base.dm, NULL)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(44, 199, __pyx_L1_error)
   }
   __pyx_L3:;
 
-  /* "PETSc/DMShell.pyx":161
- *             CHKERR( DMShellSetCreateFieldDecomposition(self.dm, NULL) )
+  /* "PETSc/DMShell.pyx":191
+ *             CHKERR( DMShellSetCreateDomainDecompositionScatters(self.dm, NULL) )
  * 
  *     def setCreateSubDM(self, create_subdm, args=None, kargs=None):             # <<<<<<<<<<<<<<
  *         if create_subdm is not None:
@@ -229566,7 +249736,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_ERR(45, 18, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFDestroy((&__pyx_v_self->sf))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(45, 18, __pyx_L1_error)
 
   /* "PETSc/SF.pyx":19
  *     def __dealloc__(self):
@@ -229588,7 +249758,7 @@ static void __pyx_pf_8petsc4py_5PETSc_2SF_2__dealloc__(struct PyPetscSFObject *_
   /* function exit code */
   goto __pyx_L0;
   __pyx_L1_error:;
-  __Pyx_WriteUnraisable("petsc4py.PETSc.SF.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 0, 0);
+  __Pyx_WriteUnraisable("petsc4py.PETSc.SF.__dealloc__", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
 }
@@ -229618,6 +249788,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2SF_5view(PyObject *__pyx_v_self, PyO
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -229635,6 +249806,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2SF_5view(PyObject *__pyx_v_self, PyO
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -229701,7 +249873,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_ERR(45, 24, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFView(__pyx_v_self->sf, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(45, 24, __pyx_L1_error)
 
   /* "PETSc/SF.pyx":21
  *         self.sf = NULL
@@ -229761,7 +249933,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_ERR(45, 27, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFDestroy((&__pyx_v_self->sf))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(45, 27, __pyx_L1_error)
 
   /* "PETSc/SF.pyx":28
  *     def destroy(self):
@@ -229818,6 +249990,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2SF_9create(PyObject *__pyx_v_self, P
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -229835,6 +250008,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2SF_9create(PyObject *__pyx_v_self, P
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -229891,7 +250065,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_ERR(45, 33, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFCreate(__pyx_v_ccomm, (&__pyx_v_newsf))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(45, 33, __pyx_L1_error)
 
   /* "PETSc/SF.pyx":34
  *         cdef PetscSF newsf = NULL
@@ -229957,6 +250131,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2SF_11setType(PyObject *__pyx_v_self,
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -230028,7 +250203,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_ERR(45, 40, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFSetType(__pyx_v_self->sf, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(45, 40, __pyx_L1_error)
 
   /* "PETSc/SF.pyx":37
  *         return self
@@ -230101,7 +250276,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_ERR(45, 44, __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 == ((int)-1))) __PYX_ERR(45, 44, __pyx_L1_error)
 
   /* "PETSc/SF.pyx":45
  *         cdef PetscSFType cval = NULL
@@ -230174,7 +250349,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_ERR(45, 48, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFSetFromOptions(__pyx_v_self->sf)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(45, 48, __pyx_L1_error)
 
   /* "PETSc/SF.pyx":47
  *         return bytes2str(cval)
@@ -230234,7 +250409,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_ERR(45, 51, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFSetUp(__pyx_v_self->sf)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(45, 51, __pyx_L1_error)
 
   /* "PETSc/SF.pyx":50
  *         CHKERR( PetscSFSetFromOptions(self.sf) )
@@ -230294,7 +250469,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_ERR(45, 54, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFReset(__pyx_v_self->sf)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(45, 54, __pyx_L1_error)
 
   /* "PETSc/SF.pyx":53
  *         CHKERR( PetscSFSetUp(self.sf) )
@@ -230398,7 +250573,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_20getGraph(struct PyPetscSFObject
  *         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_ERR(45, 62, __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 == ((int)-1))) __PYX_ERR(45, 62, __pyx_L1_error)
 
   /* "PETSc/SF.pyx":63
  *         cdef const_PetscSFNode *iremote = NULL
@@ -230454,7 +250629,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_20getGraph(struct PyPetscSFObject
     if (likely(!__pyx_t_5)) {
       if (likely(PyList_CheckExact(__pyx_t_3))) {
         if (__pyx_t_4 >= PyList_GET_SIZE(__pyx_t_3)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         __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_ERR(45, 65, __pyx_L1_error)
@@ -230462,7 +250637,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_20getGraph(struct PyPetscSFObject
         #endif
       } else {
         if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         __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_ERR(45, 65, __pyx_L1_error)
@@ -230474,7 +250649,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_20getGraph(struct PyPetscSFObject
       if (unlikely(!__pyx_t_2)) {
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
-          if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
+          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
           else __PYX_ERR(45, 65, __pyx_L1_error)
         }
         break;
@@ -230491,10 +250666,10 @@ 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 == -1L && PyErr_Occurred())) __PYX_ERR(45, 66, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_i); if (unlikely(__pyx_t_6 == ((PetscInt)-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 == -1L && PyErr_Occurred())) __PYX_ERR(45, 66, __pyx_L1_error)
+    __pyx_t_6 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_i); if (unlikely(__pyx_t_6 == ((PetscInt)-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_ERR(45, 66, __pyx_L1_error)
@@ -230515,7 +250690,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_ERR(45, 67, __pyx_L1_error)
+    __pyx_t_9 = __Pyx_PyList_Append(__pyx_v_remote, __pyx_v_sfnode); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(45, 67, __pyx_L1_error)
 
     /* "PETSc/SF.pyx":65
  *         local = array_i(nleaves, ilocal)
@@ -230610,9 +250785,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2SF_23setGraph(PyObject *__pyx_v_self
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  4: values[3] = PyTuple_GET_ITEM(__pyx_args, 3);
+        CYTHON_FALLTHROUGH;
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -230621,16 +250800,19 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2SF_23setGraph(PyObject *__pyx_v_self
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_nroots)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         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_ERR(45, 70, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         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_ERR(45, 70, __pyx_L3_error)
         }
+        CYTHON_FALLTHROUGH;
         case  3:
         if (likely((values[3] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_remote)) != 0)) kw_args--;
         else {
@@ -230700,7 +250882,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 == -1L && PyErr_Occurred())) __PYX_ERR(45, 71, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_nroots); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(45, 71, __pyx_L1_error)
   __pyx_v_cnroots = __pyx_t_1;
 
   /* "PETSc/SF.pyx":72
@@ -230710,7 +250892,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 == -1L && PyErr_Occurred())) __PYX_ERR(45, 72, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_nleaves); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(45, 72, __pyx_L1_error)
   __pyx_v_cnleaves = __pyx_t_1;
 
   /* "PETSc/SF.pyx":73
@@ -230766,7 +250948,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_22setGraph(struct PyPetscSFObject
   __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_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_ERR(45, 77, __pyx_L1_error)
+  __pyx_t_5 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscMalloc(__pyx_t_4, (&__pyx_v_iremote))); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(45, 77, __pyx_L1_error)
 
   /* "PETSc/SF.pyx":78
  *         cdef PetscSFNode* iremote = NULL
@@ -230796,7 +250978,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_22setGraph(struct PyPetscSFObject
     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
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         __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_ERR(45, 79, __pyx_L1_error)
@@ -230804,7 +250986,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_22setGraph(struct PyPetscSFObject
         #endif
       } else {
         if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_3)) break;
-        #if CYTHON_COMPILING_IN_CPYTHON
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
         __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_ERR(45, 79, __pyx_L1_error)
@@ -230816,7 +250998,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_22setGraph(struct PyPetscSFObject
       if (unlikely(!__pyx_t_2)) {
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
-          if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
+          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
           else __PYX_ERR(45, 79, __pyx_L1_error)
         }
         break;
@@ -230825,7 +251007,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_22setGraph(struct PyPetscSFObject
     }
     if ((likely(PyTuple_CheckExact(__pyx_t_2))) || (PyList_CheckExact(__pyx_t_2))) {
       PyObject* sequence = __pyx_t_2;
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
       Py_ssize_t size = Py_SIZE(sequence);
       #else
       Py_ssize_t size = PySequence_Size(sequence);
@@ -230835,7 +251017,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2SF_22setGraph(struct PyPetscSFObject
         else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
         __PYX_ERR(45, 79, __pyx_L1_error)
       }
-      #if CYTHON_COMPILING_IN_CPYTHON
+      #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
       if (likely(PyTuple_CheckExact(sequence))) {
         __pyx_t_8 = PyTuple_GET_ITEM(sequence, 0); 
         __pyx_t_9 = PyTuple_GET_ITEM(sequence, 1); 
@@ -230885,7 +251067,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 == -1L && PyErr_Occurred())) __PYX_ERR(45, 80, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_rank); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(45, 80, __pyx_L1_error)
     (__pyx_v_iremote[__pyx_v_i]).rank = __pyx_t_1;
 
     /* "PETSc/SF.pyx":81
@@ -230895,7 +251077,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 == -1L && PyErr_Occurred())) __PYX_ERR(45, 81, __pyx_L1_error)
+    __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_index); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(45, 81, __pyx_L1_error)
     (__pyx_v_iremote[__pyx_v_i]).index = __pyx_t_1;
 
     /* "PETSc/SF.pyx":82
@@ -230924,7 +251106,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_ERR(45, 83, __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 == ((int)-1))) __PYX_ERR(45, 83, __pyx_L1_error)
 
   /* "PETSc/SF.pyx":70
  *         return toInt(nroots), toInt(nleaves), local, remote
@@ -230978,6 +251160,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_2SF_25setRankOrder(PyObject *__pyx_v_
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -231037,7 +251220,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_ERR(45, 87, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscSFSetRankOrder(__pyx_v_self->sf, __pyx_v_bval)); if (unlikely(__pyx_t_2 == ((int)-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) )
@@ -231111,7 +251294,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_ERR(45, 93, __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 == ((int)-1))) __PYX_ERR(45, 93, __pyx_L1_error)
 
   /* "PETSc/SF.pyx":94
  *         cdef SF sf = SF()
@@ -231206,7 +251389,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_ERR(45, 99, __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 == ((int)-1))) __PYX_ERR(45, 99, __pyx_L1_error)
 
   /* "PETSc/SF.pyx":100
  *         cdef SF sf = SF()
@@ -231326,6 +251509,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11Partitioner_3view(PyObject *__pyx_v
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -231343,6 +251527,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11Partitioner_3view(PyObject *__pyx_v
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -231409,7 +251594,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_ERR(46, 21, __pyx_L1_error)
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPartitionerView(__pyx_v_self->part, __pyx_v_vwr)); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(46, 21, __pyx_L1_error)
 
   /* "PETSc/Partitioner.pyx":18
  *         self.part = NULL
@@ -231469,7 +251654,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_ERR(46, 24, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPartitionerDestroy((&__pyx_v_self->part))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(46, 24, __pyx_L1_error)
 
   /* "PETSc/Partitioner.pyx":25
  *     def destroy(self):
@@ -231526,6 +251711,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11Partitioner_7create(PyObject *__pyx
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -231543,6 +251729,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11Partitioner_7create(PyObject *__pyx
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -231599,7 +251786,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_ERR(46, 30, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPartitionerCreate(__pyx_v_ccomm, (&__pyx_v_newpart))); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(46, 30, __pyx_L1_error)
 
   /* "PETSc/Partitioner.pyx":31
  *         cdef PetscPartitioner newpart = NULL
@@ -231665,6 +251852,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11Partitioner_9setType(PyObject *__py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -231736,7 +251924,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_ERR(46, 37, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPartitionerSetType(__pyx_v_self->part, __pyx_v_cval)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(46, 37, __pyx_L1_error)
 
   /* "PETSc/Partitioner.pyx":34
  *         return self
@@ -231809,7 +251997,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_ERR(46, 41, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPartitionerGetType(__pyx_v_self->part, (&__pyx_v_cval))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(46, 41, __pyx_L1_error)
 
   /* "PETSc/Partitioner.pyx":42
  *         cdef PetscPartitionerType cval = NULL
@@ -231882,7 +252070,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_ERR(46, 45, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPartitionerSetFromOptions(__pyx_v_self->part)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(46, 45, __pyx_L1_error)
 
   /* "PETSc/Partitioner.pyx":44
  *         return bytes2str(cval)
@@ -231942,7 +252130,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_ERR(46, 48, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPartitionerSetUp(__pyx_v_self->part)); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(46, 48, __pyx_L1_error)
 
   /* "PETSc/Partitioner.pyx":47
  *         CHKERR( PetscPartitionerSetFromOptions(self.part) )
@@ -231992,8 +252180,11 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11Partitioner_17setShellPartition(PyO
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -232002,11 +252193,13 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11Partitioner_17setShellPartition(PyO
         case  0:
         if (likely((values[0] = PyDict_GetItem(__pyx_kwds, __pyx_n_s_numProcs)) != 0)) kw_args--;
         else goto __pyx_L5_argtuple_error;
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_sizes);
           if (value) { values[1] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  2:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_points);
@@ -232019,7 +252212,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_11Partitioner_17setShellPartition(PyO
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  3: values[2] = PyTuple_GET_ITEM(__pyx_args, 2);
+        CYTHON_FALLTHROUGH;
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
         break;
         default: goto __pyx_L5_argtuple_error;
@@ -232069,7 +252264,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 == -1L && PyErr_Occurred())) __PYX_ERR(46, 51, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_asInt(__pyx_v_numProcs); if (unlikely(__pyx_t_1 == ((PetscInt)-1L) && PyErr_Occurred())) __PYX_ERR(46, 51, __pyx_L1_error)
   __pyx_v_cnumProcs = __pyx_t_1;
 
   /* "PETSc/Partitioner.pyx":52
@@ -232201,7 +252396,7 @@ 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__66, NULL); if (unlikely(!__pyx_t_5)) __PYX_ERR(46, 61, __pyx_L1_error)
+      __pyx_t_5 = __Pyx_PyObject_Call(__pyx_builtin_ValueError, __pyx_tuple__69, 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;
@@ -232263,7 +252458,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_ERR(46, 64, __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 == ((int)-1))) __PYX_ERR(46, 64, __pyx_L1_error)
 
   /* "PETSc/Partitioner.pyx":50
  *         CHKERR( PetscPartitionerSetUp(self.part) )
@@ -232331,7 +252526,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_ERR(47, 6, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_CHKERR(__pyx_f_8petsc4py_5PETSc_PetscINCREF((&__pyx_v_source))); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(47, 6, __pyx_L1_error)
 
   /* "PETSc/CAPI.pyx":7
  *     cdef PetscObject source = <PetscObject>  s
@@ -232668,7 +252863,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_ERR(47, 40, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_setref((&(__pyx_v_retv->obj[0])), __pyx_v_arg); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(47, 40, __pyx_L1_error)
 
   /* "PETSc/CAPI.pyx":41
  *     cdef Object retv = subtype_Object(arg)()
@@ -232892,7 +253087,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_ERR(47, 59, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->vwr), __pyx_v_arg); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(47, 59, __pyx_L1_error)
 
   /* "PETSc/CAPI.pyx":60
  *     cdef Viewer retv = Viewer()
@@ -233039,7 +253234,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_ERR(47, 72, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->rnd), __pyx_v_arg); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(47, 72, __pyx_L1_error)
 
   /* "PETSc/CAPI.pyx":73
  *     cdef Random retv = Random()
@@ -233186,7 +253381,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_ERR(47, 85, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->iset), __pyx_v_arg); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(47, 85, __pyx_L1_error)
 
   /* "PETSc/CAPI.pyx":86
  *     cdef IS retv = IS()
@@ -233333,7 +253528,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_ERR(47, 98, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->lgm), __pyx_v_arg); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(47, 98, __pyx_L1_error)
 
   /* "PETSc/CAPI.pyx":99
  *     cdef LGMap retv = LGMap()
@@ -233480,7 +253675,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_ERR(47, 111, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->sf), __pyx_v_arg); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(47, 111, __pyx_L1_error)
 
   /* "PETSc/CAPI.pyx":112
  *     cdef SF retv = SF()
@@ -233627,7 +253822,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_ERR(47, 124, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->vec), __pyx_v_arg); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(47, 124, __pyx_L1_error)
 
   /* "PETSc/CAPI.pyx":125
  *     cdef Vec retv = Vec()
@@ -233774,7 +253969,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_ERR(47, 137, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->sct), __pyx_v_arg); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(47, 137, __pyx_L1_error)
 
   /* "PETSc/CAPI.pyx":138
  *     cdef Scatter retv = Scatter()
@@ -233921,7 +254116,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscSection_New(PetscSection __pyx_
  *     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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->sec), __pyx_v_arg); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(47, 150, __pyx_L1_error)
 
   /* "PETSc/CAPI.pyx":151
  *     cdef Section retv = Section()
@@ -234068,7 +254263,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscMat_New(Mat __pyx_v_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_ERR(47, 163, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->mat), __pyx_v_arg); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(47, 163, __pyx_L1_error)
 
   /* "PETSc/CAPI.pyx":164
  *     cdef Mat retv = Mat()
@@ -234215,7 +254410,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscPC_New(PC __pyx_v_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_ERR(47, 176, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->pc), __pyx_v_arg); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(47, 176, __pyx_L1_error)
 
   /* "PETSc/CAPI.pyx":177
  *     cdef PC retv = PC()
@@ -234362,7 +254557,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscKSP_New(KSP __pyx_v_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_ERR(47, 189, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->ksp), __pyx_v_arg); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(47, 189, __pyx_L1_error)
 
   /* "PETSc/CAPI.pyx":190
  *     cdef KSP retv = KSP()
@@ -234509,7 +254704,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscSNES_New(SNES __pyx_v_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_ERR(47, 202, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->snes), __pyx_v_arg); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(47, 202, __pyx_L1_error)
 
   /* "PETSc/CAPI.pyx":203
  *     cdef SNES retv = SNES()
@@ -234656,7 +254851,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscTS_New(TS __pyx_v_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_ERR(47, 215, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->ts), __pyx_v_arg); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(47, 215, __pyx_L1_error)
 
   /* "PETSc/CAPI.pyx":216
  *     cdef TS retv = TS()
@@ -234803,7 +254998,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscTAO_New(Tao __pyx_v_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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->tao), __pyx_v_arg); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(47, 228, __pyx_L1_error)
 
   /* "PETSc/CAPI.pyx":229
  *     cdef TAO retv = TAO()
@@ -234950,7 +255145,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscAO_New(AO __pyx_v_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_ERR(47, 241, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->ao), __pyx_v_arg); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(47, 241, __pyx_L1_error)
 
   /* "PETSc/CAPI.pyx":242
  *     cdef AO retv = AO()
@@ -235102,7 +255297,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscDM_New(DM __pyx_v_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_ERR(47, 254, __pyx_L1_error)
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->dm), __pyx_v_arg); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(47, 254, __pyx_L1_error)
 
   /* "PETSc/CAPI.pyx":255
  *     cdef DM retv = subtype_DM(arg)()
@@ -235250,7 +255445,7 @@ static PyObject *__pyx_f_8petsc4py_5PETSc_PyPetscPartitioner_New(PetscPartitione
  *     return retv
  * 
  */
-  __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)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_setref((&__pyx_v_retv->part), __pyx_v_arg); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(47, 267, __pyx_L1_error)
 
   /* "PETSc/CAPI.pyx":268
  *     cdef Partitioner retv = Partitioner()
@@ -235362,7 +255557,7 @@ static PetscPartitioner __pyx_f_8petsc4py_5PETSc_PyPetscPartitioner_Get(PyObject
   return __pyx_r;
 }
 
-/* "PETSc/PETSc.pyx":192
+/* "PETSc/PETSc.pyx":196
  * cdef object tracebacklist = []
  * 
  * cdef int traceback(MPI_Comm       comm,             # <<<<<<<<<<<<<<
@@ -235383,16 +255578,16 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(MPI_Comm __pyx_v_comm, int __pyx_v
   PyObject *__pyx_t_1 = NULL;
   PyObject *__pyx_t_2 = NULL;
   PyObject *__pyx_t_3 = NULL;
-  Py_ssize_t __pyx_t_4;
+  int __pyx_t_4;
   PyObject *__pyx_t_5 = NULL;
   int __pyx_t_6;
   int __pyx_t_7;
   #ifdef WITH_THREAD
-  PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();
+  PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
   #endif
   __Pyx_RefNannySetupContext("traceback", 0);
 
-  /* "PETSc/PETSc.pyx":200
+  /* "PETSc/PETSc.pyx":204
  *                    const_char    *mess,
  *                    void          *ctx) with gil:
  *     cdef PetscLogDouble mem=0             # <<<<<<<<<<<<<<
@@ -235401,7 +255596,7 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(MPI_Comm __pyx_v_comm, int __pyx_v
  */
   __pyx_v_mem = 0.0;
 
-  /* "PETSc/PETSc.pyx":201
+  /* "PETSc/PETSc.pyx":205
  *                    void          *ctx) with gil:
  *     cdef PetscLogDouble mem=0
  *     cdef PetscLogDouble rss=0             # <<<<<<<<<<<<<<
@@ -235410,7 +255605,7 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(MPI_Comm __pyx_v_comm, int __pyx_v
  */
   __pyx_v_rss = 0.0;
 
-  /* "PETSc/PETSc.pyx":202
+  /* "PETSc/PETSc.pyx":206
  *     cdef PetscLogDouble mem=0
  *     cdef PetscLogDouble rss=0
  *     cdef const_char    *text=NULL             # <<<<<<<<<<<<<<
@@ -235419,7 +255614,7 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(MPI_Comm __pyx_v_comm, int __pyx_v
  */
   __pyx_v_text = NULL;
 
-  /* "PETSc/PETSc.pyx":204
+  /* "PETSc/PETSc.pyx":208
  *     cdef const_char    *text=NULL
  *     global tracebacklist
  *     cdef object tbl = tracebacklist             # <<<<<<<<<<<<<<
@@ -235429,40 +255624,40 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(MPI_Comm __pyx_v_comm, int __pyx_v
   __Pyx_INCREF(__pyx_v_8petsc4py_5PETSc_tracebacklist);
   __pyx_v_tbl = __pyx_v_8petsc4py_5PETSc_tracebacklist;
 
-  /* "PETSc/PETSc.pyx":205
+  /* "PETSc/PETSc.pyx":209
  *     global tracebacklist
  *     cdef object tbl = tracebacklist
  *     fun = bytes2str(cfun)             # <<<<<<<<<<<<<<
  *     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_ERR(11, 205, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cfun); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 209, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_fun = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/PETSc.pyx":206
+  /* "PETSc/PETSc.pyx":210
  *     cdef object tbl = tracebacklist
  *     fun = bytes2str(cfun)
  *     fnm = bytes2str(cfile)             # <<<<<<<<<<<<<<
  *     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_ERR(11, 206, __pyx_L1_error)
+  __pyx_t_1 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_cfile); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 210, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __pyx_v_fnm = __pyx_t_1;
   __pyx_t_1 = 0;
 
-  /* "PETSc/PETSc.pyx":207
+  /* "PETSc/PETSc.pyx":211
  *     fun = bytes2str(cfun)
  *     fnm = bytes2str(cfile)
  *     m = "%s() line %d in %s" % (fun, line, fnm)             # <<<<<<<<<<<<<<
  *     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_ERR(11, 207, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_line); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 211, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 207, __pyx_L1_error)
+  __pyx_t_2 = PyTuple_New(3); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 211, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __Pyx_INCREF(__pyx_v_fun);
   __Pyx_GIVEREF(__pyx_v_fun);
@@ -235473,24 +255668,24 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(MPI_Comm __pyx_v_comm, int __pyx_v
   __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_ERR(11, 207, __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, 211, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
   __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   __pyx_v_m = ((PyObject*)__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/PETSc.pyx":208
+  /* "PETSc/PETSc.pyx":212
  *     fnm = bytes2str(cfile)
  *     m = "%s() line %d in %s" % (fun, line, fnm)
  *     tbl.insert(0, m)             # <<<<<<<<<<<<<<
  *     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_ERR(11, 208, __pyx_L1_error)
+  __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_tbl, __pyx_n_s_insert); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 212, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_2);
   __pyx_t_3 = NULL;
   __pyx_t_4 = 0;
-  if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_2))) {
+  if (CYTHON_UNPACK_METHODS && 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);
@@ -235500,24 +255695,42 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(MPI_Comm __pyx_v_comm, int __pyx_v
       __pyx_t_4 = 1;
     }
   }
-  __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;
+  #if CYTHON_FAST_PYCALL
+  if (PyFunction_Check(__pyx_t_2)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_int_0, __pyx_v_m};
+    __pyx_t_1 = __Pyx_PyFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 212, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_GOTREF(__pyx_t_1);
+  } else
+  #endif
+  #if CYTHON_FAST_PYCCALL
+  if (__Pyx_PyFastCFunction_Check(__pyx_t_2)) {
+    PyObject *__pyx_temp[3] = {__pyx_t_3, __pyx_int_0, __pyx_v_m};
+    __pyx_t_1 = __Pyx_PyCFunction_FastCall(__pyx_t_2, __pyx_temp+1-__pyx_t_4, 2+__pyx_t_4); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 212, __pyx_L1_error)
+    __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+    __Pyx_GOTREF(__pyx_t_1);
+  } else
+  #endif
+  {
+    __pyx_t_5 = PyTuple_New(2+__pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 212, __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;
+    }
+    __Pyx_INCREF(__pyx_int_0);
+    __Pyx_GIVEREF(__pyx_int_0);
+    PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_int_0);
+    __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_ERR(11, 212, __pyx_L1_error)
+    __Pyx_GOTREF(__pyx_t_1);
+    __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
   }
-  __Pyx_INCREF(__pyx_int_0);
-  __Pyx_GIVEREF(__pyx_int_0);
-  PyTuple_SET_ITEM(__pyx_t_5, 0+__pyx_t_4, __pyx_int_0);
-  __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_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;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/PETSc.pyx":209
+  /* "PETSc/PETSc.pyx":213
  *     m = "%s() line %d in %s" % (fun, line, fnm)
  *     tbl.insert(0, m)
  *     if p != PETSC_ERROR_INITIAL:             # <<<<<<<<<<<<<<
@@ -235527,7 +255740,7 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(MPI_Comm __pyx_v_comm, int __pyx_v
   __pyx_t_6 = ((__pyx_v_p != PETSC_ERROR_INITIAL) != 0);
   if (__pyx_t_6) {
 
-    /* "PETSc/PETSc.pyx":210
+    /* "PETSc/PETSc.pyx":214
  *     tbl.insert(0, m)
  *     if p != PETSC_ERROR_INITIAL:
  *         return n             # <<<<<<<<<<<<<<
@@ -235537,7 +255750,7 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(MPI_Comm __pyx_v_comm, int __pyx_v
     __pyx_r = __pyx_v_n;
     goto __pyx_L0;
 
-    /* "PETSc/PETSc.pyx":209
+    /* "PETSc/PETSc.pyx":213
  *     m = "%s() line %d in %s" % (fun, line, fnm)
  *     tbl.insert(0, m)
  *     if p != PETSC_ERROR_INITIAL:             # <<<<<<<<<<<<<<
@@ -235546,16 +255759,16 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(MPI_Comm __pyx_v_comm, int __pyx_v
  */
   }
 
-  /* "PETSc/PETSc.pyx":212
+  /* "PETSc/PETSc.pyx":216
  *         return n
  *     #
  *     del tbl[1:] # clear any previous stuff             # <<<<<<<<<<<<<<
  *     if n == PETSC_ERR_MEM: # special case
  *         PetscMallocGetCurrentUsage(&mem)
  */
-  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)
+  if (__Pyx_PyObject_DelSlice(__pyx_v_tbl, 1, 0, NULL, NULL, &__pyx_slice__70, 1, 0, 1) < 0) __PYX_ERR(11, 216, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":213
+  /* "PETSc/PETSc.pyx":217
  *     #
  *     del tbl[1:] # clear any previous stuff
  *     if n == PETSC_ERR_MEM: # special case             # <<<<<<<<<<<<<<
@@ -235565,7 +255778,7 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(MPI_Comm __pyx_v_comm, int __pyx_v
   __pyx_t_6 = ((__pyx_v_n == PETSC_ERR_MEM) != 0);
   if (__pyx_t_6) {
 
-    /* "PETSc/PETSc.pyx":214
+    /* "PETSc/PETSc.pyx":218
  *     del tbl[1:] # clear any previous stuff
  *     if n == PETSC_ERR_MEM: # special case
  *         PetscMallocGetCurrentUsage(&mem)             # <<<<<<<<<<<<<<
@@ -235574,7 +255787,7 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(MPI_Comm __pyx_v_comm, int __pyx_v
  */
     PetscMallocGetCurrentUsage((&__pyx_v_mem));
 
-    /* "PETSc/PETSc.pyx":215
+    /* "PETSc/PETSc.pyx":219
  *     if n == PETSC_ERR_MEM: # special case
  *         PetscMallocGetCurrentUsage(&mem)
  *         PetscMemoryGetCurrentUsage(&rss)             # <<<<<<<<<<<<<<
@@ -235583,18 +255796,18 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(MPI_Comm __pyx_v_comm, int __pyx_v
  */
     PetscMemoryGetCurrentUsage((&__pyx_v_rss));
 
-    /* "PETSc/PETSc.pyx":218
+    /* "PETSc/PETSc.pyx":222
  *         m = ("Out of memory. "
  *              "Allocated: %d, "
  *              "Used by process: %d") % (mem, rss)             # <<<<<<<<<<<<<<
  *         tbl.append(m)
  *     else:
  */
-    __pyx_t_1 = PyFloat_FromDouble(__pyx_v_mem); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 218, __pyx_L1_error)
+    __pyx_t_1 = PyFloat_FromDouble(__pyx_v_mem); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 222, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_1);
-    __pyx_t_2 = PyFloat_FromDouble(__pyx_v_rss); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 218, __pyx_L1_error)
+    __pyx_t_2 = PyFloat_FromDouble(__pyx_v_rss); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 222, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_2);
-    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 218, __pyx_L1_error)
+    __pyx_t_5 = PyTuple_New(2); if (unlikely(!__pyx_t_5)) __PYX_ERR(11, 222, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_5);
     __Pyx_GIVEREF(__pyx_t_1);
     PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_1);
@@ -235602,22 +255815,22 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(MPI_Comm __pyx_v_comm, int __pyx_v
     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_ERR(11, 218, __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, 222, __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));
     __pyx_t_2 = 0;
 
-    /* "PETSc/PETSc.pyx":219
+    /* "PETSc/PETSc.pyx":223
  *              "Allocated: %d, "
  *              "Used by process: %d") % (mem, rss)
  *         tbl.append(m)             # <<<<<<<<<<<<<<
  *     else:
  *         PetscErrorMessage(n, &text, NULL)
  */
-    __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)
+    __pyx_t_7 = __Pyx_PyObject_Append(__pyx_v_tbl, __pyx_v_m); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(11, 223, __pyx_L1_error)
 
-    /* "PETSc/PETSc.pyx":213
+    /* "PETSc/PETSc.pyx":217
  *     #
  *     del tbl[1:] # clear any previous stuff
  *     if n == PETSC_ERR_MEM: # special case             # <<<<<<<<<<<<<<
@@ -235627,7 +255840,7 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(MPI_Comm __pyx_v_comm, int __pyx_v
     goto __pyx_L4;
   }
 
-  /* "PETSc/PETSc.pyx":221
+  /* "PETSc/PETSc.pyx":225
  *         tbl.append(m)
  *     else:
  *         PetscErrorMessage(n, &text, NULL)             # <<<<<<<<<<<<<<
@@ -235639,7 +255852,7 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(MPI_Comm __pyx_v_comm, int __pyx_v
   }
   __pyx_L4:;
 
-  /* "PETSc/PETSc.pyx":222
+  /* "PETSc/PETSc.pyx":226
  *     else:
  *         PetscErrorMessage(n, &text, NULL)
  *     if text != NULL: tbl.append(bytes2str(text))             # <<<<<<<<<<<<<<
@@ -235648,13 +255861,13 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(MPI_Comm __pyx_v_comm, int __pyx_v
  */
   __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_ERR(11, 222, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_text); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 226, __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_ERR(11, 222, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_Append(__pyx_v_tbl, __pyx_t_2); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(11, 226, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   }
 
-  /* "PETSc/PETSc.pyx":223
+  /* "PETSc/PETSc.pyx":227
  *         PetscErrorMessage(n, &text, NULL)
  *     if text != NULL: tbl.append(bytes2str(text))
  *     if mess != NULL: tbl.append(bytes2str(mess))             # <<<<<<<<<<<<<<
@@ -235663,13 +255876,13 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(MPI_Comm __pyx_v_comm, int __pyx_v
  */
   __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_ERR(11, 223, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_bytes2str(__pyx_v_mess); if (unlikely(!__pyx_t_2)) __PYX_ERR(11, 227, __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_ERR(11, 223, __pyx_L1_error)
+    __pyx_t_7 = __Pyx_PyObject_Append(__pyx_v_tbl, __pyx_t_2); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(11, 227, __pyx_L1_error)
     __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
   }
 
-  /* "PETSc/PETSc.pyx":224
+  /* "PETSc/PETSc.pyx":228
  *     if text != NULL: tbl.append(bytes2str(text))
  *     if mess != NULL: tbl.append(bytes2str(mess))
  *     <void>comm; <void>ctx; # unused             # <<<<<<<<<<<<<<
@@ -235679,7 +255892,7 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(MPI_Comm __pyx_v_comm, int __pyx_v
   ((void)__pyx_v_comm);
   ((void)__pyx_v_ctx);
 
-  /* "PETSc/PETSc.pyx":225
+  /* "PETSc/PETSc.pyx":229
  *     if mess != NULL: tbl.append(bytes2str(mess))
  *     <void>comm; <void>ctx; # unused
  *     return n             # <<<<<<<<<<<<<<
@@ -235689,7 +255902,7 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(MPI_Comm __pyx_v_comm, int __pyx_v
   __pyx_r = __pyx_v_n;
   goto __pyx_L0;
 
-  /* "PETSc/PETSc.pyx":192
+  /* "PETSc/PETSc.pyx":196
  * cdef object tracebacklist = []
  * 
  * cdef int traceback(MPI_Comm       comm,             # <<<<<<<<<<<<<<
@@ -235703,7 +255916,7 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(MPI_Comm __pyx_v_comm, int __pyx_v
   __Pyx_XDECREF(__pyx_t_2);
   __Pyx_XDECREF(__pyx_t_3);
   __Pyx_XDECREF(__pyx_t_5);
-  __Pyx_WriteUnraisable("petsc4py.PETSc.traceback", __pyx_clineno, __pyx_lineno, __pyx_filename, 0, 0);
+  __Pyx_WriteUnraisable("petsc4py.PETSc.traceback", __pyx_clineno, __pyx_lineno, __pyx_filename, 1, 0);
   __pyx_r = 0;
   __pyx_L0:;
   __Pyx_XDECREF(__pyx_v_tbl);
@@ -235712,12 +255925,12 @@ static int __pyx_f_8petsc4py_5PETSc_traceback(MPI_Comm __pyx_v_comm, int __pyx_v
   __Pyx_XDECREF(__pyx_v_m);
   __Pyx_RefNannyFinishContext();
   #ifdef WITH_THREAD
-  PyGILState_Release(__pyx_gilstate_save);
+  __Pyx_PyGILState_Release(__pyx_gilstate_save);
   #endif
   return __pyx_r;
 }
 
-/* "PETSc/PETSc.pyx":227
+/* "PETSc/PETSc.pyx":231
  *     return n
  * 
  * cdef int PetscPythonErrorHandler(             # <<<<<<<<<<<<<<
@@ -235730,7 +255943,7 @@ static int __pyx_f_8petsc4py_5PETSc_PetscPythonErrorHandler(MPI_Comm __pyx_v_com
   int __pyx_t_1;
   int __pyx_t_2;
 
-  /* "PETSc/PETSc.pyx":237
+  /* "PETSc/PETSc.pyx":241
  *     void          *ctx) nogil:
  *     global tracebacklist
  *     if Py_IsInitialized() and (<void*>tracebacklist) != NULL:             # <<<<<<<<<<<<<<
@@ -235748,7 +255961,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":238
+    /* "PETSc/PETSc.pyx":242
  *     global tracebacklist
  *     if Py_IsInitialized() and (<void*>tracebacklist) != NULL:
  *         return traceback(comm, line, cfun, cfile, n, p, mess, ctx)             # <<<<<<<<<<<<<<
@@ -235758,7 +255971,7 @@ 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
+    /* "PETSc/PETSc.pyx":241
  *     void          *ctx) nogil:
  *     global tracebacklist
  *     if Py_IsInitialized() and (<void*>tracebacklist) != NULL:             # <<<<<<<<<<<<<<
@@ -235767,7 +255980,7 @@ static int __pyx_f_8petsc4py_5PETSc_PetscPythonErrorHandler(MPI_Comm __pyx_v_com
  */
   }
 
-  /* "PETSc/PETSc.pyx":240
+  /* "PETSc/PETSc.pyx":244
  *         return traceback(comm, line, cfun, cfile, n, p, mess, ctx)
  *     else:
  *         return PetscTBEH(comm, line, cfun, cfile, n, p, mess, ctx)             # <<<<<<<<<<<<<<
@@ -235779,7 +255992,7 @@ static int __pyx_f_8petsc4py_5PETSc_PetscPythonErrorHandler(MPI_Comm __pyx_v_com
     goto __pyx_L0;
   }
 
-  /* "PETSc/PETSc.pyx":227
+  /* "PETSc/PETSc.pyx":231
  *     return n
  * 
  * cdef int PetscPythonErrorHandler(             # <<<<<<<<<<<<<<
@@ -235792,7 +256005,7 @@ static int __pyx_f_8petsc4py_5PETSc_PetscPythonErrorHandler(MPI_Comm __pyx_v_com
   return __pyx_r;
 }
 
-/* "PETSc/PETSc.pyx":273
+/* "PETSc/PETSc.pyx":277
  * cdef char** PyPetsc_Argv = NULL
  * 
  * cdef int getinitargs(object args, int *argc, char **argv[]) except -1:             # <<<<<<<<<<<<<<
@@ -235824,7 +256037,7 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
   __Pyx_RefNannySetupContext("getinitargs", 0);
   __Pyx_INCREF(__pyx_v_args);
 
-  /* "PETSc/PETSc.pyx":275
+  /* "PETSc/PETSc.pyx":279
  * cdef int getinitargs(object args, int *argc, char **argv[]) except -1:
  *     # allocate command line arguments
  *     cdef int i, c = 0             # <<<<<<<<<<<<<<
@@ -235833,7 +256046,7 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
  */
   __pyx_v_c = 0;
 
-  /* "PETSc/PETSc.pyx":276
+  /* "PETSc/PETSc.pyx":280
  *     # allocate command line arguments
  *     cdef int i, c = 0
  *     cdef char **v = NULL             # <<<<<<<<<<<<<<
@@ -235842,7 +256055,7 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
  */
   __pyx_v_v = NULL;
 
-  /* "PETSc/PETSc.pyx":277
+  /* "PETSc/PETSc.pyx":281
  *     cdef int i, c = 0
  *     cdef char **v = NULL
  *     if args is None: args = []             # <<<<<<<<<<<<<<
@@ -235852,45 +256065,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_ERR(11, 277, __pyx_L1_error)
+    __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 281, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_3);
     __Pyx_DECREF_SET(__pyx_v_args, __pyx_t_3);
     __pyx_t_3 = 0;
   }
 
-  /* "PETSc/PETSc.pyx":278
+  /* "PETSc/PETSc.pyx":282
  *     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_ERR(11, 278, __pyx_L1_error)
+  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 282, __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_ERR(11, 278, __pyx_L1_error)
+    __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(11, 282, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(11, 278, __pyx_L1_error)
+    __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(11, 282, __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_ERR(11, 278, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __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, 282, __pyx_L1_error)
         #else
-        __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_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(11, 282, __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_ERR(11, 278, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __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, 282, __pyx_L1_error)
         #else
-        __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_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(11, 282, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         #endif
       }
@@ -235899,8 +256112,8 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
       if (unlikely(!__pyx_t_7)) {
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
-          if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(11, 278, __pyx_L1_error)
+          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
+          else __PYX_ERR(11, 282, __pyx_L1_error)
         }
         break;
       }
@@ -235908,19 +256121,19 @@ 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_ERR(11, 278, __pyx_L1_error)
+    __pyx_t_8 = PyTuple_New(1); if (unlikely(!__pyx_t_8)) __PYX_ERR(11, 282, __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 *)(&PyString_Type)), __pyx_t_8, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(11, 278, __pyx_L1_error)
+    __pyx_t_9 = __Pyx_PyObject_Call(((PyObject *)(&PyString_Type)), __pyx_t_8, NULL); if (unlikely(!__pyx_t_9)) __PYX_ERR(11, 282, __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_ERR(11, 278, __pyx_L1_error)
+    __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_t_9, __pyx_n_s_encode); if (unlikely(!__pyx_t_8)) __PYX_ERR(11, 282, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_8);
     __Pyx_DECREF(__pyx_t_9); __pyx_t_9 = 0;
     __pyx_t_9 = NULL;
-    if (CYTHON_COMPILING_IN_CPYTHON && likely(PyMethod_Check(__pyx_t_8))) {
+    if (CYTHON_UNPACK_METHODS && 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);
@@ -235930,53 +256143,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_ERR(11, 278, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallOneArg(__pyx_t_8, __pyx_t_9); if (unlikely(!__pyx_t_7)) __PYX_ERR(11, 282, __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_ERR(11, 278, __pyx_L1_error)
+      __pyx_t_7 = __Pyx_PyObject_CallNoArg(__pyx_t_8); if (unlikely(!__pyx_t_7)) __PYX_ERR(11, 282, __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_ERR(11, 278, __pyx_L1_error)
+    if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_t_7))) __PYX_ERR(11, 282, __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":279
+  /* "PETSc/PETSc.pyx":283
  *     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_ERR(11, 279, __pyx_L1_error)
+  __pyx_t_3 = PyList_New(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(11, 283, __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_ERR(11, 279, __pyx_L1_error)
+    __pyx_t_5 = -1; __pyx_t_4 = PyObject_GetIter(__pyx_v_args); if (unlikely(!__pyx_t_4)) __PYX_ERR(11, 283, __pyx_L1_error)
     __Pyx_GOTREF(__pyx_t_4);
-    __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(11, 279, __pyx_L1_error)
+    __pyx_t_6 = Py_TYPE(__pyx_t_4)->tp_iternext; if (unlikely(!__pyx_t_6)) __PYX_ERR(11, 283, __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_ERR(11, 279, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __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, 283, __pyx_L1_error)
         #else
-        __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_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(11, 283, __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_ERR(11, 279, __pyx_L1_error)
+        #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+        __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, 283, __pyx_L1_error)
         #else
-        __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_t_7 = PySequence_ITEM(__pyx_t_4, __pyx_t_5); __pyx_t_5++; if (unlikely(!__pyx_t_7)) __PYX_ERR(11, 283, __pyx_L1_error)
         __Pyx_GOTREF(__pyx_t_7);
         #endif
       }
@@ -235985,8 +256198,8 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
       if (unlikely(!__pyx_t_7)) {
         PyObject* exc_type = PyErr_Occurred();
         if (exc_type) {
-          if (likely(exc_type == PyExc_StopIteration || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
-          else __PYX_ERR(11, 279, __pyx_L1_error)
+          if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
+          else __PYX_ERR(11, 283, __pyx_L1_error)
         }
         break;
       }
@@ -235994,26 +256207,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_ERR(11, 279, __pyx_L1_error)
+    __pyx_t_2 = __Pyx_PyObject_IsTrue(__pyx_v_a); if (unlikely(__pyx_t_2 < 0)) __PYX_ERR(11, 283, __pyx_L1_error)
     if (__pyx_t_2) {
-      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_v_a))) __PYX_ERR(11, 279, __pyx_L1_error)
+      if (unlikely(__Pyx_ListComp_Append(__pyx_t_3, (PyObject*)__pyx_v_a))) __PYX_ERR(11, 283, __pyx_L1_error)
     }
   }
   __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":280
+  /* "PETSc/PETSc.pyx":284
  *     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_ERR(11, 280, __pyx_L1_error)
+  __pyx_t_5 = PyObject_Length(__pyx_v_args); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(11, 284, __pyx_L1_error)
   __pyx_v_c = ((int)__pyx_t_5);
 
-  /* "PETSc/PETSc.pyx":281
+  /* "PETSc/PETSc.pyx":285
  *     args = [a for a in args if a]
  *     c = <int> len(args)
  *     v = <char**> malloc(<size_t>(c+1)*sizeof(char*))             # <<<<<<<<<<<<<<
@@ -236022,7 +256235,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":282
+  /* "PETSc/PETSc.pyx":286
  *     c = <int> len(args)
  *     v = <char**> malloc(<size_t>(c+1)*sizeof(char*))
  *     if v == NULL: raise MemoryError             # <<<<<<<<<<<<<<
@@ -236031,10 +256244,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_ERR(11, 282, __pyx_L1_error)
+    PyErr_NoMemory(); __PYX_ERR(11, 286, __pyx_L1_error)
   }
 
-  /* "PETSc/PETSc.pyx":283
+  /* "PETSc/PETSc.pyx":287
  *     v = <char**> malloc(<size_t>(c+1)*sizeof(char*))
  *     if v == NULL: raise MemoryError
  *     memset(v, 0, <size_t>(c+1)*sizeof(char*))             # <<<<<<<<<<<<<<
@@ -236043,7 +256256,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":284
+  /* "PETSc/PETSc.pyx":288
  *     if v == NULL: raise MemoryError
  *     memset(v, 0, <size_t>(c+1)*sizeof(char*))
  *     try:             # <<<<<<<<<<<<<<
@@ -236059,7 +256272,7 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
     __Pyx_XGOTREF(__pyx_t_12);
     /*try:*/ {
 
-      /* "PETSc/PETSc.pyx":285
+      /* "PETSc/PETSc.pyx":289
  *     memset(v, 0, <size_t>(c+1)*sizeof(char*))
  *     try:
  *         for 0 <= i < c:             # <<<<<<<<<<<<<<
@@ -236069,20 +256282,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":286
+        /* "PETSc/PETSc.pyx":290
  *     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)) __PYX_ERR(11, 286, __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, 290, __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_ERR(11, 286, __pyx_L10_error)
+        __pyx_t_14 = __Pyx_PyObject_AsWritableString(__pyx_t_3); if (unlikely((!__pyx_t_14) && PyErr_Occurred())) __PYX_ERR(11, 290, __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":287
+        /* "PETSc/PETSc.pyx":291
  *         for 0 <= i < c:
  *             v[i] = strdup(args[i])
  *             if v[i] == NULL:             # <<<<<<<<<<<<<<
@@ -236092,16 +256305,16 @@ 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":288
+          /* "PETSc/PETSc.pyx":292
  *             v[i] = strdup(args[i])
  *             if v[i] == NULL:
  *                 raise MemoryError             # <<<<<<<<<<<<<<
  *     except:
  *         delinitargs(&c, &v); raise
  */
-          PyErr_NoMemory(); __PYX_ERR(11, 288, __pyx_L10_error)
+          PyErr_NoMemory(); __PYX_ERR(11, 292, __pyx_L10_error)
 
-          /* "PETSc/PETSc.pyx":287
+          /* "PETSc/PETSc.pyx":291
  *         for 0 <= i < c:
  *             v[i] = strdup(args[i])
  *             if v[i] == NULL:             # <<<<<<<<<<<<<<
@@ -236111,7 +256324,7 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
         }
       }
 
-      /* "PETSc/PETSc.pyx":284
+      /* "PETSc/PETSc.pyx":288
  *     if v == NULL: raise MemoryError
  *     memset(v, 0, <size_t>(c+1)*sizeof(char*))
  *     try:             # <<<<<<<<<<<<<<
@@ -236122,16 +256335,15 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
     __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;
+    goto __pyx_L15_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":289
+    /* "PETSc/PETSc.pyx":293
  *             if v[i] == NULL:
  *                 raise MemoryError
  *     except:             # <<<<<<<<<<<<<<
@@ -236140,12 +256352,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_ERR(11, 289, __pyx_L12_except_error)
+      if (__Pyx_GetException(&__pyx_t_3, &__pyx_t_4, &__pyx_t_7) < 0) __PYX_ERR(11, 293, __pyx_L12_except_error)
       __Pyx_GOTREF(__pyx_t_3);
       __Pyx_GOTREF(__pyx_t_4);
       __Pyx_GOTREF(__pyx_t_7);
 
-      /* "PETSc/PETSc.pyx":290
+      /* "PETSc/PETSc.pyx":294
  *                 raise MemoryError
  *     except:
  *         delinitargs(&c, &v); raise             # <<<<<<<<<<<<<<
@@ -236158,27 +256370,26 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
       __Pyx_XGIVEREF(__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_ERR(11, 290, __pyx_L12_except_error)
+      __PYX_ERR(11, 294, __pyx_L12_except_error)
     }
     __pyx_L12_except_error:;
 
-    /* "PETSc/PETSc.pyx":284
+    /* "PETSc/PETSc.pyx":288
  *     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);
     __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
     goto __pyx_L1_error;
-    __pyx_L17_try_end:;
+    __pyx_L15_try_end:;
   }
 
-  /* "PETSc/PETSc.pyx":291
+  /* "PETSc/PETSc.pyx":295
  *     except:
  *         delinitargs(&c, &v); raise
  *     argc[0] = c; argv[0] = v             # <<<<<<<<<<<<<<
@@ -236188,7 +256399,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":292
+  /* "PETSc/PETSc.pyx":296
  *         delinitargs(&c, &v); raise
  *     argc[0] = c; argv[0] = v
  *     return 0             # <<<<<<<<<<<<<<
@@ -236198,7 +256409,7 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/PETSc.pyx":273
+  /* "PETSc/PETSc.pyx":277
  * cdef char** PyPetsc_Argv = NULL
  * 
  * cdef int getinitargs(object args, int *argc, char **argv[]) except -1:             # <<<<<<<<<<<<<<
@@ -236222,7 +256433,7 @@ static int __pyx_f_8petsc4py_5PETSc_getinitargs(PyObject *__pyx_v_args, int *__p
   return __pyx_r;
 }
 
-/* "PETSc/PETSc.pyx":294
+/* "PETSc/PETSc.pyx":298
  *     return 0
  * 
  * cdef void delinitargs(int *argc, char **argv[]) nogil:             # <<<<<<<<<<<<<<
@@ -236238,7 +256449,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":296
+  /* "PETSc/PETSc.pyx":300
  * cdef void delinitargs(int *argc, char **argv[]) nogil:
  *     # dallocate command line arguments
  *     cdef int i, c = argc[0]             # <<<<<<<<<<<<<<
@@ -236247,7 +256458,7 @@ static void __pyx_f_8petsc4py_5PETSc_delinitargs(int *__pyx_v_argc, char ***__py
  */
   __pyx_v_c = (__pyx_v_argc[0]);
 
-  /* "PETSc/PETSc.pyx":297
+  /* "PETSc/PETSc.pyx":301
  *     # dallocate command line arguments
  *     cdef int i, c = argc[0]
  *     cdef char** v = argv[0]             # <<<<<<<<<<<<<<
@@ -236256,7 +256467,7 @@ static void __pyx_f_8petsc4py_5PETSc_delinitargs(int *__pyx_v_argc, char ***__py
  */
   __pyx_v_v = (__pyx_v_argv[0]);
 
-  /* "PETSc/PETSc.pyx":298
+  /* "PETSc/PETSc.pyx":302
  *     cdef int i, c = argc[0]
  *     cdef char** v = argv[0]
  *     argc[0] = 0; argv[0] = NULL;             # <<<<<<<<<<<<<<
@@ -236266,7 +256477,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":299
+  /* "PETSc/PETSc.pyx":303
  *     cdef char** v = argv[0]
  *     argc[0] = 0; argv[0] = NULL;
  *     if c >= 0 and v != NULL:             # <<<<<<<<<<<<<<
@@ -236284,7 +256495,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":300
+    /* "PETSc/PETSc.pyx":304
  *     argc[0] = 0; argv[0] = NULL;
  *     if c >= 0 and v != NULL:
  *         for 0 <= i < c:             # <<<<<<<<<<<<<<
@@ -236294,7 +256505,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":301
+      /* "PETSc/PETSc.pyx":305
  *     if c >= 0 and v != NULL:
  *         for 0 <= i < c:
  *             if  v[i] != NULL: free(v[i])             # <<<<<<<<<<<<<<
@@ -236307,7 +256518,7 @@ static void __pyx_f_8petsc4py_5PETSc_delinitargs(int *__pyx_v_argc, char ***__py
       }
     }
 
-    /* "PETSc/PETSc.pyx":302
+    /* "PETSc/PETSc.pyx":306
  *         for 0 <= i < c:
  *             if  v[i] != NULL: free(v[i])
  *         free(v)             # <<<<<<<<<<<<<<
@@ -236316,7 +256527,7 @@ static void __pyx_f_8petsc4py_5PETSc_delinitargs(int *__pyx_v_argc, char ***__py
  */
     free(__pyx_v_v);
 
-    /* "PETSc/PETSc.pyx":299
+    /* "PETSc/PETSc.pyx":303
  *     cdef char** v = argv[0]
  *     argc[0] = 0; argv[0] = NULL;
  *     if c >= 0 and v != NULL:             # <<<<<<<<<<<<<<
@@ -236325,7 +256536,7 @@ static void __pyx_f_8petsc4py_5PETSc_delinitargs(int *__pyx_v_argc, char ***__py
  */
   }
 
-  /* "PETSc/PETSc.pyx":294
+  /* "PETSc/PETSc.pyx":298
  *     return 0
  * 
  * cdef void delinitargs(int *argc, char **argv[]) nogil:             # <<<<<<<<<<<<<<
@@ -236336,7 +256547,7 @@ static void __pyx_f_8petsc4py_5PETSc_delinitargs(int *__pyx_v_argc, char ***__py
   /* function exit code */
 }
 
-/* "PETSc/PETSc.pyx":304
+/* "PETSc/PETSc.pyx":308
  *         free(v)
  * 
  * cdef void finalize() nogil:             # <<<<<<<<<<<<<<
@@ -236348,7 +256559,7 @@ static void __pyx_f_8petsc4py_5PETSc_finalize(void) {
   int __pyx_v_ierr;
   int __pyx_t_1;
 
-  /* "PETSc/PETSc.pyx":305
+  /* "PETSc/PETSc.pyx":309
  * 
  * cdef void finalize() nogil:
  *     cdef int ierr = 0             # <<<<<<<<<<<<<<
@@ -236357,7 +256568,7 @@ static void __pyx_f_8petsc4py_5PETSc_finalize(void) {
  */
   __pyx_v_ierr = 0;
 
-  /* "PETSc/PETSc.pyx":308
+  /* "PETSc/PETSc.pyx":312
  *     # deallocate command line arguments
  *     global PyPetsc_Argc; global PyPetsc_Argv;
  *     delinitargs(&PyPetsc_Argc, &PyPetsc_Argv)             # <<<<<<<<<<<<<<
@@ -236366,7 +256577,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":310
+  /* "PETSc/PETSc.pyx":314
  *     delinitargs(&PyPetsc_Argc, &PyPetsc_Argv)
  *     # manage PETSc finalization
  *     if not (<int>PetscInitializeCalled): return             # <<<<<<<<<<<<<<
@@ -236378,7 +256589,7 @@ static void __pyx_f_8petsc4py_5PETSc_finalize(void) {
     goto __pyx_L0;
   }
 
-  /* "PETSc/PETSc.pyx":311
+  /* "PETSc/PETSc.pyx":315
  *     # manage PETSc finalization
  *     if not (<int>PetscInitializeCalled): return
  *     if (<int>PetscFinalizeCalled): return             # <<<<<<<<<<<<<<
@@ -236390,7 +256601,7 @@ static void __pyx_f_8petsc4py_5PETSc_finalize(void) {
     goto __pyx_L0;
   }
 
-  /* "PETSc/PETSc.pyx":313
+  /* "PETSc/PETSc.pyx":317
  *     if (<int>PetscFinalizeCalled): return
  *     # deinstall Python error handler
  *     ierr = PetscPopErrorHandler()             # <<<<<<<<<<<<<<
@@ -236399,7 +256610,7 @@ static void __pyx_f_8petsc4py_5PETSc_finalize(void) {
  */
   __pyx_v_ierr = PetscPopErrorHandler();
 
-  /* "PETSc/PETSc.pyx":314
+  /* "PETSc/PETSc.pyx":318
  *     # deinstall Python error handler
  *     ierr = PetscPopErrorHandler()
  *     if ierr != 0:             # <<<<<<<<<<<<<<
@@ -236409,7 +256620,7 @@ static void __pyx_f_8petsc4py_5PETSc_finalize(void) {
   __pyx_t_1 = ((__pyx_v_ierr != 0) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/PETSc.pyx":315
+    /* "PETSc/PETSc.pyx":319
  *     ierr = PetscPopErrorHandler()
  *     if ierr != 0:
  *         fprintf(stderr, "PetscPopErrorHandler() failed "             # <<<<<<<<<<<<<<
@@ -236418,7 +256629,7 @@ static void __pyx_f_8petsc4py_5PETSc_finalize(void) {
  */
     fprintf(stderr, ((char *)"PetscPopErrorHandler() failed [error code: %d]\n"), __pyx_v_ierr);
 
-    /* "PETSc/PETSc.pyx":314
+    /* "PETSc/PETSc.pyx":318
  *     # deinstall Python error handler
  *     ierr = PetscPopErrorHandler()
  *     if ierr != 0:             # <<<<<<<<<<<<<<
@@ -236427,7 +256638,7 @@ static void __pyx_f_8petsc4py_5PETSc_finalize(void) {
  */
   }
 
-  /* "PETSc/PETSc.pyx":318
+  /* "PETSc/PETSc.pyx":322
  *                 "[error code: %d]\n", ierr)
  *     # finalize PETSc
  *     ierr = PetscFinalize()             # <<<<<<<<<<<<<<
@@ -236436,7 +256647,7 @@ static void __pyx_f_8petsc4py_5PETSc_finalize(void) {
  */
   __pyx_v_ierr = PetscFinalize();
 
-  /* "PETSc/PETSc.pyx":319
+  /* "PETSc/PETSc.pyx":323
  *     # finalize PETSc
  *     ierr = PetscFinalize()
  *     if ierr != 0:             # <<<<<<<<<<<<<<
@@ -236446,7 +256657,7 @@ static void __pyx_f_8petsc4py_5PETSc_finalize(void) {
   __pyx_t_1 = ((__pyx_v_ierr != 0) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/PETSc.pyx":320
+    /* "PETSc/PETSc.pyx":324
  *     ierr = PetscFinalize()
  *     if ierr != 0:
  *         fprintf(stderr, "PetscFinalize() failed "             # <<<<<<<<<<<<<<
@@ -236455,7 +256666,7 @@ static void __pyx_f_8petsc4py_5PETSc_finalize(void) {
  */
     fprintf(stderr, ((char *)"PetscFinalize() failed [error code: %d]\n"), __pyx_v_ierr);
 
-    /* "PETSc/PETSc.pyx":319
+    /* "PETSc/PETSc.pyx":323
  *     # finalize PETSc
  *     ierr = PetscFinalize()
  *     if ierr != 0:             # <<<<<<<<<<<<<<
@@ -236464,7 +256675,7 @@ static void __pyx_f_8petsc4py_5PETSc_finalize(void) {
  */
   }
 
-  /* "PETSc/PETSc.pyx":304
+  /* "PETSc/PETSc.pyx":308
  *         free(v)
  * 
  * cdef void finalize() nogil:             # <<<<<<<<<<<<<<
@@ -236476,7 +256687,7 @@ static void __pyx_f_8petsc4py_5PETSc_finalize(void) {
   __pyx_L0:;
 }
 
-/* "PETSc/PETSc.pyx":324
+/* "PETSc/PETSc.pyx":328
  *     # and we are done, see you later !!
  * 
  * cdef int initialize(object args, object comm) except -1:             # <<<<<<<<<<<<<<
@@ -236493,7 +256704,7 @@ static int __pyx_f_8petsc4py_5PETSc_initialize(PyObject *__pyx_v_args, PyObject
   MPI_Comm __pyx_t_3;
   __Pyx_RefNannySetupContext("initialize", 0);
 
-  /* "PETSc/PETSc.pyx":325
+  /* "PETSc/PETSc.pyx":329
  * 
  * cdef int initialize(object args, object comm) except -1:
  *     if (<int>PetscInitializeCalled): return 1             # <<<<<<<<<<<<<<
@@ -236506,7 +256717,7 @@ static int __pyx_f_8petsc4py_5PETSc_initialize(PyObject *__pyx_v_args, PyObject
     goto __pyx_L0;
   }
 
-  /* "PETSc/PETSc.pyx":326
+  /* "PETSc/PETSc.pyx":330
  * cdef int initialize(object args, object comm) except -1:
  *     if (<int>PetscInitializeCalled): return 1
  *     if (<int>PetscFinalizeCalled):   return 0             # <<<<<<<<<<<<<<
@@ -236519,35 +256730,35 @@ static int __pyx_f_8petsc4py_5PETSc_initialize(PyObject *__pyx_v_args, PyObject
     goto __pyx_L0;
   }
 
-  /* "PETSc/PETSc.pyx":329
+  /* "PETSc/PETSc.pyx":333
  *     # 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_ERR(11, 329, __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 == ((int)-1))) __PYX_ERR(11, 333, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":332
+  /* "PETSc/PETSc.pyx":336
  *     # 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_ERR(11, 332, __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, 336, __pyx_L1_error)
   PETSC_COMM_WORLD = __pyx_t_3;
 
-  /* "PETSc/PETSc.pyx":334
+  /* "PETSc/PETSc.pyx":338
  *     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_ERR(11, 334, __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 == ((int)-1))) __PYX_ERR(11, 338, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":336
+  /* "PETSc/PETSc.pyx":340
  *     CHKERR( PetscInitialize(&PyPetsc_Argc, &PyPetsc_Argv, NULL, NULL) )
  *     # install Python error handler
  *     cdef PetscErrorHandlerFunction handler = NULL             # <<<<<<<<<<<<<<
@@ -236556,7 +256767,7 @@ static int __pyx_f_8petsc4py_5PETSc_initialize(PyObject *__pyx_v_args, PyObject
  */
   __pyx_v_handler = NULL;
 
-  /* "PETSc/PETSc.pyx":337
+  /* "PETSc/PETSc.pyx":341
  *     # install Python error handler
  *     cdef PetscErrorHandlerFunction handler = NULL
  *     handler = <PetscErrorHandlerFunction>PetscPythonErrorHandler             # <<<<<<<<<<<<<<
@@ -236565,16 +256776,16 @@ static int __pyx_f_8petsc4py_5PETSc_initialize(PyObject *__pyx_v_args, PyObject
  */
   __pyx_v_handler = ((PetscErrorHandlerFunction)__pyx_f_8petsc4py_5PETSc_PetscPythonErrorHandler);
 
-  /* "PETSc/PETSc.pyx":338
+  /* "PETSc/PETSc.pyx":342
  *     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_ERR(11, 338, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPushErrorHandler(__pyx_v_handler, NULL)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(11, 342, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":340
+  /* "PETSc/PETSc.pyx":344
  *     CHKERR( PetscPushErrorHandler(handler, NULL) )
  *     # register finalization function
  *     if Py_AtExit(finalize) < 0:             # <<<<<<<<<<<<<<
@@ -236584,7 +256795,7 @@ static int __pyx_f_8petsc4py_5PETSc_initialize(PyObject *__pyx_v_args, PyObject
   __pyx_t_1 = ((Py_AtExit(__pyx_f_8petsc4py_5PETSc_finalize) < 0) != 0);
   if (__pyx_t_1) {
 
-    /* "PETSc/PETSc.pyx":341
+    /* "PETSc/PETSc.pyx":345
  *     # register finalization function
  *     if Py_AtExit(finalize) < 0:
  *         PySys_WriteStderr(b"warning: could not register %s with Py_AtExit()",             # <<<<<<<<<<<<<<
@@ -236593,7 +256804,7 @@ static int __pyx_f_8petsc4py_5PETSc_initialize(PyObject *__pyx_v_args, PyObject
  */
     PySys_WriteStderr(((char *)"warning: could not register %s with Py_AtExit()"), ((char *)"PetscFinalize()"));
 
-    /* "PETSc/PETSc.pyx":340
+    /* "PETSc/PETSc.pyx":344
  *     CHKERR( PetscPushErrorHandler(handler, NULL) )
  *     # register finalization function
  *     if Py_AtExit(finalize) < 0:             # <<<<<<<<<<<<<<
@@ -236602,7 +256813,7 @@ static int __pyx_f_8petsc4py_5PETSc_initialize(PyObject *__pyx_v_args, PyObject
  */
   }
 
-  /* "PETSc/PETSc.pyx":343
+  /* "PETSc/PETSc.pyx":347
  *         PySys_WriteStderr(b"warning: could not register %s with Py_AtExit()",
  *                           b"PetscFinalize()")
  *     return 1 # and we are done, enjoy !!             # <<<<<<<<<<<<<<
@@ -236612,7 +256823,7 @@ static int __pyx_f_8petsc4py_5PETSc_initialize(PyObject *__pyx_v_args, PyObject
   __pyx_r = 1;
   goto __pyx_L0;
 
-  /* "PETSc/PETSc.pyx":324
+  /* "PETSc/PETSc.pyx":328
  *     # and we are done, see you later !!
  * 
  * cdef int initialize(object args, object comm) except -1:             # <<<<<<<<<<<<<<
@@ -236629,7 +256840,7 @@ static int __pyx_f_8petsc4py_5PETSc_initialize(PyObject *__pyx_v_args, PyObject
   return __pyx_r;
 }
 
-/* "PETSc/PETSc.pyx":382
+/* "PETSc/PETSc.pyx":386
  * """
  * 
  * cdef int register() except -1:             # <<<<<<<<<<<<<<
@@ -236644,7 +256855,7 @@ static int __pyx_f_8petsc4py_5PETSc_register(void) {
   int __pyx_t_2;
   __Pyx_RefNannySetupContext("register", 0);
 
-  /* "PETSc/PETSc.pyx":384
+  /* "PETSc/PETSc.pyx":388
  * cdef int register() except -1:
  *     global registercalled
  *     if registercalled: return 0             # <<<<<<<<<<<<<<
@@ -236657,7 +256868,7 @@ static int __pyx_f_8petsc4py_5PETSc_register(void) {
     goto __pyx_L0;
   }
 
-  /* "PETSc/PETSc.pyx":385
+  /* "PETSc/PETSc.pyx":389
  *     global registercalled
  *     if registercalled: return 0
  *     registercalled = True             # <<<<<<<<<<<<<<
@@ -236666,214 +256877,214 @@ static int __pyx_f_8petsc4py_5PETSc_register(void) {
  */
   __pyx_v_8petsc4py_5PETSc_registercalled = 1;
 
-  /* "PETSc/PETSc.pyx":387
+  /* "PETSc/PETSc.pyx":391
  *     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_ERR(11, 387, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscCitationsRegister(__pyx_v_8petsc4py_5PETSc_citation, NULL)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(11, 391, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":389
+  /* "PETSc/PETSc.pyx":393
  *     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_ERR(11, 389, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscInitializePackageAll()); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(11, 393, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":391
+  /* "PETSc/PETSc.pyx":395
  *     CHKERR( PetscInitializePackageAll() )
  *     # register custom implementations
  *     import_libpetsc4py()             # <<<<<<<<<<<<<<
  *     CHKERR( PetscPythonRegisterAll() )
  *     # register Python types
  */
-  __pyx_t_2 = import_libpetsc4py(); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 391, __pyx_L1_error)
+  __pyx_t_2 = import_libpetsc4py(); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(11, 395, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":392
+  /* "PETSc/PETSc.pyx":396
  *     # 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_ERR(11, 392, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_CHKERR(PetscPythonRegisterAll()); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(11, 396, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":394
+  /* "PETSc/PETSc.pyx":398
  *     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, __pyx_ptype_8petsc4py_5PETSc_Object); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 394, __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 == ((int)-1))) __PYX_ERR(11, 398, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":395
+  /* "PETSc/PETSc.pyx":399
  *     # 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, __pyx_ptype_8petsc4py_5PETSc_Viewer); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 395, __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 == ((int)-1))) __PYX_ERR(11, 399, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":396
+  /* "PETSc/PETSc.pyx":400
  *     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, __pyx_ptype_8petsc4py_5PETSc_Random); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 396, __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 == ((int)-1))) __PYX_ERR(11, 400, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":397
+  /* "PETSc/PETSc.pyx":401
  *     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, __pyx_ptype_8petsc4py_5PETSc_IS); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 397, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(IS_CLASSID, __pyx_ptype_8petsc4py_5PETSc_IS); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(11, 401, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":398
+  /* "PETSc/PETSc.pyx":402
  *     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, __pyx_ptype_8petsc4py_5PETSc_LGMap); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 398, __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 == ((int)-1))) __PYX_ERR(11, 402, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":399
+  /* "PETSc/PETSc.pyx":403
  *     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, __pyx_ptype_8petsc4py_5PETSc_SF); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 399, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(PETSCSF_CLASSID, __pyx_ptype_8petsc4py_5PETSc_SF); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(11, 403, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":400
+  /* "PETSc/PETSc.pyx":404
  *     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, __pyx_ptype_8petsc4py_5PETSc_Vec); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 400, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(VEC_CLASSID, __pyx_ptype_8petsc4py_5PETSc_Vec); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(11, 404, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":401
+  /* "PETSc/PETSc.pyx":405
  *     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, __pyx_ptype_8petsc4py_5PETSc_Scatter); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 401, __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 == ((int)-1))) __PYX_ERR(11, 405, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":402
+  /* "PETSc/PETSc.pyx":406
  *     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, __pyx_ptype_8petsc4py_5PETSc_Section); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 402, __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 == ((int)-1))) __PYX_ERR(11, 406, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":403
+  /* "PETSc/PETSc.pyx":407
  *     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, __pyx_ptype_8petsc4py_5PETSc_Mat); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 403, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(MAT_CLASSID, __pyx_ptype_8petsc4py_5PETSc_Mat); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(11, 407, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":404
+  /* "PETSc/PETSc.pyx":408
  *     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, __pyx_ptype_8petsc4py_5PETSc_NullSpace); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 404, __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 == ((int)-1))) __PYX_ERR(11, 408, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":405
+  /* "PETSc/PETSc.pyx":409
  *     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, __pyx_ptype_8petsc4py_5PETSc_PC); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 405, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(PC_CLASSID, __pyx_ptype_8petsc4py_5PETSc_PC); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(11, 409, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":406
+  /* "PETSc/PETSc.pyx":410
  *     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, __pyx_ptype_8petsc4py_5PETSc_KSP); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 406, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(KSP_CLASSID, __pyx_ptype_8petsc4py_5PETSc_KSP); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(11, 410, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":407
+  /* "PETSc/PETSc.pyx":411
  *     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, __pyx_ptype_8petsc4py_5PETSc_SNES); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 407, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(SNES_CLASSID, __pyx_ptype_8petsc4py_5PETSc_SNES); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(11, 411, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":408
+  /* "PETSc/PETSc.pyx":412
  *     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, __pyx_ptype_8petsc4py_5PETSc_TS); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 408, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(TS_CLASSID, __pyx_ptype_8petsc4py_5PETSc_TS); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(11, 412, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":409
+  /* "PETSc/PETSc.pyx":413
  *     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, __pyx_ptype_8petsc4py_5PETSc_TAO); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 409, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(TAO_CLASSID, __pyx_ptype_8petsc4py_5PETSc_TAO); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(11, 413, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":410
+  /* "PETSc/PETSc.pyx":414
  *     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, __pyx_ptype_8petsc4py_5PETSc_AO); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 410, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(AO_CLASSID, __pyx_ptype_8petsc4py_5PETSc_AO); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(11, 414, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":411
+  /* "PETSc/PETSc.pyx":415
  *     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, __pyx_ptype_8petsc4py_5PETSc_DM); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 411, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(DM_CLASSID, __pyx_ptype_8petsc4py_5PETSc_DM); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(11, 415, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":412
+  /* "PETSc/PETSc.pyx":416
  *     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, __pyx_ptype_8petsc4py_5PETSc_Partitioner); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 412, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_PyPetscType_Register(PETSCPARTITIONER_CLASSID, __pyx_ptype_8petsc4py_5PETSc_Partitioner); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(11, 416, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":413
+  /* "PETSc/PETSc.pyx":417
  *     PyPetscType_Register(PETSC_DM_CLASSID,          DM)
  *     PyPetscType_Register(PETSC_PARTITIONER_CLASSID, Partitioner)
  *     return 0 # and we are done, enjoy !!             # <<<<<<<<<<<<<<
@@ -236883,7 +257094,7 @@ static int __pyx_f_8petsc4py_5PETSc_register(void) {
   __pyx_r = 0;
   goto __pyx_L0;
 
-  /* "PETSc/PETSc.pyx":382
+  /* "PETSc/PETSc.pyx":386
  * """
  * 
  * cdef int register() except -1:             # <<<<<<<<<<<<<<
@@ -236900,7 +257111,7 @@ static int __pyx_f_8petsc4py_5PETSc_register(void) {
   return __pyx_r;
 }
 
-/* "PETSc/PETSc.pyx":417
+/* "PETSc/PETSc.pyx":421
  * # --------------------------------------------------------------------
  * 
  * def _initialize(args=None, comm=None):             # <<<<<<<<<<<<<<
@@ -236928,7 +257139,9 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_1_initialize(PyObject *__pyx_self, Py
       const Py_ssize_t pos_args = PyTuple_GET_SIZE(__pyx_args);
       switch (pos_args) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -236939,6 +257152,7 @@ static PyObject *__pyx_pw_8petsc4py_5PETSc_1_initialize(PyObject *__pyx_self, Py
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_args);
           if (value) { values[0] = value; kw_args--; }
         }
+        CYTHON_FALLTHROUGH;
         case  1:
         if (kw_args > 0) {
           PyObject* value = PyDict_GetItem(__pyx_kwds, __pyx_n_s_comm);
@@ -236946,12 +257160,14 @@ 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_ERR(11, 417, __pyx_L3_error)
+        if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_pyargnames, 0, values, pos_args, "_initialize") < 0)) __PYX_ERR(11, 421, __pyx_L3_error)
       }
     } else {
       switch (PyTuple_GET_SIZE(__pyx_args)) {
         case  2: values[1] = PyTuple_GET_ITEM(__pyx_args, 1);
+        CYTHON_FALLTHROUGH;
         case  1: values[0] = PyTuple_GET_ITEM(__pyx_args, 0);
+        CYTHON_FALLTHROUGH;
         case  0: break;
         default: goto __pyx_L5_argtuple_error;
       }
@@ -236961,7 +257177,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_ERR(11, 417, __pyx_L3_error)
+  __Pyx_RaiseArgtupleInvalid("_initialize", 0, 0, 2, PyTuple_GET_SIZE(__pyx_args)); __PYX_ERR(11, 421, __pyx_L3_error)
   __pyx_L3_error:;
   __Pyx_AddTraceback("petsc4py.PETSc._initialize", __pyx_clineno, __pyx_lineno, __pyx_filename);
   __Pyx_RefNannyFinishContext();
@@ -236983,43 +257199,43 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc__initialize(CYTHON_UNUSED PyObject *_
   int __pyx_t_3;
   __Pyx_RefNannySetupContext("_initialize", 0);
 
-  /* "PETSc/PETSc.pyx":419
+  /* "PETSc/PETSc.pyx":423
  * 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_ERR(11, 419, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_Error); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 423, __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_ERR(11, 419, __pyx_L1_error)
+  if (__Pyx_PyObject_SetAttrStr(__pyx_t_1, __pyx_n_s_traceback, __pyx_v_8petsc4py_5PETSc_tracebacklist) < 0) __PYX_ERR(11, 423, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/PETSc.pyx":421
+  /* "PETSc/PETSc.pyx":425
  *     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_ERR(11, 421, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_Error); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 425, __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":423
+  /* "PETSc/PETSc.pyx":427
  *     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_ERR(11, 423, __pyx_L1_error)
+  __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_initialize(__pyx_v_args, __pyx_v_comm); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(11, 427, __pyx_L1_error)
   __pyx_v_ready = __pyx_t_2;
 
-  /* "PETSc/PETSc.pyx":424
+  /* "PETSc/PETSc.pyx":428
  *     #
  *     cdef int ready = initialize(args, comm)
  *     if ready: register()             # <<<<<<<<<<<<<<
@@ -237028,10 +257244,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_ERR(11, 424, __pyx_L1_error)
+    __pyx_t_2 = __pyx_f_8petsc4py_5PETSc_register(); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(11, 428, __pyx_L1_error)
   }
 
-  /* "PETSc/PETSc.pyx":427
+  /* "PETSc/PETSc.pyx":431
  *     #
  *     global __COMM_SELF__, __COMM_WORLD__
  *     __COMM_SELF__.comm  = PETSC_COMM_SELF             # <<<<<<<<<<<<<<
@@ -237040,7 +257256,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc__initialize(CYTHON_UNUSED PyObject *_
  */
   __pyx_v_8petsc4py_5PETSc___COMM_SELF__->comm = PETSC_COMM_SELF;
 
-  /* "PETSc/PETSc.pyx":428
+  /* "PETSc/PETSc.pyx":432
  *     global __COMM_SELF__, __COMM_WORLD__
  *     __COMM_SELF__.comm  = PETSC_COMM_SELF
  *     __COMM_WORLD__.comm = PETSC_COMM_WORLD             # <<<<<<<<<<<<<<
@@ -237049,7 +257265,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc__initialize(CYTHON_UNUSED PyObject *_
  */
   __pyx_v_8petsc4py_5PETSc___COMM_WORLD__->comm = PETSC_COMM_WORLD;
 
-  /* "PETSc/PETSc.pyx":431
+  /* "PETSc/PETSc.pyx":435
  *     #
  *     global PETSC_COMM_DEFAULT
  *     PETSC_COMM_DEFAULT = PETSC_COMM_WORLD             # <<<<<<<<<<<<<<
@@ -237058,7 +257274,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc__initialize(CYTHON_UNUSED PyObject *_
  */
   __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT = PETSC_COMM_WORLD;
 
-  /* "PETSc/PETSc.pyx":417
+  /* "PETSc/PETSc.pyx":421
  * # --------------------------------------------------------------------
  * 
  * def _initialize(args=None, comm=None):             # <<<<<<<<<<<<<<
@@ -237079,7 +257295,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc__initialize(CYTHON_UNUSED PyObject *_
   return __pyx_r;
 }
 
-/* "PETSc/PETSc.pyx":433
+/* "PETSc/PETSc.pyx":437
  *     PETSC_COMM_DEFAULT = PETSC_COMM_WORLD
  * 
  * def _finalize():             # <<<<<<<<<<<<<<
@@ -237111,7 +257327,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2_finalize(CYTHON_UNUSED PyObject *__
   int __pyx_t_1;
   __Pyx_RefNannySetupContext("_finalize", 0);
 
-  /* "PETSc/PETSc.pyx":434
+  /* "PETSc/PETSc.pyx":438
  * 
  * def _finalize():
  *     finalize()             # <<<<<<<<<<<<<<
@@ -237120,7 +257336,7 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2_finalize(CYTHON_UNUSED PyObject *__
  */
   __pyx_f_8petsc4py_5PETSc_finalize();
 
-  /* "PETSc/PETSc.pyx":437
+  /* "PETSc/PETSc.pyx":441
  *     #
  *     global __COMM_SELF__
  *     __COMM_SELF__.comm  = MPI_COMM_NULL             # <<<<<<<<<<<<<<
@@ -237129,7 +257345,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":439
+  /* "PETSc/PETSc.pyx":443
  *     __COMM_SELF__.comm  = MPI_COMM_NULL
  *     global __COMM_WORLD__
  *     __COMM_WORLD__.comm = MPI_COMM_NULL             # <<<<<<<<<<<<<<
@@ -237138,7 +257354,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":442
+  /* "PETSc/PETSc.pyx":446
  *     #
  *     global PETSC_COMM_DEFAULT
  *     PETSC_COMM_DEFAULT = MPI_COMM_NULL             # <<<<<<<<<<<<<<
@@ -237147,7 +257363,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":445
+  /* "PETSc/PETSc.pyx":449
  *     #
  *     global type_registry
  *     type_registry.clear()             # <<<<<<<<<<<<<<
@@ -237155,12 +257371,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2_finalize(CYTHON_UNUSED PyObject *__
  *     stage_registry.clear()
  */
   if (unlikely(__pyx_v_8petsc4py_5PETSc_type_registry == Py_None)) {
-    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "clear");
-    __PYX_ERR(11, 445, __pyx_L1_error)
+    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "clear");
+    __PYX_ERR(11, 449, __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)
+  __pyx_t_1 = __Pyx_PyDict_Clear(__pyx_v_8petsc4py_5PETSc_type_registry); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(11, 449, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":447
+  /* "PETSc/PETSc.pyx":451
  *     type_registry.clear()
  *     global stage_registry
  *     stage_registry.clear()             # <<<<<<<<<<<<<<
@@ -237168,12 +257384,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2_finalize(CYTHON_UNUSED PyObject *__
  *     class_registry.clear()
  */
   if (unlikely(__pyx_v_8petsc4py_5PETSc_stage_registry == Py_None)) {
-    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "clear");
-    __PYX_ERR(11, 447, __pyx_L1_error)
+    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "clear");
+    __PYX_ERR(11, 451, __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)
+  __pyx_t_1 = __Pyx_PyDict_Clear(__pyx_v_8petsc4py_5PETSc_stage_registry); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(11, 451, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":449
+  /* "PETSc/PETSc.pyx":453
  *     stage_registry.clear()
  *     global class_registry
  *     class_registry.clear()             # <<<<<<<<<<<<<<
@@ -237181,12 +257397,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2_finalize(CYTHON_UNUSED PyObject *__
  *     event_registry.clear()
  */
   if (unlikely(__pyx_v_8petsc4py_5PETSc_class_registry == Py_None)) {
-    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "clear");
-    __PYX_ERR(11, 449, __pyx_L1_error)
+    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "clear");
+    __PYX_ERR(11, 453, __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)
+  __pyx_t_1 = __Pyx_PyDict_Clear(__pyx_v_8petsc4py_5PETSc_class_registry); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(11, 453, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":451
+  /* "PETSc/PETSc.pyx":455
  *     class_registry.clear()
  *     global event_registry
  *     event_registry.clear()             # <<<<<<<<<<<<<<
@@ -237194,12 +257410,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2_finalize(CYTHON_UNUSED PyObject *__
  *     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)
+    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "clear");
+    __PYX_ERR(11, 455, __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)
+  __pyx_t_1 = __Pyx_PyDict_Clear(__pyx_v_8petsc4py_5PETSc_event_registry); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(11, 455, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":453
+  /* "PETSc/PETSc.pyx":457
  *     event_registry.clear()
  *     global citations_registry
  *     citations_registry.clear()             # <<<<<<<<<<<<<<
@@ -237207,12 +257423,12 @@ static PyObject *__pyx_pf_8petsc4py_5PETSc_2_finalize(CYTHON_UNUSED PyObject *__
  * # --------------------------------------------------------------------
  */
   if (unlikely(__pyx_v_8petsc4py_5PETSc_citations_registry == Py_None)) {
-    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%s'", "clear");
-    __PYX_ERR(11, 453, __pyx_L1_error)
+    PyErr_Format(PyExc_AttributeError, "'NoneType' object has no attribute '%.30s'", "clear");
+    __PYX_ERR(11, 457, __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)
+  __pyx_t_1 = __Pyx_PyDict_Clear(__pyx_v_8petsc4py_5PETSc_citations_registry); if (unlikely(__pyx_t_1 == ((int)-1))) __PYX_ERR(11, 457, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":433
+  /* "PETSc/PETSc.pyx":437
  *     PETSC_COMM_DEFAULT = PETSC_COMM_WORLD
  * 
  * def _finalize():             # <<<<<<<<<<<<<<
@@ -237243,16 +257459,17 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Comm(PyTypeObject *t, PyObject *a
   if (unlikely(!o)) return 0;
   p = ((struct PyPetscCommObject *)o);
   p->base = Py_None; Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_8petsc4py_5PETSc_4Comm_1__cinit__(o, a, k) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  if (unlikely(__pyx_pw_8petsc4py_5PETSc_4Comm_1__cinit__(o, a, k) < 0)) goto bad;
   return o;
+  bad:
+  Py_DECREF(o); o = 0;
+  return NULL;
 }
 
 static void __pyx_tp_dealloc_8petsc4py_5PETSc_Comm(PyObject *o) {
   struct PyPetscCommObject *p = (struct PyPetscCommObject *)o;
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  #if CYTHON_USE_TP_FINALIZE
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -237320,7 +257537,7 @@ static PyNumberMethods __pyx_tp_as_number_Comm = {
   0, /*nb_add*/
   0, /*nb_subtract*/
   0, /*nb_multiply*/
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_divide*/
   #endif
   0, /*nb_remainder*/
@@ -237336,7 +257553,7 @@ static PyNumberMethods __pyx_tp_as_number_Comm = {
   0, /*nb_and*/
   0, /*nb_xor*/
   0, /*nb_or*/
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_coerce*/
   #endif
   0, /*nb_int*/
@@ -237346,16 +257563,16 @@ static PyNumberMethods __pyx_tp_as_number_Comm = {
   0, /*reserved*/
   #endif
   0, /*nb_float*/
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_oct*/
   #endif
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_hex*/
   #endif
   0, /*nb_inplace_add*/
   0, /*nb_inplace_subtract*/
   0, /*nb_inplace_multiply*/
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_inplace_divide*/
   #endif
   0, /*nb_inplace_remainder*/
@@ -237449,16 +257666,17 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Object(PyTypeObject *t, CYTHON_UN
   p = ((struct PyPetscObjectObject *)o);
   p->__pyx_vtab = __pyx_vtabptr_8petsc4py_5PETSc_Object;
   p->__pyx___dummy__ = Py_None; Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_8petsc4py_5PETSc_6Object_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  if (unlikely(__pyx_pw_8petsc4py_5PETSc_6Object_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) goto bad;
   return o;
+  bad:
+  Py_DECREF(o); o = 0;
+  return NULL;
 }
 
 static void __pyx_tp_dealloc_8petsc4py_5PETSc_Object(PyObject *o) {
   struct PyPetscObjectObject *p = (struct PyPetscObjectObject *)o;
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  #if CYTHON_USE_TP_FINALIZE
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -237569,23 +257787,24 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc_Object[] = {
   {"setOptionsPrefix", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_19setOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_18setOptionsPrefix},
   {"getOptionsPrefix", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_21getOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_20getOptionsPrefix},
   {"setFromOptions", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_23setFromOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_22setFromOptions},
-  {"getComm", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_25getComm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_24getComm},
-  {"getName", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_27getName, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_26getName},
-  {"setName", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_29setName, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_28setName},
-  {"getClassId", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_31getClassId, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_30getClassId},
-  {"getClassName", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_33getClassName, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_32getClassName},
-  {"getRefCount", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_35getRefCount, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_34getRefCount},
-  {"compose", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_37compose, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_36compose},
-  {"query", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_39query, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_38query},
-  {"incRef", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_41incRef, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_40incRef},
-  {"decRef", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_43decRef, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_42decRef},
-  {"getAttr", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_45getAttr, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_44getAttr},
-  {"setAttr", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_47setAttr, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_46setAttr},
-  {"getDict", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_49getDict, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_48getDict},
-  {"stateIncrease", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_51stateIncrease, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_50stateIncrease},
-  {"incrementTabLevel", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_53incrementTabLevel, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_52incrementTabLevel},
-  {"setTabLevel", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_55setTabLevel, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_54setTabLevel},
-  {"getTabLevel", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_57getTabLevel, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_56getTabLevel},
+  {"viewFromOptions", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_25viewFromOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_24viewFromOptions},
+  {"getComm", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_27getComm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_26getComm},
+  {"getName", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_29getName, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_28getName},
+  {"setName", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_31setName, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_30setName},
+  {"getClassId", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_33getClassId, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_32getClassId},
+  {"getClassName", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_35getClassName, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_34getClassName},
+  {"getRefCount", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_37getRefCount, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_36getRefCount},
+  {"compose", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_39compose, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_38compose},
+  {"query", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_41query, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_40query},
+  {"incRef", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_43incRef, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_42incRef},
+  {"decRef", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_45decRef, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_44decRef},
+  {"getAttr", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_47getAttr, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_46getAttr},
+  {"setAttr", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_49setAttr, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_48setAttr},
+  {"getDict", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_51getDict, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_50getDict},
+  {"stateIncrease", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_53stateIncrease, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_52stateIncrease},
+  {"incrementTabLevel", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_55incrementTabLevel, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_54incrementTabLevel},
+  {"setTabLevel", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_57setTabLevel, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_56setTabLevel},
+  {"getTabLevel", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Object_59getTabLevel, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Object_58getTabLevel},
   {0, 0, 0, 0}
 };
 
@@ -237606,7 +257825,7 @@ static PyNumberMethods __pyx_tp_as_number_Object = {
   0, /*nb_add*/
   0, /*nb_subtract*/
   0, /*nb_multiply*/
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_divide*/
   #endif
   0, /*nb_remainder*/
@@ -237622,7 +257841,7 @@ static PyNumberMethods __pyx_tp_as_number_Object = {
   0, /*nb_and*/
   0, /*nb_xor*/
   0, /*nb_or*/
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_coerce*/
   #endif
   0, /*nb_int*/
@@ -237632,16 +257851,16 @@ static PyNumberMethods __pyx_tp_as_number_Object = {
   0, /*reserved*/
   #endif
   0, /*nb_float*/
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_oct*/
   #endif
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_hex*/
   #endif
   0, /*nb_inplace_add*/
   0, /*nb_inplace_subtract*/
   0, /*nb_inplace_multiply*/
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_inplace_divide*/
   #endif
   0, /*nb_inplace_remainder*/
@@ -237729,10 +257948,11 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Viewer(PyTypeObject *t, PyObject
   if (unlikely(!o)) return 0;
   p = ((struct PyPetscViewerObject *)o);
   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8petsc4py_5PETSc_Viewer;
-  if (unlikely(__pyx_pw_8petsc4py_5PETSc_6Viewer_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  if (unlikely(__pyx_pw_8petsc4py_5PETSc_6Viewer_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) goto bad;
   return o;
+  bad:
+  Py_DECREF(o); o = 0;
+  return NULL;
 }
 
 static PyMethodDef __pyx_methods_8petsc4py_5PETSc_Viewer[] = {
@@ -237744,25 +257964,35 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc_Viewer[] = {
   {"createMPIIO", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_15createMPIIO, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_14createMPIIO},
   {"createVTK", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_17createVTK, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_16createVTK},
   {"createHDF5", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_19createHDF5, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_18createHDF5},
-  {"createNetCDF", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_21createNetCDF, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_20createNetCDF},
-  {"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},
-  {"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},
+  {"createDraw", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_21createDraw, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_20createDraw},
+  {"setType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_23setType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_22setType},
+  {"getType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_25getType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_24getType},
+  {"getFormat", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_27getFormat, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_26getFormat},
+  {"pushFormat", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_29pushFormat, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_28pushFormat},
+  {"popFormat", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_31popFormat, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_30popFormat},
+  {"STDOUT", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_33STDOUT, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_32STDOUT},
+  {"STDERR", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_35STDERR, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_34STDERR},
+  {"ASCII", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_37ASCII, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_36ASCII},
+  {"BINARY", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_39BINARY, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_38BINARY},
+  {"DRAW", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_41DRAW, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_40DRAW},
+  {"setASCIITab", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_43setASCIITab, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_42setASCIITab},
+  {"getASCIITab", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_45getASCIITab, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_44getASCIITab},
+  {"addASCIITab", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_47addASCIITab, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_46addASCIITab},
+  {"subtractASCIITab", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_49subtractASCIITab, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_48subtractASCIITab},
+  {"pushASCIISynchronized", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_51pushASCIISynchronized, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_50pushASCIISynchronized},
+  {"popASCIISynchronized", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_53popASCIISynchronized, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_52popASCIISynchronized},
+  {"pushASCIITab", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_55pushASCIITab, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_54pushASCIITab},
+  {"popASCIITab", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_57popASCIITab, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_56popASCIITab},
+  {"useASCIITabs", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_59useASCIITabs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_58useASCIITabs},
+  {"printfASCII", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_61printfASCII, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_60printfASCII},
+  {"printfASCIISynchronized", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_63printfASCIISynchronized, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_62printfASCIISynchronized},
+  {"flush", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_65flush, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_64flush},
+  {"setFileMode", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_67setFileMode, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_66setFileMode},
+  {"getFileMode", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_69getFileMode, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_68getFileMode},
+  {"setFileName", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_71setFileName, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_70setFileName},
+  {"getFileName", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_73getFileName, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_72getFileName},
+  {"setDrawInfo", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_75setDrawInfo, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_74setDrawInfo},
+  {"clearDraw", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6Viewer_77clearDraw, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6Viewer_76clearDraw},
   {0, 0, 0, 0}
 };
 
@@ -237831,10 +258061,11 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Random(PyTypeObject *t, PyObject
   if (unlikely(!o)) return 0;
   p = ((struct PyPetscRandomObject *)o);
   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8petsc4py_5PETSc_Random;
-  if (unlikely(__pyx_pw_8petsc4py_5PETSc_6Random_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  if (unlikely(__pyx_pw_8petsc4py_5PETSc_6Random_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) goto bad;
   return o;
+  bad:
+  Py_DECREF(o); o = 0;
+  return NULL;
 }
 
 static PyObject *__pyx_getprop_8petsc4py_5PETSc_6Random_seed(PyObject *o, CYTHON_UNUSED void *x) {
@@ -237952,10 +258183,11 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc_IS(PyTypeObject *t, PyObject *a,
   if (unlikely(!o)) return 0;
   p = ((struct PyPetscISObject *)o);
   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8petsc4py_5PETSc_IS;
-  if (unlikely(__pyx_pw_8petsc4py_5PETSc_2IS_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  if (unlikely(__pyx_pw_8petsc4py_5PETSc_2IS_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) goto bad;
   return o;
+  bad:
+  Py_DECREF(o); o = 0;
+  return NULL;
 }
 
 static PyObject *__pyx_getprop_8petsc4py_5PETSc_2IS_permutation(PyObject *o, CYTHON_UNUSED void *x) {
@@ -238139,10 +258371,11 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc_LGMap(PyTypeObject *t, PyObject *
   if (unlikely(!o)) return 0;
   p = ((struct PyPetscLGMapObject *)o);
   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8petsc4py_5PETSc_LGMap;
-  if (unlikely(__pyx_pw_8petsc4py_5PETSc_5LGMap_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  if (unlikely(__pyx_pw_8petsc4py_5PETSc_5LGMap_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) goto bad;
   return o;
+  bad:
+  Py_DECREF(o); o = 0;
+  return NULL;
 }
 
 static PyObject *__pyx_getprop_8petsc4py_5PETSc_5LGMap_size(PyObject *o, CYTHON_UNUSED void *x) {
@@ -238170,22 +258403,24 @@ static PyObject *__pyx_getprop_8petsc4py_5PETSc_5LGMap_block_info(PyObject *o, C
 }
 
 static PyMethodDef __pyx_methods_8petsc4py_5PETSc_LGMap[] = {
-  {"view", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_5view, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_4view},
-  {"destroy", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_7destroy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_6destroy},
-  {"create", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_9create, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_8create},
-  {"createIS", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_11createIS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_10createIS},
-  {"createSF", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_13createSF, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_12createSF},
-  {"getSize", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_15getSize, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_14getSize},
-  {"getBlockSize", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_17getBlockSize, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_16getBlockSize},
-  {"getIndices", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_19getIndices, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_18getIndices},
-  {"getBlockIndices", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_21getBlockIndices, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_20getBlockIndices},
-  {"getInfo", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_23getInfo, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_22getInfo},
-  {"getBlockInfo", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_25getBlockInfo, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_24getBlockInfo},
-  {"apply", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_27apply, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_26apply},
-  {"applyBlock", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_29applyBlock, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_28applyBlock},
-  {"applyIS", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_31applyIS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_30applyIS},
-  {"applyInverse", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_33applyInverse, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_32applyInverse},
-  {"applyBlockInverse", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_35applyBlockInverse, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_34applyBlockInverse},
+  {"setType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_5setType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_4setType},
+  {"setFromOptions", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_7setFromOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_6setFromOptions},
+  {"view", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_9view, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_8view},
+  {"destroy", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_11destroy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_10destroy},
+  {"create", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_13create, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_12create},
+  {"createIS", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_15createIS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_14createIS},
+  {"createSF", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_17createSF, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_16createSF},
+  {"getSize", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_19getSize, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_18getSize},
+  {"getBlockSize", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_21getBlockSize, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_20getBlockSize},
+  {"getIndices", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_23getIndices, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_22getIndices},
+  {"getBlockIndices", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_25getBlockIndices, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_24getBlockIndices},
+  {"getInfo", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_27getInfo, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_26getInfo},
+  {"getBlockInfo", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_29getBlockInfo, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_28getBlockInfo},
+  {"apply", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_31apply, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_30apply},
+  {"applyBlock", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_33applyBlock, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_32applyBlock},
+  {"applyIS", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_35applyIS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_34applyIS},
+  {"applyInverse", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_37applyInverse, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_36applyInverse},
+  {"applyBlockInverse", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_5LGMap_39applyBlockInverse, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_5LGMap_38applyBlockInverse},
   {0, 0, 0, 0}
 };
 
@@ -238264,15 +258499,16 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc_SF(PyTypeObject *t, PyObject *a,
   if (unlikely(!o)) return 0;
   p = ((struct PyPetscSFObject *)o);
   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8petsc4py_5PETSc_SF;
-  if (unlikely(__pyx_pw_8petsc4py_5PETSc_2SF_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  if (unlikely(__pyx_pw_8petsc4py_5PETSc_2SF_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) goto bad;
   return o;
+  bad:
+  Py_DECREF(o); o = 0;
+  return NULL;
 }
 
 static void __pyx_tp_dealloc_8petsc4py_5PETSc_SF(PyObject *o) {
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  #if CYTHON_USE_TP_FINALIZE
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -238371,10 +258607,11 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Vec(PyTypeObject *t, PyObject *a,
   if (unlikely(!o)) return 0;
   p = ((struct PyPetscVecObject *)o);
   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8petsc4py_5PETSc_Vec;
-  if (unlikely(__pyx_pw_8petsc4py_5PETSc_3Vec_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  if (unlikely(__pyx_pw_8petsc4py_5PETSc_3Vec_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) goto bad;
   return o;
+  bad:
+  Py_DECREF(o); o = 0;
+  return NULL;
 }
 static PyObject *__pyx_sq_item_8petsc4py_5PETSc_Vec(PyObject *o, Py_ssize_t i) {
   PyObject *r;
@@ -238571,28 +258808,29 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc_Vec[] = {
   {"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},
+  {"getLGMap", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_219getLGMap, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_218getLGMap},
+  {"setValueLocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_221setValueLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_220setValueLocal},
+  {"setValuesLocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_223setValuesLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_222setValuesLocal},
+  {"setValuesBlockedLocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_225setValuesBlockedLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_224setValuesBlockedLocal},
+  {"assemblyBegin", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_227assemblyBegin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_226assemblyBegin},
+  {"assemblyEnd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_229assemblyEnd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_228assemblyEnd},
+  {"assemble", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_231assemble, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_230assemble},
+  {"strideScale", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_233strideScale, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_232strideScale},
+  {"strideSum", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_235strideSum, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_234strideSum},
+  {"strideMin", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_237strideMin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_236strideMin},
+  {"strideMax", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_239strideMax, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_238strideMax},
+  {"strideNorm", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_241strideNorm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_240strideNorm},
+  {"strideScatter", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_243strideScatter, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_242strideScatter},
+  {"strideGather", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_245strideGather, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_244strideGather},
+  {"localForm", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_247localForm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_246localForm},
+  {"ghostUpdateBegin", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_249ghostUpdateBegin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_248ghostUpdateBegin},
+  {"ghostUpdateEnd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_251ghostUpdateEnd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_250ghostUpdateEnd},
+  {"ghostUpdate", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_253ghostUpdate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_252ghostUpdate},
+  {"setMPIGhost", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_255setMPIGhost, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_254setMPIGhost},
+  {"getSubVector", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_257getSubVector, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_256getSubVector},
+  {"restoreSubVector", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_259restoreSubVector, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_258restoreSubVector},
+  {"getNestSubVecs", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_261getNestSubVecs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_260getNestSubVecs},
+  {"setNestSubVecs", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Vec_263setNestSubVecs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Vec_262setNestSubVecs},
   {0, 0, 0, 0}
 };
 
@@ -238617,7 +258855,7 @@ static PyNumberMethods __pyx_tp_as_number_Vec = {
   __pyx_pw_8petsc4py_5PETSc_3Vec_19__add__, /*nb_add*/
   __pyx_pw_8petsc4py_5PETSc_3Vec_21__sub__, /*nb_subtract*/
   __pyx_pw_8petsc4py_5PETSc_3Vec_23__mul__, /*nb_multiply*/
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   __pyx_pw_8petsc4py_5PETSc_3Vec_25__div__, /*nb_divide*/
   #endif
   0, /*nb_remainder*/
@@ -238637,7 +258875,7 @@ static PyNumberMethods __pyx_tp_as_number_Vec = {
   0, /*nb_and*/
   0, /*nb_xor*/
   0, /*nb_or*/
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_coerce*/
   #endif
   0, /*nb_int*/
@@ -238647,16 +258885,16 @@ static PyNumberMethods __pyx_tp_as_number_Vec = {
   0, /*reserved*/
   #endif
   0, /*nb_float*/
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_oct*/
   #endif
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_hex*/
   #endif
   __pyx_pw_8petsc4py_5PETSc_3Vec_9__iadd__, /*nb_inplace_add*/
   __pyx_pw_8petsc4py_5PETSc_3Vec_11__isub__, /*nb_inplace_subtract*/
   __pyx_pw_8petsc4py_5PETSc_3Vec_13__imul__, /*nb_inplace_multiply*/
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   __pyx_pw_8petsc4py_5PETSc_3Vec_15__idiv__, /*nb_inplace_divide*/
   #endif
   0, /*nb_inplace_remainder*/
@@ -238780,10 +259018,11 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Scatter(PyTypeObject *t, PyObject
   if (unlikely(!o)) return 0;
   p = ((struct PyPetscScatterObject *)o);
   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8petsc4py_5PETSc_Scatter;
-  if (unlikely(__pyx_pw_8petsc4py_5PETSc_7Scatter_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  if (unlikely(__pyx_pw_8petsc4py_5PETSc_7Scatter_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) goto bad;
   return o;
+  bad:
+  Py_DECREF(o); o = 0;
+  return NULL;
 }
 
 static PyMethodDef __pyx_methods_8petsc4py_5PETSc_Scatter[] = {
@@ -238866,15 +259105,16 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Section(PyTypeObject *t, PyObject
   if (unlikely(!o)) return 0;
   p = ((struct PyPetscSectionObject *)o);
   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8petsc4py_5PETSc_Section;
-  if (unlikely(__pyx_pw_8petsc4py_5PETSc_7Section_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  if (unlikely(__pyx_pw_8petsc4py_5PETSc_7Section_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) goto bad;
   return o;
+  bad:
+  Py_DECREF(o); o = 0;
+  return NULL;
 }
 
 static void __pyx_tp_dealloc_8petsc4py_5PETSc_Section(PyObject *o) {
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  #if CYTHON_USE_TP_FINALIZE
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -238997,10 +259237,11 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Mat(PyTypeObject *t, PyObject *a,
   if (unlikely(!o)) return 0;
   p = ((struct PyPetscMatObject *)o);
   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8petsc4py_5PETSc_Mat;
-  if (unlikely(__pyx_pw_8petsc4py_5PETSc_3Mat_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  if (unlikely(__pyx_pw_8petsc4py_5PETSc_3Mat_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) goto bad;
   return o;
+  bad:
+  Py_DECREF(o); o = 0;
+  return NULL;
 }
 static PyObject *__pyx_sq_item_8petsc4py_5PETSc_Mat(PyObject *o, Py_ssize_t i) {
   PyObject *r;
@@ -239098,7 +259339,7 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc_Mat[] = {
   {"createNormal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_67createNormal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_66createNormal},
   {"createTranspose", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_69createTranspose, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_68createTranspose},
   {"createLRC", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_71createLRC, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_70createLRC},
-  {"createSubMatrix", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_73createSubMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_72createSubMatrix},
+  {"createSubMatrixVirtual", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_73createSubMatrixVirtual, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_72createSubMatrixVirtual},
   {"createNest", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_75createNest, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_74createNest},
   {"createPython", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_77createPython, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_76createPython},
   {"setPythonContext", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_79setPythonContext, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_78setPythonContext},
@@ -239154,96 +259395,101 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc_Mat[] = {
   {"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},
+  {"getLGMap", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_185getLGMap, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_184getLGMap},
+  {"setValueLocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_187setValueLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_186setValueLocal},
+  {"setValuesLocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_189setValuesLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_188setValuesLocal},
+  {"setValuesLocalRCV", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_191setValuesLocalRCV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_190setValuesLocalRCV},
+  {"setValuesLocalIJV", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_193setValuesLocalIJV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_192setValuesLocalIJV},
+  {"setValuesLocalCSR", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_195setValuesLocalCSR, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_194setValuesLocalCSR},
+  {"setValuesBlockedLocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_197setValuesBlockedLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_196setValuesBlockedLocal},
+  {"setValuesBlockedLocalRCV", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_199setValuesBlockedLocalRCV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_198setValuesBlockedLocalRCV},
+  {"setValuesBlockedLocalIJV", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_201setValuesBlockedLocalIJV, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_200setValuesBlockedLocalIJV},
+  {"setValuesBlockedLocalCSR", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_203setValuesBlockedLocalCSR, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_202setValuesBlockedLocalCSR},
+  {"setStencil", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_205setStencil, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_204setStencil},
+  {"setValueStencil", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_207setValueStencil, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_206setValueStencil},
+  {"setValueBlockedStencil", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_209setValueBlockedStencil, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_208setValueBlockedStencil},
+  {"zeroRows", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_211zeroRows, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_210zeroRows},
+  {"zeroRowsLocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_213zeroRowsLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_212zeroRowsLocal},
+  {"zeroRowsColumns", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_215zeroRowsColumns, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_214zeroRowsColumns},
+  {"storeValues", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_217storeValues, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_216storeValues},
+  {"retrieveValues", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_219retrieveValues, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_218retrieveValues},
+  {"assemblyBegin", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_221assemblyBegin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_220assemblyBegin},
+  {"assemblyEnd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_223assemblyEnd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_222assemblyEnd},
+  {"assemble", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_225assemble, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_224assemble},
+  {"isAssembled", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_227isAssembled, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_226isAssembled},
+  {"createVecs", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_229createVecs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_228createVecs},
+  {"createVecRight", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_231createVecRight, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_230createVecRight},
+  {"createVecLeft", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_233createVecLeft, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_232createVecLeft},
+  {"getColumnVector", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_235getColumnVector, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_234getColumnVector},
+  {"getRedundantMatrix", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_237getRedundantMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_236getRedundantMatrix},
+  {"getDiagonal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_239getDiagonal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_238getDiagonal},
+  {"getRowSum", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_241getRowSum, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_240getRowSum},
+  {"setDiagonal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_243setDiagonal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_242setDiagonal},
+  {"diagonalScale", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_245diagonalScale, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_244diagonalScale},
+  {"invertBlockDiagonal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_247invertBlockDiagonal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_246invertBlockDiagonal},
+  {"setNullSpace", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_249setNullSpace, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_248setNullSpace},
+  {"getNullSpace", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_251getNullSpace, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_250getNullSpace},
+  {"setTransposeNullSpace", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_253setTransposeNullSpace, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_252setTransposeNullSpace},
+  {"getTransposeNullSpace", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_255getTransposeNullSpace, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_254getTransposeNullSpace},
+  {"setNearNullSpace", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_257setNearNullSpace, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_256setNearNullSpace},
+  {"getNearNullSpace", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_259getNearNullSpace, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_258getNearNullSpace},
+  {"mult", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_261mult, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_260mult},
+  {"multAdd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_263multAdd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_262multAdd},
+  {"multTranspose", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_265multTranspose, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_264multTranspose},
+  {"multTransposeAdd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_267multTransposeAdd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_266multTransposeAdd},
+  {"multHermitian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_269multHermitian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_268multHermitian},
+  {"multHermitianAdd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_271multHermitianAdd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_270multHermitianAdd},
+  {"SOR", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_273SOR, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_272SOR},
+  {"getDiagonalBlock", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_275getDiagonalBlock, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_274getDiagonalBlock},
+  {"increaseOverlap", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_277increaseOverlap, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_276increaseOverlap},
+  {"createSubMatrix", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_279createSubMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_278createSubMatrix},
+  {"createSubMatrices", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_281createSubMatrices, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_280createSubMatrices},
+  {"getLocalSubMatrix", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_283getLocalSubMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_282getLocalSubMatrix},
+  {"restoreLocalSubMatrix", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_285restoreLocalSubMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_284restoreLocalSubMatrix},
+  {"norm", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_287norm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_286norm},
+  {"scale", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_289scale, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_288scale},
+  {"shift", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_291shift, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_290shift},
+  {"chop", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_293chop, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_292chop},
+  {"axpy", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_295axpy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_294axpy},
+  {"aypx", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_297aypx, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_296aypx},
+  {"matMultSymbolic", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_299matMultSymbolic, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_298matMultSymbolic},
+  {"matMultNumeric", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_301matMultNumeric, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_300matMultNumeric},
+  {"matMult", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_303matMult, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_302matMult},
+  {"matTransposeMult", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_305matTransposeMult, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_304matTransposeMult},
+  {"transposeMatMult", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_307transposeMatMult, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_306transposeMatMult},
+  {"PtAP", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_309PtAP, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_308PtAP},
+  {"getOrdering", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_311getOrdering, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_310getOrdering},
+  {"reorderForNonzeroDiagonal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_313reorderForNonzeroDiagonal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_312reorderForNonzeroDiagonal},
+  {"factorLU", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_315factorLU, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_314factorLU},
+  {"factorSymbolicLU", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_317factorSymbolicLU, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_316factorSymbolicLU},
+  {"factorNumericLU", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_319factorNumericLU, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_318factorNumericLU},
+  {"factorILU", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_321factorILU, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_320factorILU},
+  {"factorSymbolicILU", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_323factorSymbolicILU, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_322factorSymbolicILU},
+  {"factorCholesky", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_325factorCholesky, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_324factorCholesky},
+  {"factorSymbolicCholesky", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_327factorSymbolicCholesky, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_326factorSymbolicCholesky},
+  {"factorNumericCholesky", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_329factorNumericCholesky, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_328factorNumericCholesky},
+  {"factorICC", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_331factorICC, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_330factorICC},
+  {"factorSymbolicICC", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_333factorSymbolicICC, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_332factorSymbolicICC},
+  {"getInertia", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_335getInertia, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_334getInertia},
+  {"setUnfactored", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_337setUnfactored, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_336setUnfactored},
+  {"getLRCMats", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_339getLRCMats, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_338getLRCMats},
+  {"setMumpsIcntl", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_341setMumpsIcntl, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_340setMumpsIcntl},
+  {"getMumpsIcntl", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_343getMumpsIcntl, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_342getMumpsIcntl},
+  {"setMumpsCntl", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_345setMumpsCntl, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_344setMumpsCntl},
+  {"getMumpsCntl", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_347getMumpsCntl, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_346getMumpsCntl},
+  {"getMumpsInfo", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_349getMumpsInfo, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_348getMumpsInfo},
+  {"getMumpsInfog", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_351getMumpsInfog, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_350getMumpsInfog},
+  {"getMumpsRinfo", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_353getMumpsRinfo, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_352getMumpsRinfo},
+  {"getMumpsRinfog", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_355getMumpsRinfog, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_354getMumpsRinfog},
+  {"solveForward", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_357solveForward, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_356solveForward},
+  {"solveBackward", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_359solveBackward, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_358solveBackward},
+  {"solve", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_361solve, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_360solve},
+  {"solveTranspose", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_363solveTranspose, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_362solveTranspose},
+  {"solveAdd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_365solveAdd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_364solveAdd},
+  {"solveTransposeAdd", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_367solveTransposeAdd, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_366solveTransposeAdd},
+  {"matSolve", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_369matSolve, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_368matSolve},
+  {"getDenseArray", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_371getDenseArray, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_370getDenseArray},
+  {"getDenseLocalMatrix", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Mat_373getDenseLocalMatrix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Mat_372getDenseLocalMatrix},
   {0, 0, 0, 0}
 };
 
@@ -239266,7 +259512,7 @@ static PyNumberMethods __pyx_tp_as_number_Mat = {
   __pyx_pw_8petsc4py_5PETSc_3Mat_17__add__, /*nb_add*/
   __pyx_pw_8petsc4py_5PETSc_3Mat_19__sub__, /*nb_subtract*/
   __pyx_pw_8petsc4py_5PETSc_3Mat_21__mul__, /*nb_multiply*/
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   __pyx_pw_8petsc4py_5PETSc_3Mat_23__div__, /*nb_divide*/
   #endif
   0, /*nb_remainder*/
@@ -239286,7 +259532,7 @@ static PyNumberMethods __pyx_tp_as_number_Mat = {
   0, /*nb_and*/
   0, /*nb_xor*/
   0, /*nb_or*/
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_coerce*/
   #endif
   0, /*nb_int*/
@@ -239296,16 +259542,16 @@ static PyNumberMethods __pyx_tp_as_number_Mat = {
   0, /*reserved*/
   #endif
   0, /*nb_float*/
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_oct*/
   #endif
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_hex*/
   #endif
   __pyx_pw_8petsc4py_5PETSc_3Mat_7__iadd__, /*nb_inplace_add*/
   __pyx_pw_8petsc4py_5PETSc_3Mat_9__isub__, /*nb_inplace_subtract*/
   __pyx_pw_8petsc4py_5PETSc_3Mat_11__imul__, /*nb_inplace_multiply*/
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   __pyx_pw_8petsc4py_5PETSc_3Mat_13__idiv__, /*nb_inplace_divide*/
   #endif
   0, /*nb_inplace_remainder*/
@@ -239412,10 +259658,11 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc_NullSpace(PyTypeObject *t, PyObje
   if (unlikely(!o)) return 0;
   p = ((struct PyPetscNullSpaceObject *)o);
   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8petsc4py_5PETSc_NullSpace;
-  if (unlikely(__pyx_pw_8petsc4py_5PETSc_9NullSpace_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  if (unlikely(__pyx_pw_8petsc4py_5PETSc_9NullSpace_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) goto bad;
   return o;
+  bad:
+  Py_DECREF(o); o = 0;
+  return NULL;
 }
 
 static PyMethodDef __pyx_methods_8petsc4py_5PETSc_NullSpace[] = {
@@ -239428,6 +259675,7 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc_NullSpace[] = {
   {"getVecs", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_9NullSpace_17getVecs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_9NullSpace_16getVecs},
   {"getFunction", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_9NullSpace_19getFunction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_9NullSpace_18getFunction},
   {"remove", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_9NullSpace_21remove, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_9NullSpace_20remove},
+  {"test", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_9NullSpace_23test, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_9NullSpace_22test},
   {0, 0, 0, 0}
 };
 
@@ -239496,10 +259744,11 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc_PC(PyTypeObject *t, PyObject *a,
   if (unlikely(!o)) return 0;
   p = ((struct PyPetscPCObject *)o);
   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8petsc4py_5PETSc_PC;
-  if (unlikely(__pyx_pw_8petsc4py_5PETSc_2PC_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  if (unlikely(__pyx_pw_8petsc4py_5PETSc_2PC_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) goto bad;
   return o;
+  bad:
+  Py_DECREF(o); o = 0;
+  return NULL;
 }
 
 static PyMethodDef __pyx_methods_8petsc4py_5PETSc_PC[] = {
@@ -239576,10 +259825,11 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc_PC[] = {
   {"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},
+  {"setMGCycleType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_151setMGCycleType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_150setMGCycleType},
+  {"setMGCycleTypeOnLevel", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_153setMGCycleTypeOnLevel, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_152setMGCycleTypeOnLevel},
+  {"setMGRhs", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_155setMGRhs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_154setMGRhs},
+  {"setMGX", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_157setMGX, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_156setMGX},
+  {"setMGR", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2PC_159setMGR, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2PC_158setMGR},
   {0, 0, 0, 0}
 };
 
@@ -239648,10 +259898,11 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc_KSP(PyTypeObject *t, PyObject *a,
   if (unlikely(!o)) return 0;
   p = ((struct PyPetscKSPObject *)o);
   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8petsc4py_5PETSc_KSP;
-  if (unlikely(__pyx_pw_8petsc4py_5PETSc_3KSP_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  if (unlikely(__pyx_pw_8petsc4py_5PETSc_3KSP_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) goto bad;
   return o;
+  bad:
+  Py_DECREF(o); o = 0;
+  return NULL;
 }
 
 static PyObject *__pyx_getprop_8petsc4py_5PETSc_3KSP_appctx(PyObject *o, CYTHON_UNUSED void *x) {
@@ -240034,10 +260285,11 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc_SNES(PyTypeObject *t, PyObject *a
   if (unlikely(!o)) return 0;
   p = ((struct PyPetscSNESObject *)o);
   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8petsc4py_5PETSc_SNES;
-  if (unlikely(__pyx_pw_8petsc4py_5PETSc_4SNES_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  if (unlikely(__pyx_pw_8petsc4py_5PETSc_4SNES_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) goto bad;
   return o;
+  bad:
+  Py_DECREF(o); o = 0;
+  return NULL;
 }
 
 static PyObject *__pyx_getprop_8petsc4py_5PETSc_4SNES_appctx(PyObject *o, CYTHON_UNUSED void *x) {
@@ -240206,6 +260458,20 @@ static int __pyx_setprop_8petsc4py_5PETSc_4SNES_its(PyObject *o, PyObject *v, CY
   }
 }
 
+static PyObject *__pyx_getprop_8petsc4py_5PETSc_4SNES_norm(PyObject *o, CYTHON_UNUSED void *x) {
+  return __pyx_pw_8petsc4py_5PETSc_4SNES_4norm_1__get__(o);
+}
+
+static int __pyx_setprop_8petsc4py_5PETSc_4SNES_norm(PyObject *o, PyObject *v, CYTHON_UNUSED void *x) {
+  if (v) {
+    return __pyx_pw_8petsc4py_5PETSc_4SNES_4norm_3__set__(o, v);
+  }
+  else {
+    PyErr_SetString(PyExc_NotImplementedError, "__del__");
+    return -1;
+  }
+}
+
 static PyObject *__pyx_getprop_8petsc4py_5PETSc_4SNES_history(PyObject *o, CYTHON_UNUSED void *x) {
   return __pyx_pw_8petsc4py_5PETSc_4SNES_7history_1__get__(o);
 }
@@ -240307,60 +260573,67 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc_SNES[] = {
   {"computeFunction", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_81computeFunction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_80computeFunction},
   {"computeJacobian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_83computeJacobian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_82computeJacobian},
   {"computeObjective", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_85computeObjective, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_84computeObjective},
-  {"setTolerances", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_87setTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_86setTolerances},
-  {"getTolerances", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_89getTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_88getTolerances},
-  {"setNormSchedule", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_91setNormSchedule, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_90setNormSchedule},
-  {"getNormSchedule", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_93getNormSchedule, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_92getNormSchedule},
-  {"setConvergenceTest", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_95setConvergenceTest, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_94setConvergenceTest},
-  {"getConvergenceTest", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_97getConvergenceTest, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_96getConvergenceTest},
-  {"callConvergenceTest", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_99callConvergenceTest, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_98callConvergenceTest},
-  {"setConvergenceHistory", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_101setConvergenceHistory, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_100setConvergenceHistory},
-  {"getConvergenceHistory", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_103getConvergenceHistory, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_102getConvergenceHistory},
-  {"logConvergenceHistory", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_105logConvergenceHistory, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_104logConvergenceHistory},
-  {"setResetCounters", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_107setResetCounters, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_106setResetCounters},
-  {"setMonitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_109setMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_108setMonitor},
-  {"getMonitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_111getMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_110getMonitor},
-  {"cancelMonitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_113cancelMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_112cancelMonitor},
-  {"monitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_115monitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_114monitor},
-  {"setMaxFunctionEvaluations", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_117setMaxFunctionEvaluations, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_116setMaxFunctionEvaluations},
-  {"getMaxFunctionEvaluations", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_119getMaxFunctionEvaluations, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_118getMaxFunctionEvaluations},
-  {"getFunctionEvaluations", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_121getFunctionEvaluations, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_120getFunctionEvaluations},
-  {"setMaxStepFailures", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_123setMaxStepFailures, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_122setMaxStepFailures},
-  {"getMaxStepFailures", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_125getMaxStepFailures, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_124getMaxStepFailures},
-  {"getStepFailures", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_127getStepFailures, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_126getStepFailures},
-  {"setMaxKSPFailures", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_129setMaxKSPFailures, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_128setMaxKSPFailures},
-  {"getMaxKSPFailures", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_131getMaxKSPFailures, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_130getMaxKSPFailures},
-  {"getKSPFailures", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_133getKSPFailures, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_132getKSPFailures},
-  {"setUp", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_135setUp, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_134setUp},
-  {"reset", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_137reset, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_136reset},
-  {"solve", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_139solve, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_138solve},
-  {"setConvergedReason", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_141setConvergedReason, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_140setConvergedReason},
-  {"getConvergedReason", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_143getConvergedReason, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_142getConvergedReason},
-  {"setIterationNumber", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_145setIterationNumber, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_144setIterationNumber},
-  {"getIterationNumber", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_147getIterationNumber, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_146getIterationNumber},
-  {"getLinearSolveIterations", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_149getLinearSolveIterations, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_148getLinearSolveIterations},
-  {"getRhs", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_151getRhs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_150getRhs},
-  {"getSolution", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_153getSolution, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_152getSolution},
-  {"setSolution", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_155setSolution, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_154setSolution},
-  {"getSolutionUpdate", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_157getSolutionUpdate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_156getSolutionUpdate},
-  {"setKSP", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_159setKSP, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_158setKSP},
-  {"getKSP", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_161getKSP, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_160getKSP},
-  {"setUseEW", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_163setUseEW, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_162setUseEW},
-  {"getUseEW", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_165getUseEW, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_164getUseEW},
-  {"setParamsEW", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_167setParamsEW, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_166setParamsEW},
-  {"getParamsEW", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_169getParamsEW, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_168getParamsEW},
-  {"setUseMF", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_171setUseMF, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_170setUseMF},
-  {"getUseMF", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_173getUseMF, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_172getUseMF},
-  {"setUseFD", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_175setUseFD, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_174setUseFD},
-  {"getUseFD", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_177getUseFD, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_176getUseFD},
-  {"setVariableBounds", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_179setVariableBounds, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_178setVariableBounds},
-  {"getVIInactiveSet", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_181getVIInactiveSet, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_180getVIInactiveSet},
-  {"createPython", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_183createPython, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_182createPython},
-  {"setPythonContext", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_185setPythonContext, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_184setPythonContext},
-  {"getPythonContext", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_187getPythonContext, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_186getPythonContext},
-  {"setPythonType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_189setPythonType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_188setPythonType},
-  {"getCompositeSNES", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_191getCompositeSNES, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_190getCompositeSNES},
-  {"getCompositeNumber", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_193getCompositeNumber, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_192getCompositeNumber},
+  {"setNGS", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_87setNGS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_86setNGS},
+  {"getNGS", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_89getNGS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_88getNGS},
+  {"computeNGS", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_91computeNGS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_90computeNGS},
+  {"setTolerances", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_93setTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_92setTolerances},
+  {"getTolerances", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_95getTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_94getTolerances},
+  {"setNormSchedule", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_97setNormSchedule, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_96setNormSchedule},
+  {"getNormSchedule", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_99getNormSchedule, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_98getNormSchedule},
+  {"setConvergenceTest", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_101setConvergenceTest, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_100setConvergenceTest},
+  {"getConvergenceTest", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_103getConvergenceTest, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_102getConvergenceTest},
+  {"callConvergenceTest", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_105callConvergenceTest, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_104callConvergenceTest},
+  {"setConvergenceHistory", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_107setConvergenceHistory, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_106setConvergenceHistory},
+  {"getConvergenceHistory", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_109getConvergenceHistory, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_108getConvergenceHistory},
+  {"logConvergenceHistory", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_111logConvergenceHistory, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_110logConvergenceHistory},
+  {"setResetCounters", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_113setResetCounters, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_112setResetCounters},
+  {"setMonitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_115setMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_114setMonitor},
+  {"getMonitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_117getMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_116getMonitor},
+  {"cancelMonitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_119cancelMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_118cancelMonitor},
+  {"monitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_121monitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_120monitor},
+  {"setMaxFunctionEvaluations", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_123setMaxFunctionEvaluations, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_122setMaxFunctionEvaluations},
+  {"getMaxFunctionEvaluations", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_125getMaxFunctionEvaluations, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_124getMaxFunctionEvaluations},
+  {"getFunctionEvaluations", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_127getFunctionEvaluations, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_126getFunctionEvaluations},
+  {"setMaxStepFailures", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_129setMaxStepFailures, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_128setMaxStepFailures},
+  {"getMaxStepFailures", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_131getMaxStepFailures, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_130getMaxStepFailures},
+  {"getStepFailures", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_133getStepFailures, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_132getStepFailures},
+  {"setMaxKSPFailures", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_135setMaxKSPFailures, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_134setMaxKSPFailures},
+  {"getMaxKSPFailures", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_137getMaxKSPFailures, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_136getMaxKSPFailures},
+  {"getKSPFailures", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_139getKSPFailures, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_138getKSPFailures},
+  {"setUp", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_141setUp, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_140setUp},
+  {"reset", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_143reset, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_142reset},
+  {"solve", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_145solve, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_144solve},
+  {"setConvergedReason", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_147setConvergedReason, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_146setConvergedReason},
+  {"getConvergedReason", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_149getConvergedReason, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_148getConvergedReason},
+  {"setIterationNumber", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_151setIterationNumber, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_150setIterationNumber},
+  {"getIterationNumber", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_153getIterationNumber, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_152getIterationNumber},
+  {"setFunctionNorm", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_155setFunctionNorm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_154setFunctionNorm},
+  {"getFunctionNorm", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_157getFunctionNorm, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_156getFunctionNorm},
+  {"getLinearSolveIterations", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_159getLinearSolveIterations, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_158getLinearSolveIterations},
+  {"getRhs", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_161getRhs, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_160getRhs},
+  {"getSolution", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_163getSolution, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_162getSolution},
+  {"setSolution", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_165setSolution, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_164setSolution},
+  {"getSolutionUpdate", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_167getSolutionUpdate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_166getSolutionUpdate},
+  {"setKSP", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_169setKSP, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_168setKSP},
+  {"getKSP", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_171getKSP, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_170getKSP},
+  {"setUseEW", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_173setUseEW, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_172setUseEW},
+  {"getUseEW", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_175getUseEW, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_174getUseEW},
+  {"setParamsEW", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_177setParamsEW, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_176setParamsEW},
+  {"getParamsEW", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_179getParamsEW, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_178getParamsEW},
+  {"setUseMF", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_181setUseMF, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_180setUseMF},
+  {"getUseMF", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_183getUseMF, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_182getUseMF},
+  {"setUseFD", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_185setUseFD, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_184setUseFD},
+  {"getUseFD", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_187getUseFD, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_186getUseFD},
+  {"setVariableBounds", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_189setVariableBounds, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_188setVariableBounds},
+  {"getVIInactiveSet", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_191getVIInactiveSet, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_190getVIInactiveSet},
+  {"createPython", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_193createPython, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_192createPython},
+  {"setPythonContext", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_195setPythonContext, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_194setPythonContext},
+  {"getPythonContext", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_197getPythonContext, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_196getPythonContext},
+  {"setPythonType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_199setPythonType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_198setPythonType},
+  {"getCompositeSNES", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_201getCompositeSNES, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_200getCompositeSNES},
+  {"getCompositeNumber", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_203getCompositeNumber, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_202getCompositeNumber},
+  {"getNASMSNES", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_205getNASMSNES, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_204getNASMSNES},
+  {"getNASMNumber", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_4SNES_207getNASMNumber, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_4SNES_206getNASMNumber},
   {0, 0, 0, 0}
 };
 
@@ -240379,6 +260652,7 @@ static struct PyGetSetDef __pyx_getsets_8petsc4py_5PETSc_SNES[] = {
   {(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 *)"norm", __pyx_getprop_8petsc4py_5PETSc_4SNES_norm, __pyx_setprop_8petsc4py_5PETSc_4SNES_norm, (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},
@@ -240454,10 +260728,11 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc_TS(PyTypeObject *t, PyObject *a,
   if (unlikely(!o)) return 0;
   p = ((struct PyPetscTSObject *)o);
   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8petsc4py_5PETSc_TS;
-  if (unlikely(__pyx_pw_8petsc4py_5PETSc_2TS_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  if (unlikely(__pyx_pw_8petsc4py_5PETSc_2TS_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) goto bad;
   return o;
+  bad:
+  Py_DECREF(o); o = 0;
+  return NULL;
 }
 
 static PyObject *__pyx_getprop_8petsc4py_5PETSc_2TS_appctx(PyObject *o, CYTHON_UNUSED void *x) {
@@ -240659,89 +260934,106 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc_TS[] = {
   {"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},
+  {"setRKType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_15setRKType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_14setRKType},
+  {"getType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_17getType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_16getType},
+  {"getRKType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_19getRKType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_18getRKType},
+  {"setProblemType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_21setProblemType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_20setProblemType},
+  {"getProblemType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_23getProblemType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_22getProblemType},
+  {"setEquationType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_25setEquationType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_24setEquationType},
+  {"getEquationType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_27getEquationType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_26getEquationType},
+  {"setOptionsPrefix", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_29setOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_28setOptionsPrefix},
+  {"getOptionsPrefix", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_31getOptionsPrefix, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_30getOptionsPrefix},
+  {"setFromOptions", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_33setFromOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_32setFromOptions},
+  {"setAppCtx", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_35setAppCtx, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_34setAppCtx},
+  {"getAppCtx", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_37getAppCtx, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_36getAppCtx},
+  {"setRHSFunction", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_39setRHSFunction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_38setRHSFunction},
+  {"setRHSJacobian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_41setRHSJacobian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_40setRHSJacobian},
+  {"computeRHSFunction", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_43computeRHSFunction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_42computeRHSFunction},
+  {"computeRHSFunctionLinear", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_45computeRHSFunctionLinear, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_44computeRHSFunctionLinear},
+  {"computeRHSJacobian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_47computeRHSJacobian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_46computeRHSJacobian},
+  {"computeRHSJacobianConstant", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_49computeRHSJacobianConstant, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_48computeRHSJacobianConstant},
+  {"getRHSFunction", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_51getRHSFunction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_50getRHSFunction},
+  {"getRHSJacobian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_53getRHSJacobian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_52getRHSJacobian},
+  {"setIFunction", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_55setIFunction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_54setIFunction},
+  {"setIJacobian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_57setIJacobian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_56setIJacobian},
+  {"computeIFunction", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_59computeIFunction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_58computeIFunction},
+  {"computeIJacobian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_61computeIJacobian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_60computeIJacobian},
+  {"getIFunction", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_63getIFunction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_62getIFunction},
+  {"getIJacobian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_65getIJacobian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_64getIJacobian},
+  {"setI2Function", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_67setI2Function, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_66setI2Function},
+  {"setI2Jacobian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_69setI2Jacobian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_68setI2Jacobian},
+  {"computeI2Function", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_71computeI2Function, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_70computeI2Function},
+  {"computeI2Jacobian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_73computeI2Jacobian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_72computeI2Jacobian},
+  {"getI2Function", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_75getI2Function, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_74getI2Function},
+  {"getI2Jacobian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_77getI2Jacobian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_76getI2Jacobian},
+  {"setSolution", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_79setSolution, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_78setSolution},
+  {"getSolution", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_81getSolution, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_80getSolution},
+  {"setSolution2", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_83setSolution2, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_82setSolution2},
+  {"getSolution2", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_85getSolution2, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_84getSolution2},
+  {"getSNES", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_87getSNES, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_86getSNES},
+  {"getKSP", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_89getKSP, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_88getKSP},
+  {"getDM", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_91getDM, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_90getDM},
+  {"setDM", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_93setDM, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_92setDM},
+  {"setTime", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_95setTime, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_94setTime},
+  {"getTime", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_97getTime, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_96getTime},
+  {"getPrevTime", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_99getPrevTime, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_98getPrevTime},
+  {"getSolveTime", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_101getSolveTime, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_100getSolveTime},
+  {"setTimeStep", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_103setTimeStep, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_102setTimeStep},
+  {"getTimeStep", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_105getTimeStep, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_104getTimeStep},
+  {"setStepNumber", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_107setStepNumber, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_106setStepNumber},
+  {"getStepNumber", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_109getStepNumber, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_108getStepNumber},
+  {"setMaxTime", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_111setMaxTime, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_110setMaxTime},
+  {"getMaxTime", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_113getMaxTime, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_112getMaxTime},
+  {"setMaxSteps", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_115setMaxSteps, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_114setMaxSteps},
+  {"getMaxSteps", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_117getMaxSteps, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_116getMaxSteps},
+  {"getSNESIterations", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_119getSNESIterations, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_118getSNESIterations},
+  {"getKSPIterations", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_121getKSPIterations, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_120getKSPIterations},
+  {"setMaxStepRejections", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_123setMaxStepRejections, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_122setMaxStepRejections},
+  {"getStepRejections", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_125getStepRejections, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_124getStepRejections},
+  {"setMaxSNESFailures", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_127setMaxSNESFailures, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_126setMaxSNESFailures},
+  {"getSNESFailures", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_129getSNESFailures, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_128getSNESFailures},
+  {"setErrorIfStepFails", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_131setErrorIfStepFails, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_130setErrorIfStepFails},
+  {"setTolerances", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_133setTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_132setTolerances},
+  {"getTolerances", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_135getTolerances, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_134getTolerances},
+  {"setExactFinalTime", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_137setExactFinalTime, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_136setExactFinalTime},
+  {"setConvergedReason", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_139setConvergedReason, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_138setConvergedReason},
+  {"getConvergedReason", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_141getConvergedReason, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_140getConvergedReason},
+  {"setMonitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_143setMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_142setMonitor},
+  {"getMonitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_145getMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_144getMonitor},
+  {"cancelMonitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_147cancelMonitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_146cancelMonitor},
+  {"monitor", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_149monitor, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_148monitor},
+  {"setPreStep", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_151setPreStep, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_150setPreStep},
+  {"getPreStep", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_153getPreStep, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_152getPreStep},
+  {"setPostStep", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_155setPostStep, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_154setPostStep},
+  {"getPostStep", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_157getPostStep, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_156getPostStep},
+  {"setUp", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_159setUp, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_158setUp},
+  {"reset", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_161reset, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_160reset},
+  {"step", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_163step, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_162step},
+  {"rollBack", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_165rollBack, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_164rollBack},
+  {"solve", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_167solve, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_166solve},
+  {"interpolate", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_169interpolate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_168interpolate},
+  {"setSaveTrajectory", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_171setSaveTrajectory, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_170setSaveTrajectory},
+  {"getCostIntegral", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_173getCostIntegral, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_172getCostIntegral},
+  {"setCostGradients", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_175setCostGradients, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_174setCostGradients},
+  {"getCostGradients", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_177getCostGradients, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_176getCostGradients},
+  {"setCostIntegrand", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_179setCostIntegrand, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_178setCostIntegrand},
+  {"adjointSetRHSJacobian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_181adjointSetRHSJacobian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_180adjointSetRHSJacobian},
+  {"adjointComputeRHSJacobian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_183adjointComputeRHSJacobian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_182adjointComputeRHSJacobian},
+  {"adjointSetSteps", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_185adjointSetSteps, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_184adjointSetSteps},
+  {"adjointSetUp", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_187adjointSetUp, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_186adjointSetUp},
+  {"adjointSolve", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_189adjointSolve, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_188adjointSolve},
+  {"adjointStep", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_191adjointStep, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_190adjointStep},
+  {"createPython", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_193createPython, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_192createPython},
+  {"setPythonContext", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_195setPythonContext, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_194setPythonContext},
+  {"getPythonContext", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_197getPythonContext, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_196getPythonContext},
+  {"setPythonType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_199setPythonType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_198setPythonType},
+  {"setTheta", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_201setTheta, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_200setTheta},
+  {"getTheta", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_203getTheta, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_202getTheta},
+  {"setThetaEndpoint", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_205setThetaEndpoint, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_204setThetaEndpoint},
+  {"getThetaEndpoint", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_207getThetaEndpoint, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_206getThetaEndpoint},
+  {"setAlphaRadius", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_209setAlphaRadius, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_208setAlphaRadius},
+  {"setAlphaParams", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_211setAlphaParams, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_210setAlphaParams},
+  {"getAlphaParams", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2TS_213getAlphaParams, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2TS_212getAlphaParams},
   {0, 0, 0, 0}
 };
 
@@ -240832,10 +261124,11 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc_TAO(PyTypeObject *t, PyObject *a,
   if (unlikely(!o)) return 0;
   p = ((struct PyPetscTAOObject *)o);
   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8petsc4py_5PETSc_TAO;
-  if (unlikely(__pyx_pw_8petsc4py_5PETSc_3TAO_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  if (unlikely(__pyx_pw_8petsc4py_5PETSc_3TAO_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) goto bad;
   return o;
+  bad:
+  Py_DECREF(o); o = 0;
+  return NULL;
 }
 
 static PyObject *__pyx_getprop_8petsc4py_5PETSc_3TAO_appctx(PyObject *o, CYTHON_UNUSED void *x) {
@@ -241090,10 +261383,11 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc_AO(PyTypeObject *t, PyObject *a,
   if (unlikely(!o)) return 0;
   p = ((struct PyPetscAOObject *)o);
   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8petsc4py_5PETSc_AO;
-  if (unlikely(__pyx_pw_8petsc4py_5PETSc_2AO_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  if (unlikely(__pyx_pw_8petsc4py_5PETSc_2AO_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) goto bad;
   return o;
+  bad:
+  Py_DECREF(o); o = 0;
+  return NULL;
 }
 
 static PyMethodDef __pyx_methods_8petsc4py_5PETSc_AO[] = {
@@ -241173,10 +261467,11 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc_DM(PyTypeObject *t, PyObject *a,
   if (unlikely(!o)) return 0;
   p = ((struct PyPetscDMObject *)o);
   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8petsc4py_5PETSc_DM;
-  if (unlikely(__pyx_pw_8petsc4py_5PETSc_2DM_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  if (unlikely(__pyx_pw_8petsc4py_5PETSc_2DM_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) goto bad;
   return o;
+  bad:
+  Py_DECREF(o); o = 0;
+  return NULL;
 }
 
 static PyMethodDef __pyx_methods_8petsc4py_5PETSc_DM[] = {
@@ -241197,49 +261492,62 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc_DM[] = {
   {"setVecType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_31setVecType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_30setVecType},
   {"createGlobalVec", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_33createGlobalVec, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_32createGlobalVec},
   {"createLocalVec", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_35createLocalVec, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_34createLocalVec},
-  {"globalToLocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_37globalToLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_36globalToLocal},
-  {"localToGlobal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_39localToGlobal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_38localToGlobal},
-  {"localToLocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_41localToLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_40localToLocal},
-  {"getLGMap", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_43getLGMap, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_42getLGMap},
-  {"getCoordinateDM", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_45getCoordinateDM, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_44getCoordinateDM},
-  {"getCoordinateSection", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_47getCoordinateSection, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_46getCoordinateSection},
-  {"setCoordinates", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_49setCoordinates, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_48setCoordinates},
-  {"getCoordinates", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_51getCoordinates, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_50getCoordinates},
-  {"setCoordinatesLocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_53setCoordinatesLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_52setCoordinatesLocal},
-  {"getCoordinatesLocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_55getCoordinatesLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_54getCoordinatesLocal},
-  {"setMatType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_57setMatType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_56setMatType},
-  {"createMat", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_59createMat, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_58createMat},
-  {"createInterpolation", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_61createInterpolation, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_60createInterpolation},
-  {"createInjection", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_63createInjection, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_62createInjection},
-  {"createAggregates", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_65createAggregates, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_64createAggregates},
-  {"convert", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_67convert, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_66convert},
-  {"refine", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_69refine, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_68refine},
-  {"coarsen", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_71coarsen, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_70coarsen},
-  {"refineHierarchy", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_73refineHierarchy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_72refineHierarchy},
-  {"coarsenHierarchy", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_75coarsenHierarchy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_74coarsenHierarchy},
-  {"setDefaultSection", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_77setDefaultSection, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_76setDefaultSection},
-  {"getDefaultSection", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_79getDefaultSection, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_78getDefaultSection},
-  {"setDefaultGlobalSection", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_81setDefaultGlobalSection, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_80setDefaultGlobalSection},
-  {"getDefaultGlobalSection", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_83getDefaultGlobalSection, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_82getDefaultGlobalSection},
-  {"createDefaultSF", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_85createDefaultSF, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_84createDefaultSF},
-  {"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},
+  {"getGlobalVec", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_37getGlobalVec, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_36getGlobalVec},
+  {"restoreGlobalVec", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_39restoreGlobalVec, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_38restoreGlobalVec},
+  {"getLocalVec", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_41getLocalVec, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_40getLocalVec},
+  {"restoreLocalVec", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_43restoreLocalVec, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_42restoreLocalVec},
+  {"globalToLocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_45globalToLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_44globalToLocal},
+  {"localToGlobal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_47localToGlobal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_46localToGlobal},
+  {"localToLocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_49localToLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_48localToLocal},
+  {"getLGMap", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_51getLGMap, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_50getLGMap},
+  {"getCoordinateDM", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_53getCoordinateDM, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_52getCoordinateDM},
+  {"getCoordinateSection", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_55getCoordinateSection, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_54getCoordinateSection},
+  {"setCoordinates", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_57setCoordinates, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_56setCoordinates},
+  {"getCoordinates", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_59getCoordinates, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_58getCoordinates},
+  {"setCoordinatesLocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_61setCoordinatesLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_60setCoordinatesLocal},
+  {"getCoordinatesLocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_63getCoordinatesLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_62getCoordinatesLocal},
+  {"setMatType", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_65setMatType, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_64setMatType},
+  {"createMat", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_67createMat, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_66createMat},
+  {"createInterpolation", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_69createInterpolation, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_68createInterpolation},
+  {"createInjection", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_71createInjection, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_70createInjection},
+  {"createAggregates", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_73createAggregates, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_72createAggregates},
+  {"convert", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_75convert, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_74convert},
+  {"refine", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_77refine, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_76refine},
+  {"coarsen", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_79coarsen, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_78coarsen},
+  {"refineHierarchy", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_81refineHierarchy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_80refineHierarchy},
+  {"coarsenHierarchy", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_83coarsenHierarchy, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_82coarsenHierarchy},
+  {"getRefineLevel", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_85getRefineLevel, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_84getRefineLevel},
+  {"setRefineLevel", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_87setRefineLevel, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_86setRefineLevel},
+  {"getCoarsenLevel", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_89getCoarsenLevel, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_88getCoarsenLevel},
+  {"adaptLabel", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_91adaptLabel, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_90adaptLabel},
+  {"adaptMetric", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_93adaptMetric, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_92adaptMetric},
+  {"setDefaultSection", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_95setDefaultSection, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_94setDefaultSection},
+  {"getDefaultSection", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_97getDefaultSection, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_96getDefaultSection},
+  {"setDefaultGlobalSection", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_99setDefaultGlobalSection, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_98setDefaultGlobalSection},
+  {"getDefaultGlobalSection", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_101getDefaultGlobalSection, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_100getDefaultGlobalSection},
+  {"createDefaultSF", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_103createDefaultSF, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_102createDefaultSF},
+  {"getDefaultSF", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_105getDefaultSF, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_104getDefaultSF},
+  {"getPointSF", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_107getPointSF, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_106getPointSF},
+  {"setPointSF", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_109setPointSF, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_108setPointSF},
+  {"getNumLabels", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_111getNumLabels, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_110getNumLabels},
+  {"getLabelName", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_113getLabelName, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_112getLabelName},
+  {"hasLabel", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_115hasLabel, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_114hasLabel},
+  {"createLabel", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_117createLabel, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_116createLabel},
+  {"removeLabel", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_119removeLabel, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_118removeLabel},
+  {"getLabelValue", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_121getLabelValue, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_120getLabelValue},
+  {"setLabelValue", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_123setLabelValue, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_122setLabelValue},
+  {"clearLabelValue", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_125clearLabelValue, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_124clearLabelValue},
+  {"getLabelSize", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_127getLabelSize, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_126getLabelSize},
+  {"getLabelIdIS", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_129getLabelIdIS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_128getLabelIdIS},
+  {"getStratumSize", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_131getStratumSize, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_130getStratumSize},
+  {"getStratumIS", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_133getStratumIS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_132getStratumIS},
+  {"clearLabelStratum", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_135clearLabelStratum, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_134clearLabelStratum},
+  {"setLabelOutput", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_137setLabelOutput, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_136setLabelOutput},
+  {"getLabelOutput", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_139getLabelOutput, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_138getLabelOutput},
+  {"setKSPComputeOperators", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_141setKSPComputeOperators, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_140setKSPComputeOperators},
+  {"createFieldDecomposition", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_143createFieldDecomposition, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_142createFieldDecomposition},
+  {"setSNESFunction", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_145setSNESFunction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_144setSNESFunction},
+  {"setSNESJacobian", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_2DM_147setSNESJacobian, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_2DM_146setSNESJacobian},
   {0, 0, 0, 0}
 };
 
@@ -241308,10 +261616,11 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Partitioner(PyTypeObject *t, PyOb
   if (unlikely(!o)) return 0;
   p = ((struct PyPetscPartitionerObject *)o);
   p->__pyx_base.__pyx_vtab = (struct __pyx_vtabstruct_8petsc4py_5PETSc_Object*)__pyx_vtabptr_8petsc4py_5PETSc_Partitioner;
-  if (unlikely(__pyx_pw_8petsc4py_5PETSc_11Partitioner_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  if (unlikely(__pyx_pw_8petsc4py_5PETSc_11Partitioner_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) goto bad;
   return o;
+  bad:
+  Py_DECREF(o); o = 0;
+  return NULL;
 }
 
 static PyMethodDef __pyx_methods_8petsc4py_5PETSc_Partitioner[] = {
@@ -241396,15 +261705,16 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc__IS_buffer(PyTypeObject *t, PyObj
   if (unlikely(!o)) return 0;
   p = ((struct __pyx_obj_8petsc4py_5PETSc__IS_buffer *)o);
   p->__pyx_vtab = __pyx_vtabptr_8petsc4py_5PETSc__IS_buffer;
-  if (unlikely(__pyx_pw_8petsc4py_5PETSc_10_IS_buffer_1__cinit__(o, a, k) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  if (unlikely(__pyx_pw_8petsc4py_5PETSc_10_IS_buffer_1__cinit__(o, a, k) < 0)) goto bad;
   return o;
+  bad:
+  Py_DECREF(o); o = 0;
+  return NULL;
 }
 
 static void __pyx_tp_dealloc_8petsc4py_5PETSc__IS_buffer(PyObject *o) {
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
+  #if CYTHON_USE_TP_FINALIZE
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -241521,15 +261831,16 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc__Vec_buffer(PyTypeObject *t, PyOb
   if (unlikely(!o)) return 0;
   p = ((struct __pyx_obj_8petsc4py_5PETSc__Vec_buffer *)o);
   p->__pyx_vtab = __pyx_vtabptr_8petsc4py_5PETSc__Vec_buffer;
-  if (unlikely(__pyx_pw_8petsc4py_5PETSc_11_Vec_buffer_1__cinit__(o, a, k) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  if (unlikely(__pyx_pw_8petsc4py_5PETSc_11_Vec_buffer_1__cinit__(o, a, k) < 0)) goto bad;
   return o;
+  bad:
+  Py_DECREF(o); o = 0;
+  return NULL;
 }
 
 static void __pyx_tp_dealloc_8petsc4py_5PETSc__Vec_buffer(PyObject *o) {
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
+  #if CYTHON_USE_TP_FINALIZE
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -241651,8 +261962,8 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc__Vec_LocalForm(PyTypeObject *t, C
 
 static void __pyx_tp_dealloc_8petsc4py_5PETSc__Vec_LocalForm(PyObject *o) {
   struct __pyx_obj_8petsc4py_5PETSc__Vec_LocalForm *p = (struct __pyx_obj_8petsc4py_5PETSc__Vec_LocalForm *)o;
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  #if CYTHON_USE_TP_FINALIZE
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -241666,10 +261977,10 @@ static int __pyx_tp_traverse_8petsc4py_5PETSc__Vec_LocalForm(PyObject *o, visitp
   int e;
   struct __pyx_obj_8petsc4py_5PETSc__Vec_LocalForm *p = (struct __pyx_obj_8petsc4py_5PETSc__Vec_LocalForm *)o;
   if (p->gvec) {
-    e = (*v)(((PyObject*)p->gvec), a); if (e) return e;
+    e = (*v)(((PyObject *)p->gvec), a); if (e) return e;
   }
   if (p->lvec) {
-    e = (*v)(((PyObject*)p->lvec), a); if (e) return e;
+    e = (*v)(((PyObject *)p->lvec), a); if (e) return e;
   }
   return 0;
 }
@@ -241762,8 +262073,8 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc__Mat_Stencil(PyTypeObject *t, CYT
 }
 
 static void __pyx_tp_dealloc_8petsc4py_5PETSc__Mat_Stencil(PyObject *o) {
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
+  #if CYTHON_USE_TP_FINALIZE
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -241916,16 +262227,17 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc__DMDA_Vec_array(PyTypeObject *t,
   p->shape = ((PyObject*)Py_None); Py_INCREF(Py_None);
   p->strides = ((PyObject*)Py_None); Py_INCREF(Py_None);
   p->array = ((PyArrayObject *)Py_None); Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_8petsc4py_5PETSc_15_DMDA_Vec_array_1__cinit__(o, a, k) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  if (unlikely(__pyx_pw_8petsc4py_5PETSc_15_DMDA_Vec_array_1__cinit__(o, a, k) < 0)) goto bad;
   return o;
+  bad:
+  Py_DECREF(o); o = 0;
+  return NULL;
 }
 
 static void __pyx_tp_dealloc_8petsc4py_5PETSc__DMDA_Vec_array(PyObject *o) {
   struct __pyx_obj_8petsc4py_5PETSc__DMDA_Vec_array *p = (struct __pyx_obj_8petsc4py_5PETSc__DMDA_Vec_array *)o;
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  #if CYTHON_USE_TP_FINALIZE
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -241943,7 +262255,7 @@ static int __pyx_tp_traverse_8petsc4py_5PETSc__DMDA_Vec_array(PyObject *o, visit
   int e;
   struct __pyx_obj_8petsc4py_5PETSc__DMDA_Vec_array *p = (struct __pyx_obj_8petsc4py_5PETSc__DMDA_Vec_array *)o;
   if (p->vecbuf) {
-    e = (*v)(((PyObject*)p->vecbuf), a); if (e) return e;
+    e = (*v)(((PyObject *)p->vecbuf), a); if (e) return e;
   }
   if (p->starts) {
     e = (*v)(p->starts, a); if (e) return e;
@@ -241958,7 +262270,7 @@ static int __pyx_tp_traverse_8petsc4py_5PETSc__DMDA_Vec_array(PyObject *o, visit
     e = (*v)(p->strides, a); if (e) return e;
   }
   if (p->array) {
-    e = (*v)(((PyObject*)p->array), a); if (e) return e;
+    e = (*v)(((PyObject *)p->array), a); if (e) return e;
   }
   return 0;
 }
@@ -242130,16 +262442,17 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc__DMComposite_access(PyTypeObject
   p->locs_mem = Py_None; Py_INCREF(Py_None);
   p->vecs_mem = Py_None; Py_INCREF(Py_None);
   p->access = Py_None; Py_INCREF(Py_None);
-  if (unlikely(__pyx_pw_8petsc4py_5PETSc_19_DMComposite_access_1__cinit__(o, a, k) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  if (unlikely(__pyx_pw_8petsc4py_5PETSc_19_DMComposite_access_1__cinit__(o, a, k) < 0)) goto bad;
   return o;
+  bad:
+  Py_DECREF(o); o = 0;
+  return NULL;
 }
 
 static void __pyx_tp_dealloc_8petsc4py_5PETSc__DMComposite_access(PyObject *o) {
   struct __pyx_obj_8petsc4py_5PETSc__DMComposite_access *p = (struct __pyx_obj_8petsc4py_5PETSc__DMComposite_access *)o;
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  #if CYTHON_USE_TP_FINALIZE
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -242268,8 +262581,8 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Options(PyTypeObject *t, CYTHON_U
 
 static void __pyx_tp_dealloc_8petsc4py_5PETSc_Options(PyObject *o) {
   struct __pyx_obj_8petsc4py_5PETSc_Options *p = (struct __pyx_obj_8petsc4py_5PETSc_Options *)o;
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
+  #if CYTHON_USE_TP_FINALIZE
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && !_PyGC_FINALIZED(o)) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -242447,8 +262760,8 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Sys(PyTypeObject *t, CYTHON_UNUSE
 }
 
 static void __pyx_tp_dealloc_8petsc4py_5PETSc_Sys(PyObject *o) {
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
+  #if CYTHON_USE_TP_FINALIZE
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -242469,8 +262782,9 @@ 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},
+  {"popSignalHandler", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Sys_27popSignalHandler, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Sys_26popSignalHandler},
+  {"infoAllow", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Sys_29infoAllow, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Sys_28infoAllow},
+  {"registerCitation", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_3Sys_31registerCitation, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_3Sys_30registerCitation},
   {0, 0, 0, 0}
 };
 
@@ -242544,8 +262858,8 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc_Log(PyTypeObject *t, CYTHON_UNUSE
 }
 
 static void __pyx_tp_dealloc_8petsc4py_5PETSc_Log(PyObject *o) {
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
+  #if CYTHON_USE_TP_FINALIZE
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -242633,15 +262947,16 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc_LogStage(PyTypeObject *t, CYTHON_
     o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
   }
   if (unlikely(!o)) return 0;
-  if (unlikely(__pyx_pw_8petsc4py_5PETSc_8LogStage_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  if (unlikely(__pyx_pw_8petsc4py_5PETSc_8LogStage_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) goto bad;
   return o;
+  bad:
+  Py_DECREF(o); o = 0;
+  return NULL;
 }
 
 static void __pyx_tp_dealloc_8petsc4py_5PETSc_LogStage(PyObject *o) {
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
+  #if CYTHON_USE_TP_FINALIZE
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -242721,7 +263036,7 @@ static PyNumberMethods __pyx_tp_as_number_LogStage = {
   0, /*nb_add*/
   0, /*nb_subtract*/
   0, /*nb_multiply*/
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_divide*/
   #endif
   0, /*nb_remainder*/
@@ -242737,7 +263052,7 @@ static PyNumberMethods __pyx_tp_as_number_LogStage = {
   0, /*nb_and*/
   0, /*nb_xor*/
   0, /*nb_or*/
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_coerce*/
   #endif
   __pyx_pw_8petsc4py_5PETSc_8LogStage_3__int__, /*nb_int*/
@@ -242747,16 +263062,16 @@ static PyNumberMethods __pyx_tp_as_number_LogStage = {
   0, /*reserved*/
   #endif
   0, /*nb_float*/
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_oct*/
   #endif
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_hex*/
   #endif
   0, /*nb_inplace_add*/
   0, /*nb_inplace_subtract*/
   0, /*nb_inplace_multiply*/
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_inplace_divide*/
   #endif
   0, /*nb_inplace_remainder*/
@@ -242845,15 +263160,16 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc_LogClass(PyTypeObject *t, CYTHON_
     o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
   }
   if (unlikely(!o)) return 0;
-  if (unlikely(__pyx_pw_8petsc4py_5PETSc_8LogClass_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  if (unlikely(__pyx_pw_8petsc4py_5PETSc_8LogClass_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) goto bad;
   return o;
+  bad:
+  Py_DECREF(o); o = 0;
+  return NULL;
 }
 
 static void __pyx_tp_dealloc_8petsc4py_5PETSc_LogClass(PyObject *o) {
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
+  #if CYTHON_USE_TP_FINALIZE
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -242912,7 +263228,7 @@ static PyNumberMethods __pyx_tp_as_number_LogClass = {
   0, /*nb_add*/
   0, /*nb_subtract*/
   0, /*nb_multiply*/
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_divide*/
   #endif
   0, /*nb_remainder*/
@@ -242928,7 +263244,7 @@ static PyNumberMethods __pyx_tp_as_number_LogClass = {
   0, /*nb_and*/
   0, /*nb_xor*/
   0, /*nb_or*/
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_coerce*/
   #endif
   __pyx_pw_8petsc4py_5PETSc_8LogClass_3__int__, /*nb_int*/
@@ -242938,16 +263254,16 @@ static PyNumberMethods __pyx_tp_as_number_LogClass = {
   0, /*reserved*/
   #endif
   0, /*nb_float*/
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_oct*/
   #endif
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_hex*/
   #endif
   0, /*nb_inplace_add*/
   0, /*nb_inplace_subtract*/
   0, /*nb_inplace_multiply*/
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_inplace_divide*/
   #endif
   0, /*nb_inplace_remainder*/
@@ -243036,15 +263352,16 @@ static PyObject *__pyx_tp_new_8petsc4py_5PETSc_LogEvent(PyTypeObject *t, CYTHON_
     o = (PyObject *) PyBaseObject_Type.tp_new(t, __pyx_empty_tuple, 0);
   }
   if (unlikely(!o)) return 0;
-  if (unlikely(__pyx_pw_8petsc4py_5PETSc_8LogEvent_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) {
-    Py_DECREF(o); o = 0;
-  }
+  if (unlikely(__pyx_pw_8petsc4py_5PETSc_8LogEvent_1__cinit__(o, __pyx_empty_tuple, NULL) < 0)) goto bad;
   return o;
+  bad:
+  Py_DECREF(o); o = 0;
+  return NULL;
 }
 
 static void __pyx_tp_dealloc_8petsc4py_5PETSc_LogEvent(PyObject *o) {
-  #if PY_VERSION_HEX >= 0x030400a1
-  if (unlikely(Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
+  #if CYTHON_USE_TP_FINALIZE
+  if (unlikely(PyType_HasFeature(Py_TYPE(o), Py_TPFLAGS_HAVE_FINALIZE) && Py_TYPE(o)->tp_finalize) && (!PyType_IS_GC(Py_TYPE(o)) || !_PyGC_FINALIZED(o))) {
     if (PyObject_CallFinalizerFromDealloc(o)) return;
   }
   #endif
@@ -243127,7 +263444,7 @@ static PyNumberMethods __pyx_tp_as_number_LogEvent = {
   0, /*nb_add*/
   0, /*nb_subtract*/
   0, /*nb_multiply*/
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_divide*/
   #endif
   0, /*nb_remainder*/
@@ -243143,7 +263460,7 @@ static PyNumberMethods __pyx_tp_as_number_LogEvent = {
   0, /*nb_and*/
   0, /*nb_xor*/
   0, /*nb_or*/
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_coerce*/
   #endif
   __pyx_pw_8petsc4py_5PETSc_8LogEvent_3__int__, /*nb_int*/
@@ -243153,16 +263470,16 @@ static PyNumberMethods __pyx_tp_as_number_LogEvent = {
   0, /*reserved*/
   #endif
   0, /*nb_float*/
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_oct*/
   #endif
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_hex*/
   #endif
   0, /*nb_inplace_add*/
   0, /*nb_inplace_subtract*/
   0, /*nb_inplace_multiply*/
-  #if PY_MAJOR_VERSION < 3 || CYTHON_COMPILING_IN_PYPY
+  #if PY_MAJOR_VERSION < 3 || (CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x03050000)
   0, /*nb_inplace_divide*/
   #endif
   0, /*nb_inplace_remainder*/
@@ -243520,61 +263837,78 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc_DMPlex[] = {
   {"createFromCellList", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_3createFromCellList, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_2createFromCellList},
   {"createBoxMesh", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_5createBoxMesh, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_4createBoxMesh},
   {"createHexBoxMesh", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_7createHexBoxMesh, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_6createHexBoxMesh},
-  {"createCGNS", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_9createCGNS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_8createCGNS},
-  {"createCGNSFromFile", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_11createCGNSFromFile, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_10createCGNSFromFile},
-  {"createExodusFromFile", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_13createExodusFromFile, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_12createExodusFromFile},
-  {"createExodus", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_15createExodus, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_14createExodus},
-  {"createGmsh", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_17createGmsh, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_16createGmsh},
-  {"createCohesiveSubmesh", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_19createCohesiveSubmesh, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_18createCohesiveSubmesh},
-  {"getChart", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_21getChart, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_20getChart},
-  {"setChart", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_23setChart, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_22setChart},
-  {"getConeSize", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_25getConeSize, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_24getConeSize},
-  {"setConeSize", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_27setConeSize, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_26setConeSize},
-  {"getCone", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_29getCone, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_28getCone},
-  {"setCone", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_31setCone, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_30setCone},
-  {"insertCone", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_33insertCone, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_32insertCone},
-  {"insertConeOrientation", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_35insertConeOrientation, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_34insertConeOrientation},
-  {"getConeOrientation", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_37getConeOrientation, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_36getConeOrientation},
-  {"setConeOrientation", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_39setConeOrientation, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_38setConeOrientation},
-  {"getSupportSize", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_41getSupportSize, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_40getSupportSize},
-  {"setSupportSize", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_43setSupportSize, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_42setSupportSize},
-  {"getSupport", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_45getSupport, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_44getSupport},
-  {"setSupport", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_47setSupport, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_46setSupport},
-  {"getMaxSizes", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_49getMaxSizes, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_48getMaxSizes},
-  {"symmetrize", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_51symmetrize, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_50symmetrize},
-  {"stratify", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_53stratify, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_52stratify},
-  {"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},
-  {"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},
+  {"createFromFile", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_9createFromFile, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_8createFromFile},
+  {"createCGNS", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_11createCGNS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_10createCGNS},
+  {"createCGNSFromFile", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_13createCGNSFromFile, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_12createCGNSFromFile},
+  {"createExodusFromFile", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_15createExodusFromFile, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_14createExodusFromFile},
+  {"createExodus", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_17createExodus, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_16createExodus},
+  {"createGmsh", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_19createGmsh, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_18createGmsh},
+  {"createCohesiveSubmesh", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_21createCohesiveSubmesh, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_20createCohesiveSubmesh},
+  {"getChart", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_23getChart, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_22getChart},
+  {"setChart", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_25setChart, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_24setChart},
+  {"getConeSize", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_27getConeSize, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_26getConeSize},
+  {"setConeSize", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_29setConeSize, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_28setConeSize},
+  {"getCone", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_31getCone, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_30getCone},
+  {"setCone", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_33setCone, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_32setCone},
+  {"insertCone", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_35insertCone, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_34insertCone},
+  {"insertConeOrientation", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_37insertConeOrientation, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_36insertConeOrientation},
+  {"getConeOrientation", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_39getConeOrientation, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_38getConeOrientation},
+  {"setConeOrientation", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_41setConeOrientation, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_40setConeOrientation},
+  {"getSupportSize", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_43getSupportSize, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_42getSupportSize},
+  {"setSupportSize", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_45setSupportSize, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_44setSupportSize},
+  {"getSupport", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_47getSupport, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_46getSupport},
+  {"setSupport", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_49setSupport, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_48setSupport},
+  {"getMaxSizes", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_51getMaxSizes, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_50getMaxSizes},
+  {"symmetrize", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_53symmetrize, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_52symmetrize},
+  {"stratify", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_55stratify, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_54stratify},
+  {"orient", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_57orient, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_56orient},
+  {"getCellNumbering", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_59getCellNumbering, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_58getCellNumbering},
+  {"getVertexNumbering", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_61getVertexNumbering, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_60getVertexNumbering},
+  {"createPointNumbering", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_63createPointNumbering, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_62createPointNumbering},
+  {"getDepth", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_65getDepth, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_64getDepth},
+  {"getDepthStratum", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_67getDepthStratum, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_66getDepthStratum},
+  {"getHeightStratum", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_69getHeightStratum, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_68getHeightStratum},
+  {"getMeet", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_71getMeet, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_70getMeet},
+  {"getJoin", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_73getJoin, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_72getJoin},
+  {"getTransitiveClosure", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_75getTransitiveClosure, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_74getTransitiveClosure},
+  {"vecGetClosure", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_77vecGetClosure, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_76vecGetClosure},
+  {"getVecClosure", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_79getVecClosure, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_78getVecClosure},
+  {"setVecClosure", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_81setVecClosure, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_80setVecClosure},
+  {"setMatClosure", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_83setMatClosure, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_82setMatClosure},
+  {"generate", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_85generate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_84generate},
+  {"setTriangleOptions", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_87setTriangleOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_86setTriangleOptions},
+  {"setTetGenOptions", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_89setTetGenOptions, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_88setTetGenOptions},
+  {"createSquareBoundary", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_91createSquareBoundary, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_90createSquareBoundary},
+  {"createCubeBoundary", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_93createCubeBoundary, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_92createCubeBoundary},
+  {"markBoundaryFaces", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_95markBoundaryFaces, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_94markBoundaryFaces},
+  {"setAdjacencyUseCone", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_97setAdjacencyUseCone, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_96setAdjacencyUseCone},
+  {"getAdjacencyUseCone", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_99getAdjacencyUseCone, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_98getAdjacencyUseCone},
+  {"setAdjacencyUseClosure", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_101setAdjacencyUseClosure, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_100setAdjacencyUseClosure},
+  {"getAdjacencyUseClosure", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_103getAdjacencyUseClosure, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_102getAdjacencyUseClosure},
+  {"setAdjacencyUseAnchors", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_105setAdjacencyUseAnchors, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_104setAdjacencyUseAnchors},
+  {"getAdjacencyUseAnchors", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_107getAdjacencyUseAnchors, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_106getAdjacencyUseAnchors},
+  {"getAdjacency", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_109getAdjacency, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_108getAdjacency},
+  {"setPartitioner", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_111setPartitioner, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_110setPartitioner},
+  {"getPartitioner", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_113getPartitioner, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_112getPartitioner},
+  {"distribute", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_115distribute, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_114distribute},
+  {"distributeOverlap", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_117distributeOverlap, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_116distributeOverlap},
+  {"interpolate", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_119interpolate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_118interpolate},
+  {"uninterpolate", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_121uninterpolate, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_120uninterpolate},
+  {"distributeField", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_123distributeField, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_122distributeField},
+  {"createCoarsePointIS", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_125createCoarsePointIS, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_124createCoarsePointIS},
+  {"createSection", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_127createSection, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_126createSection},
+  {"getPointLocal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_129getPointLocal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_128getPointLocal},
+  {"getPointLocalField", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_131getPointLocalField, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_130getPointLocalField},
+  {"getPointGlobal", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_133getPointGlobal, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_132getPointGlobal},
+  {"getPointGlobalField", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_135getPointGlobalField, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_134getPointGlobalField},
+  {"setRefinementUniform", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_137setRefinementUniform, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_136setRefinementUniform},
+  {"getRefinementUniform", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_139getRefinementUniform, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_138getRefinementUniform},
+  {"setRefinementLimit", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_141setRefinementLimit, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_140setRefinementLimit},
+  {"getRefinementLimit", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_143getRefinementLimit, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_142getRefinementLimit},
+  {"getOrdering", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_145getOrdering, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_144getOrdering},
+  {"permute", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_147permute, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_146permute},
+  {"computeCellGeometryFVM", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_149computeCellGeometryFVM, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_148computeCellGeometryFVM},
+  {"constructGhostCells", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_6DMPlex_151constructGhostCells, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_6DMPlex_150constructGhostCells},
   {0, 0, 0, 0}
 };
 
@@ -243746,8 +264080,11 @@ static PyMethodDef __pyx_methods_8petsc4py_5PETSc_DMShell[] = {
   {"setRefine", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7DMShell_29setRefine, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7DMShell_28setRefine},
   {"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},
+  {"setCreateRestriction", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7DMShell_35setCreateRestriction, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7DMShell_34setCreateRestriction},
+  {"setCreateFieldDecomposition", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7DMShell_37setCreateFieldDecomposition, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7DMShell_36setCreateFieldDecomposition},
+  {"setCreateDomainDecomposition", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7DMShell_39setCreateDomainDecomposition, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7DMShell_38setCreateDomainDecomposition},
+  {"setCreateDomainDecompositionScatters", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7DMShell_41setCreateDomainDecompositionScatters, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7DMShell_40setCreateDomainDecompositionScatters},
+  {"setCreateSubDM", (PyCFunction)__pyx_pw_8petsc4py_5PETSc_7DMShell_43setCreateSubDM, METH_VARARGS|METH_KEYWORDS, __pyx_doc_8petsc4py_5PETSc_7DMShell_42setCreateSubDM},
   {0, 0, 0, 0}
 };
 
@@ -243814,17 +264151,31 @@ static PyMethodDef __pyx_methods[] = {
 };
 
 #if PY_MAJOR_VERSION >= 3
+#if CYTHON_PEP489_MULTI_PHASE_INIT
+static PyObject* __pyx_pymod_create(PyObject *spec, PyModuleDef *def); /*proto*/
+static int __pyx_pymod_exec_PETSc(PyObject* module); /*proto*/
+static PyModuleDef_Slot __pyx_moduledef_slots[] = {
+  {Py_mod_create, (void*)__pyx_pymod_create},
+  {Py_mod_exec, (void*)__pyx_pymod_exec_PETSc},
+  {0, NULL}
+};
+#endif
+
 static struct PyModuleDef __pyx_moduledef = {
-  #if PY_VERSION_HEX < 0x03020000
-    { PyObject_HEAD_INIT(NULL) NULL, 0, NULL },
-  #else
     PyModuleDef_HEAD_INIT,
-  #endif
     "PETSc",
     0, /* m_doc */
+  #if CYTHON_PEP489_MULTI_PHASE_INIT
+    0, /* m_size */
+  #else
     -1, /* m_size */
+  #endif
     __pyx_methods /* m_methods */,
+  #if CYTHON_PEP489_MULTI_PHASE_INIT
+    __pyx_moduledef_slots, /* m_slots */
+  #else
     NULL, /* m_reload */
+  #endif
     NULL, /* m_traverse */
     NULL, /* m_clear */
     (freefunc)__pyx_module_cleanup /* m_free */
@@ -243911,15 +264262,17 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_BMRM, __pyx_k_BMRM, sizeof(__pyx_k_BMRM), 0, 0, 1, 1},
   {&__pyx_n_s_BOX, __pyx_k_BOX, sizeof(__pyx_k_BOX), 0, 0, 1, 1},
   {&__pyx_n_s_BQPIP, __pyx_k_BQPIP, sizeof(__pyx_k_BQPIP), 0, 0, 1, 1},
-  {&__pyx_n_s_BSTRM, __pyx_k_BSTRM, sizeof(__pyx_k_BSTRM), 0, 0, 1, 1},
   {&__pyx_n_s_Barrier, __pyx_k_Barrier, sizeof(__pyx_k_Barrier), 0, 0, 1, 1},
   {&__pyx_n_s_BoundaryType, __pyx_k_BoundaryType, sizeof(__pyx_k_BoundaryType), 0, 0, 1, 1},
   {&__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_CGGLTR, __pyx_k_CGGLTR, sizeof(__pyx_k_CGGLTR), 0, 0, 1, 1},
   {&__pyx_n_s_CGLS, __pyx_k_CGLS, sizeof(__pyx_k_CGLS), 0, 0, 1, 1},
+  {&__pyx_n_s_CGNASH, __pyx_k_CGNASH, sizeof(__pyx_k_CGNASH), 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_CGSTCG, __pyx_k_CGSTCG, sizeof(__pyx_k_CGSTCG), 0, 0, 1, 1},
   {&__pyx_n_s_CHACO, __pyx_k_CHACO, sizeof(__pyx_k_CHACO), 0, 0, 1, 1},
   {&__pyx_n_s_CHEBYSHEV, __pyx_k_CHEBYSHEV, sizeof(__pyx_k_CHEBYSHEV), 0, 0, 1, 1},
   {&__pyx_n_s_CHOLESKY, __pyx_k_CHOLESKY, sizeof(__pyx_k_CHOLESKY), 0, 0, 1, 1},
@@ -244040,6 +264393,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__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_FETIDP, __pyx_k_FETIDP, sizeof(__pyx_k_FETIDP), 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},
   {&__pyx_n_s_FGMRES, __pyx_k_FGMRES, sizeof(__pyx_k_FGMRES), 0, 0, 1, 1},
@@ -244070,11 +264424,11 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_GEO, __pyx_k_GEO, sizeof(__pyx_k_GEO), 0, 0, 1, 1},
   {&__pyx_n_s_GETROW_UPPERTRIANGULAR, __pyx_k_GETROW_UPPERTRIANGULAR, sizeof(__pyx_k_GETROW_UPPERTRIANGULAR), 0, 0, 1, 1},
   {&__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_kp_s_GIT_Date, __pyx_k_GIT_Date, sizeof(__pyx_k_GIT_Date), 0, 0, 1, 0},
+  {&__pyx_n_s_GLLE, __pyx_k_GLLE, sizeof(__pyx_k_GLLE), 0, 0, 1, 1},
+  {&__pyx_n_s_GLMapMode, __pyx_k_GLMapMode, sizeof(__pyx_k_GLMapMode), 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},
   {&__pyx_n_s_GROPPCG, __pyx_k_GROPPCG, sizeof(__pyx_k_GROPPCG), 0, 0, 1, 1},
@@ -244084,6 +264438,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_H, __pyx_k_H, sizeof(__pyx_k_H), 0, 0, 1, 1},
   {&__pyx_n_s_HALF, __pyx_k_HALF, sizeof(__pyx_k_HALF), 0, 0, 1, 1},
   {&__pyx_n_s_HALF_SIZE, __pyx_k_HALF_SIZE, sizeof(__pyx_k_HALF_SIZE), 0, 0, 1, 1},
+  {&__pyx_n_s_HASH, __pyx_k_HASH, sizeof(__pyx_k_HASH), 0, 0, 1, 1},
   {&__pyx_n_s_HDF5, __pyx_k_HDF5, sizeof(__pyx_k_HDF5), 0, 0, 1, 1},
   {&__pyx_n_s_HDF5_VIZ, __pyx_k_HDF5_VIZ, sizeof(__pyx_k_HDF5_VIZ), 0, 0, 1, 1},
   {&__pyx_n_s_HERMITIAN, __pyx_k_HERMITIAN, sizeof(__pyx_k_HERMITIAN), 0, 0, 1, 1},
@@ -244137,6 +264492,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_LCL, __pyx_k_LCL, sizeof(__pyx_k_LCL), 0, 0, 1, 1},
   {&__pyx_n_s_LEFT, __pyx_k_LEFT, sizeof(__pyx_k_LEFT), 0, 0, 1, 1},
   {&__pyx_n_s_LGMRES, __pyx_k_LGMRES, sizeof(__pyx_k_LGMRES), 0, 0, 1, 1},
+  {&__pyx_n_s_LGMapType, __pyx_k_LGMapType, sizeof(__pyx_k_LGMapType), 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},
@@ -244162,6 +264518,7 @@ 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_MGCycleType, __pyx_k_MGCycleType, sizeof(__pyx_k_MGCycleType), 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},
@@ -244177,16 +264534,14 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_MPIAIJPERM, __pyx_k_MPIAIJPERM, sizeof(__pyx_k_MPIAIJPERM), 0, 0, 1, 1},
   {&__pyx_n_s_MPIAIJVIENNACL, __pyx_k_MPIAIJVIENNACL, sizeof(__pyx_k_MPIAIJVIENNACL), 0, 0, 1, 1},
   {&__pyx_n_s_MPIBAIJ, __pyx_k_MPIBAIJ, sizeof(__pyx_k_MPIBAIJ), 0, 0, 1, 1},
-  {&__pyx_n_s_MPIBSTRM, __pyx_k_MPIBSTRM, sizeof(__pyx_k_MPIBSTRM), 0, 0, 1, 1},
   {&__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_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},
   {&__pyx_n_s_MS, __pyx_k_MS, sizeof(__pyx_k_MS), 0, 0, 1, 1},
   {&__pyx_n_s_MULTIPLICATIVE, __pyx_k_MULTIPLICATIVE, sizeof(__pyx_k_MULTIPLICATIVE), 0, 0, 1, 1},
-  {&__pyx_n_s_MapType, __pyx_k_MapType, sizeof(__pyx_k_MapType), 0, 0, 1, 1},
+  {&__pyx_n_s_MapMode, __pyx_k_MapMode, sizeof(__pyx_k_MapMode), 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},
@@ -244202,14 +264557,12 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_N1, __pyx_k_N1, sizeof(__pyx_k_N1), 0, 0, 1, 1},
   {&__pyx_n_s_N12, __pyx_k_N12, sizeof(__pyx_k_N12), 0, 0, 1, 1},
   {&__pyx_n_s_N2, __pyx_k_N2, sizeof(__pyx_k_N2), 0, 0, 1, 1},
-  {&__pyx_n_s_NASH, __pyx_k_NASH, sizeof(__pyx_k_NASH), 0, 0, 1, 1},
   {&__pyx_n_s_NASM, __pyx_k_NASM, sizeof(__pyx_k_NASM), 0, 0, 1, 1},
   {&__pyx_n_s_NATIVE, __pyx_k_NATIVE, sizeof(__pyx_k_NATIVE), 0, 0, 1, 1},
   {&__pyx_n_s_NATURAL, __pyx_k_NATURAL, sizeof(__pyx_k_NATURAL), 0, 0, 1, 1},
   {&__pyx_n_s_NCG, __pyx_k_NCG, sizeof(__pyx_k_NCG), 0, 0, 1, 1},
   {&__pyx_n_s_ND, __pyx_k_ND, sizeof(__pyx_k_ND), 0, 0, 1, 1},
   {&__pyx_n_s_NEST, __pyx_k_NEST, sizeof(__pyx_k_NEST), 0, 0, 1, 1},
-  {&__pyx_n_s_NETCDF, __pyx_k_NETCDF, sizeof(__pyx_k_NETCDF), 0, 0, 1, 1},
   {&__pyx_n_s_NETWORK, __pyx_k_NETWORK, sizeof(__pyx_k_NETWORK), 0, 0, 1, 1},
   {&__pyx_n_s_NEWTONLS, __pyx_k_NEWTONLS, sizeof(__pyx_k_NEWTONLS), 0, 0, 1, 1},
   {&__pyx_n_s_NEWTONTR, __pyx_k_NEWTONTR, sizeof(__pyx_k_NEWTONTR), 0, 0, 1, 1},
@@ -244277,12 +264630,15 @@ 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_PCMGCycleType, __pyx_k_PCMGCycleType, sizeof(__pyx_k_PCMGCycleType), 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},
   {&__pyx_n_s_PERIODIC, __pyx_k_PERIODIC, sizeof(__pyx_k_PERIODIC), 0, 0, 1, 1},
   {&__pyx_kp_s_PETSc_Error_d, __pyx_k_PETSc_Error_d, sizeof(__pyx_k_PETSc_Error_d), 0, 0, 1, 0},
+  {&__pyx_kp_s_PETSc_Error_pyx, __pyx_k_PETSc_Error_pyx, sizeof(__pyx_k_PETSc_Error_pyx), 0, 0, 1, 0},
+  {&__pyx_kp_s_PETSc_PETSc_pyx, __pyx_k_PETSc_PETSc_pyx, sizeof(__pyx_k_PETSc_PETSc_pyx), 0, 0, 1, 0},
   {&__pyx_n_s_PFMG, __pyx_k_PFMG, sizeof(__pyx_k_PFMG), 0, 0, 1, 1},
   {&__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},
@@ -244325,6 +264681,15 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_RICHARDSON, __pyx_k_RICHARDSON, sizeof(__pyx_k_RICHARDSON), 0, 0, 1, 1},
   {&__pyx_n_s_RIGHT, __pyx_k_RIGHT, sizeof(__pyx_k_RIGHT), 0, 0, 1, 1},
   {&__pyx_n_s_RK, __pyx_k_RK, sizeof(__pyx_k_RK), 0, 0, 1, 1},
+  {&__pyx_n_s_RK1FE, __pyx_k_RK1FE, sizeof(__pyx_k_RK1FE), 0, 0, 1, 1},
+  {&__pyx_n_s_RK2A, __pyx_k_RK2A, sizeof(__pyx_k_RK2A), 0, 0, 1, 1},
+  {&__pyx_n_s_RK3, __pyx_k_RK3, sizeof(__pyx_k_RK3), 0, 0, 1, 1},
+  {&__pyx_n_s_RK3BS, __pyx_k_RK3BS, sizeof(__pyx_k_RK3BS), 0, 0, 1, 1},
+  {&__pyx_n_s_RK4, __pyx_k_RK4, sizeof(__pyx_k_RK4), 0, 0, 1, 1},
+  {&__pyx_n_s_RK5BS, __pyx_k_RK5BS, sizeof(__pyx_k_RK5BS), 0, 0, 1, 1},
+  {&__pyx_n_s_RK5DP, __pyx_k_RK5DP, sizeof(__pyx_k_RK5DP), 0, 0, 1, 1},
+  {&__pyx_n_s_RK5F, __pyx_k_RK5F, sizeof(__pyx_k_RK5F), 0, 0, 1, 1},
+  {&__pyx_n_s_RKType, __pyx_k_RKType, sizeof(__pyx_k_RKType), 0, 0, 1, 1},
   {&__pyx_n_s_ROSW, __pyx_k_ROSW, sizeof(__pyx_k_ROSW), 0, 0, 1, 1},
   {&__pyx_n_s_ROWLENGTH, __pyx_k_ROWLENGTH, sizeof(__pyx_k_ROWLENGTH), 0, 0, 1, 1},
   {&__pyx_n_s_ROW_ORIENTED, __pyx_k_ROW_ORIENTED, sizeof(__pyx_k_ROW_ORIENTED), 0, 0, 1, 1},
@@ -244342,7 +264707,6 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_SAME_NZ, __pyx_k_SAME_NZ, sizeof(__pyx_k_SAME_NZ), 0, 0, 1, 1},
   {&__pyx_n_s_SAWS, __pyx_k_SAWS, sizeof(__pyx_k_SAWS), 0, 0, 1, 1},
   {&__pyx_n_s_SBAIJ, __pyx_k_SBAIJ, sizeof(__pyx_k_SBAIJ), 0, 0, 1, 1},
-  {&__pyx_n_s_SBSTRM, __pyx_k_SBSTRM, sizeof(__pyx_k_SBSTRM), 0, 0, 1, 1},
   {&__pyx_n_s_SCATTER, __pyx_k_SCATTER, sizeof(__pyx_k_SCATTER), 0, 0, 1, 1},
   {&__pyx_n_s_SCATTER_FORWARD, __pyx_k_SCATTER_FORWARD, sizeof(__pyx_k_SCATTER_FORWARD), 0, 0, 1, 1},
   {&__pyx_n_s_SCATTER_FORWARD_LOCAL, __pyx_k_SCATTER_FORWARD_LOCAL, sizeof(__pyx_k_SCATTER_FORWARD_LOCAL), 0, 0, 1, 1},
@@ -244361,13 +264725,11 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_SEQAIJPERM, __pyx_k_SEQAIJPERM, sizeof(__pyx_k_SEQAIJPERM), 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},
   {&__pyx_n_s_SEQCUFFT, __pyx_k_SEQCUFFT, sizeof(__pyx_k_SEQCUFFT), 0, 0, 1, 1},
   {&__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_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},
   {&__pyx_n_s_SFType, __pyx_k_SFType, sizeof(__pyx_k_SFType), 0, 0, 1, 1},
   {&__pyx_n_s_SHARED, __pyx_k_SHARED, sizeof(__pyx_k_SHARED), 0, 0, 1, 1},
@@ -244389,7 +264751,6 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_SSP, __pyx_k_SSP, sizeof(__pyx_k_SSP), 0, 0, 1, 1},
   {&__pyx_n_s_STANDARD, __pyx_k_STANDARD, sizeof(__pyx_k_STANDARD), 0, 0, 1, 1},
   {&__pyx_n_s_STAR, __pyx_k_STAR, sizeof(__pyx_k_STAR), 0, 0, 1, 1},
-  {&__pyx_n_s_STCG, __pyx_k_STCG, sizeof(__pyx_k_STCG), 0, 0, 1, 1},
   {&__pyx_n_s_STDERR, __pyx_k_STDERR, sizeof(__pyx_k_STDERR), 0, 0, 1, 1},
   {&__pyx_n_s_STDOUT, __pyx_k_STDOUT, sizeof(__pyx_k_STDOUT), 0, 0, 1, 1},
   {&__pyx_n_s_STEPOVER, __pyx_k_STEPOVER, sizeof(__pyx_k_STEPOVER), 0, 0, 1, 1},
@@ -244440,6 +264801,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__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_TSRKType, __pyx_k_TSRKType, sizeof(__pyx_k_TSRKType), 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},
   {&__pyx_n_s_Type, __pyx_k_Type, sizeof(__pyx_k_Type), 0, 0, 1, 1},
@@ -244478,6 +264840,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_kp_s__10, __pyx_k__10, sizeof(__pyx_k__10), 0, 0, 1, 0},
   {&__pyx_kp_s__2, __pyx_k__2, sizeof(__pyx_k__2), 0, 0, 1, 0},
   {&__pyx_kp_s__32, __pyx_k__32, sizeof(__pyx_k__32), 0, 0, 1, 0},
+  {&__pyx_kp_s__33, __pyx_k__33, sizeof(__pyx_k__33), 0, 0, 1, 0},
   {&__pyx_kp_b__5, __pyx_k__5, sizeof(__pyx_k__5), 0, 0, 0, 0},
   {&__pyx_kp_s__5, __pyx_k__5, sizeof(__pyx_k__5), 0, 0, 1, 0},
   {&__pyx_n_s_a, __pyx_k_a, sizeof(__pyx_k_a), 0, 0, 1, 1},
@@ -244486,6 +264849,8 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_kp_s_accessing_non_existent_buffer_se, __pyx_k_accessing_non_existent_buffer_se, sizeof(__pyx_k_accessing_non_existent_buffer_se), 0, 0, 1, 0},
   {&__pyx_n_s_addFlops, __pyx_k_addFlops, sizeof(__pyx_k_addFlops), 0, 0, 1, 1},
   {&__pyx_n_s_addv, __pyx_k_addv, sizeof(__pyx_k_addv), 0, 0, 1, 1},
+  {&__pyx_n_s_adjoint_steps, __pyx_k_adjoint_steps, sizeof(__pyx_k_adjoint_steps), 0, 0, 1, 1},
+  {&__pyx_n_s_adjointjacobian, __pyx_k_adjointjacobian, sizeof(__pyx_k_adjointjacobian), 0, 0, 1, 1},
   {&__pyx_n_s_all, __pyx_k_all, sizeof(__pyx_k_all), 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},
@@ -244540,6 +264905,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__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_cline_in_traceback, __pyx_k_cline_in_traceback, sizeof(__pyx_k_cline_in_traceback), 0, 0, 1, 1},
   {&__pyx_n_s_cmap, __pyx_k_cmap, sizeof(__pyx_k_cmap), 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},
@@ -244564,6 +264930,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_coords, __pyx_k_coords, sizeof(__pyx_k_coords), 0, 0, 1, 1},
   {&__pyx_kp_s_coords_vertices_must_have_two_di, __pyx_k_coords_vertices_must_have_two_di, sizeof(__pyx_k_coords_vertices_must_have_two_di), 0, 0, 1, 0},
   {&__pyx_n_s_copy, __pyx_k_copy, sizeof(__pyx_k_copy), 0, 0, 1, 1},
+  {&__pyx_n_s_cost, __pyx_k_cost, sizeof(__pyx_k_cost), 0, 0, 1, 1},
   {&__pyx_n_s_count, __pyx_k_count, sizeof(__pyx_k_count), 0, 0, 1, 1},
   {&__pyx_n_s_crank, __pyx_k_crank, sizeof(__pyx_k_crank), 0, 0, 1, 1},
   {&__pyx_n_s_createGlobalVec, __pyx_k_createGlobalVec, sizeof(__pyx_k_createGlobalVec), 0, 0, 1, 1},
@@ -244583,11 +264950,13 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__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, __pyx_k_create_matrix, sizeof(__pyx_k_create_matrix), 0, 0, 1, 1},
+  {&__pyx_n_s_create_restriction, __pyx_k_create_restriction, sizeof(__pyx_k_create_restriction), 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},
   {&__pyx_n_s_ctype, __pyx_k_ctype, sizeof(__pyx_k_ctype), 0, 0, 1, 1},
+  {&__pyx_n_s_cycle_type, __pyx_k_cycle_type, sizeof(__pyx_k_cycle_type), 0, 0, 1, 1},
   {&__pyx_kp_s_d_s, __pyx_k_d_s, sizeof(__pyx_k_d_s), 0, 0, 1, 0},
   {&__pyx_n_s_da, __pyx_k_da, sizeof(__pyx_k_da), 0, 0, 1, 1},
   {&__pyx_n_s_data, __pyx_k_data, sizeof(__pyx_k_data), 0, 0, 1, 1},
@@ -244611,6 +264980,8 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_dm_type, __pyx_k_dm_type, sizeof(__pyx_k_dm_type), 0, 0, 1, 1},
   {&__pyx_n_s_doc, __pyx_k_doc, sizeof(__pyx_k_doc), 0, 0, 1, 1},
   {&__pyx_n_s_dof, __pyx_k_dof, sizeof(__pyx_k_dof), 0, 0, 1, 1},
+  {&__pyx_n_s_drdpfunction, __pyx_k_drdpfunction, sizeof(__pyx_k_drdpfunction), 0, 0, 1, 1},
+  {&__pyx_n_s_drdyfunction, __pyx_k_drdyfunction, sizeof(__pyx_k_drdyfunction), 0, 0, 1, 1},
   {&__pyx_n_s_drop, __pyx_k_drop, sizeof(__pyx_k_drop), 0, 0, 1, 1},
   {&__pyx_n_s_dt, __pyx_k_dt, sizeof(__pyx_k_dt), 0, 0, 1, 1},
   {&__pyx_n_s_dtcol, __pyx_k_dtcol, sizeof(__pyx_k_dtcol), 0, 0, 1, 1},
@@ -244685,6 +265056,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_getDof, __pyx_k_getDof, sizeof(__pyx_k_getDof), 0, 0, 1, 1},
   {&__pyx_n_s_getEquationType, __pyx_k_getEquationType, sizeof(__pyx_k_getEquationType), 0, 0, 1, 1},
   {&__pyx_n_s_getFlops, __pyx_k_getFlops, sizeof(__pyx_k_getFlops), 0, 0, 1, 1},
+  {&__pyx_n_s_getFunctionNorm, __pyx_k_getFunctionNorm, sizeof(__pyx_k_getFunctionNorm), 0, 0, 1, 1},
   {&__pyx_n_s_getFunctionTolerances, __pyx_k_getFunctionTolerances, sizeof(__pyx_k_getFunctionTolerances), 0, 0, 1, 1},
   {&__pyx_n_s_getFunctionValue, __pyx_k_getFunctionValue, sizeof(__pyx_k_getFunctionValue), 0, 0, 1, 1},
   {&__pyx_n_s_getGhostCorners, __pyx_k_getGhostCorners, sizeof(__pyx_k_getGhostCorners), 0, 0, 1, 1},
@@ -244764,6 +265136,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__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_gsec, __pyx_k_gsec, sizeof(__pyx_k_gsec), 0, 0, 1, 1},
   {&__pyx_n_s_gtol, __pyx_k_gtol, sizeof(__pyx_k_gtol), 0, 0, 1, 1},
   {&__pyx_n_s_gttol, __pyx_k_gttol, sizeof(__pyx_k_gttol), 0, 0, 1, 1},
   {&__pyx_n_s_gv, __pyx_k_gv, sizeof(__pyx_k_gv), 0, 0, 1, 1},
@@ -244773,8 +265146,6 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__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, __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},
@@ -244796,8 +265167,6 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__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, __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},
@@ -244841,11 +265210,13 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_ksp_type, __pyx_k_ksp_type, sizeof(__pyx_k_ksp_type), 0, 0, 1, 1},
   {&__pyx_n_s_l, __pyx_k_l, sizeof(__pyx_k_l), 0, 0, 1, 1},
   {&__pyx_n_s_label, __pyx_k_label, sizeof(__pyx_k_label), 0, 0, 1, 1},
+  {&__pyx_n_s_labelName, __pyx_k_labelName, sizeof(__pyx_k_labelName), 0, 0, 1, 1},
   {&__pyx_n_s_left, __pyx_k_left, sizeof(__pyx_k_left), 0, 0, 1, 1},
   {&__pyx_n_s_length, __pyx_k_length, sizeof(__pyx_k_length), 0, 0, 1, 1},
   {&__pyx_n_s_level, __pyx_k_level, sizeof(__pyx_k_level), 0, 0, 1, 1},
   {&__pyx_n_s_levels, __pyx_k_levels, sizeof(__pyx_k_levels), 0, 0, 1, 1},
   {&__pyx_n_s_lgmap, __pyx_k_lgmap, sizeof(__pyx_k_lgmap), 0, 0, 1, 1},
+  {&__pyx_n_s_lgmap_type, __pyx_k_lgmap_type, sizeof(__pyx_k_lgmap_type), 0, 0, 1, 1},
   {&__pyx_n_s_linear_its, __pyx_k_linear_its, sizeof(__pyx_k_linear_its), 0, 0, 1, 1},
   {&__pyx_n_s_lits, __pyx_k_lits, sizeof(__pyx_k_lits), 0, 0, 1, 1},
   {&__pyx_n_s_local, __pyx_k_local, sizeof(__pyx_k_local), 0, 0, 1, 1},
@@ -244862,7 +265233,6 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__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},
   {&__pyx_n_s_mat_type, __pyx_k_mat_type, sizeof(__pyx_k_mat_type), 0, 0, 1, 1},
@@ -244876,6 +265246,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__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_metric, __pyx_k_metric, sizeof(__pyx_k_metric), 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},
@@ -244886,14 +265257,15 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__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},
+  {&__pyx_n_s_msg, __pyx_k_msg, sizeof(__pyx_k_msg), 0, 0, 1, 1},
   {&__pyx_n_s_mult, __pyx_k_mult, sizeof(__pyx_k_mult), 0, 0, 1, 1},
   {&__pyx_n_s_n, __pyx_k_n, sizeof(__pyx_k_n), 0, 0, 1, 1},
   {&__pyx_n_s_na, __pyx_k_na, sizeof(__pyx_k_na), 0, 0, 1, 1},
   {&__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_ngs, __pyx_k_ngs, sizeof(__pyx_k_ngs), 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},
@@ -244914,6 +265286,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__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},
+  {&__pyx_n_s_numFaces, __pyx_k_numFaces, sizeof(__pyx_k_numFaces), 0, 0, 1, 1},
   {&__pyx_n_s_numFields, __pyx_k_numFields, sizeof(__pyx_k_numFields), 0, 0, 1, 1},
   {&__pyx_n_s_numMessages, __pyx_k_numMessages, sizeof(__pyx_k_numMessages), 0, 0, 1, 1},
   {&__pyx_n_s_numProcs, __pyx_k_numProcs, sizeof(__pyx_k_numProcs), 0, 0, 1, 1},
@@ -244953,8 +265326,8 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_pEnd, __pyx_k_pEnd, sizeof(__pyx_k_pEnd), 0, 0, 1, 1},
   {&__pyx_n_s_pStart, __pyx_k_pStart, sizeof(__pyx_k_pStart), 0, 0, 1, 1},
   {&__pyx_n_s_parent, __pyx_k_parent, sizeof(__pyx_k_parent), 0, 0, 1, 1},
+  {&__pyx_n_s_part, __pyx_k_part, sizeof(__pyx_k_part), 0, 0, 1, 1},
   {&__pyx_n_s_part_type, __pyx_k_part_type, sizeof(__pyx_k_part_type), 0, 0, 1, 1},
-  {&__pyx_n_s_patch, __pyx_k_patch, sizeof(__pyx_k_patch), 0, 0, 1, 1},
   {&__pyx_n_s_pc, __pyx_k_pc, sizeof(__pyx_k_pc), 0, 0, 1, 1},
   {&__pyx_n_s_pc_type, __pyx_k_pc_type, sizeof(__pyx_k_pc_type), 0, 0, 1, 1},
   {&__pyx_n_s_pd, __pyx_k_pd, sizeof(__pyx_k_pd), 0, 0, 1, 1},
@@ -244966,6 +265339,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_points, __pyx_k_points, sizeof(__pyx_k_points), 0, 0, 1, 1},
   {&__pyx_n_s_pop, __pyx_k_pop, sizeof(__pyx_k_pop), 0, 0, 1, 1},
   {&__pyx_n_s_popErrorHandler, __pyx_k_popErrorHandler, sizeof(__pyx_k_popErrorHandler), 0, 0, 1, 1},
+  {&__pyx_n_s_popSignalHandler, __pyx_k_popSignalHandler, sizeof(__pyx_k_popSignalHandler), 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, __pyx_k_poststep, sizeof(__pyx_k_poststep), 0, 0, 1, 1},
@@ -245013,6 +265387,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_result, __pyx_k_result, sizeof(__pyx_k_result), 0, 0, 1, 1},
   {&__pyx_n_s_reuse, __pyx_k_reuse, sizeof(__pyx_k_reuse), 0, 0, 1, 1},
   {&__pyx_n_s_reverse, __pyx_k_reverse, sizeof(__pyx_k_reverse), 0, 0, 1, 1},
+  {&__pyx_n_s_rfunction, __pyx_k_rfunction, sizeof(__pyx_k_rfunction), 0, 0, 1, 1},
   {&__pyx_n_s_rhs, __pyx_k_rhs, sizeof(__pyx_k_rhs), 0, 0, 1, 1},
   {&__pyx_n_s_right, __pyx_k_right, sizeof(__pyx_k_right), 0, 0, 1, 1},
   {&__pyx_n_s_rmap, __pyx_k_rmap, sizeof(__pyx_k_rmap), 0, 0, 1, 1},
@@ -245048,6 +265423,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_setDiagonal, __pyx_k_setDiagonal, sizeof(__pyx_k_setDiagonal), 0, 0, 1, 1},
   {&__pyx_n_s_setDimension, __pyx_k_setDimension, sizeof(__pyx_k_setDimension), 0, 0, 1, 1},
   {&__pyx_n_s_setEquationType, __pyx_k_setEquationType, sizeof(__pyx_k_setEquationType), 0, 0, 1, 1},
+  {&__pyx_n_s_setFunctionNorm, __pyx_k_setFunctionNorm, sizeof(__pyx_k_setFunctionNorm), 0, 0, 1, 1},
   {&__pyx_n_s_setFunctionTolerances, __pyx_k_setFunctionTolerances, sizeof(__pyx_k_setFunctionTolerances), 0, 0, 1, 1},
   {&__pyx_n_s_setInitialGuessKnoll, __pyx_k_setInitialGuessKnoll, sizeof(__pyx_k_setInitialGuessKnoll), 0, 0, 1, 1},
   {&__pyx_n_s_setInitialGuessNonzero, __pyx_k_setInitialGuessNonzero, sizeof(__pyx_k_setInitialGuessNonzero), 0, 0, 1, 1},
@@ -245138,6 +265514,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_syncPrint, __pyx_k_syncPrint, sizeof(__pyx_k_syncPrint), 0, 0, 1, 1},
   {&__pyx_n_s_t, __pyx_k_t, sizeof(__pyx_k_t), 0, 0, 1, 1},
   {&__pyx_n_s_tab, __pyx_k_tab, sizeof(__pyx_k_tab), 0, 0, 1, 1},
+  {&__pyx_n_s_tabs, __pyx_k_tabs, sizeof(__pyx_k_tabs), 0, 0, 1, 1},
   {&__pyx_n_s_tao_type, __pyx_k_tao_type, sizeof(__pyx_k_tao_type), 0, 0, 1, 1},
   {&__pyx_n_s_tbline, __pyx_k_tbline, sizeof(__pyx_k_tbline), 0, 0, 1, 1},
   {&__pyx_n_s_tblist, __pyx_k_tblist, sizeof(__pyx_k_tblist), 0, 0, 1, 1},
@@ -245169,6 +265546,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__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, __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_useAnchors, __pyx_k_useAnchors, sizeof(__pyx_k_useAnchors), 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},
@@ -245189,6 +265567,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_viewer, __pyx_k_viewer, sizeof(__pyx_k_viewer), 0, 0, 1, 1},
   {&__pyx_n_s_vl, __pyx_k_vl, sizeof(__pyx_k_vl), 0, 0, 1, 1},
   {&__pyx_n_s_vlg, __pyx_k_vlg, sizeof(__pyx_k_vlg), 0, 0, 1, 1},
+  {&__pyx_n_s_vm, __pyx_k_vm, sizeof(__pyx_k_vm), 0, 0, 1, 1},
   {&__pyx_n_s_vn, __pyx_k_vn, sizeof(__pyx_k_vn), 0, 0, 1, 1},
   {&__pyx_n_s_vwr_type, __pyx_k_vwr_type, sizeof(__pyx_k_vwr_type), 0, 0, 1, 1},
   {&__pyx_n_s_w, __pyx_k_w, sizeof(__pyx_k_w), 0, 0, 1, 1},
@@ -245196,6 +265575,7 @@ static __Pyx_StringTabEntry __pyx_string_tab[] = {
   {&__pyx_n_s_width, __pyx_k_width, sizeof(__pyx_k_width), 0, 0, 1, 1},
   {&__pyx_n_s_x, __pyx_k_x, sizeof(__pyx_k_x), 0, 0, 1, 1},
   {&__pyx_n_s_xdot, __pyx_k_xdot, sizeof(__pyx_k_xdot), 0, 0, 1, 1},
+  {&__pyx_n_s_xdotdot, __pyx_k_xdotdot, sizeof(__pyx_k_xdotdot), 0, 0, 1, 1},
   {&__pyx_n_s_xl, __pyx_k_xl, sizeof(__pyx_k_xl), 0, 0, 1, 1},
   {&__pyx_n_s_xmax, __pyx_k_xmax, sizeof(__pyx_k_xmax), 0, 0, 1, 1},
   {&__pyx_n_s_xmin, __pyx_k_xmin, sizeof(__pyx_k_xmin), 0, 0, 1, 1},
@@ -245218,14 +265598,14 @@ static int __Pyx_InitCachedBuiltins(void) {
   __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_SystemError = __Pyx_GetBuiltinName(__pyx_n_s_SystemError); if (!__pyx_builtin_SystemError) __PYX_ERR(4, 210, __pyx_L1_error)
+  __pyx_builtin_Ellipsis = __Pyx_GetBuiltinName(__pyx_n_s_Ellipsis); if (!__pyx_builtin_Ellipsis) __PYX_ERR(5, 375, __pyx_L1_error)
+  __pyx_builtin_NotImplementedError = __Pyx_GetBuiltinName(__pyx_n_s_NotImplementedError); if (!__pyx_builtin_NotImplementedError) __PYX_ERR(6, 546, __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_range = __Pyx_GetBuiltinName(__pyx_n_s_range); if (!__pyx_builtin_range) __PYX_ERR(8, 336, __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)
+  __pyx_builtin_MemoryError = __Pyx_GetBuiltinName(__pyx_n_s_MemoryError); if (!__pyx_builtin_MemoryError) __PYX_ERR(11, 286, __pyx_L1_error)
   return 0;
   __pyx_L1_error:;
   return -1;
@@ -245334,280 +265714,302 @@ static int __Pyx_InitCachedConstants(void) {
   __Pyx_GOTREF(__pyx_tuple__12);
   __Pyx_GIVEREF(__pyx_tuple__12);
 
-  /* "PETSc/petscsys.pxi":79
+  /* "PETSc/petscsys.pxi":70
  *     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_ERR(14, 79, __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, 70, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__13);
   __Pyx_GIVEREF(__pyx_tuple__13);
 
-  /* "PETSc/petscis.pxi":204
+  /* "PETSc/petscis.pxi":210
  * 
  *     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__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_tuple__14 = PyTuple_Pack(1, __pyx_kp_s_accessing_non_existent_buffer_se); if (unlikely(!__pyx_tuple__14)) __PYX_ERR(4, 210, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__14);
   __Pyx_GIVEREF(__pyx_tuple__14);
 
-  /* "PETSc/petscvec.pxi":505
+  /* "PETSc/petscvec.pxi":506
  * 
  *     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_ERR(5, 505, __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, 506, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__15);
   __Pyx_GIVEREF(__pyx_tuple__15);
 
-  /* "PETSc/petscvec.pxi":510
+  /* "PETSc/petscvec.pxi":511
  * 
  *     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_ERR(5, 510, __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, 511, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__16);
   __Pyx_GIVEREF(__pyx_tuple__16);
 
-  /* "PETSc/petscvec.pxi":512
+  /* "PETSc/petscvec.pxi":513
  *         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_ERR(5, 512, __pyx_L1_error)
+  __pyx_tuple__17 = PyTuple_Pack(1, __pyx_kp_s_Object_is_not_writable); if (unlikely(!__pyx_tuple__17)) __PYX_ERR(5, 513, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__17);
   __Pyx_GIVEREF(__pyx_tuple__17);
 
-  /* "PETSc/petscmat.pxi":473
+  /* "PETSc/petscmat.pxi":479
  *     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_ERR(6, 473, __pyx_L1_error)
+  __pyx_tuple__18 = PyTuple_Pack(1, __pyx_int_neg_1); if (unlikely(!__pyx_tuple__18)) __PYX_ERR(6, 479, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__18);
   __Pyx_GIVEREF(__pyx_tuple__18);
 
-  /* "PETSc/petscmat.pxi":532
+  /* "PETSc/petscmat.pxi":538
  * 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_ERR(6, 532, __pyx_L1_error)
+  __pyx_tuple__19 = PyTuple_Pack(1, __pyx_int_neg_1); if (unlikely(!__pyx_tuple__19)) __PYX_ERR(6, 538, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__19);
   __Pyx_GIVEREF(__pyx_tuple__19);
 
-  /* "PETSc/petscmat.pxi":797
+  /* "PETSc/petscmat.pxi":803
  *         ("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_ERR(6, 797, __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, 803, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__20);
   __Pyx_GIVEREF(__pyx_tuple__20);
 
-  /* "PETSc/petscmat.pxi":802
+  /* "PETSc/petscmat.pxi":808
  *         ("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_ERR(6, 802, __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, 808, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__21);
   __Pyx_GIVEREF(__pyx_tuple__21);
 
-  /* "PETSc/petscmat.pxi":807
+  /* "PETSc/petscmat.pxi":813
  *         ("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_ERR(6, 807, __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, 813, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__22);
   __Pyx_GIVEREF(__pyx_tuple__22);
 
-  /* "PETSc/petscmat.pxi":943
+  /* "PETSc/petscmat.pxi":949
  *     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_ERR(6, 943, __pyx_L1_error)
+  __pyx_tuple__23 = PyTuple_Pack(2, __pyx_n_s_fill, Py_None); if (unlikely(!__pyx_tuple__23)) __PYX_ERR(6, 949, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__23);
   __Pyx_GIVEREF(__pyx_tuple__23);
 
-  /* "PETSc/petscmat.pxi":947
+  /* "PETSc/petscmat.pxi":953
  *         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_ERR(6, 947, __pyx_L1_error)
+  __pyx_tuple__24 = PyTuple_Pack(2, __pyx_n_s_zeropivot, Py_None); if (unlikely(!__pyx_tuple__24)) __PYX_ERR(6, 953, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__24);
   __Pyx_GIVEREF(__pyx_tuple__24);
 
-  /* "PETSc/petscmat.pxi":951
+  /* "PETSc/petscmat.pxi":957
  *         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_ERR(6, 951, __pyx_L1_error)
+  __pyx_tuple__25 = PyTuple_Pack(2, __pyx_n_s_levels, Py_None); if (unlikely(!__pyx_tuple__25)) __PYX_ERR(6, 957, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__25);
   __Pyx_GIVEREF(__pyx_tuple__25);
 
-  /* "PETSc/petscmat.pxi":954
+  /* "PETSc/petscmat.pxi":960
  *     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_ERR(6, 954, __pyx_L1_error)
+  __pyx_tuple__26 = PyTuple_Pack(2, __pyx_n_s_diagonal_fill, Py_None); if (unlikely(!__pyx_tuple__26)) __PYX_ERR(6, 960, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__26);
   __Pyx_GIVEREF(__pyx_tuple__26);
 
-  /* "PETSc/petscmat.pxi":958
+  /* "PETSc/petscmat.pxi":964
  *         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_ERR(6, 958, __pyx_L1_error)
+  __pyx_tuple__27 = PyTuple_Pack(2, __pyx_n_s_dt, Py_None); if (unlikely(!__pyx_tuple__27)) __PYX_ERR(6, 964, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__27);
   __Pyx_GIVEREF(__pyx_tuple__27);
 
-  /* "PETSc/petscmat.pxi":961
+  /* "PETSc/petscmat.pxi":967
  *     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_ERR(6, 961, __pyx_L1_error)
+  __pyx_tuple__28 = PyTuple_Pack(2, __pyx_n_s_dtcol, Py_None); if (unlikely(!__pyx_tuple__28)) __PYX_ERR(6, 967, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__28);
   __Pyx_GIVEREF(__pyx_tuple__28);
 
-  /* "PETSc/petscmat.pxi":964
+  /* "PETSc/petscmat.pxi":970
  *     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_ERR(6, 964, __pyx_L1_error)
+  __pyx_tuple__29 = PyTuple_Pack(2, __pyx_n_s_dtcount, Py_None); if (unlikely(!__pyx_tuple__29)) __PYX_ERR(6, 970, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__29);
   __Pyx_GIVEREF(__pyx_tuple__29);
 
-  /* "PETSc/petscmat.pxi":972
+  /* "PETSc/petscmat.pxi":978
  *         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_ERR(6, 972, __pyx_L1_error)
+  __pyx_tuple__30 = PyTuple_Pack(2, __pyx_n_s_shifttype, Py_None); if (unlikely(!__pyx_tuple__30)) __PYX_ERR(6, 978, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__30);
   __Pyx_GIVEREF(__pyx_tuple__30);
 
-  /* "PETSc/petscmat.pxi":975
+  /* "PETSc/petscmat.pxi":981
  *     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_ERR(6, 975, __pyx_L1_error)
+  __pyx_tuple__31 = PyTuple_Pack(2, __pyx_n_s_shiftamount, Py_None); if (unlikely(!__pyx_tuple__31)) __PYX_ERR(6, 981, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_tuple__31);
   __Pyx_GIVEREF(__pyx_tuple__31);
 
-  /* "PETSc/Sys.pyx":27
+  /* "PETSc/Sys.pyx":19
+ *                 vstr = bytes2str(cversion)
+ *                 if release != 0:
+ *                     date = vstr.split(",", 1)[-1].strip()             # <<<<<<<<<<<<<<
+ *                 else:
+ *                     date = vstr.split("GIT Date:")[-1].strip()
+ */
+  __pyx_tuple__34 = PyTuple_Pack(2, __pyx_kp_s__33, __pyx_int_1); if (unlikely(!__pyx_tuple__34)) __PYX_ERR(25, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__34);
+  __Pyx_GIVEREF(__pyx_tuple__34);
+
+  /* "PETSc/Sys.pyx":21
+ *                     date = vstr.split(",", 1)[-1].strip()
+ *                 else:
+ *                     date = vstr.split("GIT Date:")[-1].strip()             # <<<<<<<<<<<<<<
+ *                 out.append(date)
+ *             if author:
+ */
+  __pyx_tuple__35 = PyTuple_Pack(1, __pyx_kp_s_GIT_Date); if (unlikely(!__pyx_tuple__35)) __PYX_ERR(25, 21, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__35);
+  __Pyx_GIVEREF(__pyx_tuple__35);
+
+  /* "PETSc/Sys.pyx":24
  *                 out.append(date)
  *             if author:
- *                 author = bytes2str(cauthorinfo).split('\n')             # <<<<<<<<<<<<<<
- *                 author = [s.strip() for s in author if s]
+ *                 author = bytes2str(PETSC_AUTHOR_INFO).split('\n')             # <<<<<<<<<<<<<<
+ *                 author = tuple([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_ERR(25, 27, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__33);
-  __Pyx_GIVEREF(__pyx_tuple__33);
+  __pyx_tuple__36 = PyTuple_Pack(1, __pyx_kp_s__32); if (unlikely(!__pyx_tuple__36)) __PYX_ERR(25, 24, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__36);
+  __Pyx_GIVEREF(__pyx_tuple__36);
 
-  /* "PETSc/Sys.pyx":41
- *         cdef const_char *cdate = PETSC_VERSION_DATE
- *         cdef const_char *cauthorinfo = PETSC_AUTHOR_INFO
- *         author = bytes2str(cauthorinfo).split('\n')             # <<<<<<<<<<<<<<
- *         author = [s.strip() for s in author if s]
- *         return dict(major      = cmajor,
+  /* "PETSc/Sys.pyx":31
+ *     @classmethod
+ *     def getVersionInfo(cls):
+ *         version, dev, date, author = cls.getVersion(True, True, True)             # <<<<<<<<<<<<<<
+ *         return dict(major      = version[0],
+ *                     minor      = version[1],
  */
-  __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);
+  __pyx_tuple__37 = PyTuple_Pack(3, Py_True, Py_True, Py_True); if (unlikely(!__pyx_tuple__37)) __PYX_ERR(25, 31, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__37);
+  __Pyx_GIVEREF(__pyx_tuple__37);
 
-  /* "PETSc/Sys.pyx":73
+  /* "PETSc/Sys.pyx":61
  *         cdef MPI_Comm ccomm = def_Comm(comm, PETSC_COMM_WORLD)
  *         if ccomm == MPI_COMM_NULL:
  *             raise ValueError("null communicator")             # <<<<<<<<<<<<<<
  *         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_ERR(25, 73, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__35);
-  __Pyx_GIVEREF(__pyx_tuple__35);
+  __pyx_tuple__38 = PyTuple_Pack(1, __pyx_kp_s_null_communicator); if (unlikely(!__pyx_tuple__38)) __PYX_ERR(25, 61, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__38);
+  __Pyx_GIVEREF(__pyx_tuple__38);
 
-  /* "PETSc/Sys.pyx":86
+  /* "PETSc/Sys.pyx":74
  *         cdef object end = kargs.get('end', '\n')
  *         if comm_rank(ccomm) == 0:
  *             if not args: args = ('',)             # <<<<<<<<<<<<<<
  *             format = ['%s', sep] * len(args)
  *             format[-1] = end
  */
-  __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);
+  __pyx_tuple__39 = PyTuple_Pack(1, __pyx_kp_s__10); if (unlikely(!__pyx_tuple__39)) __PYX_ERR(25, 74, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__39);
+  __Pyx_GIVEREF(__pyx_tuple__39);
 
-  /* "PETSc/Sys.pyx":103
+  /* "PETSc/Sys.pyx":91
  *         cdef object end = kargs.get('end', '\n')
  *         cdef object flush = kargs.get('flush', False)
  *         if not args: args = ('',)             # <<<<<<<<<<<<<<
  *         format = ['%s', sep] * len(args)
  *         format[-1] = end
  */
-  __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);
+  __pyx_tuple__40 = PyTuple_Pack(1, __pyx_kp_s__10); if (unlikely(!__pyx_tuple__40)) __PYX_ERR(25, 91, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__40);
+  __Pyx_GIVEREF(__pyx_tuple__40);
 
-  /* "PETSc/Sys.pyx":175
+  /* "PETSc/Sys.pyx":167
  *     @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);
+  __pyx_tuple__41 = PyTuple_Pack(1, __pyx_kp_s_empty_citation); if (unlikely(!__pyx_tuple__41)) __PYX_ERR(25, 167, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__41);
+  __Pyx_GIVEREF(__pyx_tuple__41);
 
   /* "PETSc/Log.pyx":7
  *     @classmethod
@@ -245616,9 +266018,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_ERR(26, 7, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__39);
-  __Pyx_GIVEREF(__pyx_tuple__39);
+  __pyx_tuple__42 = PyTuple_Pack(1, __pyx_kp_s_empty_name); if (unlikely(!__pyx_tuple__42)) __PYX_ERR(26, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__42);
+  __Pyx_GIVEREF(__pyx_tuple__42);
 
   /* "PETSc/Log.pyx":21
  *     @classmethod
@@ -245627,9 +266029,9 @@ 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_ERR(26, 21, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_tuple__40);
-  __Pyx_GIVEREF(__pyx_tuple__40);
+  __pyx_tuple__43 = PyTuple_Pack(1, __pyx_kp_s_empty_name); if (unlikely(!__pyx_tuple__43)) __PYX_ERR(26, 21, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__43);
+  __Pyx_GIVEREF(__pyx_tuple__43);
 
   /* "PETSc/Log.pyx":35
  *     @classmethod
@@ -245638,9 +266040,9 @@ static int __Pyx_InitCachedConstants(void) {
  *         cdef const_char *cname = NULL
  *         name = str2bytes(name, &cname)
  */
-  __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);
+  __pyx_tuple__44 = PyTuple_Pack(1, __pyx_kp_s_empty_name); if (unlikely(!__pyx_tuple__44)) __PYX_ERR(26, 35, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__44);
+  __Pyx_GIVEREF(__pyx_tuple__44);
 
   /* "PETSc/Log.pyx":133
  *         def __set__(self, value):
@@ -245649,9 +266051,9 @@ static int __Pyx_InitCachedConstants(void) {
  * 
  *     #
  */
-  __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);
+  __pyx_tuple__45 = PyTuple_Pack(1, __pyx_kp_s_readonly_attribute); if (unlikely(!__pyx_tuple__45)) __PYX_ERR(26, 133, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__45);
+  __Pyx_GIVEREF(__pyx_tuple__45);
 
   /* "PETSc/Log.pyx":213
  *         def __set__(self, value):
@@ -245660,9 +266062,9 @@ static int __Pyx_InitCachedConstants(void) {
  * 
  *     #
  */
-  __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);
+  __pyx_tuple__46 = PyTuple_Pack(1, __pyx_kp_s_readonly_attribute); if (unlikely(!__pyx_tuple__46)) __PYX_ERR(26, 213, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__46);
+  __Pyx_GIVEREF(__pyx_tuple__46);
 
   /* "PETSc/Log.pyx":308
  *         def __set__(self, value):
@@ -245671,9 +266073,9 @@ static int __Pyx_InitCachedConstants(void) {
  * 
  *     #
  */
-  __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);
+  __pyx_tuple__47 = PyTuple_Pack(1, __pyx_kp_s_readonly_attribute); if (unlikely(!__pyx_tuple__47)) __PYX_ERR(26, 308, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__47);
+  __Pyx_GIVEREF(__pyx_tuple__47);
 
   /* "PETSc/Comm.pyx":25
  *         if not isinstance(self,  Comm): return NotImplemented
@@ -245682,9 +266084,9 @@ static int __Pyx_InitCachedConstants(void) {
  *         cdef Comm s = self
  *         cdef Comm o = other
  */
-  __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);
+  __pyx_tuple__48 = PyTuple_Pack(1, __pyx_kp_s_only_and); if (unlikely(!__pyx_tuple__48)) __PYX_ERR(9, 25, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__48);
+  __Pyx_GIVEREF(__pyx_tuple__48);
 
   /* "PETSc/Comm.pyx":48
  *         if self.comm == MPI_COMM_NULL: return
@@ -245693,9 +266095,9 @@ static int __Pyx_InitCachedConstants(void) {
  *         CHKERR( PetscCommDestroy(&self.comm) )
  *         self.comm = MPI_COMM_NULL
  */
-  __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);
+  __pyx_tuple__49 = PyTuple_Pack(1, __pyx_kp_s_communicator_not_owned); if (unlikely(!__pyx_tuple__49)) __PYX_ERR(9, 48, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__49);
+  __Pyx_GIVEREF(__pyx_tuple__49);
 
   /* "PETSc/Comm.pyx":56
  *     def duplicate(self):
@@ -245704,9 +266106,9 @@ static int __Pyx_InitCachedConstants(void) {
  *         cdef MPI_Comm newcomm = MPI_COMM_NULL
  *         CHKERR( PetscCommDuplicate(self.comm, &newcomm, NULL) )
  */
-  __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);
+  __pyx_tuple__50 = PyTuple_Pack(1, __pyx_kp_s_null_communicator); if (unlikely(!__pyx_tuple__50)) __PYX_ERR(9, 56, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__50);
+  __Pyx_GIVEREF(__pyx_tuple__50);
 
   /* "PETSc/Comm.pyx":67
  *     def getSize(self):
@@ -245715,9 +266117,9 @@ static int __Pyx_InitCachedConstants(void) {
  *         cdef int size=0
  *         MPI_Comm_size(self.comm, &size)
  */
-  __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);
+  __pyx_tuple__51 = PyTuple_Pack(1, __pyx_kp_s_null_communicator); if (unlikely(!__pyx_tuple__51)) __PYX_ERR(9, 67, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__51);
+  __Pyx_GIVEREF(__pyx_tuple__51);
 
   /* "PETSc/Comm.pyx":74
  *     def getRank(self):
@@ -245726,9 +266128,9 @@ static int __Pyx_InitCachedConstants(void) {
  *         cdef int rank=0
  *         MPI_Comm_rank(self.comm, &rank)
  */
-  __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);
+  __pyx_tuple__52 = PyTuple_Pack(1, __pyx_kp_s_null_communicator); if (unlikely(!__pyx_tuple__52)) __PYX_ERR(9, 74, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__52);
+  __Pyx_GIVEREF(__pyx_tuple__52);
 
   /* "PETSc/Comm.pyx":81
  *     def barrier(self):
@@ -245737,9 +266139,9 @@ static int __Pyx_InitCachedConstants(void) {
  *         MPI_Barrier(self.comm)
  * 
  */
-  __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);
+  __pyx_tuple__53 = PyTuple_Pack(1, __pyx_kp_s_null_communicator); if (unlikely(!__pyx_tuple__53)) __PYX_ERR(9, 81, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__53);
+  __Pyx_GIVEREF(__pyx_tuple__53);
 
   /* "PETSc/Object.pyx":21
  *         if   op == 2: return (s.obj[0] == o.obj[0])
@@ -245748,9 +266150,9 @@ static int __Pyx_InitCachedConstants(void) {
  * 
  *     def __nonzero__(self):
  */
-  __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);
+  __pyx_tuple__54 = PyTuple_Pack(1, __pyx_kp_s_only_and); if (unlikely(!__pyx_tuple__54)) __PYX_ERR(10, 21, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__54);
+  __Pyx_GIVEREF(__pyx_tuple__54);
 
   /* "PETSc/Vec.pyx":406
  *             CHKERR( VecCUSPGetCUDAArrayWrite(self.vec, &hdl) )
@@ -245759,9 +266161,9 @@ static int __Pyx_InitCachedConstants(void) {
  *         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);
+  __pyx_tuple__55 = PyTuple_Pack(1, __pyx_kp_s_Invalid_mode_expected_rw_r_or_w); if (unlikely(!__pyx_tuple__55)) __PYX_ERR(30, 406, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__55);
+  __Pyx_GIVEREF(__pyx_tuple__55);
 
   /* "PETSc/Vec.pyx":420
  *             CHKERR( VecCUSPRestoreCUDAArrayWrite(self.vec, &hdl) )
@@ -245770,56 +266172,56 @@ static int __Pyx_InitCachedConstants(void) {
  * 
  *     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);
+  __pyx_tuple__56 = PyTuple_Pack(1, __pyx_kp_s_Invalid_mode_expected_rw_r_or_w); if (unlikely(!__pyx_tuple__56)) __PYX_ERR(30, 420, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__56);
+  __Pyx_GIVEREF(__pyx_tuple__56);
 
-  /* "PETSc/Vec.pyx":860
+  /* "PETSc/Vec.pyx":866
  *         "Vec buffer (read-only)"
  *         def __get__(self):
  *             return self.getBuffer(True)             # <<<<<<<<<<<<<<
  * 
  *     property array_w:
  */
-  __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);
+  __pyx_tuple__57 = PyTuple_Pack(1, Py_True); if (unlikely(!__pyx_tuple__57)) __PYX_ERR(30, 866, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__57);
+  __Pyx_GIVEREF(__pyx_tuple__57);
 
-  /* "PETSc/Vec.pyx":868
+  /* "PETSc/Vec.pyx":874
  *         def __set__(self, value):
  *             cdef buf = self.getBuffer()
  *             with buf as array: array[:] = value             # <<<<<<<<<<<<<<
  * 
  *     property array_r:
  */
-  __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);
+  __pyx_slice__58 = PySlice_New(Py_None, Py_None, Py_None); if (unlikely(!__pyx_slice__58)) __PYX_ERR(30, 874, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_slice__58);
+  __Pyx_GIVEREF(__pyx_slice__58);
+  __pyx_tuple__59 = PyTuple_Pack(3, Py_None, Py_None, Py_None); if (unlikely(!__pyx_tuple__59)) __PYX_ERR(30, 874, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__59);
+  __Pyx_GIVEREF(__pyx_tuple__59);
 
-  /* "PETSc/Vec.pyx":873
+  /* "PETSc/Vec.pyx":879
  *         "Vec array (read-only)"
  *         def __get__(self):
  *             return self.getArray(True)             # <<<<<<<<<<<<<<
  * 
  *     property buffer:
  */
-  __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);
+  __pyx_tuple__60 = PyTuple_Pack(1, Py_True); if (unlikely(!__pyx_tuple__60)) __PYX_ERR(30, 879, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__60);
+  __Pyx_GIVEREF(__pyx_tuple__60);
 
-  /* "PETSc/Mat.pyx":1055
+  /* "PETSc/Mat.pyx":1064
  *         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__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);
+  __pyx_tuple__61 = PyTuple_Pack(3, __pyx_int_0, __pyx_int_2, __pyx_int_1); if (unlikely(!__pyx_tuple__61)) __PYX_ERR(33, 1064, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__61);
+  __Pyx_GIVEREF(__pyx_tuple__61);
 
   /* "PETSc/SNES.pyx":179
  *         if comms is not None:
@@ -245828,9 +266230,9 @@ static int __Pyx_InitCachedConstants(void) {
  *             CHKERR( PetscMalloc(sizeof(MPI_Comm)*<size_t>clevels, &ccomms) )
  *             try:
  */
-  __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);
+  __pyx_tuple__62 = PyTuple_Pack(1, __pyx_kp_s_Must_provide_as_many_communicato); if (unlikely(!__pyx_tuple__62)) __PYX_ERR(36, 179, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__62);
+  __Pyx_GIVEREF(__pyx_tuple__62);
 
   /* "PETSc/TAO.pyx":575
  *                 self.setFunctionTolerances(**value)
@@ -245839,9 +266241,9 @@ static int __Pyx_InitCachedConstants(void) {
  * 
  *     property gtol:
  */
-  __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);
+  __pyx_tuple__63 = PyTuple_Pack(1, __pyx_kp_s_expecting_tuple_list_or_dict); if (unlikely(!__pyx_tuple__63)) __PYX_ERR(38, 575, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__63);
+  __Pyx_GIVEREF(__pyx_tuple__63);
 
   /* "PETSc/TAO.pyx":586
  *                 self.getGradientTolerances(**value)
@@ -245850,9 +266252,9 @@ static int __Pyx_InitCachedConstants(void) {
  * 
  *     property ctol:
  */
-  __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);
+  __pyx_tuple__64 = PyTuple_Pack(1, __pyx_kp_s_expecting_tuple_list_or_dict); if (unlikely(!__pyx_tuple__64)) __PYX_ERR(38, 586, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__64);
+  __Pyx_GIVEREF(__pyx_tuple__64);
 
   /* "PETSc/TAO.pyx":597
  *                 self.getConstraintTolerances(**value)
@@ -245861,34 +266263,34 @@ static int __Pyx_InitCachedConstants(void) {
  * 
  *     # --- iteration ---
  */
-  __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);
+  __pyx_tuple__65 = PyTuple_Pack(1, __pyx_kp_s_expecting_tuple_list_or_dict); if (unlikely(!__pyx_tuple__65)) __PYX_ERR(38, 597, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__65);
+  __Pyx_GIVEREF(__pyx_tuple__65);
 
-  /* "PETSc/DMPlex.pyx":335
+  /* "PETSc/DMPlex.pyx":346
  *         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__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);
+  __pyx_slice__66 = PySlice_New(Py_None, Py_None, __pyx_int_2); if (unlikely(!__pyx_slice__66)) __PYX_ERR(42, 346, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_slice__66);
+  __Pyx_GIVEREF(__pyx_slice__66);
+  __pyx_slice__67 = PySlice_New(__pyx_int_1, Py_None, __pyx_int_2); if (unlikely(!__pyx_slice__67)) __PYX_ERR(42, 346, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_slice__67);
+  __Pyx_GIVEREF(__pyx_slice__67);
 
-  /* "PETSc/DMPlex.pyx":480
+  /* "PETSc/DMPlex.pyx":565
  *                     bcpoints[i] = (<IS?>bcPoints[<Py_ssize_t>i]).iset
  *             else:
  *                 raise ValueError("bcPoints is a required argument")             # <<<<<<<<<<<<<<
  *         else:
  *             assert bcComps  is None
  */
-  __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);
+  __pyx_tuple__68 = PyTuple_Pack(1, __pyx_kp_s_bcPoints_is_a_required_argument); if (unlikely(!__pyx_tuple__68)) __PYX_ERR(42, 565, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__68);
+  __Pyx_GIVEREF(__pyx_tuple__68);
 
   /* "PETSc/Partitioner.pyx":61
  *                                  numProcs, toInt(nsize))
@@ -245897,20 +266299,64 @@ static int __Pyx_InitCachedConstants(void) {
  *         if points is not None:
  *             points = iarray_i(points, NULL, &cpoints)
  */
-  __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);
+  __pyx_tuple__69 = PyTuple_Pack(1, __pyx_kp_s_Must_provide_both_sizes_and_poin); if (unlikely(!__pyx_tuple__69)) __PYX_ERR(46, 61, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__69);
+  __Pyx_GIVEREF(__pyx_tuple__69);
 
-  /* "PETSc/PETSc.pyx":212
+  /* "PETSc/PETSc.pyx":216
  *         return n
  *     #
  *     del tbl[1:] # clear any previous stuff             # <<<<<<<<<<<<<<
  *     if n == PETSC_ERR_MEM: # special case
  *         PetscMallocGetCurrentUsage(&mem)
  */
-  __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);
+  __pyx_slice__70 = PySlice_New(__pyx_int_1, Py_None, Py_None); if (unlikely(!__pyx_slice__70)) __PYX_ERR(11, 216, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_slice__70);
+  __Pyx_GIVEREF(__pyx_slice__70);
+
+  /* "PETSc/Const.pyx":15
+ * # --------------------------------------------------------------------
+ * 
+ * class InsertMode(object):             # <<<<<<<<<<<<<<
+ *     # native
+ *     NOT_SET_VALUES    = PETSC_NOT_SET_VALUES
+ */
+  __pyx_tuple__71 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__71)) __PYX_ERR(0, 15, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__71);
+  __Pyx_GIVEREF(__pyx_tuple__71);
+
+  /* "PETSc/Const.pyx":36
+ * # --------------------------------------------------------------------
+ * 
+ * class ScatterMode(object):             # <<<<<<<<<<<<<<
+ *     # native
+ *     SCATTER_FORWARD       = PETSC_SCATTER_FORWARD
+ */
+  __pyx_tuple__72 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__72)) __PYX_ERR(0, 36, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__72);
+  __Pyx_GIVEREF(__pyx_tuple__72);
+
+  /* "PETSc/Const.pyx":51
+ * # --------------------------------------------------------------------
+ * 
+ * class NormType(object):             # <<<<<<<<<<<<<<
+ *     # native
+ *     NORM_1         = PETSC_NORM_1
+ */
+  __pyx_tuple__73 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__73)) __PYX_ERR(0, 51, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__73);
+  __Pyx_GIVEREF(__pyx_tuple__73);
+
+  /* "PETSc/Error.pyx":3
+ * # --------------------------------------------------------------------
+ * 
+ * class Error(RuntimeError):             # <<<<<<<<<<<<<<
+ * 
+ *     _traceback_ = []
+ */
+  __pyx_tuple__74 = PyTuple_Pack(1, __pyx_builtin_RuntimeError); if (unlikely(!__pyx_tuple__74)) __PYX_ERR(1, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__74);
+  __Pyx_GIVEREF(__pyx_tuple__74);
 
   /* "PETSc/Error.pyx":7
  *     _traceback_ = []
@@ -245919,10 +266365,10 @@ static int __Pyx_InitCachedConstants(void) {
  *         self.ierr = ierr
  *         RuntimeError.__init__(self, self.ierr)
  */
-  __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)
+  __pyx_tuple__75 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_ierr); if (unlikely(!__pyx_tuple__75)) __PYX_ERR(1, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__75);
+  __Pyx_GIVEREF(__pyx_tuple__75);
+  __pyx_codeobj__76 = (PyObject*)__Pyx_PyCode_New(2, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__75, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_PETSc_Error_pyx, __pyx_n_s_init, 7, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__76)) __PYX_ERR(1, 7, __pyx_L1_error)
 
   /* "PETSc/Error.pyx":11
  *         RuntimeError.__init__(self, self.ierr)
@@ -245931,10 +266377,10 @@ static int __Pyx_InitCachedConstants(void) {
  *         cdef int ierr = self.ierr
  *         return ierr != 0
  */
-  __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)
+  __pyx_tuple__77 = PyTuple_Pack(2, __pyx_n_s_self, __pyx_n_s_ierr); if (unlikely(!__pyx_tuple__77)) __PYX_ERR(1, 11, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__77);
+  __Pyx_GIVEREF(__pyx_tuple__77);
+  __pyx_codeobj__78 = (PyObject*)__Pyx_PyCode_New(1, 0, 2, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__77, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_PETSc_Error_pyx, __pyx_n_s_nonzero_2, 11, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__78)) __PYX_ERR(1, 11, __pyx_L1_error)
 
   /* "PETSc/Error.pyx":15
  *         return ierr != 0
@@ -245943,10 +266389,10 @@ static int __Pyx_InitCachedConstants(void) {
  *         return 'PETSc.Error(%d)' % self.ierr
  * 
  */
-  __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)
+  __pyx_tuple__79 = PyTuple_Pack(1, __pyx_n_s_self); if (unlikely(!__pyx_tuple__79)) __PYX_ERR(1, 15, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__79);
+  __Pyx_GIVEREF(__pyx_tuple__79);
+  __pyx_codeobj__80 = (PyObject*)__Pyx_PyCode_New(1, 0, 1, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__79, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_PETSc_Error_pyx, __pyx_n_s_repr, 15, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__80)) __PYX_ERR(1, 15, __pyx_L1_error)
 
   /* "PETSc/Error.pyx":18
  *         return 'PETSc.Error(%d)' % self.ierr
@@ -245955,31 +266401,559 @@ static int __Pyx_InitCachedConstants(void) {
  *         cdef int csize=1, crank=0
  *         if not (<int>PetscFinalizeCalled):
  */
-  __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)
+  __pyx_tuple__81 = 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__81)) __PYX_ERR(1, 18, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__81);
+  __Pyx_GIVEREF(__pyx_tuple__81);
+  __pyx_codeobj__82 = (PyObject*)__Pyx_PyCode_New(1, 0, 8, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__81, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_PETSc_Error_pyx, __pyx_n_s_str, 18, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__82)) __PYX_ERR(1, 18, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":417
+  /* "PETSc/Viewer.pyx":3
+ * # --------------------------------------------------------------------
+ * 
+ * class ViewerType(object):             # <<<<<<<<<<<<<<
+ *     SOCKET      = S_(PETSCVIEWERSOCKET)
+ *     ASCII       = S_(PETSCVIEWERASCII)
+ */
+  __pyx_tuple__83 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__83)) __PYX_ERR(27, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__83);
+  __Pyx_GIVEREF(__pyx_tuple__83);
+
+  /* "PETSc/Viewer.pyx":16
+ *     SAWS        = S_(PETSCVIEWERSAWS)
+ * 
+ * class ViewerFormat(object):             # <<<<<<<<<<<<<<
+ *     DEFAULT           = PETSC_VIEWER_DEFAULT
+ *     ASCII_MATLAB      = PETSC_VIEWER_ASCII_MATLAB
+ */
+  __pyx_tuple__84 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__84)) __PYX_ERR(27, 16, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__84);
+  __Pyx_GIVEREF(__pyx_tuple__84);
+
+  /* "PETSc/Viewer.pyx":48
+ *     NOFORMAT          = PETSC_VIEWER_NOFORMAT
+ * 
+ * class FileMode(object):             # <<<<<<<<<<<<<<
+ *     # native
+ *     READ          = PETSC_FILE_MODE_READ
+ */
+  __pyx_tuple__85 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__85)) __PYX_ERR(27, 48, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__85);
+  __Pyx_GIVEREF(__pyx_tuple__85);
+
+  /* "PETSc/Viewer.pyx":59
+ *     AU = UA    = APPEND_UPDATE
+ * 
+ * class DrawSize(object):             # <<<<<<<<<<<<<<
+ *     # native
+ *     FULL_SIZE    = PETSC_DRAW_FULL_SIZE
+ */
+  __pyx_tuple__86 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__86)) __PYX_ERR(27, 59, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__86);
+  __Pyx_GIVEREF(__pyx_tuple__86);
+
+  /* "PETSc/Random.pyx":3
+ * # --------------------------------------------------------------------
+ * 
+ * class RandomType(object):             # <<<<<<<<<<<<<<
+ *     RAND     = S_(PETSCRAND)
+ *     RAND48   = S_(PETSCRAND48)
+ */
+  __pyx_tuple__87 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__87)) __PYX_ERR(28, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__87);
+  __Pyx_GIVEREF(__pyx_tuple__87);
+
+  /* "PETSc/IS.pyx":3
+ * # --------------------------------------------------------------------
+ * 
+ * class ISType(object):             # <<<<<<<<<<<<<<
+ *     GENERAL = S_(ISGENERAL)
+ *     BLOCK   = S_(ISBLOCK)
+ */
+  __pyx_tuple__88 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__88)) __PYX_ERR(29, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__88);
+  __Pyx_GIVEREF(__pyx_tuple__88);
+
+  /* "PETSc/IS.pyx":343
+ * 
+ * 
+ * class GLMapMode(object):             # <<<<<<<<<<<<<<
+ *     MASK = PETSC_IS_GTOLM_MASK
+ *     DROP = PETSC_IS_GTOLM_DROP
+ */
+  __pyx_tuple__89 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__89)) __PYX_ERR(29, 343, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__89);
+  __Pyx_GIVEREF(__pyx_tuple__89);
+
+  /* "PETSc/IS.pyx":348
+ * 
+ * 
+ * class LGMapType(object):             # <<<<<<<<<<<<<<
+ *     BASIC = S_(ISLOCALTOGLOBALMAPPINGBASIC)
+ *     HASH  = S_(ISLOCALTOGLOBALMAPPINGHASH)
+ */
+  __pyx_tuple__90 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__90)) __PYX_ERR(29, 348, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__90);
+  __Pyx_GIVEREF(__pyx_tuple__90);
+
+  /* "PETSc/Vec.pyx":3
+ * # --------------------------------------------------------------------
+ * 
+ * class VecType(object):             # <<<<<<<<<<<<<<
+ *     SEQ        = S_(VECSEQ)
+ *     MPI        = S_(VECMPI)
+ */
+  __pyx_tuple__91 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__91)) __PYX_ERR(30, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__91);
+  __Pyx_GIVEREF(__pyx_tuple__91);
+
+  /* "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_tuple__92 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__92)) __PYX_ERR(30, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__92);
+  __Pyx_GIVEREF(__pyx_tuple__92);
+
+  /* "PETSc/Mat.pyx":3
+ * # --------------------------------------------------------------------
+ * 
+ * class MatType(object):             # <<<<<<<<<<<<<<
+ *     SAME            = S_(MATSAME)
+ *     MAIJ            = S_(MATMAIJ)
+ */
+  __pyx_tuple__93 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__93)) __PYX_ERR(33, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__93);
+  __Pyx_GIVEREF(__pyx_tuple__93);
+
+  /* "PETSc/Mat.pyx":60
+ *     PREALLOCATOR    = S_(MATPREALLOCATOR)
+ * 
+ * class MatOption(object):             # <<<<<<<<<<<<<<
+ *     UNUSED_NONZERO_LOCATION_ERR = MAT_UNUSED_NONZERO_LOCATION_ERR
+ *     ROW_ORIENTED                = MAT_ROW_ORIENTED
+ */
+  __pyx_tuple__94 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__94)) __PYX_ERR(33, 60, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__94);
+  __Pyx_GIVEREF(__pyx_tuple__94);
+
+  /* "PETSc/Mat.pyx":84
+ *     SUBSET_OFF_PROC_ENTRIES     = MAT_SUBSET_OFF_PROC_ENTRIES
+ * 
+ * class MatAssemblyType(object):             # <<<<<<<<<<<<<<
+ *     # native
+ *     FINAL_ASSEMBLY = MAT_FINAL_ASSEMBLY
+ */
+  __pyx_tuple__95 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__95)) __PYX_ERR(33, 84, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__95);
+  __Pyx_GIVEREF(__pyx_tuple__95);
+
+  /* "PETSc/Mat.pyx":92
+ *     FLUSH = FLUSH_ASSEMBLY
+ * 
+ * class MatInfoType(object):             # <<<<<<<<<<<<<<
+ *     LOCAL = MAT_LOCAL
+ *     GLOBAL_MAX = MAT_GLOBAL_MAX
+ */
+  __pyx_tuple__96 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__96)) __PYX_ERR(33, 92, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__96);
+  __Pyx_GIVEREF(__pyx_tuple__96);
+
+  /* "PETSc/Mat.pyx":97
+ *     GLOBAL_SUM = MAT_GLOBAL_SUM
+ * 
+ * class MatStructure(object):             # <<<<<<<<<<<<<<
+ *     # native
+ *     SAME_NONZERO_PATTERN      = MAT_SAME_NONZERO_PATTERN
+ */
+  __pyx_tuple__97 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__97)) __PYX_ERR(33, 97, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__97);
+  __Pyx_GIVEREF(__pyx_tuple__97);
+
+  /* "PETSc/Mat.pyx":107
+ *     DIFFERENT = DIFFERENT_NZ = DIFFERENT_NONZERO_PATTERN
+ * 
+ * class MatOrderingType(object):             # <<<<<<<<<<<<<<
+ *     NATURAL     = S_(MATORDERINGNATURAL)
+ *     ND          = S_(MATORDERINGND)
+ */
+  __pyx_tuple__98 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__98)) __PYX_ERR(33, 107, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__98);
+  __Pyx_GIVEREF(__pyx_tuple__98);
+
+  /* "PETSc/Mat.pyx":118
+ *     AMD         = S_(MATORDERINGAMD)
+ * 
+ * class MatFactorShiftType(object):             # <<<<<<<<<<<<<<
+ *     # native
+ *     NONE              = MAT_SHIFT_NONE
+ */
+  __pyx_tuple__99 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__99)) __PYX_ERR(33, 118, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__99);
+  __Pyx_GIVEREF(__pyx_tuple__99);
+
+  /* "PETSc/Mat.pyx":128
+ *     PD = MAT_SHIFT_POSITIVE_DEFINITE
+ * 
+ * class MatSORType(object):             # <<<<<<<<<<<<<<
+ *     FORWARD_SWEEP         = SOR_FORWARD_SWEEP
+ *     BACKWARD_SWEEP        = SOR_BACKWARD_SWEEP
+ */
+  __pyx_tuple__100 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__100)) __PYX_ERR(33, 128, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__100);
+  __Pyx_GIVEREF(__pyx_tuple__100);
+
+  /* "PETSc/PC.pyx":3
+ * # --------------------------------------------------------------------
+ * 
+ * class PCType(object):             # <<<<<<<<<<<<<<
+ *     # native
+ *     NONE         = S_(PCNONE)
+ */
+  __pyx_tuple__101 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__101)) __PYX_ERR(34, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__101);
+  __Pyx_GIVEREF(__pyx_tuple__101);
+
+  /* "PETSc/PC.pyx":49
+ *     TELESCOPE    = S_(PCTELESCOPE)
+ * 
+ * class PCSide(object):             # <<<<<<<<<<<<<<
+ *     # native
+ *     LEFT      = PC_LEFT
+ */
+  __pyx_tuple__102 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__102)) __PYX_ERR(34, 49, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__102);
+  __Pyx_GIVEREF(__pyx_tuple__102);
+
+  /* "PETSc/PC.pyx":59
+ *     S = SYMMETRIC
+ * 
+ * class PCASMType(object):             # <<<<<<<<<<<<<<
+ *     NONE        = PC_ASM_NONE
+ *     BASIC       = PC_ASM_BASIC
+ */
+  __pyx_tuple__103 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__103)) __PYX_ERR(34, 59, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__103);
+  __Pyx_GIVEREF(__pyx_tuple__103);
+
+  /* "PETSc/PC.pyx":65
+ *     INTERPOLATE = PC_ASM_INTERPOLATE
+ * 
+ * class PCGASMType(object):             # <<<<<<<<<<<<<<
+ *     NONE        = PC_GASM_NONE
+ *     BASIC       = PC_GASM_BASIC
+ */
+  __pyx_tuple__104 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__104)) __PYX_ERR(34, 65, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__104);
+  __Pyx_GIVEREF(__pyx_tuple__104);
+
+  /* "PETSc/PC.pyx":71
+ *     INTERPOLATE = PC_GASM_INTERPOLATE
+ * 
+ * class PCMGType(object):             # <<<<<<<<<<<<<<
+ *     MULTIPLICATIVE = PC_MG_MULTIPLICATIVE
+ *     ADDITIVE       = PC_MG_ADDITIVE
+ */
+  __pyx_tuple__105 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__105)) __PYX_ERR(34, 71, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__105);
+  __Pyx_GIVEREF(__pyx_tuple__105);
+
+  /* "PETSc/PC.pyx":77
+ *     KASKADE        = PC_MG_KASKADE
+ * 
+ * class PCMGCycleType(object):             # <<<<<<<<<<<<<<
+ *     V = PC_MG_CYCLE_V
+ *     W = PC_MG_CYCLE_W
+ */
+  __pyx_tuple__106 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__106)) __PYX_ERR(34, 77, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__106);
+  __Pyx_GIVEREF(__pyx_tuple__106);
+
+  /* "PETSc/PC.pyx":81
+ *     W = PC_MG_CYCLE_W
+ * 
+ * class PCGAMGType(object):             # <<<<<<<<<<<<<<
+ *     AGG       = S_(PCGAMGAGG)
+ *     GEO       = S_(PCGAMGGEO)
+ */
+  __pyx_tuple__107 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__107)) __PYX_ERR(34, 81, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__107);
+  __Pyx_GIVEREF(__pyx_tuple__107);
+
+  /* "PETSc/PC.pyx":86
+ *     CLASSICAL = S_(PCGAMGCLASSICAL)
+ * 
+ * class PCCompositeType(object):             # <<<<<<<<<<<<<<
+ *     ADDITIVE                 = PC_COMPOSITE_ADDITIVE
+ *     MULTIPLICATIVE           = PC_COMPOSITE_MULTIPLICATIVE
+ */
+  __pyx_tuple__108 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__108)) __PYX_ERR(34, 86, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__108);
+  __Pyx_GIVEREF(__pyx_tuple__108);
+
+  /* "PETSc/PC.pyx":93
+ *     SCHUR                    = PC_COMPOSITE_SCHUR
+ * 
+ * class PCFieldSplitSchurPreType(object):             # <<<<<<<<<<<<<<
+ *     SELF                     = PC_FIELDSPLIT_SCHUR_PRE_SELF
+ *     SELFP                    = PC_FIELDSPLIT_SCHUR_PRE_SELFP
+ */
+  __pyx_tuple__109 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__109)) __PYX_ERR(34, 93, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__109);
+  __Pyx_GIVEREF(__pyx_tuple__109);
+
+  /* "PETSc/PC.pyx":100
+ *     FULL                     = PC_FIELDSPLIT_SCHUR_PRE_FULL
+ * 
+ * class PCFieldSplitSchurFactType(object):             # <<<<<<<<<<<<<<
+ *     DIAG                     = PC_FIELDSPLIT_SCHUR_FACT_DIAG
+ *     LOWER                    = PC_FIELDSPLIT_SCHUR_FACT_LOWER
+ */
+  __pyx_tuple__110 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__110)) __PYX_ERR(34, 100, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__110);
+  __Pyx_GIVEREF(__pyx_tuple__110);
+
+  /* "PETSc/KSP.pyx":3
+ * # --------------------------------------------------------------------
+ * 
+ * class KSPType(object):             # <<<<<<<<<<<<<<
+ *     RICHARDSON = S_(KSPRICHARDSON)
+ *     CHEBYSHEV  = S_(KSPCHEBYSHEV)
+ */
+  __pyx_tuple__111 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__111)) __PYX_ERR(35, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__111);
+  __Pyx_GIVEREF(__pyx_tuple__111);
+
+  /* "PETSc/KSP.pyx":46
+ *     FETIDP     = S_(KSPFETIDP)
+ * 
+ * class KSPNormType(object):             # <<<<<<<<<<<<<<
+ *     # native
+ *     NORM_DEFAULT          = KSP_NORM_DEFAULT
+ */
+  __pyx_tuple__112 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__112)) __PYX_ERR(35, 46, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__112);
+  __Pyx_GIVEREF(__pyx_tuple__112);
+
+  /* "PETSc/KSP.pyx":60
+ *     NATURAL          = NORM_NATURAL
+ * 
+ * class KSPConvergedReason(object):             # <<<<<<<<<<<<<<
+ *     #iterating
+ *     CONVERGED_ITERATING       = KSP_CONVERGED_ITERATING
+ */
+  __pyx_tuple__113 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__113)) __PYX_ERR(35, 60, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__113);
+  __Pyx_GIVEREF(__pyx_tuple__113);
+
+  /* "PETSc/SNES.pyx":3
+ * # --------------------------------------------------------------------
+ * 
+ * class SNESType(object):             # <<<<<<<<<<<<<<
+ *     NEWTONLS     = S_(SNESNEWTONLS)
+ *     NEWTONTR     = S_(SNESNEWTONTR)
+ */
+  __pyx_tuple__114 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__114)) __PYX_ERR(36, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__114);
+  __Pyx_GIVEREF(__pyx_tuple__114);
+
+  /* "PETSc/SNES.pyx":24
+ *     COMPOSITE    = S_(SNESCOMPOSITE)
+ * 
+ * class SNESNormSchedule(object):             # <<<<<<<<<<<<<<
+ *     # native
+ *     NORM_DEFAULT            = SNES_NORM_DEFAULT
+ */
+  __pyx_tuple__115 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__115)) __PYX_ERR(36, 24, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__115);
+  __Pyx_GIVEREF(__pyx_tuple__115);
+
+  /* "PETSc/SNES.pyx":40
+ *     INITIAL_FINAL_ONLY = NORM_INITIAL_FINAL_ONLY
+ * 
+ * class SNESConvergedReason(object):             # <<<<<<<<<<<<<<
+ *     # iterating
+ *     CONVERGED_ITERATING      = SNES_CONVERGED_ITERATING
+ */
+  __pyx_tuple__116 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__116)) __PYX_ERR(36, 40, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__116);
+  __Pyx_GIVEREF(__pyx_tuple__116);
+
+  /* "PETSc/TS.pyx":3
+ * # -----------------------------------------------------------------------------
+ * 
+ * class TSType(object):             # <<<<<<<<<<<<<<
+ *     # native
+ *     EULER    = S_(TSEULER)
+ */
+  __pyx_tuple__117 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__117)) __PYX_ERR(37, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__117);
+  __Pyx_GIVEREF(__pyx_tuple__117);
+
+  /* "PETSc/TS.pyx":29
+ *     RUNGE_KUTTA    = RK
+ * 
+ * class TSRKType(object):             # <<<<<<<<<<<<<<
+ *     RK1FE = S_(TSRK1FE)
+ *     RK2A  = S_(TSRK2A)
+ */
+  __pyx_tuple__118 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__118)) __PYX_ERR(37, 29, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__118);
+  __Pyx_GIVEREF(__pyx_tuple__118);
+
+  /* "PETSc/TS.pyx":39
+ *     RK5BS = S_(TSRK5BS)
+ * 
+ * class TSProblemType(object):             # <<<<<<<<<<<<<<
+ *     LINEAR    = TS_LINEAR
+ *     NONLINEAR = TS_NONLINEAR
+ */
+  __pyx_tuple__119 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__119)) __PYX_ERR(37, 39, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__119);
+  __Pyx_GIVEREF(__pyx_tuple__119);
+
+  /* "PETSc/TS.pyx":43
+ *     NONLINEAR = TS_NONLINEAR
+ * 
+ * class TSEquationType(object):             # <<<<<<<<<<<<<<
+ *     UNSPECIFIED               = TS_EQ_UNSPECIFIED
+ *     EXPLICIT                  = TS_EQ_EXPLICIT
+ */
+  __pyx_tuple__120 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__120)) __PYX_ERR(37, 43, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__120);
+  __Pyx_GIVEREF(__pyx_tuple__120);
+
+  /* "PETSc/TS.pyx":58
+ *     DAE_IMPLICIT_INDEXHI      = TS_EQ_DAE_IMPLICIT_INDEXHI
+ * 
+ * class TSExactFinalTime(object):             # <<<<<<<<<<<<<<
+ *     UNSPECIFIED = TS_EXACTFINALTIME_UNSPECIFIED
+ *     STEPOVER    = TS_EXACTFINALTIME_STEPOVER
+ */
+  __pyx_tuple__121 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__121)) __PYX_ERR(37, 58, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__121);
+  __Pyx_GIVEREF(__pyx_tuple__121);
+
+  /* "PETSc/TS.pyx":64
+ *     MATCHSTEP   = TS_EXACTFINALTIME_MATCHSTEP
+ * 
+ * class TSConvergedReason(object):             # <<<<<<<<<<<<<<
+ *     # iterating
+ *     CONVERGED_ITERATING      = TS_CONVERGED_ITERATING
+ */
+  __pyx_tuple__122 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__122)) __PYX_ERR(37, 64, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__122);
+  __Pyx_GIVEREF(__pyx_tuple__122);
+
+  /* "PETSc/AO.pyx":3
+ * # --------------------------------------------------------------------
+ * 
+ * class AOType(object):             # <<<<<<<<<<<<<<
+ *     BASIC          = S_(AOBASIC)
+ *     ADVANCED       = S_(AOADVANCED)
+ */
+  __pyx_tuple__123 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__123)) __PYX_ERR(39, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__123);
+  __Pyx_GIVEREF(__pyx_tuple__123);
+
+  /* "PETSc/DM.pyx":3
+ * # --------------------------------------------------------------------
+ * 
+ * class DMType(object):             # <<<<<<<<<<<<<<
+ *     DA        = S_(DMDA_type)
+ *     COMPOSITE = S_(DMCOMPOSITE)
+ */
+  __pyx_tuple__124 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__124)) __PYX_ERR(40, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__124);
+  __Pyx_GIVEREF(__pyx_tuple__124);
+
+  /* "PETSc/DM.pyx":15
+ *     NETWORK   = S_(DMNETWORK)
+ * 
+ * class DMBoundaryType(object):             # <<<<<<<<<<<<<<
+ *     NONE     = DM_BOUNDARY_NONE
+ *     GHOSTED  = DM_BOUNDARY_GHOSTED
+ */
+  __pyx_tuple__125 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__125)) __PYX_ERR(40, 15, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__125);
+  __Pyx_GIVEREF(__pyx_tuple__125);
+
+  /* "PETSc/DMDA.pyx":3
+ * # --------------------------------------------------------------------
+ * 
+ * class DMDAStencilType(object):             # <<<<<<<<<<<<<<
+ *     STAR = DMDA_STENCIL_STAR
+ *     BOX  = DMDA_STENCIL_BOX
+ */
+  __pyx_tuple__126 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__126)) __PYX_ERR(41, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__126);
+  __Pyx_GIVEREF(__pyx_tuple__126);
+
+  /* "PETSc/DMDA.pyx":7
+ *     BOX  = DMDA_STENCIL_BOX
+ * 
+ * class DMDAInterpolationType(object):             # <<<<<<<<<<<<<<
+ *     Q0 = DMDA_INTERPOLATION_Q0
+ *     Q1 = DMDA_INTERPOLATION_Q1
+ */
+  __pyx_tuple__127 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__127)) __PYX_ERR(41, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__127);
+  __Pyx_GIVEREF(__pyx_tuple__127);
+
+  /* "PETSc/DMDA.pyx":11
+ *     Q1 = DMDA_INTERPOLATION_Q1
+ * 
+ * class DMDAElementType(object):             # <<<<<<<<<<<<<<
+ *     P1 = DMDA_ELEMENT_P1
+ *     Q1 = DMDA_ELEMENT_Q1
+ */
+  __pyx_tuple__128 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__128)) __PYX_ERR(41, 11, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__128);
+  __Pyx_GIVEREF(__pyx_tuple__128);
+
+  /* "PETSc/SF.pyx":3
+ * # --------------------------------------------------------------------
+ * 
+ * class SFType(object):             # <<<<<<<<<<<<<<
+ *     BASIC  = S_(PETSCSFBASIC)
+ *     WINDOW = S_(PETSCSFWINDOW)
+ */
+  __pyx_tuple__129 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__129)) __PYX_ERR(45, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__129);
+  __Pyx_GIVEREF(__pyx_tuple__129);
+
+  /* "PETSc/Partitioner.pyx":3
+ * # --------------------------------------------------------------------
+ * 
+ * class PartitionerType(object):             # <<<<<<<<<<<<<<
+ *     CHACO    = S_(PETSCPARTITIONERCHACO)
+ *     PARMETIS = S_(PETSCPARTITIONERPARMETIS)
+ */
+  __pyx_tuple__130 = PyTuple_Pack(1, __pyx_builtin_object); if (unlikely(!__pyx_tuple__130)) __PYX_ERR(46, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__130);
+  __Pyx_GIVEREF(__pyx_tuple__130);
+
+  /* "PETSc/PETSc.pyx":421
  * # --------------------------------------------------------------------
  * 
  * def _initialize(args=None, comm=None):             # <<<<<<<<<<<<<<
  *     global tracebacklist
  *     Error._traceback_ = tracebacklist
  */
-  __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)
+  __pyx_tuple__131 = PyTuple_Pack(3, __pyx_n_s_args, __pyx_n_s_comm, __pyx_n_s_ready); if (unlikely(!__pyx_tuple__131)) __PYX_ERR(11, 421, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_tuple__131);
+  __Pyx_GIVEREF(__pyx_tuple__131);
+  __pyx_codeobj__132 = (PyObject*)__Pyx_PyCode_New(2, 0, 3, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_tuple__131, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_PETSc_PETSc_pyx, __pyx_n_s_initialize, 421, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__132)) __PYX_ERR(11, 421, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":433
+  /* "PETSc/PETSc.pyx":437
  *     PETSC_COMM_DEFAULT = PETSC_COMM_WORLD
  * 
  * def _finalize():             # <<<<<<<<<<<<<<
  *     finalize()
  *     #
  */
-  __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_codeobj__133 = (PyObject*)__Pyx_PyCode_New(0, 0, 0, 0, CO_OPTIMIZED|CO_NEWLOCALS, __pyx_empty_bytes, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_empty_tuple, __pyx_kp_s_PETSc_PETSc_pyx, __pyx_n_s_finalize, 437, __pyx_empty_bytes); if (unlikely(!__pyx_codeobj__133)) __PYX_ERR(11, 437, __pyx_L1_error)
   __Pyx_RefNannyFinishContext();
   return 0;
   __pyx_L1_error:;
@@ -246009,6 +266983,47 @@ PyMODINIT_FUNC initPETSc(void)
 #else
 PyMODINIT_FUNC PyInit_PETSc(void); /*proto*/
 PyMODINIT_FUNC PyInit_PETSc(void)
+#if CYTHON_PEP489_MULTI_PHASE_INIT
+{
+  return PyModuleDef_Init(&__pyx_moduledef);
+}
+static int __Pyx_copy_spec_to_module(PyObject *spec, PyObject *moddict, const char* from_name, const char* to_name) {
+    PyObject *value = PyObject_GetAttrString(spec, from_name);
+    int result = 0;
+    if (likely(value)) {
+        result = PyDict_SetItemString(moddict, to_name, value);
+        Py_DECREF(value);
+    } else if (PyErr_ExceptionMatches(PyExc_AttributeError)) {
+        PyErr_Clear();
+    } else {
+        result = -1;
+    }
+    return result;
+}
+static PyObject* __pyx_pymod_create(PyObject *spec, CYTHON_UNUSED PyModuleDef *def) {
+    PyObject *module = NULL, *moddict, *modname;
+    if (__pyx_m)
+        return __Pyx_NewRef(__pyx_m);
+    modname = PyObject_GetAttrString(spec, "name");
+    if (unlikely(!modname)) goto bad;
+    module = PyModule_NewObject(modname);
+    Py_DECREF(modname);
+    if (unlikely(!module)) goto bad;
+    moddict = PyModule_GetDict(module);
+    if (unlikely(!moddict)) goto bad;
+    if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "loader", "__loader__") < 0)) goto bad;
+    if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "origin", "__file__") < 0)) goto bad;
+    if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "parent", "__package__") < 0)) goto bad;
+    if (unlikely(__Pyx_copy_spec_to_module(spec, moddict, "submodule_search_locations", "__path__") < 0)) goto bad;
+    return module;
+bad:
+    Py_XDECREF(module);
+    return NULL;
+}
+
+
+static int __pyx_pymod_exec_PETSc(PyObject *__pyx_pyinit_module)
+#endif
 #endif
 {
   PyObject *__pyx_t_1 = NULL;
@@ -246018,8 +267033,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
   PyObject *__pyx_t_5 = NULL;
   PyObject *__pyx_t_6 = NULL;
   PyObject *__pyx_t_7 = NULL;
-  PyObject *__pyx_t_8 = NULL;
   __Pyx_RefNannyDeclarations
+  #if CYTHON_PEP489_MULTI_PHASE_INIT
+  if (__pyx_m && __pyx_m == __pyx_pyinit_module) return 0;
+  #endif
   #if CYTHON_REFNANNY
   __Pyx_RefNanny = __Pyx_RefNannyImportAPI("refnanny");
   if (!__Pyx_RefNanny) {
@@ -246046,6 +267063,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
   #ifdef __Pyx_Generator_USED
   if (__pyx_Generator_init() < 0) __PYX_ERR(48, 1, __pyx_L1_error)
   #endif
+  #ifdef __Pyx_AsyncGen_USED
+  if (__pyx_AsyncGen_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
@@ -246057,15 +267077,21 @@ PyMODINIT_FUNC PyInit_PETSc(void)
   #endif
   #endif
   /*--- Module creation code ---*/
+  #if CYTHON_PEP489_MULTI_PHASE_INIT
+  __pyx_m = __pyx_pyinit_module;
+  Py_INCREF(__pyx_m);
+  #else
   #if PY_MAJOR_VERSION < 3
   __pyx_m = Py_InitModule4("PETSc", __pyx_methods, 0, 0, PYTHON_API_VERSION); Py_XINCREF(__pyx_m);
   #else
   __pyx_m = PyModule_Create(&__pyx_moduledef);
   #endif
   if (unlikely(!__pyx_m)) __PYX_ERR(48, 1, __pyx_L1_error)
+  #endif
   __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_ERR(48, 1, __pyx_L1_error)
+  __pyx_cython_runtime = PyImport_AddModule((char *) "cython_runtime"); if (unlikely(!__pyx_cython_runtime)) __PYX_ERR(48, 1, __pyx_L1_error)
   #if CYTHON_COMPILING_IN_PYPY
   Py_INCREF(__pyx_b);
   #endif
@@ -246166,10 +267192,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
   __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_ERR(27, 74, __pyx_L1_error)
+  if (PyType_Ready(&PyPetscViewer_Type) < 0) __PYX_ERR(27, 73, __pyx_L1_error)
   PyPetscViewer_Type.tp_print = 0;
-  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 (__Pyx_SetVtable(PyPetscViewer_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_Viewer) < 0) __PYX_ERR(27, 73, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "Viewer", (PyObject *)&PyPetscViewer_Type) < 0) __PYX_ERR(27, 73, __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;
@@ -246193,10 +267219,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
   __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_ERR(29, 350, __pyx_L1_error)
+  if (PyType_Ready(&PyPetscLGMap_Type) < 0) __PYX_ERR(29, 355, __pyx_L1_error)
   PyPetscLGMap_Type.tp_print = 0;
-  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 (__Pyx_SetVtable(PyPetscLGMap_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_LGMap) < 0) __PYX_ERR(29, 355, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "LGMap", (PyObject *)&PyPetscLGMap_Type) < 0) __PYX_ERR(29, 355, __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;
@@ -246238,37 +267264,37 @@ PyMODINIT_FUNC PyInit_PETSc(void)
   __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_ERR(33, 148, __pyx_L1_error)
+  if (PyType_Ready(&PyPetscMat_Type) < 0) __PYX_ERR(33, 142, __pyx_L1_error)
   PyPetscMat_Type.tp_print = 0;
-  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 (__Pyx_SetVtable(PyPetscMat_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_Mat) < 0) __PYX_ERR(33, 142, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "Mat", (PyObject *)&PyPetscMat_Type) < 0) __PYX_ERR(33, 142, __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_ERR(33, 1461, __pyx_L1_error)
+  if (PyType_Ready(&PyPetscNullSpace_Type) < 0) __PYX_ERR(33, 1504, __pyx_L1_error)
   PyPetscNullSpace_Type.tp_print = 0;
-  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 (__Pyx_SetVtable(PyPetscNullSpace_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_NullSpace) < 0) __PYX_ERR(33, 1504, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "NullSpace", (PyObject *)&PyPetscNullSpace_Type) < 0) __PYX_ERR(33, 1504, __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_ERR(34, 104, __pyx_L1_error)
+  if (PyType_Ready(&PyPetscPC_Type) < 0) __PYX_ERR(34, 108, __pyx_L1_error)
   PyPetscPC_Type.tp_print = 0;
-  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 (__Pyx_SetVtable(PyPetscPC_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_PC) < 0) __PYX_ERR(34, 108, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "PC", (PyObject *)&PyPetscPC_Type) < 0) __PYX_ERR(34, 108, __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_ERR(35, 86, __pyx_L1_error)
+  if (PyType_Ready(&PyPetscKSP_Type) < 0) __PYX_ERR(35, 87, __pyx_L1_error)
   PyPetscKSP_Type.tp_print = 0;
-  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 (__Pyx_SetVtable(PyPetscKSP_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_KSP) < 0) __PYX_ERR(35, 87, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "KSP", (PyObject *)&PyPetscKSP_Type) < 0) __PYX_ERR(35, 87, __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;
@@ -246283,10 +267309,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
   __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_ERR(37, 69, __pyx_L1_error)
+  if (PyType_Ready(&PyPetscTS_Type) < 0) __PYX_ERR(37, 79, __pyx_L1_error)
   PyPetscTS_Type.tp_print = 0;
-  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 (__Pyx_SetVtable(PyPetscTS_Type.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_TS) < 0) __PYX_ERR(37, 79, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "TS", (PyObject *)&PyPetscTS_Type) < 0) __PYX_ERR(37, 79, __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;
@@ -246335,10 +267361,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_ERR(4, 113, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc__IS_buffer) < 0) __PYX_ERR(4, 119, __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_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)
+  if (__Pyx_SetVtable(__pyx_type_8petsc4py_5PETSc__IS_buffer.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc__IS_buffer) < 0) __PYX_ERR(4, 119, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "_IS_buffer", (PyObject *)&__pyx_type_8petsc4py_5PETSc__IS_buffer) < 0) __PYX_ERR(4, 119, __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;
@@ -246348,18 +267374,18 @@ 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_ERR(5, 413, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc__Vec_buffer) < 0) __PYX_ERR(5, 414, __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_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)
+  if (__Pyx_SetVtable(__pyx_type_8petsc4py_5PETSc__Vec_buffer.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc__Vec_buffer) < 0) __PYX_ERR(5, 414, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "_Vec_buffer", (PyObject *)&__pyx_type_8petsc4py_5PETSc__Vec_buffer) < 0) __PYX_ERR(5, 414, __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_ERR(5, 533, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc__Vec_LocalForm) < 0) __PYX_ERR(5, 534, __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_ERR(5, 533, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "_Vec_LocalForm", (PyObject *)&__pyx_type_8petsc4py_5PETSc__Vec_LocalForm) < 0) __PYX_ERR(5, 534, __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_ERR(6, 1017, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc__Mat_Stencil) < 0) __PYX_ERR(6, 1023, __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_ERR(6, 1017, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "_Mat_Stencil", (PyObject *)&__pyx_type_8petsc4py_5PETSc__Mat_Stencil) < 0) __PYX_ERR(6, 1023, __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;
@@ -246400,10 +267426,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
   __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_ERR(27, 322, __pyx_L1_error)
+  if (PyType_Ready(&__pyx_type_8petsc4py_5PETSc_ViewerHDF5) < 0) __PYX_ERR(27, 353, __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_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_SetVtable(__pyx_type_8petsc4py_5PETSc_ViewerHDF5.tp_dict, __pyx_vtabptr_8petsc4py_5PETSc_ViewerHDF5) < 0) __PYX_ERR(27, 353, __pyx_L1_error)
+  if (PyObject_SetAttrString(__pyx_m, "ViewerHDF5", (PyObject *)&__pyx_type_8petsc4py_5PETSc_ViewerHDF5) < 0) __PYX_ERR(27, 353, __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;
@@ -246464,71 +267490,71 @@ PyMODINIT_FUNC PyInit_PETSc(void)
   __Pyx_GIVEREF(__pyx_t_1);
   __pyx_t_1 = 0;
 
-  /* "PETSc/PETSc.pyx":106
+  /* "PETSc/PETSc.pyx":109
  * include "arraynpy.pxi"
  * 
  * import_array()             # <<<<<<<<<<<<<<
  * 
  * IntType     = PyArray_TypeObjectFromType(NPY_PETSC_INT)
  */
-  __pyx_t_2 = _import_array(); if (unlikely(__pyx_t_2 == -1)) __PYX_ERR(11, 106, __pyx_L1_error)
+  __pyx_t_2 = _import_array(); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(11, 109, __pyx_L1_error)
 
-  /* "PETSc/PETSc.pyx":108
+  /* "PETSc/PETSc.pyx":111
  * import_array()
  * 
  * IntType     = PyArray_TypeObjectFromType(NPY_PETSC_INT)             # <<<<<<<<<<<<<<
  * 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_ERR(11, 108, __pyx_L1_error)
+  __pyx_t_1 = PyArray_TypeObjectFromType(NPY_PETSC_INT); 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_IntType, __pyx_t_1) < 0) __PYX_ERR(11, 108, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_IntType, __pyx_t_1) < 0) __PYX_ERR(11, 111, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/PETSc.pyx":109
+  /* "PETSc/PETSc.pyx":112
  * 
  * IntType     = PyArray_TypeObjectFromType(NPY_PETSC_INT)
  * RealType    = PyArray_TypeObjectFromType(NPY_PETSC_REAL)             # <<<<<<<<<<<<<<
  * 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_ERR(11, 109, __pyx_L1_error)
+  __pyx_t_1 = PyArray_TypeObjectFromType(NPY_PETSC_REAL); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 112, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_RealType, __pyx_t_1) < 0) __PYX_ERR(11, 109, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_RealType, __pyx_t_1) < 0) __PYX_ERR(11, 112, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/PETSc.pyx":110
+  /* "PETSc/PETSc.pyx":113
  * IntType     = PyArray_TypeObjectFromType(NPY_PETSC_INT)
  * RealType    = PyArray_TypeObjectFromType(NPY_PETSC_REAL)
  * ScalarType  = PyArray_TypeObjectFromType(NPY_PETSC_SCALAR)             # <<<<<<<<<<<<<<
  * ComplexType = PyArray_TypeObjectFromType(NPY_PETSC_COMPLEX)
  * 
  */
-  __pyx_t_1 = PyArray_TypeObjectFromType(NPY_PETSC_SCALAR); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 110, __pyx_L1_error)
+  __pyx_t_1 = PyArray_TypeObjectFromType(NPY_PETSC_SCALAR); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 113, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ScalarType, __pyx_t_1) < 0) __PYX_ERR(11, 110, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ScalarType, __pyx_t_1) < 0) __PYX_ERR(11, 113, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/PETSc.pyx":111
+  /* "PETSc/PETSc.pyx":114
  * RealType    = PyArray_TypeObjectFromType(NPY_PETSC_REAL)
  * ScalarType  = PyArray_TypeObjectFromType(NPY_PETSC_SCALAR)
  * ComplexType = PyArray_TypeObjectFromType(NPY_PETSC_COMPLEX)             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-  __pyx_t_1 = PyArray_TypeObjectFromType(NPY_PETSC_COMPLEX); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 111, __pyx_L1_error)
+  __pyx_t_1 = PyArray_TypeObjectFromType(NPY_PETSC_COMPLEX); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 114, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ComplexType, __pyx_t_1) < 0) __PYX_ERR(11, 111, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ComplexType, __pyx_t_1) < 0) __PYX_ERR(11, 114, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/PETSc.pyx":145
+  /* "PETSc/PETSc.pyx":149
  * # --------------------------------------------------------------------
  * 
  * __doc__ = u"""             # <<<<<<<<<<<<<<
  * Portable, Extensible Toolkit for Scientific Computation
  * """
  */
-  if (PyDict_SetItem(__pyx_d, __pyx_n_s_doc, __pyx_kp_u_Portable_Extensible_Toolkit_for) < 0) __PYX_ERR(11, 145, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_doc, __pyx_kp_u_Portable_Extensible_Toolkit_for) < 0) __PYX_ERR(11, 149, __pyx_L1_error)
 
   /* "PETSc/Const.pyx":3
  * # --------------------------------------------------------------------
@@ -246609,15 +267635,10 @@ 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_ERR(0, 15, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__71); 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_ERR(0, 15, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__71, __pyx_n_s_InsertMode, __pyx_n_s_InsertMode, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); 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_ERR(0, 15, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_4);
 
   /* "PETSc/Const.pyx":17
  * class InsertMode(object):
@@ -246626,10 +267647,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     INSERT_VALUES     = PETSC_INSERT_VALUES
  *     ADD_VALUES        = PETSC_ADD_VALUES
  */
-  __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_ERR(0, 17, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_InsertMode(NOT_SET_VALUES); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 17, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NOT_SET_VALUES, __pyx_t_4) < 0) __PYX_ERR(0, 17, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":18
  *     # native
@@ -246638,10 +267659,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ADD_VALUES        = PETSC_ADD_VALUES
  *     MAX_VALUES        = PETSC_MAX_VALUES
  */
-  __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_ERR(0, 18, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_InsertMode(INSERT_VALUES); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 18, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_INSERT_VALUES, __pyx_t_4) < 0) __PYX_ERR(0, 18, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":19
  *     NOT_SET_VALUES    = PETSC_NOT_SET_VALUES
@@ -246650,10 +267671,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     MAX_VALUES        = PETSC_MAX_VALUES
  *     INSERT_ALL_VALUES = PETSC_INSERT_ALL_VALUES
  */
-  __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_ERR(0, 19, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_InsertMode(ADD_VALUES); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ADD_VALUES, __pyx_t_4) < 0) __PYX_ERR(0, 19, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":20
  *     INSERT_VALUES     = PETSC_INSERT_VALUES
@@ -246662,10 +267683,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     INSERT_ALL_VALUES = PETSC_INSERT_ALL_VALUES
  *     ADD_ALL_VALUES    = PETSC_ADD_ALL_VALUES
  */
-  __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_ERR(0, 20, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_InsertMode(MAX_VALUES); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 20, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MAX_VALUES, __pyx_t_4) < 0) __PYX_ERR(0, 20, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":21
  *     ADD_VALUES        = PETSC_ADD_VALUES
@@ -246674,10 +267695,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ADD_ALL_VALUES    = PETSC_ADD_ALL_VALUES
  *     INSERT_BC_VALUES  = PETSC_INSERT_BC_VALUES
  */
-  __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_ERR(0, 21, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_InsertMode(INSERT_ALL_VALUES); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 21, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_INSERT_ALL_VALUES, __pyx_t_4) < 0) __PYX_ERR(0, 21, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":22
  *     MAX_VALUES        = PETSC_MAX_VALUES
@@ -246686,10 +267707,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     INSERT_BC_VALUES  = PETSC_INSERT_BC_VALUES
  *     ADD_BC_VALUES     = PETSC_ADD_BC_VALUES
  */
-  __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_ERR(0, 22, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_InsertMode(ADD_ALL_VALUES); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 22, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ADD_ALL_VALUES, __pyx_t_4) < 0) __PYX_ERR(0, 22, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":23
  *     INSERT_ALL_VALUES = PETSC_INSERT_ALL_VALUES
@@ -246698,10 +267719,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ADD_BC_VALUES     = PETSC_ADD_BC_VALUES
  *     # aliases
  */
-  __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_ERR(0, 23, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_InsertMode(INSERT_BC_VALUES); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 23, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_INSERT_BC_VALUES, __pyx_t_4) < 0) __PYX_ERR(0, 23, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":24
  *     ADD_ALL_VALUES    = PETSC_ADD_ALL_VALUES
@@ -246710,10 +267731,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # aliases
  *     INSERT     = INSERT_VALUES
  */
-  __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_ERR(0, 24, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_InsertMode(ADD_BC_VALUES); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 24, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ADD_BC_VALUES, __pyx_t_4) < 0) __PYX_ERR(0, 24, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":26
  *     ADD_BC_VALUES     = PETSC_ADD_BC_VALUES
@@ -246722,15 +267743,15 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ADD        = ADD_VALUES
  *     MAX        = MAX_VALUES
  */
-  __pyx_t_5 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_INSERT_VALUES);
-  if (unlikely(!__pyx_t_5)) {
+  __pyx_t_4 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_INSERT_VALUES);
+  if (unlikely(!__pyx_t_4)) {
     PyErr_Clear();
-    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_INSERT_VALUES);
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_INSERT_VALUES);
   }
-  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_ERR(0, 26, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 26, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_INSERT, __pyx_t_4) < 0) __PYX_ERR(0, 26, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":27
  *     # aliases
@@ -246739,15 +267760,15 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     MAX        = MAX_VALUES
  *     INSERT_ALL = INSERT_ALL_VALUES
  */
-  __pyx_t_5 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_ADD_VALUES);
-  if (unlikely(!__pyx_t_5)) {
+  __pyx_t_4 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_ADD_VALUES);
+  if (unlikely(!__pyx_t_4)) {
     PyErr_Clear();
-    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_ADD_VALUES);
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_ADD_VALUES);
   }
-  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_ERR(0, 27, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 27, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ADD, __pyx_t_4) < 0) __PYX_ERR(0, 27, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":28
  *     INSERT     = INSERT_VALUES
@@ -246756,15 +267777,15 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     INSERT_ALL = INSERT_ALL_VALUES
  *     ADD_ALL    = ADD_ALL_VALUES
  */
-  __pyx_t_5 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_MAX_VALUES);
-  if (unlikely(!__pyx_t_5)) {
+  __pyx_t_4 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_MAX_VALUES);
+  if (unlikely(!__pyx_t_4)) {
     PyErr_Clear();
-    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_MAX_VALUES);
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_MAX_VALUES);
   }
-  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_ERR(0, 28, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 28, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MAX, __pyx_t_4) < 0) __PYX_ERR(0, 28, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":29
  *     ADD        = ADD_VALUES
@@ -246773,15 +267794,15 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ADD_ALL    = ADD_ALL_VALUES
  *     INSERT_BC  = INSERT_BC_VALUES
  */
-  __pyx_t_5 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_INSERT_ALL_VALUES);
-  if (unlikely(!__pyx_t_5)) {
+  __pyx_t_4 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_INSERT_ALL_VALUES);
+  if (unlikely(!__pyx_t_4)) {
     PyErr_Clear();
-    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_INSERT_ALL_VALUES);
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_INSERT_ALL_VALUES);
   }
-  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_ERR(0, 29, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 29, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_INSERT_ALL, __pyx_t_4) < 0) __PYX_ERR(0, 29, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":30
  *     MAX        = MAX_VALUES
@@ -246790,15 +267811,15 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     INSERT_BC  = INSERT_BC_VALUES
  *     ADD_BC     = ADD_BC_VALUES
  */
-  __pyx_t_5 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_ADD_ALL_VALUES);
-  if (unlikely(!__pyx_t_5)) {
+  __pyx_t_4 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_ADD_ALL_VALUES);
+  if (unlikely(!__pyx_t_4)) {
     PyErr_Clear();
-    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_ADD_ALL_VALUES);
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_ADD_ALL_VALUES);
   }
-  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_ERR(0, 30, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 30, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ADD_ALL, __pyx_t_4) < 0) __PYX_ERR(0, 30, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":31
  *     INSERT_ALL = INSERT_ALL_VALUES
@@ -246807,15 +267828,15 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ADD_BC     = ADD_BC_VALUES
  * 
  */
-  __pyx_t_5 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_INSERT_BC_VALUES);
-  if (unlikely(!__pyx_t_5)) {
+  __pyx_t_4 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_INSERT_BC_VALUES);
+  if (unlikely(!__pyx_t_4)) {
     PyErr_Clear();
-    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_INSERT_BC_VALUES);
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_INSERT_BC_VALUES);
   }
-  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_ERR(0, 31, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 31, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_INSERT_BC, __pyx_t_4) < 0) __PYX_ERR(0, 31, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":32
  *     ADD_ALL    = ADD_ALL_VALUES
@@ -246824,15 +267845,15 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * # --------------------------------------------------------------------
  */
-  __pyx_t_5 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_ADD_BC_VALUES);
-  if (unlikely(!__pyx_t_5)) {
+  __pyx_t_4 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_ADD_BC_VALUES);
+  if (unlikely(!__pyx_t_4)) {
     PyErr_Clear();
-    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_ADD_BC_VALUES);
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_ADD_BC_VALUES);
   }
-  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_ERR(0, 32, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 32, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ADD_BC, __pyx_t_4) < 0) __PYX_ERR(0, 32, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":15
  * # --------------------------------------------------------------------
@@ -246841,10 +267862,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_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_ERR(0, 15, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_InsertMode, __pyx_tuple__71, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 15, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_InsertMode, __pyx_t_4) < 0) __PYX_ERR(0, 15, __pyx_L1_error)
   __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;
@@ -246856,15 +267876,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # native
  *     SCATTER_FORWARD       = PETSC_SCATTER_FORWARD
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 36, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__72); 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_ERR(0, 36, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__72, __pyx_n_s_ScatterMode, __pyx_n_s_ScatterMode, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); 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_ERR(0, 36, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_4);
 
   /* "PETSc/Const.pyx":38
  * class ScatterMode(object):
@@ -246873,10 +267888,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     SCATTER_REVERSE       = PETSC_SCATTER_REVERSE
  *     SCATTER_FORWARD_LOCAL = PETSC_SCATTER_FORWARD_LOCAL
  */
-  __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_ERR(0, 38, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_ScatterMode(SCATTER_FORWARD); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 38, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SCATTER_FORWARD, __pyx_t_4) < 0) __PYX_ERR(0, 38, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":39
  *     # native
@@ -246885,10 +267900,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     SCATTER_FORWARD_LOCAL = PETSC_SCATTER_FORWARD_LOCAL
  *     SCATTER_REVERSE_LOCAL = PETSC_SCATTER_REVERSE_LOCAL
  */
-  __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_ERR(0, 39, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_ScatterMode(SCATTER_REVERSE); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 39, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SCATTER_REVERSE, __pyx_t_4) < 0) __PYX_ERR(0, 39, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":40
  *     SCATTER_FORWARD       = PETSC_SCATTER_FORWARD
@@ -246897,10 +267912,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     SCATTER_REVERSE_LOCAL = PETSC_SCATTER_REVERSE_LOCAL
  *     SCATTER_LOCAL         = PETSC_SCATTER_LOCAL
  */
-  __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_ERR(0, 40, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_ScatterMode(SCATTER_FORWARD_LOCAL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 40, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SCATTER_FORWARD_LOCAL, __pyx_t_4) < 0) __PYX_ERR(0, 40, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":41
  *     SCATTER_REVERSE       = PETSC_SCATTER_REVERSE
@@ -246909,10 +267924,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     SCATTER_LOCAL         = PETSC_SCATTER_LOCAL
  *     # aliases
  */
-  __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_ERR(0, 41, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_ScatterMode(SCATTER_REVERSE_LOCAL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 41, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SCATTER_REVERSE_LOCAL, __pyx_t_4) < 0) __PYX_ERR(0, 41, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":42
  *     SCATTER_FORWARD_LOCAL = PETSC_SCATTER_FORWARD_LOCAL
@@ -246921,10 +267936,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # aliases
  *     FORWARD       = SCATTER_FORWARD
  */
-  __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_ERR(0, 42, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_ScatterMode(SCATTER_LOCAL); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 42, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SCATTER_LOCAL, __pyx_t_4) < 0) __PYX_ERR(0, 42, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":44
  *     SCATTER_LOCAL         = PETSC_SCATTER_LOCAL
@@ -246933,15 +267948,15 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     REVERSE       = SCATTER_REVERSE
  *     FORWARD_LOCAL = SCATTER_FORWARD_LOCAL
  */
-  __pyx_t_5 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_SCATTER_FORWARD);
-  if (unlikely(!__pyx_t_5)) {
+  __pyx_t_4 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_SCATTER_FORWARD);
+  if (unlikely(!__pyx_t_4)) {
     PyErr_Clear();
-    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_SCATTER_FORWARD);
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_SCATTER_FORWARD);
   }
-  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_ERR(0, 44, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 44, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_FORWARD, __pyx_t_4) < 0) __PYX_ERR(0, 44, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":45
  *     # aliases
@@ -246950,15 +267965,15 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     FORWARD_LOCAL = SCATTER_FORWARD_LOCAL
  *     REVERSE_LOCAL = SCATTER_REVERSE_LOCAL
  */
-  __pyx_t_5 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_SCATTER_REVERSE);
-  if (unlikely(!__pyx_t_5)) {
+  __pyx_t_4 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_SCATTER_REVERSE);
+  if (unlikely(!__pyx_t_4)) {
     PyErr_Clear();
-    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_SCATTER_REVERSE);
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_SCATTER_REVERSE);
   }
-  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_ERR(0, 45, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 45, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_REVERSE, __pyx_t_4) < 0) __PYX_ERR(0, 45, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":46
  *     FORWARD       = SCATTER_FORWARD
@@ -246967,15 +267982,15 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     REVERSE_LOCAL = SCATTER_REVERSE_LOCAL
  * 
  */
-  __pyx_t_5 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_SCATTER_FORWARD_LOCAL);
-  if (unlikely(!__pyx_t_5)) {
+  __pyx_t_4 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_SCATTER_FORWARD_LOCAL);
+  if (unlikely(!__pyx_t_4)) {
     PyErr_Clear();
-    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_SCATTER_FORWARD_LOCAL);
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_SCATTER_FORWARD_LOCAL);
   }
-  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_ERR(0, 46, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 46, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_FORWARD_LOCAL, __pyx_t_4) < 0) __PYX_ERR(0, 46, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":47
  *     REVERSE       = SCATTER_REVERSE
@@ -246984,15 +267999,15 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * # --------------------------------------------------------------------
  */
-  __pyx_t_5 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_SCATTER_REVERSE_LOCAL);
-  if (unlikely(!__pyx_t_5)) {
+  __pyx_t_4 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_SCATTER_REVERSE_LOCAL);
+  if (unlikely(!__pyx_t_4)) {
     PyErr_Clear();
-    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_SCATTER_REVERSE_LOCAL);
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_SCATTER_REVERSE_LOCAL);
   }
-  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_ERR(0, 47, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 47, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_REVERSE_LOCAL, __pyx_t_4) < 0) __PYX_ERR(0, 47, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":36
  * # --------------------------------------------------------------------
@@ -247001,10 +268016,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_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_ERR(0, 36, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_ScatterMode, __pyx_tuple__72, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 36, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ScatterMode, __pyx_t_4) < 0) __PYX_ERR(0, 36, __pyx_L1_error)
   __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;
@@ -247016,15 +268030,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # native
  *     NORM_1         = PETSC_NORM_1
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(0, 51, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__73); 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_ERR(0, 51, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__73, __pyx_n_s_NormType, __pyx_n_s_NormType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); 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_ERR(0, 51, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_4);
 
   /* "PETSc/Const.pyx":53
  * class NormType(object):
@@ -247033,10 +268042,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NORM_2         = PETSC_NORM_2
  *     NORM_1_AND_2   = PETSC_NORM_1_AND_2
  */
-  __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_ERR(0, 53, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_NormType(NORM_1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 53, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NORM_1, __pyx_t_4) < 0) __PYX_ERR(0, 53, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":54
  *     # native
@@ -247045,10 +268054,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NORM_1_AND_2   = PETSC_NORM_1_AND_2
  *     NORM_FROBENIUS = PETSC_NORM_FROBENIUS
  */
-  __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_ERR(0, 54, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_NormType(NORM_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 54, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NORM_2, __pyx_t_4) < 0) __PYX_ERR(0, 54, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":55
  *     NORM_1         = PETSC_NORM_1
@@ -247057,10 +268066,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NORM_FROBENIUS = PETSC_NORM_FROBENIUS
  *     NORM_INFINITY  = PETSC_NORM_INFINITY
  */
-  __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_ERR(0, 55, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_NormType(NORM_1_AND_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 55, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NORM_1_AND_2, __pyx_t_4) < 0) __PYX_ERR(0, 55, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":56
  *     NORM_2         = PETSC_NORM_2
@@ -247069,10 +268078,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NORM_INFINITY  = PETSC_NORM_INFINITY
  *     NORM_MAX       = PETSC_NORM_MAX
  */
-  __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_ERR(0, 56, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_NormType(NORM_FROBENIUS); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 56, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NORM_FROBENIUS, __pyx_t_4) < 0) __PYX_ERR(0, 56, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":57
  *     NORM_1_AND_2   = PETSC_NORM_1_AND_2
@@ -247081,10 +268090,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NORM_MAX       = PETSC_NORM_MAX
  *     # aliases
  */
-  __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_ERR(0, 57, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_NormType(NORM_INFINITY); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 57, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NORM_INFINITY, __pyx_t_4) < 0) __PYX_ERR(0, 57, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":58
  *     NORM_FROBENIUS = PETSC_NORM_FROBENIUS
@@ -247093,10 +268102,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # aliases
  *     N1        = NORM_1
  */
-  __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_ERR(0, 58, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_NormType(NORM_MAX); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 58, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NORM_MAX, __pyx_t_4) < 0) __PYX_ERR(0, 58, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":60
  *     NORM_MAX       = PETSC_NORM_MAX
@@ -247105,15 +268114,15 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     N2        = NORM_2
  *     N12       = NORM_1_AND_2
  */
-  __pyx_t_5 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_1);
-  if (unlikely(!__pyx_t_5)) {
+  __pyx_t_4 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_NORM_1);
+  if (unlikely(!__pyx_t_4)) {
     PyErr_Clear();
-    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_1);
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_1);
   }
-  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_ERR(0, 60, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 60, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_N1, __pyx_t_4) < 0) __PYX_ERR(0, 60, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":61
  *     # aliases
@@ -247122,15 +268131,15 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     N12       = NORM_1_AND_2
  *     MAX       = NORM_MAX
  */
-  __pyx_t_5 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_2);
-  if (unlikely(!__pyx_t_5)) {
+  __pyx_t_4 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_NORM_2);
+  if (unlikely(!__pyx_t_4)) {
     PyErr_Clear();
-    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_2);
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_2);
   }
-  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_ERR(0, 61, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 61, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_N2, __pyx_t_4) < 0) __PYX_ERR(0, 61, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":62
  *     N1        = NORM_1
@@ -247139,15 +268148,15 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     MAX       = NORM_MAX
  *     FROBENIUS = NORM_FROBENIUS
  */
-  __pyx_t_5 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_1_AND_2);
-  if (unlikely(!__pyx_t_5)) {
+  __pyx_t_4 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_NORM_1_AND_2);
+  if (unlikely(!__pyx_t_4)) {
     PyErr_Clear();
-    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_1_AND_2);
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_1_AND_2);
   }
-  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_ERR(0, 62, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 62, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_N12, __pyx_t_4) < 0) __PYX_ERR(0, 62, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":63
  *     N2        = NORM_2
@@ -247156,15 +268165,15 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     FROBENIUS = NORM_FROBENIUS
  *     INFINITY  = NORM_INFINITY
  */
-  __pyx_t_5 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_MAX);
-  if (unlikely(!__pyx_t_5)) {
+  __pyx_t_4 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_NORM_MAX);
+  if (unlikely(!__pyx_t_4)) {
     PyErr_Clear();
-    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_MAX);
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_MAX);
   }
-  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_ERR(0, 63, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 63, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MAX, __pyx_t_4) < 0) __PYX_ERR(0, 63, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":64
  *     N12       = NORM_1_AND_2
@@ -247173,15 +268182,15 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     INFINITY  = NORM_INFINITY
  *     # extra aliases
  */
-  __pyx_t_5 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_FROBENIUS);
-  if (unlikely(!__pyx_t_5)) {
+  __pyx_t_4 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_NORM_FROBENIUS);
+  if (unlikely(!__pyx_t_4)) {
     PyErr_Clear();
-    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_FROBENIUS);
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_FROBENIUS);
   }
-  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_ERR(0, 64, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 64, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_FROBENIUS, __pyx_t_4) < 0) __PYX_ERR(0, 64, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":65
  *     MAX       = NORM_MAX
@@ -247190,15 +268199,15 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # extra aliases
  *     FRB = FROBENIUS
  */
-  __pyx_t_5 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_INFINITY);
-  if (unlikely(!__pyx_t_5)) {
+  __pyx_t_4 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_NORM_INFINITY);
+  if (unlikely(!__pyx_t_4)) {
     PyErr_Clear();
-    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_INFINITY);
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_INFINITY);
   }
-  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_ERR(0, 65, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 65, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_INFINITY, __pyx_t_4) < 0) __PYX_ERR(0, 65, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":67
  *     INFINITY  = NORM_INFINITY
@@ -247207,15 +268216,15 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     INF = INFINITY
  * 
  */
-  __pyx_t_5 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_FROBENIUS);
-  if (unlikely(!__pyx_t_5)) {
+  __pyx_t_4 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_FROBENIUS);
+  if (unlikely(!__pyx_t_4)) {
     PyErr_Clear();
-    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_FROBENIUS);
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_FROBENIUS);
   }
-  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_ERR(0, 67, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 67, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_FRB, __pyx_t_4) < 0) __PYX_ERR(0, 67, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":68
  *     # extra aliases
@@ -247224,15 +268233,15 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * # --------------------------------------------------------------------
  */
-  __pyx_t_5 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_INFINITY);
-  if (unlikely(!__pyx_t_5)) {
+  __pyx_t_4 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_INFINITY);
+  if (unlikely(!__pyx_t_4)) {
     PyErr_Clear();
-    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_INFINITY);
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_INFINITY);
   }
-  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_ERR(0, 68, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 68, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_INF, __pyx_t_4) < 0) __PYX_ERR(0, 68, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Const.pyx":51
  * # --------------------------------------------------------------------
@@ -247241,10 +268250,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_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_ERR(0, 51, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_NormType, __pyx_tuple__73, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(0, 51, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_NormType, __pyx_t_4) < 0) __PYX_ERR(0, 51, __pyx_L1_error)
   __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;
@@ -247256,15 +268264,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  *     _traceback_ = []
  */
-  __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 3, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__74); 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_ERR(1, 3, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__74, __pyx_n_s_Error, __pyx_n_s_Error, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); 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_ERR(1, 3, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_4);
 
   /* "PETSc/Error.pyx":5
  * class Error(RuntimeError):
@@ -247273,10 +268276,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  *     def __init__(self, int ierr=0):
  */
-  __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_ERR(1, 5, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = PyList_New(0); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 5, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_traceback, __pyx_t_4) < 0) __PYX_ERR(1, 5, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Error.pyx":7
  *     _traceback_ = []
@@ -247285,19 +268288,19 @@ 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_ERR(1, 7, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_5);
-  __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__69)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 7, __pyx_L1_error)
+  __pyx_t_4 = __Pyx_PyInt_From_int(((int)0)); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_5 = PyTuple_New(1); 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_ERR(1, 7, __pyx_L1_error)
+  __Pyx_GIVEREF(__pyx_t_4);
+  PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_t_4);
+  __pyx_t_4 = 0;
+  __pyx_t_4 = __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__76)); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __Pyx_CyFunction_SetDefaultsTuple(__pyx_t_4, __pyx_t_5);
   __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_init, __pyx_t_4) < 0) __PYX_ERR(1, 7, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Error.pyx":11
  *         RuntimeError.__init__(self, self.ierr)
@@ -247306,10 +268309,10 @@ 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__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_ERR(1, 11, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __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__78)); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 11, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_nonzero_2, __pyx_t_4) < 0) __PYX_ERR(1, 11, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Error.pyx":15
  *         return ierr != 0
@@ -247318,10 +268321,10 @@ 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__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_ERR(1, 15, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __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__80)); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 15, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_repr, __pyx_t_4) < 0) __PYX_ERR(1, 15, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Error.pyx":18
  *         return 'PETSc.Error(%d)' % self.ierr
@@ -247330,10 +268333,10 @@ 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__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_ERR(1, 18, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __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__82)); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 18, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_str, __pyx_t_4) < 0) __PYX_ERR(1, 18, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Error.pyx":3
  * # --------------------------------------------------------------------
@@ -247342,10 +268345,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_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_ERR(1, 3, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_Error, __pyx_tuple__74, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_Error, __pyx_t_4) < 0) __PYX_ERR(1, 3, __pyx_L1_error)
   __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;
@@ -247353,9 +268355,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
   /* "PETSc/Sys.pyx":6
  * 
  *     @classmethod
- *     def getVersion(cls, patch=False, devel=False,             # <<<<<<<<<<<<<<
- *                    date=False, author=False):
- *         cdef int cmajor = PETSC_VERSION_MAJOR
+ *     def getVersion(cls, devel=False, date=False, author=False):             # <<<<<<<<<<<<<<
+ *         cdef char cversion[256]
+ *         cdef PetscInt major=0, minor=0, micro=0, release=0
  */
   __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);
@@ -247364,8 +268366,8 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * cdef class Sys:
  * 
  *     @classmethod             # <<<<<<<<<<<<<<
- *     def getVersion(cls, patch=False, devel=False,
- *                    date=False, author=False):
+ *     def getVersion(cls, devel=False, date=False, author=False):
+ *         cdef char cversion[256]
  */
   __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);
@@ -247374,355 +268376,379 @@ PyMODINIT_FUNC PyInit_PETSc(void)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Sys);
 
-  /* "PETSc/Sys.pyx":33
+  /* "PETSc/Sys.pyx":30
  * 
  *     @classmethod
  *     def getVersionInfo(cls):             # <<<<<<<<<<<<<<
- *         cdef int cmajor = PETSC_VERSION_MAJOR
- *         cdef int cminor = PETSC_VERSION_MINOR
+ *         version, dev, date, author = cls.getVersion(True, True, True)
+ *         return dict(major      = version[0],
  */
-  __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_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_getVersionInfo); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 30, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
 
-  /* "PETSc/Sys.pyx":32
+  /* "PETSc/Sys.pyx":29
  *         return tuple(out)
  * 
  *     @classmethod             # <<<<<<<<<<<<<<
  *     def getVersionInfo(cls):
- *         cdef int cmajor = PETSC_VERSION_MAJOR
+ *         version, dev, date, author = cls.getVersion(True, True, True)
  */
-  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 32, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 29, __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_ERR(25, 33, __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, 30, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Sys);
 
-  /* "PETSc/Sys.pyx":54
+  /* "PETSc/Sys.pyx":42
  * 
  *     @classmethod
  *     def isInitialized(cls):             # <<<<<<<<<<<<<<
- *         return <bint>PetscInitializeCalled
+ *         return toBool(PetscInitializeCalled)
  * 
  */
-  __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_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_isInitialized); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 42, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
-  /* "PETSc/Sys.pyx":53
+  /* "PETSc/Sys.pyx":41
  *     # --- xxx ---
  * 
  *     @classmethod             # <<<<<<<<<<<<<<
  *     def isInitialized(cls):
- *         return <bint>PetscInitializeCalled
+ *         return toBool(PetscInitializeCalled)
  */
-  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 53, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 41, __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_ERR(25, 54, __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, 42, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Sys);
 
-  /* "PETSc/Sys.pyx":58
+  /* "PETSc/Sys.pyx":46
  * 
  *     @classmethod
  *     def isFinalized(cls):             # <<<<<<<<<<<<<<
- *         return <bint>PetscFinalizeCalled
+ *         return toBool(PetscFinalizeCalled)
  * 
  */
-  __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_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_isFinalized); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 46, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
 
-  /* "PETSc/Sys.pyx":57
- *         return <bint>PetscInitializeCalled
+  /* "PETSc/Sys.pyx":45
+ *         return toBool(PetscInitializeCalled)
  * 
  *     @classmethod             # <<<<<<<<<<<<<<
  *     def isFinalized(cls):
- *         return <bint>PetscFinalizeCalled
+ *         return toBool(PetscFinalizeCalled)
  */
-  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 57, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 45, __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_ERR(25, 58, __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, 46, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Sys);
 
-  /* "PETSc/Sys.pyx":64
+  /* "PETSc/Sys.pyx":52
  * 
  *     @classmethod
  *     def getDefaultComm(cls):             # <<<<<<<<<<<<<<
  *         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_ERR(25, 64, __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, 52, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
-  /* "PETSc/Sys.pyx":63
+  /* "PETSc/Sys.pyx":51
  *     # --- xxx ---
  * 
  *     @classmethod             # <<<<<<<<<<<<<<
  *     def getDefaultComm(cls):
  *         cdef Comm comm = Comm()
  */
-  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 63, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 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_Sys->tp_dict, __pyx_n_s_getDefaultComm, __pyx_t_3) < 0) __PYX_ERR(25, 64, __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, 52, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Sys);
 
-  /* "PETSc/Sys.pyx":70
+  /* "PETSc/Sys.pyx":58
  * 
  *     @classmethod
  *     def setDefaultComm(cls, comm):             # <<<<<<<<<<<<<<
  *         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_ERR(25, 70, __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, 58, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
 
-  /* "PETSc/Sys.pyx":69
+  /* "PETSc/Sys.pyx":57
  *         return comm
  * 
  *     @classmethod             # <<<<<<<<<<<<<<
  *     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_ERR(25, 69, __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_setDefaultComm, __pyx_t_1) < 0) __PYX_ERR(25, 70, __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, 58, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Sys);
 
-  /* "PETSc/Sys.pyx":80
+  /* "PETSc/Sys.pyx":68
  * 
  *     @classmethod
  *     def Print(cls, *args, **kargs):             # <<<<<<<<<<<<<<
  *         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_ERR(25, 80, __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, 68, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
-  /* "PETSc/Sys.pyx":79
+  /* "PETSc/Sys.pyx":67
  *     # --- xxx ---
  * 
  *     @classmethod             # <<<<<<<<<<<<<<
  *     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_ERR(25, 79, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 67, __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_ERR(25, 80, __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, 68, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Sys);
 
-  /* "PETSc/Sys.pyx":97
+  /* "PETSc/Sys.pyx":85
  * 
  *     @classmethod
  *     def syncPrint(cls, *args, **kargs):             # <<<<<<<<<<<<<<
  *         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_ERR(25, 97, __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, 85, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
 
-  /* "PETSc/Sys.pyx":96
+  /* "PETSc/Sys.pyx":84
  *         CHKERR( PetscPrintf(ccomm, m) )
  * 
  *     @classmethod             # <<<<<<<<<<<<<<
  *     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_ERR(25, 96, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 84, __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_ERR(25, 97, __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, 85, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Sys);
 
-  /* "PETSc/Sys.pyx":113
+  /* "PETSc/Sys.pyx":101
  * 
  *     @classmethod
  *     def syncFlush(cls, comm=None):             # <<<<<<<<<<<<<<
  *         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_ERR(25, 113, __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, 101, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
-  /* "PETSc/Sys.pyx":112
+  /* "PETSc/Sys.pyx":100
  *         if flush: CHKERR( PetscSynchronizedFlush(ccomm, PETSC_STDOUT) )
  * 
  *     @classmethod             # <<<<<<<<<<<<<<
  *     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_ERR(25, 112, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 100, __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_ERR(25, 113, __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, 101, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Sys);
 
-  /* "PETSc/Sys.pyx":120
+  /* "PETSc/Sys.pyx":108
  * 
  *     @classmethod
  *     def splitOwnership(cls, size, bsize=None, comm=None):             # <<<<<<<<<<<<<<
  *         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_ERR(25, 120, __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, 108, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
 
-  /* "PETSc/Sys.pyx":119
+  /* "PETSc/Sys.pyx":107
  *     # --- xxx ---
  * 
  *     @classmethod             # <<<<<<<<<<<<<<
  *     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_ERR(25, 119, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 107, __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_ERR(25, 120, __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, 108, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Sys);
 
-  /* "PETSc/Sys.pyx":133
+  /* "PETSc/Sys.pyx":121
  * 
  *     @classmethod
  *     def sleep(cls, seconds=1):             # <<<<<<<<<<<<<<
  *         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_ERR(25, 133, __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, 121, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
-  /* "PETSc/Sys.pyx":132
+  /* "PETSc/Sys.pyx":120
  *         return (toInt(n), toInt(N))
  * 
  *     @classmethod             # <<<<<<<<<<<<<<
  *     def sleep(cls, seconds=1):
  *         cdef int s = seconds
  */
-  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 132, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 120, __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_ERR(25, 133, __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, 121, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Sys);
 
-  /* "PETSc/Sys.pyx":140
+  /* "PETSc/Sys.pyx":128
  * 
  *     @classmethod
  *     def pushErrorHandler(cls, errhandler):             # <<<<<<<<<<<<<<
  *         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_ERR(25, 140, __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, 128, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_3);
 
-  /* "PETSc/Sys.pyx":139
+  /* "PETSc/Sys.pyx":127
  *     # --- xxx ---
  * 
  *     @classmethod             # <<<<<<<<<<<<<<
  *     def pushErrorHandler(cls, errhandler):
  *         cdef PetscErrorHandlerFunction handler = NULL
  */
-  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 139, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 127, __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_ERR(25, 140, __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, 128, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Sys);
 
-  /* "PETSc/Sys.pyx":164
+  /* "PETSc/Sys.pyx":152
  * 
  *     @classmethod
  *     def popErrorHandler(cls):             # <<<<<<<<<<<<<<
  *         CHKERR( PetscPopErrorHandler() )
  * 
  */
-  __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_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_popErrorHandler); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 152, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_1);
 
-  /* "PETSc/Sys.pyx":163
+  /* "PETSc/Sys.pyx":151
  * 
  * 
  *     @classmethod             # <<<<<<<<<<<<<<
  *     def popErrorHandler(cls):
  *         CHKERR( PetscPopErrorHandler() )
  */
-  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 163, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 151, __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)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys->tp_dict, __pyx_n_s_popErrorHandler, __pyx_t_3) < 0) __PYX_ERR(25, 152, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Sys);
 
-  /* "PETSc/Sys.pyx":168
+  /* "PETSc/Sys.pyx":156
+ * 
+ *     @classmethod
+ *     def popSignalHandler(cls):             # <<<<<<<<<<<<<<
+ *         CHKERR( PetscPopSignalHandler() )
+ * 
+ */
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_popSignalHandler); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 156, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+
+  /* "PETSc/Sys.pyx":155
+ *         CHKERR( PetscPopErrorHandler() )
+ * 
+ *     @classmethod             # <<<<<<<<<<<<<<
+ *     def popSignalHandler(cls):
+ *         CHKERR( PetscPopSignalHandler() )
+ */
+  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 155, __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_popSignalHandler, __pyx_t_1) < 0) __PYX_ERR(25, 156, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Sys);
+
+  /* "PETSc/Sys.pyx":160
  * 
  *     @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);
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_infoAllow); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 160, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
 
-  /* "PETSc/Sys.pyx":167
- *         CHKERR( PetscPopErrorHandler() )
+  /* "PETSc/Sys.pyx":159
+ *         CHKERR( PetscPopSignalHandler() )
  * 
  *     @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_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 159, __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_infoAllow, __pyx_t_3) < 0) __PYX_ERR(25, 160, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Sys);
 
-  /* "PETSc/Sys.pyx":174
+  /* "PETSc/Sys.pyx":166
  * 
  *     @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);
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Sys, __pyx_n_s_registerCitation); if (unlikely(!__pyx_t_3)) __PYX_ERR(25, 166, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
-  /* "PETSc/Sys.pyx":173
+  /* "PETSc/Sys.pyx":165
  *         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_registerCitation, __pyx_t_3) < 0) __PYX_ERR(25, 174, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 165, __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_registerCitation, __pyx_t_1) < 0) __PYX_ERR(25, 166, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Sys);
 
-  /* "PETSc/Sys.pyx":182
- *         set_citation(citation, <bint>set)
+  /* "PETSc/Sys.pyx":174
+ *         set_citation(citation, toBool(flag))
  * 
  * 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_t_1 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(25, 174, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
   __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;
+  __Pyx_DECREF_SET(__pyx_v_8petsc4py_5PETSc_citations_registry, ((PyObject*)__pyx_t_1));
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
 
   /* "PETSc/Log.pyx":6
  * 
@@ -247731,8 +268757,8 @@ 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_ERR(26, 6, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_Stage); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 6, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
 
   /* "PETSc/Log.pyx":5
  * cdef class Log:
@@ -247741,11 +268767,11 @@ 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_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_ERR(26, 6, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 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_Log->tp_dict, __pyx_n_s_Stage, __pyx_t_3) < 0) __PYX_ERR(26, 6, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Log);
 
   /* "PETSc/Log.pyx":20
@@ -247755,8 +268781,8 @@ 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_ERR(26, 20, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_Class); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 20, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/Log.pyx":19
  *         return stage
@@ -247765,11 +268791,11 @@ 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_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_ERR(26, 20, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 19, __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_Class, __pyx_t_1) < 0) __PYX_ERR(26, 20, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Log);
 
   /* "PETSc/Log.pyx":34
@@ -247779,8 +268805,8 @@ 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_ERR(26, 34, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_Event); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 34, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
 
   /* "PETSc/Log.pyx":33
  *         return klass
@@ -247789,11 +268815,11 @@ 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_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_ERR(26, 34, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 33, __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_Event, __pyx_t_3) < 0) __PYX_ERR(26, 34, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Log);
 
   /* "PETSc/Log.pyx":50
@@ -247803,8 +268829,8 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *         if all: CHKERR( PetscLogAllBegin() )
  *         else:   CHKERR( PetscLogDefaultBegin() )
  */
-  __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);
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_begin); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 50, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/Log.pyx":49
  *         return event
@@ -247813,11 +268839,11 @@ 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_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_ERR(26, 50, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 49, __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_begin, __pyx_t_1) < 0) __PYX_ERR(26, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Log);
 
   /* "PETSc/Log.pyx":55
@@ -247827,8 +268853,8 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *         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_ERR(26, 55, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_view); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 55, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
 
   /* "PETSc/Log.pyx":54
  *         else:   CHKERR( PetscLogDefaultBegin() )
@@ -247837,11 +268863,11 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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_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_ERR(26, 55, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 54, __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_view, __pyx_t_3) < 0) __PYX_ERR(26, 55, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Log);
 
   /* "PETSc/Log.pyx":62
@@ -247851,8 +268877,8 @@ 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_ERR(26, 62, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_destroy); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 62, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/Log.pyx":61
  *         CHKERR( PetscLogView(vwr) )
@@ -247861,11 +268887,11 @@ 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_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_ERR(26, 62, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 61, __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_destroy, __pyx_t_1) < 0) __PYX_ERR(26, 62, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Log);
 
   /* "PETSc/Log.pyx":66
@@ -247875,8 +268901,8 @@ 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_ERR(26, 66, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_logFlops); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 66, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
 
   /* "PETSc/Log.pyx":65
  *         CHKERR( PetscLogDestroy() )
@@ -247885,11 +268911,11 @@ 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_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_ERR(26, 66, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 65, __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_logFlops, __pyx_t_3) < 0) __PYX_ERR(26, 66, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Log);
 
   /* "PETSc/Log.pyx":71
@@ -247899,8 +268925,8 @@ 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_ERR(26, 71, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_addFlops); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 71, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/Log.pyx":70
  *         CHKERR( PetscLogFlops(cflops) )
@@ -247909,11 +268935,11 @@ 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_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_ERR(26, 71, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 70, __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_addFlops, __pyx_t_1) < 0) __PYX_ERR(26, 71, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Log);
 
   /* "PETSc/Log.pyx":76
@@ -247923,8 +268949,8 @@ 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_ERR(26, 76, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_getFlops); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 76, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
 
   /* "PETSc/Log.pyx":75
  *         CHKERR( PetscLogFlops(cflops) )
@@ -247933,11 +268959,11 @@ 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_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_ERR(26, 76, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 75, __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_getFlops, __pyx_t_3) < 0) __PYX_ERR(26, 76, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Log);
 
   /* "PETSc/Log.pyx":82
@@ -247947,8 +268973,8 @@ 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_ERR(26, 82, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_getTime); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 82, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/Log.pyx":81
  *         return cflops
@@ -247957,11 +268983,11 @@ 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_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_ERR(26, 82, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 81, __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_getTime, __pyx_t_1) < 0) __PYX_ERR(26, 82, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Log);
 
   /* "PETSc/Log.pyx":88
@@ -247971,8 +268997,8 @@ 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_ERR(26, 88, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Log, __pyx_n_s_getCPUTime); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 88, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
 
   /* "PETSc/Log.pyx":87
  *         return wctime
@@ -247981,11 +269007,11 @@ 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_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_ERR(26, 88, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 87, __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_getCPUTime, __pyx_t_3) < 0) __PYX_ERR(26, 88, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Log);
 
   /* "PETSc/Log.pyx":178
@@ -247995,12 +269021,12 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * cdef LogStage get_LogStage(object name):
  */
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 178, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 178, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
   __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;
+  __Pyx_DECREF_SET(__pyx_v_8petsc4py_5PETSc_stage_registry, ((PyObject*)__pyx_t_3));
+  __Pyx_GIVEREF(__pyx_t_3);
+  __pyx_t_3 = 0;
 
   /* "PETSc/Log.pyx":240
  * 
@@ -248009,12 +269035,12 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * cdef LogClass get_LogClass(object name):
  */
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 240, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 240, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
   __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;
+  __Pyx_DECREF_SET(__pyx_v_8petsc4py_5PETSc_class_registry, ((PyObject*)__pyx_t_3));
+  __Pyx_GIVEREF(__pyx_t_3);
+  __pyx_t_3 = 0;
 
   /* "PETSc/Log.pyx":358
  *         return info
@@ -248023,12 +269049,12 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * cdef LogEvent get_LogEvent(object name):
  */
-  __pyx_t_1 = PyDict_New(); if (unlikely(!__pyx_t_1)) __PYX_ERR(26, 358, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_PyDict_NewPresized(0); if (unlikely(!__pyx_t_3)) __PYX_ERR(26, 358, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
   __Pyx_XGOTREF(__pyx_v_8petsc4py_5PETSc_event_registry);
-  __Pyx_DECREF_SET(__pyx_v_8petsc4py_5PETSc_event_registry, ((PyObject*)__pyx_t_1));
-  __Pyx_GIVEREF(__pyx_t_1);
-  __pyx_t_1 = 0;
+  __Pyx_DECREF_SET(__pyx_v_8petsc4py_5PETSc_event_registry, ((PyObject*)__pyx_t_3));
+  __Pyx_GIVEREF(__pyx_t_3);
+  __pyx_t_3 = 0;
 
   /* "PETSc/Comm.pyx":109
  *     # --- mpi4py compatibility API ---
@@ -248037,10 +269063,10 @@ 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_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_ERR(9, 109, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm, __pyx_n_s_destroy); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 109, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm->tp_dict, __pyx_n_s_Free, __pyx_t_3) < 0) __PYX_ERR(9, 109, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Comm);
 
   /* "PETSc/Comm.pyx":110
@@ -248050,10 +269076,10 @@ 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_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_ERR(9, 110, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm, __pyx_n_s_duplicate); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 110, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm->tp_dict, __pyx_n_s_Clone, __pyx_t_3) < 0) __PYX_ERR(9, 110, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Comm);
 
   /* "PETSc/Comm.pyx":111
@@ -248063,10 +269089,10 @@ 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_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_ERR(9, 111, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm, __pyx_n_s_duplicate); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 111, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm->tp_dict, __pyx_n_s_Dup, __pyx_t_3) < 0) __PYX_ERR(9, 111, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Comm);
 
   /* "PETSc/Comm.pyx":112
@@ -248076,10 +269102,10 @@ 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_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_ERR(9, 112, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm, __pyx_n_s_getSize); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 112, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm->tp_dict, __pyx_n_s_Get_size, __pyx_t_3) < 0) __PYX_ERR(9, 112, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Comm);
 
   /* "PETSc/Comm.pyx":113
@@ -248089,10 +269115,10 @@ 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_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_ERR(9, 113, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm, __pyx_n_s_getRank); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 113, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm->tp_dict, __pyx_n_s_Get_rank, __pyx_t_3) < 0) __PYX_ERR(9, 113, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Comm);
 
   /* "PETSc/Comm.pyx":114
@@ -248102,10 +269128,10 @@ 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_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_ERR(9, 114, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm, __pyx_n_s_barrier); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 114, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm->tp_dict, __pyx_n_s_Barrier, __pyx_t_3) < 0) __PYX_ERR(9, 114, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Comm);
 
   /* "PETSc/Comm.pyx":118
@@ -248115,12 +269141,12 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * cdef Comm __COMM_SELF__  = Comm()
  * cdef Comm __COMM_WORLD__ = Comm()
  */
-  __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_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 118, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
   __Pyx_XGOTREF(((PyObject *)__pyx_v_8petsc4py_5PETSc___COMM_NULL__));
-  __Pyx_DECREF_SET(__pyx_v_8petsc4py_5PETSc___COMM_NULL__, ((struct PyPetscCommObject *)__pyx_t_1));
-  __Pyx_GIVEREF(__pyx_t_1);
-  __pyx_t_1 = 0;
+  __Pyx_DECREF_SET(__pyx_v_8petsc4py_5PETSc___COMM_NULL__, ((struct PyPetscCommObject *)__pyx_t_3));
+  __Pyx_GIVEREF(__pyx_t_3);
+  __pyx_t_3 = 0;
 
   /* "PETSc/Comm.pyx":119
  * 
@@ -248129,12 +269155,12 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * cdef Comm __COMM_WORLD__ = Comm()
  * 
  */
-  __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_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 119, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
   __Pyx_XGOTREF(((PyObject *)__pyx_v_8petsc4py_5PETSc___COMM_SELF__));
-  __Pyx_DECREF_SET(__pyx_v_8petsc4py_5PETSc___COMM_SELF__, ((struct PyPetscCommObject *)__pyx_t_1));
-  __Pyx_GIVEREF(__pyx_t_1);
-  __pyx_t_1 = 0;
+  __Pyx_DECREF_SET(__pyx_v_8petsc4py_5PETSc___COMM_SELF__, ((struct PyPetscCommObject *)__pyx_t_3));
+  __Pyx_GIVEREF(__pyx_t_3);
+  __pyx_t_3 = 0;
 
   /* "PETSc/Comm.pyx":120
  * cdef Comm __COMM_NULL__  = Comm()
@@ -248143,12 +269169,12 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * COMM_NULL  = __COMM_NULL__
  */
-  __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_t_3 = __Pyx_PyObject_Call(((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Comm), __pyx_empty_tuple, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(9, 120, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
   __Pyx_XGOTREF(((PyObject *)__pyx_v_8petsc4py_5PETSc___COMM_WORLD__));
-  __Pyx_DECREF_SET(__pyx_v_8petsc4py_5PETSc___COMM_WORLD__, ((struct PyPetscCommObject *)__pyx_t_1));
-  __Pyx_GIVEREF(__pyx_t_1);
-  __pyx_t_1 = 0;
+  __Pyx_DECREF_SET(__pyx_v_8petsc4py_5PETSc___COMM_WORLD__, ((struct PyPetscCommObject *)__pyx_t_3));
+  __Pyx_GIVEREF(__pyx_t_3);
+  __pyx_t_3 = 0;
 
   /* "PETSc/Comm.pyx":122
  * cdef Comm __COMM_WORLD__ = Comm()
@@ -248186,29 +269212,29 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  */
   __pyx_v_8petsc4py_5PETSc_PETSC_COMM_DEFAULT = MPI_COMM_NULL;
 
-  /* "PETSc/Object.pyx":242
+  /* "PETSc/Object.pyx":249
  * include "cyclicgc.pxi"
  * 
  * cdef dict type_registry = { 0 : None }             # <<<<<<<<<<<<<<
  * __type_registry__ = type_registry
  * 
  */
-  __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_ERR(10, 242, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(10, 249, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem(__pyx_t_3, __pyx_int_0, Py_None) < 0) __PYX_ERR(10, 249, __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;
+  __Pyx_DECREF_SET(__pyx_v_8petsc4py_5PETSc_type_registry, ((PyObject*)__pyx_t_3));
+  __Pyx_GIVEREF(__pyx_t_3);
+  __pyx_t_3 = 0;
 
-  /* "PETSc/Object.pyx":243
+  /* "PETSc/Object.pyx":250
  * 
  * 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_ERR(10, 243, __pyx_L1_error)
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_type_registry, __pyx_v_8petsc4py_5PETSc_type_registry) < 0) __PYX_ERR(10, 250, __pyx_L1_error)
 
   /* "PETSc/Viewer.pyx":3
  * # --------------------------------------------------------------------
@@ -248217,15 +269243,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     SOCKET      = S_(PETSCVIEWERSOCKET)
  *     ASCII       = S_(PETSCVIEWERASCII)
  */
-  __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_ERR(27, 3, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__83); 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_ERR(27, 3, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_1 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_tuple__83, __pyx_n_s_ViewerType, __pyx_n_s_ViewerType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
 
   /* "PETSc/Viewer.pyx":4
  * 
@@ -248234,10 +269255,10 @@ 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_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_ERR(27, 4, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERSOCKET); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_SOCKET, __pyx_t_4) < 0) __PYX_ERR(27, 4, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Viewer.pyx":5
  * class ViewerType(object):
@@ -248246,10 +269267,10 @@ 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_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_ERR(27, 5, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERASCII); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 5, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_ASCII, __pyx_t_4) < 0) __PYX_ERR(27, 5, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Viewer.pyx":6
  *     SOCKET      = S_(PETSCVIEWERSOCKET)
@@ -248258,10 +269279,10 @@ 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_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_ERR(27, 6, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERBINARY); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 6, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_BINARY, __pyx_t_4) < 0) __PYX_ERR(27, 6, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Viewer.pyx":7
  *     ASCII       = S_(PETSCVIEWERASCII)
@@ -248270,10 +269291,10 @@ 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_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_ERR(27, 7, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERSTRING); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_STRING, __pyx_t_4) < 0) __PYX_ERR(27, 7, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Viewer.pyx":8
  *     BINARY      = S_(PETSCVIEWERBINARY)
@@ -248282,10 +269303,10 @@ 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_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_ERR(27, 8, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERDRAW); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 8, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_DRAW, __pyx_t_4) < 0) __PYX_ERR(27, 8, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Viewer.pyx":9
  *     STRING      = S_(PETSCVIEWERSTRING)
@@ -248294,82 +269315,70 @@ 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_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_ERR(27, 9, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERVU); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 9, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_VU, __pyx_t_4) < 0) __PYX_ERR(27, 9, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Viewer.pyx":10
  *     DRAW        = S_(PETSCVIEWERDRAW)
  *     VU          = S_(PETSCVIEWERVU)
  *     MATHEMATICA = S_(PETSCVIEWERMATHEMATICA)             # <<<<<<<<<<<<<<
  *     HDF5        = S_(PETSCVIEWERHDF5)
- *     NETCDF      = S_(PETSCVIEWERNETCDF)
+ *     VTK         = S_(PETSCVIEWERVTK)
  */
-  __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_ERR(27, 10, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERMATHEMATICA); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 10, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_MATHEMATICA, __pyx_t_4) < 0) __PYX_ERR(27, 10, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Viewer.pyx":11
  *     VU          = S_(PETSCVIEWERVU)
  *     MATHEMATICA = S_(PETSCVIEWERMATHEMATICA)
  *     HDF5        = S_(PETSCVIEWERHDF5)             # <<<<<<<<<<<<<<
- *     NETCDF      = S_(PETSCVIEWERNETCDF)
  *     VTK         = S_(PETSCVIEWERVTK)
+ *     MATLAB      = S_(PETSCVIEWERMATLAB)
  */
-  __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_ERR(27, 11, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERHDF5); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 11, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_HDF5, __pyx_t_4) < 0) __PYX_ERR(27, 11, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Viewer.pyx":12
  *     MATHEMATICA = S_(PETSCVIEWERMATHEMATICA)
  *     HDF5        = S_(PETSCVIEWERHDF5)
- *     NETCDF      = S_(PETSCVIEWERNETCDF)             # <<<<<<<<<<<<<<
- *     VTK         = S_(PETSCVIEWERVTK)
- *     MATLAB      = S_(PETSCVIEWERMATLAB)
- */
-  __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_ERR(27, 12, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
-
-  /* "PETSc/Viewer.pyx":13
- *     HDF5        = S_(PETSCVIEWERHDF5)
- *     NETCDF      = S_(PETSCVIEWERNETCDF)
  *     VTK         = S_(PETSCVIEWERVTK)             # <<<<<<<<<<<<<<
  *     MATLAB      = S_(PETSCVIEWERMATLAB)
  *     SAWS        = S_(PETSCVIEWERSAWS)
  */
-  __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_ERR(27, 13, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERVTK); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 12, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_VTK, __pyx_t_4) < 0) __PYX_ERR(27, 12, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":14
- *     NETCDF      = S_(PETSCVIEWERNETCDF)
+  /* "PETSc/Viewer.pyx":13
+ *     HDF5        = S_(PETSCVIEWERHDF5)
  *     VTK         = S_(PETSCVIEWERVTK)
  *     MATLAB      = S_(PETSCVIEWERMATLAB)             # <<<<<<<<<<<<<<
  *     SAWS        = S_(PETSCVIEWERSAWS)
  * 
  */
-  __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_ERR(27, 14, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERMATLAB); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 13, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_MATLAB, __pyx_t_4) < 0) __PYX_ERR(27, 13, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":15
+  /* "PETSc/Viewer.pyx":14
  *     VTK         = S_(PETSCVIEWERVTK)
  *     MATLAB      = S_(PETSCVIEWERMATLAB)
  *     SAWS        = S_(PETSCVIEWERSAWS)             # <<<<<<<<<<<<<<
  * 
  * class ViewerFormat(object):
  */
-  __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_ERR(27, 15, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __pyx_f_8petsc4py_5PETSc_S_(PETSCVIEWERSAWS); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 14, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_SAWS, __pyx_t_4) < 0) __PYX_ERR(27, 14, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
   /* "PETSc/Viewer.pyx":3
  * # --------------------------------------------------------------------
@@ -248378,915 +269387,896 @@ 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_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_ERR(27, 3, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_ViewerType, __pyx_tuple__83, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ViewerType, __pyx_t_4) < 0) __PYX_ERR(27, 3, __pyx_L1_error)
   __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;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/Viewer.pyx":17
+  /* "PETSc/Viewer.pyx":16
  *     SAWS        = S_(PETSCVIEWERSAWS)
  * 
  * class ViewerFormat(object):             # <<<<<<<<<<<<<<
  *     DEFAULT           = PETSC_VIEWER_DEFAULT
  *     ASCII_MATLAB      = PETSC_VIEWER_ASCII_MATLAB
  */
-  __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_ERR(27, 17, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__84); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 16, __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_ERR(27, 17, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_1 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_tuple__84, __pyx_n_s_ViewerFormat, __pyx_n_s_ViewerFormat, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 16, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
 
-  /* "PETSc/Viewer.pyx":18
+  /* "PETSc/Viewer.pyx":17
  * 
  * class ViewerFormat(object):
  *     DEFAULT           = PETSC_VIEWER_DEFAULT             # <<<<<<<<<<<<<<
  *     ASCII_MATLAB      = PETSC_VIEWER_ASCII_MATLAB
  *     ASCII_MATHEMATICA = PETSC_VIEWER_ASCII_MATHEMATICA
  */
-  __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_ERR(27, 18, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_DEFAULT); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 17, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_DEFAULT, __pyx_t_4) < 0) __PYX_ERR(27, 17, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":19
+  /* "PETSc/Viewer.pyx":18
  * class ViewerFormat(object):
  *     DEFAULT           = PETSC_VIEWER_DEFAULT
  *     ASCII_MATLAB      = PETSC_VIEWER_ASCII_MATLAB             # <<<<<<<<<<<<<<
  *     ASCII_MATHEMATICA = PETSC_VIEWER_ASCII_MATHEMATICA
  *     ASCII_IMPL        = PETSC_VIEWER_ASCII_IMPL
  */
-  __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_ERR(27, 19, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_MATLAB); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 18, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_ASCII_MATLAB, __pyx_t_4) < 0) __PYX_ERR(27, 18, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":20
+  /* "PETSc/Viewer.pyx":19
  *     DEFAULT           = PETSC_VIEWER_DEFAULT
  *     ASCII_MATLAB      = PETSC_VIEWER_ASCII_MATLAB
  *     ASCII_MATHEMATICA = PETSC_VIEWER_ASCII_MATHEMATICA             # <<<<<<<<<<<<<<
  *     ASCII_IMPL        = PETSC_VIEWER_ASCII_IMPL
  *     ASCII_INFO        = PETSC_VIEWER_ASCII_INFO
  */
-  __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_ERR(27, 20, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_MATHEMATICA); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_ASCII_MATHEMATICA, __pyx_t_4) < 0) __PYX_ERR(27, 19, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":21
+  /* "PETSc/Viewer.pyx":20
  *     ASCII_MATLAB      = PETSC_VIEWER_ASCII_MATLAB
  *     ASCII_MATHEMATICA = PETSC_VIEWER_ASCII_MATHEMATICA
  *     ASCII_IMPL        = PETSC_VIEWER_ASCII_IMPL             # <<<<<<<<<<<<<<
  *     ASCII_INFO        = PETSC_VIEWER_ASCII_INFO
  *     ASCII_INFO_DETAIL = PETSC_VIEWER_ASCII_INFO_DETAIL
  */
-  __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_ERR(27, 21, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_IMPL); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 20, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_ASCII_IMPL, __pyx_t_4) < 0) __PYX_ERR(27, 20, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":22
+  /* "PETSc/Viewer.pyx":21
  *     ASCII_MATHEMATICA = PETSC_VIEWER_ASCII_MATHEMATICA
  *     ASCII_IMPL        = PETSC_VIEWER_ASCII_IMPL
  *     ASCII_INFO        = PETSC_VIEWER_ASCII_INFO             # <<<<<<<<<<<<<<
  *     ASCII_INFO_DETAIL = PETSC_VIEWER_ASCII_INFO_DETAIL
  *     ASCII_COMMON      = PETSC_VIEWER_ASCII_COMMON
  */
-  __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_ERR(27, 22, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_INFO); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 21, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_ASCII_INFO, __pyx_t_4) < 0) __PYX_ERR(27, 21, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":23
+  /* "PETSc/Viewer.pyx":22
  *     ASCII_IMPL        = PETSC_VIEWER_ASCII_IMPL
  *     ASCII_INFO        = PETSC_VIEWER_ASCII_INFO
  *     ASCII_INFO_DETAIL = PETSC_VIEWER_ASCII_INFO_DETAIL             # <<<<<<<<<<<<<<
  *     ASCII_COMMON      = PETSC_VIEWER_ASCII_COMMON
  *     ASCII_SYMMODU     = PETSC_VIEWER_ASCII_SYMMODU
  */
-  __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_ERR(27, 23, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_INFO_DETAIL); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 22, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_ASCII_INFO_DETAIL, __pyx_t_4) < 0) __PYX_ERR(27, 22, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":24
+  /* "PETSc/Viewer.pyx":23
  *     ASCII_INFO        = PETSC_VIEWER_ASCII_INFO
  *     ASCII_INFO_DETAIL = PETSC_VIEWER_ASCII_INFO_DETAIL
  *     ASCII_COMMON      = PETSC_VIEWER_ASCII_COMMON             # <<<<<<<<<<<<<<
  *     ASCII_SYMMODU     = PETSC_VIEWER_ASCII_SYMMODU
  *     ASCII_INDEX       = PETSC_VIEWER_ASCII_INDEX
  */
-  __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_ERR(27, 24, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_COMMON); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 23, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_ASCII_COMMON, __pyx_t_4) < 0) __PYX_ERR(27, 23, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":25
+  /* "PETSc/Viewer.pyx":24
  *     ASCII_INFO_DETAIL = PETSC_VIEWER_ASCII_INFO_DETAIL
  *     ASCII_COMMON      = PETSC_VIEWER_ASCII_COMMON
  *     ASCII_SYMMODU     = PETSC_VIEWER_ASCII_SYMMODU             # <<<<<<<<<<<<<<
  *     ASCII_INDEX       = PETSC_VIEWER_ASCII_INDEX
  *     ASCII_DENSE       = PETSC_VIEWER_ASCII_DENSE
  */
-  __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_ERR(27, 25, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_SYMMODU); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 24, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_ASCII_SYMMODU, __pyx_t_4) < 0) __PYX_ERR(27, 24, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":26
+  /* "PETSc/Viewer.pyx":25
  *     ASCII_COMMON      = PETSC_VIEWER_ASCII_COMMON
  *     ASCII_SYMMODU     = PETSC_VIEWER_ASCII_SYMMODU
  *     ASCII_INDEX       = PETSC_VIEWER_ASCII_INDEX             # <<<<<<<<<<<<<<
  *     ASCII_DENSE       = PETSC_VIEWER_ASCII_DENSE
  *     ASCII_MATRIXMARKET= PETSC_VIEWER_ASCII_MATRIXMARKET
  */
-  __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_ERR(27, 26, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_INDEX); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 25, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_ASCII_INDEX, __pyx_t_4) < 0) __PYX_ERR(27, 25, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":27
+  /* "PETSc/Viewer.pyx":26
  *     ASCII_SYMMODU     = PETSC_VIEWER_ASCII_SYMMODU
  *     ASCII_INDEX       = PETSC_VIEWER_ASCII_INDEX
  *     ASCII_DENSE       = PETSC_VIEWER_ASCII_DENSE             # <<<<<<<<<<<<<<
  *     ASCII_MATRIXMARKET= PETSC_VIEWER_ASCII_MATRIXMARKET
  *     ASCII_VTK         = PETSC_VIEWER_ASCII_VTK
  */
-  __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_ERR(27, 27, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_DENSE); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 26, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_ASCII_DENSE, __pyx_t_4) < 0) __PYX_ERR(27, 26, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":28
+  /* "PETSc/Viewer.pyx":27
  *     ASCII_INDEX       = PETSC_VIEWER_ASCII_INDEX
  *     ASCII_DENSE       = PETSC_VIEWER_ASCII_DENSE
  *     ASCII_MATRIXMARKET= PETSC_VIEWER_ASCII_MATRIXMARKET             # <<<<<<<<<<<<<<
  *     ASCII_VTK         = PETSC_VIEWER_ASCII_VTK
  *     ASCII_VTK_CELL    = PETSC_VIEWER_ASCII_VTK_CELL
  */
-  __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_ERR(27, 28, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_MATRIXMARKET); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 27, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_ASCII_MATRIXMARKET, __pyx_t_4) < 0) __PYX_ERR(27, 27, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":29
+  /* "PETSc/Viewer.pyx":28
  *     ASCII_DENSE       = PETSC_VIEWER_ASCII_DENSE
  *     ASCII_MATRIXMARKET= PETSC_VIEWER_ASCII_MATRIXMARKET
  *     ASCII_VTK         = PETSC_VIEWER_ASCII_VTK             # <<<<<<<<<<<<<<
  *     ASCII_VTK_CELL    = PETSC_VIEWER_ASCII_VTK_CELL
  *     ASCII_VTK_COORDS  = PETSC_VIEWER_ASCII_VTK_COORDS
  */
-  __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_ERR(27, 29, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_VTK); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 28, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_ASCII_VTK, __pyx_t_4) < 0) __PYX_ERR(27, 28, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":30
+  /* "PETSc/Viewer.pyx":29
  *     ASCII_MATRIXMARKET= PETSC_VIEWER_ASCII_MATRIXMARKET
  *     ASCII_VTK         = PETSC_VIEWER_ASCII_VTK
  *     ASCII_VTK_CELL    = PETSC_VIEWER_ASCII_VTK_CELL             # <<<<<<<<<<<<<<
  *     ASCII_VTK_COORDS  = PETSC_VIEWER_ASCII_VTK_COORDS
  *     ASCII_PCICE       = PETSC_VIEWER_ASCII_PCICE
  */
-  __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_ERR(27, 30, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_VTK_CELL); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 29, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_ASCII_VTK_CELL, __pyx_t_4) < 0) __PYX_ERR(27, 29, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":31
+  /* "PETSc/Viewer.pyx":30
  *     ASCII_VTK         = PETSC_VIEWER_ASCII_VTK
  *     ASCII_VTK_CELL    = PETSC_VIEWER_ASCII_VTK_CELL
  *     ASCII_VTK_COORDS  = PETSC_VIEWER_ASCII_VTK_COORDS             # <<<<<<<<<<<<<<
  *     ASCII_PCICE       = PETSC_VIEWER_ASCII_PCICE
  *     ASCII_PYTHON      = PETSC_VIEWER_ASCII_PYTHON
  */
-  __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_ERR(27, 31, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_VTK_COORDS); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 30, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_ASCII_VTK_COORDS, __pyx_t_4) < 0) __PYX_ERR(27, 30, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":32
+  /* "PETSc/Viewer.pyx":31
  *     ASCII_VTK_CELL    = PETSC_VIEWER_ASCII_VTK_CELL
  *     ASCII_VTK_COORDS  = PETSC_VIEWER_ASCII_VTK_COORDS
  *     ASCII_PCICE       = PETSC_VIEWER_ASCII_PCICE             # <<<<<<<<<<<<<<
  *     ASCII_PYTHON      = PETSC_VIEWER_ASCII_PYTHON
  *     ASCII_FACTOR_INFO = PETSC_VIEWER_ASCII_FACTOR_INFO
  */
-  __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_ERR(27, 32, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_PCICE); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 31, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_ASCII_PCICE, __pyx_t_4) < 0) __PYX_ERR(27, 31, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":33
+  /* "PETSc/Viewer.pyx":32
  *     ASCII_VTK_COORDS  = PETSC_VIEWER_ASCII_VTK_COORDS
  *     ASCII_PCICE       = PETSC_VIEWER_ASCII_PCICE
  *     ASCII_PYTHON      = PETSC_VIEWER_ASCII_PYTHON             # <<<<<<<<<<<<<<
  *     ASCII_FACTOR_INFO = PETSC_VIEWER_ASCII_FACTOR_INFO
  *     ASCII_LATEX       = PETSC_VIEWER_ASCII_LATEX
  */
-  __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_ERR(27, 33, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_PYTHON); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 32, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_ASCII_PYTHON, __pyx_t_4) < 0) __PYX_ERR(27, 32, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":34
+  /* "PETSc/Viewer.pyx":33
  *     ASCII_PCICE       = PETSC_VIEWER_ASCII_PCICE
  *     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
  */
-  __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_ERR(27, 34, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_FACTOR_INFO); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 33, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_ASCII_FACTOR_INFO, __pyx_t_4) < 0) __PYX_ERR(27, 33, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":35
+  /* "PETSc/Viewer.pyx":34
  *     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
  */
-  __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_ERR(27, 35, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_LATEX); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 34, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_ASCII_LATEX, __pyx_t_4) < 0) __PYX_ERR(27, 34, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":36
+  /* "PETSc/Viewer.pyx":35
  *     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 = __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_ASCII_XML, __pyx_t_5) < 0) __PYX_ERR(27, 36, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_ASCII_XML); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 35, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_ASCII_XML, __pyx_t_4) < 0) __PYX_ERR(27, 35, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":37
+  /* "PETSc/Viewer.pyx":36
  *     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;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_DRAW_BASIC); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 36, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_DRAW_BASIC, __pyx_t_4) < 0) __PYX_ERR(27, 36, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":38
+  /* "PETSc/Viewer.pyx":37
  *     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 = __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_ERR(27, 38, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_DRAW_LG); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 37, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_DRAW_LG, __pyx_t_4) < 0) __PYX_ERR(27, 37, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":39
+  /* "PETSc/Viewer.pyx":38
  *     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 = __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_ERR(27, 39, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_DRAW_CONTOUR); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 38, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_DRAW_CONTOUR, __pyx_t_4) < 0) __PYX_ERR(27, 38, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":40
+  /* "PETSc/Viewer.pyx":39
  *     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 = __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_ERR(27, 40, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_DRAW_PORTS); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 39, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_DRAW_PORTS, __pyx_t_4) < 0) __PYX_ERR(27, 39, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":41
+  /* "PETSc/Viewer.pyx":40
  *     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 = __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_ERR(27, 41, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_VTK_VTS); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 40, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_VTK_VTS, __pyx_t_4) < 0) __PYX_ERR(27, 40, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":42
+  /* "PETSc/Viewer.pyx":41
  *     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 = __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_ERR(27, 42, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_VTK_VTR); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 41, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_VTK_VTR, __pyx_t_4) < 0) __PYX_ERR(27, 41, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":43
+  /* "PETSc/Viewer.pyx":42
  *     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 = __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_ERR(27, 43, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_VTK_VTU); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 42, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_VTK_VTU, __pyx_t_4) < 0) __PYX_ERR(27, 42, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":44
+  /* "PETSc/Viewer.pyx":43
  *     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 = __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_ERR(27, 44, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_BINARY_MATLAB); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 43, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_BINARY_MATLAB, __pyx_t_4) < 0) __PYX_ERR(27, 43, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":45
+  /* "PETSc/Viewer.pyx":44
  *     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 = __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_ERR(27, 45, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_NATIVE); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 44, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_NATIVE, __pyx_t_4) < 0) __PYX_ERR(27, 44, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":46
+  /* "PETSc/Viewer.pyx":45
  *     BINARY_MATLAB     = PETSC_VIEWER_BINARY_MATLAB
  *     NATIVE            = PETSC_VIEWER_NATIVE
  *     HDF5_VIZ          = PETSC_VIEWER_HDF5_VIZ             # <<<<<<<<<<<<<<
  *     NOFORMAT          = PETSC_VIEWER_NOFORMAT
  * 
  */
-  __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_ERR(27, 46, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_HDF5_VIZ); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 45, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_HDF5_VIZ, __pyx_t_4) < 0) __PYX_ERR(27, 45, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":47
+  /* "PETSc/Viewer.pyx":46
  *     NATIVE            = PETSC_VIEWER_NATIVE
  *     HDF5_VIZ          = PETSC_VIEWER_HDF5_VIZ
  *     NOFORMAT          = PETSC_VIEWER_NOFORMAT             # <<<<<<<<<<<<<<
  * 
  * class FileMode(object):
  */
-  __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_ERR(27, 47, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscViewerFormat(PETSC_VIEWER_NOFORMAT); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 46, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_NOFORMAT, __pyx_t_4) < 0) __PYX_ERR(27, 46, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":17
+  /* "PETSc/Viewer.pyx":16
  *     SAWS        = S_(PETSCVIEWERSAWS)
  * 
  * class ViewerFormat(object):             # <<<<<<<<<<<<<<
  *     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_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_ERR(27, 17, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_ViewerFormat, __pyx_tuple__84, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 16, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ViewerFormat, __pyx_t_4) < 0) __PYX_ERR(27, 16, __pyx_L1_error)
   __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;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/Viewer.pyx":49
+  /* "PETSc/Viewer.pyx":48
  *     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_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_ERR(27, 49, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__85); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 48, __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_ERR(27, 49, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_1 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_tuple__85, __pyx_n_s_FileMode, __pyx_n_s_FileMode, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 48, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
 
-  /* "PETSc/Viewer.pyx":51
+  /* "PETSc/Viewer.pyx":50
  * class FileMode(object):
  *     # native
  *     READ          = PETSC_FILE_MODE_READ             # <<<<<<<<<<<<<<
  *     WRITE         = PETSC_FILE_MODE_WRITE
  *     APPEND        = PETSC_FILE_MODE_APPEND
  */
-  __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_ERR(27, 51, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscFileMode(FILE_MODE_READ); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 50, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_READ, __pyx_t_4) < 0) __PYX_ERR(27, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":52
+  /* "PETSc/Viewer.pyx":51
  *     # native
  *     READ          = PETSC_FILE_MODE_READ
  *     WRITE         = PETSC_FILE_MODE_WRITE             # <<<<<<<<<<<<<<
  *     APPEND        = PETSC_FILE_MODE_APPEND
  *     UPDATE        = PETSC_FILE_MODE_UPDATE
  */
-  __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_ERR(27, 52, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscFileMode(FILE_MODE_WRITE); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 51, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_WRITE, __pyx_t_4) < 0) __PYX_ERR(27, 51, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":53
+  /* "PETSc/Viewer.pyx":52
  *     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 = __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_ERR(27, 53, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscFileMode(FILE_MODE_APPEND); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 52, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_APPEND, __pyx_t_4) < 0) __PYX_ERR(27, 52, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":54
+  /* "PETSc/Viewer.pyx":53
  *     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 = __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_ERR(27, 54, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscFileMode(FILE_MODE_UPDATE); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 53, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_UPDATE, __pyx_t_4) < 0) __PYX_ERR(27, 53, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":55
+  /* "PETSc/Viewer.pyx":54
  *     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 = __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_ERR(27, 55, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+  __pyx_t_4 = __Pyx_PyInt_From_PetscFileMode(FILE_MODE_APPEND_UPDATE); if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 54, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_APPEND_UPDATE, __pyx_t_4) < 0) __PYX_ERR(27, 54, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
 
-  /* "PETSc/Viewer.pyx":57
+  /* "PETSc/Viewer.pyx":56
  *     APPEND_UPDATE = PETSC_FILE_MODE_APPEND_UPDATE
  *     # aliases
  *     R, W, A, U = READ, WRITE, APPEND, UPDATE             # <<<<<<<<<<<<<<
  *     AU = UA    = APPEND_UPDATE
  * 
  */
-  __pyx_t_5 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_READ);
+  __pyx_t_4 = PyObject_GetItem(__pyx_t_1, __pyx_n_s_READ);
+  if (unlikely(!__pyx_t_4)) {
+    PyErr_Clear();
+    __pyx_t_4 = __Pyx_GetModuleGlobalName(__pyx_n_s_READ);
+  }
+  if (unlikely(!__pyx_t_4)) __PYX_ERR(27, 56, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_5 = PyObject_GetItem(__pyx_t_1, __pyx_n_s_WRITE);
   if (unlikely(!__pyx_t_5)) {
     PyErr_Clear();
-    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_READ);
+    __pyx_t_5 = __Pyx_GetModuleGlobalName(__pyx_n_s_WRITE);
   }
-  if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 57, __pyx_L1_error)
+  if (unlikely(!__pyx_t_5)) __PYX_ERR(27, 56, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_5);
-  __pyx_t_6 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_WRITE);
+  __pyx_t_6 = PyObject_GetItem(__pyx_t_1, __pyx_n_s_APPEND);
   if (unlikely(!__pyx_t_6)) {
     PyErr_Clear();
-    __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_WRITE);
+    __pyx_t_6 = __Pyx_GetModuleGlobalName(__pyx_n_s_APPEND);
   }
-  if (unlikely(!__pyx_t_6)) __PYX_ERR(27, 57, __pyx_L1_error)
+  if (unlikely(!__pyx_t_6)) __PYX_ERR(27, 56, __pyx_L1_error)
   __Pyx_GOTREF(__pyx_t_6);
-  __pyx_t_7 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_APPEND);
+  __pyx_t_7 = PyObject_GetItem(__pyx_t_1, __pyx_n_s_UPDATE);
   if (unlikely(!__pyx_t_7)) {
     PyErr_Clear();
-    __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_APPEND);
+    __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_UPDATE);
   }
-  if (unlikely(!__pyx_t_7)) __PYX_ERR(27, 57, __pyx_L1_error)
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(27, 56, __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_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_ERR(27, 57, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_R, __pyx_t_4) < 0) __PYX_ERR(27, 56, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_W, __pyx_t_5) < 0) __PYX_ERR(27, 56, __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_ERR(27, 57, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_A, __pyx_t_6) < 0) __PYX_ERR(27, 56, __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_ERR(27, 57, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_U, __pyx_t_7) < 0) __PYX_ERR(27, 56, __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_ERR(27, 57, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
 
-  /* "PETSc/Viewer.pyx":58
+  /* "PETSc/Viewer.pyx":57
  *     # aliases
  *     R, W, A, U = READ, WRITE, APPEND, UPDATE
  *     AU = UA    = APPEND_UPDATE             # <<<<<<<<<<<<<<
  * 
  * class DrawSize(object):
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_APPEND_UPDATE);
-  if (unlikely(!__pyx_t_8)) {
+  __pyx_t_7 = PyObject_GetItem(__pyx_t_1, __pyx_n_s_APPEND_UPDATE);
+  if (unlikely(!__pyx_t_7)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_APPEND_UPDATE);
+    __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_APPEND_UPDATE);
   }
-  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_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;
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(27, 57, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_AU, __pyx_t_7) < 0) __PYX_ERR(27, 57, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_UA, __pyx_t_7) < 0) __PYX_ERR(27, 57, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Viewer.pyx":49
+  /* "PETSc/Viewer.pyx":48
  *     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_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_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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_FileMode, __pyx_tuple__85, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(27, 48, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_FileMode, __pyx_t_7) < 0) __PYX_ERR(27, 48, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/Viewer.pyx":60
+  /* "PETSc/Viewer.pyx":59
  *     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_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_ERR(27, 60, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__86); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 59, __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_ERR(27, 60, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_1 = __Pyx_Py3MetaclassPrepare(__pyx_t_3, __pyx_tuple__86, __pyx_n_s_DrawSize, __pyx_n_s_DrawSize, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 59, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
 
-  /* "PETSc/Viewer.pyx":62
+  /* "PETSc/Viewer.pyx":61
  * 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_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_ERR(27, 62, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_int(PETSC_DRAW_FULL_SIZE); if (unlikely(!__pyx_t_7)) __PYX_ERR(27, 61, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_FULL_SIZE, __pyx_t_7) < 0) __PYX_ERR(27, 61, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Viewer.pyx":63
+  /* "PETSc/Viewer.pyx":62
  *     # 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_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_ERR(27, 63, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_int(PETSC_DRAW_HALF_SIZE); if (unlikely(!__pyx_t_7)) __PYX_ERR(27, 62, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_HALF_SIZE, __pyx_t_7) < 0) __PYX_ERR(27, 62, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Viewer.pyx":64
+  /* "PETSc/Viewer.pyx":63
  *     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_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_ERR(27, 64, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_int(PETSC_DRAW_THIRD_SIZE); if (unlikely(!__pyx_t_7)) __PYX_ERR(27, 63, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_THIRD_SIZE, __pyx_t_7) < 0) __PYX_ERR(27, 63, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Viewer.pyx":65
+  /* "PETSc/Viewer.pyx":64
  *     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_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_ERR(27, 65, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_int(PETSC_DRAW_QUARTER_SIZE); if (unlikely(!__pyx_t_7)) __PYX_ERR(27, 64, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_QUARTER_SIZE, __pyx_t_7) < 0) __PYX_ERR(27, 64, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Viewer.pyx":67
+  /* "PETSc/Viewer.pyx":66
  *     QUARTER_SIZE = PETSC_DRAW_QUARTER_SIZE
  *     # aliases
  *     FULL    = FULL_SIZE             # <<<<<<<<<<<<<<
  *     HALF    = HALF_SIZE
  *     THIRD   = THIRD_SIZE
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_FULL_SIZE);
-  if (unlikely(!__pyx_t_8)) {
+  __pyx_t_7 = PyObject_GetItem(__pyx_t_1, __pyx_n_s_FULL_SIZE);
+  if (unlikely(!__pyx_t_7)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_FULL_SIZE);
+    __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_FULL_SIZE);
   }
-  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_ERR(27, 67, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(27, 66, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_FULL, __pyx_t_7) < 0) __PYX_ERR(27, 66, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Viewer.pyx":68
+  /* "PETSc/Viewer.pyx":67
  *     # aliases
  *     FULL    = FULL_SIZE
  *     HALF    = HALF_SIZE             # <<<<<<<<<<<<<<
  *     THIRD   = THIRD_SIZE
  *     QUARTER = QUARTER_SIZE
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_HALF_SIZE);
-  if (unlikely(!__pyx_t_8)) {
+  __pyx_t_7 = PyObject_GetItem(__pyx_t_1, __pyx_n_s_HALF_SIZE);
+  if (unlikely(!__pyx_t_7)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_HALF_SIZE);
+    __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_HALF_SIZE);
   }
-  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_ERR(27, 68, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(27, 67, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_HALF, __pyx_t_7) < 0) __PYX_ERR(27, 67, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Viewer.pyx":69
+  /* "PETSc/Viewer.pyx":68
  *     FULL    = FULL_SIZE
  *     HALF    = HALF_SIZE
  *     THIRD   = THIRD_SIZE             # <<<<<<<<<<<<<<
  *     QUARTER = QUARTER_SIZE
  * 
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_THIRD_SIZE);
-  if (unlikely(!__pyx_t_8)) {
+  __pyx_t_7 = PyObject_GetItem(__pyx_t_1, __pyx_n_s_THIRD_SIZE);
+  if (unlikely(!__pyx_t_7)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_THIRD_SIZE);
+    __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_THIRD_SIZE);
   }
-  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_ERR(27, 69, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(27, 68, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_THIRD, __pyx_t_7) < 0) __PYX_ERR(27, 68, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Viewer.pyx":70
+  /* "PETSc/Viewer.pyx":69
  *     HALF    = HALF_SIZE
  *     THIRD   = THIRD_SIZE
  *     QUARTER = QUARTER_SIZE             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_QUARTER_SIZE);
-  if (unlikely(!__pyx_t_8)) {
+  __pyx_t_7 = PyObject_GetItem(__pyx_t_1, __pyx_n_s_QUARTER_SIZE);
+  if (unlikely(!__pyx_t_7)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_QUARTER_SIZE);
+    __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_QUARTER_SIZE);
   }
-  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_ERR(27, 70, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(27, 69, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_QUARTER, __pyx_t_7) < 0) __PYX_ERR(27, 69, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Viewer.pyx":60
+  /* "PETSc/Viewer.pyx":59
  *     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_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_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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_3, __pyx_n_s_DrawSize, __pyx_tuple__86, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(27, 59, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DrawSize, __pyx_t_7) < 0) __PYX_ERR(27, 59, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
-  /* "PETSc/Viewer.pyx":76
+  /* "PETSc/Viewer.pyx":75
  * 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_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_ERR(27, 76, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_ViewerType); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 75, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer->tp_dict, __pyx_n_s_Type, __pyx_t_3) < 0) __PYX_ERR(27, 75, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Viewer);
 
-  /* "PETSc/Viewer.pyx":77
+  /* "PETSc/Viewer.pyx":76
  * 
  *     Type   = ViewerType
  *     Format = ViewerFormat             # <<<<<<<<<<<<<<
  *     Mode   = FileMode
  *     Size   = DrawSize
  */
-  __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_ERR(27, 77, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_ViewerFormat); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 76, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer->tp_dict, __pyx_n_s_Format, __pyx_t_3) < 0) __PYX_ERR(27, 76, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Viewer);
 
-  /* "PETSc/Viewer.pyx":78
+  /* "PETSc/Viewer.pyx":77
  *     Type   = ViewerType
  *     Format = ViewerFormat
  *     Mode   = FileMode             # <<<<<<<<<<<<<<
  *     Size   = DrawSize
  * 
  */
-  __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_ERR(27, 78, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_FileMode); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 77, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer->tp_dict, __pyx_n_s_Mode, __pyx_t_3) < 0) __PYX_ERR(27, 77, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Viewer);
 
-  /* "PETSc/Viewer.pyx":79
+  /* "PETSc/Viewer.pyx":78
  *     Format = ViewerFormat
  *     Mode   = FileMode
  *     Size   = DrawSize             # <<<<<<<<<<<<<<
  * 
  *     #
  */
-  __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_ERR(27, 79, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  __pyx_t_3 = __Pyx_GetModuleGlobalName(__pyx_n_s_DrawSize); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 78, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer->tp_dict, __pyx_n_s_Size, __pyx_t_3) < 0) __PYX_ERR(27, 78, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Viewer);
 
-  /* "PETSc/Viewer.pyx":234
+  /* "PETSc/Viewer.pyx":220
  * 
  *     @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_ERR(27, 234, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer, __pyx_n_s_STDOUT); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 220, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
-  /* "PETSc/Viewer.pyx":233
+  /* "PETSc/Viewer.pyx":219
  *         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_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_ERR(27, 234, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 219, __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_STDOUT, __pyx_t_1) < 0) __PYX_ERR(27, 220, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Viewer);
 
-  /* "PETSc/Viewer.pyx":242
+  /* "PETSc/Viewer.pyx":228
  * 
  *     @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_ERR(27, 242, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer, __pyx_n_s_STDERR); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 228, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
 
-  /* "PETSc/Viewer.pyx":241
+  /* "PETSc/Viewer.pyx":227
  *         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_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_ERR(27, 242, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 227, __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_STDERR, __pyx_t_3) < 0) __PYX_ERR(27, 228, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Viewer);
 
-  /* "PETSc/Viewer.pyx":250
+  /* "PETSc/Viewer.pyx":236
  * 
  *     @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_ERR(27, 250, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer, __pyx_n_s_ASCII); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 236, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
-  /* "PETSc/Viewer.pyx":249
+  /* "PETSc/Viewer.pyx":235
  *         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_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_ERR(27, 250, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 235, __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_ASCII, __pyx_t_1) < 0) __PYX_ERR(27, 236, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Viewer);
 
-  /* "PETSc/Viewer.pyx":259
+  /* "PETSc/Viewer.pyx":245
  * 
  *     @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_ERR(27, 259, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer, __pyx_n_s_BINARY); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 245, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
 
-  /* "PETSc/Viewer.pyx":258
+  /* "PETSc/Viewer.pyx":244
  *         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_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_ERR(27, 259, __pyx_L1_error)
+  __pyx_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 244, __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_BINARY, __pyx_t_3) < 0) __PYX_ERR(27, 245, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Viewer);
 
-  /* "PETSc/Viewer.pyx":267
+  /* "PETSc/Viewer.pyx":253
  * 
  *     @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_ERR(27, 267, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Viewer, __pyx_n_s_DRAW); if (unlikely(!__pyx_t_3)) __PYX_ERR(27, 253, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
-  /* "PETSc/Viewer.pyx":266
+  /* "PETSc/Viewer.pyx":252
  *         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_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_ERR(27, 267, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(27, 252, __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_DRAW, __pyx_t_1) < 0) __PYX_ERR(27, 253, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Viewer);
 
-  /* "PETSc/Viewer.pyx":363
+  /* "PETSc/Viewer.pyx":394
  * # --------------------------------------------------------------------
  * 
  * del ViewerType             # <<<<<<<<<<<<<<
  * del ViewerFormat
  * del FileMode
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_ViewerType) < 0) __PYX_ERR(27, 363, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_ViewerType) < 0) __PYX_ERR(27, 394, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":364
+  /* "PETSc/Viewer.pyx":395
  * 
  * del ViewerType
  * del ViewerFormat             # <<<<<<<<<<<<<<
  * del FileMode
  * del DrawSize
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_ViewerFormat) < 0) __PYX_ERR(27, 364, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_ViewerFormat) < 0) __PYX_ERR(27, 395, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":365
+  /* "PETSc/Viewer.pyx":396
  * del ViewerType
  * del ViewerFormat
  * del FileMode             # <<<<<<<<<<<<<<
  * del DrawSize
  * 
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_FileMode) < 0) __PYX_ERR(27, 365, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_FileMode) < 0) __PYX_ERR(27, 396, __pyx_L1_error)
 
-  /* "PETSc/Viewer.pyx":366
+  /* "PETSc/Viewer.pyx":397
  * del ViewerFormat
  * del FileMode
  * del DrawSize             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_DrawSize) < 0) __PYX_ERR(27, 366, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_DrawSize) < 0) __PYX_ERR(27, 397, __pyx_L1_error)
 
   /* "PETSc/Random.pyx":3
  * # --------------------------------------------------------------------
@@ -249295,15 +270285,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     RAND     = S_(PETSCRAND)
  *     RAND48   = S_(PETSCRAND48)
  */
-  __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_ERR(28, 3, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__87); 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_ERR(28, 3, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__87, __pyx_n_s_RandomType, __pyx_n_s_RandomType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(28, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/Random.pyx":4
  * 
@@ -249312,10 +270297,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     RAND48   = S_(PETSCRAND48)
  *     SPRNG    = S_(PETSCSPRNG)
  */
-  __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_ERR(28, 4, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PETSCRAND); if (unlikely(!__pyx_t_7)) __PYX_ERR(28, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_RAND, __pyx_t_7) < 0) __PYX_ERR(28, 4, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Random.pyx":5
  * class RandomType(object):
@@ -249324,10 +270309,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     SPRNG    = S_(PETSCSPRNG)
  *     RANDER48 = S_(PETSCRANDER48)
  */
-  __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_ERR(28, 5, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PETSCRAND48); if (unlikely(!__pyx_t_7)) __PYX_ERR(28, 5, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_RAND48, __pyx_t_7) < 0) __PYX_ERR(28, 5, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Random.pyx":6
  *     RAND     = S_(PETSCRAND)
@@ -249336,10 +270321,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PETSCSPRNG); if (unlikely(!__pyx_t_7)) __PYX_ERR(28, 6, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SPRNG, __pyx_t_7) < 0) __PYX_ERR(28, 6, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Random.pyx":7
  *     RAND48   = S_(PETSCRAND48)
@@ -249348,10 +270333,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * # --------------------------------------------------------------------
  */
-  __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_RANDER48, __pyx_t_8) < 0) __PYX_ERR(28, 7, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PETSCRANDER48); if (unlikely(!__pyx_t_7)) __PYX_ERR(28, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_RANDER48, __pyx_t_7) < 0) __PYX_ERR(28, 7, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Random.pyx":3
  * # --------------------------------------------------------------------
@@ -249360,13 +270345,12 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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_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_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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_RandomType, __pyx_tuple__87, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(28, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_RandomType, __pyx_t_7) < 0) __PYX_ERR(28, 3, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/Random.pyx":13
  * cdef class Random(Object):
@@ -249375,10 +270359,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  *     def __cinit__(self):
  */
-  __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_ERR(28, 13, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_RandomType); if (unlikely(!__pyx_t_1)) __PYX_ERR(28, 13, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Random->tp_dict, __pyx_n_s_Type, __pyx_t_1) < 0) __PYX_ERR(28, 13, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Random);
 
   /* "PETSc/Random.pyx":100
@@ -249397,15 +270381,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     GENERAL = S_(ISGENERAL)
  *     BLOCK   = S_(ISBLOCK)
  */
-  __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_ERR(29, 3, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__88); 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_ERR(29, 3, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__88, __pyx_n_s_ISType, __pyx_n_s_ISType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(29, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/IS.pyx":4
  * 
@@ -249414,10 +270393,10 @@ 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_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_ERR(29, 4, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(ISGENERAL); if (unlikely(!__pyx_t_7)) __PYX_ERR(29, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_GENERAL, __pyx_t_7) < 0) __PYX_ERR(29, 4, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/IS.pyx":5
  * class ISType(object):
@@ -249426,10 +270405,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     STRIDE  = S_(ISSTRIDE)
  * 
  */
-  __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_ERR(29, 5, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(ISBLOCK); if (unlikely(!__pyx_t_7)) __PYX_ERR(29, 5, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_BLOCK, __pyx_t_7) < 0) __PYX_ERR(29, 5, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/IS.pyx":6
  *     GENERAL = S_(ISGENERAL)
@@ -249438,10 +270417,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * # --------------------------------------------------------------------
  */
-  __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_ERR(29, 6, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(ISSTRIDE); if (unlikely(!__pyx_t_7)) __PYX_ERR(29, 6, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_STRIDE, __pyx_t_7) < 0) __PYX_ERR(29, 6, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/IS.pyx":3
  * # --------------------------------------------------------------------
@@ -249450,13 +270429,12 @@ 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_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_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;
+  __pyx_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_ISType, __pyx_tuple__88, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(29, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_ISType, __pyx_t_7) < 0) __PYX_ERR(29, 3, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/IS.pyx":12
  * cdef class IS(Object):
@@ -249465,98 +270443,163 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  *     #
  */
-  __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_ERR(29, 12, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_ISType); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 12, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_IS->tp_dict, __pyx_n_s_Type, __pyx_t_1) < 0) __PYX_ERR(29, 12, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_IS);
 
   /* "PETSc/IS.pyx":343
  * 
  * 
- * class GLMapType(object):             # <<<<<<<<<<<<<<
+ * class GLMapMode(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_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__89); 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);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__89, __pyx_n_s_GLMapMode, __pyx_n_s_GLMapMode, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(29, 343, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/IS.pyx":344
  * 
- * class GLMapType(object):
+ * class GLMapMode(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;
+  __pyx_t_7 = __Pyx_PyInt_From_ISGlobalToLocalMappingMode(IS_GTOLM_MASK); if (unlikely(!__pyx_t_7)) __PYX_ERR(29, 344, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MASK, __pyx_t_7) < 0) __PYX_ERR(29, 344, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/IS.pyx":345
- * class GLMapType(object):
+ * class GLMapMode(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;
+  __pyx_t_7 = __Pyx_PyInt_From_ISGlobalToLocalMappingMode(IS_GTOLM_DROP); if (unlikely(!__pyx_t_7)) __PYX_ERR(29, 345, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DROP, __pyx_t_7) < 0) __PYX_ERR(29, 345, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/IS.pyx":343
  * 
  * 
- * class GLMapType(object):             # <<<<<<<<<<<<<<
+ * class GLMapMode(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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_GLMapMode, __pyx_tuple__89, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(29, 343, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_GLMapMode, __pyx_t_7) < 0) __PYX_ERR(29, 343, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "PETSc/IS.pyx":348
+ * 
+ * 
+ * class LGMapType(object):             # <<<<<<<<<<<<<<
+ *     BASIC = S_(ISLOCALTOGLOBALMAPPINGBASIC)
+ *     HASH  = S_(ISLOCALTOGLOBALMAPPINGHASH)
+ */
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__90); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 348, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__90, __pyx_n_s_LGMapType, __pyx_n_s_LGMapType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(29, 348, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+
+  /* "PETSc/IS.pyx":349
+ * 
+ * class LGMapType(object):
+ *     BASIC = S_(ISLOCALTOGLOBALMAPPINGBASIC)             # <<<<<<<<<<<<<<
+ *     HASH  = S_(ISLOCALTOGLOBALMAPPINGHASH)
+ * 
+ */
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(ISLOCALTOGLOBALMAPPINGBASIC); if (unlikely(!__pyx_t_7)) __PYX_ERR(29, 349, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_BASIC, __pyx_t_7) < 0) __PYX_ERR(29, 349, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+
+  /* "PETSc/IS.pyx":350
+ * class LGMapType(object):
+ *     BASIC = S_(ISLOCALTOGLOBALMAPPINGBASIC)
+ *     HASH  = S_(ISLOCALTOGLOBALMAPPINGHASH)             # <<<<<<<<<<<<<<
+ * 
+ * 
+ */
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(ISLOCALTOGLOBALMAPPINGHASH); if (unlikely(!__pyx_t_7)) __PYX_ERR(29, 350, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_HASH, __pyx_t_7) < 0) __PYX_ERR(29, 350, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+
+  /* "PETSc/IS.pyx":348
+ * 
+ * 
+ * class LGMapType(object):             # <<<<<<<<<<<<<<
+ *     BASIC = S_(ISLOCALTOGLOBALMAPPINGBASIC)
+ *     HASH  = S_(ISLOCALTOGLOBALMAPPINGHASH)
+ */
+  __pyx_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_LGMapType, __pyx_tuple__90, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(29, 348, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_LGMapType, __pyx_t_7) < 0) __PYX_ERR(29, 348, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/IS.pyx":352
+  /* "PETSc/IS.pyx":357
  * cdef class LGMap(Object):
  * 
- *     MapType = GLMapType             # <<<<<<<<<<<<<<
+ *     MapMode = GLMapMode             # <<<<<<<<<<<<<<
  * 
+ *     Type = LGMapType
+ */
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_GLMapMode); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 357, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_LGMap->tp_dict, __pyx_n_s_MapMode, __pyx_t_1) < 0) __PYX_ERR(29, 357, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_LGMap);
+
+  /* "PETSc/IS.pyx":359
+ *     MapMode = GLMapMode
+ * 
+ *     Type = LGMapType             # <<<<<<<<<<<<<<
  *     #
+ * 
  */
-  __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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_LGMapType); if (unlikely(!__pyx_t_1)) __PYX_ERR(29, 359, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_LGMap->tp_dict, __pyx_n_s_Type, __pyx_t_1) < 0) __PYX_ERR(29, 359, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_LGMap);
 
-  /* "PETSc/IS.pyx":556
+  /* "PETSc/IS.pyx":570
  * # --------------------------------------------------------------------
  * 
  * del ISType             # <<<<<<<<<<<<<<
- * del GLMapType
- * 
+ * del GLMapMode
+ * del LGMapType
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_ISType) < 0) __PYX_ERR(29, 556, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_ISType) < 0) __PYX_ERR(29, 570, __pyx_L1_error)
 
-  /* "PETSc/IS.pyx":557
+  /* "PETSc/IS.pyx":571
  * 
  * del ISType
- * del GLMapType             # <<<<<<<<<<<<<<
- * 
+ * del GLMapMode             # <<<<<<<<<<<<<<
+ * del LGMapType
+ * # --------------------------------------------------------------------
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_GLMapMode) < 0) __PYX_ERR(29, 571, __pyx_L1_error)
+
+  /* "PETSc/IS.pyx":572
+ * del ISType
+ * del GLMapMode
+ * del LGMapType             # <<<<<<<<<<<<<<
  * # --------------------------------------------------------------------
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_GLMapType) < 0) __PYX_ERR(29, 557, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_LGMapType) < 0) __PYX_ERR(29, 572, __pyx_L1_error)
 
   /* "PETSc/Vec.pyx":3
  * # --------------------------------------------------------------------
@@ -249565,15 +270608,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__91); 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);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__91, __pyx_n_s_VecType, __pyx_n_s_VecType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/Vec.pyx":4
  * 
@@ -249582,10 +270620,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(VECSEQ); if (unlikely(!__pyx_t_7)) __PYX_ERR(30, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SEQ, __pyx_t_7) < 0) __PYX_ERR(30, 4, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Vec.pyx":5
  * class VecType(object):
@@ -249594,10 +270632,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(VECMPI); if (unlikely(!__pyx_t_7)) __PYX_ERR(30, 5, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MPI, __pyx_t_7) < 0) __PYX_ERR(30, 5, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Vec.pyx":6
  *     SEQ        = S_(VECSEQ)
@@ -249606,10 +270644,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(VECSTANDARD); if (unlikely(!__pyx_t_7)) __PYX_ERR(30, 6, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_STANDARD, __pyx_t_7) < 0) __PYX_ERR(30, 6, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Vec.pyx":7
  *     MPI        = S_(VECMPI)
@@ -249618,10 +270656,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(VECSHARED); if (unlikely(!__pyx_t_7)) __PYX_ERR(30, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SHARED, __pyx_t_7) < 0) __PYX_ERR(30, 7, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Vec.pyx":8
  *     STANDARD   = S_(VECSTANDARD)
@@ -249630,10 +270668,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(VECSEQCUSP); if (unlikely(!__pyx_t_7)) __PYX_ERR(30, 8, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SEQCUSP, __pyx_t_7) < 0) __PYX_ERR(30, 8, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Vec.pyx":9
  *     SHARED     = S_(VECSHARED)
@@ -249642,10 +270680,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(VECMPICUSP); if (unlikely(!__pyx_t_7)) __PYX_ERR(30, 9, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MPICUSP, __pyx_t_7) < 0) __PYX_ERR(30, 9, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Vec.pyx":10
  *     SEQCUSP    = S_(VECSEQCUSP)
@@ -249654,10 +270692,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(VECCUSP); if (unlikely(!__pyx_t_7)) __PYX_ERR(30, 10, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CUSP, __pyx_t_7) < 0) __PYX_ERR(30, 10, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Vec.pyx":11
  *     MPICUSP    = S_(VECMPICUSP)
@@ -249666,10 +270704,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(VECSEQVIENNACL); if (unlikely(!__pyx_t_7)) __PYX_ERR(30, 11, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SEQVIENNACL, __pyx_t_7) < 0) __PYX_ERR(30, 11, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Vec.pyx":12
  *     CUSP       = S_(VECCUSP)
@@ -249678,10 +270716,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(VECMPIVIENNACL); if (unlikely(!__pyx_t_7)) __PYX_ERR(30, 12, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MPIVIENNACL, __pyx_t_7) < 0) __PYX_ERR(30, 12, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Vec.pyx":13
  *     SEQVIENNACL= S_(VECSEQVIENNACL)
@@ -249690,10 +270728,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(VECVIENNACL); if (unlikely(!__pyx_t_7)) __PYX_ERR(30, 13, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_VIENNACL, __pyx_t_7) < 0) __PYX_ERR(30, 13, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Vec.pyx":14
  *     MPIVIENNACL= S_(VECMPIVIENNACL)
@@ -249702,10 +270740,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(VECSEQCUDA); if (unlikely(!__pyx_t_7)) __PYX_ERR(30, 14, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SEQCUSP, __pyx_t_7) < 0) __PYX_ERR(30, 14, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Vec.pyx":15
  *     VIENNACL   = S_(VECVIENNACL)
@@ -249714,10 +270752,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(VECMPICUDA); if (unlikely(!__pyx_t_7)) __PYX_ERR(30, 15, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MPICUSP, __pyx_t_7) < 0) __PYX_ERR(30, 15, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Vec.pyx":16
  *     SEQCUSP    = S_(VECSEQCUDA)
@@ -249726,10 +270764,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(VECCUDA); if (unlikely(!__pyx_t_7)) __PYX_ERR(30, 16, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CUSP, __pyx_t_7) < 0) __PYX_ERR(30, 16, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Vec.pyx":17
  *     MPICUSP    = S_(VECMPICUDA)
@@ -249738,10 +270776,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * 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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(VECNEST); if (unlikely(!__pyx_t_7)) __PYX_ERR(30, 17, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NEST, __pyx_t_7) < 0) __PYX_ERR(30, 17, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Vec.pyx":3
  * # --------------------------------------------------------------------
@@ -249750,13 +270788,12 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_VecType, __pyx_tuple__91, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(30, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_VecType, __pyx_t_7) < 0) __PYX_ERR(30, 3, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/Vec.pyx":19
  *     NEST       = S_(VECNEST)
@@ -249765,15 +270802,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__92); 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);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__92, __pyx_n_s_VecOption, __pyx_n_s_VecOption, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(30, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/Vec.pyx":20
  * 
@@ -249782,10 +270814,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __Pyx_PyInt_From_VecOption(VEC_IGNORE_OFF_PROC_ENTRIES); if (unlikely(!__pyx_t_7)) __PYX_ERR(30, 20, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_IGNORE_OFF_PROC_ENTRIES, __pyx_t_7) < 0) __PYX_ERR(30, 20, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Vec.pyx":21
  * class VecOption(object):
@@ -249794,10 +270826,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * # --------------------------------------------------------------------
  */
-  __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;
+  __pyx_t_7 = __Pyx_PyInt_From_VecOption(VEC_IGNORE_NEGATIVE_INDICES); if (unlikely(!__pyx_t_7)) __PYX_ERR(30, 21, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_IGNORE_NEGATIVE_INDICES, __pyx_t_7) < 0) __PYX_ERR(30, 21, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Vec.pyx":19
  *     NEST       = S_(VECNEST)
@@ -249806,13 +270838,12 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_VecOption, __pyx_tuple__92, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(30, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_VecOption, __pyx_t_7) < 0) __PYX_ERR(30, 19, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/Vec.pyx":27
  * cdef class Vec(Object):
@@ -249821,10 +270852,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_VecType); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 27, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec->tp_dict, __pyx_n_s_Type, __pyx_t_1) < 0) __PYX_ERR(30, 27, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Vec);
 
   /* "PETSc/Vec.pyx":28
@@ -249834,29 +270865,29 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  *     #
  */
-  __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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_VecOption); if (unlikely(!__pyx_t_1)) __PYX_ERR(30, 28, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Vec->tp_dict, __pyx_n_s_Option, __pyx_t_1) < 0) __PYX_ERR(30, 28, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Vec);
 
-  /* "PETSc/Vec.pyx":894
+  /* "PETSc/Vec.pyx":900
  * # --------------------------------------------------------------------
  * 
  * del VecType             # <<<<<<<<<<<<<<
  * del VecOption
  * 
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_VecType) < 0) __PYX_ERR(30, 894, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_VecType) < 0) __PYX_ERR(30, 900, __pyx_L1_error)
 
-  /* "PETSc/Vec.pyx":895
+  /* "PETSc/Vec.pyx":901
  * 
  * del VecType
  * del VecOption             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_VecOption) < 0) __PYX_ERR(30, 895, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_VecOption) < 0) __PYX_ERR(30, 901, __pyx_L1_error)
 
   /* "PETSc/Scatter.pyx":5
  * cdef class Scatter(Object):
@@ -249865,58 +270896,58 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  *     #
  */
-  __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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_ScatterMode); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 5, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Scatter->tp_dict, __pyx_n_s_Mode, __pyx_t_1) < 0) __PYX_ERR(31, 5, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Scatter);
 
   /* "PETSc/Scatter.pyx":44
  * 
  *     @classmethod
- *     def toAll(cls, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def toAll(cls, Vec vec):             # <<<<<<<<<<<<<<
  *         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);
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Scatter, __pyx_n_s_toAll); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 44, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
 
   /* "PETSc/Scatter.pyx":43
  *         return scatter
  * 
  *     @classmethod             # <<<<<<<<<<<<<<
- *     def toAll(cls, Vec vec not None):
+ *     def toAll(cls, Vec vec):
  *         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_t_3 = __Pyx_Method_ClassMethod(__pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 43, __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_toAll, __pyx_t_3) < 0) __PYX_ERR(31, 44, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Scatter);
 
   /* "PETSc/Scatter.pyx":52
  * 
  *     @classmethod
- *     def toZero(cls, Vec vec not None):             # <<<<<<<<<<<<<<
+ *     def toZero(cls, Vec vec):             # <<<<<<<<<<<<<<
  *         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);
+  __pyx_t_3 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Scatter, __pyx_n_s_toZero); if (unlikely(!__pyx_t_3)) __PYX_ERR(31, 52, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/Scatter.pyx":51
  *         return (scatter, ovec)
  * 
  *     @classmethod             # <<<<<<<<<<<<<<
- *     def toZero(cls, Vec vec not None):
+ *     def toZero(cls, Vec vec):
  *         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_t_1 = __Pyx_Method_ClassMethod(__pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(31, 51, __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_toZero, __pyx_t_1) < 0) __PYX_ERR(31, 52, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Scatter);
 
   /* "PETSc/Mat.pyx":3
@@ -249926,15 +270957,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__93); 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);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__93, __pyx_n_s_MatType, __pyx_n_s_MatType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/Mat.pyx":4
  * 
@@ -249943,10 +270969,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATSAME); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SAME, __pyx_t_7) < 0) __PYX_ERR(33, 4, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":5
  * class MatType(object):
@@ -249955,10 +270981,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATMAIJ); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 5, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MAIJ, __pyx_t_7) < 0) __PYX_ERR(33, 5, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":6
  *     SAME            = S_(MATSAME)
@@ -249967,10 +270993,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQMAIJ); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 6, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SEQMAIJ, __pyx_t_7) < 0) __PYX_ERR(33, 6, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":7
  *     MAIJ            = S_(MATMAIJ)
@@ -249979,10 +271005,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIMAIJ); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MPIMAIJ, __pyx_t_7) < 0) __PYX_ERR(33, 7, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":8
  *     SEQMAIJ         = S_(MATSEQMAIJ)
@@ -249991,10 +271017,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATIS); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 8, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_IS, __pyx_t_7) < 0) __PYX_ERR(33, 8, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":9
  *     MPIMAIJ         = S_(MATMPIMAIJ)
@@ -250003,10 +271029,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATAIJ); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 9, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_AIJ, __pyx_t_7) < 0) __PYX_ERR(33, 9, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":10
  *     IS              = S_(MATIS)
@@ -250015,10 +271041,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQAIJ); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 10, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SEQAIJ, __pyx_t_7) < 0) __PYX_ERR(33, 10, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":11
  *     AIJ             = S_(MATAIJ)
@@ -250027,10 +271053,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIAIJ); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 11, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MPIAIJ, __pyx_t_7) < 0) __PYX_ERR(33, 11, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":12
  *     SEQAIJ          = S_(MATSEQAIJ)
@@ -250039,10 +271065,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATAIJCRL); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 12, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_AIJCRL, __pyx_t_7) < 0) __PYX_ERR(33, 12, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":13
  *     MPIAIJ          = S_(MATMPIAIJ)
@@ -250051,10 +271077,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQAIJCRL); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 13, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SEQAIJCRL, __pyx_t_7) < 0) __PYX_ERR(33, 13, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":14
  *     AIJCRL          = S_(MATAIJCRL)
@@ -250063,10 +271089,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIAIJCRL); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 14, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MPIAIJCRL, __pyx_t_7) < 0) __PYX_ERR(33, 14, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":15
  *     SEQAIJCRL       = S_(MATSEQAIJCRL)
@@ -250075,10 +271101,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATAIJCUSP); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 15, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_AIJCUSP, __pyx_t_7) < 0) __PYX_ERR(33, 15, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":16
  *     MPIAIJCRL       = S_(MATMPIAIJCRL)
@@ -250087,10 +271113,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQAIJCUSP); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 16, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SEQAIJCUSP, __pyx_t_7) < 0) __PYX_ERR(33, 16, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":17
  *     AIJCUSP         = S_(MATAIJCUSP)
@@ -250099,10 +271125,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIAIJCUSP); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 17, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MPIAIJCUSP, __pyx_t_7) < 0) __PYX_ERR(33, 17, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":18
  *     SEQAIJCUSP      = S_(MATSEQAIJCUSP)
@@ -250111,10 +271137,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATAIJCUSPARSE); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 18, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_AIJCUSPARSE, __pyx_t_7) < 0) __PYX_ERR(33, 18, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":19
  *     MPIAIJCUSP      = S_(MATMPIAIJCUSP)
@@ -250123,10 +271149,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQAIJCUSPARSE); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SEQAIJCUSPARSE, __pyx_t_7) < 0) __PYX_ERR(33, 19, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":20
  *     AIJCUSPARSE     = S_(MATAIJCUSPARSE)
@@ -250135,10 +271161,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIAIJCUSPARSE); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 20, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MPIAIJCUSPARSE, __pyx_t_7) < 0) __PYX_ERR(33, 20, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":21
  *     SEQAIJCUSPARSE  = S_(MATSEQAIJCUSPARSE)
@@ -250147,10 +271173,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATAIJVIENNACL); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 21, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_AIJVIENNACL, __pyx_t_7) < 0) __PYX_ERR(33, 21, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":22
  *     MPIAIJCUSPARSE  = S_(MATMPIAIJCUSPARSE)
@@ -250159,10 +271185,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQAIJVIENNACL); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 22, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SEQAIJVIENNACL, __pyx_t_7) < 0) __PYX_ERR(33, 22, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":23
  *     AIJVIENNACL     = S_(MATAIJVIENNACL)
@@ -250171,10 +271197,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIAIJVIENNACL); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 23, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MPIAIJVIENNACL, __pyx_t_7) < 0) __PYX_ERR(33, 23, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":24
  *     SEQAIJVIENNACL  = S_(MATSEQAIJVIENNACL)
@@ -250183,10 +271209,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATAIJPERM); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 24, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_AIJPERM, __pyx_t_7) < 0) __PYX_ERR(33, 24, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":25
  *     MPIAIJVIENNACL  = S_(MATMPIAIJVIENNACL)
@@ -250195,10 +271221,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQAIJPERM); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 25, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SEQAIJPERM, __pyx_t_7) < 0) __PYX_ERR(33, 25, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":26
  *     AIJPERM         = S_(MATAIJPERM)
@@ -250207,10 +271233,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIAIJPERM); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 26, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MPIAIJPERM, __pyx_t_7) < 0) __PYX_ERR(33, 26, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":27
  *     SEQAIJPERM      = S_(MATSEQAIJPERM)
@@ -250219,10 +271245,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATSHELL); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 27, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SHELL, __pyx_t_7) < 0) __PYX_ERR(33, 27, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":28
  *     MPIAIJPERM      = S_(MATMPIAIJPERM)
@@ -250231,10 +271257,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATDENSE); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 28, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DENSE, __pyx_t_7) < 0) __PYX_ERR(33, 28, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":29
  *     SHELL           = S_(MATSHELL)
@@ -250243,10 +271269,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQDENSE); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 29, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SEQDENSE, __pyx_t_7) < 0) __PYX_ERR(33, 29, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":30
  *     DENSE           = S_(MATDENSE)
@@ -250255,10 +271281,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIDENSE); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 30, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MPIDENSE, __pyx_t_7) < 0) __PYX_ERR(33, 30, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":31
  *     SEQDENSE        = S_(MATSEQDENSE)
@@ -250267,10 +271293,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATELEMENTAL); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 31, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ELEMENTAL, __pyx_t_7) < 0) __PYX_ERR(33, 31, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":32
  *     MPIDENSE        = S_(MATMPIDENSE)
@@ -250279,10 +271305,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATBAIJ); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 32, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_BAIJ, __pyx_t_7) < 0) __PYX_ERR(33, 32, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":33
  *     ELEMENTAL       = S_(MATELEMENTAL)
@@ -250291,10 +271317,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQBAIJ); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 33, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SEQBAIJ, __pyx_t_7) < 0) __PYX_ERR(33, 33, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":34
  *     BAIJ            = S_(MATBAIJ)
@@ -250303,10 +271329,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIBAIJ); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 34, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MPIBAIJ, __pyx_t_7) < 0) __PYX_ERR(33, 34, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":35
  *     SEQBAIJ         = S_(MATSEQBAIJ)
@@ -250315,10 +271341,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATMPIADJ); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 35, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MPIADJ, __pyx_t_7) < 0) __PYX_ERR(33, 35, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":36
  *     MPIBAIJ         = S_(MATMPIBAIJ)
@@ -250327,346 +271353,274 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATSBAIJ); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 36, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SBAIJ, __pyx_t_7) < 0) __PYX_ERR(33, 36, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":37
  *     MPIADJ          = S_(MATMPIADJ)
  *     SBAIJ           = S_(MATSBAIJ)
  *     SEQSBAIJ        = S_(MATSEQSBAIJ)             # <<<<<<<<<<<<<<
  *     MPISBAIJ        = S_(MATMPISBAIJ)
- *     SEQBSTRM        = S_(MATSEQBSTRM)
+ *     DAAD            = S_(MATDAAD)
  */
-  __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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQSBAIJ); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 37, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SEQSBAIJ, __pyx_t_7) < 0) __PYX_ERR(33, 37, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":38
  *     SBAIJ           = S_(MATSBAIJ)
  *     SEQSBAIJ        = S_(MATSEQSBAIJ)
  *     MPISBAIJ        = S_(MATMPISBAIJ)             # <<<<<<<<<<<<<<
- *     SEQBSTRM        = S_(MATSEQBSTRM)
- *     MPIBSTRM        = S_(MATMPIBSTRM)
+ *     DAAD            = S_(MATDAAD)
+ *     MFFD            = S_(MATMFFD)
  */
-  __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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATMPISBAIJ); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 38, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MPISBAIJ, __pyx_t_7) < 0) __PYX_ERR(33, 38, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATDAAD); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 39, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DAAD, __pyx_t_7) < 0) __PYX_ERR(33, 39, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":46
- *     SBSTRM          = S_(MATSBSTRM)
+  /* "PETSc/Mat.pyx":40
+ *     MPISBAIJ        = S_(MATMPISBAIJ)
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATMFFD); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 40, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MFFD, __pyx_t_7) < 0) __PYX_ERR(33, 40, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":47
+  /* "PETSc/Mat.pyx":41
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATNORMAL); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 41, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NORMAL, __pyx_t_7) < 0) __PYX_ERR(33, 41, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":48
+  /* "PETSc/Mat.pyx":42
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATNORMALHERMITIAN); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 42, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NORMALHERMITIAN, __pyx_t_7) < 0) __PYX_ERR(33, 42, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":49
+  /* "PETSc/Mat.pyx":43
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATLRC); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 43, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_LRC, __pyx_t_7) < 0) __PYX_ERR(33, 43, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":50
+  /* "PETSc/Mat.pyx":44
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATSCATTER); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 44, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SCATTER, __pyx_t_7) < 0) __PYX_ERR(33, 44, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":51
+  /* "PETSc/Mat.pyx":45
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATBLOCKMAT); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 45, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_BLOCKMAT, __pyx_t_7) < 0) __PYX_ERR(33, 45, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":52
+  /* "PETSc/Mat.pyx":46
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATCOMPOSITE); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 46, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_COMPOSITE, __pyx_t_7) < 0) __PYX_ERR(33, 46, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":53
+  /* "PETSc/Mat.pyx":47
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATFFT); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 47, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_FFT, __pyx_t_7) < 0) __PYX_ERR(33, 47, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":54
+  /* "PETSc/Mat.pyx":48
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATFFTW); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 48, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_FFTW, __pyx_t_7) < 0) __PYX_ERR(33, 48, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":55
+  /* "PETSc/Mat.pyx":49
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATSEQCUFFT); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 49, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SEQCUFFT, __pyx_t_7) < 0) __PYX_ERR(33, 49, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":56
+  /* "PETSc/Mat.pyx":50
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATTRANSPOSEMAT); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 50, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_TRANSPOSEMAT, __pyx_t_7) < 0) __PYX_ERR(33, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":57
+  /* "PETSc/Mat.pyx":51
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATPYTHON); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 51, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_PYTHON, __pyx_t_7) < 0) __PYX_ERR(33, 51, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":58
+  /* "PETSc/Mat.pyx":52
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATSCHURCOMPLEMENT); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 52, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SCHURCOMPLEMENT, __pyx_t_7) < 0) __PYX_ERR(33, 52, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":59
+  /* "PETSc/Mat.pyx":53
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATHYPRESTRUCT); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 53, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_HYPRESTRUCT, __pyx_t_7) < 0) __PYX_ERR(33, 53, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":60
+  /* "PETSc/Mat.pyx":54
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATHYPRESSTRUCT); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 54, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_HYPRESSTRUCT, __pyx_t_7) < 0) __PYX_ERR(33, 54, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":61
+  /* "PETSc/Mat.pyx":55
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATSUBMATRIX); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 55, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SUBMATRIX, __pyx_t_7) < 0) __PYX_ERR(33, 55, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":62
+  /* "PETSc/Mat.pyx":56
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATLOCALREF); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 56, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_LOCALREF, __pyx_t_7) < 0) __PYX_ERR(33, 56, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":63
+  /* "PETSc/Mat.pyx":57
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATNEST); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 57, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NEST, __pyx_t_7) < 0) __PYX_ERR(33, 57, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":64
+  /* "PETSc/Mat.pyx":58
  *     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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATPREALLOCATOR); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 58, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_PREALLOCATOR, __pyx_t_7) < 0) __PYX_ERR(33, 58, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Mat.pyx":3
  * # --------------------------------------------------------------------
@@ -250675,1210 +271629,1167 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_MatType, __pyx_tuple__93, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MatType, __pyx_t_7) < 0) __PYX_ERR(33, 3, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":66
+  /* "PETSc/Mat.pyx":60
  *     PREALLOCATOR    = S_(MATPREALLOCATOR)
  * 
  * 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_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_ERR(33, 66, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__94); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 60, __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_ERR(33, 66, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__94, __pyx_n_s_MatOption, __pyx_n_s_MatOption, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 60, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
-  /* "PETSc/Mat.pyx":67
+  /* "PETSc/Mat.pyx":61
  * 
  * class MatOption(object):
  *     UNUSED_NONZERO_LOCATION_ERR = MAT_UNUSED_NONZERO_LOCATION_ERR             # <<<<<<<<<<<<<<
  *     ROW_ORIENTED                = MAT_ROW_ORIENTED
  *     SYMMETRIC                   = MAT_SYMMETRIC
  */
-  __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_UNUSED_NONZERO_LOCATION_ERR, __pyx_t_8) < 0) __PYX_ERR(33, 67, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatOption(MAT_UNUSED_NONZERO_LOCATION_ERR); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 61, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_UNUSED_NONZERO_LOCATION_ERR, __pyx_t_7) < 0) __PYX_ERR(33, 61, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":68
+  /* "PETSc/Mat.pyx":62
  * 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 = __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_ROW_ORIENTED, __pyx_t_8) < 0) __PYX_ERR(33, 68, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatOption(MAT_ROW_ORIENTED); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 62, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ROW_ORIENTED, __pyx_t_7) < 0) __PYX_ERR(33, 62, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":69
+  /* "PETSc/Mat.pyx":63
  *     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_PyInt_From_MatOption(MAT_SYMMETRIC); if (unlikely(!__pyx_t_8)) __PYX_ERR(33, 69, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_8);
-  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_t_7 = __Pyx_PyInt_From_MatOption(MAT_SYMMETRIC); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 63, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SYMMETRIC, __pyx_t_7) < 0) __PYX_ERR(33, 63, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":70
+  /* "PETSc/Mat.pyx":64
  *     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_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;
+  __pyx_t_7 = __Pyx_PyInt_From_MatOption(MAT_STRUCTURALLY_SYMMETRIC); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 64, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_STRUCTURALLY_SYMMETRIC, __pyx_t_7) < 0) __PYX_ERR(33, 64, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":71
+  /* "PETSc/Mat.pyx":65
  *     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
  */
-  __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;
+  __pyx_t_7 = __Pyx_PyInt_From_MatOption(MAT_NEW_DIAGONALS); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 65, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NEW_DIAGONALS, __pyx_t_7) < 0) __PYX_ERR(33, 65, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":72
+  /* "PETSc/Mat.pyx":66
  *     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
  */
-  __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;
+  __pyx_t_7 = __Pyx_PyInt_From_MatOption(MAT_IGNORE_OFF_PROC_ENTRIES); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 66, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_IGNORE_OFF_PROC_ENTRIES, __pyx_t_7) < 0) __PYX_ERR(33, 66, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":73
+  /* "PETSc/Mat.pyx":67
  *     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_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;
+  __pyx_t_7 = __Pyx_PyInt_From_MatOption(MAT_USE_HASH_TABLE); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 67, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_USE_HASH_TABLE, __pyx_t_7) < 0) __PYX_ERR(33, 67, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":74
+  /* "PETSc/Mat.pyx":68
  *     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_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_KEEP_NONZERO_PATTERN, __pyx_t_8) < 0) __PYX_ERR(33, 74, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatOption(MAT_KEEP_NONZERO_PATTERN); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 68, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_KEEP_NONZERO_PATTERN, __pyx_t_7) < 0) __PYX_ERR(33, 68, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":75
+  /* "PETSc/Mat.pyx":69
  *     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_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_IGNORE_ZERO_ENTRIES, __pyx_t_8) < 0) __PYX_ERR(33, 75, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatOption(MAT_IGNORE_ZERO_ENTRIES); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 69, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_IGNORE_ZERO_ENTRIES, __pyx_t_7) < 0) __PYX_ERR(33, 69, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":76
+  /* "PETSc/Mat.pyx":70
  *     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_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_USE_INODES, __pyx_t_8) < 0) __PYX_ERR(33, 76, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatOption(MAT_USE_INODES); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 70, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_USE_INODES, __pyx_t_7) < 0) __PYX_ERR(33, 70, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":77
+  /* "PETSc/Mat.pyx":71
  *     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_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_HERMITIAN, __pyx_t_8) < 0) __PYX_ERR(33, 77, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatOption(MAT_HERMITIAN); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 71, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_HERMITIAN, __pyx_t_7) < 0) __PYX_ERR(33, 71, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":78
+  /* "PETSc/Mat.pyx":72
  *     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_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_SYMMETRY_ETERNAL, __pyx_t_8) < 0) __PYX_ERR(33, 78, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatOption(MAT_SYMMETRY_ETERNAL); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 72, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SYMMETRY_ETERNAL, __pyx_t_7) < 0) __PYX_ERR(33, 72, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":79
+  /* "PETSc/Mat.pyx":73
  *     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_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_NEW_NONZERO_LOCATION_ERR, __pyx_t_8) < 0) __PYX_ERR(33, 79, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatOption(MAT_NEW_NONZERO_LOCATION_ERR); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 73, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NEW_NONZERO_LOCATION_ERR, __pyx_t_7) < 0) __PYX_ERR(33, 73, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":80
+  /* "PETSc/Mat.pyx":74
  *     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_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_IGNORE_LOWER_TRIANGULAR, __pyx_t_8) < 0) __PYX_ERR(33, 80, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatOption(MAT_IGNORE_LOWER_TRIANGULAR); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 74, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_IGNORE_LOWER_TRIANGULAR, __pyx_t_7) < 0) __PYX_ERR(33, 74, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":81
+  /* "PETSc/Mat.pyx":75
  *     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_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_ERROR_LOWER_TRIANGULAR, __pyx_t_8) < 0) __PYX_ERR(33, 81, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatOption(MAT_ERROR_LOWER_TRIANGULAR); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 75, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ERROR_LOWER_TRIANGULAR, __pyx_t_7) < 0) __PYX_ERR(33, 75, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":82
+  /* "PETSc/Mat.pyx":76
  *     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_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_GETROW_UPPERTRIANGULAR, __pyx_t_8) < 0) __PYX_ERR(33, 82, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatOption(MAT_GETROW_UPPERTRIANGULAR); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 76, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_GETROW_UPPERTRIANGULAR, __pyx_t_7) < 0) __PYX_ERR(33, 76, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":83
+  /* "PETSc/Mat.pyx":77
  *     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_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_SPD, __pyx_t_8) < 0) __PYX_ERR(33, 83, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatOption(MAT_SPD); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 77, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SPD, __pyx_t_7) < 0) __PYX_ERR(33, 77, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":84
+  /* "PETSc/Mat.pyx":78
  *     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_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_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;
+  __pyx_t_7 = __Pyx_PyInt_From_MatOption(MAT_NO_OFF_PROC_ZERO_ROWS); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 78, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NO_OFF_PROC_ZERO_ROWS, __pyx_t_7) < 0) __PYX_ERR(33, 78, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":85
+  /* "PETSc/Mat.pyx":79
  *     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_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_NO_OFF_PROC_ENTRIES, __pyx_t_8) < 0) __PYX_ERR(33, 85, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatOption(MAT_NO_OFF_PROC_ENTRIES); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 79, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NO_OFF_PROC_ENTRIES, __pyx_t_7) < 0) __PYX_ERR(33, 79, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":86
+  /* "PETSc/Mat.pyx":80
  *     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;
+  __pyx_t_7 = __Pyx_PyInt_From_MatOption(MAT_NEW_NONZERO_LOCATIONS); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 80, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NEW_NONZERO_LOCATIONS, __pyx_t_7) < 0) __PYX_ERR(33, 80, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":87
+  /* "PETSc/Mat.pyx":81
  *     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_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_NEW_NONZERO_ALLOCATION_ERR, __pyx_t_8) < 0) __PYX_ERR(33, 87, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatOption(MAT_NEW_NONZERO_ALLOCATION_ERR); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 81, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NEW_NONZERO_ALLOCATION_ERR, __pyx_t_7) < 0) __PYX_ERR(33, 81, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":88
+  /* "PETSc/Mat.pyx":82
  *     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):
  */
-  __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_SUBSET_OFF_PROC_ENTRIES, __pyx_t_8) < 0) __PYX_ERR(33, 88, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatOption(MAT_SUBSET_OFF_PROC_ENTRIES); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 82, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SUBSET_OFF_PROC_ENTRIES, __pyx_t_7) < 0) __PYX_ERR(33, 82, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":66
+  /* "PETSc/Mat.pyx":60
  *     PREALLOCATOR    = S_(MATPREALLOCATOR)
  * 
  * 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_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_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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_MatOption, __pyx_tuple__94, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 60, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MatOption, __pyx_t_7) < 0) __PYX_ERR(33, 60, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":90
+  /* "PETSc/Mat.pyx":84
  *     SUBSET_OFF_PROC_ENTRIES     = MAT_SUBSET_OFF_PROC_ENTRIES
  * 
  * class MatAssemblyType(object):             # <<<<<<<<<<<<<<
  *     # native
  *     FINAL_ASSEMBLY = MAT_FINAL_ASSEMBLY
  */
-  __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_ERR(33, 90, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__95); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 84, __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_ERR(33, 90, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__95, __pyx_n_s_MatAssemblyType, __pyx_n_s_MatAssemblyType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 84, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
-  /* "PETSc/Mat.pyx":92
+  /* "PETSc/Mat.pyx":86
  * class MatAssemblyType(object):
  *     # native
  *     FINAL_ASSEMBLY = MAT_FINAL_ASSEMBLY             # <<<<<<<<<<<<<<
  *     FLUSH_ASSEMBLY = MAT_FLUSH_ASSEMBLY
  *     # aliases
  */
-  __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_FINAL_ASSEMBLY, __pyx_t_8) < 0) __PYX_ERR(33, 92, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatAssemblyType(MAT_FINAL_ASSEMBLY); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 86, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_FINAL_ASSEMBLY, __pyx_t_7) < 0) __PYX_ERR(33, 86, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":93
+  /* "PETSc/Mat.pyx":87
  *     # native
  *     FINAL_ASSEMBLY = MAT_FINAL_ASSEMBLY
  *     FLUSH_ASSEMBLY = MAT_FLUSH_ASSEMBLY             # <<<<<<<<<<<<<<
  *     # aliases
  *     FINAL = FINAL_ASSEMBLY
  */
-  __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_FLUSH_ASSEMBLY, __pyx_t_8) < 0) __PYX_ERR(33, 93, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatAssemblyType(MAT_FLUSH_ASSEMBLY); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 87, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_FLUSH_ASSEMBLY, __pyx_t_7) < 0) __PYX_ERR(33, 87, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":95
+  /* "PETSc/Mat.pyx":89
  *     FLUSH_ASSEMBLY = MAT_FLUSH_ASSEMBLY
  *     # aliases
  *     FINAL = FINAL_ASSEMBLY             # <<<<<<<<<<<<<<
  *     FLUSH = FLUSH_ASSEMBLY
  * 
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_FINAL_ASSEMBLY);
-  if (unlikely(!__pyx_t_8)) {
+  __pyx_t_7 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_FINAL_ASSEMBLY);
+  if (unlikely(!__pyx_t_7)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_FINAL_ASSEMBLY);
+    __pyx_t_7 = __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 (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;
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 89, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_FINAL, __pyx_t_7) < 0) __PYX_ERR(33, 89, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":96
+  /* "PETSc/Mat.pyx":90
  *     # aliases
  *     FINAL = FINAL_ASSEMBLY
  *     FLUSH = FLUSH_ASSEMBLY             # <<<<<<<<<<<<<<
  * 
  * class MatInfoType(object):
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_FLUSH_ASSEMBLY);
-  if (unlikely(!__pyx_t_8)) {
+  __pyx_t_7 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_FLUSH_ASSEMBLY);
+  if (unlikely(!__pyx_t_7)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_FLUSH_ASSEMBLY);
+    __pyx_t_7 = __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;
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 90, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_FLUSH, __pyx_t_7) < 0) __PYX_ERR(33, 90, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":90
+  /* "PETSc/Mat.pyx":84
  *     SUBSET_OFF_PROC_ENTRIES     = MAT_SUBSET_OFF_PROC_ENTRIES
  * 
  * class MatAssemblyType(object):             # <<<<<<<<<<<<<<
  *     # native
  *     FINAL_ASSEMBLY = MAT_FINAL_ASSEMBLY
  */
-  __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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_MatAssemblyType, __pyx_tuple__95, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 84, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MatAssemblyType, __pyx_t_7) < 0) __PYX_ERR(33, 84, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":98
+  /* "PETSc/Mat.pyx":92
  *     FLUSH = FLUSH_ASSEMBLY
  * 
  * class MatInfoType(object):             # <<<<<<<<<<<<<<
  *     LOCAL = MAT_LOCAL
  *     GLOBAL_MAX = MAT_GLOBAL_MAX
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 98, __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, 98, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__96); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 92, __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);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__96, __pyx_n_s_MatInfoType, __pyx_n_s_MatInfoType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 92, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
-  /* "PETSc/Mat.pyx":99
+  /* "PETSc/Mat.pyx":93
  * 
  * class MatInfoType(object):
  *     LOCAL = MAT_LOCAL             # <<<<<<<<<<<<<<
  *     GLOBAL_MAX = MAT_GLOBAL_MAX
  *     GLOBAL_SUM = MAT_GLOBAL_SUM
  */
-  __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;
+  __pyx_t_7 = __Pyx_PyInt_From_MatInfoType(MAT_LOCAL); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 93, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_LOCAL, __pyx_t_7) < 0) __PYX_ERR(33, 93, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":100
+  /* "PETSc/Mat.pyx":94
  * class MatInfoType(object):
  *     LOCAL = MAT_LOCAL
  *     GLOBAL_MAX = MAT_GLOBAL_MAX             # <<<<<<<<<<<<<<
  *     GLOBAL_SUM = MAT_GLOBAL_SUM
  * 
  */
-  __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;
+  __pyx_t_7 = __Pyx_PyInt_From_MatInfoType(MAT_GLOBAL_MAX); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 94, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_GLOBAL_MAX, __pyx_t_7) < 0) __PYX_ERR(33, 94, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":101
+  /* "PETSc/Mat.pyx":95
  *     LOCAL = MAT_LOCAL
  *     GLOBAL_MAX = MAT_GLOBAL_MAX
  *     GLOBAL_SUM = MAT_GLOBAL_SUM             # <<<<<<<<<<<<<<
  * 
  * class MatStructure(object):
  */
-  __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;
+  __pyx_t_7 = __Pyx_PyInt_From_MatInfoType(MAT_GLOBAL_SUM); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 95, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_GLOBAL_SUM, __pyx_t_7) < 0) __PYX_ERR(33, 95, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":98
+  /* "PETSc/Mat.pyx":92
  *     FLUSH = FLUSH_ASSEMBLY
  * 
  * class MatInfoType(object):             # <<<<<<<<<<<<<<
  *     LOCAL = MAT_LOCAL
  *     GLOBAL_MAX = MAT_GLOBAL_MAX
  */
-  __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;
+  __pyx_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_MatInfoType, __pyx_tuple__96, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 92, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MatInfoType, __pyx_t_7) < 0) __PYX_ERR(33, 92, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":103
+  /* "PETSc/Mat.pyx":97
  *     GLOBAL_SUM = MAT_GLOBAL_SUM
  * 
  * class MatStructure(object):             # <<<<<<<<<<<<<<
  *     # native
  *     SAME_NONZERO_PATTERN      = MAT_SAME_NONZERO_PATTERN
  */
-  __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_ERR(33, 103, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__97); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 97, __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_ERR(33, 103, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__97, __pyx_n_s_MatStructure, __pyx_n_s_MatStructure, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 97, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
-  /* "PETSc/Mat.pyx":105
+  /* "PETSc/Mat.pyx":99
  * 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_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_NONZERO_PATTERN, __pyx_t_8) < 0) __PYX_ERR(33, 105, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatStructure(SAME_NONZERO_PATTERN); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 99, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SAME_NONZERO_PATTERN, __pyx_t_7) < 0) __PYX_ERR(33, 99, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":106
+  /* "PETSc/Mat.pyx":100
  *     # 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_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_DIFFERENT_NONZERO_PATTERN, __pyx_t_8) < 0) __PYX_ERR(33, 106, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatStructure(DIFFERENT_NONZERO_PATTERN); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 100, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIFFERENT_NONZERO_PATTERN, __pyx_t_7) < 0) __PYX_ERR(33, 100, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":107
+  /* "PETSc/Mat.pyx":101
  *     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_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_SUBSET_NONZERO_PATTERN, __pyx_t_8) < 0) __PYX_ERR(33, 107, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatStructure(SUBSET_NONZERO_PATTERN); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 101, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SUBSET_NONZERO_PATTERN, __pyx_t_7) < 0) __PYX_ERR(33, 101, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":109
+  /* "PETSc/Mat.pyx":103
  *     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 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_SAME_NONZERO_PATTERN);
-  if (unlikely(!__pyx_t_8)) {
+  __pyx_t_7 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_SAME_NONZERO_PATTERN);
+  if (unlikely(!__pyx_t_7)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_SAME_NONZERO_PATTERN);
+    __pyx_t_7 = __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_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;
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 103, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SAME, __pyx_t_7) < 0) __PYX_ERR(33, 103, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SAME_NZ, __pyx_t_7) < 0) __PYX_ERR(33, 103, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":110
+  /* "PETSc/Mat.pyx":104
  *     # aliases
  *     SAME      = SAME_NZ      = SAME_NONZERO_PATTERN
  *     SUBSET    = SUBSET_NZ    = SUBSET_NONZERO_PATTERN             # <<<<<<<<<<<<<<
  *     DIFFERENT = DIFFERENT_NZ = DIFFERENT_NONZERO_PATTERN
  * 
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_SUBSET_NONZERO_PATTERN);
-  if (unlikely(!__pyx_t_8)) {
+  __pyx_t_7 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_SUBSET_NONZERO_PATTERN);
+  if (unlikely(!__pyx_t_7)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_SUBSET_NONZERO_PATTERN);
+    __pyx_t_7 = __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_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;
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 104, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SUBSET, __pyx_t_7) < 0) __PYX_ERR(33, 104, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SUBSET_NZ, __pyx_t_7) < 0) __PYX_ERR(33, 104, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":111
+  /* "PETSc/Mat.pyx":105
  *     SAME      = SAME_NZ      = SAME_NONZERO_PATTERN
  *     SUBSET    = SUBSET_NZ    = SUBSET_NONZERO_PATTERN
  *     DIFFERENT = DIFFERENT_NZ = DIFFERENT_NONZERO_PATTERN             # <<<<<<<<<<<<<<
  * 
  * class MatOrderingType(object):
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_DIFFERENT_NONZERO_PATTERN);
-  if (unlikely(!__pyx_t_8)) {
+  __pyx_t_7 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_DIFFERENT_NONZERO_PATTERN);
+  if (unlikely(!__pyx_t_7)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_DIFFERENT_NONZERO_PATTERN);
+    __pyx_t_7 = __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_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;
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 105, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIFFERENT, __pyx_t_7) < 0) __PYX_ERR(33, 105, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIFFERENT_NZ, __pyx_t_7) < 0) __PYX_ERR(33, 105, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":103
+  /* "PETSc/Mat.pyx":97
  *     GLOBAL_SUM = MAT_GLOBAL_SUM
  * 
  * 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_ERR(33, 103, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_8);
-  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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_MatStructure, __pyx_tuple__97, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 97, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MatStructure, __pyx_t_7) < 0) __PYX_ERR(33, 97, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":113
+  /* "PETSc/Mat.pyx":107
  *     DIFFERENT = DIFFERENT_NZ = DIFFERENT_NONZERO_PATTERN
  * 
  * class MatOrderingType(object):             # <<<<<<<<<<<<<<
  *     NATURAL     = S_(MATORDERINGNATURAL)
  *     ND          = S_(MATORDERINGND)
  */
-  __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_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__98); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 107, __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);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__98, __pyx_n_s_MatOrderingType, __pyx_n_s_MatOrderingType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 107, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
-  /* "PETSc/Mat.pyx":114
+  /* "PETSc/Mat.pyx":108
  * 
  * class MatOrderingType(object):
  *     NATURAL     = S_(MATORDERINGNATURAL)             # <<<<<<<<<<<<<<
  *     ND          = S_(MATORDERINGND)
  *     OWD         = S_(MATORDERING1WD)
  */
-  __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_NATURAL, __pyx_t_8) < 0) __PYX_ERR(33, 114, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATORDERINGNATURAL); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 108, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NATURAL, __pyx_t_7) < 0) __PYX_ERR(33, 108, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":115
+  /* "PETSc/Mat.pyx":109
  * class MatOrderingType(object):
  *     NATURAL     = S_(MATORDERINGNATURAL)
  *     ND          = S_(MATORDERINGND)             # <<<<<<<<<<<<<<
  *     OWD         = S_(MATORDERING1WD)
  *     RCM         = S_(MATORDERINGRCM)
  */
-  __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_ND, __pyx_t_8) < 0) __PYX_ERR(33, 115, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATORDERINGND); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 109, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ND, __pyx_t_7) < 0) __PYX_ERR(33, 109, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":116
+  /* "PETSc/Mat.pyx":110
  *     NATURAL     = S_(MATORDERINGNATURAL)
  *     ND          = S_(MATORDERINGND)
  *     OWD         = S_(MATORDERING1WD)             # <<<<<<<<<<<<<<
  *     RCM         = S_(MATORDERINGRCM)
  *     QMD         = S_(MATORDERINGQMD)
  */
-  __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_OWD, __pyx_t_8) < 0) __PYX_ERR(33, 116, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATORDERING1WD); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 110, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_OWD, __pyx_t_7) < 0) __PYX_ERR(33, 110, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":117
+  /* "PETSc/Mat.pyx":111
  *     ND          = S_(MATORDERINGND)
  *     OWD         = S_(MATORDERING1WD)
  *     RCM         = S_(MATORDERINGRCM)             # <<<<<<<<<<<<<<
  *     QMD         = S_(MATORDERINGQMD)
  *     ROWLENGTH   = S_(MATORDERINGROWLENGTH)
  */
-  __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_RCM, __pyx_t_8) < 0) __PYX_ERR(33, 117, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATORDERINGRCM); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 111, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_RCM, __pyx_t_7) < 0) __PYX_ERR(33, 111, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":118
+  /* "PETSc/Mat.pyx":112
  *     OWD         = S_(MATORDERING1WD)
  *     RCM         = S_(MATORDERINGRCM)
  *     QMD         = S_(MATORDERINGQMD)             # <<<<<<<<<<<<<<
  *     ROWLENGTH   = S_(MATORDERINGROWLENGTH)
  *     WBM         = S_(MATORDERINGWBM)
  */
-  __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_QMD, __pyx_t_8) < 0) __PYX_ERR(33, 118, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATORDERINGQMD); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 112, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_QMD, __pyx_t_7) < 0) __PYX_ERR(33, 112, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":119
+  /* "PETSc/Mat.pyx":113
  *     RCM         = S_(MATORDERINGRCM)
  *     QMD         = S_(MATORDERINGQMD)
  *     ROWLENGTH   = S_(MATORDERINGROWLENGTH)             # <<<<<<<<<<<<<<
  *     WBM         = S_(MATORDERINGWBM)
  *     SPECTRAL    = S_(MATORDERINGSPECTRAL)
  */
-  __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_ROWLENGTH, __pyx_t_8) < 0) __PYX_ERR(33, 119, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATORDERINGROWLENGTH); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 113, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ROWLENGTH, __pyx_t_7) < 0) __PYX_ERR(33, 113, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":120
+  /* "PETSc/Mat.pyx":114
  *     QMD         = S_(MATORDERINGQMD)
  *     ROWLENGTH   = S_(MATORDERINGROWLENGTH)
  *     WBM         = S_(MATORDERINGWBM)             # <<<<<<<<<<<<<<
  *     SPECTRAL    = S_(MATORDERINGSPECTRAL)
  *     AMD         = S_(MATORDERINGAMD)
  */
-  __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_WBM, __pyx_t_8) < 0) __PYX_ERR(33, 120, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATORDERINGWBM); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 114, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_WBM, __pyx_t_7) < 0) __PYX_ERR(33, 114, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":121
+  /* "PETSc/Mat.pyx":115
  *     ROWLENGTH   = S_(MATORDERINGROWLENGTH)
  *     WBM         = S_(MATORDERINGWBM)
  *     SPECTRAL    = S_(MATORDERINGSPECTRAL)             # <<<<<<<<<<<<<<
  *     AMD         = S_(MATORDERINGAMD)
  * 
  */
-  __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_SPECTRAL, __pyx_t_8) < 0) __PYX_ERR(33, 121, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATORDERINGSPECTRAL); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 115, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SPECTRAL, __pyx_t_7) < 0) __PYX_ERR(33, 115, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":122
+  /* "PETSc/Mat.pyx":116
  *     WBM         = S_(MATORDERINGWBM)
  *     SPECTRAL    = S_(MATORDERINGSPECTRAL)
  *     AMD         = S_(MATORDERINGAMD)             # <<<<<<<<<<<<<<
  * 
  * class MatFactorShiftType(object):
  */
-  __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_AMD, __pyx_t_8) < 0) __PYX_ERR(33, 122, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(MATORDERINGAMD); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 116, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_AMD, __pyx_t_7) < 0) __PYX_ERR(33, 116, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":113
+  /* "PETSc/Mat.pyx":107
  *     DIFFERENT = DIFFERENT_NZ = DIFFERENT_NONZERO_PATTERN
  * 
  * class MatOrderingType(object):             # <<<<<<<<<<<<<<
  *     NATURAL     = S_(MATORDERINGNATURAL)
  *     ND          = S_(MATORDERINGND)
  */
-  __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 (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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_MatOrderingType, __pyx_tuple__98, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 107, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MatOrderingType, __pyx_t_7) < 0) __PYX_ERR(33, 107, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":124
+  /* "PETSc/Mat.pyx":118
  *     AMD         = S_(MATORDERINGAMD)
  * 
  * class MatFactorShiftType(object):             # <<<<<<<<<<<<<<
  *     # native
  *     NONE              = MAT_SHIFT_NONE
  */
-  __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_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__99); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 118, __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);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__99, __pyx_n_s_MatFactorShiftType, __pyx_n_s_MatFactorShiftType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 118, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
-  /* "PETSc/Mat.pyx":126
+  /* "PETSc/Mat.pyx":120
  * class MatFactorShiftType(object):
  *     # native
  *     NONE              = MAT_SHIFT_NONE             # <<<<<<<<<<<<<<
  *     NONZERO           = MAT_SHIFT_NONZERO
  *     POSITIVE_DEFINITE = MAT_SHIFT_POSITIVE_DEFINITE
  */
-  __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_NONE, __pyx_t_8) < 0) __PYX_ERR(33, 126, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatFactorShiftType(MAT_SHIFT_NONE); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 120, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NONE, __pyx_t_7) < 0) __PYX_ERR(33, 120, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":127
+  /* "PETSc/Mat.pyx":121
  *     # native
  *     NONE              = MAT_SHIFT_NONE
  *     NONZERO           = MAT_SHIFT_NONZERO             # <<<<<<<<<<<<<<
  *     POSITIVE_DEFINITE = MAT_SHIFT_POSITIVE_DEFINITE
  *     INBLOCKS          = MAT_SHIFT_INBLOCKS
  */
-  __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_NONZERO, __pyx_t_8) < 0) __PYX_ERR(33, 127, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatFactorShiftType(MAT_SHIFT_NONZERO); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 121, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NONZERO, __pyx_t_7) < 0) __PYX_ERR(33, 121, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":128
+  /* "PETSc/Mat.pyx":122
  *     NONE              = MAT_SHIFT_NONE
  *     NONZERO           = MAT_SHIFT_NONZERO
  *     POSITIVE_DEFINITE = MAT_SHIFT_POSITIVE_DEFINITE             # <<<<<<<<<<<<<<
  *     INBLOCKS          = MAT_SHIFT_INBLOCKS
  *     # aliases
  */
-  __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_POSITIVE_DEFINITE, __pyx_t_8) < 0) __PYX_ERR(33, 128, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatFactorShiftType(MAT_SHIFT_POSITIVE_DEFINITE); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 122, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_POSITIVE_DEFINITE, __pyx_t_7) < 0) __PYX_ERR(33, 122, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":129
+  /* "PETSc/Mat.pyx":123
  *     NONZERO           = MAT_SHIFT_NONZERO
  *     POSITIVE_DEFINITE = MAT_SHIFT_POSITIVE_DEFINITE
  *     INBLOCKS          = MAT_SHIFT_INBLOCKS             # <<<<<<<<<<<<<<
  *     # aliases
  *     NZ = MAT_SHIFT_NONZERO
  */
-  __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_INBLOCKS, __pyx_t_8) < 0) __PYX_ERR(33, 129, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatFactorShiftType(MAT_SHIFT_INBLOCKS); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 123, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_INBLOCKS, __pyx_t_7) < 0) __PYX_ERR(33, 123, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":131
+  /* "PETSc/Mat.pyx":125
  *     INBLOCKS          = MAT_SHIFT_INBLOCKS
  *     # aliases
  *     NZ = MAT_SHIFT_NONZERO             # <<<<<<<<<<<<<<
  *     PD = MAT_SHIFT_POSITIVE_DEFINITE
  * 
  */
-  __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_NZ, __pyx_t_8) < 0) __PYX_ERR(33, 131, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatFactorShiftType(MAT_SHIFT_NONZERO); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 125, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NZ, __pyx_t_7) < 0) __PYX_ERR(33, 125, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":132
+  /* "PETSc/Mat.pyx":126
  *     # aliases
  *     NZ = MAT_SHIFT_NONZERO
  *     PD = MAT_SHIFT_POSITIVE_DEFINITE             # <<<<<<<<<<<<<<
  * 
  * class MatSORType(object):
  */
-  __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_PD, __pyx_t_8) < 0) __PYX_ERR(33, 132, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatFactorShiftType(MAT_SHIFT_POSITIVE_DEFINITE); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 126, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_PD, __pyx_t_7) < 0) __PYX_ERR(33, 126, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":124
+  /* "PETSc/Mat.pyx":118
  *     AMD         = S_(MATORDERINGAMD)
  * 
  * class MatFactorShiftType(object):             # <<<<<<<<<<<<<<
  *     # native
  *     NONE              = MAT_SHIFT_NONE
  */
-  __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 (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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_MatFactorShiftType, __pyx_tuple__99, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 118, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MatFactorShiftType, __pyx_t_7) < 0) __PYX_ERR(33, 118, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":134
+  /* "PETSc/Mat.pyx":128
  *     PD = MAT_SHIFT_POSITIVE_DEFINITE
  * 
  * class MatSORType(object):             # <<<<<<<<<<<<<<
  *     FORWARD_SWEEP         = SOR_FORWARD_SWEEP
  *     BACKWARD_SWEEP        = SOR_BACKWARD_SWEEP
  */
-  __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_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__100); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 128, __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);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__100, __pyx_n_s_MatSORType, __pyx_n_s_MatSORType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(33, 128, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
-  /* "PETSc/Mat.pyx":135
+  /* "PETSc/Mat.pyx":129
  * 
  * class MatSORType(object):
  *     FORWARD_SWEEP         = SOR_FORWARD_SWEEP             # <<<<<<<<<<<<<<
  *     BACKWARD_SWEEP        = SOR_BACKWARD_SWEEP
  *     SYMMETRY_SWEEP        = SOR_SYMMETRIC_SWEEP
  */
-  __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_FORWARD_SWEEP, __pyx_t_8) < 0) __PYX_ERR(33, 135, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatSORType(SOR_FORWARD_SWEEP); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 129, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_FORWARD_SWEEP, __pyx_t_7) < 0) __PYX_ERR(33, 129, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":136
+  /* "PETSc/Mat.pyx":130
  * 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_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_BACKWARD_SWEEP, __pyx_t_8) < 0) __PYX_ERR(33, 136, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatSORType(SOR_BACKWARD_SWEEP); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 130, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_BACKWARD_SWEEP, __pyx_t_7) < 0) __PYX_ERR(33, 130, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":137
+  /* "PETSc/Mat.pyx":131
  *     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_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_SYMMETRY_SWEEP, __pyx_t_8) < 0) __PYX_ERR(33, 137, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatSORType(SOR_SYMMETRIC_SWEEP); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 131, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SYMMETRY_SWEEP, __pyx_t_7) < 0) __PYX_ERR(33, 131, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":138
+  /* "PETSc/Mat.pyx":132
  *     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_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_LOCAL_FORWARD_SWEEP, __pyx_t_8) < 0) __PYX_ERR(33, 138, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatSORType(SOR_LOCAL_FORWARD_SWEEP); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 132, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_LOCAL_FORWARD_SWEEP, __pyx_t_7) < 0) __PYX_ERR(33, 132, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":139
+  /* "PETSc/Mat.pyx":133
  *     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_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_LOCAL_BACKWARD_SWEEP, __pyx_t_8) < 0) __PYX_ERR(33, 139, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatSORType(SOR_LOCAL_BACKWARD_SWEEP); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 133, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_LOCAL_BACKWARD_SWEEP, __pyx_t_7) < 0) __PYX_ERR(33, 133, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":140
+  /* "PETSc/Mat.pyx":134
  *     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_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_LOCAL_SYMMETRIC_SWEEP, __pyx_t_8) < 0) __PYX_ERR(33, 140, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatSORType(SOR_LOCAL_SYMMETRIC_SWEEP); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 134, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_LOCAL_SYMMETRIC_SWEEP, __pyx_t_7) < 0) __PYX_ERR(33, 134, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":141
+  /* "PETSc/Mat.pyx":135
  *     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_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_ZERO_INITIAL_GUESS, __pyx_t_8) < 0) __PYX_ERR(33, 141, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatSORType(SOR_ZERO_INITIAL_GUESS); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 135, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ZERO_INITIAL_GUESS, __pyx_t_7) < 0) __PYX_ERR(33, 135, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":142
+  /* "PETSc/Mat.pyx":136
  *     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_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_EISENSTAT, __pyx_t_8) < 0) __PYX_ERR(33, 142, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatSORType(SOR_EISENSTAT); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 136, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_EISENSTAT, __pyx_t_7) < 0) __PYX_ERR(33, 136, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":143
+  /* "PETSc/Mat.pyx":137
  *     ZERO_INITIAL_GUESS    = SOR_ZERO_INITIAL_GUESS
  *     EISENSTAT             = SOR_EISENSTAT
  *     APPLY_UPPER           = SOR_APPLY_UPPER             # <<<<<<<<<<<<<<
  *     APPLY_LOWER           = SOR_APPLY_LOWER
  * 
  */
-  __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_APPLY_UPPER, __pyx_t_8) < 0) __PYX_ERR(33, 143, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatSORType(SOR_APPLY_UPPER); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 137, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_APPLY_UPPER, __pyx_t_7) < 0) __PYX_ERR(33, 137, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":144
+  /* "PETSc/Mat.pyx":138
  *     EISENSTAT             = SOR_EISENSTAT
  *     APPLY_UPPER           = SOR_APPLY_UPPER
  *     APPLY_LOWER           = SOR_APPLY_LOWER             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-  __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_APPLY_LOWER, __pyx_t_8) < 0) __PYX_ERR(33, 144, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_MatSORType(SOR_APPLY_LOWER); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 138, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_APPLY_LOWER, __pyx_t_7) < 0) __PYX_ERR(33, 138, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/Mat.pyx":134
+  /* "PETSc/Mat.pyx":128
  *     PD = MAT_SHIFT_POSITIVE_DEFINITE
  * 
  * class MatSORType(object):             # <<<<<<<<<<<<<<
  *     FORWARD_SWEEP         = SOR_FORWARD_SWEEP
  *     BACKWARD_SWEEP        = SOR_BACKWARD_SWEEP
  */
-  __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 (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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_MatSORType, __pyx_tuple__100, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(33, 128, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_MatSORType, __pyx_t_7) < 0) __PYX_ERR(33, 128, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/Mat.pyx":150
+  /* "PETSc/Mat.pyx":144
  * 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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_MatType); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 144, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_Type, __pyx_t_1) < 0) __PYX_ERR(33, 144, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
 
-  /* "PETSc/Mat.pyx":151
+  /* "PETSc/Mat.pyx":145
  * 
  *     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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_MatOption); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 145, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_Option, __pyx_t_1) < 0) __PYX_ERR(33, 145, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
 
-  /* "PETSc/Mat.pyx":152
+  /* "PETSc/Mat.pyx":146
  *     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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_MatAssemblyType); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 146, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_AssemblyType, __pyx_t_1) < 0) __PYX_ERR(33, 146, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
 
-  /* "PETSc/Mat.pyx":153
+  /* "PETSc/Mat.pyx":147
  *     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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_MatInfoType); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 147, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_InfoType, __pyx_t_1) < 0) __PYX_ERR(33, 147, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
 
-  /* "PETSc/Mat.pyx":154
+  /* "PETSc/Mat.pyx":148
  *     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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_MatStructure); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 148, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_Structure, __pyx_t_1) < 0) __PYX_ERR(33, 148, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
 
-  /* "PETSc/Mat.pyx":155
+  /* "PETSc/Mat.pyx":149
  *     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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_MatOrderingType); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 149, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_OrderingType, __pyx_t_1) < 0) __PYX_ERR(33, 149, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
 
-  /* "PETSc/Mat.pyx":156
+  /* "PETSc/Mat.pyx":150
  *     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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_MatFactorShiftType); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 150, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_FactorShiftType, __pyx_t_1) < 0) __PYX_ERR(33, 150, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
 
-  /* "PETSc/Mat.pyx":157
+  /* "PETSc/Mat.pyx":151
  *     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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_MatSORType); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 151, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_SORType, __pyx_t_1) < 0) __PYX_ERR(33, 151, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
 
-  /* "PETSc/Mat.pyx":883
+  /* "PETSc/Mat.pyx":892
  *     #
  * 
  *     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)
+  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, 892, __pyx_L1_error)
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
 
-  /* "PETSc/Mat.pyx":996
+  /* "PETSc/Mat.pyx":1005
  *         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;
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat, __pyx_n_s_createVecs); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1005, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_getVecs, __pyx_t_1) < 0) __PYX_ERR(33, 1005, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
 
-  /* "PETSc/Mat.pyx":997
+  /* "PETSc/Mat.pyx":1006
  * 
  *     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;
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat, __pyx_n_s_createVecRight); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1006, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_getVecRight, __pyx_t_1) < 0) __PYX_ERR(33, 1006, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
 
-  /* "PETSc/Mat.pyx":998
+  /* "PETSc/Mat.pyx":1007
  *     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;
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat, __pyx_n_s_createVecLeft); if (unlikely(!__pyx_t_1)) __PYX_ERR(33, 1007, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Mat->tp_dict, __pyx_n_s_getVecLeft, __pyx_t_1) < 0) __PYX_ERR(33, 1007, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Mat);
 
-  /* "PETSc/Mat.pyx":1543
+  /* "PETSc/Mat.pyx":1591
  * # --------------------------------------------------------------------
  * 
  * del MatType             # <<<<<<<<<<<<<<
  * del MatOption
  * del MatAssemblyType
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_MatType) < 0) __PYX_ERR(33, 1543, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_MatType) < 0) __PYX_ERR(33, 1591, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1544
+  /* "PETSc/Mat.pyx":1592
  * 
  * 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)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_MatOption) < 0) __PYX_ERR(33, 1592, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1545
+  /* "PETSc/Mat.pyx":1593
  * 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)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_MatAssemblyType) < 0) __PYX_ERR(33, 1593, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1546
+  /* "PETSc/Mat.pyx":1594
  * 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)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_MatInfoType) < 0) __PYX_ERR(33, 1594, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1547
+  /* "PETSc/Mat.pyx":1595
  * 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)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_MatStructure) < 0) __PYX_ERR(33, 1595, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1548
+  /* "PETSc/Mat.pyx":1596
  * 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)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_MatOrderingType) < 0) __PYX_ERR(33, 1596, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1549
+  /* "PETSc/Mat.pyx":1597
  * del MatStructure
  * del MatOrderingType
  * del MatFactorShiftType             # <<<<<<<<<<<<<<
  * del MatSORType
  * 
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_MatFactorShiftType) < 0) __PYX_ERR(33, 1549, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_MatFactorShiftType) < 0) __PYX_ERR(33, 1597, __pyx_L1_error)
 
-  /* "PETSc/Mat.pyx":1550
+  /* "PETSc/Mat.pyx":1598
  * del MatOrderingType
  * del MatFactorShiftType
  * del MatSORType             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_MatSORType) < 0) __PYX_ERR(33, 1550, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_MatSORType) < 0) __PYX_ERR(33, 1598, __pyx_L1_error)
 
   /* "PETSc/PC.pyx":3
  * # --------------------------------------------------------------------
@@ -251887,15 +272798,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # native
  *     NONE         = S_(PCNONE)
  */
-  __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_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__101); 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);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__101, __pyx_n_s_PCType, __pyx_n_s_PCType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/PC.pyx":5
  * class PCType(object):
@@ -251904,10 +272810,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     JACOBI       = S_(PCJACOBI)
  *     SOR          = S_(PCSOR)
  */
-  __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_NONE, __pyx_t_8) < 0) __PYX_ERR(34, 5, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCNONE); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 5, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NONE, __pyx_t_7) < 0) __PYX_ERR(34, 5, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":6
  *     # native
@@ -251916,10 +272822,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     SOR          = S_(PCSOR)
  *     LU           = S_(PCLU)
  */
-  __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_JACOBI, __pyx_t_8) < 0) __PYX_ERR(34, 6, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCJACOBI); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 6, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_JACOBI, __pyx_t_7) < 0) __PYX_ERR(34, 6, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":7
  *     NONE         = S_(PCNONE)
@@ -251928,10 +272834,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     LU           = S_(PCLU)
  *     SHELL        = S_(PCSHELL)
  */
-  __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_SOR, __pyx_t_8) < 0) __PYX_ERR(34, 7, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCSOR); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SOR, __pyx_t_7) < 0) __PYX_ERR(34, 7, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":8
  *     JACOBI       = S_(PCJACOBI)
@@ -251940,10 +272846,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     SHELL        = S_(PCSHELL)
  *     BJACOBI      = S_(PCBJACOBI)
  */
-  __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_LU, __pyx_t_8) < 0) __PYX_ERR(34, 8, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCLU); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 8, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_LU, __pyx_t_7) < 0) __PYX_ERR(34, 8, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":9
  *     SOR          = S_(PCSOR)
@@ -251952,10 +272858,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     BJACOBI      = S_(PCBJACOBI)
  *     MG           = S_(PCMG)
  */
-  __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_SHELL, __pyx_t_8) < 0) __PYX_ERR(34, 9, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCSHELL); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 9, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SHELL, __pyx_t_7) < 0) __PYX_ERR(34, 9, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":10
  *     LU           = S_(PCLU)
@@ -251964,10 +272870,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     MG           = S_(PCMG)
  *     EISENSTAT    = S_(PCEISENSTAT)
  */
-  __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_BJACOBI, __pyx_t_8) < 0) __PYX_ERR(34, 10, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCBJACOBI); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 10, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_BJACOBI, __pyx_t_7) < 0) __PYX_ERR(34, 10, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":11
  *     SHELL        = S_(PCSHELL)
@@ -251976,10 +272882,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     EISENSTAT    = S_(PCEISENSTAT)
  *     ILU          = S_(PCILU)
  */
-  __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_MG, __pyx_t_8) < 0) __PYX_ERR(34, 11, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCMG); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 11, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MG, __pyx_t_7) < 0) __PYX_ERR(34, 11, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":12
  *     BJACOBI      = S_(PCBJACOBI)
@@ -251988,10 +272894,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ILU          = S_(PCILU)
  *     ICC          = S_(PCICC)
  */
-  __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_EISENSTAT, __pyx_t_8) < 0) __PYX_ERR(34, 12, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCEISENSTAT); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 12, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_EISENSTAT, __pyx_t_7) < 0) __PYX_ERR(34, 12, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":13
  *     MG           = S_(PCMG)
@@ -252000,10 +272906,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ICC          = S_(PCICC)
  *     ASM          = S_(PCASM)
  */
-  __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_ILU, __pyx_t_8) < 0) __PYX_ERR(34, 13, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCILU); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 13, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ILU, __pyx_t_7) < 0) __PYX_ERR(34, 13, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":14
  *     EISENSTAT    = S_(PCEISENSTAT)
@@ -252012,10 +272918,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ASM          = S_(PCASM)
  *     GASM         = S_(PCGASM)
  */
-  __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_ICC, __pyx_t_8) < 0) __PYX_ERR(34, 14, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCICC); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 14, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ICC, __pyx_t_7) < 0) __PYX_ERR(34, 14, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":15
  *     ILU          = S_(PCILU)
@@ -252024,10 +272930,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     GASM         = S_(PCGASM)
  *     KSP          = S_(PCKSP)
  */
-  __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_ASM, __pyx_t_8) < 0) __PYX_ERR(34, 15, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCASM); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 15, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ASM, __pyx_t_7) < 0) __PYX_ERR(34, 15, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":16
  *     ICC          = S_(PCICC)
@@ -252036,10 +272942,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     KSP          = S_(PCKSP)
  *     COMPOSITE    = S_(PCCOMPOSITE)
  */
-  __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_GASM, __pyx_t_8) < 0) __PYX_ERR(34, 16, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCGASM); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 16, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_GASM, __pyx_t_7) < 0) __PYX_ERR(34, 16, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":17
  *     ASM          = S_(PCASM)
@@ -252048,10 +272954,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     COMPOSITE    = S_(PCCOMPOSITE)
  *     REDUNDANT    = S_(PCREDUNDANT)
  */
-  __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_KSP, __pyx_t_8) < 0) __PYX_ERR(34, 17, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCKSP); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 17, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_KSP, __pyx_t_7) < 0) __PYX_ERR(34, 17, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":18
  *     GASM         = S_(PCGASM)
@@ -252060,10 +272966,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     REDUNDANT    = S_(PCREDUNDANT)
  *     SPAI         = S_(PCSPAI)
  */
-  __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_COMPOSITE, __pyx_t_8) < 0) __PYX_ERR(34, 18, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCCOMPOSITE); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 18, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_COMPOSITE, __pyx_t_7) < 0) __PYX_ERR(34, 18, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":19
  *     KSP          = S_(PCKSP)
@@ -252072,10 +272978,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     SPAI         = S_(PCSPAI)
  *     NN           = S_(PCNN)
  */
-  __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_REDUNDANT, __pyx_t_8) < 0) __PYX_ERR(34, 19, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCREDUNDANT); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_REDUNDANT, __pyx_t_7) < 0) __PYX_ERR(34, 19, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":20
  *     COMPOSITE    = S_(PCCOMPOSITE)
@@ -252084,10 +272990,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NN           = S_(PCNN)
  *     CHOLESKY     = S_(PCCHOLESKY)
  */
-  __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_SPAI, __pyx_t_8) < 0) __PYX_ERR(34, 20, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCSPAI); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 20, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SPAI, __pyx_t_7) < 0) __PYX_ERR(34, 20, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":21
  *     REDUNDANT    = S_(PCREDUNDANT)
@@ -252096,10 +273002,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     CHOLESKY     = S_(PCCHOLESKY)
  *     PBJACOBI     = S_(PCPBJACOBI)
  */
-  __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_NN, __pyx_t_8) < 0) __PYX_ERR(34, 21, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCNN); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 21, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NN, __pyx_t_7) < 0) __PYX_ERR(34, 21, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":22
  *     SPAI         = S_(PCSPAI)
@@ -252108,10 +273014,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     PBJACOBI     = S_(PCPBJACOBI)
  *     MAT          = S_(PCMAT)
  */
-  __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_CHOLESKY, __pyx_t_8) < 0) __PYX_ERR(34, 22, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCCHOLESKY); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 22, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CHOLESKY, __pyx_t_7) < 0) __PYX_ERR(34, 22, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":23
  *     NN           = S_(PCNN)
@@ -252120,10 +273026,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     MAT          = S_(PCMAT)
  *     HYPRE        = S_(PCHYPRE)
  */
-  __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_PBJACOBI, __pyx_t_8) < 0) __PYX_ERR(34, 23, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCPBJACOBI); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 23, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_PBJACOBI, __pyx_t_7) < 0) __PYX_ERR(34, 23, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":24
  *     CHOLESKY     = S_(PCCHOLESKY)
@@ -252132,10 +273038,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     HYPRE        = S_(PCHYPRE)
  *     PARMS        = S_(PCPARMS)
  */
-  __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_MAT, __pyx_t_8) < 0) __PYX_ERR(34, 24, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCMAT); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 24, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MAT, __pyx_t_7) < 0) __PYX_ERR(34, 24, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":25
  *     PBJACOBI     = S_(PCPBJACOBI)
@@ -252144,10 +273050,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     PARMS        = S_(PCPARMS)
  *     FIELDSPLIT   = S_(PCFIELDSPLIT)
  */
-  __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 (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_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCHYPRE); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 25, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_HYPRE, __pyx_t_7) < 0) __PYX_ERR(34, 25, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":26
  *     MAT          = S_(PCMAT)
@@ -252156,10 +273062,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     FIELDSPLIT   = S_(PCFIELDSPLIT)
  *     TFS          = S_(PCTFS)
  */
-  __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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCPARMS); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 26, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_PARMS, __pyx_t_7) < 0) __PYX_ERR(34, 26, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":27
  *     HYPRE        = S_(PCHYPRE)
@@ -252168,10 +273074,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     TFS          = S_(PCTFS)
  *     ML           = S_(PCML)
  */
-  __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_FIELDSPLIT, __pyx_t_8) < 0) __PYX_ERR(34, 27, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCFIELDSPLIT); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 27, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_FIELDSPLIT, __pyx_t_7) < 0) __PYX_ERR(34, 27, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":28
  *     PARMS        = S_(PCPARMS)
@@ -252180,10 +273086,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ML           = S_(PCML)
  *     GALERKIN     = S_(PCGALERKIN)
  */
-  __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_TFS, __pyx_t_8) < 0) __PYX_ERR(34, 28, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCTFS); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 28, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_TFS, __pyx_t_7) < 0) __PYX_ERR(34, 28, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":29
  *     FIELDSPLIT   = S_(PCFIELDSPLIT)
@@ -252192,10 +273098,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     GALERKIN     = S_(PCGALERKIN)
  *     EXOTIC       = S_(PCEXOTIC)
  */
-  __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_ML, __pyx_t_8) < 0) __PYX_ERR(34, 29, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCML); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 29, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ML, __pyx_t_7) < 0) __PYX_ERR(34, 29, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":30
  *     TFS          = S_(PCTFS)
@@ -252204,10 +273110,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     EXOTIC       = S_(PCEXOTIC)
  *     CP           = S_(PCCP)
  */
-  __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_GALERKIN, __pyx_t_8) < 0) __PYX_ERR(34, 30, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCGALERKIN); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 30, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_GALERKIN, __pyx_t_7) < 0) __PYX_ERR(34, 30, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":31
  *     ML           = S_(PCML)
@@ -252216,10 +273122,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     CP           = S_(PCCP)
  *     BFBT         = S_(PCBFBT)
  */
-  __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_EXOTIC, __pyx_t_8) < 0) __PYX_ERR(34, 31, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCEXOTIC); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 31, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_EXOTIC, __pyx_t_7) < 0) __PYX_ERR(34, 31, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":32
  *     GALERKIN     = S_(PCGALERKIN)
@@ -252228,10 +273134,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     BFBT         = S_(PCBFBT)
  *     LSC          = S_(PCLSC)
  */
-  __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_CP, __pyx_t_8) < 0) __PYX_ERR(34, 32, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCCP); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 32, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CP, __pyx_t_7) < 0) __PYX_ERR(34, 32, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":33
  *     EXOTIC       = S_(PCEXOTIC)
@@ -252240,10 +273146,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     LSC          = S_(PCLSC)
  *     PYTHON       = S_(PCPYTHON)
  */
-  __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_BFBT, __pyx_t_8) < 0) __PYX_ERR(34, 33, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCBFBT); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 33, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_BFBT, __pyx_t_7) < 0) __PYX_ERR(34, 33, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":34
  *     CP           = S_(PCCP)
@@ -252252,10 +273158,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     PYTHON       = S_(PCPYTHON)
  *     PFMG         = S_(PCPFMG)
  */
-  __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_LSC, __pyx_t_8) < 0) __PYX_ERR(34, 34, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCLSC); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 34, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_LSC, __pyx_t_7) < 0) __PYX_ERR(34, 34, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":35
  *     BFBT         = S_(PCBFBT)
@@ -252264,10 +273170,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     PFMG         = S_(PCPFMG)
  *     SYSPFMG      = S_(PCSYSPFMG)
  */
-  __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_PYTHON, __pyx_t_8) < 0) __PYX_ERR(34, 35, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCPYTHON); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 35, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_PYTHON, __pyx_t_7) < 0) __PYX_ERR(34, 35, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":36
  *     LSC          = S_(PCLSC)
@@ -252276,10 +273182,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     SYSPFMG      = S_(PCSYSPFMG)
  *     REDISTRIBUTE = S_(PCREDISTRIBUTE)
  */
-  __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_PFMG, __pyx_t_8) < 0) __PYX_ERR(34, 36, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCPFMG); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 36, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_PFMG, __pyx_t_7) < 0) __PYX_ERR(34, 36, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":37
  *     PYTHON       = S_(PCPYTHON)
@@ -252288,10 +273194,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     REDISTRIBUTE = S_(PCREDISTRIBUTE)
  *     SVD          = S_(PCSVD)
  */
-  __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_SYSPFMG, __pyx_t_8) < 0) __PYX_ERR(34, 37, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCSYSPFMG); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 37, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SYSPFMG, __pyx_t_7) < 0) __PYX_ERR(34, 37, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":38
  *     PFMG         = S_(PCPFMG)
@@ -252300,10 +273206,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     SVD          = S_(PCSVD)
  *     GAMG         = S_(PCGAMG)
  */
-  __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_REDISTRIBUTE, __pyx_t_8) < 0) __PYX_ERR(34, 38, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCREDISTRIBUTE); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 38, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_REDISTRIBUTE, __pyx_t_7) < 0) __PYX_ERR(34, 38, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":39
  *     SYSPFMG      = S_(PCSYSPFMG)
@@ -252312,10 +273218,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     GAMG         = S_(PCGAMG)
  *     SACUSP       = S_(PCSACUSP)
  */
-  __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_SVD, __pyx_t_8) < 0) __PYX_ERR(34, 39, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCSVD); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 39, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SVD, __pyx_t_7) < 0) __PYX_ERR(34, 39, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":40
  *     REDISTRIBUTE = S_(PCREDISTRIBUTE)
@@ -252324,10 +273230,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     SACUSP       = S_(PCSACUSP)
  *     SACUSPPOLY   = S_(PCSACUSPPOLY)
  */
-  __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_GAMG, __pyx_t_8) < 0) __PYX_ERR(34, 40, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCGAMG); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 40, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_GAMG, __pyx_t_7) < 0) __PYX_ERR(34, 40, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":41
  *     SVD          = S_(PCSVD)
@@ -252336,10 +273242,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     SACUSPPOLY   = S_(PCSACUSPPOLY)
  *     BICGSTABCUSP = S_(PCBICGSTABCUSP)
  */
-  __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_SACUSP, __pyx_t_8) < 0) __PYX_ERR(34, 41, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCSACUSP); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 41, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SACUSP, __pyx_t_7) < 0) __PYX_ERR(34, 41, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":42
  *     GAMG         = S_(PCGAMG)
@@ -252348,10 +273254,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     BICGSTABCUSP = S_(PCBICGSTABCUSP)
  *     AINVCUSP     = S_(PCAINVCUSP)
  */
-  __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_SACUSPPOLY, __pyx_t_8) < 0) __PYX_ERR(34, 42, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCSACUSPPOLY); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 42, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SACUSPPOLY, __pyx_t_7) < 0) __PYX_ERR(34, 42, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":43
  *     SACUSP       = S_(PCSACUSP)
@@ -252360,10 +273266,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     AINVCUSP     = S_(PCAINVCUSP)
  *     BDDC         = S_(PCBDDC)
  */
-  __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_BICGSTABCUSP, __pyx_t_8) < 0) __PYX_ERR(34, 43, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCBICGSTABCUSP); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 43, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_BICGSTABCUSP, __pyx_t_7) < 0) __PYX_ERR(34, 43, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":44
  *     SACUSPPOLY   = S_(PCSACUSPPOLY)
@@ -252372,10 +273278,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     BDDC         = S_(PCBDDC)
  *     KACZMARZ     = S_(PCKACZMARZ)
  */
-  __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_AINVCUSP, __pyx_t_8) < 0) __PYX_ERR(34, 44, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCAINVCUSP); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 44, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_AINVCUSP, __pyx_t_7) < 0) __PYX_ERR(34, 44, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":45
  *     BICGSTABCUSP = S_(PCBICGSTABCUSP)
@@ -252384,10 +273290,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     KACZMARZ     = S_(PCKACZMARZ)
  *     TELESCOPE    = S_(PCTELESCOPE)
  */
-  __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_BDDC, __pyx_t_8) < 0) __PYX_ERR(34, 45, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCBDDC); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 45, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_BDDC, __pyx_t_7) < 0) __PYX_ERR(34, 45, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":46
  *     AINVCUSP     = S_(PCAINVCUSP)
@@ -252396,10 +273302,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     TELESCOPE    = S_(PCTELESCOPE)
  * 
  */
-  __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_KACZMARZ, __pyx_t_8) < 0) __PYX_ERR(34, 46, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCKACZMARZ); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 46, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_KACZMARZ, __pyx_t_7) < 0) __PYX_ERR(34, 46, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":47
  *     BDDC         = S_(PCBDDC)
@@ -252408,10 +273314,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * class PCSide(object):
  */
-  __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_TELESCOPE, __pyx_t_8) < 0) __PYX_ERR(34, 47, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCTELESCOPE); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 47, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_TELESCOPE, __pyx_t_7) < 0) __PYX_ERR(34, 47, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":3
  * # --------------------------------------------------------------------
@@ -252420,13 +273326,12 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # native
  *     NONE         = S_(PCNONE)
  */
-  __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_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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_PCType, __pyx_tuple__101, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PCType, __pyx_t_7) < 0) __PYX_ERR(34, 3, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/PC.pyx":49
  *     TELESCOPE    = S_(PCTELESCOPE)
@@ -252435,15 +273340,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # native
  *     LEFT      = PC_LEFT
  */
-  __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_ERR(34, 49, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__102); 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_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);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__102, __pyx_n_s_PCSide, __pyx_n_s_PCSide, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 49, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/PC.pyx":51
  * class PCSide(object):
@@ -252452,10 +273352,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     RIGHT     = PC_RIGHT
  *     SYMMETRIC = PC_SYMMETRIC
  */
-  __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_LEFT, __pyx_t_8) < 0) __PYX_ERR(34, 51, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_PCSide(PC_LEFT); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 51, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_LEFT, __pyx_t_7) < 0) __PYX_ERR(34, 51, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":52
  *     # native
@@ -252464,10 +273364,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     SYMMETRIC = PC_SYMMETRIC
  *     # aliases
  */
-  __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_RIGHT, __pyx_t_8) < 0) __PYX_ERR(34, 52, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_PCSide(PC_RIGHT); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 52, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_RIGHT, __pyx_t_7) < 0) __PYX_ERR(34, 52, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":53
  *     LEFT      = PC_LEFT
@@ -252476,10 +273376,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # aliases
  *     L = LEFT
  */
-  __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;
+  __pyx_t_7 = __Pyx_PyInt_From_PCSide(PC_SYMMETRIC); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 53, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SYMMETRIC, __pyx_t_7) < 0) __PYX_ERR(34, 53, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":55
  *     SYMMETRIC = PC_SYMMETRIC
@@ -252488,15 +273388,15 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     R = RIGHT
  *     S = SYMMETRIC
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_LEFT);
-  if (unlikely(!__pyx_t_8)) {
+  __pyx_t_7 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_LEFT);
+  if (unlikely(!__pyx_t_7)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_LEFT);
+    __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_LEFT);
   }
-  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_L, __pyx_t_8) < 0) __PYX_ERR(34, 55, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 55, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_L, __pyx_t_7) < 0) __PYX_ERR(34, 55, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":56
  *     # aliases
@@ -252505,15 +273405,15 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     S = SYMMETRIC
  * 
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_RIGHT);
-  if (unlikely(!__pyx_t_8)) {
+  __pyx_t_7 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_RIGHT);
+  if (unlikely(!__pyx_t_7)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_RIGHT);
+    __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_RIGHT);
   }
-  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_R, __pyx_t_8) < 0) __PYX_ERR(34, 56, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 56, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_R, __pyx_t_7) < 0) __PYX_ERR(34, 56, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":57
  *     L = LEFT
@@ -252522,15 +273422,15 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * class PCASMType(object):
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_SYMMETRIC);
-  if (unlikely(!__pyx_t_8)) {
+  __pyx_t_7 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_SYMMETRIC);
+  if (unlikely(!__pyx_t_7)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_SYMMETRIC);
+    __pyx_t_7 = __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;
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 57, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_S, __pyx_t_7) < 0) __PYX_ERR(34, 57, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":49
  *     TELESCOPE    = S_(PCTELESCOPE)
@@ -252539,13 +273439,12 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # native
  *     LEFT      = PC_LEFT
  */
-  __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_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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_PCSide, __pyx_tuple__102, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 49, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PCSide, __pyx_t_7) < 0) __PYX_ERR(34, 49, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/PC.pyx":59
  *     S = SYMMETRIC
@@ -252554,15 +273453,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NONE        = PC_ASM_NONE
  *     BASIC       = PC_ASM_BASIC
  */
-  __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_ERR(34, 59, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__103); 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_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);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__103, __pyx_n_s_PCASMType, __pyx_n_s_PCASMType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 59, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/PC.pyx":60
  * 
@@ -252571,10 +273465,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     BASIC       = PC_ASM_BASIC
  *     RESTRICT    = PC_ASM_RESTRICT
  */
-  __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_NONE, __pyx_t_8) < 0) __PYX_ERR(34, 60, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_PCASMType(PC_ASM_NONE); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 60, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NONE, __pyx_t_7) < 0) __PYX_ERR(34, 60, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":61
  * class PCASMType(object):
@@ -252583,10 +273477,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     RESTRICT    = PC_ASM_RESTRICT
  *     INTERPOLATE = PC_ASM_INTERPOLATE
  */
-  __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_BASIC, __pyx_t_8) < 0) __PYX_ERR(34, 61, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_PCASMType(PC_ASM_BASIC); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 61, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_BASIC, __pyx_t_7) < 0) __PYX_ERR(34, 61, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":62
  *     NONE        = PC_ASM_NONE
@@ -252595,10 +273489,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     INTERPOLATE = PC_ASM_INTERPOLATE
  * 
  */
-  __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_RESTRICT, __pyx_t_8) < 0) __PYX_ERR(34, 62, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_PCASMType(PC_ASM_RESTRICT); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 62, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_RESTRICT, __pyx_t_7) < 0) __PYX_ERR(34, 62, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":63
  *     BASIC       = PC_ASM_BASIC
@@ -252607,10 +273501,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * class PCGASMType(object):
  */
-  __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_INTERPOLATE, __pyx_t_8) < 0) __PYX_ERR(34, 63, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_PCASMType(PC_ASM_INTERPOLATE); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 63, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_INTERPOLATE, __pyx_t_7) < 0) __PYX_ERR(34, 63, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":59
  *     S = SYMMETRIC
@@ -252619,13 +273513,12 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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_ERR(34, 59, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_8);
-  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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_PCASMType, __pyx_tuple__103, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 59, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PCASMType, __pyx_t_7) < 0) __PYX_ERR(34, 59, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/PC.pyx":65
  *     INTERPOLATE = PC_ASM_INTERPOLATE
@@ -252634,15 +273527,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NONE        = PC_GASM_NONE
  *     BASIC       = PC_GASM_BASIC
  */
-  __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_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__104); 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);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__104, __pyx_n_s_PCGASMType, __pyx_n_s_PCGASMType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 65, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/PC.pyx":66
  * 
@@ -252651,10 +273539,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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_NONE, __pyx_t_8) < 0) __PYX_ERR(34, 66, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_PCGASMType(PC_GASM_NONE); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 66, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NONE, __pyx_t_7) < 0) __PYX_ERR(34, 66, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":67
  * class PCGASMType(object):
@@ -252663,10 +273551,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_7 = __Pyx_PyInt_From_PCGASMType(PC_GASM_BASIC); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 67, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_BASIC, __pyx_t_7) < 0) __PYX_ERR(34, 67, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":68
  *     NONE        = PC_GASM_NONE
@@ -252675,10 +273563,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     INTERPOLATE = PC_GASM_INTERPOLATE
  * 
  */
-  __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;
+  __pyx_t_7 = __Pyx_PyInt_From_PCGASMType(PC_GASM_RESTRICT); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 68, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_RESTRICT, __pyx_t_7) < 0) __PYX_ERR(34, 68, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":69
  *     BASIC       = PC_GASM_BASIC
@@ -252687,10 +273575,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * 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;
+  __pyx_t_7 = __Pyx_PyInt_From_PCGASMType(PC_GASM_INTERPOLATE); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 69, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_INTERPOLATE, __pyx_t_7) < 0) __PYX_ERR(34, 69, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":65
  *     INTERPOLATE = PC_ASM_INTERPOLATE
@@ -252699,13 +273587,12 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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_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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_PCGASMType, __pyx_tuple__104, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 65, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PCGASMType, __pyx_t_7) < 0) __PYX_ERR(34, 65, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/PC.pyx":71
  *     INTERPOLATE = PC_GASM_INTERPOLATE
@@ -252714,15 +273601,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     MULTIPLICATIVE = PC_MG_MULTIPLICATIVE
  *     ADDITIVE       = PC_MG_ADDITIVE
  */
-  __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_ERR(34, 71, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__105); 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_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);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__105, __pyx_n_s_PCMGType, __pyx_n_s_PCMGType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 71, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/PC.pyx":72
  * 
@@ -252731,10 +273613,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ADDITIVE       = PC_MG_ADDITIVE
  *     FULL           = PC_MG_FULL
  */
-  __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_MULTIPLICATIVE, __pyx_t_8) < 0) __PYX_ERR(34, 72, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_PCMGType(PC_MG_MULTIPLICATIVE); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 72, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MULTIPLICATIVE, __pyx_t_7) < 0) __PYX_ERR(34, 72, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":73
  * class PCMGType(object):
@@ -252743,10 +273625,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     FULL           = PC_MG_FULL
  *     KASKADE        = PC_MG_KASKADE
  */
-  __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_ADDITIVE, __pyx_t_8) < 0) __PYX_ERR(34, 73, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_PCMGType(PC_MG_ADDITIVE); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 73, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ADDITIVE, __pyx_t_7) < 0) __PYX_ERR(34, 73, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":74
  *     MULTIPLICATIVE = PC_MG_MULTIPLICATIVE
@@ -252755,22 +273637,22 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     KASKADE        = PC_MG_KASKADE
  * 
  */
-  __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_FULL, __pyx_t_8) < 0) __PYX_ERR(34, 74, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_PCMGType(PC_MG_FULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 74, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_FULL, __pyx_t_7) < 0) __PYX_ERR(34, 74, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":75
  *     ADDITIVE       = PC_MG_ADDITIVE
  *     FULL           = PC_MG_FULL
  *     KASKADE        = PC_MG_KASKADE             # <<<<<<<<<<<<<<
  * 
- * class PCGAMGType(object):
+ * class PCMGCycleType(object):
  */
-  __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_KASKADE, __pyx_t_8) < 0) __PYX_ERR(34, 75, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_PCMGType(PC_MG_KASKADE); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 75, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_KASKADE, __pyx_t_7) < 0) __PYX_ERR(34, 75, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/PC.pyx":71
  *     INTERPOLATE = PC_GASM_INTERPOLATE
@@ -252779,543 +273661,590 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_PCMGType, __pyx_tuple__105, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 71, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PCMGType, __pyx_t_7) < 0) __PYX_ERR(34, 71, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/PC.pyx":77
  *     KASKADE        = PC_MG_KASKADE
  * 
+ * class PCMGCycleType(object):             # <<<<<<<<<<<<<<
+ *     V = PC_MG_CYCLE_V
+ *     W = PC_MG_CYCLE_W
+ */
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__106); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 77, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__106, __pyx_n_s_PCMGCycleType, __pyx_n_s_PCMGCycleType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 77, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+
+  /* "PETSc/PC.pyx":78
+ * 
+ * class PCMGCycleType(object):
+ *     V = PC_MG_CYCLE_V             # <<<<<<<<<<<<<<
+ *     W = PC_MG_CYCLE_W
+ * 
+ */
+  __pyx_t_7 = __Pyx_PyInt_From_PCMGCycleType(PC_MG_CYCLE_V); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 78, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_V, __pyx_t_7) < 0) __PYX_ERR(34, 78, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+
+  /* "PETSc/PC.pyx":79
+ * class PCMGCycleType(object):
+ *     V = PC_MG_CYCLE_V
+ *     W = PC_MG_CYCLE_W             # <<<<<<<<<<<<<<
+ * 
+ * class PCGAMGType(object):
+ */
+  __pyx_t_7 = __Pyx_PyInt_From_PCMGCycleType(PC_MG_CYCLE_W); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 79, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_W, __pyx_t_7) < 0) __PYX_ERR(34, 79, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+
+  /* "PETSc/PC.pyx":77
+ *     KASKADE        = PC_MG_KASKADE
+ * 
+ * class PCMGCycleType(object):             # <<<<<<<<<<<<<<
+ *     V = PC_MG_CYCLE_V
+ *     W = PC_MG_CYCLE_W
+ */
+  __pyx_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_PCMGCycleType, __pyx_tuple__106, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 77, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PCMGCycleType, __pyx_t_7) < 0) __PYX_ERR(34, 77, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "PETSc/PC.pyx":81
+ *     W = PC_MG_CYCLE_W
+ * 
  * 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_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__107); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 81, __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);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__107, __pyx_n_s_PCGAMGType, __pyx_n_s_PCGAMGType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 81, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
-  /* "PETSc/PC.pyx":78
+  /* "PETSc/PC.pyx":82
  * 
  * class PCGAMGType(object):
  *     AGG       = S_(PCGAMGAGG)             # <<<<<<<<<<<<<<
  *     GEO       = S_(PCGAMGGEO)
  *     CLASSICAL = S_(PCGAMGCLASSICAL)
  */
-  __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_AGG, __pyx_t_8) < 0) __PYX_ERR(34, 78, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCGAMGAGG); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 82, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_AGG, __pyx_t_7) < 0) __PYX_ERR(34, 82, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/PC.pyx":79
+  /* "PETSc/PC.pyx":83
  * class PCGAMGType(object):
  *     AGG       = S_(PCGAMGAGG)
  *     GEO       = S_(PCGAMGGEO)             # <<<<<<<<<<<<<<
  *     CLASSICAL = S_(PCGAMGCLASSICAL)
  * 
  */
-  __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_GEO, __pyx_t_8) < 0) __PYX_ERR(34, 79, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCGAMGGEO); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 83, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_GEO, __pyx_t_7) < 0) __PYX_ERR(34, 83, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/PC.pyx":80
+  /* "PETSc/PC.pyx":84
  *     AGG       = S_(PCGAMGAGG)
  *     GEO       = S_(PCGAMGGEO)
  *     CLASSICAL = S_(PCGAMGCLASSICAL)             # <<<<<<<<<<<<<<
  * 
  * class PCCompositeType(object):
  */
-  __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_CLASSICAL, __pyx_t_8) < 0) __PYX_ERR(34, 80, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PCGAMGCLASSICAL); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 84, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CLASSICAL, __pyx_t_7) < 0) __PYX_ERR(34, 84, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/PC.pyx":77
- *     KASKADE        = PC_MG_KASKADE
+  /* "PETSc/PC.pyx":81
+ *     W = PC_MG_CYCLE_W
  * 
  * class PCGAMGType(object):             # <<<<<<<<<<<<<<
  *     AGG       = S_(PCGAMGAGG)
  *     GEO       = S_(PCGAMGGEO)
  */
-  __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_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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_PCGAMGType, __pyx_tuple__107, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 81, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PCGAMGType, __pyx_t_7) < 0) __PYX_ERR(34, 81, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/PC.pyx":82
+  /* "PETSc/PC.pyx":86
  *     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_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_ERR(34, 82, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__108); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 86, __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_ERR(34, 82, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__108, __pyx_n_s_PCCompositeType, __pyx_n_s_PCCompositeType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 86, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
-  /* "PETSc/PC.pyx":83
+  /* "PETSc/PC.pyx":87
  * 
  * class PCCompositeType(object):
  *     ADDITIVE                 = PC_COMPOSITE_ADDITIVE             # <<<<<<<<<<<<<<
  *     MULTIPLICATIVE           = PC_COMPOSITE_MULTIPLICATIVE
  *     SYMMETRIC_MULTIPLICATIVE = PC_COMPOSITE_SYMMETRIC_MULTIPLICATIVE
  */
-  __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_ADDITIVE, __pyx_t_8) < 0) __PYX_ERR(34, 83, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_PCCompositeType(PC_COMPOSITE_ADDITIVE); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 87, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ADDITIVE, __pyx_t_7) < 0) __PYX_ERR(34, 87, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/PC.pyx":84
+  /* "PETSc/PC.pyx":88
  * class PCCompositeType(object):
  *     ADDITIVE                 = PC_COMPOSITE_ADDITIVE
  *     MULTIPLICATIVE           = PC_COMPOSITE_MULTIPLICATIVE             # <<<<<<<<<<<<<<
  *     SYMMETRIC_MULTIPLICATIVE = PC_COMPOSITE_SYMMETRIC_MULTIPLICATIVE
  *     SPECIAL                  = PC_COMPOSITE_SPECIAL
  */
-  __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_MULTIPLICATIVE, __pyx_t_8) < 0) __PYX_ERR(34, 84, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_PCCompositeType(PC_COMPOSITE_MULTIPLICATIVE); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 88, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MULTIPLICATIVE, __pyx_t_7) < 0) __PYX_ERR(34, 88, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/PC.pyx":85
+  /* "PETSc/PC.pyx":89
  *     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 = __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_SYMMETRIC_MULTIPLICATIVE, __pyx_t_8) < 0) __PYX_ERR(34, 85, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_PCCompositeType(PC_COMPOSITE_SYMMETRIC_MULTIPLICATIVE); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 89, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SYMMETRIC_MULTIPLICATIVE, __pyx_t_7) < 0) __PYX_ERR(34, 89, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/PC.pyx":86
+  /* "PETSc/PC.pyx":90
  *     MULTIPLICATIVE           = PC_COMPOSITE_MULTIPLICATIVE
  *     SYMMETRIC_MULTIPLICATIVE = PC_COMPOSITE_SYMMETRIC_MULTIPLICATIVE
  *     SPECIAL                  = PC_COMPOSITE_SPECIAL             # <<<<<<<<<<<<<<
  *     SCHUR                    = PC_COMPOSITE_SCHUR
  * 
  */
-  __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_SPECIAL, __pyx_t_8) < 0) __PYX_ERR(34, 86, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_PCCompositeType(PC_COMPOSITE_SPECIAL); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 90, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SPECIAL, __pyx_t_7) < 0) __PYX_ERR(34, 90, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/PC.pyx":87
+  /* "PETSc/PC.pyx":91
  *     SYMMETRIC_MULTIPLICATIVE = PC_COMPOSITE_SYMMETRIC_MULTIPLICATIVE
  *     SPECIAL                  = PC_COMPOSITE_SPECIAL
  *     SCHUR                    = PC_COMPOSITE_SCHUR             # <<<<<<<<<<<<<<
  * 
  * class PCFieldSplitSchurPreType(object):
  */
-  __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_SCHUR, __pyx_t_8) < 0) __PYX_ERR(34, 87, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_PCCompositeType(PC_COMPOSITE_SCHUR); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 91, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SCHUR, __pyx_t_7) < 0) __PYX_ERR(34, 91, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/PC.pyx":82
+  /* "PETSc/PC.pyx":86
  *     CLASSICAL = S_(PCGAMGCLASSICAL)
  * 
  * class PCCompositeType(object):             # <<<<<<<<<<<<<<
  *     ADDITIVE                 = PC_COMPOSITE_ADDITIVE
  *     MULTIPLICATIVE           = PC_COMPOSITE_MULTIPLICATIVE
  */
-  __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_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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_PCCompositeType, __pyx_tuple__108, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 86, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PCCompositeType, __pyx_t_7) < 0) __PYX_ERR(34, 86, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/PC.pyx":89
+  /* "PETSc/PC.pyx":93
  *     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_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_ERR(34, 89, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__109); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 93, __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_ERR(34, 89, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__109, __pyx_n_s_PCFieldSplitSchurPreType, __pyx_n_s_PCFieldSplitSchurPreType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 93, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
-  /* "PETSc/PC.pyx":90
+  /* "PETSc/PC.pyx":94
  * 
  * class PCFieldSplitSchurPreType(object):
  *     SELF                     = PC_FIELDSPLIT_SCHUR_PRE_SELF             # <<<<<<<<<<<<<<
  *     SELFP                    = PC_FIELDSPLIT_SCHUR_PRE_SELFP
  *     A11                      = PC_FIELDSPLIT_SCHUR_PRE_A11
  */
-  __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_SELF, __pyx_t_8) < 0) __PYX_ERR(34, 90, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_PCFieldSplitSchurPreType(PC_FIELDSPLIT_SCHUR_PRE_SELF); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 94, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SELF, __pyx_t_7) < 0) __PYX_ERR(34, 94, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/PC.pyx":91
+  /* "PETSc/PC.pyx":95
  * 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 = __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_SELFP, __pyx_t_8) < 0) __PYX_ERR(34, 91, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_PCFieldSplitSchurPreType(PC_FIELDSPLIT_SCHUR_PRE_SELFP); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 95, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SELFP, __pyx_t_7) < 0) __PYX_ERR(34, 95, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/PC.pyx":92
+  /* "PETSc/PC.pyx":96
  *     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 = __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_A11, __pyx_t_8) < 0) __PYX_ERR(34, 92, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_PCFieldSplitSchurPreType(PC_FIELDSPLIT_SCHUR_PRE_A11); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 96, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_A11, __pyx_t_7) < 0) __PYX_ERR(34, 96, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/PC.pyx":93
+  /* "PETSc/PC.pyx":97
  *     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;
+  __pyx_t_7 = __Pyx_PyInt_From_PCFieldSplitSchurPreType(PC_FIELDSPLIT_SCHUR_PRE_USER); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 97, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_USER, __pyx_t_7) < 0) __PYX_ERR(34, 97, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/PC.pyx":94
+  /* "PETSc/PC.pyx":98
  *     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;
+  __pyx_t_7 = __Pyx_PyInt_From_PCFieldSplitSchurPreType(PC_FIELDSPLIT_SCHUR_PRE_FULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 98, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_FULL, __pyx_t_7) < 0) __PYX_ERR(34, 98, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/PC.pyx":89
+  /* "PETSc/PC.pyx":93
  *     SCHUR                    = PC_COMPOSITE_SCHUR
  * 
  * class PCFieldSplitSchurPreType(object):             # <<<<<<<<<<<<<<
  *     SELF                     = PC_FIELDSPLIT_SCHUR_PRE_SELF
  *     SELFP                    = PC_FIELDSPLIT_SCHUR_PRE_SELFP
  */
-  __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 (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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_PCFieldSplitSchurPreType, __pyx_tuple__109, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 93, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PCFieldSplitSchurPreType, __pyx_t_7) < 0) __PYX_ERR(34, 93, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/PC.pyx":96
+  /* "PETSc/PC.pyx":100
  *     FULL                     = PC_FIELDSPLIT_SCHUR_PRE_FULL
  * 
  * class PCFieldSplitSchurFactType(object):             # <<<<<<<<<<<<<<
  *     DIAG                     = PC_FIELDSPLIT_SCHUR_FACT_DIAG
  *     LOWER                    = PC_FIELDSPLIT_SCHUR_FACT_LOWER
  */
-  __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_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__110); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 100, __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);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__110, __pyx_n_s_PCFieldSplitSchurFactType, __pyx_n_s_PCFieldSplitSchurFactType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(34, 100, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
-  /* "PETSc/PC.pyx":97
+  /* "PETSc/PC.pyx":101
  * 
  * class PCFieldSplitSchurFactType(object):
  *     DIAG                     = PC_FIELDSPLIT_SCHUR_FACT_DIAG             # <<<<<<<<<<<<<<
  *     LOWER                    = PC_FIELDSPLIT_SCHUR_FACT_LOWER
  *     UPPER                    = PC_FIELDSPLIT_SCHUR_FACT_UPPER
  */
-  __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_DIAG, __pyx_t_8) < 0) __PYX_ERR(34, 97, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_PCFieldSplitSchurFactType(PC_FIELDSPLIT_SCHUR_FACT_DIAG); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 101, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIAG, __pyx_t_7) < 0) __PYX_ERR(34, 101, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/PC.pyx":98
+  /* "PETSc/PC.pyx":102
  * 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 = __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_LOWER, __pyx_t_8) < 0) __PYX_ERR(34, 98, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_PCFieldSplitSchurFactType(PC_FIELDSPLIT_SCHUR_FACT_LOWER); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 102, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_LOWER, __pyx_t_7) < 0) __PYX_ERR(34, 102, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/PC.pyx":99
+  /* "PETSc/PC.pyx":103
  *     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 = __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_UPPER, __pyx_t_8) < 0) __PYX_ERR(34, 99, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_PCFieldSplitSchurFactType(PC_FIELDSPLIT_SCHUR_FACT_UPPER); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 103, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_UPPER, __pyx_t_7) < 0) __PYX_ERR(34, 103, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/PC.pyx":100
+  /* "PETSc/PC.pyx":104
  *     LOWER                    = PC_FIELDSPLIT_SCHUR_FACT_LOWER
  *     UPPER                    = PC_FIELDSPLIT_SCHUR_FACT_UPPER
  *     FULL                     = PC_FIELDSPLIT_SCHUR_FACT_FULL             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-  __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_FULL, __pyx_t_8) < 0) __PYX_ERR(34, 100, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_PCFieldSplitSchurFactType(PC_FIELDSPLIT_SCHUR_FACT_FULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 104, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_FULL, __pyx_t_7) < 0) __PYX_ERR(34, 104, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/PC.pyx":96
+  /* "PETSc/PC.pyx":100
  *     FULL                     = PC_FIELDSPLIT_SCHUR_PRE_FULL
  * 
  * 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_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_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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_PCFieldSplitSchurFactType, __pyx_tuple__110, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(34, 100, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PCFieldSplitSchurFactType, __pyx_t_7) < 0) __PYX_ERR(34, 100, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/PC.pyx":106
+  /* "PETSc/PC.pyx":110
  * cdef class PC(Object):
  * 
  *     Type = PCType             # <<<<<<<<<<<<<<
  *     Side = PCSide
  * 
  */
-  __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_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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_PCType); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 110, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC->tp_dict, __pyx_n_s_Type, __pyx_t_1) < 0) __PYX_ERR(34, 110, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_PC);
 
-  /* "PETSc/PC.pyx":107
+  /* "PETSc/PC.pyx":111
  * 
  *     Type = PCType
  *     Side = PCSide             # <<<<<<<<<<<<<<
  * 
  *     ASMType       = PCASMType
  */
-  __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_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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_PCSide); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 111, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC->tp_dict, __pyx_n_s_Side, __pyx_t_1) < 0) __PYX_ERR(34, 111, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_PC);
 
-  /* "PETSc/PC.pyx":109
+  /* "PETSc/PC.pyx":113
  *     Side = PCSide
  * 
  *     ASMType       = PCASMType             # <<<<<<<<<<<<<<
  *     GASMType      = PCGASMType
  *     MGType        = PCMGType
  */
-  __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_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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_PCASMType); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 113, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC->tp_dict, __pyx_n_s_ASMType, __pyx_t_1) < 0) __PYX_ERR(34, 113, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_PC);
 
-  /* "PETSc/PC.pyx":110
+  /* "PETSc/PC.pyx":114
  * 
  *     ASMType       = PCASMType
  *     GASMType      = PCGASMType             # <<<<<<<<<<<<<<
  *     MGType        = PCMGType
- *     GAMGType      = PCGAMGType
+ *     MGCycleType   = PCMGCycleType
  */
-  __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_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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_PCGASMType); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 114, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC->tp_dict, __pyx_n_s_GASMType, __pyx_t_1) < 0) __PYX_ERR(34, 114, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_PC);
 
-  /* "PETSc/PC.pyx":111
+  /* "PETSc/PC.pyx":115
  *     ASMType       = PCASMType
  *     GASMType      = PCGASMType
  *     MGType        = PCMGType             # <<<<<<<<<<<<<<
+ *     MGCycleType   = PCMGCycleType
  *     GAMGType      = PCGAMGType
- *     CompositeType = PCCompositeType
  */
-  __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_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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_PCMGType); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 115, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC->tp_dict, __pyx_n_s_MGType, __pyx_t_1) < 0) __PYX_ERR(34, 115, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_PC);
 
-  /* "PETSc/PC.pyx":112
+  /* "PETSc/PC.pyx":116
  *     GASMType      = PCGASMType
  *     MGType        = PCMGType
+ *     MGCycleType   = PCMGCycleType             # <<<<<<<<<<<<<<
+ *     GAMGType      = PCGAMGType
+ *     CompositeType = PCCompositeType
+ */
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_PCMGCycleType); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 116, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC->tp_dict, __pyx_n_s_MGCycleType, __pyx_t_1) < 0) __PYX_ERR(34, 116, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_PC);
+
+  /* "PETSc/PC.pyx":117
+ *     MGType        = PCMGType
+ *     MGCycleType   = PCMGCycleType
  *     GAMGType      = PCGAMGType             # <<<<<<<<<<<<<<
  *     CompositeType = PCCompositeType
  *     SchurFactType = PCFieldSplitSchurFactType
  */
-  __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_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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_PCGAMGType); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 117, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC->tp_dict, __pyx_n_s_GAMGType, __pyx_t_1) < 0) __PYX_ERR(34, 117, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_PC);
 
-  /* "PETSc/PC.pyx":113
- *     MGType        = PCMGType
+  /* "PETSc/PC.pyx":118
+ *     MGCycleType   = PCMGCycleType
  *     GAMGType      = PCGAMGType
  *     CompositeType = PCCompositeType             # <<<<<<<<<<<<<<
  *     SchurFactType = PCFieldSplitSchurFactType
  *     SchurPreType  = PCFieldSplitSchurPreType
  */
-  __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_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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_PCCompositeType); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 118, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC->tp_dict, __pyx_n_s_CompositeType, __pyx_t_1) < 0) __PYX_ERR(34, 118, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_PC);
 
-  /* "PETSc/PC.pyx":114
+  /* "PETSc/PC.pyx":119
  *     GAMGType      = PCGAMGType
  *     CompositeType = PCCompositeType
  *     SchurFactType = PCFieldSplitSchurFactType             # <<<<<<<<<<<<<<
  *     SchurPreType  = PCFieldSplitSchurPreType
  * 
  */
-  __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_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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_PCFieldSplitSchurFactType); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 119, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC->tp_dict, __pyx_n_s_SchurFactType, __pyx_t_1) < 0) __PYX_ERR(34, 119, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_PC);
 
-  /* "PETSc/PC.pyx":115
+  /* "PETSc/PC.pyx":120
  *     CompositeType = PCCompositeType
  *     SchurFactType = PCFieldSplitSchurFactType
  *     SchurPreType  = PCFieldSplitSchurPreType             # <<<<<<<<<<<<<<
  * 
  *     # --- xxx ---
  */
-  __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_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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_PCFieldSplitSchurPreType); if (unlikely(!__pyx_t_1)) __PYX_ERR(34, 120, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_PC->tp_dict, __pyx_n_s_SchurPreType, __pyx_t_1) < 0) __PYX_ERR(34, 120, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_PC);
 
-  /* "PETSc/PC.pyx":574
+  /* "PETSc/PC.pyx":582
  * # --------------------------------------------------------------------
  * 
  * del PCType             # <<<<<<<<<<<<<<
  * del PCSide
  * del PCASMType
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCType) < 0) __PYX_ERR(34, 574, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCType) < 0) __PYX_ERR(34, 582, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":575
+  /* "PETSc/PC.pyx":583
  * 
  * del PCType
  * del PCSide             # <<<<<<<<<<<<<<
  * del PCASMType
  * del PCGASMType
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCSide) < 0) __PYX_ERR(34, 575, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCSide) < 0) __PYX_ERR(34, 583, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":576
+  /* "PETSc/PC.pyx":584
  * del PCType
  * del PCSide
  * del PCASMType             # <<<<<<<<<<<<<<
  * del PCGASMType
  * del PCMGType
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCASMType) < 0) __PYX_ERR(34, 576, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCASMType) < 0) __PYX_ERR(34, 584, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":577
+  /* "PETSc/PC.pyx":585
  * del PCSide
  * del PCASMType
  * del PCGASMType             # <<<<<<<<<<<<<<
  * del PCMGType
- * del PCGAMGType
+ * del PCMGCycleType
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCGASMType) < 0) __PYX_ERR(34, 577, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCGASMType) < 0) __PYX_ERR(34, 585, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":578
+  /* "PETSc/PC.pyx":586
  * del PCASMType
  * del PCGASMType
  * del PCMGType             # <<<<<<<<<<<<<<
+ * del PCMGCycleType
  * del PCGAMGType
- * del PCCompositeType
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCMGType) < 0) __PYX_ERR(34, 578, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCMGType) < 0) __PYX_ERR(34, 586, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":579
+  /* "PETSc/PC.pyx":587
  * del PCGASMType
  * del PCMGType
+ * del PCMGCycleType             # <<<<<<<<<<<<<<
+ * del PCGAMGType
+ * del PCCompositeType
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCMGCycleType) < 0) __PYX_ERR(34, 587, __pyx_L1_error)
+
+  /* "PETSc/PC.pyx":588
+ * del PCMGType
+ * del PCMGCycleType
  * del PCGAMGType             # <<<<<<<<<<<<<<
  * del PCCompositeType
  * del PCFieldSplitSchurPreType
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCGAMGType) < 0) __PYX_ERR(34, 579, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCGAMGType) < 0) __PYX_ERR(34, 588, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":580
- * del PCMGType
+  /* "PETSc/PC.pyx":589
+ * del PCMGCycleType
  * 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)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCCompositeType) < 0) __PYX_ERR(34, 589, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":581
+  /* "PETSc/PC.pyx":590
  * del PCGAMGType
  * del PCCompositeType
  * del PCFieldSplitSchurPreType             # <<<<<<<<<<<<<<
  * del PCFieldSplitSchurFactType
  * 
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCFieldSplitSchurPreType) < 0) __PYX_ERR(34, 581, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCFieldSplitSchurPreType) < 0) __PYX_ERR(34, 590, __pyx_L1_error)
 
-  /* "PETSc/PC.pyx":582
+  /* "PETSc/PC.pyx":591
  * del PCCompositeType
  * del PCFieldSplitSchurPreType
  * del PCFieldSplitSchurFactType             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCFieldSplitSchurFactType) < 0) __PYX_ERR(34, 582, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_PCFieldSplitSchurFactType) < 0) __PYX_ERR(34, 591, __pyx_L1_error)
 
   /* "PETSc/KSP.pyx":3
  * # --------------------------------------------------------------------
@@ -253324,15 +274253,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     RICHARDSON = S_(KSPRICHARDSON)
  *     CHEBYSHEV  = S_(KSPCHEBYSHEV)
  */
-  __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_ERR(35, 3, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__111); 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_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);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__111, __pyx_n_s_KSPType, __pyx_n_s_KSPType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/KSP.pyx":4
  * 
@@ -253341,10 +274265,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     CHEBYSHEV  = S_(KSPCHEBYSHEV)
  *     CG         = S_(KSPCG)
  */
-  __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_RICHARDSON, __pyx_t_8) < 0) __PYX_ERR(35, 4, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPRICHARDSON); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_RICHARDSON, __pyx_t_7) < 0) __PYX_ERR(35, 4, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":5
  * class KSPType(object):
@@ -253353,10 +274277,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     CG         = S_(KSPCG)
  *     GROPPCG    = S_(KSPGROPPCG)
  */
-  __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_CHEBYSHEV, __pyx_t_8) < 0) __PYX_ERR(35, 5, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPCHEBYSHEV); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 5, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CHEBYSHEV, __pyx_t_7) < 0) __PYX_ERR(35, 5, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":6
  *     RICHARDSON = S_(KSPRICHARDSON)
@@ -253365,10 +274289,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     GROPPCG    = S_(KSPGROPPCG)
  *     PIPECG     = S_(KSPPIPECG)
  */
-  __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_CG, __pyx_t_8) < 0) __PYX_ERR(35, 6, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPCG); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 6, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CG, __pyx_t_7) < 0) __PYX_ERR(35, 6, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":7
  *     CHEBYSHEV  = S_(KSPCHEBYSHEV)
@@ -253377,10 +274301,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     PIPECG     = S_(KSPPIPECG)
  *     PIPECGRR   = S_(KSPPIPECGRR)
  */
-  __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_GROPPCG, __pyx_t_8) < 0) __PYX_ERR(35, 7, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPGROPPCG); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_GROPPCG, __pyx_t_7) < 0) __PYX_ERR(35, 7, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":8
  *     CG         = S_(KSPCG)
@@ -253389,94 +274313,94 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     PIPECGRR   = S_(KSPPIPECGRR)
  *     CGNE       = S_(KSPCGNE)
  */
-  __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_PIPECG, __pyx_t_8) < 0) __PYX_ERR(35, 8, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPPIPECG); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 8, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_PIPECG, __pyx_t_7) < 0) __PYX_ERR(35, 8, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":9
  *     GROPPCG    = S_(KSPGROPPCG)
  *     PIPECG     = S_(KSPPIPECG)
  *     PIPECGRR   = S_(KSPPIPECGRR)             # <<<<<<<<<<<<<<
  *     CGNE       = S_(KSPCGNE)
- *     NASH       = S_(KSPNASH)
+ *     CGNASH     = S_(KSPCGNASH)
  */
-  __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_PIPECGRR, __pyx_t_8) < 0) __PYX_ERR(35, 9, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPPIPECGRR); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 9, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_PIPECGRR, __pyx_t_7) < 0) __PYX_ERR(35, 9, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":10
  *     PIPECG     = S_(KSPPIPECG)
  *     PIPECGRR   = S_(KSPPIPECGRR)
  *     CGNE       = S_(KSPCGNE)             # <<<<<<<<<<<<<<
- *     NASH       = S_(KSPNASH)
- *     STCG       = S_(KSPSTCG)
+ *     CGNASH     = S_(KSPCGNASH)
+ *     CGSTCG     = S_(KSPCGSTCG)
  */
-  __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_CGNE, __pyx_t_8) < 0) __PYX_ERR(35, 10, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPCGNE); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 10, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CGNE, __pyx_t_7) < 0) __PYX_ERR(35, 10, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":11
  *     PIPECGRR   = S_(KSPPIPECGRR)
  *     CGNE       = S_(KSPCGNE)
- *     NASH       = S_(KSPNASH)             # <<<<<<<<<<<<<<
- *     STCG       = S_(KSPSTCG)
- *     GLTR       = S_(KSPGLTR)
+ *     CGNASH     = S_(KSPCGNASH)             # <<<<<<<<<<<<<<
+ *     CGSTCG     = S_(KSPCGSTCG)
+ *     CGGLTR     = S_(KSPCGGLTR)
  */
-  __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_NASH, __pyx_t_8) < 0) __PYX_ERR(35, 11, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPCGNASH); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 11, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CGNASH, __pyx_t_7) < 0) __PYX_ERR(35, 11, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":12
  *     CGNE       = S_(KSPCGNE)
- *     NASH       = S_(KSPNASH)
- *     STCG       = S_(KSPSTCG)             # <<<<<<<<<<<<<<
- *     GLTR       = S_(KSPGLTR)
+ *     CGNASH     = S_(KSPCGNASH)
+ *     CGSTCG     = S_(KSPCGSTCG)             # <<<<<<<<<<<<<<
+ *     CGGLTR     = S_(KSPCGGLTR)
  *     FCG        = S_(KSPFCG)
  */
-  __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_STCG, __pyx_t_8) < 0) __PYX_ERR(35, 12, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPCGSTCG); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 12, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CGSTCG, __pyx_t_7) < 0) __PYX_ERR(35, 12, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":13
- *     NASH       = S_(KSPNASH)
- *     STCG       = S_(KSPSTCG)
- *     GLTR       = S_(KSPGLTR)             # <<<<<<<<<<<<<<
+ *     CGNASH     = S_(KSPCGNASH)
+ *     CGSTCG     = S_(KSPCGSTCG)
+ *     CGGLTR     = S_(KSPCGGLTR)             # <<<<<<<<<<<<<<
  *     FCG        = S_(KSPFCG)
  *     PIPEFCG    = S_(KSPPIPEFCG)
  */
-  __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_GLTR, __pyx_t_8) < 0) __PYX_ERR(35, 13, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPCGGLTR); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 13, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CGGLTR, __pyx_t_7) < 0) __PYX_ERR(35, 13, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":14
- *     STCG       = S_(KSPSTCG)
- *     GLTR       = S_(KSPGLTR)
+ *     CGSTCG     = S_(KSPCGSTCG)
+ *     CGGLTR     = S_(KSPCGGLTR)
  *     FCG        = S_(KSPFCG)             # <<<<<<<<<<<<<<
  *     PIPEFCG    = S_(KSPPIPEFCG)
  *     GMRES      = S_(KSPGMRES)
  */
-  __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_FCG, __pyx_t_8) < 0) __PYX_ERR(35, 14, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPFCG); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 14, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_FCG, __pyx_t_7) < 0) __PYX_ERR(35, 14, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":15
- *     GLTR       = S_(KSPGLTR)
+ *     CGGLTR     = S_(KSPCGGLTR)
  *     FCG        = S_(KSPFCG)
  *     PIPEFCG    = S_(KSPPIPEFCG)             # <<<<<<<<<<<<<<
  *     GMRES      = S_(KSPGMRES)
  *     PIPEFGMRES = S_(KSPPIPEFGMRES)
  */
-  __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_PIPEFCG, __pyx_t_8) < 0) __PYX_ERR(35, 15, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPPIPEFCG); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 15, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_PIPEFCG, __pyx_t_7) < 0) __PYX_ERR(35, 15, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":16
  *     FCG        = S_(KSPFCG)
@@ -253485,10 +274409,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     PIPEFGMRES = S_(KSPPIPEFGMRES)
  *     FGMRES     = S_(KSPFGMRES)
  */
-  __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_GMRES, __pyx_t_8) < 0) __PYX_ERR(35, 16, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPGMRES); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 16, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_GMRES, __pyx_t_7) < 0) __PYX_ERR(35, 16, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":17
  *     PIPEFCG    = S_(KSPPIPEFCG)
@@ -253497,10 +274421,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     FGMRES     = S_(KSPFGMRES)
  *     LGMRES     = S_(KSPLGMRES)
  */
-  __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_PIPEFGMRES, __pyx_t_8) < 0) __PYX_ERR(35, 17, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPPIPEFGMRES); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 17, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_PIPEFGMRES, __pyx_t_7) < 0) __PYX_ERR(35, 17, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":18
  *     GMRES      = S_(KSPGMRES)
@@ -253509,10 +274433,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     LGMRES     = S_(KSPLGMRES)
  *     DGMRES     = S_(KSPDGMRES)
  */
-  __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_FGMRES, __pyx_t_8) < 0) __PYX_ERR(35, 18, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPFGMRES); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 18, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_FGMRES, __pyx_t_7) < 0) __PYX_ERR(35, 18, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":19
  *     PIPEFGMRES = S_(KSPPIPEFGMRES)
@@ -253521,10 +274445,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     DGMRES     = S_(KSPDGMRES)
  *     PGMRES     = S_(KSPPGMRES)
  */
-  __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_LGMRES, __pyx_t_8) < 0) __PYX_ERR(35, 19, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPLGMRES); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_LGMRES, __pyx_t_7) < 0) __PYX_ERR(35, 19, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":20
  *     FGMRES     = S_(KSPFGMRES)
@@ -253533,10 +274457,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     PGMRES     = S_(KSPPGMRES)
  *     TCQMR      = S_(KSPTCQMR)
  */
-  __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_DGMRES, __pyx_t_8) < 0) __PYX_ERR(35, 20, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPDGMRES); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 20, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DGMRES, __pyx_t_7) < 0) __PYX_ERR(35, 20, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":21
  *     LGMRES     = S_(KSPLGMRES)
@@ -253545,10 +274469,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     TCQMR      = S_(KSPTCQMR)
  *     BCGS       = S_(KSPBCGS)
  */
-  __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_PGMRES, __pyx_t_8) < 0) __PYX_ERR(35, 21, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPPGMRES); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 21, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_PGMRES, __pyx_t_7) < 0) __PYX_ERR(35, 21, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":22
  *     DGMRES     = S_(KSPDGMRES)
@@ -253557,10 +274481,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     BCGS       = S_(KSPBCGS)
  *     IBCGS      = S_(KSPIBCGS)
  */
-  __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_TCQMR, __pyx_t_8) < 0) __PYX_ERR(35, 22, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPTCQMR); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 22, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_TCQMR, __pyx_t_7) < 0) __PYX_ERR(35, 22, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":23
  *     PGMRES     = S_(KSPPGMRES)
@@ -253569,10 +274493,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     IBCGS      = S_(KSPIBCGS)
  *     FBCGS      = S_(KSPFBCGS)
  */
-  __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_BCGS, __pyx_t_8) < 0) __PYX_ERR(35, 23, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPBCGS); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 23, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_BCGS, __pyx_t_7) < 0) __PYX_ERR(35, 23, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":24
  *     TCQMR      = S_(KSPTCQMR)
@@ -253581,10 +274505,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     FBCGS      = S_(KSPFBCGS)
  *     FBCGSR     = S_(KSPFBCGSR)
  */
-  __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_IBCGS, __pyx_t_8) < 0) __PYX_ERR(35, 24, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPIBCGS); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 24, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_IBCGS, __pyx_t_7) < 0) __PYX_ERR(35, 24, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":25
  *     BCGS       = S_(KSPBCGS)
@@ -253593,10 +274517,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     FBCGSR     = S_(KSPFBCGSR)
  *     BCGSL      = S_(KSPBCGSL)
  */
-  __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_FBCGS, __pyx_t_8) < 0) __PYX_ERR(35, 25, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPFBCGS); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 25, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_FBCGS, __pyx_t_7) < 0) __PYX_ERR(35, 25, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":26
  *     IBCGS      = S_(KSPIBCGS)
@@ -253605,10 +274529,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     BCGSL      = S_(KSPBCGSL)
  *     CGS        = S_(KSPCGS)
  */
-  __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_FBCGSR, __pyx_t_8) < 0) __PYX_ERR(35, 26, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPFBCGSR); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 26, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_FBCGSR, __pyx_t_7) < 0) __PYX_ERR(35, 26, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":27
  *     FBCGS      = S_(KSPFBCGS)
@@ -253617,10 +274541,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     CGS        = S_(KSPCGS)
  *     TFQMR      = S_(KSPTFQMR)
  */
-  __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_BCGSL, __pyx_t_8) < 0) __PYX_ERR(35, 27, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPBCGSL); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 27, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_BCGSL, __pyx_t_7) < 0) __PYX_ERR(35, 27, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":28
  *     FBCGSR     = S_(KSPFBCGSR)
@@ -253629,10 +274553,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     TFQMR      = S_(KSPTFQMR)
  *     CR         = S_(KSPCR)
  */
-  __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_CGS, __pyx_t_8) < 0) __PYX_ERR(35, 28, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPCGS); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 28, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CGS, __pyx_t_7) < 0) __PYX_ERR(35, 28, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":29
  *     BCGSL      = S_(KSPBCGSL)
@@ -253641,10 +274565,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     CR         = S_(KSPCR)
  *     PIPECR     = S_(KSPPIPECR)
  */
-  __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_TFQMR, __pyx_t_8) < 0) __PYX_ERR(35, 29, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPTFQMR); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 29, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_TFQMR, __pyx_t_7) < 0) __PYX_ERR(35, 29, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":30
  *     CGS        = S_(KSPCGS)
@@ -253653,10 +274577,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     PIPECR     = S_(KSPPIPECR)
  *     LSQR       = S_(KSPLSQR)
  */
-  __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_CR, __pyx_t_8) < 0) __PYX_ERR(35, 30, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPCR); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 30, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CR, __pyx_t_7) < 0) __PYX_ERR(35, 30, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":31
  *     TFQMR      = S_(KSPTFQMR)
@@ -253665,10 +274589,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     LSQR       = S_(KSPLSQR)
  *     PREONLY    = S_(KSPPREONLY)
  */
-  __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_PIPECR, __pyx_t_8) < 0) __PYX_ERR(35, 31, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPPIPECR); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 31, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_PIPECR, __pyx_t_7) < 0) __PYX_ERR(35, 31, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":32
  *     CR         = S_(KSPCR)
@@ -253677,10 +274601,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     PREONLY    = S_(KSPPREONLY)
  *     QCG        = S_(KSPQCG)
  */
-  __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_LSQR, __pyx_t_8) < 0) __PYX_ERR(35, 32, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPLSQR); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 32, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_LSQR, __pyx_t_7) < 0) __PYX_ERR(35, 32, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":33
  *     PIPECR     = S_(KSPPIPECR)
@@ -253689,10 +274613,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     QCG        = S_(KSPQCG)
  *     BICG       = S_(KSPBICG)
  */
-  __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_PREONLY, __pyx_t_8) < 0) __PYX_ERR(35, 33, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPPREONLY); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 33, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_PREONLY, __pyx_t_7) < 0) __PYX_ERR(35, 33, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":34
  *     LSQR       = S_(KSPLSQR)
@@ -253701,10 +274625,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     BICG       = S_(KSPBICG)
  *     MINRES     = S_(KSPMINRES)
  */
-  __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_QCG, __pyx_t_8) < 0) __PYX_ERR(35, 34, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPQCG); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 34, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_QCG, __pyx_t_7) < 0) __PYX_ERR(35, 34, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":35
  *     PREONLY    = S_(KSPPREONLY)
@@ -253713,10 +274637,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     MINRES     = S_(KSPMINRES)
  *     SYMMLQ     = S_(KSPSYMMLQ)
  */
-  __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_BICG, __pyx_t_8) < 0) __PYX_ERR(35, 35, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPBICG); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 35, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_BICG, __pyx_t_7) < 0) __PYX_ERR(35, 35, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":36
  *     QCG        = S_(KSPQCG)
@@ -253725,10 +274649,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     SYMMLQ     = S_(KSPSYMMLQ)
  *     LCD        = S_(KSPLCD)
  */
-  __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_MINRES, __pyx_t_8) < 0) __PYX_ERR(35, 36, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPMINRES); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 36, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MINRES, __pyx_t_7) < 0) __PYX_ERR(35, 36, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":37
  *     BICG       = S_(KSPBICG)
@@ -253737,10 +274661,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     LCD        = S_(KSPLCD)
  *     PYTHON     = S_(KSPPYTHON)
  */
-  __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_SYMMLQ, __pyx_t_8) < 0) __PYX_ERR(35, 37, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPSYMMLQ); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 37, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SYMMLQ, __pyx_t_7) < 0) __PYX_ERR(35, 37, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":38
  *     MINRES     = S_(KSPMINRES)
@@ -253749,10 +274673,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     PYTHON     = S_(KSPPYTHON)
  *     GCR        = S_(KSPGCR)
  */
-  __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_LCD, __pyx_t_8) < 0) __PYX_ERR(35, 38, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPLCD); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 38, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_LCD, __pyx_t_7) < 0) __PYX_ERR(35, 38, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":39
  *     SYMMLQ     = S_(KSPSYMMLQ)
@@ -253761,10 +274685,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     GCR        = S_(KSPGCR)
  *     PIPEGCR    = S_(KSPPIPEGCR)
  */
-  __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_PYTHON, __pyx_t_8) < 0) __PYX_ERR(35, 39, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPPYTHON); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 39, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_PYTHON, __pyx_t_7) < 0) __PYX_ERR(35, 39, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":40
  *     LCD        = S_(KSPLCD)
@@ -253773,10 +274697,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     PIPEGCR    = S_(KSPPIPEGCR)
  *     TSIRM      = S_(KSPTSIRM)
  */
-  __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_GCR, __pyx_t_8) < 0) __PYX_ERR(35, 40, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPGCR); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 40, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_GCR, __pyx_t_7) < 0) __PYX_ERR(35, 40, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":41
  *     PYTHON     = S_(KSPPYTHON)
@@ -253785,34 +274709,46 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     TSIRM      = S_(KSPTSIRM)
  *     CGLS       = S_(KSPCGLS)
  */
-  __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_PIPEGCR, __pyx_t_8) < 0) __PYX_ERR(35, 41, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPPIPEGCR); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 41, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_PIPEGCR, __pyx_t_7) < 0) __PYX_ERR(35, 41, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":42
  *     GCR        = S_(KSPGCR)
  *     PIPEGCR    = S_(KSPPIPEGCR)
  *     TSIRM      = S_(KSPTSIRM)             # <<<<<<<<<<<<<<
  *     CGLS       = S_(KSPCGLS)
- * 
+ *     FETIDP     = S_(KSPFETIDP)
  */
-  __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_TSIRM, __pyx_t_8) < 0) __PYX_ERR(35, 42, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPTSIRM); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 42, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_TSIRM, __pyx_t_7) < 0) __PYX_ERR(35, 42, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":43
  *     PIPEGCR    = S_(KSPPIPEGCR)
  *     TSIRM      = S_(KSPTSIRM)
  *     CGLS       = S_(KSPCGLS)             # <<<<<<<<<<<<<<
+ *     FETIDP     = S_(KSPFETIDP)
+ * 
+ */
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPCGLS); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 43, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CGLS, __pyx_t_7) < 0) __PYX_ERR(35, 43, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+
+  /* "PETSc/KSP.pyx":44
+ *     TSIRM      = S_(KSPTSIRM)
+ *     CGLS       = S_(KSPCGLS)
+ *     FETIDP     = S_(KSPFETIDP)             # <<<<<<<<<<<<<<
  * 
  * class KSPNormType(object):
  */
-  __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_CGLS, __pyx_t_8) < 0) __PYX_ERR(35, 43, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(KSPFETIDP); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 44, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_FETIDP, __pyx_t_7) < 0) __PYX_ERR(35, 44, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/KSP.pyx":3
  * # --------------------------------------------------------------------
@@ -253821,529 +274757,516 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     RICHARDSON = S_(KSPRICHARDSON)
  *     CHEBYSHEV  = S_(KSPCHEBYSHEV)
  */
-  __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 (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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_KSPType, __pyx_tuple__111, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_KSPType, __pyx_t_7) < 0) __PYX_ERR(35, 3, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/KSP.pyx":45
- *     CGLS       = S_(KSPCGLS)
+  /* "PETSc/KSP.pyx":46
+ *     FETIDP     = S_(KSPFETIDP)
  * 
  * 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_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__112); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 46, __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);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__112, __pyx_n_s_KSPNormType, __pyx_n_s_KSPNormType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 46, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
-  /* "PETSc/KSP.pyx":47
+  /* "PETSc/KSP.pyx":48
  * class KSPNormType(object):
  *     # native
  *     NORM_DEFAULT          = KSP_NORM_DEFAULT             # <<<<<<<<<<<<<<
  *     NORM_NONE             = KSP_NORM_NONE
  *     NORM_PRECONDITIONED   = KSP_NORM_PRECONDITIONED
  */
-  __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_NORM_DEFAULT, __pyx_t_8) < 0) __PYX_ERR(35, 47, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_KSPNormType(KSP_NORM_DEFAULT); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 48, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NORM_DEFAULT, __pyx_t_7) < 0) __PYX_ERR(35, 48, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/KSP.pyx":48
+  /* "PETSc/KSP.pyx":49
  *     # 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;
+  __pyx_t_7 = __Pyx_PyInt_From_KSPNormType(KSP_NORM_NONE); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 49, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NORM_NONE, __pyx_t_7) < 0) __PYX_ERR(35, 49, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/KSP.pyx":49
+  /* "PETSc/KSP.pyx":50
  *     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;
+  __pyx_t_7 = __Pyx_PyInt_From_KSPNormType(KSP_NORM_PRECONDITIONED); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 50, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NORM_PRECONDITIONED, __pyx_t_7) < 0) __PYX_ERR(35, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/KSP.pyx":50
+  /* "PETSc/KSP.pyx":51
  *     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;
+  __pyx_t_7 = __Pyx_PyInt_From_KSPNormType(KSP_NORM_UNPRECONDITIONED); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 51, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NORM_UNPRECONDITIONED, __pyx_t_7) < 0) __PYX_ERR(35, 51, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/KSP.pyx":51
+  /* "PETSc/KSP.pyx":52
  *     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;
+  __pyx_t_7 = __Pyx_PyInt_From_KSPNormType(KSP_NORM_NATURAL); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 52, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NORM_NATURAL, __pyx_t_7) < 0) __PYX_ERR(35, 52, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/KSP.pyx":53
+  /* "PETSc/KSP.pyx":54
  *     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)) {
+  __pyx_t_7 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_NORM_DEFAULT);
+  if (unlikely(!__pyx_t_7)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_DEFAULT);
+    __pyx_t_7 = __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;
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 54, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DEFAULT, __pyx_t_7) < 0) __PYX_ERR(35, 54, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/KSP.pyx":54
+  /* "PETSc/KSP.pyx":55
  *     # 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)) {
+  __pyx_t_7 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_NORM_NONE);
+  if (unlikely(!__pyx_t_7)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_NONE);
+    __pyx_t_7 = __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;
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 55, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NONE, __pyx_t_7) < 0) __PYX_ERR(35, 55, __pyx_L1_error)
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NO, __pyx_t_7) < 0) __PYX_ERR(35, 55, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/KSP.pyx":55
+  /* "PETSc/KSP.pyx":56
  *     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)) {
+  __pyx_t_7 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_NORM_PRECONDITIONED);
+  if (unlikely(!__pyx_t_7)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_PRECONDITIONED);
+    __pyx_t_7 = __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;
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 56, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_PRECONDITIONED, __pyx_t_7) < 0) __PYX_ERR(35, 56, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/KSP.pyx":56
+  /* "PETSc/KSP.pyx":57
  *     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_UNPRECONDITIONED);
-  if (unlikely(!__pyx_t_8)) {
+  __pyx_t_7 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_NORM_UNPRECONDITIONED);
+  if (unlikely(!__pyx_t_7)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_UNPRECONDITIONED);
+    __pyx_t_7 = __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;
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 57, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_UNPRECONDITIONED, __pyx_t_7) < 0) __PYX_ERR(35, 57, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/KSP.pyx":57
+  /* "PETSc/KSP.pyx":58
  *     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)) {
+  __pyx_t_7 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_NORM_NATURAL);
+  if (unlikely(!__pyx_t_7)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_NATURAL);
+    __pyx_t_7 = __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;
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 58, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NATURAL, __pyx_t_7) < 0) __PYX_ERR(35, 58, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/KSP.pyx":45
- *     CGLS       = S_(KSPCGLS)
+  /* "PETSc/KSP.pyx":46
+ *     FETIDP     = S_(KSPFETIDP)
  * 
  * class KSPNormType(object):             # <<<<<<<<<<<<<<
  *     # native
  *     NORM_DEFAULT          = KSP_NORM_DEFAULT
  */
-  __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_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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_KSPNormType, __pyx_tuple__112, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 46, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_KSPNormType, __pyx_t_7) < 0) __PYX_ERR(35, 46, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/KSP.pyx":59
+  /* "PETSc/KSP.pyx":60
  *     NATURAL          = NORM_NATURAL
  * 
  * class KSPConvergedReason(object):             # <<<<<<<<<<<<<<
  *     #iterating
  *     CONVERGED_ITERATING       = KSP_CONVERGED_ITERATING
  */
-  __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_ERR(35, 59, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__113); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 60, __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_ERR(35, 59, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__113, __pyx_n_s_KSPConvergedReason, __pyx_n_s_KSPConvergedReason, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(35, 60, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
-  /* "PETSc/KSP.pyx":61
+  /* "PETSc/KSP.pyx":62
  * class KSPConvergedReason(object):
  *     #iterating
  *     CONVERGED_ITERATING       = KSP_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
  *     ITERATING                 = KSP_CONVERGED_ITERATING
  *     # converged
  */
-  __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_CONVERGED_ITERATING, __pyx_t_8) < 0) __PYX_ERR(35, 61, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_KSPConvergedReason(KSP_CONVERGED_ITERATING); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 62, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_ITERATING, __pyx_t_7) < 0) __PYX_ERR(35, 62, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/KSP.pyx":62
+  /* "PETSc/KSP.pyx":63
  *     #iterating
  *     CONVERGED_ITERATING       = KSP_CONVERGED_ITERATING
  *     ITERATING                 = KSP_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
  *     # converged
  *     CONVERGED_RTOL_NORMAL     = KSP_CONVERGED_RTOL_NORMAL
  */
-  __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_ITERATING, __pyx_t_8) < 0) __PYX_ERR(35, 62, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_KSPConvergedReason(KSP_CONVERGED_ITERATING); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 63, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ITERATING, __pyx_t_7) < 0) __PYX_ERR(35, 63, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/KSP.pyx":64
+  /* "PETSc/KSP.pyx":65
  *     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;
+  __pyx_t_7 = __Pyx_PyInt_From_KSPConvergedReason(KSP_CONVERGED_RTOL_NORMAL); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 65, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_RTOL_NORMAL, __pyx_t_7) < 0) __PYX_ERR(35, 65, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/KSP.pyx":65
+  /* "PETSc/KSP.pyx":66
  *     # 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;
+  __pyx_t_7 = __Pyx_PyInt_From_KSPConvergedReason(KSP_CONVERGED_ATOL_NORMAL); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 66, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_ATOL_NORMAL, __pyx_t_7) < 0) __PYX_ERR(35, 66, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/KSP.pyx":66
+  /* "PETSc/KSP.pyx":67
  *     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;
+  __pyx_t_7 = __Pyx_PyInt_From_KSPConvergedReason(KSP_CONVERGED_RTOL); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 67, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_RTOL, __pyx_t_7) < 0) __PYX_ERR(35, 67, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/KSP.pyx":67
+  /* "PETSc/KSP.pyx":68
  *     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;
+  __pyx_t_7 = __Pyx_PyInt_From_KSPConvergedReason(KSP_CONVERGED_ATOL); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 68, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_ATOL, __pyx_t_7) < 0) __PYX_ERR(35, 68, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/KSP.pyx":68
+  /* "PETSc/KSP.pyx":69
  *     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;
+  __pyx_t_7 = __Pyx_PyInt_From_KSPConvergedReason(KSP_CONVERGED_ITS); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 69, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_ITS, __pyx_t_7) < 0) __PYX_ERR(35, 69, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/KSP.pyx":69
+  /* "PETSc/KSP.pyx":70
  *     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;
+  __pyx_t_7 = __Pyx_PyInt_From_KSPConvergedReason(KSP_CONVERGED_CG_NEG_CURVE); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 70, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_CG_NEG_CURVE, __pyx_t_7) < 0) __PYX_ERR(35, 70, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/KSP.pyx":70
+  /* "PETSc/KSP.pyx":71
  *     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;
+  __pyx_t_7 = __Pyx_PyInt_From_KSPConvergedReason(KSP_CONVERGED_CG_CONSTRAINED); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 71, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_CG_CONSTRAINED, __pyx_t_7) < 0) __PYX_ERR(35, 71, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/KSP.pyx":71
+  /* "PETSc/KSP.pyx":72
  *     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;
+  __pyx_t_7 = __Pyx_PyInt_From_KSPConvergedReason(KSP_CONVERGED_STEP_LENGTH); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 72, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_STEP_LENGTH, __pyx_t_7) < 0) __PYX_ERR(35, 72, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/KSP.pyx":72
+  /* "PETSc/KSP.pyx":73
  *     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;
+  __pyx_t_7 = __Pyx_PyInt_From_KSPConvergedReason(KSP_CONVERGED_HAPPY_BREAKDOWN); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 73, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_HAPPY_BREAKDOWN, __pyx_t_7) < 0) __PYX_ERR(35, 73, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/KSP.pyx":74
+  /* "PETSc/KSP.pyx":75
  *     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;
+  __pyx_t_7 = __Pyx_PyInt_From_KSPConvergedReason(KSP_DIVERGED_NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 75, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIVERGED_NULL, __pyx_t_7) < 0) __PYX_ERR(35, 75, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/KSP.pyx":75
+  /* "PETSc/KSP.pyx":76
  *     # 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;
+  __pyx_t_7 = __Pyx_PyInt_From_KSPConvergedReason(KSP_DIVERGED_ITS); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 76, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIVERGED_MAX_IT, __pyx_t_7) < 0) __PYX_ERR(35, 76, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/KSP.pyx":76
+  /* "PETSc/KSP.pyx":77
  *     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;
+  __pyx_t_7 = __Pyx_PyInt_From_KSPConvergedReason(KSP_DIVERGED_DTOL); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 77, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIVERGED_DTOL, __pyx_t_7) < 0) __PYX_ERR(35, 77, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/KSP.pyx":77
+  /* "PETSc/KSP.pyx":78
  *     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;
+  __pyx_t_7 = __Pyx_PyInt_From_KSPConvergedReason(KSP_DIVERGED_BREAKDOWN); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 78, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIVERGED_BREAKDOWN, __pyx_t_7) < 0) __PYX_ERR(35, 78, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/KSP.pyx":78
+  /* "PETSc/KSP.pyx":79
  *     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;
+  __pyx_t_7 = __Pyx_PyInt_From_KSPConvergedReason(KSP_DIVERGED_BREAKDOWN_BICG); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 79, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIVERGED_BREAKDOWN_BICG, __pyx_t_7) < 0) __PYX_ERR(35, 79, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/KSP.pyx":79
+  /* "PETSc/KSP.pyx":80
  *     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 = __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_DIVERGED_NONSYMMETRIC, __pyx_t_8) < 0) __PYX_ERR(35, 79, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_KSPConvergedReason(KSP_DIVERGED_NONSYMMETRIC); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 80, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIVERGED_NONSYMMETRIC, __pyx_t_7) < 0) __PYX_ERR(35, 80, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/KSP.pyx":80
+  /* "PETSc/KSP.pyx":81
  *     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 = __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_DIVERGED_INDEFINITE_PC, __pyx_t_8) < 0) __PYX_ERR(35, 80, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_KSPConvergedReason(KSP_DIVERGED_INDEFINITE_PC); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 81, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIVERGED_INDEFINITE_PC, __pyx_t_7) < 0) __PYX_ERR(35, 81, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/KSP.pyx":81
+  /* "PETSc/KSP.pyx":82
  *     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 = __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_DIVERGED_NANORINF, __pyx_t_8) < 0) __PYX_ERR(35, 81, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_KSPConvergedReason(KSP_DIVERGED_NANORINF); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 82, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIVERGED_NANORINF, __pyx_t_7) < 0) __PYX_ERR(35, 82, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/KSP.pyx":82
+  /* "PETSc/KSP.pyx":83
  *     DIVERGED_INDEFINITE_PC    = KSP_DIVERGED_INDEFINITE_PC
  *     DIVERGED_NANORINF         = KSP_DIVERGED_NANORINF
  *     DIVERGED_INDEFINITE_MAT   = KSP_DIVERGED_INDEFINITE_MAT             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-  __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_DIVERGED_INDEFINITE_MAT, __pyx_t_8) < 0) __PYX_ERR(35, 82, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_KSPConvergedReason(KSP_DIVERGED_INDEFINITE_MAT); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 83, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIVERGED_INDEFINITE_MAT, __pyx_t_7) < 0) __PYX_ERR(35, 83, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/KSP.pyx":59
+  /* "PETSc/KSP.pyx":60
  *     NATURAL          = NORM_NATURAL
  * 
  * class KSPConvergedReason(object):             # <<<<<<<<<<<<<<
  *     #iterating
  *     CONVERGED_ITERATING       = KSP_CONVERGED_ITERATING
  */
-  __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_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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_KSPConvergedReason, __pyx_tuple__113, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(35, 60, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_KSPConvergedReason, __pyx_t_7) < 0) __PYX_ERR(35, 60, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/KSP.pyx":88
+  /* "PETSc/KSP.pyx":89
  * cdef class KSP(Object):
  * 
  *     Type            = KSPType             # <<<<<<<<<<<<<<
  *     NormType        = KSPNormType
  *     ConvergedReason = KSPConvergedReason
  */
-  __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);
-  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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_KSPType); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 89, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_KSP->tp_dict, __pyx_n_s_Type, __pyx_t_1) < 0) __PYX_ERR(35, 89, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_KSP);
 
-  /* "PETSc/KSP.pyx":89
+  /* "PETSc/KSP.pyx":90
  * 
  *     Type            = KSPType
  *     NormType        = KSPNormType             # <<<<<<<<<<<<<<
  *     ConvergedReason = KSPConvergedReason
  * 
  */
-  __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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_KSPNormType); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 90, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_KSP->tp_dict, __pyx_n_s_NormType, __pyx_t_1) < 0) __PYX_ERR(35, 90, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_KSP);
 
-  /* "PETSc/KSP.pyx":90
+  /* "PETSc/KSP.pyx":91
  *     Type            = KSPType
  *     NormType        = KSPNormType
  *     ConvergedReason = KSPConvergedReason             # <<<<<<<<<<<<<<
  * 
  *     # --- xxx ---
  */
-  __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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_KSPConvergedReason); if (unlikely(!__pyx_t_1)) __PYX_ERR(35, 91, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_KSP->tp_dict, __pyx_n_s_ConvergedReason, __pyx_t_1) < 0) __PYX_ERR(35, 91, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_KSP);
 
-  /* "PETSc/KSP.pyx":655
+  /* "PETSc/KSP.pyx":656
  * # --------------------------------------------------------------------
  * 
  * del KSPType             # <<<<<<<<<<<<<<
  * del KSPNormType
  * del KSPConvergedReason
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_KSPType) < 0) __PYX_ERR(35, 655, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_KSPType) < 0) __PYX_ERR(35, 656, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":656
+  /* "PETSc/KSP.pyx":657
  * 
  * del KSPType
  * del KSPNormType             # <<<<<<<<<<<<<<
  * del KSPConvergedReason
  * 
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_KSPNormType) < 0) __PYX_ERR(35, 656, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_KSPNormType) < 0) __PYX_ERR(35, 657, __pyx_L1_error)
 
-  /* "PETSc/KSP.pyx":657
+  /* "PETSc/KSP.pyx":658
  * del KSPType
  * del KSPNormType
  * del KSPConvergedReason             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_KSPConvergedReason) < 0) __PYX_ERR(35, 657, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_KSPConvergedReason) < 0) __PYX_ERR(35, 658, __pyx_L1_error)
 
   /* "PETSc/SNES.pyx":3
  * # --------------------------------------------------------------------
@@ -254352,15 +275275,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NEWTONLS     = S_(SNESNEWTONLS)
  *     NEWTONTR     = S_(SNESNEWTONTR)
  */
-  __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_ERR(36, 3, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__114); 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_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);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__114, __pyx_n_s_SNESType, __pyx_n_s_SNESType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/SNES.pyx":4
  * 
@@ -254369,10 +275287,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NEWTONTR     = S_(SNESNEWTONTR)
  *     PYTHON       = S_(SNESPYTHON)
  */
-  __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_NEWTONLS, __pyx_t_8) < 0) __PYX_ERR(36, 4, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(SNESNEWTONLS); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NEWTONLS, __pyx_t_7) < 0) __PYX_ERR(36, 4, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":5
  * class SNESType(object):
@@ -254381,10 +275299,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     PYTHON       = S_(SNESPYTHON)
  *     TEST         = S_(SNESTEST)
  */
-  __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_NEWTONTR, __pyx_t_8) < 0) __PYX_ERR(36, 5, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(SNESNEWTONTR); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 5, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NEWTONTR, __pyx_t_7) < 0) __PYX_ERR(36, 5, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":6
  *     NEWTONLS     = S_(SNESNEWTONLS)
@@ -254393,10 +275311,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     TEST         = S_(SNESTEST)
  *     NRICHARDSON  = S_(SNESNRICHARDSON)
  */
-  __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_PYTHON, __pyx_t_8) < 0) __PYX_ERR(36, 6, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(SNESPYTHON); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 6, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_PYTHON, __pyx_t_7) < 0) __PYX_ERR(36, 6, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":7
  *     NEWTONTR     = S_(SNESNEWTONTR)
@@ -254405,10 +275323,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NRICHARDSON  = S_(SNESNRICHARDSON)
  *     KSPONLY      = S_(SNESKSPONLY)
  */
-  __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 (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_t_7 = __pyx_f_8petsc4py_5PETSc_S_(SNESTEST); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_TEST, __pyx_t_7) < 0) __PYX_ERR(36, 7, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":8
  *     PYTHON       = S_(SNESPYTHON)
@@ -254417,10 +275335,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     KSPONLY      = S_(SNESKSPONLY)
  *     VINEWTONRSLS = S_(SNESVINEWTONRSLS)
  */
-  __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_NRICHARDSON, __pyx_t_8) < 0) __PYX_ERR(36, 8, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(SNESNRICHARDSON); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 8, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NRICHARDSON, __pyx_t_7) < 0) __PYX_ERR(36, 8, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":9
  *     TEST         = S_(SNESTEST)
@@ -254429,10 +275347,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     VINEWTONRSLS = S_(SNESVINEWTONRSLS)
  *     VINEWTONSSLS = S_(SNESVINEWTONSSLS)
  */
-  __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_KSPONLY, __pyx_t_8) < 0) __PYX_ERR(36, 9, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(SNESKSPONLY); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 9, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_KSPONLY, __pyx_t_7) < 0) __PYX_ERR(36, 9, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":10
  *     NRICHARDSON  = S_(SNESNRICHARDSON)
@@ -254441,10 +275359,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     VINEWTONSSLS = S_(SNESVINEWTONSSLS)
  *     NGMRES       = S_(SNESNGMRES)
  */
-  __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_VINEWTONRSLS, __pyx_t_8) < 0) __PYX_ERR(36, 10, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(SNESVINEWTONRSLS); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 10, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_VINEWTONRSLS, __pyx_t_7) < 0) __PYX_ERR(36, 10, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":11
  *     KSPONLY      = S_(SNESKSPONLY)
@@ -254453,10 +275371,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NGMRES       = S_(SNESNGMRES)
  *     QN           = S_(SNESQN)
  */
-  __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 (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_t_7 = __pyx_f_8petsc4py_5PETSc_S_(SNESVINEWTONSSLS); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 11, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_VINEWTONSSLS, __pyx_t_7) < 0) __PYX_ERR(36, 11, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":12
  *     VINEWTONRSLS = S_(SNESVINEWTONRSLS)
@@ -254465,10 +275383,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     QN           = S_(SNESQN)
  *     SHELL        = S_(SNESSHELL)
  */
-  __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_NGMRES, __pyx_t_8) < 0) __PYX_ERR(36, 12, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(SNESNGMRES); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 12, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NGMRES, __pyx_t_7) < 0) __PYX_ERR(36, 12, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":13
  *     VINEWTONSSLS = S_(SNESVINEWTONSSLS)
@@ -254477,10 +275395,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     SHELL        = S_(SNESSHELL)
  *     NGS          = S_(SNESNGS)
  */
-  __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_QN, __pyx_t_8) < 0) __PYX_ERR(36, 13, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(SNESQN); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 13, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_QN, __pyx_t_7) < 0) __PYX_ERR(36, 13, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":14
  *     NGMRES       = S_(SNESNGMRES)
@@ -254489,10 +275407,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NGS          = S_(SNESNGS)
  *     NCG          = S_(SNESNCG)
  */
-  __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_SHELL, __pyx_t_8) < 0) __PYX_ERR(36, 14, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(SNESSHELL); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 14, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SHELL, __pyx_t_7) < 0) __PYX_ERR(36, 14, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":15
  *     QN           = S_(SNESQN)
@@ -254501,10 +275419,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NCG          = S_(SNESNCG)
  *     FAS          = S_(SNESFAS)
  */
-  __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_NGS, __pyx_t_8) < 0) __PYX_ERR(36, 15, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(SNESNGS); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 15, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NGS, __pyx_t_7) < 0) __PYX_ERR(36, 15, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":16
  *     SHELL        = S_(SNESSHELL)
@@ -254513,10 +275431,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     FAS          = S_(SNESFAS)
  *     MS           = S_(SNESMS)
  */
-  __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_NCG, __pyx_t_8) < 0) __PYX_ERR(36, 16, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(SNESNCG); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 16, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NCG, __pyx_t_7) < 0) __PYX_ERR(36, 16, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":17
  *     NGS          = S_(SNESNGS)
@@ -254525,10 +275443,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     MS           = S_(SNESMS)
  *     NASM         = S_(SNESNASM)
  */
-  __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 (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_t_7 = __pyx_f_8petsc4py_5PETSc_S_(SNESFAS); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 17, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_FAS, __pyx_t_7) < 0) __PYX_ERR(36, 17, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":18
  *     NCG          = S_(SNESNCG)
@@ -254537,10 +275455,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NASM         = S_(SNESNASM)
  *     ANDERSON     = S_(SNESANDERSON)
  */
-  __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_MS, __pyx_t_8) < 0) __PYX_ERR(36, 18, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(SNESMS); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 18, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MS, __pyx_t_7) < 0) __PYX_ERR(36, 18, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":19
  *     FAS          = S_(SNESFAS)
@@ -254549,10 +275467,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ANDERSON     = S_(SNESANDERSON)
  *     ASPIN        = S_(SNESASPIN)
  */
-  __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_NASM, __pyx_t_8) < 0) __PYX_ERR(36, 19, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(SNESNASM); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NASM, __pyx_t_7) < 0) __PYX_ERR(36, 19, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":20
  *     MS           = S_(SNESMS)
@@ -254561,10 +275479,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ASPIN        = S_(SNESASPIN)
  *     COMPOSITE    = S_(SNESCOMPOSITE)
  */
-  __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_ANDERSON, __pyx_t_8) < 0) __PYX_ERR(36, 20, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(SNESANDERSON); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 20, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ANDERSON, __pyx_t_7) < 0) __PYX_ERR(36, 20, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":21
  *     NASM         = S_(SNESNASM)
@@ -254573,10 +275491,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     COMPOSITE    = S_(SNESCOMPOSITE)
  * 
  */
-  __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_ASPIN, __pyx_t_8) < 0) __PYX_ERR(36, 21, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(SNESASPIN); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 21, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ASPIN, __pyx_t_7) < 0) __PYX_ERR(36, 21, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":22
  *     ANDERSON     = S_(SNESANDERSON)
@@ -254585,10 +275503,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * class SNESNormSchedule(object):
  */
-  __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_COMPOSITE, __pyx_t_8) < 0) __PYX_ERR(36, 22, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(SNESCOMPOSITE); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 22, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_COMPOSITE, __pyx_t_7) < 0) __PYX_ERR(36, 22, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":3
  * # --------------------------------------------------------------------
@@ -254597,13 +275515,12 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NEWTONLS     = S_(SNESNEWTONLS)
  *     NEWTONTR     = S_(SNESNEWTONTR)
  */
-  __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_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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_SNESType, __pyx_tuple__114, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SNESType, __pyx_t_7) < 0) __PYX_ERR(36, 3, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/SNES.pyx":24
  *     COMPOSITE    = S_(SNESCOMPOSITE)
@@ -254612,15 +275529,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # native
  *     NORM_DEFAULT            = SNES_NORM_DEFAULT
  */
-  __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_ERR(36, 24, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__115); 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_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);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__115, __pyx_n_s_SNESNormSchedule, __pyx_n_s_SNESNormSchedule, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 24, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/SNES.pyx":26
  * class SNESNormSchedule(object):
@@ -254629,10 +275541,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NORM_NONE               = SNES_NORM_NONE
  *     NORM_ALWAYS             = SNES_NORM_ALWAYS
  */
-  __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_NORM_DEFAULT, __pyx_t_8) < 0) __PYX_ERR(36, 26, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_SNESNormSchedule(SNES_NORM_DEFAULT); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 26, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NORM_DEFAULT, __pyx_t_7) < 0) __PYX_ERR(36, 26, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":27
  *     # native
@@ -254641,10 +275553,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NORM_ALWAYS             = SNES_NORM_ALWAYS
  *     NORM_INITIAL_ONLY       = SNES_NORM_INITIAL_ONLY
  */
-  __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_NORM_NONE, __pyx_t_8) < 0) __PYX_ERR(36, 27, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_SNESNormSchedule(SNES_NORM_NONE); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 27, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NORM_NONE, __pyx_t_7) < 0) __PYX_ERR(36, 27, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":28
  *     NORM_DEFAULT            = SNES_NORM_DEFAULT
@@ -254653,10 +275565,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NORM_INITIAL_ONLY       = SNES_NORM_INITIAL_ONLY
  *     NORM_FINAL_ONLY         = SNES_NORM_FINAL_ONLY
  */
-  __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_NORM_ALWAYS, __pyx_t_8) < 0) __PYX_ERR(36, 28, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_SNESNormSchedule(SNES_NORM_ALWAYS); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 28, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NORM_ALWAYS, __pyx_t_7) < 0) __PYX_ERR(36, 28, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":29
  *     NORM_NONE               = SNES_NORM_NONE
@@ -254665,10 +275577,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NORM_FINAL_ONLY         = SNES_NORM_FINAL_ONLY
  *     NORM_INITIAL_FINAL_ONLY = SNES_NORM_INITIAL_FINAL_ONLY
  */
-  __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_NORM_INITIAL_ONLY, __pyx_t_8) < 0) __PYX_ERR(36, 29, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_SNESNormSchedule(SNES_NORM_INITIAL_ONLY); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 29, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NORM_INITIAL_ONLY, __pyx_t_7) < 0) __PYX_ERR(36, 29, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":30
  *     NORM_ALWAYS             = SNES_NORM_ALWAYS
@@ -254677,10 +275589,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NORM_INITIAL_FINAL_ONLY = SNES_NORM_INITIAL_FINAL_ONLY
  *     # aliases
  */
-  __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 (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_t_7 = __Pyx_PyInt_From_SNESNormSchedule(SNES_NORM_FINAL_ONLY); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 30, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NORM_FINAL_ONLY, __pyx_t_7) < 0) __PYX_ERR(36, 30, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":31
  *     NORM_INITIAL_ONLY       = SNES_NORM_INITIAL_ONLY
@@ -254689,10 +275601,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # aliases
  *     DEFAULT            = NORM_DEFAULT
  */
-  __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;
+  __pyx_t_7 = __Pyx_PyInt_From_SNESNormSchedule(SNES_NORM_INITIAL_FINAL_ONLY); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 31, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NORM_INITIAL_FINAL_ONLY, __pyx_t_7) < 0) __PYX_ERR(36, 31, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":33
  *     NORM_INITIAL_FINAL_ONLY = SNES_NORM_INITIAL_FINAL_ONLY
@@ -254701,15 +275613,15 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NONE               = NORM_NONE
  *     ALWAYS             = NORM_ALWAYS
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_DEFAULT);
-  if (unlikely(!__pyx_t_8)) {
+  __pyx_t_7 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_NORM_DEFAULT);
+  if (unlikely(!__pyx_t_7)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_DEFAULT);
+    __pyx_t_7 = __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;
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 33, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DEFAULT, __pyx_t_7) < 0) __PYX_ERR(36, 33, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":34
  *     # aliases
@@ -254718,15 +275630,15 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ALWAYS             = NORM_ALWAYS
  *     INITIAL_ONLY       = NORM_INITIAL_ONLY
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_NONE);
-  if (unlikely(!__pyx_t_8)) {
+  __pyx_t_7 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_NORM_NONE);
+  if (unlikely(!__pyx_t_7)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_NONE);
+    __pyx_t_7 = __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;
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 34, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NONE, __pyx_t_7) < 0) __PYX_ERR(36, 34, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":35
  *     DEFAULT            = NORM_DEFAULT
@@ -254735,15 +275647,15 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     INITIAL_ONLY       = NORM_INITIAL_ONLY
  *     FINAL_ONLY         = NORM_FINAL_ONLY
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_ALWAYS);
-  if (unlikely(!__pyx_t_8)) {
+  __pyx_t_7 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_NORM_ALWAYS);
+  if (unlikely(!__pyx_t_7)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_ALWAYS);
+    __pyx_t_7 = __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;
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 35, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ALWAYS, __pyx_t_7) < 0) __PYX_ERR(36, 35, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":36
  *     NONE               = NORM_NONE
@@ -254752,15 +275664,15 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     FINAL_ONLY         = NORM_FINAL_ONLY
  *     INITIAL_FINAL_ONLY = NORM_INITIAL_FINAL_ONLY
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_INITIAL_ONLY);
-  if (unlikely(!__pyx_t_8)) {
+  __pyx_t_7 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_NORM_INITIAL_ONLY);
+  if (unlikely(!__pyx_t_7)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_INITIAL_ONLY);
+    __pyx_t_7 = __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;
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 36, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_INITIAL_ONLY, __pyx_t_7) < 0) __PYX_ERR(36, 36, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":37
  *     ALWAYS             = NORM_ALWAYS
@@ -254769,15 +275681,15 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     INITIAL_FINAL_ONLY = NORM_INITIAL_FINAL_ONLY
  * 
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_FINAL_ONLY);
-  if (unlikely(!__pyx_t_8)) {
+  __pyx_t_7 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_NORM_FINAL_ONLY);
+  if (unlikely(!__pyx_t_7)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_FINAL_ONLY);
+    __pyx_t_7 = __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;
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 37, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_FINAL_ONLY, __pyx_t_7) < 0) __PYX_ERR(36, 37, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":38
  *     INITIAL_ONLY       = NORM_INITIAL_ONLY
@@ -254786,15 +275698,15 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * class SNESConvergedReason(object):
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_NORM_INITIAL_FINAL_ONLY);
-  if (unlikely(!__pyx_t_8)) {
+  __pyx_t_7 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_NORM_INITIAL_FINAL_ONLY);
+  if (unlikely(!__pyx_t_7)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_NORM_INITIAL_FINAL_ONLY);
+    __pyx_t_7 = __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;
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 38, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_INITIAL_FINAL_ONLY, __pyx_t_7) < 0) __PYX_ERR(36, 38, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":24
  *     COMPOSITE    = S_(SNESCOMPOSITE)
@@ -254803,13 +275715,12 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # native
  *     NORM_DEFAULT            = SNES_NORM_DEFAULT
  */
-  __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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_SNESNormSchedule, __pyx_tuple__115, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 24, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SNESNormSchedule, __pyx_t_7) < 0) __PYX_ERR(36, 24, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/SNES.pyx":40
  *     INITIAL_FINAL_ONLY = NORM_INITIAL_FINAL_ONLY
@@ -254818,15 +275729,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # iterating
  *     CONVERGED_ITERATING      = SNES_CONVERGED_ITERATING
  */
-  __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_ERR(36, 40, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__116); 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_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);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__116, __pyx_n_s_SNESConvergedReason, __pyx_n_s_SNESConvergedReason, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(36, 40, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/SNES.pyx":42
  * class SNESConvergedReason(object):
@@ -254835,10 +275741,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ITERATING                = SNES_CONVERGED_ITERATING
  *     # converged
  */
-  __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_CONVERGED_ITERATING, __pyx_t_8) < 0) __PYX_ERR(36, 42, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_SNESConvergedReason(SNES_CONVERGED_ITERATING); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 42, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_ITERATING, __pyx_t_7) < 0) __PYX_ERR(36, 42, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":43
  *     # iterating
@@ -254847,10 +275753,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # converged
  *     CONVERGED_FNORM_ABS      = SNES_CONVERGED_FNORM_ABS
  */
-  __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_ITERATING, __pyx_t_8) < 0) __PYX_ERR(36, 43, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_SNESConvergedReason(SNES_CONVERGED_ITERATING); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 43, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ITERATING, __pyx_t_7) < 0) __PYX_ERR(36, 43, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":45
  *     ITERATING                = SNES_CONVERGED_ITERATING
@@ -254859,10 +275765,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     CONVERGED_FNORM_RELATIVE = SNES_CONVERGED_FNORM_RELATIVE
  *     CONVERGED_SNORM_RELATIVE = SNES_CONVERGED_SNORM_RELATIVE
  */
-  __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_CONVERGED_FNORM_ABS, __pyx_t_8) < 0) __PYX_ERR(36, 45, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_SNESConvergedReason(SNES_CONVERGED_FNORM_ABS); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 45, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_FNORM_ABS, __pyx_t_7) < 0) __PYX_ERR(36, 45, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":46
  *     # converged
@@ -254871,10 +275777,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     CONVERGED_SNORM_RELATIVE = SNES_CONVERGED_SNORM_RELATIVE
  *     CONVERGED_ITS            = SNES_CONVERGED_ITS
  */
-  __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_CONVERGED_FNORM_RELATIVE, __pyx_t_8) < 0) __PYX_ERR(36, 46, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_SNESConvergedReason(SNES_CONVERGED_FNORM_RELATIVE); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 46, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_FNORM_RELATIVE, __pyx_t_7) < 0) __PYX_ERR(36, 46, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":47
  *     CONVERGED_FNORM_ABS      = SNES_CONVERGED_FNORM_ABS
@@ -254883,10 +275789,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     CONVERGED_ITS            = SNES_CONVERGED_ITS
  *     CONVERGED_TR_DELTA       = SNES_CONVERGED_TR_DELTA
  */
-  __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_CONVERGED_SNORM_RELATIVE, __pyx_t_8) < 0) __PYX_ERR(36, 47, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_SNESConvergedReason(SNES_CONVERGED_SNORM_RELATIVE); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 47, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_SNORM_RELATIVE, __pyx_t_7) < 0) __PYX_ERR(36, 47, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":48
  *     CONVERGED_FNORM_RELATIVE = SNES_CONVERGED_FNORM_RELATIVE
@@ -254895,10 +275801,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     CONVERGED_TR_DELTA       = SNES_CONVERGED_TR_DELTA
  *     # diverged
  */
-  __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_CONVERGED_ITS, __pyx_t_8) < 0) __PYX_ERR(36, 48, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_SNESConvergedReason(SNES_CONVERGED_ITS); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 48, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_ITS, __pyx_t_7) < 0) __PYX_ERR(36, 48, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":49
  *     CONVERGED_SNORM_RELATIVE = SNES_CONVERGED_SNORM_RELATIVE
@@ -254907,10 +275813,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # diverged
  *     DIVERGED_FUNCTION_DOMAIN = SNES_DIVERGED_FUNCTION_DOMAIN
  */
-  __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_CONVERGED_TR_DELTA, __pyx_t_8) < 0) __PYX_ERR(36, 49, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_SNESConvergedReason(SNES_CONVERGED_TR_DELTA); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 49, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_TR_DELTA, __pyx_t_7) < 0) __PYX_ERR(36, 49, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":51
  *     CONVERGED_TR_DELTA       = SNES_CONVERGED_TR_DELTA
@@ -254919,10 +275825,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     DIVERGED_FUNCTION_COUNT  = SNES_DIVERGED_FUNCTION_COUNT
  *     DIVERGED_FNORM_NAN       = SNES_DIVERGED_FNORM_NAN
  */
-  __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_DIVERGED_FUNCTION_DOMAIN, __pyx_t_8) < 0) __PYX_ERR(36, 51, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_SNESConvergedReason(SNES_DIVERGED_FUNCTION_DOMAIN); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 51, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIVERGED_FUNCTION_DOMAIN, __pyx_t_7) < 0) __PYX_ERR(36, 51, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":52
  *     # diverged
@@ -254931,10 +275837,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     DIVERGED_FNORM_NAN       = SNES_DIVERGED_FNORM_NAN
  *     DIVERGED_MAX_IT          = SNES_DIVERGED_MAX_IT
  */
-  __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_DIVERGED_FUNCTION_COUNT, __pyx_t_8) < 0) __PYX_ERR(36, 52, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_SNESConvergedReason(SNES_DIVERGED_FUNCTION_COUNT); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 52, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIVERGED_FUNCTION_COUNT, __pyx_t_7) < 0) __PYX_ERR(36, 52, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":53
  *     DIVERGED_FUNCTION_DOMAIN = SNES_DIVERGED_FUNCTION_DOMAIN
@@ -254943,10 +275849,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     DIVERGED_MAX_IT          = SNES_DIVERGED_MAX_IT
  *     DIVERGED_LINE_SEARCH     = SNES_DIVERGED_LINE_SEARCH
  */
-  __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_DIVERGED_FNORM_NAN, __pyx_t_8) < 0) __PYX_ERR(36, 53, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_SNESConvergedReason(SNES_DIVERGED_FNORM_NAN); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 53, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIVERGED_FNORM_NAN, __pyx_t_7) < 0) __PYX_ERR(36, 53, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":54
  *     DIVERGED_FUNCTION_COUNT  = SNES_DIVERGED_FUNCTION_COUNT
@@ -254955,10 +275861,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     DIVERGED_LINE_SEARCH     = SNES_DIVERGED_LINE_SEARCH
  *     DIVERGED_INNER           = SNES_DIVERGED_INNER
  */
-  __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_DIVERGED_MAX_IT, __pyx_t_8) < 0) __PYX_ERR(36, 54, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_SNESConvergedReason(SNES_DIVERGED_MAX_IT); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 54, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIVERGED_MAX_IT, __pyx_t_7) < 0) __PYX_ERR(36, 54, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":55
  *     DIVERGED_FNORM_NAN       = SNES_DIVERGED_FNORM_NAN
@@ -254967,10 +275873,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     DIVERGED_INNER           = SNES_DIVERGED_INNER
  *     DIVERGED_LOCAL_MIN       = SNES_DIVERGED_LOCAL_MIN
  */
-  __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_DIVERGED_LINE_SEARCH, __pyx_t_8) < 0) __PYX_ERR(36, 55, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_SNESConvergedReason(SNES_DIVERGED_LINE_SEARCH); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 55, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIVERGED_LINE_SEARCH, __pyx_t_7) < 0) __PYX_ERR(36, 55, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":56
  *     DIVERGED_MAX_IT          = SNES_DIVERGED_MAX_IT
@@ -254979,10 +275885,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     DIVERGED_LOCAL_MIN       = SNES_DIVERGED_LOCAL_MIN
  * 
  */
-  __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_DIVERGED_INNER, __pyx_t_8) < 0) __PYX_ERR(36, 56, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_SNESConvergedReason(SNES_DIVERGED_INNER); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 56, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIVERGED_INNER, __pyx_t_7) < 0) __PYX_ERR(36, 56, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":57
  *     DIVERGED_LINE_SEARCH     = SNES_DIVERGED_LINE_SEARCH
@@ -254991,10 +275897,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * # --------------------------------------------------------------------
  */
-  __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_DIVERGED_LOCAL_MIN, __pyx_t_8) < 0) __PYX_ERR(36, 57, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_SNESConvergedReason(SNES_DIVERGED_LOCAL_MIN); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 57, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIVERGED_LOCAL_MIN, __pyx_t_7) < 0) __PYX_ERR(36, 57, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SNES.pyx":40
  *     INITIAL_FINAL_ONLY = NORM_INITIAL_FINAL_ONLY
@@ -255003,13 +275909,12 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # 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_ERR(36, 40, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_8);
-  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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_SNESConvergedReason, __pyx_tuple__116, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(36, 40, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SNESConvergedReason, __pyx_t_7) < 0) __PYX_ERR(36, 40, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/SNES.pyx":63
  * cdef class SNES(Object):
@@ -255018,10 +275923,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NormSchedule = SNESNormSchedule
  *     ConvergedReason = SNESConvergedReason
  */
-  __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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_SNESType); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 63, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES->tp_dict, __pyx_n_s_Type, __pyx_t_1) < 0) __PYX_ERR(36, 63, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_SNES);
 
   /* "PETSc/SNES.pyx":64
@@ -255031,10 +275936,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ConvergedReason = SNESConvergedReason
  * 
  */
-  __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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_SNESNormSchedule); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 64, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES->tp_dict, __pyx_n_s_NormSchedule, __pyx_t_1) < 0) __PYX_ERR(36, 64, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_SNES);
 
   /* "PETSc/SNES.pyx":65
@@ -255044,116 +275949,116 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  *     # --- 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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_SNESConvergedReason); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 65, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES->tp_dict, __pyx_n_s_ConvergedReason, __pyx_t_1) < 0) __PYX_ERR(36, 65, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_SNES);
 
-  /* "PETSc/SNES.pyx":502
+  /* "PETSc/SNES.pyx":519
  *         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;
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES, __pyx_n_s_setMaxStepFailures); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 519, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES->tp_dict, __pyx_n_s_setMaxNonlinearStepFailures, __pyx_t_1) < 0) __PYX_ERR(36, 519, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_SNES);
 
-  /* "PETSc/SNES.pyx":503
+  /* "PETSc/SNES.pyx":520
  * 
  *     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;
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES, __pyx_n_s_getMaxStepFailures); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 520, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES->tp_dict, __pyx_n_s_getMaxNonlinearStepFailures, __pyx_t_1) < 0) __PYX_ERR(36, 520, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_SNES);
 
-  /* "PETSc/SNES.pyx":504
+  /* "PETSc/SNES.pyx":521
  *     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;
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES, __pyx_n_s_getStepFailures); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 521, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES->tp_dict, __pyx_n_s_getNonlinearStepFailures, __pyx_t_1) < 0) __PYX_ERR(36, 521, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_SNES);
 
-  /* "PETSc/SNES.pyx":505
+  /* "PETSc/SNES.pyx":522
  *     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;
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES, __pyx_n_s_setMaxKSPFailures); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 522, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES->tp_dict, __pyx_n_s_setMaxLinearSolveFailures, __pyx_t_1) < 0) __PYX_ERR(36, 522, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_SNES);
 
-  /* "PETSc/SNES.pyx":506
+  /* "PETSc/SNES.pyx":523
  *     getNonlinearStepFailures    = getStepFailures
  *     setMaxLinearSolveFailures   = setMaxKSPFailures
  *     getMaxLinearSolveFailures   = getMaxKSPFailures             # <<<<<<<<<<<<<<
  *     getLinearSolveFailures      = getKSPFailures
  * 
  */
-  __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;
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES, __pyx_n_s_getMaxKSPFailures); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 523, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES->tp_dict, __pyx_n_s_getMaxLinearSolveFailures, __pyx_t_1) < 0) __PYX_ERR(36, 523, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_SNES);
 
-  /* "PETSc/SNES.pyx":507
+  /* "PETSc/SNES.pyx":524
  *     setMaxLinearSolveFailures   = setMaxKSPFailures
  *     getMaxLinearSolveFailures   = getMaxKSPFailures
  *     getLinearSolveFailures      = getKSPFailures             # <<<<<<<<<<<<<<
  * 
  *     # --- solving ---
  */
-  __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;
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES, __pyx_n_s_getKSPFailures); if (unlikely(!__pyx_t_1)) __PYX_ERR(36, 524, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SNES->tp_dict, __pyx_n_s_getLinearSolveFailures, __pyx_t_1) < 0) __PYX_ERR(36, 524, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_SNES);
 
-  /* "PETSc/SNES.pyx":830
+  /* "PETSc/SNES.pyx":876
  * # --------------------------------------------------------------------
  * 
  * del SNESType             # <<<<<<<<<<<<<<
  * del SNESNormSchedule
  * del SNESConvergedReason
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_SNESType) < 0) __PYX_ERR(36, 830, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_SNESType) < 0) __PYX_ERR(36, 876, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":831
+  /* "PETSc/SNES.pyx":877
  * 
  * del SNESType
  * del SNESNormSchedule             # <<<<<<<<<<<<<<
  * del SNESConvergedReason
  * 
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_SNESNormSchedule) < 0) __PYX_ERR(36, 831, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_SNESNormSchedule) < 0) __PYX_ERR(36, 877, __pyx_L1_error)
 
-  /* "PETSc/SNES.pyx":832
+  /* "PETSc/SNES.pyx":878
  * del SNESType
  * del SNESNormSchedule
  * del SNESConvergedReason             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_SNESConvergedReason) < 0) __PYX_ERR(36, 832, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_SNESConvergedReason) < 0) __PYX_ERR(36, 878, __pyx_L1_error)
 
   /* "PETSc/TS.pyx":3
  * # -----------------------------------------------------------------------------
@@ -255162,15 +276067,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # native
  *     EULER    = S_(TSEULER)
  */
-  __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_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__117); 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);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__117, __pyx_n_s_TSType, __pyx_n_s_TSType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/TS.pyx":5
  * class TSType(object):
@@ -255179,10 +276079,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     BEULER   = S_(TSBEULER)
  *     PSEUDO   = S_(TSPSEUDO)
  */
-  __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_EULER, __pyx_t_8) < 0) __PYX_ERR(37, 5, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(TSEULER); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 5, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_EULER, __pyx_t_7) < 0) __PYX_ERR(37, 5, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/TS.pyx":6
  *     # native
@@ -255191,10 +276091,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     PSEUDO   = S_(TSPSEUDO)
  *     CN       = S_(TSCN)
  */
-  __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_BEULER, __pyx_t_8) < 0) __PYX_ERR(37, 6, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(TSBEULER); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 6, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_BEULER, __pyx_t_7) < 0) __PYX_ERR(37, 6, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/TS.pyx":7
  *     EULER    = S_(TSEULER)
@@ -255203,10 +276103,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     CN       = S_(TSCN)
  *     SUNDIALS = S_(TSSUNDIALS)
  */
-  __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_PSEUDO, __pyx_t_8) < 0) __PYX_ERR(37, 7, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(TSPSEUDO); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_PSEUDO, __pyx_t_7) < 0) __PYX_ERR(37, 7, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/TS.pyx":8
  *     BEULER   = S_(TSBEULER)
@@ -255215,10 +276115,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     SUNDIALS = S_(TSSUNDIALS)
  *     RK       = S_(TSRK)
  */
-  __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_CN, __pyx_t_8) < 0) __PYX_ERR(37, 8, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(TSCN); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 8, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CN, __pyx_t_7) < 0) __PYX_ERR(37, 8, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/TS.pyx":9
  *     PSEUDO   = S_(TSPSEUDO)
@@ -255227,10 +276127,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     RK       = S_(TSRK)
  *     PYTHON   = S_(TSPYTHON)
  */
-  __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_SUNDIALS, __pyx_t_8) < 0) __PYX_ERR(37, 9, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(TSSUNDIALS); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 9, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SUNDIALS, __pyx_t_7) < 0) __PYX_ERR(37, 9, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/TS.pyx":10
  *     CN       = S_(TSCN)
@@ -255239,10 +276139,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     PYTHON   = S_(TSPYTHON)
  *     THETA    = S_(TSTHETA)
  */
-  __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_RK, __pyx_t_8) < 0) __PYX_ERR(37, 10, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(TSRK); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 10, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_RK, __pyx_t_7) < 0) __PYX_ERR(37, 10, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/TS.pyx":11
  *     SUNDIALS = S_(TSSUNDIALS)
@@ -255251,10 +276151,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     THETA    = S_(TSTHETA)
  *     ALPHA    = S_(TSALPHA)
  */
-  __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_PYTHON, __pyx_t_8) < 0) __PYX_ERR(37, 11, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(TSPYTHON); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 11, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_PYTHON, __pyx_t_7) < 0) __PYX_ERR(37, 11, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/TS.pyx":12
  *     RK       = S_(TSRK)
@@ -255263,70 +276163,70 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ALPHA    = S_(TSALPHA)
  *     ALPHA2  = S_(TSALPHA2)
  */
-  __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_THETA, __pyx_t_8) < 0) __PYX_ERR(37, 12, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(TSTHETA); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 12, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_THETA, __pyx_t_7) < 0) __PYX_ERR(37, 12, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/TS.pyx":13
  *     PYTHON   = S_(TSPYTHON)
  *     THETA    = S_(TSTHETA)
  *     ALPHA    = S_(TSALPHA)             # <<<<<<<<<<<<<<
  *     ALPHA2  = S_(TSALPHA2)
- *     GL       = S_(TSGL)
+ *     GLLE     = S_(TSGLLE)
  */
-  __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_ALPHA, __pyx_t_8) < 0) __PYX_ERR(37, 13, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(TSALPHA); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 13, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ALPHA, __pyx_t_7) < 0) __PYX_ERR(37, 13, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/TS.pyx":14
  *     THETA    = S_(TSTHETA)
  *     ALPHA    = S_(TSALPHA)
  *     ALPHA2  = S_(TSALPHA2)             # <<<<<<<<<<<<<<
- *     GL       = S_(TSGL)
+ *     GLLE     = S_(TSGLLE)
  *     SSP      = S_(TSSSP)
  */
-  __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_ALPHA2, __pyx_t_8) < 0) __PYX_ERR(37, 14, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(TSALPHA2); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 14, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ALPHA2, __pyx_t_7) < 0) __PYX_ERR(37, 14, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/TS.pyx":15
  *     ALPHA    = S_(TSALPHA)
  *     ALPHA2  = S_(TSALPHA2)
- *     GL       = S_(TSGL)             # <<<<<<<<<<<<<<
+ *     GLLE     = S_(TSGLLE)             # <<<<<<<<<<<<<<
  *     SSP      = S_(TSSSP)
  *     ARKIMEX  = S_(TSARKIMEX)
  */
-  __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 (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_t_7 = __pyx_f_8petsc4py_5PETSc_S_(TSGLLE); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 15, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_GLLE, __pyx_t_7) < 0) __PYX_ERR(37, 15, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/TS.pyx":16
  *     ALPHA2  = S_(TSALPHA2)
- *     GL       = S_(TSGL)
+ *     GLLE     = S_(TSGLLE)
  *     SSP      = S_(TSSSP)             # <<<<<<<<<<<<<<
  *     ARKIMEX  = S_(TSARKIMEX)
  *     ROSW     = S_(TSROSW)
  */
-  __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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(TSSSP); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 16, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SSP, __pyx_t_7) < 0) __PYX_ERR(37, 16, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/TS.pyx":17
- *     GL       = S_(TSGL)
+ *     GLLE     = S_(TSGLLE)
  *     SSP      = S_(TSSSP)
  *     ARKIMEX  = S_(TSARKIMEX)             # <<<<<<<<<<<<<<
  *     ROSW     = S_(TSROSW)
  *     EIMEX    = S_(TSEIMEX)
  */
-  __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_ARKIMEX, __pyx_t_8) < 0) __PYX_ERR(37, 17, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(TSARKIMEX); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 17, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ARKIMEX, __pyx_t_7) < 0) __PYX_ERR(37, 17, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/TS.pyx":18
  *     SSP      = S_(TSSSP)
@@ -255335,10 +276235,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     EIMEX    = S_(TSEIMEX)
  *     MIMEX    = S_(TSMIMEX)
  */
-  __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_ROSW, __pyx_t_8) < 0) __PYX_ERR(37, 18, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(TSROSW); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 18, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ROSW, __pyx_t_7) < 0) __PYX_ERR(37, 18, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/TS.pyx":19
  *     ARKIMEX  = S_(TSARKIMEX)
@@ -255347,10 +276247,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     MIMEX    = S_(TSMIMEX)
  *     BDF      = S_(TSBDF)
  */
-  __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_EIMEX, __pyx_t_8) < 0) __PYX_ERR(37, 19, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(TSEIMEX); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_EIMEX, __pyx_t_7) < 0) __PYX_ERR(37, 19, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/TS.pyx":20
  *     ROSW     = S_(TSROSW)
@@ -255359,10 +276259,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     BDF      = S_(TSBDF)
  *     # aliases
  */
-  __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_MIMEX, __pyx_t_8) < 0) __PYX_ERR(37, 20, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(TSMIMEX); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 20, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MIMEX, __pyx_t_7) < 0) __PYX_ERR(37, 20, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/TS.pyx":21
  *     EIMEX    = S_(TSEIMEX)
@@ -255371,10 +276271,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # aliases
  *     FE = EULER
  */
-  __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_BDF, __pyx_t_8) < 0) __PYX_ERR(37, 21, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(TSBDF); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 21, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_BDF, __pyx_t_7) < 0) __PYX_ERR(37, 21, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/TS.pyx":23
  *     BDF      = S_(TSBDF)
@@ -255383,15 +276283,15 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     BE = BEULER
  *     TH = THETA
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_EULER);
-  if (unlikely(!__pyx_t_8)) {
+  __pyx_t_7 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_EULER);
+  if (unlikely(!__pyx_t_7)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_EULER);
+    __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_EULER);
   }
-  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_FE, __pyx_t_8) < 0) __PYX_ERR(37, 23, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 23, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_FE, __pyx_t_7) < 0) __PYX_ERR(37, 23, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/TS.pyx":24
  *     # aliases
@@ -255400,15 +276300,15 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     TH = THETA
  *     CRANK_NICOLSON = CN
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_BEULER);
-  if (unlikely(!__pyx_t_8)) {
+  __pyx_t_7 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_BEULER);
+  if (unlikely(!__pyx_t_7)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_BEULER);
+    __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_BEULER);
   }
-  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_BE, __pyx_t_8) < 0) __PYX_ERR(37, 24, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 24, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_BE, __pyx_t_7) < 0) __PYX_ERR(37, 24, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/TS.pyx":25
  *     FE = EULER
@@ -255417,15 +276317,15 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     CRANK_NICOLSON = CN
  *     RUNGE_KUTTA    = RK
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_THETA);
-  if (unlikely(!__pyx_t_8)) {
+  __pyx_t_7 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_THETA);
+  if (unlikely(!__pyx_t_7)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_THETA);
+    __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_THETA);
   }
-  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_TH, __pyx_t_8) < 0) __PYX_ERR(37, 25, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 25, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_TH, __pyx_t_7) < 0) __PYX_ERR(37, 25, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/TS.pyx":26
  *     BE = BEULER
@@ -255434,32 +276334,32 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     RUNGE_KUTTA    = RK
  * 
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_CN);
-  if (unlikely(!__pyx_t_8)) {
+  __pyx_t_7 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_CN);
+  if (unlikely(!__pyx_t_7)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_CN);
+    __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_CN);
   }
-  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_CRANK_NICOLSON, __pyx_t_8) < 0) __PYX_ERR(37, 26, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 26, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CRANK_NICOLSON, __pyx_t_7) < 0) __PYX_ERR(37, 26, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/TS.pyx":27
  *     TH = THETA
  *     CRANK_NICOLSON = CN
  *     RUNGE_KUTTA    = RK             # <<<<<<<<<<<<<<
  * 
- * class TSProblemType(object):
+ * class TSRKType(object):
  */
-  __pyx_t_8 = PyObject_GetItem(__pyx_t_4, __pyx_n_s_RK);
-  if (unlikely(!__pyx_t_8)) {
+  __pyx_t_7 = PyObject_GetItem(__pyx_t_3, __pyx_n_s_RK);
+  if (unlikely(!__pyx_t_7)) {
     PyErr_Clear();
-    __pyx_t_8 = __Pyx_GetModuleGlobalName(__pyx_n_s_RK);
+    __pyx_t_7 = __Pyx_GetModuleGlobalName(__pyx_n_s_RK);
   }
-  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_RUNGE_KUTTA, __pyx_t_8) < 0) __PYX_ERR(37, 27, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 27, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_RUNGE_KUTTA, __pyx_t_7) < 0) __PYX_ERR(37, 27, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/TS.pyx":3
  * # -----------------------------------------------------------------------------
@@ -255468,588 +276368,707 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # native
  *     EULER    = S_(TSEULER)
  */
-  __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_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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_TSType, __pyx_tuple__117, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TSType, __pyx_t_7) < 0) __PYX_ERR(37, 3, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "PETSc/TS.pyx":29
+ *     RUNGE_KUTTA    = RK
+ * 
+ * class TSRKType(object):             # <<<<<<<<<<<<<<
+ *     RK1FE = S_(TSRK1FE)
+ *     RK2A  = S_(TSRK2A)
+ */
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__118); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 29, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__118, __pyx_n_s_TSRKType, __pyx_n_s_TSRKType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 29, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+
+  /* "PETSc/TS.pyx":30
+ * 
+ * class TSRKType(object):
+ *     RK1FE = S_(TSRK1FE)             # <<<<<<<<<<<<<<
+ *     RK2A  = S_(TSRK2A)
+ *     RK4   = S_(TSRK4)
+ */
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(TSRK1FE); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 30, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_RK1FE, __pyx_t_7) < 0) __PYX_ERR(37, 30, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+
+  /* "PETSc/TS.pyx":31
+ * class TSRKType(object):
+ *     RK1FE = S_(TSRK1FE)
+ *     RK2A  = S_(TSRK2A)             # <<<<<<<<<<<<<<
+ *     RK4   = S_(TSRK4)
+ *     RK3BS = S_(TSRK3BS)
+ */
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(TSRK2A); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 31, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_RK2A, __pyx_t_7) < 0) __PYX_ERR(37, 31, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+
+  /* "PETSc/TS.pyx":32
+ *     RK1FE = S_(TSRK1FE)
+ *     RK2A  = S_(TSRK2A)
+ *     RK4   = S_(TSRK4)             # <<<<<<<<<<<<<<
+ *     RK3BS = S_(TSRK3BS)
+ *     RK3   = S_(TSRK3)
+ */
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(TSRK4); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 32, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_RK4, __pyx_t_7) < 0) __PYX_ERR(37, 32, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+
+  /* "PETSc/TS.pyx":33
+ *     RK2A  = S_(TSRK2A)
+ *     RK4   = S_(TSRK4)
+ *     RK3BS = S_(TSRK3BS)             # <<<<<<<<<<<<<<
+ *     RK3   = S_(TSRK3)
+ *     RK5F  = S_(TSRK5F)
+ */
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(TSRK3BS); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 33, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_RK3BS, __pyx_t_7) < 0) __PYX_ERR(37, 33, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+
+  /* "PETSc/TS.pyx":34
+ *     RK4   = S_(TSRK4)
+ *     RK3BS = S_(TSRK3BS)
+ *     RK3   = S_(TSRK3)             # <<<<<<<<<<<<<<
+ *     RK5F  = S_(TSRK5F)
+ *     RK5DP = S_(TSRK5DP)
+ */
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(TSRK3); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 34, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_RK3, __pyx_t_7) < 0) __PYX_ERR(37, 34, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+
+  /* "PETSc/TS.pyx":35
+ *     RK3BS = S_(TSRK3BS)
+ *     RK3   = S_(TSRK3)
+ *     RK5F  = S_(TSRK5F)             # <<<<<<<<<<<<<<
+ *     RK5DP = S_(TSRK5DP)
+ *     RK5BS = S_(TSRK5BS)
+ */
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(TSRK5F); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 35, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_RK5F, __pyx_t_7) < 0) __PYX_ERR(37, 35, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+
+  /* "PETSc/TS.pyx":36
+ *     RK3   = S_(TSRK3)
+ *     RK5F  = S_(TSRK5F)
+ *     RK5DP = S_(TSRK5DP)             # <<<<<<<<<<<<<<
+ *     RK5BS = S_(TSRK5BS)
+ * 
+ */
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(TSRK5DP); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 36, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_RK5DP, __pyx_t_7) < 0) __PYX_ERR(37, 36, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+
+  /* "PETSc/TS.pyx":37
+ *     RK5F  = S_(TSRK5F)
+ *     RK5DP = S_(TSRK5DP)
+ *     RK5BS = S_(TSRK5BS)             # <<<<<<<<<<<<<<
+ * 
+ * class TSProblemType(object):
+ */
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(TSRK5BS); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 37, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_RK5BS, __pyx_t_7) < 0) __PYX_ERR(37, 37, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/TS.pyx":29
  *     RUNGE_KUTTA    = RK
  * 
+ * class TSRKType(object):             # <<<<<<<<<<<<<<
+ *     RK1FE = S_(TSRK1FE)
+ *     RK2A  = S_(TSRK2A)
+ */
+  __pyx_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_TSRKType, __pyx_tuple__118, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 29, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TSRKType, __pyx_t_7) < 0) __PYX_ERR(37, 29, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+  /* "PETSc/TS.pyx":39
+ *     RK5BS = S_(TSRK5BS)
+ * 
  * class TSProblemType(object):             # <<<<<<<<<<<<<<
  *     LINEAR    = TS_LINEAR
  *     NONLINEAR = TS_NONLINEAR
  */
-  __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_ERR(37, 29, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__119); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 39, __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_ERR(37, 29, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__119, __pyx_n_s_TSProblemType, __pyx_n_s_TSProblemType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 39, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
-  /* "PETSc/TS.pyx":30
+  /* "PETSc/TS.pyx":40
  * 
  * class TSProblemType(object):
  *     LINEAR    = TS_LINEAR             # <<<<<<<<<<<<<<
  *     NONLINEAR = TS_NONLINEAR
  * 
  */
-  __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_LINEAR, __pyx_t_8) < 0) __PYX_ERR(37, 30, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_TSProblemType(TS_LINEAR); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 40, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_LINEAR, __pyx_t_7) < 0) __PYX_ERR(37, 40, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/TS.pyx":31
+  /* "PETSc/TS.pyx":41
  * class TSProblemType(object):
  *     LINEAR    = TS_LINEAR
  *     NONLINEAR = TS_NONLINEAR             # <<<<<<<<<<<<<<
  * 
  * class TSEquationType(object):
  */
-  __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_NONLINEAR, __pyx_t_8) < 0) __PYX_ERR(37, 31, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_TSProblemType(TS_NONLINEAR); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 41, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NONLINEAR, __pyx_t_7) < 0) __PYX_ERR(37, 41, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/TS.pyx":29
- *     RUNGE_KUTTA    = RK
+  /* "PETSc/TS.pyx":39
+ *     RK5BS = S_(TSRK5BS)
  * 
  * class TSProblemType(object):             # <<<<<<<<<<<<<<
  *     LINEAR    = TS_LINEAR
  *     NONLINEAR = TS_NONLINEAR
  */
-  __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 (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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_TSProblemType, __pyx_tuple__119, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 39, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TSProblemType, __pyx_t_7) < 0) __PYX_ERR(37, 39, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":33
+  /* "PETSc/TS.pyx":43
  *     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_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_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__120); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 43, __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);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__120, __pyx_n_s_TSEquationType, __pyx_n_s_TSEquationType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 43, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
-  /* "PETSc/TS.pyx":34
+  /* "PETSc/TS.pyx":44
  * 
  * class TSEquationType(object):
  *     UNSPECIFIED               = TS_EQ_UNSPECIFIED             # <<<<<<<<<<<<<<
  *     EXPLICIT                  = TS_EQ_EXPLICIT
  *     ODE_EXPLICIT              = TS_EQ_ODE_EXPLICIT
  */
-  __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_UNSPECIFIED, __pyx_t_8) < 0) __PYX_ERR(37, 34, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_TSEquationType(TS_EQ_UNSPECIFIED); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 44, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_UNSPECIFIED, __pyx_t_7) < 0) __PYX_ERR(37, 44, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/TS.pyx":35
+  /* "PETSc/TS.pyx":45
  * 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 = __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_EXPLICIT, __pyx_t_8) < 0) __PYX_ERR(37, 35, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_TSEquationType(TS_EQ_EXPLICIT); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 45, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_EXPLICIT, __pyx_t_7) < 0) __PYX_ERR(37, 45, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/TS.pyx":36
+  /* "PETSc/TS.pyx":46
  *     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 = __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_ODE_EXPLICIT, __pyx_t_8) < 0) __PYX_ERR(37, 36, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_TSEquationType(TS_EQ_ODE_EXPLICIT); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 46, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ODE_EXPLICIT, __pyx_t_7) < 0) __PYX_ERR(37, 46, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/TS.pyx":37
+  /* "PETSc/TS.pyx":47
  *     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 = __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_DAE_SEMI_EXPLICIT_INDEX1, __pyx_t_8) < 0) __PYX_ERR(37, 37, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_TSEquationType(TS_EQ_DAE_SEMI_EXPLICIT_INDEX1); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 47, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DAE_SEMI_EXPLICIT_INDEX1, __pyx_t_7) < 0) __PYX_ERR(37, 47, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/TS.pyx":38
+  /* "PETSc/TS.pyx":48
  *     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 = __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_DAE_SEMI_EXPLICIT_INDEX2, __pyx_t_8) < 0) __PYX_ERR(37, 38, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_TSEquationType(TS_EQ_DAE_SEMI_EXPLICIT_INDEX2); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 48, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DAE_SEMI_EXPLICIT_INDEX2, __pyx_t_7) < 0) __PYX_ERR(37, 48, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/TS.pyx":39
+  /* "PETSc/TS.pyx":49
  *     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 = __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_DAE_SEMI_EXPLICIT_INDEX3, __pyx_t_8) < 0) __PYX_ERR(37, 39, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_TSEquationType(TS_EQ_DAE_SEMI_EXPLICIT_INDEX3); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 49, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DAE_SEMI_EXPLICIT_INDEX3, __pyx_t_7) < 0) __PYX_ERR(37, 49, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/TS.pyx":40
+  /* "PETSc/TS.pyx":50
  *     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 = __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_DAE_SEMI_EXPLICIT_INDEXHI, __pyx_t_8) < 0) __PYX_ERR(37, 40, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_TSEquationType(TS_EQ_DAE_SEMI_EXPLICIT_INDEXHI); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 50, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DAE_SEMI_EXPLICIT_INDEXHI, __pyx_t_7) < 0) __PYX_ERR(37, 50, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/TS.pyx":41
+  /* "PETSc/TS.pyx":51
  *     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 = __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_IMPLICIT, __pyx_t_8) < 0) __PYX_ERR(37, 41, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_TSEquationType(TS_EQ_IMPLICIT); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 51, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_IMPLICIT, __pyx_t_7) < 0) __PYX_ERR(37, 51, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/TS.pyx":42
+  /* "PETSc/TS.pyx":52
  *     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 = __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_ODE_IMPLICIT, __pyx_t_8) < 0) __PYX_ERR(37, 42, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_TSEquationType(TS_EQ_ODE_IMPLICIT); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 52, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ODE_IMPLICIT, __pyx_t_7) < 0) __PYX_ERR(37, 52, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/TS.pyx":43
+  /* "PETSc/TS.pyx":53
  *     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 = __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_DAE_IMPLICIT_INDEX1, __pyx_t_8) < 0) __PYX_ERR(37, 43, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_TSEquationType(TS_EQ_DAE_IMPLICIT_INDEX1); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 53, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DAE_IMPLICIT_INDEX1, __pyx_t_7) < 0) __PYX_ERR(37, 53, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/TS.pyx":44
+  /* "PETSc/TS.pyx":54
  *     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 = __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_DAE_IMPLICIT_INDEX2, __pyx_t_8) < 0) __PYX_ERR(37, 44, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_TSEquationType(TS_EQ_DAE_IMPLICIT_INDEX2); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 54, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DAE_IMPLICIT_INDEX2, __pyx_t_7) < 0) __PYX_ERR(37, 54, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/TS.pyx":45
+  /* "PETSc/TS.pyx":55
  *     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 = __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_DAE_IMPLICIT_INDEX3, __pyx_t_8) < 0) __PYX_ERR(37, 45, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_TSEquationType(TS_EQ_DAE_IMPLICIT_INDEX3); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 55, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DAE_IMPLICIT_INDEX3, __pyx_t_7) < 0) __PYX_ERR(37, 55, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/TS.pyx":46
+  /* "PETSc/TS.pyx":56
  *     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 = __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_DAE_IMPLICIT_INDEXHI, __pyx_t_8) < 0) __PYX_ERR(37, 46, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_TSEquationType(TS_EQ_DAE_IMPLICIT_INDEXHI); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 56, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DAE_IMPLICIT_INDEXHI, __pyx_t_7) < 0) __PYX_ERR(37, 56, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/TS.pyx":33
+  /* "PETSc/TS.pyx":43
  *     NONLINEAR = TS_NONLINEAR
  * 
  * class TSEquationType(object):             # <<<<<<<<<<<<<<
  *     UNSPECIFIED               = TS_EQ_UNSPECIFIED
  *     EXPLICIT                  = TS_EQ_EXPLICIT
  */
-  __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_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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_TSEquationType, __pyx_tuple__120, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 43, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TSEquationType, __pyx_t_7) < 0) __PYX_ERR(37, 43, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":48
+  /* "PETSc/TS.pyx":58
  *     DAE_IMPLICIT_INDEXHI      = TS_EQ_DAE_IMPLICIT_INDEXHI
  * 
  * class TSExactFinalTime(object):             # <<<<<<<<<<<<<<
  *     UNSPECIFIED = TS_EXACTFINALTIME_UNSPECIFIED
  *     STEPOVER    = TS_EXACTFINALTIME_STEPOVER
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 48, __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, 48, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__121); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 58, __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);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__121, __pyx_n_s_TSExactFinalTime, __pyx_n_s_TSExactFinalTime, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 58, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
-  /* "PETSc/TS.pyx":49
+  /* "PETSc/TS.pyx":59
  * 
  * class TSExactFinalTime(object):
  *     UNSPECIFIED = TS_EXACTFINALTIME_UNSPECIFIED             # <<<<<<<<<<<<<<
  *     STEPOVER    = TS_EXACTFINALTIME_STEPOVER
  *     INTERPOLATE = TS_EXACTFINALTIME_INTERPOLATE
  */
-  __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;
+  __pyx_t_7 = __Pyx_PyInt_From_TSExactFinalTimeOption(TS_EXACTFINALTIME_UNSPECIFIED); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 59, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_UNSPECIFIED, __pyx_t_7) < 0) __PYX_ERR(37, 59, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/TS.pyx":50
+  /* "PETSc/TS.pyx":60
  * class TSExactFinalTime(object):
  *     UNSPECIFIED = TS_EXACTFINALTIME_UNSPECIFIED
  *     STEPOVER    = TS_EXACTFINALTIME_STEPOVER             # <<<<<<<<<<<<<<
  *     INTERPOLATE = TS_EXACTFINALTIME_INTERPOLATE
  *     MATCHSTEP   = TS_EXACTFINALTIME_MATCHSTEP
  */
-  __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;
+  __pyx_t_7 = __Pyx_PyInt_From_TSExactFinalTimeOption(TS_EXACTFINALTIME_STEPOVER); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 60, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_STEPOVER, __pyx_t_7) < 0) __PYX_ERR(37, 60, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/TS.pyx":51
+  /* "PETSc/TS.pyx":61
  *     UNSPECIFIED = TS_EXACTFINALTIME_UNSPECIFIED
  *     STEPOVER    = TS_EXACTFINALTIME_STEPOVER
  *     INTERPOLATE = TS_EXACTFINALTIME_INTERPOLATE             # <<<<<<<<<<<<<<
  *     MATCHSTEP   = TS_EXACTFINALTIME_MATCHSTEP
  * 
  */
-  __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;
+  __pyx_t_7 = __Pyx_PyInt_From_TSExactFinalTimeOption(TS_EXACTFINALTIME_INTERPOLATE); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 61, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_INTERPOLATE, __pyx_t_7) < 0) __PYX_ERR(37, 61, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/TS.pyx":52
+  /* "PETSc/TS.pyx":62
  *     STEPOVER    = TS_EXACTFINALTIME_STEPOVER
  *     INTERPOLATE = TS_EXACTFINALTIME_INTERPOLATE
  *     MATCHSTEP   = TS_EXACTFINALTIME_MATCHSTEP             # <<<<<<<<<<<<<<
  * 
  * class TSConvergedReason(object):
  */
-  __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;
+  __pyx_t_7 = __Pyx_PyInt_From_TSExactFinalTimeOption(TS_EXACTFINALTIME_MATCHSTEP); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 62, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MATCHSTEP, __pyx_t_7) < 0) __PYX_ERR(37, 62, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/TS.pyx":48
+  /* "PETSc/TS.pyx":58
  *     DAE_IMPLICIT_INDEXHI      = TS_EQ_DAE_IMPLICIT_INDEXHI
  * 
  * class TSExactFinalTime(object):             # <<<<<<<<<<<<<<
  *     UNSPECIFIED = TS_EXACTFINALTIME_UNSPECIFIED
  *     STEPOVER    = TS_EXACTFINALTIME_STEPOVER
  */
-  __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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_TSExactFinalTime, __pyx_tuple__121, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 58, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TSExactFinalTime, __pyx_t_7) < 0) __PYX_ERR(37, 58, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":54
+  /* "PETSc/TS.pyx":64
  *     MATCHSTEP   = TS_EXACTFINALTIME_MATCHSTEP
  * 
  * class TSConvergedReason(object):             # <<<<<<<<<<<<<<
  *     # iterating
  *     CONVERGED_ITERATING      = TS_CONVERGED_ITERATING
  */
-  __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_ERR(37, 54, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__122); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 64, __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_ERR(37, 54, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__122, __pyx_n_s_TSConvergedReason, __pyx_n_s_TSConvergedReason, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(37, 64, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
-  /* "PETSc/TS.pyx":56
+  /* "PETSc/TS.pyx":66
  * class TSConvergedReason(object):
  *     # iterating
  *     CONVERGED_ITERATING      = TS_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
  *     ITERATING                = TS_CONVERGED_ITERATING
  *     # converged
  */
-  __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_CONVERGED_ITERATING, __pyx_t_8) < 0) __PYX_ERR(37, 56, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_TSConvergedReason(TS_CONVERGED_ITERATING); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 66, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_ITERATING, __pyx_t_7) < 0) __PYX_ERR(37, 66, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/TS.pyx":57
+  /* "PETSc/TS.pyx":67
  *     # iterating
  *     CONVERGED_ITERATING      = TS_CONVERGED_ITERATING
  *     ITERATING                = TS_CONVERGED_ITERATING             # <<<<<<<<<<<<<<
  *     # converged
  *     CONVERGED_TIME           = TS_CONVERGED_TIME
  */
-  __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_ITERATING, __pyx_t_8) < 0) __PYX_ERR(37, 57, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_TSConvergedReason(TS_CONVERGED_ITERATING); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 67, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ITERATING, __pyx_t_7) < 0) __PYX_ERR(37, 67, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/TS.pyx":59
+  /* "PETSc/TS.pyx":69
  *     ITERATING                = TS_CONVERGED_ITERATING
  *     # converged
  *     CONVERGED_TIME           = TS_CONVERGED_TIME             # <<<<<<<<<<<<<<
  *     CONVERGED_ITS            = TS_CONVERGED_ITS
  *     CONVERGED_USER           = TS_CONVERGED_USER
  */
-  __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_CONVERGED_TIME, __pyx_t_8) < 0) __PYX_ERR(37, 59, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_TSConvergedReason(TS_CONVERGED_TIME); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 69, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_TIME, __pyx_t_7) < 0) __PYX_ERR(37, 69, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/TS.pyx":60
+  /* "PETSc/TS.pyx":70
  *     # 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_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_CONVERGED_ITS, __pyx_t_8) < 0) __PYX_ERR(37, 60, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_TSConvergedReason(TS_CONVERGED_ITS); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 70, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_ITS, __pyx_t_7) < 0) __PYX_ERR(37, 70, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/TS.pyx":61
+  /* "PETSc/TS.pyx":71
  *     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_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_CONVERGED_USER, __pyx_t_8) < 0) __PYX_ERR(37, 61, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_TSConvergedReason(TS_CONVERGED_USER); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 71, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_USER, __pyx_t_7) < 0) __PYX_ERR(37, 71, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/TS.pyx":62
+  /* "PETSc/TS.pyx":72
  *     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_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_CONVERGED_EVENT, __pyx_t_8) < 0) __PYX_ERR(37, 62, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_TSConvergedReason(TS_CONVERGED_EVENT); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 72, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CONVERGED_EVENT, __pyx_t_7) < 0) __PYX_ERR(37, 72, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/TS.pyx":64
+  /* "PETSc/TS.pyx":74
  *     CONVERGED_EVENT          = TS_CONVERGED_EVENT
  *     # diverged
  *     DIVERGED_NONLINEAR_SOLVE = TS_DIVERGED_NONLINEAR_SOLVE             # <<<<<<<<<<<<<<
  *     DIVERGED_STEP_REJECTED   = TS_DIVERGED_STEP_REJECTED
  * 
  */
-  __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_DIVERGED_NONLINEAR_SOLVE, __pyx_t_8) < 0) __PYX_ERR(37, 64, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_TSConvergedReason(TS_DIVERGED_NONLINEAR_SOLVE); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 74, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIVERGED_NONLINEAR_SOLVE, __pyx_t_7) < 0) __PYX_ERR(37, 74, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/TS.pyx":65
+  /* "PETSc/TS.pyx":75
  *     # diverged
  *     DIVERGED_NONLINEAR_SOLVE = TS_DIVERGED_NONLINEAR_SOLVE
  *     DIVERGED_STEP_REJECTED   = TS_DIVERGED_STEP_REJECTED             # <<<<<<<<<<<<<<
  * 
  * # -----------------------------------------------------------------------------
  */
-  __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_DIVERGED_STEP_REJECTED, __pyx_t_8) < 0) __PYX_ERR(37, 65, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_TSConvergedReason(TS_DIVERGED_STEP_REJECTED); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 75, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DIVERGED_STEP_REJECTED, __pyx_t_7) < 0) __PYX_ERR(37, 75, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
-  /* "PETSc/TS.pyx":54
+  /* "PETSc/TS.pyx":64
  *     MATCHSTEP   = TS_EXACTFINALTIME_MATCHSTEP
  * 
  * class TSConvergedReason(object):             # <<<<<<<<<<<<<<
  *     # iterating
  *     CONVERGED_ITERATING      = TS_CONVERGED_ITERATING
  */
-  __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 (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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_TSConvergedReason, __pyx_tuple__122, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(37, 64, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TSConvergedReason, __pyx_t_7) < 0) __PYX_ERR(37, 64, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/TS.pyx":71
+  /* "PETSc/TS.pyx":81
  * cdef class TS(Object):
  * 
  *     Type = TSType             # <<<<<<<<<<<<<<
+ *     RKType = TSRKType
  *     ProblemType = TSProblemType
- *     EquationType = TSEquationType
  */
-  __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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_TSType); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 81, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TS->tp_dict, __pyx_n_s_Type, __pyx_t_1) < 0) __PYX_ERR(37, 81, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_TS);
 
-  /* "PETSc/TS.pyx":72
+  /* "PETSc/TS.pyx":82
  * 
  *     Type = TSType
+ *     RKType = TSRKType             # <<<<<<<<<<<<<<
+ *     ProblemType = TSProblemType
+ *     EquationType = TSEquationType
+ */
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_TSRKType); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 82, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TS->tp_dict, __pyx_n_s_RKType, __pyx_t_1) < 0) __PYX_ERR(37, 82, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+  PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_TS);
+
+  /* "PETSc/TS.pyx":83
+ *     Type = TSType
+ *     RKType = TSRKType
  *     ProblemType = TSProblemType             # <<<<<<<<<<<<<<
  *     EquationType = TSEquationType
  *     ExactFinalTime = TSExactFinalTime
  */
-  __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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_TSProblemType); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 83, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TS->tp_dict, __pyx_n_s_ProblemType, __pyx_t_1) < 0) __PYX_ERR(37, 83, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_TS);
 
-  /* "PETSc/TS.pyx":73
- *     Type = TSType
+  /* "PETSc/TS.pyx":84
+ *     RKType = TSRKType
  *     ProblemType = TSProblemType
  *     EquationType = TSEquationType             # <<<<<<<<<<<<<<
  *     ExactFinalTime = TSExactFinalTime
  *     ExactFinalTimeOption = TSExactFinalTime
  */
-  __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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_TSEquationType); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 84, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TS->tp_dict, __pyx_n_s_EquationType, __pyx_t_1) < 0) __PYX_ERR(37, 84, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_TS);
 
-  /* "PETSc/TS.pyx":74
+  /* "PETSc/TS.pyx":85
  *     ProblemType = TSProblemType
  *     EquationType = TSEquationType
  *     ExactFinalTime = TSExactFinalTime             # <<<<<<<<<<<<<<
  *     ExactFinalTimeOption = TSExactFinalTime
  *     ConvergedReason = TSConvergedReason
  */
-  __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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_TSExactFinalTime); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 85, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TS->tp_dict, __pyx_n_s_ExactFinalTime, __pyx_t_1) < 0) __PYX_ERR(37, 85, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_TS);
 
-  /* "PETSc/TS.pyx":75
+  /* "PETSc/TS.pyx":86
  *     EquationType = TSEquationType
  *     ExactFinalTime = TSExactFinalTime
  *     ExactFinalTimeOption = TSExactFinalTime             # <<<<<<<<<<<<<<
  *     ConvergedReason = TSConvergedReason
  * 
  */
-  __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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_TSExactFinalTime); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 86, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TS->tp_dict, __pyx_n_s_ExactFinalTimeOption, __pyx_t_1) < 0) __PYX_ERR(37, 86, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_TS);
 
-  /* "PETSc/TS.pyx":76
+  /* "PETSc/TS.pyx":87
  *     ExactFinalTime = TSExactFinalTime
  *     ExactFinalTimeOption = TSExactFinalTime
  *     ConvergedReason = TSConvergedReason             # <<<<<<<<<<<<<<
  * 
  *     # --- xxx ---
  */
-  __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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_TSConvergedReason); if (unlikely(!__pyx_t_1)) __PYX_ERR(37, 87, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TS->tp_dict, __pyx_n_s_ConvergedReason, __pyx_t_1) < 0) __PYX_ERR(37, 87, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_TS);
 
-  /* "PETSc/TS.pyx":748
+  /* "PETSc/TS.pyx":902
  * # -----------------------------------------------------------------------------
  * 
  * del TSType             # <<<<<<<<<<<<<<
+ * del TSRKType
  * del TSProblemType
- * del TSEquationType
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_TSType) < 0) __PYX_ERR(37, 748, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_TSType) < 0) __PYX_ERR(37, 902, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":749
+  /* "PETSc/TS.pyx":903
  * 
  * del TSType
+ * del TSRKType             # <<<<<<<<<<<<<<
+ * del TSProblemType
+ * del TSEquationType
+ */
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_TSRKType) < 0) __PYX_ERR(37, 903, __pyx_L1_error)
+
+  /* "PETSc/TS.pyx":904
+ * del TSType
+ * del TSRKType
  * del TSProblemType             # <<<<<<<<<<<<<<
  * del TSEquationType
  * del TSExactFinalTime
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_TSProblemType) < 0) __PYX_ERR(37, 749, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_TSProblemType) < 0) __PYX_ERR(37, 904, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":750
- * del TSType
+  /* "PETSc/TS.pyx":905
+ * del TSRKType
  * 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)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_TSEquationType) < 0) __PYX_ERR(37, 905, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":751
+  /* "PETSc/TS.pyx":906
  * del TSProblemType
  * del TSEquationType
  * del TSExactFinalTime             # <<<<<<<<<<<<<<
  * del TSConvergedReason
  * 
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_TSExactFinalTime) < 0) __PYX_ERR(37, 751, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_TSExactFinalTime) < 0) __PYX_ERR(37, 906, __pyx_L1_error)
 
-  /* "PETSc/TS.pyx":752
+  /* "PETSc/TS.pyx":907
  * del TSEquationType
  * del TSExactFinalTime
  * del TSConvergedReason             # <<<<<<<<<<<<<<
  * 
  * # -----------------------------------------------------------------------------
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_TSConvergedReason) < 0) __PYX_ERR(37, 752, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_TSConvergedReason) < 0) __PYX_ERR(37, 907, __pyx_L1_error)
 
   /* "PETSc/TAO.pyx":3
  * # --------------------------------------------------------------------
@@ -256058,8 +277077,8 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     """
  *     TAO Solver Types
  */
-  __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);
+  __pyx_t_1 = __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_1)) __PYX_ERR(38, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
 
   /* "PETSc/TAO.pyx":7
  *     TAO Solver Types
@@ -256068,10 +277087,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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_t_3 = __pyx_f_8petsc4py_5PETSc_S_(TAOLMVM); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_LMVM, __pyx_t_3) < 0) __PYX_ERR(38, 7, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":8
  *     """
@@ -256080,10 +277099,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NTR      = S_(TAONTR)
  *     NTL      = S_(TAONTL)
  */
-  __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;
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_S_(TAONLS); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 8, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_NLS, __pyx_t_3) < 0) __PYX_ERR(38, 8, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":9
  *     LMVM     = S_(TAOLMVM)
@@ -256092,10 +277111,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_S_(TAONTR); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 9, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_NTR, __pyx_t_3) < 0) __PYX_ERR(38, 9, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":10
  *     NLS      = S_(TAONLS)
@@ -256104,10 +277123,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_S_(TAONTL); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 10, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_NTL, __pyx_t_3) < 0) __PYX_ERR(38, 10, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":11
  *     NTR      = S_(TAONTR)
@@ -256116,10 +277135,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_S_(TAOCG); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 11, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_CG, __pyx_t_3) < 0) __PYX_ERR(38, 11, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":12
  *     NTL      = S_(TAONTL)
@@ -256128,10 +277147,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_S_(TAOTRON); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 12, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_TRON, __pyx_t_3) < 0) __PYX_ERR(38, 12, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":13
  *     CG       = S_(TAOCG)
@@ -256140,10 +277159,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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;
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_S_(TAOOWLQN); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 13, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_OWLQN, __pyx_t_3) < 0) __PYX_ERR(38, 13, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":14
  *     TRON     = S_(TAOTRON)
@@ -256152,10 +277171,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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);
-  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;
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_S_(TAOBMRM); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 14, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_BMRM, __pyx_t_3) < 0) __PYX_ERR(38, 14, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":15
  *     OWLQN    = S_(TAOOWLQN)
@@ -256164,10 +277183,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     BQPIP    = S_(TAOBQPIP)
  *     GPCG     = S_(TAOGPCG)
  */
-  __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;
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_S_(TAOBLMVM); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 15, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_BLMVM, __pyx_t_3) < 0) __PYX_ERR(38, 15, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":16
  *     BMRM     = S_(TAOBMRM)
@@ -256176,10 +277195,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     GPCG     = S_(TAOGPCG)
  *     NM       = S_(TAONM)
  */
-  __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;
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_S_(TAOBQPIP); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 16, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_BQPIP, __pyx_t_3) < 0) __PYX_ERR(38, 16, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":17
  *     BLMVM    = S_(TAOBLMVM)
@@ -256188,10 +277207,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NM       = S_(TAONM)
  *     POUNDERS = S_(TAOPOUNDERS)
  */
-  __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;
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_S_(TAOGPCG); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 17, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_GPCG, __pyx_t_3) < 0) __PYX_ERR(38, 17, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":18
  *     BQPIP    = S_(TAOBQPIP)
@@ -256200,10 +277219,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     POUNDERS = S_(TAOPOUNDERS)
  *     LCL      = S_(TAOLCL)
  */
-  __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;
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_S_(TAONM); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 18, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_NM, __pyx_t_3) < 0) __PYX_ERR(38, 18, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":19
  *     GPCG     = S_(TAOGPCG)
@@ -256212,10 +277231,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     LCL      = S_(TAOLCL)
  *     SSILS    = S_(TAOSSILS)
  */
-  __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;
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_S_(TAOPOUNDERS); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_POUNDERS, __pyx_t_3) < 0) __PYX_ERR(38, 19, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":20
  *     NM       = S_(TAONM)
@@ -256224,10 +277243,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     SSILS    = S_(TAOSSILS)
  *     SSFLS    = S_(TAOSSFLS)
  */
-  __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;
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_S_(TAOLCL); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 20, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_LCL, __pyx_t_3) < 0) __PYX_ERR(38, 20, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":21
  *     POUNDERS = S_(TAOPOUNDERS)
@@ -256236,10 +277255,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     SSFLS    = S_(TAOSSFLS)
  *     ASILS    = S_(TAOASILS)
  */
-  __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;
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_S_(TAOSSILS); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 21, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_SSILS, __pyx_t_3) < 0) __PYX_ERR(38, 21, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":22
  *     LCL      = S_(TAOLCL)
@@ -256248,10 +277267,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ASILS    = S_(TAOASILS)
  *     ASFLS    = S_(TAOASFLS)
  */
-  __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;
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_S_(TAOSSFLS); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 22, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_SSFLS, __pyx_t_3) < 0) __PYX_ERR(38, 22, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":23
  *     SSILS    = S_(TAOSSILS)
@@ -256260,10 +277279,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ASFLS    = S_(TAOASFLS)
  *     IPM      = S_(TAOIPM)
  */
-  __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;
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_S_(TAOASILS); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 23, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_ASILS, __pyx_t_3) < 0) __PYX_ERR(38, 23, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":24
  *     SSFLS    = S_(TAOSSFLS)
@@ -256272,10 +277291,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     IPM      = S_(TAOIPM)
  *     TEST     = S_(TAOTEST)
  */
-  __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;
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_S_(TAOASFLS); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 24, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_ASFLS, __pyx_t_3) < 0) __PYX_ERR(38, 24, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":25
  *     ASILS    = S_(TAOASILS)
@@ -256284,10 +277303,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     TEST     = S_(TAOTEST)
  * 
  */
-  __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;
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_S_(TAOIPM); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 25, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_IPM, __pyx_t_3) < 0) __PYX_ERR(38, 25, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":26
  *     ASFLS    = S_(TAOASFLS)
@@ -256296,10 +277315,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * class TAOConvergedReason:
  */
-  __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;
+  __pyx_t_3 = __pyx_f_8petsc4py_5PETSc_S_(TAOTEST); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 26, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_TEST, __pyx_t_3) < 0) __PYX_ERR(38, 26, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":3
  * # --------------------------------------------------------------------
@@ -256308,11 +277327,11 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     """
  *     TAO Solver Types
  */
-  __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_t_3 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_TAOType, __pyx_empty_tuple, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TAOType, __pyx_t_3) < 0) __PYX_ERR(38, 3, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/TAO.pyx":28
  *     TEST     = S_(TAOTEST)
@@ -256321,8 +277340,8 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     """
  *     TAO Solver Termination Reasons
  */
-  __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_t_1 = __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_1)) __PYX_ERR(38, 28, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
 
   /* "PETSc/TAO.pyx":33
  *     """
@@ -256331,10 +277350,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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);
-  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;
+  __pyx_t_3 = __Pyx_PyInt_From_TaoConvergedReason(TAO_CONTINUE_ITERATING); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 33, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_CONTINUE_ITERATING, __pyx_t_3) < 0) __PYX_ERR(38, 33, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":34
  *     # iterating
@@ -256343,10 +277362,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ITERATING             = TAO_CONTINUE_ITERATING    # iterating
  *     # converged
  */
-  __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;
+  __pyx_t_3 = __Pyx_PyInt_From_TaoConvergedReason(TAO_CONTINUE_ITERATING); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 34, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_CONVERGED_ITERATING, __pyx_t_3) < 0) __PYX_ERR(38, 34, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":35
  *     CONTINUE_ITERATING    = TAO_CONTINUE_ITERATING    # iterating
@@ -256355,10 +277374,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # converged
  *     CONVERGED_GATOL       = TAO_CONVERGED_GATOL       # ||g(X)|| < gatol
  */
-  __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;
+  __pyx_t_3 = __Pyx_PyInt_From_TaoConvergedReason(TAO_CONTINUE_ITERATING); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 35, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_ITERATING, __pyx_t_3) < 0) __PYX_ERR(38, 35, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":37
  *     ITERATING             = TAO_CONTINUE_ITERATING    # iterating
@@ -256367,10 +277386,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     CONVERGED_GRTOL       = TAO_CONVERGED_GRTOL       # ||g(X)||/f(X)  < grtol
  *     CONVERGED_GTTOL       = TAO_CONVERGED_GTTOL       # ||g(X)||/||g(X0)|| < gttol
  */
-  __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;
+  __pyx_t_3 = __Pyx_PyInt_From_TaoConvergedReason(TAO_CONVERGED_GATOL); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 37, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_CONVERGED_GATOL, __pyx_t_3) < 0) __PYX_ERR(38, 37, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":38
  *     # converged
@@ -256379,10 +277398,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     CONVERGED_GTTOL       = TAO_CONVERGED_GTTOL       # ||g(X)||/||g(X0)|| < gttol
  *     CONVERGED_STEPTOL     = TAO_CONVERGED_STEPTOL     # small step size
  */
-  __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;
+  __pyx_t_3 = __Pyx_PyInt_From_TaoConvergedReason(TAO_CONVERGED_GRTOL); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 38, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_CONVERGED_GRTOL, __pyx_t_3) < 0) __PYX_ERR(38, 38, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":39
  *     CONVERGED_GATOL       = TAO_CONVERGED_GATOL       # ||g(X)|| < gatol
@@ -256391,10 +277410,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     CONVERGED_STEPTOL     = TAO_CONVERGED_STEPTOL     # small step size
  *     CONVERGED_MINF        = TAO_CONVERGED_MINF        # f(X) < F_min
  */
-  __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;
+  __pyx_t_3 = __Pyx_PyInt_From_TaoConvergedReason(TAO_CONVERGED_GTTOL); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 39, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_CONVERGED_GTTOL, __pyx_t_3) < 0) __PYX_ERR(38, 39, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":40
  *     CONVERGED_GRTOL       = TAO_CONVERGED_GRTOL       # ||g(X)||/f(X)  < grtol
@@ -256403,10 +277422,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     CONVERGED_MINF        = TAO_CONVERGED_MINF        # f(X) < F_min
  *     CONVERGED_USER        = TAO_CONVERGED_USER        # user defined
  */
-  __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;
+  __pyx_t_3 = __Pyx_PyInt_From_TaoConvergedReason(TAO_CONVERGED_STEPTOL); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 40, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_CONVERGED_STEPTOL, __pyx_t_3) < 0) __PYX_ERR(38, 40, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":41
  *     CONVERGED_GTTOL       = TAO_CONVERGED_GTTOL       # ||g(X)||/||g(X0)|| < gttol
@@ -256415,10 +277434,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     CONVERGED_USER        = TAO_CONVERGED_USER        # user defined
  *     # diverged
  */
-  __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;
+  __pyx_t_3 = __Pyx_PyInt_From_TaoConvergedReason(TAO_CONVERGED_MINF); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 41, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_CONVERGED_MINF, __pyx_t_3) < 0) __PYX_ERR(38, 41, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":42
  *     CONVERGED_STEPTOL     = TAO_CONVERGED_STEPTOL     # small step size
@@ -256427,10 +277446,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     # diverged
  *     DIVERGED_MAXITS       = TAO_DIVERGED_MAXITS       #
  */
-  __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;
+  __pyx_t_3 = __Pyx_PyInt_From_TaoConvergedReason(TAO_CONVERGED_USER); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 42, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_CONVERGED_USER, __pyx_t_3) < 0) __PYX_ERR(38, 42, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":44
  *     CONVERGED_USER        = TAO_CONVERGED_USER        # user defined
@@ -256439,10 +277458,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     DIVERGED_NAN          = TAO_DIVERGED_NAN          #
  *     DIVERGED_MAXFCN       = TAO_DIVERGED_MAXFCN       #
  */
-  __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;
+  __pyx_t_3 = __Pyx_PyInt_From_TaoConvergedReason(TAO_DIVERGED_MAXITS); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 44, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_DIVERGED_MAXITS, __pyx_t_3) < 0) __PYX_ERR(38, 44, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":45
  *     # diverged
@@ -256451,10 +277470,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     DIVERGED_MAXFCN       = TAO_DIVERGED_MAXFCN       #
  *     DIVERGED_LS_FAILURE   = TAO_DIVERGED_LS_FAILURE   #
  */
-  __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;
+  __pyx_t_3 = __Pyx_PyInt_From_TaoConvergedReason(TAO_DIVERGED_NAN); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 45, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_DIVERGED_NAN, __pyx_t_3) < 0) __PYX_ERR(38, 45, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":46
  *     DIVERGED_MAXITS       = TAO_DIVERGED_MAXITS       #
@@ -256463,10 +277482,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     DIVERGED_LS_FAILURE   = TAO_DIVERGED_LS_FAILURE   #
  *     DIVERGED_TR_REDUCTION = TAO_DIVERGED_TR_REDUCTION #
  */
-  __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;
+  __pyx_t_3 = __Pyx_PyInt_From_TaoConvergedReason(TAO_DIVERGED_MAXFCN); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 46, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_DIVERGED_MAXFCN, __pyx_t_3) < 0) __PYX_ERR(38, 46, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":47
  *     DIVERGED_NAN          = TAO_DIVERGED_NAN          #
@@ -256475,10 +277494,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     DIVERGED_TR_REDUCTION = TAO_DIVERGED_TR_REDUCTION #
  *     DIVERGED_USER         = TAO_DIVERGED_USER         # user defined
  */
-  __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;
+  __pyx_t_3 = __Pyx_PyInt_From_TaoConvergedReason(TAO_DIVERGED_LS_FAILURE); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 47, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_DIVERGED_LS_FAILURE, __pyx_t_3) < 0) __PYX_ERR(38, 47, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":48
  *     DIVERGED_MAXFCN       = TAO_DIVERGED_MAXFCN       #
@@ -256487,10 +277506,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     DIVERGED_USER         = TAO_DIVERGED_USER         # user defined
  * 
  */
-  __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;
+  __pyx_t_3 = __Pyx_PyInt_From_TaoConvergedReason(TAO_DIVERGED_TR_REDUCTION); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 48, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_DIVERGED_TR_REDUCTION, __pyx_t_3) < 0) __PYX_ERR(38, 48, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":49
  *     DIVERGED_LS_FAILURE   = TAO_DIVERGED_LS_FAILURE   #
@@ -256499,10 +277518,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * # --------------------------------------------------------------------
  */
-  __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_t_3 = __Pyx_PyInt_From_TaoConvergedReason(TAO_DIVERGED_USER); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 49, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyObject_SetItem(__pyx_t_1, __pyx_n_s_DIVERGED_USER, __pyx_t_3) < 0) __PYX_ERR(38, 49, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
 
   /* "PETSc/TAO.pyx":28
  *     TEST     = S_(TAOTEST)
@@ -256511,11 +277530,11 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     """
  *     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_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_t_3 = __Pyx_Py3ClassCreate(((PyObject*)&__Pyx_DefaultClassType), __pyx_n_s_TAOConvergedReason, __pyx_empty_tuple, __pyx_t_1, NULL, 0, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(38, 28, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_TAOConvergedReason, __pyx_t_3) < 0) __PYX_ERR(38, 28, __pyx_L1_error)
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/TAO.pyx":59
  *     """
@@ -256524,10 +277543,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     Reason = TAOConvergedReason
  * 
  */
-  __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_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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_TAOType); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 59, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TAO->tp_dict, __pyx_n_s_Type, __pyx_t_1) < 0) __PYX_ERR(38, 59, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_TAO);
 
   /* "PETSc/TAO.pyx":60
@@ -256537,10 +277556,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  *     def __cinit__(self):
  */
-  __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_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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_TAOConvergedReason); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 60, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TAO->tp_dict, __pyx_n_s_Reason, __pyx_t_1) < 0) __PYX_ERR(38, 60, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_TAO);
 
   /* "PETSc/TAO.pyx":511
@@ -256550,10 +277569,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  *     def getConvergedReason(self):
  */
-  __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_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;
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TAO, __pyx_n_s_getObjectiveValue); if (unlikely(!__pyx_t_1)) __PYX_ERR(38, 511, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_TAO->tp_dict, __pyx_n_s_getFunctionValue, __pyx_t_1) < 0) __PYX_ERR(38, 511, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_TAO);
 
   /* "PETSc/TAO.pyx":649
@@ -256581,15 +277600,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     BASIC          = S_(AOBASIC)
  *     ADVANCED       = S_(AOADVANCED)
  */
-  __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_ERR(39, 3, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__123); 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_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);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__123, __pyx_n_s_AOType, __pyx_n_s_AOType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(39, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/AO.pyx":4
  * 
@@ -256598,10 +277612,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ADVANCED       = S_(AOADVANCED)
  *     MAPPING        = S_(AOMAPPING)
  */
-  __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_BASIC, __pyx_t_8) < 0) __PYX_ERR(39, 4, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(AOBASIC); if (unlikely(!__pyx_t_7)) __PYX_ERR(39, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_BASIC, __pyx_t_7) < 0) __PYX_ERR(39, 4, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/AO.pyx":5
  * class AOType(object):
@@ -256610,10 +277624,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     MAPPING        = S_(AOMAPPING)
  *     MEMORYSCALABLE = S_(AOMEMORYSCALABLE)
  */
-  __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_ADVANCED, __pyx_t_8) < 0) __PYX_ERR(39, 5, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(AOADVANCED); if (unlikely(!__pyx_t_7)) __PYX_ERR(39, 5, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_ADVANCED, __pyx_t_7) < 0) __PYX_ERR(39, 5, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/AO.pyx":6
  *     BASIC          = S_(AOBASIC)
@@ -256622,10 +277636,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     MEMORYSCALABLE = S_(AOMEMORYSCALABLE)
  * 
  */
-  __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_MAPPING, __pyx_t_8) < 0) __PYX_ERR(39, 6, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(AOMAPPING); if (unlikely(!__pyx_t_7)) __PYX_ERR(39, 6, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MAPPING, __pyx_t_7) < 0) __PYX_ERR(39, 6, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/AO.pyx":7
  *     ADVANCED       = S_(AOADVANCED)
@@ -256634,10 +277648,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * # --------------------------------------------------------------------
  */
-  __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_MEMORYSCALABLE, __pyx_t_8) < 0) __PYX_ERR(39, 7, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(AOMEMORYSCALABLE); if (unlikely(!__pyx_t_7)) __PYX_ERR(39, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MEMORYSCALABLE, __pyx_t_7) < 0) __PYX_ERR(39, 7, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/AO.pyx":3
  * # --------------------------------------------------------------------
@@ -256646,13 +277660,12 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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_ERR(39, 3, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_8);
-  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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_AOType, __pyx_tuple__123, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(39, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_AOType, __pyx_t_7) < 0) __PYX_ERR(39, 3, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/AO.pyx":13
  * cdef class AO(Object):
@@ -256661,10 +277674,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  *     def __cinit__(self):
  */
-  __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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_AOType); if (unlikely(!__pyx_t_1)) __PYX_ERR(39, 13, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_AO->tp_dict, __pyx_n_s_Type, __pyx_t_1) < 0) __PYX_ERR(39, 13, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_AO);
 
   /* "PETSc/AO.pyx":117
@@ -256683,15 +277696,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     DA        = S_(DMDA_type)
  *     COMPOSITE = S_(DMCOMPOSITE)
  */
-  __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_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__124); 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);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__124, __pyx_n_s_DMType, __pyx_n_s_DMType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/DM.pyx":4
  * 
@@ -256700,10 +277708,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     COMPOSITE = S_(DMCOMPOSITE)
  *     SLICED    = S_(DMSLICED)
  */
-  __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_DA, __pyx_t_8) < 0) __PYX_ERR(40, 4, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(DMDA); if (unlikely(!__pyx_t_7)) __PYX_ERR(40, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_DA, __pyx_t_7) < 0) __PYX_ERR(40, 4, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/DM.pyx":5
  * class DMType(object):
@@ -256712,10 +277720,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     SLICED    = S_(DMSLICED)
  *     SHELL     = S_(DMSHELL)
  */
-  __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_COMPOSITE, __pyx_t_8) < 0) __PYX_ERR(40, 5, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(DMCOMPOSITE); if (unlikely(!__pyx_t_7)) __PYX_ERR(40, 5, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_COMPOSITE, __pyx_t_7) < 0) __PYX_ERR(40, 5, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/DM.pyx":6
  *     DA        = S_(DMDA_type)
@@ -256724,10 +277732,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     SHELL     = S_(DMSHELL)
  *     PLEX      = S_(DMPLEX)
  */
-  __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_SLICED, __pyx_t_8) < 0) __PYX_ERR(40, 6, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(DMSLICED); if (unlikely(!__pyx_t_7)) __PYX_ERR(40, 6, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SLICED, __pyx_t_7) < 0) __PYX_ERR(40, 6, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/DM.pyx":7
  *     COMPOSITE = S_(DMCOMPOSITE)
@@ -256736,10 +277744,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     PLEX      = S_(DMPLEX)
  *     CARTESIAN = S_(DMCARTESIAN)
  */
-  __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_SHELL, __pyx_t_8) < 0) __PYX_ERR(40, 7, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(DMSHELL); if (unlikely(!__pyx_t_7)) __PYX_ERR(40, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SHELL, __pyx_t_7) < 0) __PYX_ERR(40, 7, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/DM.pyx":8
  *     SLICED    = S_(DMSLICED)
@@ -256748,10 +277756,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     CARTESIAN = S_(DMCARTESIAN)
  *     REDUNDANT = S_(DMREDUNDANT)
  */
-  __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_PLEX, __pyx_t_8) < 0) __PYX_ERR(40, 8, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(DMPLEX); if (unlikely(!__pyx_t_7)) __PYX_ERR(40, 8, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_PLEX, __pyx_t_7) < 0) __PYX_ERR(40, 8, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/DM.pyx":9
  *     SHELL     = S_(DMSHELL)
@@ -256760,10 +277768,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     REDUNDANT = S_(DMREDUNDANT)
  *     PATCH     = S_(DMPATCH)
  */
-  __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_CARTESIAN, __pyx_t_8) < 0) __PYX_ERR(40, 9, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(DMCARTESIAN); if (unlikely(!__pyx_t_7)) __PYX_ERR(40, 9, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CARTESIAN, __pyx_t_7) < 0) __PYX_ERR(40, 9, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/DM.pyx":10
  *     PLEX      = S_(DMPLEX)
@@ -256772,10 +277780,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     PATCH     = S_(DMPATCH)
  *     MOAB      = S_(DMMOAB)
  */
-  __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_REDUNDANT, __pyx_t_8) < 0) __PYX_ERR(40, 10, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(DMREDUNDANT); if (unlikely(!__pyx_t_7)) __PYX_ERR(40, 10, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_REDUNDANT, __pyx_t_7) < 0) __PYX_ERR(40, 10, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/DM.pyx":11
  *     CARTESIAN = S_(DMCARTESIAN)
@@ -256784,10 +277792,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     MOAB      = S_(DMMOAB)
  *     NETWORK   = S_(DMNETWORK)
  */
-  __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_PATCH, __pyx_t_8) < 0) __PYX_ERR(40, 11, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(DMPATCH); if (unlikely(!__pyx_t_7)) __PYX_ERR(40, 11, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_PATCH, __pyx_t_7) < 0) __PYX_ERR(40, 11, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/DM.pyx":12
  *     REDUNDANT = S_(DMREDUNDANT)
@@ -256796,10 +277804,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NETWORK   = S_(DMNETWORK)
  * 
  */
-  __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_MOAB, __pyx_t_8) < 0) __PYX_ERR(40, 12, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(DMMOAB); if (unlikely(!__pyx_t_7)) __PYX_ERR(40, 12, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MOAB, __pyx_t_7) < 0) __PYX_ERR(40, 12, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/DM.pyx":13
  *     PATCH     = S_(DMPATCH)
@@ -256808,10 +277816,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * class DMBoundaryType(object):
  */
-  __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_NETWORK, __pyx_t_8) < 0) __PYX_ERR(40, 13, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(DMNETWORK); if (unlikely(!__pyx_t_7)) __PYX_ERR(40, 13, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NETWORK, __pyx_t_7) < 0) __PYX_ERR(40, 13, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/DM.pyx":3
  * # --------------------------------------------------------------------
@@ -256820,13 +277828,12 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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_ERR(40, 3, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_8);
-  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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_DMType, __pyx_tuple__124, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(40, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DMType, __pyx_t_7) < 0) __PYX_ERR(40, 3, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/DM.pyx":15
  *     NETWORK   = S_(DMNETWORK)
@@ -256835,15 +277842,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     NONE     = DM_BOUNDARY_NONE
  *     GHOSTED  = DM_BOUNDARY_GHOSTED
  */
-  __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_ERR(40, 15, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__125); 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_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);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__125, __pyx_n_s_DMBoundaryType, __pyx_n_s_DMBoundaryType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(40, 15, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/DM.pyx":16
  * 
@@ -256852,10 +277854,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     GHOSTED  = DM_BOUNDARY_GHOSTED
  *     MIRROR   = DM_BOUNDARY_MIRROR
  */
-  __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_NONE, __pyx_t_8) < 0) __PYX_ERR(40, 16, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_DMBoundaryType(DM_BOUNDARY_NONE); if (unlikely(!__pyx_t_7)) __PYX_ERR(40, 16, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_NONE, __pyx_t_7) < 0) __PYX_ERR(40, 16, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/DM.pyx":17
  * class DMBoundaryType(object):
@@ -256864,10 +277866,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     MIRROR   = DM_BOUNDARY_MIRROR
  *     PERIODIC = DM_BOUNDARY_PERIODIC
  */
-  __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_GHOSTED, __pyx_t_8) < 0) __PYX_ERR(40, 17, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_DMBoundaryType(DM_BOUNDARY_GHOSTED); if (unlikely(!__pyx_t_7)) __PYX_ERR(40, 17, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_GHOSTED, __pyx_t_7) < 0) __PYX_ERR(40, 17, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/DM.pyx":18
  *     NONE     = DM_BOUNDARY_NONE
@@ -256876,10 +277878,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     PERIODIC = DM_BOUNDARY_PERIODIC
  *     TWIST    = DM_BOUNDARY_TWIST
  */
-  __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 (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_t_7 = __Pyx_PyInt_From_DMBoundaryType(DM_BOUNDARY_MIRROR); if (unlikely(!__pyx_t_7)) __PYX_ERR(40, 18, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_MIRROR, __pyx_t_7) < 0) __PYX_ERR(40, 18, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/DM.pyx":19
  *     GHOSTED  = DM_BOUNDARY_GHOSTED
@@ -256888,10 +277890,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     TWIST    = DM_BOUNDARY_TWIST
  * 
  */
-  __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_PERIODIC, __pyx_t_8) < 0) __PYX_ERR(40, 19, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_DMBoundaryType(DM_BOUNDARY_PERIODIC); if (unlikely(!__pyx_t_7)) __PYX_ERR(40, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_PERIODIC, __pyx_t_7) < 0) __PYX_ERR(40, 19, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/DM.pyx":20
  *     MIRROR   = DM_BOUNDARY_MIRROR
@@ -256900,10 +277902,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * # --------------------------------------------------------------------
  */
-  __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_TWIST, __pyx_t_8) < 0) __PYX_ERR(40, 20, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_DMBoundaryType(DM_BOUNDARY_TWIST); if (unlikely(!__pyx_t_7)) __PYX_ERR(40, 20, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_TWIST, __pyx_t_7) < 0) __PYX_ERR(40, 20, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/DM.pyx":15
  *     NETWORK   = S_(DMNETWORK)
@@ -256912,13 +277914,12 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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_ERR(40, 15, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_8);
-  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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_DMBoundaryType, __pyx_tuple__125, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(40, 15, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DMBoundaryType, __pyx_t_7) < 0) __PYX_ERR(40, 15, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/DM.pyx":26
  * cdef class DM(Object):
@@ -256927,10 +277928,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     BoundaryType = DMBoundaryType
  * 
  */
-  __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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DMType); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 26, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DM->tp_dict, __pyx_n_s_Type, __pyx_t_1) < 0) __PYX_ERR(40, 26, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DM);
 
   /* "PETSc/DM.pyx":27
@@ -256940,70 +277941,70 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  *     #
  */
-  __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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DMBoundaryType); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 27, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DM->tp_dict, __pyx_n_s_BoundaryType, __pyx_t_1) < 0) __PYX_ERR(40, 27, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DM);
 
-  /* "PETSc/DM.pyx":393
+  /* "PETSc/DM.pyx":448
  * 
  *     # 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_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;
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DM, __pyx_n_s_createGlobalVec); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 448, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DM->tp_dict, __pyx_n_s_createGlobalVector, __pyx_t_1) < 0) __PYX_ERR(40, 448, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DM);
 
-  /* "PETSc/DM.pyx":394
+  /* "PETSc/DM.pyx":449
  *     # 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_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;
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DM, __pyx_n_s_createLocalVec); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 449, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DM->tp_dict, __pyx_n_s_createLocalVector, __pyx_t_1) < 0) __PYX_ERR(40, 449, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DM);
 
-  /* "PETSc/DM.pyx":395
+  /* "PETSc/DM.pyx":450
  *     createGlobalVector = createGlobalVec
  *     createLocalVector = createLocalVec
  *     getMatrix = createMatrix = createMat             # <<<<<<<<<<<<<<
  * 
- * # --------------------------------------------------------------------
+ *     def setKSPComputeOperators(self, operators, args=None, kargs=None):
  */
-  __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)
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DM, __pyx_n_s_createMat); if (unlikely(!__pyx_t_1)) __PYX_ERR(40, 450, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DM->tp_dict, __pyx_n_s_getMatrix, __pyx_t_1) < 0) __PYX_ERR(40, 450, __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)
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DM->tp_dict, __pyx_n_s_createMatrix, __pyx_t_1) < 0) __PYX_ERR(40, 450, __pyx_L1_error)
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DM);
-  __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/DM.pyx":399
+  /* "PETSc/DM.pyx":516
  * # --------------------------------------------------------------------
  * 
  * del DMType             # <<<<<<<<<<<<<<
  * del DMBoundaryType
  * 
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_DMType) < 0) __PYX_ERR(40, 399, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_DMType) < 0) __PYX_ERR(40, 516, __pyx_L1_error)
 
-  /* "PETSc/DM.pyx":400
+  /* "PETSc/DM.pyx":517
  * 
  * del DMType
  * del DMBoundaryType             # <<<<<<<<<<<<<<
  * 
  * # --------------------------------------------------------------------
  */
-  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_DMBoundaryType) < 0) __PYX_ERR(40, 400, __pyx_L1_error)
+  if (__Pyx_PyObject_DelAttrStr(__pyx_m, __pyx_n_s_DMBoundaryType) < 0) __PYX_ERR(40, 517, __pyx_L1_error)
 
   /* "PETSc/DMDA.pyx":3
  * # --------------------------------------------------------------------
@@ -257012,15 +278013,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     STAR = DMDA_STENCIL_STAR
  *     BOX  = DMDA_STENCIL_BOX
  */
-  __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_ERR(41, 3, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__126); 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_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);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__126, __pyx_n_s_DMDAStencilType, __pyx_n_s_DMDAStencilType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(41, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/DMDA.pyx":4
  * 
@@ -257029,10 +278025,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     BOX  = DMDA_STENCIL_BOX
  * 
  */
-  __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_STAR, __pyx_t_8) < 0) __PYX_ERR(41, 4, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_DMDAStencilType(DMDA_STENCIL_STAR); if (unlikely(!__pyx_t_7)) __PYX_ERR(41, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_STAR, __pyx_t_7) < 0) __PYX_ERR(41, 4, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/DMDA.pyx":5
  * class DMDAStencilType(object):
@@ -257041,10 +278037,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * class DMDAInterpolationType(object):
  */
-  __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_BOX, __pyx_t_8) < 0) __PYX_ERR(41, 5, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_DMDAStencilType(DMDA_STENCIL_BOX); if (unlikely(!__pyx_t_7)) __PYX_ERR(41, 5, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_BOX, __pyx_t_7) < 0) __PYX_ERR(41, 5, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/DMDA.pyx":3
  * # --------------------------------------------------------------------
@@ -257053,13 +278049,12 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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_ERR(41, 3, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_8);
-  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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_DMDAStencilType, __pyx_tuple__126, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(41, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DMDAStencilType, __pyx_t_7) < 0) __PYX_ERR(41, 3, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/DMDA.pyx":7
  *     BOX  = DMDA_STENCIL_BOX
@@ -257068,15 +278063,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     Q0 = DMDA_INTERPOLATION_Q0
  *     Q1 = DMDA_INTERPOLATION_Q1
  */
-  __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_ERR(41, 7, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__127); 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_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);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__127, __pyx_n_s_DMDAInterpolationType, __pyx_n_s_DMDAInterpolationType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(41, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/DMDA.pyx":8
  * 
@@ -257085,10 +278075,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     Q1 = DMDA_INTERPOLATION_Q1
  * 
  */
-  __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_Q0, __pyx_t_8) < 0) __PYX_ERR(41, 8, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_DMDAInterpolationType(DMDA_Q0); if (unlikely(!__pyx_t_7)) __PYX_ERR(41, 8, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_Q0, __pyx_t_7) < 0) __PYX_ERR(41, 8, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/DMDA.pyx":9
  * class DMDAInterpolationType(object):
@@ -257097,10 +278087,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * class DMDAElementType(object):
  */
-  __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_Q1, __pyx_t_8) < 0) __PYX_ERR(41, 9, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_DMDAInterpolationType(DMDA_Q1); if (unlikely(!__pyx_t_7)) __PYX_ERR(41, 9, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_Q1, __pyx_t_7) < 0) __PYX_ERR(41, 9, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/DMDA.pyx":7
  *     BOX  = DMDA_STENCIL_BOX
@@ -257109,13 +278099,12 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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_ERR(41, 7, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_8);
-  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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_DMDAInterpolationType, __pyx_tuple__127, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(41, 7, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DMDAInterpolationType, __pyx_t_7) < 0) __PYX_ERR(41, 7, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/DMDA.pyx":11
  *     Q1 = DMDA_INTERPOLATION_Q1
@@ -257124,15 +278113,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     P1 = DMDA_ELEMENT_P1
  *     Q1 = DMDA_ELEMENT_Q1
  */
-  __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_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__128); 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);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__128, __pyx_n_s_DMDAElementType, __pyx_n_s_DMDAElementType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(41, 11, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/DMDA.pyx":12
  * 
@@ -257141,10 +278125,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     Q1 = DMDA_ELEMENT_Q1
  * 
  */
-  __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_P1, __pyx_t_8) < 0) __PYX_ERR(41, 12, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_DMDAElementType(DMDA_ELEMENT_P1); if (unlikely(!__pyx_t_7)) __PYX_ERR(41, 12, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_P1, __pyx_t_7) < 0) __PYX_ERR(41, 12, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/DMDA.pyx":13
  * class DMDAElementType(object):
@@ -257153,10 +278137,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * # --------------------------------------------------------------------
  */
-  __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_Q1, __pyx_t_8) < 0) __PYX_ERR(41, 13, __pyx_L1_error)
-  __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+  __pyx_t_7 = __Pyx_PyInt_From_DMDAElementType(DMDA_ELEMENT_Q1); if (unlikely(!__pyx_t_7)) __PYX_ERR(41, 13, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_Q1, __pyx_t_7) < 0) __PYX_ERR(41, 13, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/DMDA.pyx":11
  *     Q1 = DMDA_INTERPOLATION_Q1
@@ -257165,13 +278149,12 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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_ERR(41, 11, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_8);
-  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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_DMDAElementType, __pyx_tuple__128, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(41, 11, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_DMDAElementType, __pyx_t_7) < 0) __PYX_ERR(41, 11, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/DMDA.pyx":19
  * cdef class DMDA(DM):
@@ -257180,10 +278163,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     InterpolationType = DMDAInterpolationType
  *     ElementType       = DMDAElementType
  */
-  __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_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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DMDAStencilType); if (unlikely(!__pyx_t_1)) __PYX_ERR(41, 19, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DMDA->tp_dict, __pyx_n_s_StencilType, __pyx_t_1) < 0) __PYX_ERR(41, 19, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DMDA);
 
   /* "PETSc/DMDA.pyx":20
@@ -257193,10 +278176,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     ElementType       = DMDAElementType
  * 
  */
-  __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_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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DMDAInterpolationType); if (unlikely(!__pyx_t_1)) __PYX_ERR(41, 20, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DMDA->tp_dict, __pyx_n_s_InterpolationType, __pyx_t_1) < 0) __PYX_ERR(41, 20, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DMDA);
 
   /* "PETSc/DMDA.pyx":21
@@ -257206,10 +278189,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  *     #
  */
-  __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_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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_DMDAElementType); if (unlikely(!__pyx_t_1)) __PYX_ERR(41, 21, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DMDA->tp_dict, __pyx_n_s_ElementType, __pyx_t_1) < 0) __PYX_ERR(41, 21, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DMDA);
 
   /* "PETSc/DMDA.pyx":530
@@ -257219,10 +278202,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * 
  */
-  __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_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;
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DMDA, __pyx_n_s_createNaturalVec); if (unlikely(!__pyx_t_1)) __PYX_ERR(41, 530, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DMDA->tp_dict, __pyx_n_s_createNaturalVector, __pyx_t_1) < 0) __PYX_ERR(41, 530, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DMDA);
 
   /* "PETSc/DMDA.pyx":534
@@ -257268,10 +278251,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  *     def getEntries(self):
  */
-  __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;
+  __pyx_t_1 = __Pyx_GetNameInClass((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DMComposite, __pyx_n_s_getNumber); if (unlikely(!__pyx_t_1)) __PYX_ERR(43, 25, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_DMComposite->tp_dict, __pyx_n_s_getNumberDM, __pyx_t_1) < 0) __PYX_ERR(43, 25, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_DMComposite);
 
   /* "PETSc/SF.pyx":3
@@ -257281,15 +278264,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     BASIC  = S_(PETSCSFBASIC)
  *     WINDOW = S_(PETSCSFWINDOW)
  */
-  __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(45, 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(45, 3, __pyx_L1_error)
+  __pyx_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__129); if (unlikely(!__pyx_t_1)) __PYX_ERR(45, 3, __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_ERR(45, 3, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__129, __pyx_n_s_SFType, __pyx_n_s_SFType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(45, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/SF.pyx":4
  * 
@@ -257298,10 +278276,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     WINDOW = S_(PETSCSFWINDOW)
  * 
  */
-  __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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PETSCSFBASIC); if (unlikely(!__pyx_t_7)) __PYX_ERR(45, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_BASIC, __pyx_t_7) < 0) __PYX_ERR(45, 4, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SF.pyx":5
  * class SFType(object):
@@ -257310,10 +278288,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * # --------------------------------------------------------------------
  */
-  __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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PETSCSFWINDOW); if (unlikely(!__pyx_t_7)) __PYX_ERR(45, 5, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_WINDOW, __pyx_t_7) < 0) __PYX_ERR(45, 5, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/SF.pyx":3
  * # --------------------------------------------------------------------
@@ -257322,13 +278300,12 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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_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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_SFType, __pyx_tuple__129, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(45, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_SFType, __pyx_t_7) < 0) __PYX_ERR(45, 3, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/SF.pyx":11
  * cdef class SF(Object):
@@ -257337,10 +278314,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  *     def __cinit__(self):
  */
-  __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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_SFType); if (unlikely(!__pyx_t_1)) __PYX_ERR(45, 11, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_SF->tp_dict, __pyx_n_s_Type, __pyx_t_1) < 0) __PYX_ERR(45, 11, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_SF);
 
   /* "PETSc/SF.pyx":104
@@ -257359,15 +278336,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     CHACO    = S_(PETSCPARTITIONERCHACO)
  *     PARMETIS = S_(PETSCPARTITIONERPARMETIS)
  */
-  __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_t_1 = __Pyx_CalculateMetaclass(NULL, __pyx_tuple__130); if (unlikely(!__pyx_t_1)) __PYX_ERR(46, 3, __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_ERR(46, 3, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_4);
+  __pyx_t_3 = __Pyx_Py3MetaclassPrepare(__pyx_t_1, __pyx_tuple__130, __pyx_n_s_PartitionerType, __pyx_n_s_PartitionerType, (PyObject *) NULL, __pyx_n_s_petsc4py_PETSc, (PyObject *) NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(46, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_3);
 
   /* "PETSc/Partitioner.pyx":4
  * 
@@ -257376,10 +278348,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     PARMETIS = S_(PETSCPARTITIONERPARMETIS)
  *     SHELL    = S_(PETSCPARTITIONERSHELL)
  */
-  __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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PETSCPARTITIONERCHACO); if (unlikely(!__pyx_t_7)) __PYX_ERR(46, 4, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_CHACO, __pyx_t_7) < 0) __PYX_ERR(46, 4, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Partitioner.pyx":5
  * class PartitionerType(object):
@@ -257388,10 +278360,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     SHELL    = S_(PETSCPARTITIONERSHELL)
  * 
  */
-  __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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PETSCPARTITIONERPARMETIS); if (unlikely(!__pyx_t_7)) __PYX_ERR(46, 5, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_PARMETIS, __pyx_t_7) < 0) __PYX_ERR(46, 5, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Partitioner.pyx":6
  *     CHACO    = S_(PETSCPARTITIONERCHACO)
@@ -257400,10 +278372,10 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  * # --------------------------------------------------------------------
  */
-  __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;
+  __pyx_t_7 = __pyx_f_8petsc4py_5PETSc_S_(PETSCPARTITIONERSHELL); if (unlikely(!__pyx_t_7)) __PYX_ERR(46, 6, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyObject_SetItem(__pyx_t_3, __pyx_n_s_SHELL, __pyx_t_7) < 0) __PYX_ERR(46, 6, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
 
   /* "PETSc/Partitioner.pyx":3
  * # --------------------------------------------------------------------
@@ -257412,13 +278384,12 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  *     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_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_t_7 = __Pyx_Py3ClassCreate(__pyx_t_1, __pyx_n_s_PartitionerType, __pyx_tuple__130, __pyx_t_3, NULL, 0, 1); if (unlikely(!__pyx_t_7)) __PYX_ERR(46, 3, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_7);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_PartitionerType, __pyx_t_7) < 0) __PYX_ERR(46, 3, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
   __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /* "PETSc/Partitioner.pyx":12
  * cdef class Partitioner(Object):
@@ -257427,27 +278398,27 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  * 
  *     def __cinit__(self):
  */
-  __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;
+  __pyx_t_1 = __Pyx_GetModuleGlobalName(__pyx_n_s_PartitionerType); if (unlikely(!__pyx_t_1)) __PYX_ERR(46, 12, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem((PyObject *)__pyx_ptype_8petsc4py_5PETSc_Partitioner->tp_dict, __pyx_n_s_Type, __pyx_t_1) < 0) __PYX_ERR(46, 12, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
   PyType_Modified(__pyx_ptype_8petsc4py_5PETSc_Partitioner);
 
-  /* "PETSc/PETSc.pyx":190
+  /* "PETSc/PETSc.pyx":194
  *                   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_ERR(11, 190, __pyx_L1_error)
-  __Pyx_GOTREF(__pyx_t_3);
+  __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 194, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
   __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;
+  __Pyx_DECREF_SET(__pyx_v_8petsc4py_5PETSc_tracebacklist, __pyx_t_1);
+  __Pyx_GIVEREF(__pyx_t_1);
+  __pyx_t_1 = 0;
 
-  /* "PETSc/PETSc.pyx":270
+  /* "PETSc/PETSc.pyx":274
  *     int PetscPythonRegisterAll()
  * 
  * cdef int    PyPetsc_Argc = 0             # <<<<<<<<<<<<<<
@@ -257456,7 +278427,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  */
   __pyx_v_8petsc4py_5PETSc_PyPetsc_Argc = 0;
 
-  /* "PETSc/PETSc.pyx":271
+  /* "PETSc/PETSc.pyx":275
  * 
  * cdef int    PyPetsc_Argc = 0
  * cdef char** PyPetsc_Argv = NULL             # <<<<<<<<<<<<<<
@@ -257465,7 +278436,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  */
   __pyx_v_8petsc4py_5PETSc_PyPetsc_Argv = NULL;
 
-  /* "PETSc/PETSc.pyx":366
+  /* "PETSc/PETSc.pyx":370
  *     PetscClassId PETSC_PARTITIONER_CLASSID "PETSCPARTITIONER_CLASSID"
  * 
  * cdef bint registercalled = 0             # <<<<<<<<<<<<<<
@@ -257474,7 +278445,7 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  */
   __pyx_v_8petsc4py_5PETSc_registercalled = 0;
 
-  /* "PETSc/PETSc.pyx":368
+  /* "PETSc/PETSc.pyx":372
  * cdef bint registercalled = 0
  * 
  * cdef const char *citation = b"""\             # <<<<<<<<<<<<<<
@@ -257483,29 +278454,29 @@ PyMODINIT_FUNC PyInit_PETSc(void)
  */
   __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/PETSc.pyx":417
+  /* "PETSc/PETSc.pyx":421
  * # --------------------------------------------------------------------
  * 
  * 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_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;
+  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_8petsc4py_5PETSc_1_initialize, NULL, __pyx_n_s_petsc4py_PETSc); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 421, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_initialize, __pyx_t_1) < 0) __PYX_ERR(11, 421, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
-  /* "PETSc/PETSc.pyx":433
+  /* "PETSc/PETSc.pyx":437
  *     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_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;
+  __pyx_t_1 = PyCFunction_NewEx(&__pyx_mdef_8petsc4py_5PETSc_3_finalize, NULL, __pyx_n_s_petsc4py_PETSc); if (unlikely(!__pyx_t_1)) __PYX_ERR(11, 437, __pyx_L1_error)
+  __Pyx_GOTREF(__pyx_t_1);
+  if (PyDict_SetItem(__pyx_d, __pyx_n_s_finalize, __pyx_t_1) < 0) __PYX_ERR(11, 437, __pyx_L1_error)
+  __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
 
   /*--- Wrapped vars code ---*/
 
@@ -257518,10 +278489,9 @@ PyMODINIT_FUNC PyInit_PETSc(void)
   __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);
+      __Pyx_AddTraceback("init petsc4py.PETSc", 0, __pyx_lineno, __pyx_filename);
     }
     Py_DECREF(__pyx_m); __pyx_m = 0;
   } else if (!PyErr_Occurred()) {
@@ -257529,10 +278499,12 @@ PyMODINIT_FUNC PyInit_PETSc(void)
   }
   __pyx_L0:;
   __Pyx_RefNannyFinishContext();
-  #if PY_MAJOR_VERSION < 3
-  return;
-  #else
+  #if CYTHON_PEP489_MULTI_PHASE_INIT
+  return (__pyx_m != NULL) ? 0 : -1;
+  #elif PY_MAJOR_VERSION >= 3
   return __pyx_m;
+  #else
+  return;
   #endif
 }
 
@@ -257565,7 +278537,6 @@ static void __Pyx_CleanupGlobals(void) {
   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);
@@ -257587,30 +278558,85 @@ static void __Pyx_CleanupGlobals(void) {
   Py_CLEAR(__pyx_tuple__52);
   Py_CLEAR(__pyx_tuple__53);
   Py_CLEAR(__pyx_tuple__54);
-  Py_CLEAR(__pyx_slice__55);
+  Py_CLEAR(__pyx_tuple__55);
   Py_CLEAR(__pyx_tuple__56);
   Py_CLEAR(__pyx_tuple__57);
-  Py_CLEAR(__pyx_tuple__58);
+  Py_CLEAR(__pyx_slice__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__63);
+  Py_CLEAR(__pyx_tuple__64);
   Py_CLEAR(__pyx_tuple__65);
-  Py_CLEAR(__pyx_tuple__66);
+  Py_CLEAR(__pyx_slice__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__69);
+  Py_CLEAR(__pyx_slice__70);
+  Py_CLEAR(__pyx_tuple__71);
   Py_CLEAR(__pyx_tuple__72);
-  Py_CLEAR(__pyx_codeobj__73);
+  Py_CLEAR(__pyx_tuple__73);
   Py_CLEAR(__pyx_tuple__74);
-  Py_CLEAR(__pyx_codeobj__75);
-  Py_CLEAR(__pyx_tuple__76);
-  Py_CLEAR(__pyx_codeobj__77);
+  Py_CLEAR(__pyx_tuple__75);
+  Py_CLEAR(__pyx_codeobj__76);
+  Py_CLEAR(__pyx_tuple__77);
   Py_CLEAR(__pyx_codeobj__78);
+  Py_CLEAR(__pyx_tuple__79);
+  Py_CLEAR(__pyx_codeobj__80);
+  Py_CLEAR(__pyx_tuple__81);
+  Py_CLEAR(__pyx_codeobj__82);
+  Py_CLEAR(__pyx_tuple__83);
+  Py_CLEAR(__pyx_tuple__84);
+  Py_CLEAR(__pyx_tuple__85);
+  Py_CLEAR(__pyx_tuple__86);
+  Py_CLEAR(__pyx_tuple__87);
+  Py_CLEAR(__pyx_tuple__88);
+  Py_CLEAR(__pyx_tuple__89);
+  Py_CLEAR(__pyx_tuple__90);
+  Py_CLEAR(__pyx_tuple__91);
+  Py_CLEAR(__pyx_tuple__92);
+  Py_CLEAR(__pyx_tuple__93);
+  Py_CLEAR(__pyx_tuple__94);
+  Py_CLEAR(__pyx_tuple__95);
+  Py_CLEAR(__pyx_tuple__96);
+  Py_CLEAR(__pyx_tuple__97);
+  Py_CLEAR(__pyx_tuple__98);
+  Py_CLEAR(__pyx_tuple__99);
+  Py_CLEAR(__pyx_tuple__100);
+  Py_CLEAR(__pyx_tuple__101);
+  Py_CLEAR(__pyx_tuple__102);
+  Py_CLEAR(__pyx_tuple__103);
+  Py_CLEAR(__pyx_tuple__104);
+  Py_CLEAR(__pyx_tuple__105);
+  Py_CLEAR(__pyx_tuple__106);
+  Py_CLEAR(__pyx_tuple__107);
+  Py_CLEAR(__pyx_tuple__108);
+  Py_CLEAR(__pyx_tuple__109);
+  Py_CLEAR(__pyx_tuple__110);
+  Py_CLEAR(__pyx_tuple__111);
+  Py_CLEAR(__pyx_tuple__112);
+  Py_CLEAR(__pyx_tuple__113);
+  Py_CLEAR(__pyx_tuple__114);
+  Py_CLEAR(__pyx_tuple__115);
+  Py_CLEAR(__pyx_tuple__116);
+  Py_CLEAR(__pyx_tuple__117);
+  Py_CLEAR(__pyx_tuple__118);
+  Py_CLEAR(__pyx_tuple__119);
+  Py_CLEAR(__pyx_tuple__120);
+  Py_CLEAR(__pyx_tuple__121);
+  Py_CLEAR(__pyx_tuple__122);
+  Py_CLEAR(__pyx_tuple__123);
+  Py_CLEAR(__pyx_tuple__124);
+  Py_CLEAR(__pyx_tuple__125);
+  Py_CLEAR(__pyx_tuple__126);
+  Py_CLEAR(__pyx_tuple__127);
+  Py_CLEAR(__pyx_tuple__128);
+  Py_CLEAR(__pyx_tuple__129);
+  Py_CLEAR(__pyx_tuple__130);
+  Py_CLEAR(__pyx_tuple__131);
+  Py_CLEAR(__pyx_codeobj__132);
+  Py_CLEAR(__pyx_codeobj__133);
   /* CodeObjectCache.cleanup */
   if (__pyx_code_cache.entries) {
       __Pyx_CodeObjectCacheEntry* entries = __pyx_code_cache.entries;
@@ -257724,6 +278750,149 @@ static CYTHON_INLINE PyObject* __Pyx_decode_c_bytes(
     }
 }
 
+/* PyCFunctionFastCall */
+#if CYTHON_FAST_PYCCALL
+static CYTHON_INLINE PyObject * __Pyx_PyCFunction_FastCall(PyObject *func_obj, PyObject **args, Py_ssize_t nargs) {
+    PyCFunctionObject *func = (PyCFunctionObject*)func_obj;
+    PyCFunction meth = PyCFunction_GET_FUNCTION(func);
+    PyObject *self = PyCFunction_GET_SELF(func);
+    int flags = PyCFunction_GET_FLAGS(func);
+    assert(PyCFunction_Check(func));
+    assert(METH_FASTCALL == (flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST | METH_KEYWORDS)));
+    assert(nargs >= 0);
+    assert(nargs == 0 || args != NULL);
+    /* _PyCFunction_FastCallDict() must not be called with an exception set,
+       because it may clear it (directly or indirectly) and so the
+       caller loses its exception */
+    assert(!PyErr_Occurred());
+    if ((PY_VERSION_HEX < 0x030700A0) || unlikely(flags & METH_KEYWORDS)) {
+        return (*((__Pyx_PyCFunctionFastWithKeywords)meth)) (self, args, nargs, NULL);
+    } else {
+        return (*((__Pyx_PyCFunctionFast)meth)) (self, args, nargs);
+    }
+}
+#endif
+
+/* PyFunctionFastCall */
+#if CYTHON_FAST_PYCALL
+#include "frameobject.h"
+static PyObject* __Pyx_PyFunction_FastCallNoKw(PyCodeObject *co, PyObject **args, Py_ssize_t na,
+                                               PyObject *globals) {
+    PyFrameObject *f;
+    PyThreadState *tstate = __Pyx_PyThreadState_Current;
+    PyObject **fastlocals;
+    Py_ssize_t i;
+    PyObject *result;
+    assert(globals != NULL);
+    /* XXX Perhaps we should create a specialized
+       PyFrame_New() that doesn't take locals, but does
+       take builtins without sanity checking them.
+       */
+    assert(tstate != NULL);
+    f = PyFrame_New(tstate, co, globals, NULL);
+    if (f == NULL) {
+        return NULL;
+    }
+    fastlocals = f->f_localsplus;
+    for (i = 0; i < na; i++) {
+        Py_INCREF(*args);
+        fastlocals[i] = *args++;
+    }
+    result = PyEval_EvalFrameEx(f,0);
+    ++tstate->recursion_depth;
+    Py_DECREF(f);
+    --tstate->recursion_depth;
+    return result;
+}
+#if 1 || PY_VERSION_HEX < 0x030600B1
+static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, int nargs, PyObject *kwargs) {
+    PyCodeObject *co = (PyCodeObject *)PyFunction_GET_CODE(func);
+    PyObject *globals = PyFunction_GET_GLOBALS(func);
+    PyObject *argdefs = PyFunction_GET_DEFAULTS(func);
+    PyObject *closure;
+#if PY_MAJOR_VERSION >= 3
+    PyObject *kwdefs;
+#endif
+    PyObject *kwtuple, **k;
+    PyObject **d;
+    Py_ssize_t nd;
+    Py_ssize_t nk;
+    PyObject *result;
+    assert(kwargs == NULL || PyDict_Check(kwargs));
+    nk = kwargs ? PyDict_Size(kwargs) : 0;
+    if (Py_EnterRecursiveCall((char*)" while calling a Python object")) {
+        return NULL;
+    }
+    if (
+#if PY_MAJOR_VERSION >= 3
+            co->co_kwonlyargcount == 0 &&
+#endif
+            likely(kwargs == NULL || nk == 0) &&
+            co->co_flags == (CO_OPTIMIZED | CO_NEWLOCALS | CO_NOFREE)) {
+        if (argdefs == NULL && co->co_argcount == nargs) {
+            result = __Pyx_PyFunction_FastCallNoKw(co, args, nargs, globals);
+            goto done;
+        }
+        else if (nargs == 0 && argdefs != NULL
+                 && co->co_argcount == Py_SIZE(argdefs)) {
+            /* function called with no arguments, but all parameters have
+               a default value: use default values as arguments .*/
+            args = &PyTuple_GET_ITEM(argdefs, 0);
+            result =__Pyx_PyFunction_FastCallNoKw(co, args, Py_SIZE(argdefs), globals);
+            goto done;
+        }
+    }
+    if (kwargs != NULL) {
+        Py_ssize_t pos, i;
+        kwtuple = PyTuple_New(2 * nk);
+        if (kwtuple == NULL) {
+            result = NULL;
+            goto done;
+        }
+        k = &PyTuple_GET_ITEM(kwtuple, 0);
+        pos = i = 0;
+        while (PyDict_Next(kwargs, &pos, &k[i], &k[i+1])) {
+            Py_INCREF(k[i]);
+            Py_INCREF(k[i+1]);
+            i += 2;
+        }
+        nk = i / 2;
+    }
+    else {
+        kwtuple = NULL;
+        k = NULL;
+    }
+    closure = PyFunction_GET_CLOSURE(func);
+#if PY_MAJOR_VERSION >= 3
+    kwdefs = PyFunction_GET_KW_DEFAULTS(func);
+#endif
+    if (argdefs != NULL) {
+        d = &PyTuple_GET_ITEM(argdefs, 0);
+        nd = Py_SIZE(argdefs);
+    }
+    else {
+        d = NULL;
+        nd = 0;
+    }
+#if PY_MAJOR_VERSION >= 3
+    result = PyEval_EvalCodeEx((PyObject*)co, globals, (PyObject *)NULL,
+                               args, nargs,
+                               k, (int)nk,
+                               d, (int)nd, kwdefs, closure);
+#else
+    result = PyEval_EvalCodeEx(co, globals, (PyObject *)NULL,
+                               args, nargs,
+                               k, (int)nk,
+                               d, (int)nd, closure);
+#endif
+    Py_XDECREF(kwtuple);
+done:
+    Py_LeaveRecursiveCall();
+    return result;
+}
+#endif
+#endif
+
 /* PyObjectCall */
 #if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw) {
@@ -257777,13 +278946,18 @@ static PyObject* __Pyx__PyObject_CallOneArg(PyObject *func, PyObject *arg) {
     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))) {
+#if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(func)) {
+        return __Pyx_PyFunction_FastCall(func, &arg, 1);
+    }
 #endif
+    if (likely(PyCFunction_Check(func))) {
         if (likely(PyCFunction_GET_FLAGS(func) & METH_O)) {
             return __Pyx_PyObject_CallMethO(func, arg);
+#if CYTHON_FAST_PYCCALL
+        } else if (PyCFunction_GET_FLAGS(func) & METH_FASTCALL) {
+            return __Pyx_PyCFunction_FastCall(func, &arg, 1);
+#endif
         }
     }
     return __Pyx__PyObject_CallOneArg(func, arg);
@@ -257800,10 +278974,15 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObjec
 #endif
 
 /* PyObjectCallNoArg */
-  #if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_COMPILING_IN_CPYTHON
 static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
+#if CYTHON_FAST_PYCALL
+    if (PyFunction_Check(func)) {
+        return __Pyx_PyFunction_FastCall(func, NULL, 0);
+    }
+#endif
 #ifdef __Pyx_CyFunction_USED
-    if (likely(PyCFunction_Check(func) || PyObject_TypeCheck(func, __pyx_CyFunctionType))) {
+    if (likely(PyCFunction_Check(func) || __Pyx_TypeCheck(func, __pyx_CyFunctionType))) {
 #else
     if (likely(PyCFunction_Check(func))) {
 #endif
@@ -257816,7 +278995,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func) {
 #endif
 
 /* PyErrFetchRestore */
-    #if CYTHON_COMPILING_IN_CPYTHON
+  #if CYTHON_FAST_THREAD_STATE
 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;
@@ -257840,7 +279019,7 @@ static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject
 #endif
 
 /* WriteUnraisableException */
-    static void __Pyx_WriteUnraisable(const char *name, CYTHON_UNUSED int clineno,
+  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;
@@ -257882,7 +279061,7 @@ static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject
 }
 
 /* BytesEquals */
-    static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals) {
+  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
@@ -257900,7 +279079,16 @@ static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject
         } else if (length == 1) {
             return (equals == Py_EQ);
         } else {
-            int result = memcmp(ps1, ps2, (size_t)length);
+            int result;
+#if CYTHON_USE_UNICODE_INTERNALS
+            Py_hash_t hash1, hash2;
+            hash1 = ((PyBytesObject*)s1)->ob_shash;
+            hash2 = ((PyBytesObject*)s2)->ob_shash;
+            if (hash1 != hash2 && hash1 != -1 && hash2 != -1) {
+                return (equals == Py_NE);
+            }
+#endif
+            result = memcmp(ps1, ps2, (size_t)length);
             return (equals == Py_EQ) ? (result == 0) : (result != 0);
         }
     } else if ((s1 == Py_None) & PyBytes_CheckExact(s2)) {
@@ -257920,7 +279108,7 @@ static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject
 }
 
 /* UnicodeEquals */
-    static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals) {
+  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
@@ -257960,6 +279148,21 @@ static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject
         if (length != __Pyx_PyUnicode_GET_LENGTH(s2)) {
             goto return_ne;
         }
+#if CYTHON_USE_UNICODE_INTERNALS
+        {
+            Py_hash_t hash1, hash2;
+        #if CYTHON_PEP393_ENABLED
+            hash1 = ((PyASCIIObject*)s1)->hash;
+            hash2 = ((PyASCIIObject*)s2)->hash;
+        #else
+            hash1 = ((PyUnicodeObject*)s1)->hash;
+            hash2 = ((PyUnicodeObject*)s2)->hash;
+        #endif
+            if (hash1 != hash2 && hash1 != -1 && hash2 != -1) {
+                goto return_ne;
+            }
+        }
+#endif
         kind = __Pyx_PyUnicode_KIND(s1);
         if (kind != __Pyx_PyUnicode_KIND(s2)) {
             goto return_ne;
@@ -258004,7 +279207,7 @@ return_ne:
 }
 
 /* RaiseException */
-    #if PY_MAJOR_VERSION < 3
+  #if PY_MAJOR_VERSION < 3
 static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb,
                         CYTHON_UNUSED PyObject *cause) {
     __Pyx_PyThreadState_declare
@@ -258119,11 +279322,7 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
             "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;
@@ -258151,7 +279350,7 @@ static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject
         PyErr_Restore(tmp_type, tmp_value, tb);
         Py_XDECREF(tmp_tb);
 #else
-        PyThreadState *tstate = PyThreadState_GET();
+        PyThreadState *tstate = __Pyx_PyThreadState_Current;
         PyObject* tmp_tb = tstate->curexc_traceback;
         if (tb != tmp_tb) {
             Py_INCREF(tb);
@@ -258167,13 +279366,13 @@ bad:
 #endif
 
 /* GetException */
-      #if CYTHON_COMPILING_IN_CPYTHON
+  #if CYTHON_FAST_THREAD_STATE
 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
+#if CYTHON_FAST_THREAD_STATE
     PyObject *tmp_type, *tmp_value, *tmp_tb;
     local_type = tstate->curexc_type;
     local_value = tstate->curexc_value;
@@ -258185,7 +279384,7 @@ static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb)
     PyErr_Fetch(&local_type, &local_value, &local_tb);
 #endif
     PyErr_NormalizeException(&local_type, &local_value, &local_tb);
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_FAST_THREAD_STATE
     if (unlikely(tstate->curexc_type))
 #else
     if (unlikely(PyErr_Occurred()))
@@ -258203,7 +279402,7 @@ static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb)
     *type = local_type;
     *value = local_value;
     *tb = local_tb;
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_FAST_THREAD_STATE
     tmp_type = tstate->exc_type;
     tmp_value = tstate->exc_value;
     tmp_tb = tstate->exc_traceback;
@@ -258228,7 +279427,7 @@ bad:
 }
 
 /* SwapException */
-        #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_FAST_THREAD_STATE
 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;
@@ -258253,7 +279452,7 @@ static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value,
 #endif
 
 /* SaveResetException */
-        #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_FAST_THREAD_STATE
 static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb) {
     *type = tstate->exc_type;
     *value = tstate->exc_value;
@@ -258277,24 +279476,35 @@ static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject
 #endif
 
 /* 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
+    static PyObject* __Pyx__PyObject_CallMethod1(PyObject* method, PyObject* arg) {
+    PyObject *result = NULL;
+#if CYTHON_UNPACK_METHODS
     if (likely(PyMethod_Check(method))) {
         PyObject *self = PyMethod_GET_SELF(method);
         if (likely(self)) {
             PyObject *args;
             PyObject *function = PyMethod_GET_FUNCTION(method);
+            #if CYTHON_FAST_PYCALL
+            if (PyFunction_Check(function)) {
+                PyObject *args[2] = {self, arg};
+                result = __Pyx_PyFunction_FastCall(function, args, 2);
+                goto done;
+            }
+            #endif
+            #if CYTHON_FAST_PYCCALL
+            if (__Pyx_PyFastCFunction_Check(function)) {
+                PyObject *args[2] = {self, arg};
+                result = __Pyx_PyCFunction_FastCall(function, args, 2);
+                goto done;
+            }
+            #endif
             args = PyTuple_New(2);
-            if (unlikely(!args)) goto bad;
+            if (unlikely(!args)) goto done;
             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);
@@ -258303,13 +279513,22 @@ static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject
     }
 #endif
     result = __Pyx_PyObject_CallOneArg(method, arg);
-bad:
+    goto done;
+done:
+    return result;
+}
+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 done;
+    result = __Pyx__PyObject_CallMethod1(method, arg);
+done:
     Py_XDECREF(method);
     return result;
 }
 
 /* pop_index */
-        static PyObject* __Pyx__PyObject_PopNewIndex(PyObject* L, PyObject* py_ix) {
+    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);
@@ -258319,7 +279538,7 @@ bad:
 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
+#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
 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))) {
@@ -258344,11 +279563,11 @@ static PyObject* __Pyx__PyList_PopIndex(PyObject* L, PyObject* py_ix, Py_ssize_t
 #endif
 
 /* SliceObject */
-        static CYTHON_INLINE PyObject* __Pyx_PyObject_GetSlice(PyObject* obj,
+    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
+#if CYTHON_USE_TYPE_SLOTS
     PyMappingMethods* mp;
 #if PY_MAJOR_VERSION < 3
     PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence;
@@ -258424,7 +279643,7 @@ static PyObject* __Pyx__PyList_PopIndex(PyObject* L, PyObject* py_ix, Py_ssize_t
             Py_XDECREF(owned_stop);
             if (unlikely(!py_slice)) goto bad;
         }
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_USE_TYPE_SLOTS
         result = mp->mp_subscript(obj, py_slice);
 #else
         result = PyObject_GetItem(obj, py_slice);
@@ -258441,7 +279660,7 @@ bad:
 }
 
 /* GetItemInt */
-        static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
+    static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j) {
     PyObject *r;
     if (!j) return NULL;
     r = PyObject_GetItem(o, j);
@@ -258451,10 +279670,13 @@ bad:
 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);
+#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    Py_ssize_t wrapped_i = i;
+    if (wraparound & unlikely(i < 0)) {
+        wrapped_i += PyList_GET_SIZE(o);
+    }
+    if ((!boundscheck) || likely((0 <= wrapped_i) & (wrapped_i < PyList_GET_SIZE(o)))) {
+        PyObject *r = PyList_GET_ITEM(o, wrapped_i);
         Py_INCREF(r);
         return r;
     }
@@ -258466,10 +279688,13 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_
 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);
+#if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+    Py_ssize_t wrapped_i = i;
+    if (wraparound & unlikely(i < 0)) {
+        wrapped_i += PyTuple_GET_SIZE(o);
+    }
+    if ((!boundscheck) || likely((0 <= wrapped_i) & (wrapped_i < PyTuple_GET_SIZE(o)))) {
+        PyObject *r = PyTuple_GET_ITEM(o, wrapped_i);
         Py_INCREF(r);
         return r;
     }
@@ -258481,7 +279706,7 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize
 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 CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS
     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))))) {
@@ -258522,13 +279747,13 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
 }
 
 /* Import */
-        static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level) {
+    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
+    #if PY_MAJOR_VERSION < 3
     PyObject *py_import;
     py_import = __Pyx_PyObject_GetAttrStr(__pyx_b, __pyx_n_s_import);
     if (!py_import)
@@ -258552,17 +279777,8 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
         #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;
@@ -258573,7 +279789,7 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
         }
         #endif
         if (!module) {
-            #if PY_VERSION_HEX < 0x03030000
+            #if PY_MAJOR_VERSION < 3
             PyObject *py_level = PyInt_FromLong(level);
             if (!py_level)
                 goto bad;
@@ -258587,7 +279803,7 @@ static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
         }
     }
 bad:
-    #if PY_VERSION_HEX < 0x03030000
+    #if PY_MAJOR_VERSION < 3
     Py_XDECREF(py_import);
     #endif
     Py_XDECREF(empty_list);
@@ -258596,7 +279812,7 @@ bad:
 }
 
 /* ImportFrom */
-        static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name) {
+    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,
@@ -258610,12 +279826,12 @@ bad:
 }
 
 /* ExtTypeTest */
-        static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type) {
+    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)))
+    if (likely(__Pyx_TypeCheck(obj, type)))
         return 1;
     PyErr_Format(PyExc_TypeError, "Cannot convert %.200s to %.200s",
                  Py_TYPE(obj)->tp_name, type->tp_name);
@@ -258623,25 +279839,25 @@ bad:
 }
 
 /* RaiseTooManyValuesToUnpack */
-        static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected) {
+    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) {
+    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();
+    static CYTHON_INLINE int __Pyx_IterFinish(void) {
+#if CYTHON_FAST_THREAD_STATE
+    PyThreadState *tstate = __Pyx_PyThreadState_Current;
     PyObject* exc_type = tstate->curexc_type;
     if (unlikely(exc_type)) {
-        if (likely(exc_type == PyExc_StopIteration) || PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration)) {
+        if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) {
             PyObject *exc_value, *exc_tb;
             exc_value = tstate->curexc_value;
             exc_tb = tstate->curexc_traceback;
@@ -258671,7 +279887,7 @@ bad:
 }
 
 /* UnpackItemEndCheck */
-        static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
+    static int __Pyx_IternextUnpackEndCheck(PyObject *retval, Py_ssize_t expected) {
     if (unlikely(retval)) {
         Py_DECREF(retval);
         __Pyx_RaiseTooManyValuesError(expected);
@@ -258683,17 +279899,32 @@ bad:
 }
 
 /* PyErrExceptionMatches */
-        #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_FAST_THREAD_STATE
+static int __Pyx_PyErr_ExceptionMatchesTuple(PyObject *exc_type, PyObject *tuple) {
+    Py_ssize_t i, n;
+    n = PyTuple_GET_SIZE(tuple);
+#if PY_MAJOR_VERSION >= 3
+    for (i=0; i<n; i++) {
+        if (exc_type == PyTuple_GET_ITEM(tuple, i)) return 1;
+    }
+#endif
+    for (i=0; i<n; i++) {
+        if (__Pyx_PyErr_GivenExceptionMatches(exc_type, PyTuple_GET_ITEM(tuple, i))) return 1;
+    }
+    return 0;
+}
 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);
+    if (unlikely(PyTuple_Check(err)))
+        return __Pyx_PyErr_ExceptionMatchesTuple(exc_type, err);
+    return __Pyx_PyErr_GivenExceptionMatches(exc_type, err);
 }
 #endif
 
 /* RaiseDoubleKeywords */
-        static void __Pyx_RaiseDoubleKeywordsError(
+    static void __Pyx_RaiseDoubleKeywordsError(
     const char* func_name,
     PyObject* kw_name)
 {
@@ -258707,7 +279938,7 @@ static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tsta
 }
 
 /* ParseKeywords */
-        static int __Pyx_ParseOptionalKeywords(
+    static int __Pyx_ParseOptionalKeywords(
     PyObject *kwds,
     PyObject **argnames[],
     PyObject *kwds2,
@@ -258809,7 +280040,7 @@ bad:
 }
 
 /* RaiseArgTupleInvalid */
-        static void __Pyx_RaiseArgtupleInvalid(
+    static void __Pyx_RaiseArgtupleInvalid(
     const char* func_name,
     int exact,
     Py_ssize_t num_min,
@@ -258835,34 +280066,28 @@ bad:
 }
 
 /* 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)
+    static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, 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;
+        if ((type == &PyBaseString_Type) && likely(__Pyx_PyBaseString_CheckExact(obj))) return 1;
         #endif
     }
     else {
-        if (likely(PyObject_TypeCheck(obj, type))) return 1;
+        if (likely(__Pyx_TypeCheck(obj, type))) return 1;
     }
-    __Pyx_RaiseArgumentTypeInvalid(name, obj, type);
+    PyErr_Format(PyExc_TypeError,
+        "Argument '%.200s' has incorrect type (expected %.200s, got %.200s)",
+        name, type->tp_name, Py_TYPE(obj)->tp_name);
     return 0;
 }
 
 /* KeywordStringCheck */
-        static CYTHON_INLINE int __Pyx_CheckKeywordStrings(
+    static int __Pyx_CheckKeywordStrings(
     PyObject *kwdict,
     const char* function_name,
     int kw_allowed)
@@ -258876,7 +280101,7 @@ static CYTHON_INLINE int __Pyx_ArgTypeTest(PyObject *obj, PyTypeObject *type, in
 #else
     while (PyDict_Next(kwdict, &pos, &key, 0)) {
         #if PY_MAJOR_VERSION < 3
-        if (unlikely(!PyString_CheckExact(key)) && unlikely(!PyString_Check(key)))
+        if (unlikely(!PyString_Check(key)))
         #endif
             if (unlikely(!PyUnicode_Check(key)))
                 goto invalid_keyword_type;
@@ -258902,7 +280127,7 @@ invalid_keyword:
 }
 
 /* UnpackUnboundCMethod */
-        static int __Pyx_TryUnpackUnboundCMethod(__Pyx_CachedCFunction* target) {
+    static int __Pyx_TryUnpackUnboundCMethod(__Pyx_CachedCFunction* target) {
     PyObject *method;
     method = __Pyx_PyObject_GetAttrStr(target->type, *target->method_name);
     if (unlikely(!method))
@@ -258910,22 +280135,22 @@ invalid_keyword:
     target->method = method;
 #if CYTHON_COMPILING_IN_CPYTHON
     #if PY_MAJOR_VERSION >= 3
-    if (likely(PyObject_TypeCheck(method, &PyMethodDescr_Type)))
+    if (likely(__Pyx_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);
+        target->flag = descr->d_method->ml_flags & ~(METH_CLASS | METH_STATIC | METH_COEXIST);
     }
 #endif
     return 0;
 }
 
 /* CallUnboundCMethod0 */
-        static PyObject* __Pyx__CallUnboundCMethod0(__Pyx_CachedCFunction* cfunc, PyObject* self) {
+    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
+#if CYTHON_ASSUME_SAFE_MACROS
     args = PyTuple_New(1);
     if (unlikely(!args)) goto bad;
     Py_INCREF(self);
@@ -258941,7 +280166,7 @@ bad:
 }
 
 /* py_dict_keys */
-        static CYTHON_INLINE PyObject* __Pyx_PyDict_Keys(PyObject* d) {
+    static CYTHON_INLINE PyObject* __Pyx_PyDict_Keys(PyObject* d) {
     if (PY_MAJOR_VERSION >= 3)
         return __Pyx_CallUnboundCMethod0(&__pyx_umethod_PyDict_Type_keys, d);
     else
@@ -258949,7 +280174,7 @@ bad:
 }
 
 /* PyIntBinop */
-        #if CYTHON_COMPILING_IN_CPYTHON
+    #if !CYTHON_COMPILING_IN_PYPY
 static PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED long intval, CYTHON_UNUSED int inplace) {
     if (op1 == op2) {
         Py_RETURN_TRUE;
@@ -258965,7 +280190,7 @@ static PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED
         }
     }
     #endif
-    #if CYTHON_USE_PYLONG_INTERNALS && PY_MAJOR_VERSION >= 3
+    #if CYTHON_USE_PYLONG_INTERNALS
     if (likely(PyLong_CheckExact(op1))) {
         const long b = intval;
         long a;
@@ -259034,7 +280259,7 @@ static PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED
 #endif
 
 /* SetItemInt */
-        static CYTHON_INLINE int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v) {
+    static int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v) {
     int r;
     if (!j) return -1;
     r = PyObject_SetItem(o, j, v);
@@ -259043,7 +280268,7 @@ static PyObject* __Pyx_PyInt_EqObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED
 }
 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 CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS && CYTHON_USE_TYPE_SLOTS
     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)))) {
@@ -259082,7 +280307,7 @@ static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObje
 }
 
 /* PyIntBinop */
-          #if CYTHON_COMPILING_IN_CPYTHON
+      #if !CYTHON_COMPILING_IN_PYPY
 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))) {
@@ -259095,12 +280320,14 @@ static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED
             return PyLong_Type.tp_as_number->nb_add(op1, op2);
     }
     #endif
-    #if CYTHON_USE_PYLONG_INTERNALS && PY_MAJOR_VERSION >= 3
+    #if CYTHON_USE_PYLONG_INTERNALS
     if (likely(PyLong_CheckExact(op1))) {
         const long b = intval;
         long a, x;
+#ifdef HAVE_LONG_LONG
         const PY_LONG_LONG llb = intval;
         PY_LONG_LONG lla, llx;
+#endif
         const digit* digits = ((PyLongObject*)op1)->ob_digit;
         const Py_ssize_t size = Py_SIZE(op1);
         if (likely(__Pyx_sst_abs(size) <= 1)) {
@@ -259112,58 +280339,74 @@ static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED
                     if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
                         a = -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                         break;
+#ifdef HAVE_LONG_LONG
                     } 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;
+#endif
                     }
                 case 2:
                     if (8 * sizeof(long) - 1 > 2 * PyLong_SHIFT) {
                         a = (long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0]));
                         break;
+#ifdef HAVE_LONG_LONG
                     } 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;
+#endif
                     }
                 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;
+#ifdef HAVE_LONG_LONG
                     } 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;
+#endif
                     }
                 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;
+#ifdef HAVE_LONG_LONG
                     } 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;
+#endif
                     }
                 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;
+#ifdef HAVE_LONG_LONG
                     } 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;
+#endif
                     }
                 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;
+#ifdef HAVE_LONG_LONG
                     } 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;
+#endif
                     }
                 default: return PyLong_Type.tp_as_number->nb_add(op1, op2);
             }
         }
                 x = a + b;
             return PyLong_FromLong(x);
+#ifdef HAVE_LONG_LONG
         long_long:
                 llx = lla + llb;
             return PyLong_FromLongLong(llx);
+#endif
+        
+        
     }
     #endif
     if (PyFloat_CheckExact(op1)) {
@@ -259180,14 +280423,14 @@ static PyObject* __Pyx_PyInt_AddObjC(PyObject *op1, PyObject *op2, CYTHON_UNUSED
 #endif
 
 /* StringJoin */
-          #if !CYTHON_COMPILING_IN_CPYTHON
+      #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
 
 /* append */
-          static CYTHON_INLINE int __Pyx_PyObject_Append(PyObject* L, PyObject* x) {
+      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 {
@@ -259200,7 +280443,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyBytes_Join(PyObject* sep, PyObject* value
 }
 
 /* dict_getitem_default */
-          static PyObject* __Pyx_PyDict_GetItemDefault(PyObject* d, PyObject* key, PyObject* default_value) {
+      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);
@@ -259228,11 +280471,11 @@ static CYTHON_INLINE PyObject* __Pyx_PyBytes_Join(PyObject* sep, PyObject* value
 }
 
 /* PyObjectCallMethod0 */
-          static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name) {
+      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 CYTHON_UNPACK_METHODS
     if (likely(PyMethod_Check(method))) {
         PyObject *self = PyMethod_GET_SELF(method);
         if (likely(self)) {
@@ -259250,15 +280493,13 @@ bad:
 }
 
 /* pop */
-          static CYTHON_INLINE PyObject* __Pyx__PyObject_Pop(PyObject* L) {
-#if CYTHON_COMPILING_IN_CPYTHON
+      static CYTHON_INLINE PyObject* __Pyx__PyObject_Pop(PyObject* L) {
     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
+#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
 static CYTHON_INLINE PyObject* __Pyx_PyList_Pop(PyObject* L) {
     if (likely(PyList_GET_SIZE(L) > (((PyListObject*)L)->allocated >> 1))) {
         Py_SIZE(L) -= 1;
@@ -259269,11 +280510,11 @@ static CYTHON_INLINE PyObject* __Pyx_PyList_Pop(PyObject* L) {
 #endif
 
 /* SliceObject */
-          static CYTHON_INLINE int __Pyx_PyObject_SetSlice(PyObject* obj, PyObject* value,
+      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
+#if CYTHON_USE_TYPE_SLOTS
     PyMappingMethods* mp;
 #if PY_MAJOR_VERSION < 3
     PySequenceMethods* ms = Py_TYPE(obj)->tp_as_sequence;
@@ -259349,7 +280590,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyList_Pop(PyObject* L) {
             Py_XDECREF(owned_stop);
             if (unlikely(!py_slice)) goto bad;
         }
-#if CYTHON_COMPILING_IN_CPYTHON
+#if CYTHON_USE_TYPE_SLOTS
         result = mp->mp_ass_subscript(obj, py_slice, value);
 #else
         result = value ? PyObject_SetItem(obj, py_slice, value) : PyObject_DelItem(obj, py_slice);
@@ -259367,7 +280608,7 @@ bad:
 }
 
 /* SliceTupleAndList */
-          #if CYTHON_COMPILING_IN_CPYTHON
+      #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) {
@@ -259426,9 +280667,9 @@ static CYTHON_INLINE PyObject* __Pyx_PyTuple_GetSlice(
 #endif
 
 /* GetModuleGlobalName */
-          static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) {
+      static CYTHON_INLINE PyObject *__Pyx_GetModuleGlobalName(PyObject *name) {
     PyObject *result;
-#if CYTHON_COMPILING_IN_CPYTHON
+#if !CYTHON_AVOID_BORROWED_REFS
     result = PyDict_GetItem(__pyx_d, name);
     if (likely(result)) {
         Py_INCREF(result);
@@ -259444,7 +280685,7 @@ static CYTHON_INLINE PyObject* __Pyx_PyTuple_GetSlice(
 }
 
 /* SetVTable */
-            static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
+        static int __Pyx_SetVtable(PyObject *dict, void *vtable) {
 #if PY_VERSION_HEX >= 0x02070000
     PyObject *ob = PyCapsule_New(vtable, 0, 0);
 #else
@@ -259462,7 +280703,7 @@ bad:
 }
 
 /* CalculateMetaclass */
-            static PyObject *__Pyx_CalculateMetaclass(PyTypeObject *metaclass, PyObject *bases) {
+        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;
@@ -259501,7 +280742,7 @@ bad:
 }
 
 /* Py3ClassCreate */
-            static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name,
+        static PyObject *__Pyx_Py3MetaclassPrepare(PyObject *metaclass, PyObject *bases, PyObject *name,
                                            PyObject *qualname, PyObject *mkw, PyObject *modname, PyObject *doc) {
     PyObject *ns;
     if (metaclass) {
@@ -259568,7 +280809,7 @@ static PyObject *__Pyx_Py3ClassCreate(PyObject *metaclass, PyObject *name, PyObj
 }
 
 /* FetchCommonType */
-            static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) {
+        static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type) {
     PyObject* fake_module;
     PyTypeObject* cached_type = NULL;
     fake_module = PyImport_AddModule((char*) "_cython_" CYTHON_ABI);
@@ -259607,7 +280848,7 @@ bad:
 }
 
 /* CythonFunction */
-            static PyObject *
+        static PyObject *
 __Pyx_CyFunction_get_doc(__pyx_CyFunctionObject *op, CYTHON_UNUSED void *closure)
 {
     if (unlikely(op->func_doc == NULL)) {
@@ -259764,7 +281005,7 @@ __Pyx_CyFunction_init_defaults(__pyx_CyFunctionObject *op) {
     PyObject *res = op->defaults_getter((PyObject *) op);
     if (unlikely(!res))
         return -1;
-    #if CYTHON_COMPILING_IN_CPYTHON
+    #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
     op->defaults_tuple = PyTuple_GET_ITEM(res, 0);
     Py_INCREF(op->defaults_tuple);
     op->defaults_kwdict = PyTuple_GET_ITEM(res, 1);
@@ -259967,14 +281208,18 @@ __Pyx_CyFunction_clear(__pyx_CyFunctionObject *m)
     }
     return 0;
 }
-static void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m)
+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 void __Pyx_CyFunction_dealloc(__pyx_CyFunctionObject *m)
+{
+    PyObject_GC_UnTrack(m);
+    __Pyx__CyFunction_dealloc(m);
+}
 static int __Pyx_CyFunction_traverse(__pyx_CyFunctionObject *m, visitproc visit, void *arg)
 {
     Py_VISIT(m->func_closure);
@@ -260023,11 +281268,9 @@ __Pyx_CyFunction_repr(__pyx_CyFunctionObject *op)
                                PyString_AsString(op->func_qualname), (void *)op);
 #endif
 }
-#if CYTHON_COMPILING_IN_PYPY
-static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) {
+static PyObject * __Pyx_CyFunction_CallMethod(PyObject *func, PyObject *self, 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:
@@ -260051,10 +281294,16 @@ static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject
         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;
+                PyObject *result, *arg0;
+                #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+                arg0 = PyTuple_GET_ITEM(arg, 0);
+                #else
+                arg0 = PySequence_ITEM(arg, 0); if (unlikely(!arg0)) return NULL;
+                #endif
                 result = (*meth)(self, arg0);
+                #if !(CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS)
                 Py_DECREF(arg0);
+                #endif
                 return result;
             }
             PyErr_Format(PyExc_TypeError,
@@ -260073,11 +281322,32 @@ static PyObject * __Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject
                  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);
+static CYTHON_INLINE PyObject *__Pyx_CyFunction_Call(PyObject *func, PyObject *arg, PyObject *kw) {
+    return __Pyx_CyFunction_CallMethod(func, ((PyCFunctionObject*)func)->m_self, arg, kw);
+}
+static PyObject *__Pyx_CyFunction_CallAsMethod(PyObject *func, PyObject *args, PyObject *kw) {
+    PyObject *result;
+    __pyx_CyFunctionObject *cyfunc = (__pyx_CyFunctionObject *) func;
+    if ((cyfunc->flags & __Pyx_CYFUNCTION_CCLASS) && !(cyfunc->flags & __Pyx_CYFUNCTION_STATICMETHOD)) {
+        Py_ssize_t argc;
+        PyObject *new_args;
+        PyObject *self;
+        argc = PyTuple_GET_SIZE(args);
+        new_args = PyTuple_GetSlice(args, 1, argc);
+        if (unlikely(!new_args))
+            return NULL;
+        self = PyTuple_GetItem(args, 0);
+        if (unlikely(!self)) {
+            Py_DECREF(new_args);
+            return NULL;
+        }
+        result = __Pyx_CyFunction_CallMethod(func, self, new_args, kw);
+        Py_DECREF(new_args);
+    } else {
+        result = __Pyx_CyFunction_Call(func, args, kw);
+    }
+    return result;
 }
-#endif
 static PyTypeObject __pyx_CyFunctionType_type = {
     PyVarObject_HEAD_INIT(0, 0)
     "cython_function_or_method",
@@ -260097,7 +281367,7 @@ static PyTypeObject __pyx_CyFunctionType_type = {
     0,
     0,
     0,
-    __Pyx_CyFunction_Call,
+    __Pyx_CyFunction_CallAsMethod,
     0,
     0,
     0,
@@ -260139,11 +281409,8 @@ static PyTypeObject __pyx_CyFunctionType_type = {
 #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) {
+    if (unlikely(__pyx_CyFunctionType == NULL)) {
         return -1;
     }
     return 0;
@@ -260151,7 +281418,7 @@ static int __pyx_CyFunction_init(void) {
 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)
+    if (unlikely(!m->defaults))
         return PyErr_NoMemory();
     memset(m->defaults, 0, size);
     m->defaults_pyobjects = pyobjects;
@@ -260174,16 +281441,70 @@ static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *func, Py
 }
 
 /* GetNameInClass */
-                static PyObject *__Pyx_GetNameInClass(PyObject *nmspace, PyObject *name) {
+            static PyObject *__Pyx_GetGlobalNameAfterAttributeLookup(PyObject *name) {
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    if (unlikely(!__Pyx_PyErr_ExceptionMatches(PyExc_AttributeError)))
+        return NULL;
+    __Pyx_PyErr_Clear();
+    return __Pyx_GetModuleGlobalName(name);
+}
+static PyObject *__Pyx_GetNameInClass(PyObject *nmspace, PyObject *name) {
     PyObject *result;
     result = __Pyx_PyObject_GetAttrStr(nmspace, name);
-    if (!result)
-        result = __Pyx_GetModuleGlobalName(name);
+    if (!result) {
+        result = __Pyx_GetGlobalNameAfterAttributeLookup(name);
+    }
     return result;
 }
 
+/* ClassMethod */
+            static PyObject* __Pyx_Method_ClassMethod(PyObject *method) {
+#if CYTHON_COMPILING_IN_PYPY && PYPY_VERSION_NUM <= 0x05080000
+    if (PyObject_TypeCheck(method, &PyWrapperDescr_Type)) {
+        return PyClassMethod_New(method);
+    }
+#else
+#if CYTHON_COMPILING_IN_PYSTON || CYTHON_COMPILING_IN_PYPY
+    if (PyMethodDescr_Check(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 (__Pyx_TypeCheck(method, methoddescr_type)) {
+#endif
+        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 (__Pyx_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;
+}
+
 /* ModuleImport */
-                #ifndef __PYX_HAVE_RT_ImportModule
+              #ifndef __PYX_HAVE_RT_ImportModule
 #define __PYX_HAVE_RT_ImportModule
 static PyObject *__Pyx_ImportModule(const char *name) {
     PyObject *py_name = 0;
@@ -260201,7 +281522,7 @@ bad:
 #endif
 
 /* RegisterModuleCleanup */
-                #if PY_MAJOR_VERSION < 3
+              #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;
@@ -260262,13 +281583,49 @@ bad:
 }
 #else
 static int __Pyx_RegisterCleanup(void) {
-    if (0) __Pyx_ImportModule(NULL);
+    if ((0)) __Pyx_ImportModule(NULL);
     return 0;
 }
 #endif
 
+/* CLineInTraceback */
+              static int __Pyx_CLineForTraceback(int c_line) {
+#ifdef CYTHON_CLINE_IN_TRACEBACK
+    return ((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0;
+#else
+    PyObject *use_cline;
+#if CYTHON_COMPILING_IN_CPYTHON
+    PyObject **cython_runtime_dict = _PyObject_GetDictPtr(__pyx_cython_runtime);
+    if (likely(cython_runtime_dict)) {
+      use_cline = PyDict_GetItem(*cython_runtime_dict, __pyx_n_s_cline_in_traceback);
+    } else
+#endif
+    {
+      PyObject *ptype, *pvalue, *ptraceback;
+      PyObject *use_cline_obj;
+      PyErr_Fetch(&ptype, &pvalue, &ptraceback);
+      use_cline_obj = __Pyx_PyObject_GetAttrStr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback);
+      if (use_cline_obj) {
+        use_cline = PyObject_Not(use_cline_obj) ? Py_False : Py_True;
+        Py_DECREF(use_cline_obj);
+      } else {
+        use_cline = NULL;
+      }
+      PyErr_Restore(ptype, pvalue, ptraceback);
+    }
+    if (!use_cline) {
+        c_line = 0;
+        PyObject_SetAttr(__pyx_cython_runtime, __pyx_n_s_cline_in_traceback, Py_False);
+    }
+    else if (PyObject_Not(use_cline) != 0) {
+        c_line = 0;
+    }
+    return c_line;
+#endif
+}
+
 /* CodeObjectCache */
-                static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line) {
+              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;
@@ -260348,7 +281705,7 @@ static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object) {
 }
 
 /* AddTraceback */
-                #include "compile.h"
+              #include "compile.h"
 #include "frameobject.h"
 #include "traceback.h"
 static PyCodeObject* __Pyx_CreateCodeObjectForTraceback(
@@ -260407,21 +281764,24 @@ 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 (c_line) {
+        c_line = __Pyx_CLineForTraceback(c_line);
+    }
+    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);
+        __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*/
+        __Pyx_PyThreadState_Current, /*PyThreadState *tstate,*/
+        py_code,                     /*PyCodeObject *code,*/
+        __pyx_d,              /*PyObject *globals,*/
+        0                            /*PyObject *locals*/
     );
     if (!py_frame) goto bad;
-    py_frame->f_lineno = py_line;
+    __Pyx_PyFrame_SetLineNumber(py_frame, py_line);
     PyTraceBack_Here(py_frame);
 bad:
     Py_XDECREF(py_code);
@@ -260429,7 +281789,7 @@ bad:
 }
 
 /* CIntFromPyVerify */
-                #define __PYX_VERIFY_RETURN_INT(target_type, func_type, func_value)\
+              #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)
@@ -260451,7 +281811,7 @@ bad:
     }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value) {
+              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) {
@@ -260459,14 +281819,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(int) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(int) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -260478,7 +281842,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_InsertMode(InsertMode value) {
+              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) {
@@ -260486,14 +281850,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(InsertMode) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(InsertMode) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(InsertMode) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(InsertMode) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -260505,7 +281873,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_ScatterMode(ScatterMode value) {
+              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) {
@@ -260513,14 +281881,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(ScatterMode) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(ScatterMode) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(ScatterMode) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(ScatterMode) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -260532,7 +281904,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_NormType(NormType value) {
+              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) {
@@ -260540,14 +281912,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(NormType) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(NormType) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(NormType) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(NormType) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -260559,7 +281935,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscViewerFormat(PetscViewerFormat value) {
+              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) {
@@ -260567,14 +281943,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(PetscViewerFormat) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(PetscViewerFormat) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(PetscViewerFormat) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(PetscViewerFormat) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -260586,7 +281966,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscFileMode(PetscFileMode value) {
+              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) {
@@ -260594,14 +281974,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(PetscFileMode) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(PetscFileMode) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(PetscFileMode) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(PetscFileMode) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -260613,34 +281997,38 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_ISGlobalToLocalMappingType(ISGlobalToLocalMappingType value) {
-    const ISGlobalToLocalMappingType neg_one = (ISGlobalToLocalMappingType) -1, const_zero = (ISGlobalToLocalMappingType) 0;
+              static CYTHON_INLINE PyObject* __Pyx_PyInt_From_ISGlobalToLocalMappingMode(ISGlobalToLocalMappingMode value) {
+    const ISGlobalToLocalMappingMode neg_one = (ISGlobalToLocalMappingMode) -1, const_zero = (ISGlobalToLocalMappingMode) 0;
     const int is_unsigned = neg_one > const_zero;
     if (is_unsigned) {
-        if (sizeof(ISGlobalToLocalMappingType) < sizeof(long)) {
+        if (sizeof(ISGlobalToLocalMappingMode) < sizeof(long)) {
             return PyInt_FromLong((long) value);
-        } else if (sizeof(ISGlobalToLocalMappingType) <= sizeof(unsigned long)) {
+        } else if (sizeof(ISGlobalToLocalMappingMode) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
-        } else if (sizeof(ISGlobalToLocalMappingType) <= sizeof(unsigned PY_LONG_LONG)) {
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(ISGlobalToLocalMappingMode) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
-        if (sizeof(ISGlobalToLocalMappingType) <= sizeof(long)) {
+        if (sizeof(ISGlobalToLocalMappingMode) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
-        } else if (sizeof(ISGlobalToLocalMappingType) <= sizeof(PY_LONG_LONG)) {
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(ISGlobalToLocalMappingMode) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
         int one = 1; int little = (int)*(unsigned char *)&one;
         unsigned char *bytes = (unsigned char *)&value;
-        return _PyLong_FromByteArray(bytes, sizeof(ISGlobalToLocalMappingType),
+        return _PyLong_FromByteArray(bytes, sizeof(ISGlobalToLocalMappingMode),
                                      little, !is_unsigned);
     }
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_VecOption(VecOption value) {
+              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) {
@@ -260648,14 +282036,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(VecOption) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(VecOption) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(VecOption) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(VecOption) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -260667,7 +282059,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MatOption(MatOption value) {
+              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) {
@@ -260675,14 +282067,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(MatOption) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(MatOption) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(MatOption) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(MatOption) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -260694,7 +282090,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MatAssemblyType(MatAssemblyType value) {
+              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) {
@@ -260702,14 +282098,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(MatAssemblyType) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(MatAssemblyType) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(MatAssemblyType) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(MatAssemblyType) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -260721,7 +282121,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MatInfoType(MatInfoType value) {
+              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) {
@@ -260729,14 +282129,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(MatInfoType) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(MatInfoType) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(MatInfoType) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(MatInfoType) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -260748,7 +282152,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MatStructure(MatStructure value) {
+              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) {
@@ -260756,14 +282160,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(MatStructure) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(MatStructure) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(MatStructure) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(MatStructure) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -260775,7 +282183,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MatFactorShiftType(MatFactorShiftType value) {
+              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) {
@@ -260783,14 +282191,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(MatFactorShiftType) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(MatFactorShiftType) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(MatFactorShiftType) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(MatFactorShiftType) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -260802,7 +282214,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MatSORType(MatSORType value) {
+              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) {
@@ -260810,14 +282222,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(MatSORType) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(MatSORType) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(MatSORType) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(MatSORType) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -260829,7 +282245,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PCSide(PCSide value) {
+              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) {
@@ -260837,14 +282253,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(PCSide) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(PCSide) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(PCSide) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(PCSide) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -260856,7 +282276,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PCASMType(PCASMType value) {
+              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) {
@@ -260864,14 +282284,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(PCASMType) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(PCASMType) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(PCASMType) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(PCASMType) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -260883,7 +282307,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PCGASMType(PCGASMType value) {
+              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) {
@@ -260891,14 +282315,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(PCGASMType) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(PCGASMType) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(PCGASMType) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(PCGASMType) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -260910,7 +282338,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PCMGType(PCMGType value) {
+              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) {
@@ -260918,14 +282346,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(PCMGType) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(PCMGType) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(PCMGType) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(PCMGType) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -260937,7 +282369,38 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PCCompositeType(PCCompositeType value) {
+              static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PCMGCycleType(PCMGCycleType value) {
+    const PCMGCycleType neg_one = (PCMGCycleType) -1, const_zero = (PCMGCycleType) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(PCMGCycleType) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PCMGCycleType) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(PCMGCycleType) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
+        }
+    } else {
+        if (sizeof(PCMGCycleType) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(PCMGCycleType) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
+        }
+    }
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(PCMGCycleType),
+                                     little, !is_unsigned);
+    }
+}
+
+/* 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) {
@@ -260945,14 +282408,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(PCCompositeType) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(PCCompositeType) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(PCCompositeType) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(PCCompositeType) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -260964,7 +282431,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PCFieldSplitSchurPreType(PCFieldSplitSchurPreType value) {
+              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) {
@@ -260972,14 +282439,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(PCFieldSplitSchurPreType) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(PCFieldSplitSchurPreType) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(PCFieldSplitSchurPreType) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(PCFieldSplitSchurPreType) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -260991,7 +282462,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PCFieldSplitSchurFactType(PCFieldSplitSchurFactType value) {
+              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) {
@@ -260999,14 +282470,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(PCFieldSplitSchurFactType) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(PCFieldSplitSchurFactType) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(PCFieldSplitSchurFactType) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(PCFieldSplitSchurFactType) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -261018,7 +282493,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_KSPNormType(KSPNormType value) {
+              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) {
@@ -261026,14 +282501,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(KSPNormType) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(KSPNormType) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(KSPNormType) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(KSPNormType) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -261045,7 +282524,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_KSPConvergedReason(KSPConvergedReason value) {
+              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) {
@@ -261053,14 +282532,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(KSPConvergedReason) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(KSPConvergedReason) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(KSPConvergedReason) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(KSPConvergedReason) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -261072,7 +282555,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_SNESNormSchedule(SNESNormSchedule value) {
+              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) {
@@ -261080,14 +282563,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(SNESNormSchedule) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(SNESNormSchedule) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(SNESNormSchedule) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(SNESNormSchedule) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -261099,7 +282586,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_SNESConvergedReason(SNESConvergedReason value) {
+              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) {
@@ -261107,14 +282594,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(SNESConvergedReason) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(SNESConvergedReason) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(SNESConvergedReason) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(SNESConvergedReason) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -261126,7 +282617,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_TSProblemType(TSProblemType value) {
+              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) {
@@ -261134,14 +282625,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(TSProblemType) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(TSProblemType) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(TSProblemType) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(TSProblemType) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -261153,7 +282648,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_TSEquationType(TSEquationType value) {
+              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) {
@@ -261161,14 +282656,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(TSEquationType) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(TSEquationType) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(TSEquationType) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(TSEquationType) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -261180,7 +282679,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_TSExactFinalTimeOption(TSExactFinalTimeOption value) {
+              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) {
@@ -261188,14 +282687,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(TSExactFinalTimeOption) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(TSExactFinalTimeOption) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(TSExactFinalTimeOption) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(TSExactFinalTimeOption) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -261207,7 +282710,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_TSConvergedReason(TSConvergedReason value) {
+              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) {
@@ -261215,14 +282718,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(TSConvergedReason) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(TSConvergedReason) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(TSConvergedReason) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(TSConvergedReason) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -261234,7 +282741,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_TaoConvergedReason(TaoConvergedReason value) {
+              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) {
@@ -261242,14 +282749,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(TaoConvergedReason) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(TaoConvergedReason) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(TaoConvergedReason) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(TaoConvergedReason) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -261261,7 +282772,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_DMBoundaryType(DMBoundaryType value) {
+              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) {
@@ -261269,14 +282780,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(DMBoundaryType) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(DMBoundaryType) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(DMBoundaryType) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(DMBoundaryType) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -261288,7 +282803,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_DMDAStencilType(DMDAStencilType value) {
+              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) {
@@ -261296,14 +282811,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(DMDAStencilType) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(DMDAStencilType) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(DMDAStencilType) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(DMDAStencilType) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -261315,7 +282834,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_DMDAInterpolationType(DMDAInterpolationType value) {
+              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) {
@@ -261323,14 +282842,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(DMDAInterpolationType) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(DMDAInterpolationType) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(DMDAInterpolationType) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(DMDAInterpolationType) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -261342,7 +282865,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_DMDAElementType(DMDAElementType value) {
+              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) {
@@ -261350,14 +282873,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(DMDAElementType) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(DMDAElementType) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(DMDAElementType) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(DMDAElementType) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -261369,7 +282896,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value) {
+              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) {
@@ -261377,14 +282904,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(long) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(long) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -261396,7 +282927,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscInt(PetscInt value) {
+              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) {
@@ -261404,14 +282935,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(PetscInt) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(PetscInt) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(PetscInt) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(PetscInt) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -261423,34 +282958,7 @@ bad:
 }
 
 /* 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_PetscLogStage(PetscLogStage value) {
+              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) {
@@ -261458,14 +282966,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(PetscLogStage) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(PetscLogStage) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(PetscLogStage) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(PetscLogStage) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -261477,7 +282989,7 @@ bad:
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscClassId(PetscClassId value) {
+              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) {
@@ -261485,14 +282997,18 @@ bad:
             return PyInt_FromLong((long) value);
         } else if (sizeof(PetscClassId) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(PetscClassId) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(PetscClassId) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(PetscClassId) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -261504,35 +283020,35 @@ bad:
 }
 
 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) {
+                PyObject* res;
+                PyObject* member;
+                res = __Pyx_PyDict_NewPresized(6); 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) {
@@ -261540,14 +283056,18 @@ static PyObject* __pyx_convert__to_py_PetscEventPerfInfo(PetscEventPerfInfo s) {
             return PyInt_FromLong((long) value);
         } else if (sizeof(PetscLogEvent) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(PetscLogEvent) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(PetscLogEvent) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(PetscLogEvent) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -261559,7 +283079,7 @@ static PyObject* __pyx_convert__to_py_PetscEventPerfInfo(PetscEventPerfInfo s) {
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MPI_Fint(MPI_Fint value) {
+              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) {
@@ -261567,14 +283087,18 @@ static PyObject* __pyx_convert__to_py_PetscEventPerfInfo(PetscEventPerfInfo s) {
             return PyInt_FromLong((long) value);
         } else if (sizeof(MPI_Fint) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(MPI_Fint) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(MPI_Fint) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(MPI_Fint) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -261586,7 +283110,7 @@ static PyObject* __pyx_convert__to_py_PetscEventPerfInfo(PetscEventPerfInfo s) {
 }
 
 /* CIntToPy */
-                static CYTHON_INLINE PyObject* __Pyx_PyInt_From_unsigned_long(unsigned long value) {
+              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) {
@@ -261594,14 +283118,18 @@ static PyObject* __pyx_convert__to_py_PetscEventPerfInfo(PetscEventPerfInfo s) {
             return PyInt_FromLong((long) value);
         } else if (sizeof(unsigned long) <= sizeof(unsigned long)) {
             return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(unsigned long) <= sizeof(unsigned PY_LONG_LONG)) {
             return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
         }
     } else {
         if (sizeof(unsigned long) <= sizeof(long)) {
             return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
         } else if (sizeof(unsigned long) <= sizeof(PY_LONG_LONG)) {
             return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
         }
     }
     {
@@ -261613,88 +283141,109 @@ static PyObject* __pyx_convert__to_py_PetscEventPerfInfo(PetscEventPerfInfo s) {
 }
 
 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
-    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);
+                PyObject* res;
+                PyObject* member;
+                res = __Pyx_PyDict_NewPresized(10); 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;
+              }
+              /* CIntToPy */
+              static CYTHON_INLINE PyObject* __Pyx_PyInt_From_MatDuplicateOption(MatDuplicateOption value) {
+    const MatDuplicateOption neg_one = (MatDuplicateOption) -1, const_zero = (MatDuplicateOption) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(MatDuplicateOption) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(MatDuplicateOption) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(MatDuplicateOption) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
+#endif
+        }
+    } else {
+        if (sizeof(MatDuplicateOption) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(MatDuplicateOption) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
+        }
     }
-    if (PyObject_TypeCheck(method, methoddescr_type)) {
-        PyMethodDescrObject *descr = (PyMethodDescrObject *)method;
-        #if PY_VERSION_HEX < 0x03020000
-        PyTypeObject *d_type = descr->d_type;
-        #else
-        PyTypeObject *d_type = descr->d_common.d_type;
-        #endif
-        return PyDescr_NewClassMethod(d_type, descr->d_method);
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(MatDuplicateOption),
+                                     little, !is_unsigned);
     }
+}
+
+/* CIntToPy */
+              static CYTHON_INLINE PyObject* __Pyx_PyInt_From_PetscBool(PetscBool value) {
+    const PetscBool neg_one = (PetscBool) -1, const_zero = (PetscBool) 0;
+    const int is_unsigned = neg_one > const_zero;
+    if (is_unsigned) {
+        if (sizeof(PetscBool) < sizeof(long)) {
+            return PyInt_FromLong((long) value);
+        } else if (sizeof(PetscBool) <= sizeof(unsigned long)) {
+            return PyLong_FromUnsignedLong((unsigned long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(PetscBool) <= sizeof(unsigned PY_LONG_LONG)) {
+            return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG) value);
 #endif
-    else if (PyMethod_Check(method)) {
-        return PyClassMethod_New(PyMethod_GET_FUNCTION(method));
-    }
-    else if (PyCFunction_Check(method)) {
-        return PyClassMethod_New(method);
+        }
+    } else {
+        if (sizeof(PetscBool) <= sizeof(long)) {
+            return PyInt_FromLong((long) value);
+#ifdef HAVE_LONG_LONG
+        } else if (sizeof(PetscBool) <= sizeof(PY_LONG_LONG)) {
+            return PyLong_FromLongLong((PY_LONG_LONG) value);
+#endif
+        }
     }
-#ifdef __Pyx_CyFunction_USED
-    else if (PyObject_TypeCheck(method, __pyx_CyFunctionType)) {
-        return PyClassMethod_New(method);
+    {
+        int one = 1; int little = (int)*(unsigned char *)&one;
+        unsigned char *bytes = (unsigned char *)&value;
+        return _PyLong_FromByteArray(bytes, sizeof(PetscBool),
+                                     little, !is_unsigned);
     }
-#endif
-    PyErr_SetString(PyExc_TypeError,
-                   "Class-level classmethod() can only be called on "
-                   "a method_descriptor or instance method.");
-    return NULL;
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *x) {
+              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
@@ -261761,8 +283310,10 @@ static PyObject* __pyx_convert__to_py_MatInfo(MatInfo s) {
 #endif
             if (sizeof(int) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(int, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(int) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(int, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -261829,8 +283380,10 @@ static PyObject* __pyx_convert__to_py_MatInfo(MatInfo s) {
 #endif
             if (sizeof(int) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(int, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(int) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(int, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -261879,7 +283432,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE PetscInt __Pyx_PyInt_As_PetscInt(PyObject *x) {
+              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
@@ -261946,8 +283499,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(PetscInt) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PetscInt, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(PetscInt) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PetscInt, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -262014,8 +283569,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(PetscInt) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PetscInt, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(PetscInt) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PetscInt, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -262064,7 +283621,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE InsertMode __Pyx_PyInt_As_InsertMode(PyObject *x) {
+              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
@@ -262131,8 +283688,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(InsertMode) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(InsertMode, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(InsertMode) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(InsertMode, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -262199,8 +283758,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(InsertMode) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(InsertMode, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(InsertMode) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(InsertMode, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -262249,7 +283810,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE ScatterMode __Pyx_PyInt_As_ScatterMode(PyObject *x) {
+              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
@@ -262316,8 +283877,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(ScatterMode) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(ScatterMode, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(ScatterMode) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(ScatterMode, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -262384,8 +283947,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(ScatterMode) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(ScatterMode, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(ScatterMode) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(ScatterMode, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -262434,7 +283999,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE PetscFileMode __Pyx_PyInt_As_PetscFileMode(PyObject *x) {
+              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
@@ -262501,8 +284066,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(PetscFileMode) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PetscFileMode, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(PetscFileMode) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PetscFileMode, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -262569,8 +284136,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(PetscFileMode) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PetscFileMode, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(PetscFileMode) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PetscFileMode, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -262619,7 +284188,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE MatStructure __Pyx_PyInt_As_MatStructure(PyObject *x) {
+              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
@@ -262686,8 +284255,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(MatStructure) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(MatStructure, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(MatStructure) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(MatStructure, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -262754,8 +284325,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(MatStructure) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(MatStructure, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(MatStructure) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(MatStructure, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -262804,7 +284377,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE MatAssemblyType __Pyx_PyInt_As_MatAssemblyType(PyObject *x) {
+              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
@@ -262871,8 +284444,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(MatAssemblyType) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(MatAssemblyType, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(MatAssemblyType) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(MatAssemblyType, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -262939,8 +284514,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(MatAssemblyType) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(MatAssemblyType, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(MatAssemblyType) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(MatAssemblyType, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -262989,7 +284566,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE MatInfoType __Pyx_PyInt_As_MatInfoType(PyObject *x) {
+              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
@@ -263056,8 +284633,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(MatInfoType) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(MatInfoType, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(MatInfoType) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(MatInfoType, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -263124,8 +284703,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(MatInfoType) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(MatInfoType, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(MatInfoType) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(MatInfoType, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -263174,7 +284755,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE MatFactorShiftType __Pyx_PyInt_As_MatFactorShiftType(PyObject *x) {
+              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
@@ -263241,8 +284822,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(MatFactorShiftType) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(MatFactorShiftType, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(MatFactorShiftType) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(MatFactorShiftType, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -263309,8 +284892,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(MatFactorShiftType) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(MatFactorShiftType, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(MatFactorShiftType) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(MatFactorShiftType, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -263359,7 +284944,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE KSPConvergedReason __Pyx_PyInt_As_KSPConvergedReason(PyObject *x) {
+              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
@@ -263426,8 +285011,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(KSPConvergedReason) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(KSPConvergedReason, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(KSPConvergedReason) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(KSPConvergedReason, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -263494,8 +285081,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(KSPConvergedReason) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(KSPConvergedReason, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(KSPConvergedReason) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(KSPConvergedReason, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -263544,7 +285133,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE SNESConvergedReason __Pyx_PyInt_As_SNESConvergedReason(PyObject *x) {
+              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
@@ -263611,8 +285200,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(SNESConvergedReason) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(SNESConvergedReason, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(SNESConvergedReason) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(SNESConvergedReason, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -263679,8 +285270,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(SNESConvergedReason) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(SNESConvergedReason, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(SNESConvergedReason) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(SNESConvergedReason, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -263729,7 +285322,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE TaoConvergedReason __Pyx_PyInt_As_TaoConvergedReason(PyObject *x) {
+              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
@@ -263796,8 +285389,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(TaoConvergedReason) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(TaoConvergedReason, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(TaoConvergedReason) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(TaoConvergedReason, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -263864,8 +285459,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(TaoConvergedReason) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(TaoConvergedReason, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(TaoConvergedReason) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(TaoConvergedReason, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -263914,7 +285511,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE DMBoundaryType __Pyx_PyInt_As_DMBoundaryType(PyObject *x) {
+              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
@@ -263981,8 +285578,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(DMBoundaryType) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(DMBoundaryType, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(DMBoundaryType) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(DMBoundaryType, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -264049,8 +285648,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(DMBoundaryType) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(DMBoundaryType, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(DMBoundaryType) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(DMBoundaryType, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -264099,7 +285700,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE DMDAStencilType __Pyx_PyInt_As_DMDAStencilType(PyObject *x) {
+              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
@@ -264166,8 +285767,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(DMDAStencilType) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(DMDAStencilType, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(DMDAStencilType) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(DMDAStencilType, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -264234,8 +285837,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(DMDAStencilType) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(DMDAStencilType, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(DMDAStencilType) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(DMDAStencilType, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -264284,7 +285889,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE DMDAInterpolationType __Pyx_PyInt_As_DMDAInterpolationType(PyObject *x) {
+              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
@@ -264351,8 +285956,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(DMDAInterpolationType) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(DMDAInterpolationType, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(DMDAInterpolationType) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(DMDAInterpolationType, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -264419,8 +286026,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(DMDAInterpolationType) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(DMDAInterpolationType, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(DMDAInterpolationType) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(DMDAInterpolationType, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -264469,7 +286078,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE DMDAElementType __Pyx_PyInt_As_DMDAElementType(PyObject *x) {
+              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
@@ -264536,8 +286145,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(DMDAElementType) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(DMDAElementType, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(DMDAElementType) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(DMDAElementType, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -264604,8 +286215,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(DMDAElementType) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(DMDAElementType, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(DMDAElementType) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(DMDAElementType, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -264654,7 +286267,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE PetscClassId __Pyx_PyInt_As_PetscClassId(PyObject *x) {
+              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
@@ -264721,8 +286334,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(PetscClassId) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PetscClassId, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(PetscClassId) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PetscClassId, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -264789,8 +286404,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(PetscClassId) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PetscClassId, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(PetscClassId) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PetscClassId, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -264839,7 +286456,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE PetscViewerFormat __Pyx_PyInt_As_PetscViewerFormat(PyObject *x) {
+              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
@@ -264906,8 +286523,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(PetscViewerFormat) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PetscViewerFormat, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(PetscViewerFormat) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PetscViewerFormat, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -264974,8 +286593,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(PetscViewerFormat) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PetscViewerFormat, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(PetscViewerFormat) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PetscViewerFormat, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -265024,7 +286645,196 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE unsigned long __Pyx_PyInt_As_unsigned_long(PyObject *x) {
+              static CYTHON_INLINE PetscBool __Pyx_PyInt_As_PetscBool(PyObject *x) {
+    const PetscBool neg_one = (PetscBool) -1, const_zero = (PetscBool) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(PetscBool) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(PetscBool, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (PetscBool) val;
+        }
+    } else
+#endif
+    if (likely(PyLong_Check(x))) {
+        if (is_unsigned) {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (PetscBool) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(PetscBool, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(PetscBool) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscBool, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscBool) >= 2 * PyLong_SHIFT) {
+                            return (PetscBool) (((((PetscBool)digits[1]) << PyLong_SHIFT) | (PetscBool)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PetscBool) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscBool, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscBool) >= 3 * PyLong_SHIFT) {
+                            return (PetscBool) (((((((PetscBool)digits[2]) << PyLong_SHIFT) | (PetscBool)digits[1]) << PyLong_SHIFT) | (PetscBool)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PetscBool) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscBool, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscBool) >= 4 * PyLong_SHIFT) {
+                            return (PetscBool) (((((((((PetscBool)digits[3]) << PyLong_SHIFT) | (PetscBool)digits[2]) << PyLong_SHIFT) | (PetscBool)digits[1]) << PyLong_SHIFT) | (PetscBool)digits[0]));
+                        }
+                    }
+                    break;
+            }
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+            if (unlikely(Py_SIZE(x) < 0)) {
+                goto raise_neg_overflow;
+            }
+#else
+            {
+                int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
+                if (unlikely(result < 0))
+                    return (PetscBool) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(PetscBool) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PetscBool, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
+            } else if (sizeof(PetscBool) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PetscBool, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (PetscBool) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(PetscBool, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(PetscBool,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(PetscBool) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscBool, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscBool) - 1 > 2 * PyLong_SHIFT) {
+                            return (PetscBool) (((PetscBool)-1)*(((((PetscBool)digits[1]) << PyLong_SHIFT) | (PetscBool)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(PetscBool) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscBool, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscBool) - 1 > 2 * PyLong_SHIFT) {
+                            return (PetscBool) ((((((PetscBool)digits[1]) << PyLong_SHIFT) | (PetscBool)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(PetscBool) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscBool, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscBool) - 1 > 3 * PyLong_SHIFT) {
+                            return (PetscBool) (((PetscBool)-1)*(((((((PetscBool)digits[2]) << PyLong_SHIFT) | (PetscBool)digits[1]) << PyLong_SHIFT) | (PetscBool)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PetscBool) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscBool, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscBool) - 1 > 3 * PyLong_SHIFT) {
+                            return (PetscBool) ((((((((PetscBool)digits[2]) << PyLong_SHIFT) | (PetscBool)digits[1]) << PyLong_SHIFT) | (PetscBool)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(PetscBool) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscBool, long, -(long) (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscBool) - 1 > 4 * PyLong_SHIFT) {
+                            return (PetscBool) (((PetscBool)-1)*(((((((((PetscBool)digits[3]) << PyLong_SHIFT) | (PetscBool)digits[2]) << PyLong_SHIFT) | (PetscBool)digits[1]) << PyLong_SHIFT) | (PetscBool)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PetscBool) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PetscBool, unsigned long, (((((((((unsigned long)digits[3]) << PyLong_SHIFT) | (unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PetscBool) - 1 > 4 * PyLong_SHIFT) {
+                            return (PetscBool) ((((((((((PetscBool)digits[3]) << PyLong_SHIFT) | (PetscBool)digits[2]) << PyLong_SHIFT) | (PetscBool)digits[1]) << PyLong_SHIFT) | (PetscBool)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(PetscBool) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PetscBool, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
+            } else if (sizeof(PetscBool) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PetscBool, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            PetscBool val;
+            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
+ #if PY_MAJOR_VERSION < 3
+            if (likely(v) && !PyLong_Check(v)) {
+                PyObject *tmp = v;
+                v = PyNumber_Long(tmp);
+                Py_DECREF(tmp);
+            }
+ #endif
+            if (likely(v)) {
+                int one = 1; int is_little = (int)*(unsigned char *)&one;
+                unsigned char *bytes = (unsigned char *)&val;
+                int ret = _PyLong_AsByteArray((PyLongObject *)v,
+                                              bytes, sizeof(val),
+                                              is_little, !is_unsigned);
+                Py_DECREF(v);
+                if (likely(!ret))
+                    return val;
+            }
+#endif
+            return (PetscBool) -1;
+        }
+    } else {
+        PetscBool val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (PetscBool) -1;
+        val = __Pyx_PyInt_As_PetscBool(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to PetscBool");
+    return (PetscBool) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to PetscBool");
+    return (PetscBool) -1;
+}
+
+/* CIntFromPy */
+              static CYTHON_INLINE 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
@@ -265091,8 +286901,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(unsigned long) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(unsigned long, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(unsigned long) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(unsigned long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -265159,8 +286971,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(unsigned long) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(unsigned long, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(unsigned long) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(unsigned long, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -265209,19 +287023,19 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE PetscBool __Pyx_PyInt_As_PetscBool(PyObject *x) {
-    const PetscBool neg_one = (PetscBool) -1, const_zero = (PetscBool) 0;
+              static CYTHON_INLINE ISGlobalToLocalMappingMode __Pyx_PyInt_As_ISGlobalToLocalMappingMode(PyObject *x) {
+    const ISGlobalToLocalMappingMode neg_one = (ISGlobalToLocalMappingMode) -1, const_zero = (ISGlobalToLocalMappingMode) 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))
+        if (sizeof(ISGlobalToLocalMappingMode) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(ISGlobalToLocalMappingMode, long, PyInt_AS_LONG(x))
         } else {
             long val = PyInt_AS_LONG(x);
             if (is_unsigned && unlikely(val < 0)) {
                 goto raise_neg_overflow;
             }
-            return (PetscBool) val;
+            return (ISGlobalToLocalMappingMode) val;
         }
     } else
 #endif
@@ -265230,32 +287044,32 @@ raise_neg_overflow:
 #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  0: return (ISGlobalToLocalMappingMode) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(ISGlobalToLocalMappingMode, digit, digits[0])
                 case 2:
-                    if (8 * sizeof(PetscBool) > 1 * PyLong_SHIFT) {
+                    if (8 * sizeof(ISGlobalToLocalMappingMode) > 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]));
+                            __PYX_VERIFY_RETURN_INT(ISGlobalToLocalMappingMode, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(ISGlobalToLocalMappingMode) >= 2 * PyLong_SHIFT) {
+                            return (ISGlobalToLocalMappingMode) (((((ISGlobalToLocalMappingMode)digits[1]) << PyLong_SHIFT) | (ISGlobalToLocalMappingMode)digits[0]));
                         }
                     }
                     break;
                 case 3:
-                    if (8 * sizeof(PetscBool) > 2 * PyLong_SHIFT) {
+                    if (8 * sizeof(ISGlobalToLocalMappingMode) > 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]));
+                            __PYX_VERIFY_RETURN_INT(ISGlobalToLocalMappingMode, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(ISGlobalToLocalMappingMode) >= 3 * PyLong_SHIFT) {
+                            return (ISGlobalToLocalMappingMode) (((((((ISGlobalToLocalMappingMode)digits[2]) << PyLong_SHIFT) | (ISGlobalToLocalMappingMode)digits[1]) << PyLong_SHIFT) | (ISGlobalToLocalMappingMode)digits[0]));
                         }
                     }
                     break;
                 case 4:
-                    if (8 * sizeof(PetscBool) > 3 * PyLong_SHIFT) {
+                    if (8 * sizeof(ISGlobalToLocalMappingMode) > 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]));
+                            __PYX_VERIFY_RETURN_INT(ISGlobalToLocalMappingMode, 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(ISGlobalToLocalMappingMode) >= 4 * PyLong_SHIFT) {
+                            return (ISGlobalToLocalMappingMode) (((((((((ISGlobalToLocalMappingMode)digits[3]) << PyLong_SHIFT) | (ISGlobalToLocalMappingMode)digits[2]) << PyLong_SHIFT) | (ISGlobalToLocalMappingMode)digits[1]) << PyLong_SHIFT) | (ISGlobalToLocalMappingMode)digits[0]));
                         }
                     }
                     break;
@@ -265269,268 +287083,87 @@ raise_neg_overflow:
             {
                 int result = PyObject_RichCompareBool(x, Py_False, Py_LT);
                 if (unlikely(result < 0))
-                    return (PetscBool) -1;
+                    return (ISGlobalToLocalMappingMode) -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;
-            }
+            if (sizeof(ISGlobalToLocalMappingMode) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(ISGlobalToLocalMappingMode, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
+            } else if (sizeof(ISGlobalToLocalMappingMode) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(ISGlobalToLocalMappingMode, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
 #endif
-            if (sizeof(PetscBool) <= sizeof(long)) {
-                __PYX_VERIFY_RETURN_INT_EXC(PetscBool, long, PyLong_AsLong(x))
-            } else if (sizeof(PetscBool) <= sizeof(PY_LONG_LONG)) {
-                __PYX_VERIFY_RETURN_INT_EXC(PetscBool, PY_LONG_LONG, PyLong_AsLongLong(x))
-            }
-        }
-        {
-#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
-            PyErr_SetString(PyExc_RuntimeError,
-                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
-#else
-            PetscBool val;
-            PyObject *v = __Pyx_PyNumber_IntOrLong(x);
- #if PY_MAJOR_VERSION < 3
-            if (likely(v) && !PyLong_Check(v)) {
-                PyObject *tmp = v;
-                v = PyNumber_Long(tmp);
-                Py_DECREF(tmp);
             }
- #endif
-            if (likely(v)) {
-                int one = 1; int is_little = (int)*(unsigned char *)&one;
-                unsigned char *bytes = (unsigned char *)&val;
-                int ret = _PyLong_AsByteArray((PyLongObject *)v,
-                                              bytes, sizeof(val),
-                                              is_little, !is_unsigned);
-                Py_DECREF(v);
-                if (likely(!ret))
-                    return val;
-            }
-#endif
-            return (PetscBool) -1;
-        }
-    } else {
-        PetscBool val;
-        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
-        if (!tmp) return (PetscBool) -1;
-        val = __Pyx_PyInt_As_PetscBool(tmp);
-        Py_DECREF(tmp);
-        return val;
-    }
-raise_overflow:
-    PyErr_SetString(PyExc_OverflowError,
-        "value too large to convert to PetscBool");
-    return (PetscBool) -1;
-raise_neg_overflow:
-    PyErr_SetString(PyExc_OverflowError,
-        "can't convert negative value to PetscBool");
-    return (PetscBool) -1;
-}
-
-/* CIntFromPy */
-                static CYTHON_INLINE 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
-            {
-                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 (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  0: return (ISGlobalToLocalMappingMode) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(ISGlobalToLocalMappingMode, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(ISGlobalToLocalMappingMode,  digit, +digits[0])
                 case -2:
-                    if (8 * sizeof(ISGlobalToLocalMappingType) - 1 > 1 * PyLong_SHIFT) {
+                    if (8 * sizeof(ISGlobalToLocalMappingMode) - 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])));
+                            __PYX_VERIFY_RETURN_INT(ISGlobalToLocalMappingMode, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(ISGlobalToLocalMappingMode) - 1 > 2 * PyLong_SHIFT) {
+                            return (ISGlobalToLocalMappingMode) (((ISGlobalToLocalMappingMode)-1)*(((((ISGlobalToLocalMappingMode)digits[1]) << PyLong_SHIFT) | (ISGlobalToLocalMappingMode)digits[0])));
                         }
                     }
                     break;
                 case 2:
-                    if (8 * sizeof(ISGlobalToLocalMappingType) > 1 * PyLong_SHIFT) {
+                    if (8 * sizeof(ISGlobalToLocalMappingMode) > 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])));
+                            __PYX_VERIFY_RETURN_INT(ISGlobalToLocalMappingMode, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(ISGlobalToLocalMappingMode) - 1 > 2 * PyLong_SHIFT) {
+                            return (ISGlobalToLocalMappingMode) ((((((ISGlobalToLocalMappingMode)digits[1]) << PyLong_SHIFT) | (ISGlobalToLocalMappingMode)digits[0])));
                         }
                     }
                     break;
                 case -3:
-                    if (8 * sizeof(ISGlobalToLocalMappingType) - 1 > 2 * PyLong_SHIFT) {
+                    if (8 * sizeof(ISGlobalToLocalMappingMode) - 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])));
+                            __PYX_VERIFY_RETURN_INT(ISGlobalToLocalMappingMode, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(ISGlobalToLocalMappingMode) - 1 > 3 * PyLong_SHIFT) {
+                            return (ISGlobalToLocalMappingMode) (((ISGlobalToLocalMappingMode)-1)*(((((((ISGlobalToLocalMappingMode)digits[2]) << PyLong_SHIFT) | (ISGlobalToLocalMappingMode)digits[1]) << PyLong_SHIFT) | (ISGlobalToLocalMappingMode)digits[0])));
                         }
                     }
                     break;
                 case 3:
-                    if (8 * sizeof(ISGlobalToLocalMappingType) > 2 * PyLong_SHIFT) {
+                    if (8 * sizeof(ISGlobalToLocalMappingMode) > 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])));
+                            __PYX_VERIFY_RETURN_INT(ISGlobalToLocalMappingMode, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(ISGlobalToLocalMappingMode) - 1 > 3 * PyLong_SHIFT) {
+                            return (ISGlobalToLocalMappingMode) ((((((((ISGlobalToLocalMappingMode)digits[2]) << PyLong_SHIFT) | (ISGlobalToLocalMappingMode)digits[1]) << PyLong_SHIFT) | (ISGlobalToLocalMappingMode)digits[0])));
                         }
                     }
                     break;
                 case -4:
-                    if (8 * sizeof(ISGlobalToLocalMappingType) - 1 > 3 * PyLong_SHIFT) {
+                    if (8 * sizeof(ISGlobalToLocalMappingMode) - 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])));
+                            __PYX_VERIFY_RETURN_INT(ISGlobalToLocalMappingMode, 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(ISGlobalToLocalMappingMode) - 1 > 4 * PyLong_SHIFT) {
+                            return (ISGlobalToLocalMappingMode) (((ISGlobalToLocalMappingMode)-1)*(((((((((ISGlobalToLocalMappingMode)digits[3]) << PyLong_SHIFT) | (ISGlobalToLocalMappingMode)digits[2]) << PyLong_SHIFT) | (ISGlobalToLocalMappingMode)digits[1]) << PyLong_SHIFT) | (ISGlobalToLocalMappingMode)digits[0])));
                         }
                     }
                     break;
                 case 4:
-                    if (8 * sizeof(ISGlobalToLocalMappingType) > 3 * PyLong_SHIFT) {
+                    if (8 * sizeof(ISGlobalToLocalMappingMode) > 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])));
+                            __PYX_VERIFY_RETURN_INT(ISGlobalToLocalMappingMode, 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(ISGlobalToLocalMappingMode) - 1 > 4 * PyLong_SHIFT) {
+                            return (ISGlobalToLocalMappingMode) ((((((((((ISGlobalToLocalMappingMode)digits[3]) << PyLong_SHIFT) | (ISGlobalToLocalMappingMode)digits[2]) << PyLong_SHIFT) | (ISGlobalToLocalMappingMode)digits[1]) << PyLong_SHIFT) | (ISGlobalToLocalMappingMode)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))
+            if (sizeof(ISGlobalToLocalMappingMode) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(ISGlobalToLocalMappingMode, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
+            } else if (sizeof(ISGlobalToLocalMappingMode) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(ISGlobalToLocalMappingMode, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -265538,7 +287171,7 @@ raise_neg_overflow:
             PyErr_SetString(PyExc_RuntimeError,
                             "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
 #else
-            ISGlobalToLocalMappingType val;
+            ISGlobalToLocalMappingMode val;
             PyObject *v = __Pyx_PyNumber_IntOrLong(x);
  #if PY_MAJOR_VERSION < 3
             if (likely(v) && !PyLong_Check(v)) {
@@ -265558,28 +287191,28 @@ raise_neg_overflow:
                     return val;
             }
 #endif
-            return (ISGlobalToLocalMappingType) -1;
+            return (ISGlobalToLocalMappingMode) -1;
         }
     } else {
-        ISGlobalToLocalMappingType val;
+        ISGlobalToLocalMappingMode val;
         PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
-        if (!tmp) return (ISGlobalToLocalMappingType) -1;
-        val = __Pyx_PyInt_As_ISGlobalToLocalMappingType(tmp);
+        if (!tmp) return (ISGlobalToLocalMappingMode) -1;
+        val = __Pyx_PyInt_As_ISGlobalToLocalMappingMode(tmp);
         Py_DECREF(tmp);
         return val;
     }
 raise_overflow:
     PyErr_SetString(PyExc_OverflowError,
-        "value too large to convert to ISGlobalToLocalMappingType");
-    return (ISGlobalToLocalMappingType) -1;
+        "value too large to convert to ISGlobalToLocalMappingMode");
+    return (ISGlobalToLocalMappingMode) -1;
 raise_neg_overflow:
     PyErr_SetString(PyExc_OverflowError,
-        "can't convert negative value to ISGlobalToLocalMappingType");
-    return (ISGlobalToLocalMappingType) -1;
+        "can't convert negative value to ISGlobalToLocalMappingMode");
+    return (ISGlobalToLocalMappingMode) -1;
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE VecOption __Pyx_PyInt_As_VecOption(PyObject *x) {
+              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
@@ -265646,8 +287279,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(VecOption) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(VecOption, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(VecOption) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(VecOption, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -265714,8 +287349,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(VecOption) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(VecOption, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(VecOption) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(VecOption, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -265764,7 +287401,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE size_t __Pyx_PyInt_As_size_t(PyObject *x) {
+              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
@@ -265831,8 +287468,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(size_t) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(size_t, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(size_t) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(size_t, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -265899,8 +287538,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(size_t) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(size_t, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(size_t) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(size_t, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -265949,7 +287590,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE NormType __Pyx_PyInt_As_NormType(PyObject *x) {
+              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
@@ -266016,8 +287657,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(NormType) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(NormType, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(NormType) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(NormType, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -266084,8 +287727,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(NormType) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(NormType, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(NormType) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(NormType, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -266134,7 +287779,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE MatOption __Pyx_PyInt_As_MatOption(PyObject *x) {
+              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
@@ -266201,8 +287846,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(MatOption) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(MatOption, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(MatOption) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(MatOption, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -266269,8 +287916,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(MatOption) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(MatOption, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(MatOption) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(MatOption, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -266319,7 +287968,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE PCASMType __Pyx_PyInt_As_PCASMType(PyObject *x) {
+              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
@@ -266386,8 +288035,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(PCASMType) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PCASMType, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(PCASMType) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PCASMType, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -266454,8 +288105,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(PCASMType) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PCASMType, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(PCASMType) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PCASMType, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -266504,7 +288157,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE PCGASMType __Pyx_PyInt_As_PCGASMType(PyObject *x) {
+              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
@@ -266571,8 +288224,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(PCGASMType) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PCGASMType, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(PCGASMType) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PCGASMType, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -266639,8 +288294,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(PCGASMType) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PCGASMType, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(PCGASMType) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PCGASMType, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -266689,7 +288346,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE PCCompositeType __Pyx_PyInt_As_PCCompositeType(PyObject *x) {
+              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
@@ -266756,8 +288413,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(PCCompositeType) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PCCompositeType, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(PCCompositeType) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PCCompositeType, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -266824,8 +288483,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(PCCompositeType) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PCCompositeType, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(PCCompositeType) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PCCompositeType, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -266874,7 +288535,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE PCFieldSplitSchurFactType __Pyx_PyInt_As_PCFieldSplitSchurFactType(PyObject *x) {
+              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 PY_MAJOR_VERSION < 3
@@ -266941,8 +288602,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(PCFieldSplitSchurFactType) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PCFieldSplitSchurFactType, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(PCFieldSplitSchurFactType) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PCFieldSplitSchurFactType, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -267009,8 +288672,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(PCFieldSplitSchurFactType) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PCFieldSplitSchurFactType, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(PCFieldSplitSchurFactType) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PCFieldSplitSchurFactType, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -267059,7 +288724,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE PCFieldSplitSchurPreType __Pyx_PyInt_As_PCFieldSplitSchurPreType(PyObject *x) {
+              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 PY_MAJOR_VERSION < 3
@@ -267126,8 +288791,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(PCFieldSplitSchurPreType) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PCFieldSplitSchurPreType, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(PCFieldSplitSchurPreType) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PCFieldSplitSchurPreType, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -267194,8 +288861,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(PCFieldSplitSchurPreType) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PCFieldSplitSchurPreType, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(PCFieldSplitSchurPreType) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PCFieldSplitSchurPreType, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -267244,7 +288913,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE PCMGType __Pyx_PyInt_As_PCMGType(PyObject *x) {
+              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
@@ -267311,8 +288980,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(PCMGType) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PCMGType, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(PCMGType) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PCMGType, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -267379,8 +289050,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(PCMGType) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PCMGType, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(PCMGType) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PCMGType, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -267429,7 +289102,196 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE PCSide __Pyx_PyInt_As_PCSide(PyObject *x) {
+              static CYTHON_INLINE PCMGCycleType __Pyx_PyInt_As_PCMGCycleType(PyObject *x) {
+    const PCMGCycleType neg_one = (PCMGCycleType) -1, const_zero = (PCMGCycleType) 0;
+    const int is_unsigned = neg_one > const_zero;
+#if PY_MAJOR_VERSION < 3
+    if (likely(PyInt_Check(x))) {
+        if (sizeof(PCMGCycleType) < sizeof(long)) {
+            __PYX_VERIFY_RETURN_INT(PCMGCycleType, long, PyInt_AS_LONG(x))
+        } else {
+            long val = PyInt_AS_LONG(x);
+            if (is_unsigned && unlikely(val < 0)) {
+                goto raise_neg_overflow;
+            }
+            return (PCMGCycleType) 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 (PCMGCycleType) 0;
+                case  1: __PYX_VERIFY_RETURN_INT(PCMGCycleType, digit, digits[0])
+                case 2:
+                    if (8 * sizeof(PCMGCycleType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCMGCycleType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCMGCycleType) >= 2 * PyLong_SHIFT) {
+                            return (PCMGCycleType) (((((PCMGCycleType)digits[1]) << PyLong_SHIFT) | (PCMGCycleType)digits[0]));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PCMGCycleType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCMGCycleType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCMGCycleType) >= 3 * PyLong_SHIFT) {
+                            return (PCMGCycleType) (((((((PCMGCycleType)digits[2]) << PyLong_SHIFT) | (PCMGCycleType)digits[1]) << PyLong_SHIFT) | (PCMGCycleType)digits[0]));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PCMGCycleType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCMGCycleType, 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(PCMGCycleType) >= 4 * PyLong_SHIFT) {
+                            return (PCMGCycleType) (((((((((PCMGCycleType)digits[3]) << PyLong_SHIFT) | (PCMGCycleType)digits[2]) << PyLong_SHIFT) | (PCMGCycleType)digits[1]) << PyLong_SHIFT) | (PCMGCycleType)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 (PCMGCycleType) -1;
+                if (unlikely(result == 1))
+                    goto raise_neg_overflow;
+            }
+#endif
+            if (sizeof(PCMGCycleType) <= sizeof(unsigned long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCMGCycleType, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
+            } else if (sizeof(PCMGCycleType) <= sizeof(unsigned PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCMGCycleType, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
+            }
+        } else {
+#if CYTHON_USE_PYLONG_INTERNALS
+            const digit* digits = ((PyLongObject*)x)->ob_digit;
+            switch (Py_SIZE(x)) {
+                case  0: return (PCMGCycleType) 0;
+                case -1: __PYX_VERIFY_RETURN_INT(PCMGCycleType, sdigit, (sdigit) (-(sdigit)digits[0]))
+                case  1: __PYX_VERIFY_RETURN_INT(PCMGCycleType,  digit, +digits[0])
+                case -2:
+                    if (8 * sizeof(PCMGCycleType) - 1 > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCMGCycleType, long, -(long) (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCMGCycleType) - 1 > 2 * PyLong_SHIFT) {
+                            return (PCMGCycleType) (((PCMGCycleType)-1)*(((((PCMGCycleType)digits[1]) << PyLong_SHIFT) | (PCMGCycleType)digits[0])));
+                        }
+                    }
+                    break;
+                case 2:
+                    if (8 * sizeof(PCMGCycleType) > 1 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 2 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCMGCycleType, unsigned long, (((((unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCMGCycleType) - 1 > 2 * PyLong_SHIFT) {
+                            return (PCMGCycleType) ((((((PCMGCycleType)digits[1]) << PyLong_SHIFT) | (PCMGCycleType)digits[0])));
+                        }
+                    }
+                    break;
+                case -3:
+                    if (8 * sizeof(PCMGCycleType) - 1 > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCMGCycleType, long, -(long) (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCMGCycleType) - 1 > 3 * PyLong_SHIFT) {
+                            return (PCMGCycleType) (((PCMGCycleType)-1)*(((((((PCMGCycleType)digits[2]) << PyLong_SHIFT) | (PCMGCycleType)digits[1]) << PyLong_SHIFT) | (PCMGCycleType)digits[0])));
+                        }
+                    }
+                    break;
+                case 3:
+                    if (8 * sizeof(PCMGCycleType) > 2 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 3 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCMGCycleType, unsigned long, (((((((unsigned long)digits[2]) << PyLong_SHIFT) | (unsigned long)digits[1]) << PyLong_SHIFT) | (unsigned long)digits[0])))
+                        } else if (8 * sizeof(PCMGCycleType) - 1 > 3 * PyLong_SHIFT) {
+                            return (PCMGCycleType) ((((((((PCMGCycleType)digits[2]) << PyLong_SHIFT) | (PCMGCycleType)digits[1]) << PyLong_SHIFT) | (PCMGCycleType)digits[0])));
+                        }
+                    }
+                    break;
+                case -4:
+                    if (8 * sizeof(PCMGCycleType) - 1 > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCMGCycleType, 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(PCMGCycleType) - 1 > 4 * PyLong_SHIFT) {
+                            return (PCMGCycleType) (((PCMGCycleType)-1)*(((((((((PCMGCycleType)digits[3]) << PyLong_SHIFT) | (PCMGCycleType)digits[2]) << PyLong_SHIFT) | (PCMGCycleType)digits[1]) << PyLong_SHIFT) | (PCMGCycleType)digits[0])));
+                        }
+                    }
+                    break;
+                case 4:
+                    if (8 * sizeof(PCMGCycleType) > 3 * PyLong_SHIFT) {
+                        if (8 * sizeof(unsigned long) > 4 * PyLong_SHIFT) {
+                            __PYX_VERIFY_RETURN_INT(PCMGCycleType, 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(PCMGCycleType) - 1 > 4 * PyLong_SHIFT) {
+                            return (PCMGCycleType) ((((((((((PCMGCycleType)digits[3]) << PyLong_SHIFT) | (PCMGCycleType)digits[2]) << PyLong_SHIFT) | (PCMGCycleType)digits[1]) << PyLong_SHIFT) | (PCMGCycleType)digits[0])));
+                        }
+                    }
+                    break;
+            }
+#endif
+            if (sizeof(PCMGCycleType) <= sizeof(long)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCMGCycleType, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
+            } else if (sizeof(PCMGCycleType) <= sizeof(PY_LONG_LONG)) {
+                __PYX_VERIFY_RETURN_INT_EXC(PCMGCycleType, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
+            }
+        }
+        {
+#if CYTHON_COMPILING_IN_PYPY && !defined(_PyLong_AsByteArray)
+            PyErr_SetString(PyExc_RuntimeError,
+                            "_PyLong_AsByteArray() not available in PyPy, cannot convert large numbers");
+#else
+            PCMGCycleType 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 (PCMGCycleType) -1;
+        }
+    } else {
+        PCMGCycleType val;
+        PyObject *tmp = __Pyx_PyNumber_IntOrLong(x);
+        if (!tmp) return (PCMGCycleType) -1;
+        val = __Pyx_PyInt_As_PCMGCycleType(tmp);
+        Py_DECREF(tmp);
+        return val;
+    }
+raise_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "value too large to convert to PCMGCycleType");
+    return (PCMGCycleType) -1;
+raise_neg_overflow:
+    PyErr_SetString(PyExc_OverflowError,
+        "can't convert negative value to PCMGCycleType");
+    return (PCMGCycleType) -1;
+}
+
+/* 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
@@ -267496,8 +289358,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(PCSide) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PCSide, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(PCSide) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PCSide, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -267564,8 +289428,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(PCSide) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PCSide, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(PCSide) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(PCSide, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -267614,7 +289480,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE KSPNormType __Pyx_PyInt_As_KSPNormType(PyObject *x) {
+              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
@@ -267681,8 +289547,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(KSPNormType) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(KSPNormType, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(KSPNormType) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(KSPNormType, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -267749,8 +289617,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(KSPNormType) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(KSPNormType, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(KSPNormType) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(KSPNormType, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -267799,7 +289669,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE SNESNormSchedule __Pyx_PyInt_As_SNESNormSchedule(PyObject *x) {
+              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 PY_MAJOR_VERSION < 3
@@ -267866,8 +289736,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(SNESNormSchedule) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(SNESNormSchedule, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(SNESNormSchedule) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(SNESNormSchedule, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -267934,8 +289806,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(SNESNormSchedule) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(SNESNormSchedule, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(SNESNormSchedule) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(SNESNormSchedule, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -267984,7 +289858,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE TSProblemType __Pyx_PyInt_As_TSProblemType(PyObject *x) {
+              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 PY_MAJOR_VERSION < 3
@@ -268051,8 +289925,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(TSProblemType) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(TSProblemType, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(TSProblemType) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(TSProblemType, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -268119,8 +289995,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(TSProblemType) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(TSProblemType, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(TSProblemType) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(TSProblemType, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -268169,7 +290047,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE TSEquationType __Pyx_PyInt_As_TSEquationType(PyObject *x) {
+              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 PY_MAJOR_VERSION < 3
@@ -268236,8 +290114,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(TSEquationType) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(TSEquationType, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(TSEquationType) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(TSEquationType, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -268304,8 +290184,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(TSEquationType) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(TSEquationType, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(TSEquationType) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(TSEquationType, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -268354,7 +290236,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE TSExactFinalTimeOption __Pyx_PyInt_As_TSExactFinalTimeOption(PyObject *x) {
+              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
@@ -268421,8 +290303,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(TSExactFinalTimeOption) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(TSExactFinalTimeOption, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(TSExactFinalTimeOption) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(TSExactFinalTimeOption, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -268489,8 +290373,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(TSExactFinalTimeOption) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(TSExactFinalTimeOption, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(TSExactFinalTimeOption) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(TSExactFinalTimeOption, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -268539,7 +290425,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE TSConvergedReason __Pyx_PyInt_As_TSConvergedReason(PyObject *x) {
+              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
@@ -268606,8 +290492,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(TSConvergedReason) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(TSConvergedReason, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(TSConvergedReason) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(TSConvergedReason, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -268674,8 +290562,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(TSConvergedReason) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(TSConvergedReason, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(TSConvergedReason) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(TSConvergedReason, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -268724,7 +290614,7 @@ raise_neg_overflow:
 }
 
 /* CIntFromPy */
-                static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *x) {
+              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
@@ -268791,8 +290681,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(long) <= sizeof(unsigned long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(long, unsigned long, PyLong_AsUnsignedLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(long) <= sizeof(unsigned PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(long, unsigned PY_LONG_LONG, PyLong_AsUnsignedLongLong(x))
+#endif
             }
         } else {
 #if CYTHON_USE_PYLONG_INTERNALS
@@ -268859,8 +290751,10 @@ raise_neg_overflow:
 #endif
             if (sizeof(long) <= sizeof(long)) {
                 __PYX_VERIFY_RETURN_INT_EXC(long, long, PyLong_AsLong(x))
+#ifdef HAVE_LONG_LONG
             } else if (sizeof(long) <= sizeof(PY_LONG_LONG)) {
                 __PYX_VERIFY_RETURN_INT_EXC(long, PY_LONG_LONG, PyLong_AsLongLong(x))
+#endif
             }
         }
         {
@@ -268908,8 +290802,80 @@ raise_neg_overflow:
     return (long) -1;
 }
 
+/* FastTypeChecks */
+              #if CYTHON_COMPILING_IN_CPYTHON
+static int __Pyx_InBases(PyTypeObject *a, PyTypeObject *b) {
+    while (a) {
+        a = a->tp_base;
+        if (a == b)
+            return 1;
+    }
+    return b == &PyBaseObject_Type;
+}
+static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b) {
+    PyObject *mro;
+    if (a == b) return 1;
+    mro = a->tp_mro;
+    if (likely(mro)) {
+        Py_ssize_t i, n;
+        n = PyTuple_GET_SIZE(mro);
+        for (i = 0; i < n; i++) {
+            if (PyTuple_GET_ITEM(mro, i) == (PyObject *)b)
+                return 1;
+        }
+        return 0;
+    }
+    return __Pyx_InBases(a, b);
+}
+#if PY_MAJOR_VERSION == 2
+static int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject* exc_type2) {
+    PyObject *exception, *value, *tb;
+    int res;
+    __Pyx_PyThreadState_declare
+    __Pyx_PyThreadState_assign
+    __Pyx_ErrFetch(&exception, &value, &tb);
+    res = exc_type1 ? PyObject_IsSubclass(err, exc_type1) : 0;
+    if (unlikely(res == -1)) {
+        PyErr_WriteUnraisable(err);
+        res = 0;
+    }
+    if (!res) {
+        res = PyObject_IsSubclass(err, exc_type2);
+        if (unlikely(res == -1)) {
+            PyErr_WriteUnraisable(err);
+            res = 0;
+        }
+    }
+    __Pyx_ErrRestore(exception, value, tb);
+    return res;
+}
+#else
+static CYTHON_INLINE int __Pyx_inner_PyErr_GivenExceptionMatches2(PyObject *err, PyObject* exc_type1, PyObject *exc_type2) {
+    int res = exc_type1 ? __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type1) : 0;
+    if (!res) {
+        res = __Pyx_IsSubtype((PyTypeObject*)err, (PyTypeObject*)exc_type2);
+    }
+    return res;
+}
+#endif
+static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject* exc_type) {
+    if (likely(err == exc_type)) return 1;
+    if (likely(PyExceptionClass_Check(err))) {
+        return __Pyx_inner_PyErr_GivenExceptionMatches2(err, NULL, exc_type);
+    }
+    return PyErr_GivenExceptionMatches(err, exc_type);
+}
+static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *exc_type1, PyObject *exc_type2) {
+    if (likely(err == exc_type1 || err == exc_type2)) return 1;
+    if (likely(PyExceptionClass_Check(err))) {
+        return __Pyx_inner_PyErr_GivenExceptionMatches2(err, exc_type1, exc_type2);
+    }
+    return (PyErr_GivenExceptionMatches(err, exc_type1) || PyErr_GivenExceptionMatches(err, exc_type2));
+}
+#endif
+
 /* CheckBinaryVersion */
-                static int __Pyx_check_binary_version(void) {
+              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());
@@ -268925,7 +290891,7 @@ raise_neg_overflow:
 }
 
 /* FunctionExport */
-                static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig) {
+              static int __Pyx_ExportFunction(const char *name, void (*f)(void), const char *sig) {
     PyObject *d = 0;
     PyObject *cobj = 0;
     union {
@@ -268962,7 +290928,7 @@ bad:
 }
 
 /* TypeImport */
-                #ifndef __PYX_HAVE_RT_ImportType
+              #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)
@@ -269027,7 +290993,7 @@ bad:
 #endif
 
 /* InitStrings */
-                static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
+              static int __Pyx_InitStrings(__Pyx_StringTabEntry *t) {
     while (t->p) {
         #if PY_MAJOR_VERSION < 3
         if (t->is_unicode) {
@@ -269052,6 +291018,8 @@ bad:
         #endif
         if (!*t->p)
             return -1;
+        if (PyObject_Hash(*t->p) == -1)
+            PyErr_Clear();
         ++t;
     }
     return 0;
@@ -269060,50 +291028,57 @@ bad:
 static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char* c_str) {
     return __Pyx_PyUnicode_FromStringAndSize(c_str, (Py_ssize_t)strlen(c_str));
 }
-static CYTHON_INLINE char* __Pyx_PyObject_AsString(PyObject* o) {
+static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject* o) {
     Py_ssize_t ignore;
     return __Pyx_PyObject_AsStringAndSize(o, &ignore);
 }
-static CYTHON_INLINE char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
-#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 &&
-#endif
-            PyUnicode_Check(o)) {
-#if PY_VERSION_HEX < 0x03030000
-        char* defenc_c;
-        PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL);
-        if (!defenc) return NULL;
-        defenc_c = PyBytes_AS_STRING(defenc);
+#if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII || __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
+#if !CYTHON_PEP393_ENABLED
+static const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
+    char* defenc_c;
+    PyObject* defenc = _PyUnicode_AsDefaultEncodedString(o, NULL);
+    if (!defenc) return NULL;
+    defenc_c = PyBytes_AS_STRING(defenc);
 #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
-        {
-            char* end = defenc_c + PyBytes_GET_SIZE(defenc);
-            char* c;
-            for (c = defenc_c; c < end; c++) {
-                if ((unsigned char) (*c) >= 128) {
-                    PyUnicode_AsASCIIString(o);
-                    return NULL;
-                }
+    {
+        char* end = defenc_c + PyBytes_GET_SIZE(defenc);
+        char* c;
+        for (c = defenc_c; c < end; c++) {
+            if ((unsigned char) (*c) >= 128) {
+                PyUnicode_AsASCIIString(o);
+                return NULL;
             }
         }
+    }
 #endif
-        *length = PyBytes_GET_SIZE(defenc);
-        return defenc_c;
+    *length = PyBytes_GET_SIZE(defenc);
+    return defenc_c;
+}
 #else
-        if (__Pyx_PyUnicode_READY(o) == -1) return NULL;
+static CYTHON_INLINE const char* __Pyx_PyUnicode_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
+    if (unlikely(__Pyx_PyUnicode_READY(o) == -1)) return NULL;
 #if __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
-        if (PyUnicode_IS_ASCII(o)) {
-            *length = PyUnicode_GET_LENGTH(o);
-            return PyUnicode_AsUTF8(o);
-        } else {
-            PyUnicode_AsASCIIString(o);
-            return NULL;
-        }
+    if (likely(PyUnicode_IS_ASCII(o))) {
+        *length = PyUnicode_GET_LENGTH(o);
+        return PyUnicode_AsUTF8(o);
+    } else {
+        PyUnicode_AsASCIIString(o);
+        return NULL;
+    }
 #else
-        return PyUnicode_AsUTF8AndSize(o, length);
+    return PyUnicode_AsUTF8AndSize(o, length);
+#endif
+}
 #endif
 #endif
+static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject* o, Py_ssize_t *length) {
+#if __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 &&
+#endif
+            PyUnicode_Check(o)) {
+        return __Pyx_PyUnicode_AsStringAndSize(o, length);
     } else
 #endif
 #if (!CYTHON_COMPILING_IN_PYPY) || (defined(PyByteArray_AS_STRING) && defined(PyByteArray_GET_SIZE))
@@ -269127,43 +291102,67 @@ 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 PyObject* __Pyx_PyNumber_IntOrLongWrongResultType(PyObject* result, const char* type_name) {
+#if PY_MAJOR_VERSION >= 3
+    if (PyLong_Check(result)) {
+        if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
+                "__int__ returned non-int (type %.200s).  "
+                "The ability to return an instance of a strict subclass of int "
+                "is deprecated, and may be removed in a future version of Python.",
+                Py_TYPE(result)->tp_name)) {
+            Py_DECREF(result);
+            return NULL;
+        }
+        return result;
+    }
+#endif
+    PyErr_Format(PyExc_TypeError,
+                 "__%.4s__ returned non-%.4s (type %.200s)",
+                 type_name, type_name, Py_TYPE(result)->tp_name);
+    Py_DECREF(result);
+    return NULL;
+}
 static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x) {
+#if CYTHON_USE_TYPE_SLOTS
   PyNumberMethods *m;
+#endif
   const char *name = NULL;
   PyObject *res = NULL;
 #if PY_MAJOR_VERSION < 3
-  if (PyInt_Check(x) || PyLong_Check(x))
+  if (likely(PyInt_Check(x) || PyLong_Check(x)))
 #else
-  if (PyLong_Check(x))
+  if (likely(PyLong_Check(x)))
 #endif
     return __Pyx_NewRef(x);
+#if CYTHON_USE_TYPE_SLOTS
   m = Py_TYPE(x)->tp_as_number;
-#if PY_MAJOR_VERSION < 3
+  #if PY_MAJOR_VERSION < 3
   if (m && m->nb_int) {
     name = "int";
-    res = PyNumber_Int(x);
+    res = m->nb_int(x);
   }
   else if (m && m->nb_long) {
     name = "long";
-    res = PyNumber_Long(x);
+    res = m->nb_long(x);
   }
-#else
-  if (m && m->nb_int) {
+  #else
+  if (likely(m && m->nb_int)) {
     name = "int";
-    res = PyNumber_Long(x);
+    res = m->nb_int(x);
+  }
+  #endif
+#else
+  if (!PyBytes_CheckExact(x) && !PyUnicode_CheckExact(x)) {
+    res = PyNumber_Int(x);
   }
 #endif
-  if (res) {
+  if (likely(res)) {
 #if PY_MAJOR_VERSION < 3
-    if (!PyInt_Check(res) && !PyLong_Check(res)) {
+    if (unlikely(!PyInt_Check(res) && !PyLong_Check(res))) {
 #else
-    if (!PyLong_Check(res)) {
+    if (unlikely(!PyLong_CheckExact(res))) {
 #endif
-      PyErr_Format(PyExc_TypeError,
-                   "__%.4s__ returned non-%.4s (type %.200s)",
-                   name, name, Py_TYPE(res)->tp_name);
-      Py_DECREF(res);
-      return NULL;
+        return __Pyx_PyNumber_IntOrLongWrongResultType(res, name);
     }
   }
   else if (!PyErr_Occurred()) {
diff --git a/src/petsc4py.PETSc.pyx b/src/petsc4py.PETSc.pyx
index 08455f4..fd73fd5 100644
--- a/src/petsc4py.PETSc.pyx
+++ b/src/petsc4py.PETSc.pyx
@@ -1,6 +1,12 @@
 #cython: embedsignature=True
 #cython: cdivision=True
+#cython: binding=False
+#cython: auto_pickle=False
 #cython: always_allow_keywords=True
+#cython: allow_none_for_extension_args=False
 #cython: autotestdict=False
 #cython: warn.multiple_declarators=False
+#cython: optimize.use_switch=False
+from __future__ import absolute_import
+cimport cython
 include "PETSc/PETSc.pyx"
diff --git a/test/runtests.py b/test/runtests.py
index 4d2093b..dec3482 100644
--- a/test/runtests.py
+++ b/test/runtests.py
@@ -73,28 +73,25 @@ def setup_unittest(options):
     _WritelnDecorator.writeln = writeln
 
 def import_package(options, pkgname):
-    args=[sys.argv[0],
-          '-malloc',
-          '-malloc_debug',
-          '-malloc_dump',
-          '-log_summary',
-          ]
-    if not options.summary:
-        del args[-1]
+    args = [
+        sys.argv[0],
+        '-malloc',
+        '-malloc_debug',
+        '-malloc_dump',
+    ]
+    if options.summary:
+        args.append('-log_view')
     package = __import__(pkgname)
     package.init(args, arch=options.arch)
     return package
 
 def getprocessorinfo():
+    from platform import uname
     from petsc4py.PETSc import COMM_WORLD
     rank = COMM_WORLD.getRank()
-    name =  os.uname()[1]
+    name = uname()[1]
     return (rank, name)
 
-def getpythoninfo():
-    x, y = sys.version_info[:2]
-    return ("Python %d.%d (%s)" % (x, y, sys.executable))
-
 def getlibraryinfo():
     from petsc4py import PETSc
     (major, minor, micro) = PETSc.Sys.getVersion()
@@ -105,6 +102,10 @@ def getlibraryinfo():
     return ("PETSc %d.%d.%d %s (conf: '%s')"
             % (major, minor, micro, release, arch) )
     
+def getpythoninfo():
+    x, y = sys.version_info[:2]
+    return ("Python %d.%d (%s)" % (x, y, sys.executable))
+
 def getpackageinfo(pkg):
     return ("%s %s (%s)" % (pkg.__name__,
                             pkg.__version__,
@@ -156,27 +157,42 @@ def load_tests(options, args):
             testsuite.addTests(cases)
     return testsuite
 
-def run_tests(options, testsuite):
-    runner = unittest.TextTestRunner(verbosity=options.verbose)
-    runner.failfast = options.failfast
+def run_tests(options, testsuite, runner=None):
+    if runner is None:
+        runner = unittest.TextTestRunner(verbosity=options.verbose)
+        runner.failfast = options.failfast
     result = runner.run(testsuite)
     return result.wasSuccessful()
 
-def run_tests_leaks(options, testsuite):
+def test_refleaks(options, args):
     from sys import gettotalrefcount
     from gc import collect
+    from copy import deepcopy
+    testsuite = load_tests(options, args)
+    class EmptyIO(object):
+        def write(self, *args):
+            pass
+    runner = unittest.TextTestRunner(stream=EmptyIO(), verbosity=0)
     rank, name = getprocessorinfo()
     r1 = r2 = 0
     repeats = options.repeats
     while repeats:
-        repeats -= 1
         collect()
         r1 = gettotalrefcount()
-        run_tests(options, testsuite)
+        run_tests(options, deepcopy(testsuite), runner)
         collect()
         r2 = gettotalrefcount()
-        writeln('[%d@%s] refleaks:  (%d - %d) --> %d'
-                % (rank, name, r2, r1, r2-r1))
+        leaks = r2-r1
+        if leaks and repeats < options.repeats:
+            writeln('[%d@%s] refleaks:  (%d - %d) --> %d'
+                    % (rank, name, r2, r1, leaks))
+        repeats -= 1
+
+def abort(code=1):
+    os.abort()
+
+def shutdown(success):
+    pass
 
 def main(args=None):
     pkgname = 'petsc4py'
@@ -188,8 +204,10 @@ def main(args=None):
     print_banner(options, package)
     testsuite = load_tests(options, args)
     success = run_tests(options, testsuite)
+    if not success and options.failfast: abort()
     if success and hasattr(sys, 'gettotalrefcount'):
-        run_tests_leaks(options, testsuite)
+        test_refleaks(options, args)
+    shutdown(success)
     return not success
 
 if __name__ == '__main__':
diff --git a/test/test_dmda.py b/test/test_dmda.py
index d670320..4a057fe 100644
--- a/test/test_dmda.py
+++ b/test/test_dmda.py
@@ -123,6 +123,30 @@ class BaseTestDA(object):
         vg2 = self.da.createGlobalVec()
         self.da.localToGlobal(vl2,vg2)
 
+    def testGetVec(self):
+        vg = self.da.getGlobalVec()
+        vl = self.da.getLocalVec()
+        try:
+            vg.set(1.0)
+            self.assertEqual(vg.max()[1], 1.0)
+            self.assertEqual(vg.min()[1], 1.0)
+            self.da.globalToLocal(vg,vl)
+            self.assertEqual(vl.max()[1], 1.0)
+            self.assertTrue (vl.min()[1] in (1.0, 0.0))
+            vl.set(2.0)
+            NONE = PETSc.DM.BoundaryType.NONE
+            s = self.da.stencil_width
+            btype = self.da.boundary_type
+            psize = self.da.proc_sizes
+            for b, p in zip(btype, psize):
+                if b != NONE and p == 1: return
+            self.da.localToGlobal(vl,vg)
+            self.assertEqual(vg.max()[1], 2.0)
+            self.assertTrue (vg.min()[1] in (2.0, 0.0))
+        finally:
+            self.da.restoreGlobalVec(vg)
+            self.da.restoreLocalVec(vl)
+
     def testGetOther(self):
         ao = self.da.getAO()
         lgmap = self.da.getLGMap()
@@ -225,14 +249,17 @@ class TestDA_2D_W2_N2(TestDA_2D):
     DOF = 2
     SWIDTH = 2
 class TestDA_2D_PXY(TestDA_2D):
+    SIZES = [13*SCALE,17*SCALE]
     DOF = 2
     SWIDTH = 5
     BOUNDARY = (PERIODIC,)*2
 class TestDA_2D_GXY(TestDA_2D):
+    SIZES = [13*SCALE,17*SCALE]
     DOF = 2
     SWIDTH = 5
     BOUNDARY = (GHOSTED,)*2
 class TestDA_2D_TXY(TestDA_2D):
+    SIZES = [13*SCALE,17*SCALE]
     DOF = 2
     SWIDTH = 5
     BOUNDARY = (TWIST,)*2
@@ -250,14 +277,17 @@ class TestDA_3D_W2_N2(TestDA_3D):
     DOF = 2
     SWIDTH = 2
 class TestDA_3D_PXYZ(TestDA_3D):
+    SIZES = [11*SCALE,13*SCALE,17*SCALE]
     DOF = 2
     SWIDTH = 3
     BOUNDARY = (PERIODIC,)*3
 class TestDA_3D_GXYZ(TestDA_3D):
+    SIZES = [11*SCALE,13*SCALE,17*SCALE]
     DOF = 2
     SWIDTH = 3
     BOUNDARY = (GHOSTED,)*3
 class TestDA_3D_TXYZ(TestDA_3D):
+    SIZES = [11*SCALE,13*SCALE,17*SCALE]
     DOF = 2
     SWIDTH = 3
     BOUNDARY = (TWIST,)*3
diff --git a/test/test_dmplex.py b/test/test_dmplex.py
index 51f2468..7ef90fa 100644
--- a/test/test_dmplex.py
+++ b/test/test_dmplex.py
@@ -4,6 +4,8 @@ import numpy as np
 
 # --------------------------------------------------------------------
 
+ERR_SUP = 56
+
 class BaseTestPlex(object):
 
     COMM = PETSc.COMM_WORLD
@@ -53,6 +55,33 @@ class BaseTestPlex(object):
                 for i in support:
                     self.assertIn(i, star)
 
+    def testAdjacency(self):
+        setAdjacencyUseList = [
+            PETSc.DMPlex.setAdjacencyUseCone,
+            PETSc.DMPlex.setAdjacencyUseClosure,
+            PETSc.DMPlex.setAdjacencyUseAnchors]
+        getAdjacencyUseList = [
+            PETSc.DMPlex.getAdjacencyUseCone,
+            PETSc.DMPlex.getAdjacencyUseClosure,
+            PETSc.DMPlex.getAdjacencyUseAnchors]
+        for getAdjacencyUse, expected in \
+            zip(getAdjacencyUseList, [False, True, False]):
+            flag = getAdjacencyUse(self.plex)
+            self.assertEqual(flag, expected)
+        for setAdjacencyUse, getAdjacencyUse in \
+            zip(setAdjacencyUseList, getAdjacencyUseList):
+            setAdjacencyUse(self.plex, False)
+            flag = getAdjacencyUse(self.plex)
+            self.assertFalse(flag)
+            setAdjacencyUse(self.plex)
+            flag = getAdjacencyUse(self.plex)
+            self.assertTrue(flag)
+        pStart, pEnd = self.plex.getChart()
+        for p in range(pStart, pEnd):
+            adjacency = self.plex.getAdjacency(p)
+            self.assertTrue(p in adjacency)
+            self.assertTrue(len(adjacency) > 1)
+
     def testSectionDofs(self):
         section = self.plex.createSection([self.COMP], [self.DOFS])
         size = section.getStorageSize()
@@ -98,6 +127,22 @@ class BaseTestPlex(object):
         self.assertNotEqual(numInterior, pEnd - pStart)
         self.assertEqual(numBoundary + numInterior, pEnd - pStart)
 
+
+    def testAdapt(self):
+        dim = self.plex.getDimension()
+        if dim == 1: return
+        vStart, vEnd = self.plex.getDepthStratum(0)
+        numVertices = vEnd-vStart
+        metric_array = np.zeros([numVertices,dim,dim])
+        for met in metric_array:
+            met[:,:] = np.diag([9]*dim)
+        metric = PETSc.Vec().createWithArray(metric_array)
+        try:
+            newplex = self.plex.adaptMetric(metric,"")
+        except PETSc.Error as exc:
+            if exc.ierr != ERR_SUP: raise
+
+
 # --------------------------------------------------------------------
 
 class BaseTestPlex_2D(BaseTestPlex):
diff --git a/test/test_dmshell.py b/test/test_dmshell.py
index 27b4b94..98df164 100644
--- a/test/test_dmshell.py
+++ b/test/test_dmshell.py
@@ -79,15 +79,15 @@ class TestDMShell(unittest.TestCase):
     def testGlobalToLocal(self):
         def begin(dm, ivec, mode, ovec):
             if mode == PETSc.InsertMode.INSERT_VALUES:
-                ivec.copy(ovec)
+                ovec[...] = ivec[...]
             elif mode == PETSc.InsertMode.ADD_VALUES:
-                ovec.axpy(1.0, ivec)
+                ovec[...] += ivec[...]
         def end(dm, ivec, mode, ovec):
             pass
         vec = PETSc.Vec().create(comm=self.COMM)
         vec.setSizes((10, None))
         vec.setUp()
-        vec.set(self.dm.comm.rank + 1)
+        vec[...] = self.dm.comm.rank + 1
         ovec = PETSc.Vec().create(comm=PETSc.COMM_SELF)
         ovec.setSizes((10, None))
         ovec.setUp()
@@ -100,15 +100,15 @@ class TestDMShell(unittest.TestCase):
     def testLocalToGlobal(self):
         def begin(dm, ivec, mode, ovec):
             if mode == PETSc.InsertMode.INSERT_VALUES:
-                ivec.copy(ovec)
+                ovec[...] = ivec[...]
             elif mode == PETSc.InsertMode.ADD_VALUES:
-                ovec.axpy(1.0, ivec)
+                ovec[...] += ivec[...]
         def end(dm, ivec, mode, ovec):
             pass
         vec = PETSc.Vec().create(comm=PETSc.COMM_SELF)
         vec.setSizes((10, None))
         vec.setUp()
-        vec.set(self.dm.comm.rank + 1)
+        vec[...] = self.dm.comm.rank + 1
         ovec = PETSc.Vec().create(comm=self.COMM)
         ovec.setSizes((10, None))
         ovec.setUp()
@@ -120,17 +120,16 @@ class TestDMShell(unittest.TestCase):
 
     def testLocalToLocal(self):
         def begin(dm, ivec, mode, ovec):
-            pass
-        def end(dm, ivec, mode, ovec):
             if mode == PETSc.InsertMode.INSERT_VALUES:
-                ivec.copy(ovec)
+                ovec[...] = ivec[...]
             elif mode == PETSc.InsertMode.ADD_VALUES:
-                ovec.axpy(1.0, ivec)
-
+                ovec[...] += ivec[...]
+        def end(dm, ivec, mode, ovec):
+            pass
         vec = PETSc.Vec().create(comm=PETSc.COMM_SELF)
         vec.setSizes((10, None))
         vec.setUp()
-        vec.set(self.dm.comm.rank + 1)
+        vec[...] = self.dm.comm.rank + 1
         ovec = vec.duplicate()
         self.dm.setLocalToLocal(begin, end)
         self.dm.localToLocal(vec, ovec, addv=PETSc.InsertMode.INSERT_VALUES)
@@ -156,7 +155,6 @@ class TestDMShell(unittest.TestCase):
         sct, ovec = PETSc.Scatter.toAll(vec)
         self.dm.setGlobalToLocalVecScatter(sct)
         self.dm.globalToLocal(vec, ovec, addv=PETSc.InsertMode.INSERT_VALUES)
-        self.assertTrue(np.allclose(vec.getArray(), ovec.getArray()))
 
     def testLocalToGlobalVecScatter(self):
         vec = PETSc.Vec().create()
@@ -165,7 +163,6 @@ class TestDMShell(unittest.TestCase):
         sct, ovec = PETSc.Scatter.toAll(vec)
         self.dm.setLocalToGlobalVecScatter(sct)
         self.dm.localToGlobal(vec, ovec, addv=PETSc.InsertMode.INSERT_VALUES)
-        self.assertTrue(np.allclose(vec.getArray(), ovec.getArray()))
 
     def testLocalToLocalVecScatter(self):
         vec = PETSc.Vec().create()
@@ -174,7 +171,6 @@ class TestDMShell(unittest.TestCase):
         sct, ovec = PETSc.Scatter.toAll(vec)
         self.dm.setLocalToLocalVecScatter(sct)
         self.dm.localToLocal(vec, ovec, addv=PETSc.InsertMode.INSERT_VALUES)
-        self.assertTrue(np.allclose(vec.getArray(), ovec.getArray()))
 
     def testCoarsenRefine(self):
         cdm = PETSc.DMShell().create(comm=self.COMM)
diff --git a/test/test_ksp.py b/test/test_ksp.py
index 43bfd0b..0501e93 100644
--- a/test/test_ksp.py
+++ b/test/test_ksp.py
@@ -185,8 +185,8 @@ class TestKSPCG(BaseTestKSP, unittest.TestCase):
 class TestKSPCGNE(BaseTestKSP, unittest.TestCase):
     KSP_TYPE = PETSc.KSP.Type.CGNE
 
-class TestKSPSTCG(BaseTestKSP, unittest.TestCase):
-    KSP_TYPE = PETSc.KSP.Type.STCG
+class TestKSPCGSTCG(BaseTestKSP, unittest.TestCase):
+    KSP_TYPE = PETSc.KSP.Type.CGSTCG
 
 class TestKSPBCGS(BaseTestKSP, unittest.TestCase):
     KSP_TYPE = PETSc.KSP.Type.BCGS
@@ -213,7 +213,7 @@ class TestKSPFGMRES(BaseTestKSP, unittest.TestCase):
 # --------------------------------------------------------------------
 
 if PETSc.ScalarType().dtype.char in 'FDG':
-    del TestKSPSTCG
+    del TestKSPCGSTCG
 
 # --------------------------------------------------------------------
 
diff --git a/test/test_mat_aij.py b/test/test_mat_aij.py
index 6c207f7..b4c7266 100644
--- a/test/test_mat_aij.py
+++ b/test/test_mat_aij.py
@@ -204,7 +204,7 @@ class BaseTestMatAnyAIJ(object):
             tmp[i-s,:,:] = N.linalg.inv(vals)
         self.assertTrue(N.allclose(ibdiag, tmp))
 
-    def testGetSubMatrix(self):
+    def testCreateSubMatrix(self):
         if 'baij' in self.A.getType(): return # XXX
         self._preallocate()
         self._set_values_ijv()
@@ -218,17 +218,17 @@ class BaseTestMatAnyAIJ(object):
         rows = PETSc.IS().createGeneral(rows, comm=self.A.getComm())
         cols = PETSc.IS().createGeneral(cols, comm=self.A.getComm())
         #
-        S = self.A.getSubMatrix(rows, None)
+        S = self.A.createSubMatrix(rows, None)
         S.zeroEntries()
-        self.A.getSubMatrix(rows, None, S)
+        self.A.createSubMatrix(rows, None, S)
         S.destroy()
         #
-        S = self.A.getSubMatrix(rows, cols)
+        S = self.A.createSubMatrix(rows, cols)
         S.zeroEntries()
-        self.A.getSubMatrix(rows, cols, S)
+        self.A.createSubMatrix(rows, cols, S)
         S.destroy()
 
-    def testGetSubMatrices(self):
+    def testCreateSubMatrices(self):
         if 'baij' in self.A.getType(): return # XXX
         self._preallocate()
         self._set_values_ijv()
@@ -241,32 +241,33 @@ class BaseTestMatAnyAIJ(object):
         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,) = self.A.createSubMatrices(rows, cols)
         S.zeroEntries()
-        self.A.getSubMatrices(rows, cols, submats=[S])
+        self.A.createSubMatrices(rows, cols, submats=[S])
         S.destroy()
         #
-        (S1,) = self.A.getSubMatrices([rows], [cols])
-        (S2,) = self.A.getSubMatrices([rows], [cols])
+        (S1,) = self.A.createSubMatrices([rows], [cols])
+        (S2,) = self.A.createSubMatrices([rows], [cols])
         self.assertTrue(S1.equal(S2))
         S2.zeroEntries()
-        self.A.getSubMatrices([rows], [cols], [S2])
+        self.A.createSubMatrices([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])
+        S1, S2 = self.A.createSubMatrices([rows, rows], [cols, cols])
         self.assertTrue(S1.equal(S2))
         S1.zeroEntries()
         S2.zeroEntries()
-        self.A.getSubMatrices([rows, rows], [cols, cols], [S1, S2])
+        self.A.createSubMatrices([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
+        if 'mpisbaij' in self.A.getType(): return # not working
         self._preallocate()
         self._set_values_ijv()
         self.A.assemble()
diff --git a/test/test_snes.py b/test/test_snes.py
index a28f80d..ee4faa0 100644
--- a/test/test_snes.py
+++ b/test/test_snes.py
@@ -62,6 +62,11 @@ class BaseTestSNES(object):
         snes.its = 0
         self.assertEqual(snes.its, 0)
         #
+        snes.norm = 1
+        self.assertEqual(snes.norm, 1)
+        snes.norm = 0
+        self.assertEqual(snes.norm, 0)
+        #
         rh, ih = snes.history
         self.assertTrue(len(rh)==0)
         self.assertTrue(len(ih)==0)
diff --git a/test/test_sys.py b/test/test_sys.py
index daea07c..b736638 100644
--- a/test/test_sys.py
+++ b/test/test_sys.py
@@ -8,9 +8,6 @@ class TestVersion(unittest.TestCase):
     def testGetVersion(self):
         version = PETSc.Sys.getVersion()
         self.assertTrue(version > (0, 0, 0))
-        v, patch = PETSc.Sys.getVersion(patch=True)
-        self.assertTrue(version == v)
-        self.assertTrue(patch >= 0)
         v, date = PETSc.Sys.getVersion(date=True)
         self.assertTrue(version == v)
         self.assertTrue(isinstance(date, str))
@@ -26,8 +23,6 @@ class TestVersion(unittest.TestCase):
                           info['minor'],
                           info['subminor'],))
         self.assertTrue(isinstance(info['release'], bool))
-        _, patch = PETSc.Sys.getVersion(patch=True)
-        self.assertEqual(patch, info['patch'])
         v, date = PETSc.Sys.getVersion(date=True)
         self.assertEqual(date, info['date'])
 
diff --git a/test/test_ts.py b/test/test_ts.py
index bdac7d3..6e9a7d7 100644
--- a/test/test_ts.py
+++ b/test/test_ts.py
@@ -104,7 +104,8 @@ class BaseTestTSNonlinearRHS(BaseTestTSNonlinear):
         T = T0 + nT*dT
         ts.setTime(T0)
         ts.setTimeStep(dT)
-        ts.setDuration(T, nT)
+        ts.setMaxTime(T)
+        ts.setMaxSteps(nT)
         ts.setFromOptions()
         u[0], u[1], u[2] = 1, 2, 3
         ts.solve(u)
@@ -143,7 +144,8 @@ class BaseTestTSNonlinearRHS(BaseTestTSNonlinear):
         T = T0 + nT*dT
         ts.setTime(T0)
         ts.setTimeStep(dT)
-        ts.setDuration(T, nT)
+        ts.setMaxTime(T)
+        ts.setMaxSteps(nT)
         ts.setFromOptions()
         u[0], u[1], u[2] = 1, 2, 3
 
@@ -155,8 +157,10 @@ class BaseTestTSNonlinearRHS(BaseTestTSNonlinear):
 
     def testResetAndSolveRHS(self):
         self.ts.reset()
+        self.ts.setStepNumber(0)
         self.testSolveRHS()
         self.ts.reset()
+        self.ts.setStepNumber(0)
         self.testSolveRHS()
         self.ts.reset()
 
@@ -186,7 +190,8 @@ class BaseTestTSNonlinearI(BaseTestTSNonlinear):
         T = T0 + nT*dT
         ts.setTime(T0)
         ts.setTimeStep(dT)
-        ts.setDuration(T, nT)
+        ts.setMaxTime(T)
+        ts.setMaxSteps(nT)
         ts.setFromOptions()
         u[0], u[1], u[2] = 1, 2, 3
         ts.solve(u)
@@ -226,7 +231,8 @@ class BaseTestTSNonlinearI(BaseTestTSNonlinear):
         T = T0 + nT*dT
         ts.setTime(T0)
         ts.setTimeStep(dT)
-        ts.setDuration(T, nT)
+        ts.setMaxTime(T)
+        ts.setMaxSteps(nT)
         ts.setFromOptions()
         u[0], u[1], u[2] = 1, 2, 3
 
@@ -238,8 +244,10 @@ class BaseTestTSNonlinearI(BaseTestTSNonlinear):
 
     def testResetAndSolveI(self):
         self.ts.reset()
+        self.ts.setStepNumber(0)
         self.testSolveI()
         self.ts.reset()
+        self.ts.setStepNumber(0)
         self.testSolveI()
         self.ts.reset()
 
diff --git a/test/test_ts_py.py b/test/test_ts_py.py
index f2b01ac..2813ca3 100644
--- a/test/test_ts_py.py
+++ b/test/test_ts_py.py
@@ -107,7 +107,6 @@ class TestTSPython(unittest.TestCase):
         ts.setTimeStep(dT)
         ts.setMaxTime(T)
         ts.setMaxSteps(nT)
-        ts.setDuration(T, nT)
         ts.setFromOptions()
         u[0], u[1], u[2] = 1, 2, 3
         ts.solve(u)
@@ -146,7 +145,8 @@ class TestTSPython(unittest.TestCase):
         T = T0 + nT*dT
         ts.setTime(T0)
         ts.setTimeStep(dT)
-        ts.setDuration(T, nT)
+        ts.setMaxTime(T)
+        ts.setMaxSteps(nT)
         ts.setFromOptions()
         u[:] = 1, 2, 3, 4, 5
 
@@ -158,10 +158,13 @@ class TestTSPython(unittest.TestCase):
 
     def testResetAndSolve(self):
         self.ts.reset()
+        self.ts.setStepNumber(0)
         self.testSolve()
         self.ts.reset()
+        self.ts.setStepNumber(0)
         self.testFDColor()
         self.ts.reset()
+        self.ts.setStepNumber(0)
         self.testSolve()
         self.ts.reset()
 

-- 
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